├── .classpath ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_requiest.md └── pull_request_template.md ├── .gitignore ├── .project ├── .settings ├── edu.umd.cs.findbugs.core.prefs ├── org.eclipse.jdt.core.prefs └── org.eclipse.m2e.core.prefs ├── LICENSE ├── README.md ├── assembly.xml ├── dist-includes ├── README.url ├── battlelog │ └── .gitkeep ├── config │ └── .gitkeep ├── launch.bat ├── logs │ └── .gitkeep ├── plugins │ └── .gitkeep ├── resources │ └── .gitkeep └── sounds │ ├── alert │ └── readme.txt │ ├── mission │ └── readme.txt │ └── ndock │ └── readme.txt ├── faq.md ├── how-to-build.md ├── how-to-develop.md ├── how-to-preference.md ├── images ├── battlelog1.png ├── battlelog2.png ├── chrome_1.png ├── chrome_2.png ├── chrome_3.png ├── chrome_4.png ├── firefox_1.png ├── firefox_2.png ├── firefox_3.png ├── items1.png ├── items2.png └── overview.png ├── pom-java11.xml ├── pom.xml └── src ├── main ├── java │ ├── logbook │ │ ├── Messages.java │ │ ├── api │ │ │ ├── API.java │ │ │ ├── APIListenerSpi.java │ │ │ ├── ApiGetMemberBasic.java │ │ │ ├── ApiGetMemberDeck.java │ │ │ ├── ApiGetMemberKdock.java │ │ │ ├── ApiGetMemberMapinfo.java │ │ │ ├── ApiGetMemberMaterial.java │ │ │ ├── ApiGetMemberNdock.java │ │ │ ├── ApiGetMemberPresetDeck.java │ │ │ ├── ApiGetMemberQuestlist.java │ │ │ ├── ApiGetMemberRequireInfo.java │ │ │ ├── ApiGetMemberShip2.java │ │ │ ├── ApiGetMemberShip3.java │ │ │ ├── ApiGetMemberShipDeck.java │ │ │ ├── ApiGetMemberSlotItem.java │ │ │ ├── ApiPortPort.java │ │ │ ├── ApiReqAirCorpsSetAction.java │ │ │ ├── ApiReqAirCorpsSetPlane.java │ │ │ ├── ApiReqAirCorpsSupply.java │ │ │ ├── ApiReqBattleMidnightBattle.java │ │ │ ├── ApiReqBattleMidnightSpMidnight.java │ │ │ ├── ApiReqCombinedBattleAirbattle.java │ │ │ ├── ApiReqCombinedBattleBattle.java │ │ │ ├── ApiReqCombinedBattleBattleWater.java │ │ │ ├── ApiReqCombinedBattleBattleresult.java │ │ │ ├── ApiReqCombinedBattleEachBattle.java │ │ │ ├── ApiReqCombinedBattleEcBattle.java │ │ │ ├── ApiReqCombinedBattleEcMidnightBattle.java │ │ │ ├── ApiReqCombinedBattleEcNightToDay.java │ │ │ ├── ApiReqCombinedBattleGobackPort.java │ │ │ ├── ApiReqCombinedBattleLdAirbattle.java │ │ │ ├── ApiReqCombinedBattleMidnightBattle.java │ │ │ ├── ApiReqCombinedBattleSpMidnight.java │ │ │ ├── ApiReqHenseiChange.java │ │ │ ├── ApiReqHenseiCombined.java │ │ │ ├── ApiReqHenseiPresetSelect.java │ │ │ ├── ApiReqHokyuCharge.java │ │ │ ├── ApiReqKaisouMarriage.java │ │ │ ├── ApiReqKaisouPowerup.java │ │ │ ├── ApiReqKaisouSlotDeprive.java │ │ │ ├── ApiReqKaisouSlotExchangeIndex.java │ │ │ ├── ApiReqKousyouCreateitem.java │ │ │ ├── ApiReqKousyouCreateship.java │ │ │ ├── ApiReqKousyouCreateshipSpeedchange.java │ │ │ ├── ApiReqKousyouDestroyitem2.java │ │ │ ├── ApiReqKousyouDestroyship.java │ │ │ ├── ApiReqKousyouGetship.java │ │ │ ├── ApiReqKousyouRemodelSlot.java │ │ │ ├── ApiReqKousyouRemodelSlotlist.java │ │ │ ├── ApiReqMapNext.java │ │ │ ├── ApiReqMapStart.java │ │ │ ├── ApiReqMemberItemuse.java │ │ │ ├── ApiReqMissionResult.java │ │ │ ├── ApiReqMissionStart.java │ │ │ ├── ApiReqNyukyoSpeedchange.java │ │ │ ├── ApiReqNyukyoStart.java │ │ │ ├── ApiReqPracticeBattle.java │ │ │ ├── ApiReqPracticeBattleresult.java │ │ │ ├── ApiReqPracticeMidnightBattle.java │ │ │ ├── ApiReqQuestClearitemget.java │ │ │ ├── ApiReqQuestStop.java │ │ │ ├── ApiReqSortieAirbattle.java │ │ │ ├── ApiReqSortieBattle.java │ │ │ ├── ApiReqSortieBattleresult.java │ │ │ ├── ApiReqSortieLdAirbattle.java │ │ │ ├── ApiReqSortieLdShooting.java │ │ │ └── ApiStart2.java │ │ ├── bean │ │ │ ├── AppBouyomiConfig.java │ │ │ ├── AppCondition.java │ │ │ ├── AppConfig.java │ │ │ ├── AppDeck.java │ │ │ ├── AppDeckCollection.java │ │ │ ├── AppItemTableConfig.java │ │ │ ├── AppQuest.java │ │ │ ├── AppQuestCollection.java │ │ │ ├── AppQuestCondition.java │ │ │ ├── AppQuestDuration.java │ │ │ ├── AppSeaAreaExp.java │ │ │ ├── AppSeaAreaExpCollection.java │ │ │ ├── AppShipTableConfig.java │ │ │ ├── Basic.java │ │ │ ├── BattleLog.java │ │ │ ├── BattleLogScriptCollection.java │ │ │ ├── BattleMidnightBattle.java │ │ │ ├── BattleMidnightSpMidnight.java │ │ │ ├── BattleResult.java │ │ │ ├── BattleTypes.java │ │ │ ├── Chara.java │ │ │ ├── CombinedBattleAirbattle.java │ │ │ ├── CombinedBattleBattle.java │ │ │ ├── CombinedBattleBattleWater.java │ │ │ ├── CombinedBattleEachBattle.java │ │ │ ├── CombinedBattleEcBattle.java │ │ │ ├── CombinedBattleEcMidnightBattle.java │ │ │ ├── CombinedBattleEcNightToDay.java │ │ │ ├── CombinedBattleLdAirbattle.java │ │ │ ├── CombinedBattleMidnightBattle.java │ │ │ ├── CombinedBattleSpMidnight.java │ │ │ ├── Createitem.java │ │ │ ├── Createship.java │ │ │ ├── CreateshipCollection.java │ │ │ ├── DeckPort.java │ │ │ ├── DeckPortCollection.java │ │ │ ├── Enemy.java │ │ │ ├── Friend.java │ │ │ ├── Kdock.java │ │ │ ├── MapStartNext.java │ │ │ ├── MapTypes.java │ │ │ ├── Maparea.java │ │ │ ├── MapareaCollection.java │ │ │ ├── Mapinfo.java │ │ │ ├── MapinfoMst.java │ │ │ ├── MapinfoMstCollection.java │ │ │ ├── Material.java │ │ │ ├── Mission.java │ │ │ ├── MissionCollection.java │ │ │ ├── MissionCondition.java │ │ │ ├── MissionResult.java │ │ │ ├── Ndock.java │ │ │ ├── NdockCollection.java │ │ │ ├── ParameterFilterConfig.java │ │ │ ├── QuestList.java │ │ │ ├── Ship.java │ │ │ ├── ShipCollection.java │ │ │ ├── ShipLabelCollection.java │ │ │ ├── ShipMst.java │ │ │ ├── ShipMstCollection.java │ │ │ ├── Shipgraph.java │ │ │ ├── ShipgraphCollection.java │ │ │ ├── SlotItem.java │ │ │ ├── SlotItemCollection.java │ │ │ ├── SlotitemEquiptype.java │ │ │ ├── SlotitemEquiptypeCollection.java │ │ │ ├── SlotitemMst.java │ │ │ ├── SlotitemMstCollection.java │ │ │ ├── SortieAirbattle.java │ │ │ ├── SortieBattle.java │ │ │ ├── SortieLdAirbattle.java │ │ │ ├── SortieLdShooting.java │ │ │ ├── Spritesmith.java │ │ │ ├── Stype.java │ │ │ ├── StypeCollection.java │ │ │ ├── TestAllPredicate.java │ │ │ ├── Useitem.java │ │ │ ├── UseitemCollection.java │ │ │ └── WindowLocation.java │ │ ├── internal │ │ │ ├── APIListener.java │ │ │ ├── AirBases.java │ │ │ ├── Audios.java │ │ │ ├── BattleLogs.java │ │ │ ├── BiImage.java │ │ │ ├── BouyomiChan.java │ │ │ ├── BouyomiChanUtils.java │ │ │ ├── CheckUpdate.java │ │ │ ├── CheckUpdateStartUp.java │ │ │ ├── ComparableFilter.java │ │ │ ├── Config.java │ │ │ ├── ExpTable.java │ │ │ ├── ImageListener.java │ │ │ ├── Items.java │ │ │ ├── JsonHelper.java │ │ │ ├── Launcher.java │ │ │ ├── LoggerHolder.java │ │ │ ├── Logs.java │ │ │ ├── Mapping.java │ │ │ ├── MissionLogs.java │ │ │ ├── Missions.java │ │ │ ├── Operator.java │ │ │ ├── PhaseState.java │ │ │ ├── QuestCollect.java │ │ │ ├── Rank.java │ │ │ ├── ReferenceCache.java │ │ │ ├── SeaArea.java │ │ │ ├── ShipFilter.java │ │ │ ├── ShipImage.java │ │ │ ├── ShipImageCacheStrategy.java │ │ │ ├── ShipType.java │ │ │ ├── ShipTypeGroup.java │ │ │ ├── Ships.java │ │ │ ├── SlotItemType.java │ │ │ ├── ThreadManager.java │ │ │ ├── Time.java │ │ │ ├── ToStringConverter.java │ │ │ ├── Tuple.java │ │ │ ├── Version.java │ │ │ ├── gui │ │ │ │ ├── AirBaseController.java │ │ │ │ ├── AirBaseItem.java │ │ │ │ ├── AkashiTimerPane.java │ │ │ │ ├── BattleDetail.java │ │ │ │ ├── BattleDetailPhase.java │ │ │ │ ├── BattleDetailPhaseShip.java │ │ │ │ ├── BattleDetailPhaseStage1.java │ │ │ │ ├── BattleDetailPhaseStage2.java │ │ │ │ ├── BattleLogCollect.java │ │ │ │ ├── BattleLogController.java │ │ │ │ ├── BattleLogDetail.java │ │ │ │ ├── BattleLogDetailAggregate.java │ │ │ │ ├── BattleLogScriptController.java │ │ │ │ ├── CalcExpController.java │ │ │ │ ├── CalcExpSeaAreaEditorController.java │ │ │ │ ├── CaptureController.java │ │ │ │ ├── CaptureSaveController.java │ │ │ │ ├── ColumnVisibleController.java │ │ │ │ ├── ConfigController.java │ │ │ │ ├── CreateItemController.java │ │ │ │ ├── CreatePacFileController.java │ │ │ │ ├── Deck.java │ │ │ │ ├── DeckBuilder.java │ │ │ │ ├── DeckFleetPane.java │ │ │ │ ├── DeckShipPane.java │ │ │ │ ├── DetailItem.java │ │ │ │ ├── DetailPlugin.java │ │ │ │ ├── ExpChartController.java │ │ │ │ ├── FleetTabPane.java │ │ │ │ ├── FleetTabShipPane.java │ │ │ │ ├── FleetTabShipPopup.java │ │ │ │ ├── InternalFXMLLoader.java │ │ │ │ ├── Item.java │ │ │ │ ├── ItemAirBaseController.java │ │ │ │ ├── ItemController.java │ │ │ │ ├── ItemFilter.java │ │ │ │ ├── ItemItemController.java │ │ │ │ ├── Main.java │ │ │ │ ├── MainController.java │ │ │ │ ├── MainMenuController.java │ │ │ │ ├── MissionAggregate.java │ │ │ │ ├── MissionCheck.java │ │ │ │ ├── MissionLogCollect.java │ │ │ │ ├── MissionLogController.java │ │ │ │ ├── MissionLogDetail.java │ │ │ │ ├── MissionPane.java │ │ │ │ ├── NdockPane.java │ │ │ │ ├── ParameterFilterPane.java │ │ │ │ ├── PopOver.java │ │ │ │ ├── PopOverPane.java │ │ │ │ ├── PopupSelectbox.java │ │ │ │ ├── PopupSelectboxContainer.java │ │ │ │ ├── PropertyDialog.java │ │ │ │ ├── QuestPane.java │ │ │ │ ├── QuestProgress.java │ │ │ │ ├── RequireNdock.java │ │ │ │ ├── RequireNdockController.java │ │ │ │ ├── ResourceChartController.java │ │ │ │ ├── ResourceTable.java │ │ │ │ ├── ScreenCapture.java │ │ │ │ ├── ShipController.java │ │ │ │ ├── ShipItem.java │ │ │ │ ├── ShipTablePane.java │ │ │ │ ├── ShortageShipItem.java │ │ │ │ ├── StatisticsPane.java │ │ │ │ ├── SuggestSupport.java │ │ │ │ ├── TableTool.java │ │ │ │ ├── TextEditorPane.java │ │ │ │ ├── Tools.java │ │ │ │ ├── TreeTableTool.java │ │ │ │ ├── VersionController.java │ │ │ │ └── WindowController.java │ │ │ ├── log │ │ │ │ ├── BattleResultLogFormat.java │ │ │ │ ├── CreateitemLogFormat.java │ │ │ │ ├── CreateshipLogFormat.java │ │ │ │ ├── LogFormat.java │ │ │ │ ├── LogFormatBase.java │ │ │ │ ├── LogWriter.java │ │ │ │ ├── MaterialLogFormat.java │ │ │ │ └── MissionResultLogFormat.java │ │ │ └── proxy │ │ │ │ ├── ByteArrayInputStream2.java │ │ │ │ ├── CaptureHolder.java │ │ │ │ ├── Filter.java │ │ │ │ ├── ProxyHolder.java │ │ │ │ ├── ProxyServerImpl.java │ │ │ │ ├── ProxyServlet.java │ │ │ │ ├── RequestContentListener.java │ │ │ │ └── ReverseProxyServlet.java │ │ ├── plugin │ │ │ ├── JarBasedPlugin.java │ │ │ ├── PluginContainer.java │ │ │ ├── PluginServices.java │ │ │ ├── gui │ │ │ │ ├── FleetTabRemark.java │ │ │ │ ├── MainCalcMenu.java │ │ │ │ ├── MainCommandMenu.java │ │ │ │ ├── MainExtMenu.java │ │ │ │ ├── Plugin.java │ │ │ │ └── Updateable.java │ │ │ └── lifecycle │ │ │ │ └── StartUp.java │ │ └── proxy │ │ │ ├── ContentListenerSpi.java │ │ │ ├── ProxyServerSpi.java │ │ │ ├── RequestMetaData.java │ │ │ └── ResponseMetaData.java │ └── org │ │ └── apache │ │ └── logging │ │ └── log4j │ │ ├── LogManager.java │ │ └── Logger.java └── resources │ ├── LICENSE │ ├── META-INF │ └── services │ │ ├── logbook.api.APIListenerSpi │ │ ├── logbook.plugin.gui.FleetTabRemark │ │ ├── logbook.plugin.lifecycle.StartUp │ │ ├── logbook.proxy.ContentListenerSpi │ │ └── logbook.proxy.ProxyServerSpi │ ├── logback.xml │ └── logbook │ ├── bouyomi │ └── settings.json │ ├── capture_options │ ├── Windows_gdigrab_h264.json │ ├── Windows_gdigrab_h265.json │ ├── Windows_gdigrab_huffyuv.json │ ├── Windows_gdigrab_mpeg4.json │ └── list.json │ ├── gui │ ├── airbase.css │ ├── airbase.fxml │ ├── akashi_timer.fxml │ ├── alv1.png │ ├── alv2.png │ ├── alv3.png │ ├── alv4.png │ ├── alv5.png │ ├── alv6.png │ ├── alv7.png │ ├── application.css │ ├── application_large1.css │ ├── application_large2.css │ ├── battle_detail.css │ ├── battle_detail.fxml │ ├── battle_detail_phase.fxml │ ├── battle_detail_phase_ship.fxml │ ├── battle_detail_phase_stage1.fxml │ ├── battle_detail_phase_stage2.fxml │ ├── battlelog.css │ ├── battlelog.fxml │ ├── battlelog_dialog.fxml │ ├── battlelog_script.fxml │ ├── battlelog_script_sample.js │ ├── calc_exp.css │ ├── calc_exp.fxml │ ├── calc_exp_area.fxml │ ├── capture.css │ ├── capture.fxml │ ├── capturesave.fxml │ ├── column_visible.fxml │ ├── config.css │ ├── config.fxml │ ├── create_pac_file.fxml │ ├── createitemlog.fxml │ ├── deck.css │ ├── deck.fxml │ ├── deck_fleet.fxml │ ├── deck_ship.fxml │ ├── exp_chart.fxml │ ├── fleet_ship.fxml │ ├── fleet_tab.css │ ├── fleet_tab.fxml │ ├── fleet_tab_popup.fxml │ ├── fleet_tab_popup_item.css │ ├── fleet_tab_popup_item.fxml │ ├── fleet_tab_popup_rate.css │ ├── fleet_tab_popup_rate.fxml │ ├── icon.svg │ ├── icon_128x128.png │ ├── icon_16x16.png │ ├── icon_256x256.png │ ├── icon_32x32.png │ ├── icon_48x48.png │ ├── icon_64x64.png │ ├── item.css │ ├── item.fxml │ ├── item_airbase.fxml │ ├── item_item.fxml │ ├── main.css │ ├── main.fxml │ ├── main_menu.fxml │ ├── main_wide.fxml │ ├── mission.fxml │ ├── missioncheck.fxml │ ├── missionlog.fxml │ ├── ndock.fxml │ ├── param_filter_pane.fxml │ ├── pop-over.css │ ├── pop-over.fxml │ ├── popup-selectbox.css │ ├── popup-selectbox.fxml │ ├── popup.css │ ├── quest.fxml │ ├── quest_progress.css │ ├── quest_progress.fxml │ ├── require_ndock.fxml │ ├── resource_chart.css │ ├── resource_chart.fxml │ ├── ship.css │ ├── ship.fxml │ ├── ship_table.fxml │ ├── statistics.css │ ├── statistics.fxml │ ├── text_editor_pane.fxml │ ├── text_editor_pane.html │ ├── version.css │ └── version.fxml │ ├── map │ └── mapping.json │ ├── messages.properties │ ├── mission │ ├── 1 │ │ ├── 01.json │ │ ├── 02.json │ │ ├── 03.json │ │ ├── 04.json │ │ ├── 05.json │ │ ├── 06.json │ │ ├── 07.json │ │ ├── 08.json │ │ ├── A1.json │ │ ├── A2.json │ │ ├── A3.json │ │ ├── A4.json │ │ ├── A5.json │ │ └── A6.json │ ├── 2 │ │ ├── 09.json │ │ ├── 10.json │ │ ├── 11.json │ │ ├── 12.json │ │ ├── 13.json │ │ ├── 14.json │ │ ├── 15.json │ │ ├── 16.json │ │ ├── B1.json │ │ ├── B2.json │ │ ├── B3.json │ │ ├── B4.json │ │ └── B5.json │ ├── 3 │ │ ├── 17.json │ │ ├── 18.json │ │ ├── 19.json │ │ ├── 20.json │ │ ├── 21.json │ │ ├── 22.json │ │ ├── 23.json │ │ └── 24.json │ ├── 4 │ │ ├── 25.json │ │ ├── 26.json │ │ ├── 27.json │ │ ├── 28.json │ │ ├── 29.json │ │ ├── 30.json │ │ ├── 31.json │ │ ├── 32.json │ │ ├── D1.json │ │ └── D2.json │ ├── 5 │ │ ├── 33.json │ │ ├── 34.json │ │ ├── 35.json │ │ ├── 36.json │ │ ├── 37.json │ │ ├── 38.json │ │ ├── 39.json │ │ ├── 40.json │ │ └── E1.json │ └── 7 │ │ ├── 41.json │ │ ├── 42.json │ │ ├── 43.json │ │ ├── 44.json │ │ └── 45.json │ ├── proxy.pac │ ├── quest │ ├── 201.json │ ├── 210.json │ ├── 211.json │ ├── 212.json │ ├── 213.json │ ├── 214.json │ ├── 216.json │ ├── 218.json │ ├── 220.json │ ├── 221.json │ ├── 226.json │ ├── 228.json │ ├── 229.json │ ├── 230.json │ ├── 241.json │ ├── 242.json │ ├── 243.json │ ├── 249.json │ ├── 256.json │ ├── 257.json │ ├── 259.json │ ├── 261.json │ ├── 264.json │ ├── 265.json │ ├── 266.json │ ├── 280.json │ ├── 284.json │ ├── 402.json │ ├── 403.json │ ├── 404.json │ ├── 410.json │ ├── 411.json │ ├── 424.json │ ├── 426.json │ ├── 428.json │ ├── 434.json │ ├── 436.json │ ├── 437.json │ ├── 438.json │ ├── 822.json │ ├── 845.json │ ├── 854.json │ ├── 862.json │ ├── 872.json │ ├── 873.json │ ├── 875.json │ ├── 888.json │ ├── 893.json │ ├── 894.json │ ├── 903.json │ └── list.md │ ├── supplemental │ └── ships.json │ └── update │ └── update.js └── test ├── java └── logbook │ ├── bean │ ├── AppQuestDurationTest.java │ ├── BattleMidnightBattleTest.java │ └── SortieBattleTest.java │ ├── internal │ └── VersionTest.java │ ├── map │ └── MappingGenerator.java │ └── plugin │ └── JarBasedPluginTest.java └── resources └── logbook ├── bean ├── get_member_questlist.json ├── req_battle_midnight_battle.json └── req_sortie_battle.json └── plugin ├── plugin-test-case1.jar.bin ├── plugin-test-case2.jar.bin ├── plugin-test-case3.jar.bin └── plugin-test-case4.jar.bin /.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 問題報告(バグ報告) 3 | about: 動作に問題がある場合はこちらから 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### 問題概要 11 | 問題の内容を記述してください。 12 | 例:... を装備していると ... ビューが開かない。 13 | 14 | ### 再現方法 15 | 問題の再現手順を記述してください。バグを修正するには問題再現がもっとも重要なので、可能な限り確実に再現できる手順の記載をお願いします。特に毎回起きるのか、ある特定の条件を満たす必要があるのか、などは問題解析に非常に重要な情報になります。 16 | 17 | (例) 18 | 1. '...' を開く 19 | 2. '....' をクリックする 20 | 3. '.....' というエラーが出る 21 | 22 | ### 本来予想される動作 23 | 本来どのように動作すべきかを記述してください。 24 | 例:装備にかかわらず ... ビューが開く 25 | 26 | ### スクリーンショット 27 | もし問題を表現するのに画像が適切であれば添付してください。コピペできます。 28 | 29 | ### 動作環境 30 | - OS: 31 | - Java: 32 | - Version: 33 | 34 | ### その他 35 | もしあればなんでも。 36 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_requiest.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 機能拡張 3 | about: 機能拡張のリクエストはこちらから 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### 機能拡張で解決したい課題 11 | その機能拡張で何を解決したいのか、機能拡張を希望する理由を記述してください。 12 | 例:入渠の表示で空きスロットが表示されていないので不便です。 13 | 14 | ### 実装してほしい機能について 15 | どのような機能を実装すれば上記の課題が解決すると思うか記述してください。 16 | 例:入渠ドックの空きスロットも表示してほしいです。 17 | 18 | ### その他 19 | もし他に何かあればなんでも。 20 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | #### 問題解析 2 | もしあれば問題解析の詳細を記述する。 3 | 4 | #### 変更内容 5 | 変更内容を記述する。 6 | 7 | #### 関連するIssue 8 | Fixes #nnn (if any) 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | 3 | # Mobile Tools for Java (J2ME) 4 | .mtj.tmp/ 5 | 6 | # Package Files # 7 | *.jar 8 | *.war 9 | *.ear 10 | 11 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 12 | hs_err_pid* 13 | 14 | # working directory for the logbook 15 | /target/ 16 | /lib/ 17 | /dest/ 18 | /battlelog/ 19 | /config/ 20 | /logs/ 21 | /plugins/ 22 | /resources/ 23 | /sounds/ 24 | /launch.bat 25 | /README.url 26 | /*.csv 27 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | logbook-kai 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.m2e.core.maven2Nature 22 | 23 | 24 | -------------------------------------------------------------------------------- /.settings/org.eclipse.m2e.core.prefs: -------------------------------------------------------------------------------- 1 | activeProfiles= 2 | eclipse.preferences.version=1 3 | resolveWorkspaceProjects=true 4 | version=1 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 sanaehirotaka 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /assembly.xml: -------------------------------------------------------------------------------- 1 | 2 | dist 3 | 4 | 5 | zip 6 | 7 | 8 | false 9 | 10 | 11 | 12 | target/${project.name}.jar 13 | 14 | 15 | 16 | 17 | 18 | dist-includes 19 | / 20 | 21 | */.gitkeep 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /dist-includes/README.url: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=https://github.com/sanaehirotaka/logbook-kai/blob/master/README.md 3 | IconFile=https://assets-cdn.github.com/favicon.ico 4 | IconIndex=1 5 | -------------------------------------------------------------------------------- /dist-includes/battlelog/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/dist-includes/battlelog/.gitkeep -------------------------------------------------------------------------------- /dist-includes/config/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/dist-includes/config/.gitkeep -------------------------------------------------------------------------------- /dist-includes/launch.bat: -------------------------------------------------------------------------------- 1 | SET JVM_OPT=-XX:MaxMetaspaceSize=256M 2 | START javaw %JVM_OPT% -jar logbook-kai.jar 3 | -------------------------------------------------------------------------------- /dist-includes/logs/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/dist-includes/logs/.gitkeep -------------------------------------------------------------------------------- /dist-includes/plugins/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/dist-includes/plugins/.gitkeep -------------------------------------------------------------------------------- /dist-includes/resources/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/dist-includes/resources/.gitkeep -------------------------------------------------------------------------------- /dist-includes/sounds/alert/readme.txt: -------------------------------------------------------------------------------- 1 | このフォルダに出撃中に大破したときのサウンドファイルを置きます。 2 | サブフォルダ内のファイルも読み込みます。 3 | -------------------------------------------------------------------------------- /dist-includes/sounds/mission/readme.txt: -------------------------------------------------------------------------------- 1 | このフォルダ遠征から帰投したときのサウンドファイルを置きます。 2 | サブフォルダ内のファイルも読み込みます。 3 | -------------------------------------------------------------------------------- /dist-includes/sounds/ndock/readme.txt: -------------------------------------------------------------------------------- 1 | このフォルダにお風呂から上がるときのサウンドファイルを置きます。 2 | サブフォルダ内のファイルも読み込みます。 3 | -------------------------------------------------------------------------------- /faq.md: -------------------------------------------------------------------------------- 1 | # FAQ 2 | 3 | ## 画像が表示されません 4 | 5 | * 画像は通信内容をキャプチャして収集しています。画像が表示されない場合はブラウザキャッシュを削除してからログインし直すと 6 | 画像を収集できるようになります(一度に収集できるわけではなく、キャッシュ削除後にゲーム画面(母港や編成画面等)で**表示した**艦娘の画像が収集されます) 7 | 8 | ## キャプチャで座標が認識されません 9 | 10 | * 幅800px×高さ480pxで白色に囲まれた範囲をゲーム画面として認識します。ゲーム画面の大きさを変更している、または白色で囲まれていない、複数のモニターにまたがった位置にゲーム画面がある場合 11 | は座標の認識が出来ませんのでご注意ください。 12 | 13 | ## 通知機能でサポートされるメディア 14 | 15 | エンコーディング 16 | 17 | * **AAC** 18 | * **MP3** 19 | * **PCM** (非圧縮のみ) 20 | * **H.264/AVC** 21 | * **VP6** 22 | 23 | 拡張子 24 | 25 | * **AIFF :** .aif, .aiff 26 | * **FXM, FLV:** .fxm, .flv 27 | * **HLS :** .m3u8 28 | * **HLS :** .m3u8 29 | * **MP3 :** .mp3 30 | * **MP4 :** .mp4, .m4a, .m4v 31 | * **WAV :** .wav 32 | 33 | ## 「資材チャート」または「出撃統計」が見られなくなりました 34 | 35 | * 「資材ログ.csv」などのCSVファイルをExcel等の表計算ソフトで上書き保存してしまうと日付の形式が変わってしまい、読み込むことができなくなります。読み込めなくなってしまった場合再度Excelで開き、日付列の書式を**yyyy-mm-dd hh:mm:ss**に設定して上書き保存してください。 36 | 37 | -------------------------------------------------------------------------------- /how-to-build.md: -------------------------------------------------------------------------------- 1 | # ビルド手順 2 | 3 | ## ビルド 4 | 5 | 以下のコマンドを実行して、ビルドします 6 | 7 | ``` 8 | mvn package 9 | ``` 10 | -------------------------------------------------------------------------------- /how-to-develop.md: -------------------------------------------------------------------------------- 1 | # プラグイン開発 2 | 3 | 航海日誌ではプラグイン開発のために以下のインターフェイスを用意しています。 4 | 5 | これらの実装クラスのは[ServiceLoader](http://docs.oracle.com/javase/jp/8/docs/api/java/util/ServiceLoader.html)より取得されます。 6 | 実装クラスが呼び出されるようにするには META-INF/services/**インターフェイス名** に実装クラスの完全修飾名を記述します 7 | 8 | ## 外部向けインターフェイス 9 | 10 | 起動時に1度だけ行う処理 11 | * [logbook.plugin.lifecycle.StartUp](src/main/java/logbook/plugin/lifecycle/StartUp.java) 12 | 13 | メイン画面へのGUI要素の追加 14 | * [logbook.plugin.gui.MainCalcMenu](src/main/java/logbook/plugin/gui/MainCalcMenu.java) 15 | * [logbook.plugin.gui.MainCommandMenu](src/main/java/logbook/plugin/gui/MainCommandMenu.java) 16 | * [logbook.plugin.gui.MainExtMenu](src/main/java/logbook/plugin/gui/MainExtMenu.java) 17 | 18 | 艦隊タブの注釈へのGUI要素の追加 19 | * [logbook.plugin.gui.FleetTabRemark](src/main/java/logbook/plugin/gui/FleetTabRemark.java) 20 | 21 | 通信のキャプチャ 22 | * [logbook.proxy.ContentListenerSpi](src/main/java/logbook/proxy/ContentListenerSpi.java) 23 | * 関連クラス 24 | * [logbook.proxy.RequestMetaData](src/main/java/logbook/proxy/RequestMetaData.java) 25 | * [logbook.proxy.ResponseMetaData](src/main/java/logbook/proxy/ResponseMetaData.java) 26 | 27 | APIのキャプチャ 28 | * [logbook.api.APIListenerSpi](src/main/java/logbook/api/APIListenerSpi.java) 29 | 30 | プロキシサーバー 31 | * [logbook.proxy.ProxyServerSpi](src/main/java/logbook/proxy/ProxyServerSpi.java) 32 | * プロキシサーバーの実装が複数存在する場合、デフォルト実装以外の実装を1つだけ選択します。実装の選択方法は未定義です。 33 | * [デフォルト実装](src/main/java/logbook/internal/proxy/NettyProxyServer.java) 34 | -------------------------------------------------------------------------------- /images/battlelog1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/battlelog1.png -------------------------------------------------------------------------------- /images/battlelog2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/battlelog2.png -------------------------------------------------------------------------------- /images/chrome_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/chrome_1.png -------------------------------------------------------------------------------- /images/chrome_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/chrome_2.png -------------------------------------------------------------------------------- /images/chrome_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/chrome_3.png -------------------------------------------------------------------------------- /images/chrome_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/chrome_4.png -------------------------------------------------------------------------------- /images/firefox_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/firefox_1.png -------------------------------------------------------------------------------- /images/firefox_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/firefox_2.png -------------------------------------------------------------------------------- /images/firefox_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/firefox_3.png -------------------------------------------------------------------------------- /images/items1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/items1.png -------------------------------------------------------------------------------- /images/items2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/items2.png -------------------------------------------------------------------------------- /images/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/images/overview.png -------------------------------------------------------------------------------- /src/main/java/logbook/api/API.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * {@code APIListenerSpi}が受け入れるAPIのURIを表す注釈です。
10 | * 例えば次の記述は開発と建造時のみに受け入れることを表します。
11 | *

12 |  * @API({"/kcsapi/api_req_kousyou/createitem", "/kcsapi/api_req_kousyou/createship"})
13 |  * 
14 | * 15 | * @see logbook.api.APIListenerSpi 16 | */ 17 | @Target(ElementType.TYPE) 18 | @Retention(RetentionPolicy.RUNTIME) 19 | public @interface API { 20 | 21 | /** 22 | * APIのURIを返します 23 | * 24 | * @return APIのURI 25 | */ 26 | String[] value(); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/APIListenerSpi.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.proxy.RequestMetaData; 6 | import logbook.proxy.ResponseMetaData; 7 | 8 | /** 9 | * JSONオブジェクトを受け取るリスナーです。
10 | *
11 | * 実装クラスはServiceLoaderより取得されます。 12 | * 実装クラスが呼び出されるようにするには META-INF/services/logbook.api.APIListenerSpi に 13 | * 実装クラスの完全修飾名を記述します 14 | * 15 | * @see logbook.api.API 16 | * @see logbook.internal.APIListener 17 | */ 18 | public interface APIListenerSpi { 19 | 20 | /** 21 | * JSONオブジェクトを受け取ります。
22 | * 23 | * 実装クラスに{@link API}注釈が付与されている場合、{@link API}注釈が持つURIに対してのみ実装クラスが呼び出されます。 24 | * 実装クラスに{@link API}注釈が付与されていない場合、すべてのURIに対して実装クラスが呼び出されます。 25 | * 26 | * @param json APIのレスポンスに含まれるJSONオブジェクト 27 | * @param req リクエスト 28 | * @param res レスポンス 29 | * @see logbook.api.API 30 | */ 31 | void accept(JsonObject json, RequestMetaData req, ResponseMetaData res); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberBasic.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.Basic; 6 | import logbook.proxy.RequestMetaData; 7 | import logbook.proxy.ResponseMetaData; 8 | 9 | /** 10 | * /kcsapi/api_get_member/basic 11 | * 12 | */ 13 | @API("/kcsapi/api_get_member/basic") 14 | public class ApiGetMemberBasic implements APIListenerSpi { 15 | 16 | @Override 17 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 18 | JsonObject data = json.getJsonObject("api_data"); 19 | if (data != null) { 20 | Basic.updateBasic(Basic.get(), data); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberDeck.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.LinkedHashSet; 4 | import java.util.List; 5 | import java.util.Map; 6 | import java.util.stream.Collectors; 7 | 8 | import javax.json.JsonArray; 9 | import javax.json.JsonObject; 10 | 11 | import logbook.bean.DeckPort; 12 | import logbook.bean.DeckPortCollection; 13 | import logbook.internal.JsonHelper; 14 | import logbook.proxy.RequestMetaData; 15 | import logbook.proxy.ResponseMetaData; 16 | 17 | /** 18 | * /kcsapi/api_get_member/deck 19 | * 20 | */ 21 | @API("/kcsapi/api_get_member/deck") 22 | public class ApiGetMemberDeck implements APIListenerSpi { 23 | 24 | @Override 25 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 26 | JsonArray array = json.getJsonArray("api_data"); 27 | if (array != null) { 28 | Map deckMap = JsonHelper.toMap(array, DeckPort::getId, DeckPort::toDeckPort); 29 | DeckPortCollection.get() 30 | .setDeckPortMap(deckMap); 31 | DeckPortCollection.get() 32 | .setMissionShips(deckMap.values() 33 | .stream() 34 | .filter(d -> d.getMission().get(0) != 0) 35 | .map(DeckPort::getShip) 36 | .flatMap(List::stream) 37 | .collect(Collectors.toCollection(LinkedHashSet::new))); 38 | } 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberMapinfo.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.Mapinfo; 6 | import logbook.internal.JsonHelper; 7 | import logbook.proxy.RequestMetaData; 8 | import logbook.proxy.ResponseMetaData; 9 | 10 | /** 11 | * /kcsapi/api_get_member/mapinfo 12 | * 13 | */ 14 | @API("/kcsapi/api_get_member/mapinfo") 15 | public class ApiGetMemberMapinfo implements APIListenerSpi { 16 | 17 | @Override 18 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 19 | JsonObject object = json.getJsonObject("api_data"); 20 | if (object != null) { 21 | Mapinfo mapinfo = Mapinfo.get(); 22 | 23 | // 海域 24 | if (object.getJsonArray("api_map_info") != null) { 25 | mapinfo.setMapInfo(JsonHelper.toList(object.getJsonArray("api_map_info"), Mapinfo.MapInfo::toMapInfo)); 26 | } 27 | // 基地航空隊 28 | if (object.getJsonArray("api_air_base") != null) { 29 | mapinfo.setAirBase(JsonHelper.toList(object.getJsonArray("api_air_base"), Mapinfo.AirBase::toAirBase)); 30 | } else { 31 | mapinfo.getAirBase().clear(); 32 | } 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberMaterial.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.time.Duration; 4 | import java.util.Map; 5 | 6 | import javax.json.JsonArray; 7 | import javax.json.JsonObject; 8 | 9 | import logbook.bean.AppCondition; 10 | import logbook.bean.AppConfig; 11 | import logbook.bean.Material; 12 | import logbook.internal.JsonHelper; 13 | import logbook.internal.log.LogWriter; 14 | import logbook.internal.log.MaterialLogFormat; 15 | import logbook.proxy.RequestMetaData; 16 | import logbook.proxy.ResponseMetaData; 17 | 18 | /** 19 | * /kcsapi/api_get_member/material 20 | * 21 | */ 22 | @API("/kcsapi/api_get_member/material") 23 | public class ApiGetMemberMaterial implements APIListenerSpi { 24 | 25 | @Override 26 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 27 | JsonArray array = json.getJsonArray("api_data"); 28 | if (array != null) { 29 | Duration duration = Duration.ofMillis(System.currentTimeMillis() - AppCondition.get() 30 | .getWroteMaterialLogLast()); 31 | if (duration.compareTo(Duration.ofSeconds(AppConfig.get().getMaterialLogInterval())) >= 0) { 32 | Map material = JsonHelper.toMap(array, Material::getId, Material::toMaterial); 33 | LogWriter.getInstance(MaterialLogFormat::new) 34 | .write(material); 35 | AppCondition.get() 36 | .setWroteMaterialLogLast(System.currentTimeMillis()); 37 | } 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberPresetDeck.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.proxy.RequestMetaData; 6 | import logbook.proxy.ResponseMetaData; 7 | 8 | /** 9 | * /kcsapi/api_get_member/preset_deck 10 | * 11 | */ 12 | @API("/kcsapi/api_get_member/preset_deck") 13 | public class ApiGetMemberPresetDeck implements APIListenerSpi { 14 | 15 | @Override 16 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 17 | // TODO 自動生成されたメソッド・スタブ 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberQuestlist.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.AppQuestCollection; 6 | import logbook.bean.QuestList; 7 | import logbook.proxy.RequestMetaData; 8 | import logbook.proxy.ResponseMetaData; 9 | 10 | /** 11 | * /kcsapi/api_get_member/questlist 12 | * 13 | */ 14 | @API("/kcsapi/api_get_member/questlist") 15 | public class ApiGetMemberQuestlist implements APIListenerSpi { 16 | 17 | @Override 18 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 19 | JsonObject data = json.getJsonObject("api_data"); 20 | if (data != null) { 21 | QuestList quest = QuestList.toQuestList(data); 22 | 23 | AppQuestCollection.get() 24 | .update(quest, "0".equals(req.getParameter("api_tab_id"))); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberRequireInfo.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonArray; 4 | import javax.json.JsonObject; 5 | 6 | import logbook.bean.Basic; 7 | import logbook.bean.SlotItem; 8 | import logbook.bean.SlotItemCollection; 9 | import logbook.internal.JsonHelper; 10 | import logbook.proxy.RequestMetaData; 11 | import logbook.proxy.ResponseMetaData; 12 | 13 | /** 14 | * /kcsapi/api_get_member/require_info 15 | * 16 | */ 17 | @API("/kcsapi/api_get_member/require_info") 18 | public class ApiGetMemberRequireInfo implements APIListenerSpi { 19 | 20 | @Override 21 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 22 | JsonObject data = json.getJsonObject("api_data"); 23 | if (data != null) { 24 | this.apiBasic(data.getJsonObject("api_basic")); 25 | this.apiSlotItem(data.getJsonArray("api_slot_item")); 26 | } 27 | } 28 | 29 | /** 30 | * api_data.api_basic 31 | * 32 | * @param object api_basic 33 | */ 34 | private void apiBasic(JsonObject object) { 35 | Basic.updateBasic(Basic.get(), object); 36 | } 37 | 38 | /** 39 | * api_data.api_slot_item 40 | * 41 | * @param array api_slot_item 42 | */ 43 | private void apiSlotItem(JsonArray array) { 44 | SlotItemCollection.get() 45 | .setSlotitemMap(JsonHelper.toMap(array, SlotItem::getId, SlotItem::toSlotItem)); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiGetMemberSlotItem.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonArray; 4 | import javax.json.JsonObject; 5 | 6 | import logbook.bean.SlotItem; 7 | import logbook.bean.SlotItemCollection; 8 | import logbook.internal.JsonHelper; 9 | import logbook.proxy.RequestMetaData; 10 | import logbook.proxy.ResponseMetaData; 11 | 12 | /** 13 | * /kcsapi/api_get_member/slot_item 14 | * 15 | */ 16 | @API("/kcsapi/api_get_member/slot_item") 17 | public class ApiGetMemberSlotItem implements APIListenerSpi { 18 | 19 | @Override 20 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 21 | JsonArray array = json.getJsonArray("api_data"); 22 | if (array != null) { 23 | SlotItemCollection.get() 24 | .setSlotitemMap(JsonHelper.toMap(array, SlotItem::getId, SlotItem::toSlotItem)); 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqHenseiCombined.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Optional; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.bean.AppCondition; 8 | import logbook.proxy.RequestMetaData; 9 | import logbook.proxy.ResponseMetaData; 10 | 11 | /** 12 | * /kcsapi/api_req_hensei/combined 13 | * 14 | */ 15 | @API("/kcsapi/api_req_hensei/combined") 16 | public class ApiReqHenseiCombined implements APIListenerSpi { 17 | 18 | @Override 19 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 20 | Optional.ofNullable(req.getParameter("api_combined_type")) 21 | .map(Integer::valueOf) 22 | .ifPresent(type -> { 23 | AppCondition app = AppCondition.get(); 24 | app.setCombinedType(type); 25 | app.setCombinedFlag(type != 0); 26 | }); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqHenseiPresetSelect.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.DeckPort; 6 | import logbook.bean.DeckPortCollection; 7 | import logbook.internal.JsonHelper; 8 | import logbook.proxy.RequestMetaData; 9 | import logbook.proxy.ResponseMetaData; 10 | 11 | /** 12 | * /kcsapi/api_req_hensei/preset_select 13 | * 14 | */ 15 | @API("/kcsapi/api_req_hensei/preset_select") 16 | public class ApiReqHenseiPresetSelect implements APIListenerSpi { 17 | 18 | @Override 19 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 20 | JsonObject data = json.getJsonObject("api_data"); 21 | if (data != null) { 22 | Integer deckId = Integer.valueOf(req.getParameter("api_deck_id")); 23 | String name = data.getString("api_name"); 24 | DeckPort deckPort = DeckPortCollection.get() 25 | .getDeckPortMap() 26 | .get(deckId) 27 | .clone(); 28 | deckPort.setName(name); 29 | deckPort.setShip(JsonHelper.toIntegerList(data.getJsonArray("api_ship"))); 30 | 31 | DeckPortCollection.get() 32 | .getDeckPortMap() 33 | .put(deckId, deckPort); 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqHokyuCharge.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | import javax.json.JsonObject; 7 | 8 | import logbook.bean.Ship; 9 | import logbook.bean.ShipCollection; 10 | import logbook.internal.JsonHelper; 11 | import logbook.proxy.RequestMetaData; 12 | import logbook.proxy.ResponseMetaData; 13 | 14 | /** 15 | * /kcsapi/api_req_hokyu/charge 16 | * 17 | */ 18 | @API("/kcsapi/api_req_hokyu/charge") 19 | public class ApiReqHokyuCharge implements APIListenerSpi { 20 | 21 | @Override 22 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 23 | JsonObject data = json.getJsonObject("api_data"); 24 | if (data != null) { 25 | Map map = ShipCollection.get() 26 | .getShipMap(); 27 | 28 | List ships = JsonHelper.toList(data.getJsonArray("api_ship"), Ship::toShip); 29 | for (Ship ship : ships) { 30 | Ship oldShip = map.get(ship.getId()); 31 | Ship newShip = oldShip.clone(); 32 | newShip.setBull(ship.getBull()); 33 | newShip.setFuel(ship.getFuel()); 34 | newShip.setOnslot(ship.getOnslot()); 35 | map.put(ship.getId(), newShip); 36 | } 37 | } 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKaisouMarriage.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Map; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.bean.Ship; 8 | import logbook.bean.ShipCollection; 9 | import logbook.proxy.RequestMetaData; 10 | import logbook.proxy.ResponseMetaData; 11 | 12 | /** 13 | * /kcsapi/api_req_kaisou/marriage 14 | * 15 | */ 16 | @API("/kcsapi/api_req_kaisou/marriage") 17 | public class ApiReqKaisouMarriage implements APIListenerSpi { 18 | 19 | @Override 20 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 21 | JsonObject data = json.getJsonObject("api_data"); 22 | if (data != null) { 23 | Map shipMap = ShipCollection.get() 24 | .getShipMap(); 25 | 26 | Integer shipId = Integer.valueOf(req.getParameter("api_id")); 27 | shipMap.put(shipId, Ship.toShip(data)); 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKaisouSlotDeprive.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.Ship; 6 | import logbook.bean.ShipCollection; 7 | import logbook.proxy.RequestMetaData; 8 | import logbook.proxy.ResponseMetaData; 9 | 10 | /** 11 | * /kcsapi/api_req_kaisou/slot_deprive 12 | * 13 | */ 14 | @API("/kcsapi/api_req_kaisou/slot_deprive") 15 | public class ApiReqKaisouSlotDeprive implements APIListenerSpi { 16 | 17 | @Override 18 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 19 | JsonObject data = json.getJsonObject("api_data"); 20 | if (data != null) { 21 | JsonObject shipData = data.getJsonObject("api_ship_data"); 22 | if (shipData != null) { 23 | this.replace(shipData.getJsonObject("api_set_ship")); 24 | this.replace(shipData.getJsonObject("api_unset_ship")); 25 | } 26 | } 27 | } 28 | 29 | private void replace(JsonObject json) { 30 | Ship ship = Ship.toShip(json); 31 | ShipCollection.get() 32 | .getShipMap().put(ship.getId(), ship); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKaisouSlotExchangeIndex.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Map; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.bean.Ship; 8 | import logbook.bean.ShipCollection; 9 | import logbook.proxy.RequestMetaData; 10 | import logbook.proxy.ResponseMetaData; 11 | 12 | /** 13 | * /kcsapi/api_req_kaisou/slot_exchange_index 14 | * 15 | */ 16 | @API("/kcsapi/api_req_kaisou/slot_exchange_index") 17 | public class ApiReqKaisouSlotExchangeIndex implements APIListenerSpi { 18 | 19 | @Override 20 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 21 | JsonObject data = json.getJsonObject("api_data"); 22 | if (data != null) { 23 | Map shipMap = ShipCollection.get() 24 | .getShipMap(); 25 | 26 | Integer shipId = Integer.valueOf(req.getParameter("api_id")); 27 | shipMap.put(shipId, Ship.toShip(data.getJsonObject("api_ship_data"))); 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKousyouCreateship.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.Createship; 6 | import logbook.bean.CreateshipCollection; 7 | import logbook.proxy.RequestMetaData; 8 | import logbook.proxy.ResponseMetaData; 9 | 10 | /** 11 | * /kcsapi/api_req_kousyou/createship 12 | * 13 | */ 14 | @API("/kcsapi/api_req_kousyou/createship") 15 | public class ApiReqKousyouCreateship implements APIListenerSpi { 16 | 17 | @Override 18 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 19 | Createship createship = Createship.toCreateship(req); 20 | CreateshipCollection.get() 21 | .getCreateshipMap() 22 | .put(createship.getKdockId(), createship); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKousyouCreateshipSpeedchange.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.proxy.RequestMetaData; 6 | import logbook.proxy.ResponseMetaData; 7 | 8 | /** 9 | * /kcsapi/api_req_kousyou/createship_speedchange 10 | * 11 | */ 12 | @API("/kcsapi/api_req_kousyou/createship_speedchange") 13 | public class ApiReqKousyouCreateshipSpeedchange implements APIListenerSpi { 14 | 15 | @Override 16 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 17 | // TODO 自動生成されたメソッド・スタブ 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKousyouDestroyitem2.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Map; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.bean.SlotItem; 8 | import logbook.bean.SlotItemCollection; 9 | import logbook.proxy.RequestMetaData; 10 | import logbook.proxy.ResponseMetaData; 11 | 12 | /** 13 | * /kcsapi/api_req_kousyou/destroyitem2 14 | * 15 | */ 16 | @API("/kcsapi/api_req_kousyou/destroyitem2") 17 | public class ApiReqKousyouDestroyitem2 implements APIListenerSpi { 18 | 19 | @Override 20 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 21 | String apiSlotitemIds = req.getParameter("api_slotitem_ids"); 22 | if (apiSlotitemIds != null) { 23 | Map itemMap = SlotItemCollection.get() 24 | .getSlotitemMap(); 25 | for (String apiSlotitemId : apiSlotitemIds.split(",")) { 26 | Integer itemId = Integer.valueOf(apiSlotitemId); 27 | // 装備を廃棄する 28 | itemMap.remove(itemId); 29 | } 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKousyouRemodelSlot.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Map; 4 | 5 | import javax.json.JsonArray; 6 | import javax.json.JsonObject; 7 | 8 | import logbook.bean.SlotItem; 9 | import logbook.bean.SlotItemCollection; 10 | import logbook.internal.JsonHelper; 11 | import logbook.proxy.RequestMetaData; 12 | import logbook.proxy.ResponseMetaData; 13 | 14 | /** 15 | * /kcsapi/api_req_kousyou/remodel_slot 16 | * 17 | */ 18 | @API("/kcsapi/api_req_kousyou/remodel_slot") 19 | public class ApiReqKousyouRemodelSlot implements APIListenerSpi { 20 | 21 | @Override 22 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 23 | JsonObject data = json.getJsonObject("api_data"); 24 | if (data != null) { 25 | Map itemMap = SlotItemCollection.get() 26 | .getSlotitemMap(); 27 | 28 | // 改修後装備 29 | JsonObject afterSlot = data.getJsonObject("api_after_slot"); 30 | if (afterSlot != null) { 31 | SlotItem replace = SlotItem.toSlotItem(afterSlot); 32 | itemMap.put(replace.getId(), replace); 33 | } 34 | 35 | // 消費装備 36 | JsonArray useSlotId = data.getJsonArray("api_use_slot_id"); 37 | if (useSlotId != null) { 38 | for (Integer slotId : JsonHelper.toIntegerList(useSlotId)) { 39 | itemMap.remove(slotId); 40 | } 41 | } 42 | } 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqKousyouRemodelSlotlist.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.proxy.RequestMetaData; 6 | import logbook.proxy.ResponseMetaData; 7 | 8 | /** 9 | * /kcsapi/api_req_kousyou/remodel_slotlist 10 | * 11 | */ 12 | @API("/kcsapi/api_req_kousyou/remodel_slotlist") 13 | public class ApiReqKousyouRemodelSlotlist implements APIListenerSpi { 14 | 15 | @Override 16 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 17 | // TODO 自動生成されたメソッド・スタブ 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqMissionResult.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.MissionResult; 6 | import logbook.internal.log.LogWriter; 7 | import logbook.internal.log.MissionResultLogFormat; 8 | import logbook.proxy.RequestMetaData; 9 | import logbook.proxy.ResponseMetaData; 10 | 11 | /** 12 | * /kcsapi/api_req_mission/result 13 | * 14 | */ 15 | @API("/kcsapi/api_req_mission/result") 16 | public class ApiReqMissionResult implements APIListenerSpi { 17 | 18 | @Override 19 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 20 | 21 | JsonObject data = json.getJsonObject("api_data"); 22 | if (data != null) { 23 | MissionResult result = MissionResult.toMissionResult(data); 24 | 25 | LogWriter.getInstance(MissionResultLogFormat::new) 26 | .write(result); 27 | } 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqNyukyoStart.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Map; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.bean.Ship; 8 | import logbook.bean.ShipCollection; 9 | import logbook.proxy.RequestMetaData; 10 | import logbook.proxy.ResponseMetaData; 11 | 12 | /** 13 | * /kcsapi/api_req_nyukyo/start 14 | * 15 | */ 16 | @API("/kcsapi/api_req_nyukyo/start") 17 | public class ApiReqNyukyoStart implements APIListenerSpi { 18 | 19 | @Override 20 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 21 | Map map = ShipCollection.get() 22 | .getShipMap(); 23 | Integer shipId = Integer.valueOf(req.getParameter("api_ship_id")); 24 | Ship ship = map.get(shipId) 25 | .clone(); 26 | 27 | if ("1".equals(req.getParameter("api_highspeed"))) { 28 | ship.setNowhp(ship.getMaxhp()); 29 | ship.setNdockTime(0); 30 | if (ship.getCond() < 40) { 31 | ship.setCond(40); 32 | } 33 | } 34 | // 高速修復材未使用時でも入れ替える(艦隊タブを更新するため) 35 | map.put(shipId, ship); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqPracticeBattle.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Optional; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.bean.AppCondition; 8 | import logbook.bean.BattleLog; 9 | import logbook.bean.BattleTypes.IFormation; 10 | import logbook.bean.SortieBattle; 11 | import logbook.proxy.RequestMetaData; 12 | import logbook.proxy.ResponseMetaData; 13 | 14 | /** 15 | * /kcsapi/api_req_practice/battle 16 | * 17 | */ 18 | @API("/kcsapi/api_req_practice/battle") 19 | public class ApiReqPracticeBattle implements APIListenerSpi { 20 | 21 | @Override 22 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 23 | try { 24 | JsonObject data = json.getJsonObject("api_data"); 25 | if (data != null) { 26 | AppCondition condition = AppCondition.get(); 27 | BattleLog log = new BattleLog(); 28 | condition.setPracticeBattleResult(log); 29 | log.setPractice(true); 30 | log.setBattle(SortieBattle.toBattle(data)); 31 | // 出撃艦隊 32 | Integer dockId = Optional.ofNullable(log.getBattle()) 33 | .map(IFormation::getDockId) 34 | .orElse(1); 35 | // 艦隊スナップショットを作る 36 | BattleLog.snapshot(log, dockId); 37 | } 38 | } catch (Throwable e) { 39 | e.printStackTrace(); 40 | } 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqPracticeBattleresult.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import java.util.Optional; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.bean.AppCondition; 8 | import logbook.bean.BattleLog; 9 | import logbook.bean.BattleResult; 10 | import logbook.bean.BattleTypes.IFormation; 11 | import logbook.internal.Logs; 12 | import logbook.proxy.RequestMetaData; 13 | import logbook.proxy.ResponseMetaData; 14 | 15 | /** 16 | * /kcsapi/api_req_practice/battle_result 17 | * 18 | */ 19 | @API("/kcsapi/api_req_practice/battle_result") 20 | public class ApiReqPracticeBattleresult implements APIListenerSpi { 21 | 22 | @Override 23 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 24 | try { 25 | JsonObject data = json.getJsonObject("api_data"); 26 | if (data != null) { 27 | BattleResult result = BattleResult.toBattleResult(data); 28 | BattleLog log = AppCondition.get().getPracticeBattleResult(); 29 | if (log != null) { 30 | log.setResult(result); 31 | log.setTime(Logs.nowString()); 32 | // 出撃艦隊 33 | Integer dockId = Optional.ofNullable(log.getBattle()) 34 | .map(IFormation::getDockId) 35 | .orElse(1); 36 | // 艦隊スナップショットを作る 37 | BattleLog.snapshot(log, dockId); 38 | } 39 | } 40 | } catch (Throwable e) { 41 | e.printStackTrace(); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqPracticeMidnightBattle.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.AppCondition; 6 | import logbook.bean.BattleLog; 7 | import logbook.bean.BattleMidnightBattle; 8 | import logbook.proxy.RequestMetaData; 9 | import logbook.proxy.ResponseMetaData; 10 | 11 | /** 12 | * /kcsapi/api_req_practice/midnight_battle 13 | * 14 | */ 15 | @API("/kcsapi/api_req_practice/midnight_battle") 16 | public class ApiReqPracticeMidnightBattle implements APIListenerSpi { 17 | 18 | @Override 19 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 20 | JsonObject data = json.getJsonObject("api_data"); 21 | if (data != null) { 22 | 23 | BattleLog log = AppCondition.get().getPracticeBattleResult(); 24 | if (log != null) { 25 | log.setMidnight(BattleMidnightBattle.toBattle(data)); 26 | } 27 | } 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqQuestClearitemget.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.AppQuestCollection; 6 | import logbook.bean.AppQuestDuration; 7 | import logbook.proxy.RequestMetaData; 8 | import logbook.proxy.ResponseMetaData; 9 | 10 | /** 11 | * /kcsapi/api_req_quest/clearitemget 12 | * 13 | */ 14 | @API("/kcsapi/api_req_quest/clearitemget") 15 | public class ApiReqQuestClearitemget implements APIListenerSpi { 16 | 17 | @Override 18 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 19 | String id = req.getParameter("api_quest_id"); 20 | if (id != null) { 21 | Integer key = Integer.valueOf(id); 22 | AppQuestCollection.get().getQuest().remove(key); 23 | AppQuestDuration.get().remove(key); 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/logbook/api/ApiReqQuestStop.java: -------------------------------------------------------------------------------- 1 | package logbook.api; 2 | 3 | import javax.json.JsonObject; 4 | 5 | import logbook.bean.AppQuestCollection; 6 | import logbook.bean.AppQuestDuration; 7 | import logbook.proxy.RequestMetaData; 8 | import logbook.proxy.ResponseMetaData; 9 | 10 | /** 11 | * /kcsapi/api_req_quest/stop 12 | * 13 | */ 14 | @API("/kcsapi/api_req_quest/stop") 15 | public class ApiReqQuestStop implements APIListenerSpi { 16 | 17 | @Override 18 | public void accept(JsonObject json, RequestMetaData req, ResponseMetaData res) { 19 | String id = req.getParameter("api_quest_id"); 20 | if (id != null) { 21 | Integer key = Integer.valueOf(id); 22 | AppQuestCollection.get().getQuest().remove(key); 23 | AppQuestDuration.get().unset(key); 24 | } 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/AppBouyomiConfig.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.util.Map; 4 | import java.util.concurrent.ConcurrentHashMap; 5 | 6 | import logbook.internal.Config; 7 | import lombok.Data; 8 | 9 | /** 10 | * 棒読みちゃん連携設定 11 | * 12 | */ 13 | @Data 14 | public class AppBouyomiConfig { 15 | 16 | private boolean enable = false; 17 | 18 | private String host = "localhost"; 19 | 20 | private int port = 50001; 21 | 22 | private boolean tryExecute = false; 23 | 24 | private String bouyomiPath = ""; 25 | 26 | private Map text = new ConcurrentHashMap<>(); 27 | 28 | @Data 29 | public static class AppBouyomiText { 30 | 31 | private boolean enable = true; 32 | 33 | private String id; 34 | 35 | private String text; 36 | } 37 | 38 | /** 39 | * アプリケーションのデフォルト設定ディレクトリからAppBouyomiCollectionを取得します、 40 | * これは次の記述と同等です 41 | *
42 | * Config.getDefault().get(AppBouyomiCollection.class, AppBouyomiCollection::new) 43 | *
44 | * 45 | * @return AppBouyomiCollection 46 | */ 47 | public static AppBouyomiConfig get() { 48 | return Config.getDefault().get(AppBouyomiConfig.class, AppBouyomiConfig::new); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/AppDeckCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * 編成記録のコレクション 12 | * 13 | */ 14 | @Data 15 | public class AppDeckCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = 6506397370160062508L; 18 | 19 | /** 編成記録 */ 20 | private List decks = new ArrayList<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリからAppDeckCollectionを取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(AppDeckCollection.class, AppDeckCollection::new) 27 | *
28 | * 29 | * @return AppDeckCollection 30 | */ 31 | public static AppDeckCollection get() { 32 | return Config.getDefault().get(AppDeckCollection.class, AppDeckCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/AppSeaAreaExp.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | import lombok.AllArgsConstructor; 6 | import lombok.Data; 7 | 8 | /** 9 | * 海域経験値 10 | */ 11 | @Data 12 | @AllArgsConstructor 13 | public class AppSeaAreaExp implements Serializable { 14 | 15 | private static final long serialVersionUID = 380470177565807966L; 16 | 17 | public AppSeaAreaExp() { 18 | } 19 | 20 | /** 海域 */ 21 | private String name; 22 | 23 | /** 海域Exp */ 24 | private int exp; 25 | 26 | @Override 27 | public String toString() { 28 | return this.name; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/CreateshipCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * 建造 12 | * 13 | */ 14 | @Data 15 | public class CreateshipCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = -1055716236895968695L; 18 | 19 | /** 建造 */ 20 | private Map createshipMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリからCreateshipCollectionを取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(CreateshipCollection.class, CreateshipCollection::new) 27 | *
28 | * 29 | * @return CreateshipCollection 30 | */ 31 | public static CreateshipCollection get() { 32 | return Config.getDefault().get(CreateshipCollection.class, CreateshipCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/DeckPortCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.LinkedHashSet; 6 | import java.util.Map; 7 | import java.util.Set; 8 | 9 | import logbook.internal.Config; 10 | import lombok.Data; 11 | 12 | /** 13 | * 艦隊のコレクション 14 | * 15 | */ 16 | @Data 17 | public class DeckPortCollection implements Serializable { 18 | 19 | private static final long serialVersionUID = -1465703933249298173L; 20 | 21 | /** 艦隊 */ 22 | private Map deckPortMap = new LinkedHashMap<>(); 23 | 24 | /** 遠征中の艦娘 */ 25 | private Set missionShips = new LinkedHashSet<>(); 26 | 27 | /** 28 | * アプリケーションのデフォルト設定ディレクトリからDeckPortCollectionを取得します、 29 | * これは次の記述と同等です 30 | *
31 | * Config.getDefault().get(DeckPortCollection.class, DeckPortCollection::new) 32 | *
33 | * 34 | * @return DeckPortCollection 35 | */ 36 | public static DeckPortCollection get() { 37 | return Config.getDefault().get(DeckPortCollection.class, DeckPortCollection::new); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/Enemy.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | import lombok.Data; 7 | 8 | /** 9 | * 敵艦 10 | * 11 | */ 12 | @Data 13 | public class Enemy implements Chara, Serializable, Cloneable { 14 | 15 | private static final long serialVersionUID = -4222845234889789870L; 16 | 17 | /** 艦船ID */ 18 | private Integer shipId; 19 | 20 | /** Lv */ 21 | private Integer lv; 22 | 23 | /** HP */ 24 | private Integer nowhp; 25 | 26 | /** 最大HP */ 27 | private Integer maxhp; 28 | 29 | /** 装備 */ 30 | private List slot; 31 | 32 | /** 序列 */ 33 | private Integer order; 34 | 35 | /** 演習相手かどうか */ 36 | private boolean practice; 37 | 38 | @Override 39 | public boolean isEnemy() { 40 | return true; 41 | } 42 | 43 | @Override 44 | public Enemy asEnemy() { 45 | return this; 46 | } 47 | 48 | @Override 49 | public Enemy clone() { 50 | try { 51 | return (Enemy) super.clone(); 52 | } catch (CloneNotSupportedException e) { 53 | throw new IllegalStateException(e); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/Friend.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | import lombok.Data; 7 | 8 | /** 9 | * 友軍 10 | * 11 | */ 12 | @Data 13 | public class Friend implements Chara, Serializable, Cloneable { 14 | 15 | private static final long serialVersionUID = -4222845234889789870L; 16 | 17 | /** 艦船ID */ 18 | private Integer shipId; 19 | 20 | /** Lv */ 21 | private Integer lv; 22 | 23 | /** HP */ 24 | private Integer nowhp; 25 | 26 | /** 最大HP */ 27 | private Integer maxhp; 28 | 29 | /** 装備 */ 30 | private List slot; 31 | 32 | @Override 33 | public boolean isFriend() { 34 | return true; 35 | } 36 | 37 | @Override 38 | public Friend asFriend() { 39 | return this; 40 | } 41 | 42 | @Override 43 | public Friend clone() { 44 | try { 45 | return (Friend) super.clone(); 46 | } catch (CloneNotSupportedException e) { 47 | throw new IllegalStateException(e); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/Maparea.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.internal.JsonHelper; 8 | import lombok.Data; 9 | 10 | /** 11 | * api_mst_maparea 12 | * 13 | */ 14 | @Data 15 | public class Maparea implements Serializable { 16 | 17 | private static final long serialVersionUID = 3065470938786532030L; 18 | 19 | /** api_id */ 20 | private Integer id; 21 | 22 | /** api_name */ 23 | private String name; 24 | 25 | /** api_type */ 26 | private Integer type; 27 | 28 | /** 29 | * JsonObjectから{@link Maparea}を構築します 30 | * 31 | * @param json JsonObject 32 | * @return {@link Maparea} 33 | */ 34 | public static Maparea toMaparea(JsonObject json) { 35 | Maparea bean = new Maparea(); 36 | JsonHelper.bind(json) 37 | .setInteger("api_id", bean::setId) 38 | .setString("api_name", bean::setName) 39 | .setInteger("api_type", bean::setType); 40 | return bean; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/MapareaCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * 出撃海域のコレクション 12 | * 13 | */ 14 | @Data 15 | public class MapareaCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = -5052707686530360461L; 18 | 19 | private Map maparea = new LinkedHashMap<>(); 20 | 21 | /** 22 | * アプリケーションのデフォルト設定ディレクトリから{@link MapareaCollection}を取得します、 23 | * これは次の記述と同等です 24 | *
25 | * Config.getDefault().get(MapareaCollection.class, MapareaCollection::new) 26 | *
27 | * 28 | * @return {@link MapareaCollection} 29 | */ 30 | public static MapareaCollection get() { 31 | return Config.getDefault().get(MapareaCollection.class, MapareaCollection::new); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/MapinfoMstCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | @Data 11 | public class MapinfoMstCollection implements Serializable { 12 | 13 | private static final long serialVersionUID = -8209654433723984736L; 14 | 15 | private Map mapinfo = new LinkedHashMap<>(); 16 | 17 | /** 18 | * アプリケーションのデフォルト設定ディレクトリからMapinfoMstCollectionを取得します、 19 | * これは次の記述と同等です 20 | *
21 | * Config.getDefault().get(MapinfoMstCollection.class, MapinfoMstCollection::new) 22 | *
23 | * 24 | * @return MapinfoMstCollection 25 | */ 26 | public static MapinfoMstCollection get() { 27 | return Config.getDefault().get(MapinfoMstCollection.class, MapinfoMstCollection::new); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/Material.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.internal.JsonHelper; 8 | import lombok.Data; 9 | 10 | /** 11 | * api_material 12 | * 13 | */ 14 | @Data 15 | public class Material implements Serializable { 16 | 17 | private static final long serialVersionUID = -6919096591550530580L; 18 | 19 | /** api_id */ 20 | private Integer id; 21 | 22 | /** api_value */ 23 | private Integer value; 24 | 25 | /** 26 | * JsonObjectから{@link Material}を構築します 27 | * 28 | * @param json JsonObject 29 | * @return {@link Material} 30 | */ 31 | public static Material toMaterial(JsonObject json) { 32 | Material bean = new Material(); 33 | JsonHelper.bind(json) 34 | .setInteger("api_id", bean::setId) 35 | .setInteger("api_value", bean::setValue); 36 | return bean; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/MissionCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * 遠征のコレクション 12 | * 13 | */ 14 | @Data 15 | public class MissionCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = 3540653891280633865L; 18 | 19 | /** 遠征 */ 20 | private Map missionMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリからMissionCollectionを取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(MissionCollection.class) 27 | *
28 | * 29 | * @return MissionCollection 30 | */ 31 | public static MissionCollection get() { 32 | return Config.getDefault().get(MissionCollection.class, MissionCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/NdockCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.LinkedHashSet; 6 | import java.util.Map; 7 | import java.util.Set; 8 | 9 | import logbook.internal.Config; 10 | import lombok.Data; 11 | 12 | /** 13 | * 入渠ドックのコレクション 14 | * 15 | */ 16 | @Data 17 | public class NdockCollection implements Serializable { 18 | 19 | private static final long serialVersionUID = 3570762805703032390L; 20 | 21 | /** 入渠ドック */ 22 | private Map ndockMap = new LinkedHashMap<>(); 23 | 24 | /** 入渠中の艦娘 */ 25 | private Set ndockSet = new LinkedHashSet<>(); 26 | 27 | /** 28 | * アプリケーションのデフォルト設定ディレクトリからNdockCollectionを取得します、 29 | * これは次の記述と同等です 30 | *
31 | * Config.getDefault().get(NdockCollection.class, NdockCollection::new) 32 | *
33 | * 34 | * @return NdockCollection 35 | */ 36 | public static NdockCollection get() { 37 | return Config.getDefault().get(NdockCollection.class, NdockCollection::new); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/ParameterFilterConfig.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import logbook.internal.Operator; 4 | import lombok.Data; 5 | 6 | /** 7 | * パラメータフィルターの設定 8 | */ 9 | @Data 10 | public class ParameterFilterConfig { 11 | /** 有効 */ 12 | private boolean enabled; 13 | /** 選ばれていたパラメータ */ 14 | private String name; 15 | /** フィールドの値 */ 16 | private Integer value; 17 | /** 選択のインデックス */ 18 | private Integer valueChoice; 19 | /** 比較タイプ */ 20 | private Operator type; 21 | } -------------------------------------------------------------------------------- /src/main/java/logbook/bean/ShipCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * 艦娘 12 | * 13 | */ 14 | @Data 15 | public class ShipCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = -8680643608671594758L; 18 | 19 | /** 艦娘 */ 20 | private Map shipMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリから{@link ShipCollection}を取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(ShipCollection.class, ShipCollection::new) 27 | *
28 | * 29 | * @return {@link ShipCollection} 30 | */ 31 | public static ShipCollection get() { 32 | return Config.getDefault().get(ShipCollection.class, ShipCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/ShipLabelCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | import java.util.Set; 7 | 8 | import logbook.internal.Config; 9 | import lombok.Data; 10 | 11 | /** 12 | * 艦娘のラベル 13 | * 14 | */ 15 | @Data 16 | public class ShipLabelCollection implements Serializable { 17 | 18 | private static final long serialVersionUID = -5742379498848962924L; 19 | 20 | private Map> labels = new HashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリからShipLabelCollectionを取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(ShipLabelCollection.class) 27 | *
28 | * 29 | * @return ShipLabelCollection 30 | */ 31 | public static ShipLabelCollection get() { 32 | return Config.getDefault().get(ShipLabelCollection.class, ShipLabelCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/ShipMstCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * 艦娘のコレクション 12 | * 13 | */ 14 | @Data 15 | public class ShipMstCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = 3473178293202796312L; 18 | 19 | /** 艦娘 */ 20 | private Map shipMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリから{@link ShipMstCollection}を取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(ShipMstCollection.class, ShipMstCollection::new) 27 | *
28 | * 29 | * @return {@link ShipMstCollection} 30 | */ 31 | public static ShipMstCollection get() { 32 | return Config.getDefault().get(ShipMstCollection.class, ShipMstCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/ShipgraphCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | @Data 11 | public class ShipgraphCollection implements Serializable { 12 | 13 | private static final long serialVersionUID = 3318926490130170935L; 14 | 15 | /** 艦娘画像設定 */ 16 | private Map shipgraphMap = new LinkedHashMap<>(); 17 | 18 | /** 19 | * アプリケーションのデフォルト設定ディレクトリから{@link ShipgraphCollection}を取得します、 20 | * これは次の記述と同等です 21 | *
22 | * Config.getDefault().get(ShipgraphCollection.class, ShipgraphCollection::new) 23 | *
24 | * 25 | * @return {@link ShipgraphCollection} 26 | */ 27 | public static ShipgraphCollection get() { 28 | return Config.getDefault().get(ShipgraphCollection.class, ShipgraphCollection::new); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/SlotItem.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.internal.JsonHelper; 8 | import lombok.Data; 9 | 10 | /** 11 | * 装備 12 | * 13 | */ 14 | @Data 15 | public class SlotItem implements Serializable { 16 | 17 | private static final long serialVersionUID = -5902864924857205128L; 18 | 19 | /** api_id */ 20 | private Integer id; 21 | 22 | /** api_level */ 23 | private Integer level; 24 | 25 | /** api_alv */ 26 | private Integer alv; 27 | 28 | /** api_locked */ 29 | private Boolean locked; 30 | 31 | /** api_slotitem_id */ 32 | private Integer slotitemId; 33 | 34 | /** 35 | * JsonObjectから{@link SlotItem}を構築します 36 | * 37 | * @param json JsonObject 38 | * @return {@link SlotItem} 39 | */ 40 | public static SlotItem toSlotItem(JsonObject json) { 41 | SlotItem bean = new SlotItem(); 42 | JsonHelper.bind(json) 43 | .setInteger("api_id", bean::setId) 44 | .setInteger("api_level", bean::setLevel) 45 | .setInteger("api_alv", bean::setAlv) 46 | .setBoolean("api_locked", bean::setLocked) 47 | .setInteger("api_slotitem_id", bean::setSlotitemId); 48 | return bean; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/SlotItemCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * アイテムのコレクション 12 | * 13 | */ 14 | @Data 15 | public class SlotItemCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = -2530569251712024161L; 18 | 19 | /** アイテム */ 20 | private Map slotitemMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリから{@link SlotItemCollection}を取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(SlotItemCollection.class, SlotItemCollection::new) 27 | *
28 | * 29 | * @return {@link SlotItemCollection} 30 | */ 31 | public static SlotItemCollection get() { 32 | return Config.getDefault().get(SlotItemCollection.class, SlotItemCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/SlotitemEquiptype.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.internal.JsonHelper; 8 | import lombok.Data; 9 | 10 | /** 11 | * api_mst_slotitem_equiptype 12 | * 13 | */ 14 | @Data 15 | public class SlotitemEquiptype implements Serializable { 16 | 17 | private static final long serialVersionUID = 6987412391631651270L; 18 | 19 | /** api_id */ 20 | private Integer id; 21 | 22 | /** api_name */ 23 | private String name; 24 | 25 | /** api_show_flg */ 26 | private Integer showFlg; 27 | 28 | @Override 29 | public String toString() { 30 | return this.name; 31 | } 32 | 33 | /** 34 | * JsonObjectから{@link SlotitemEquiptype}を構築します 35 | * 36 | * @param json JsonObject 37 | * @return {@link SlotitemEquiptype} 38 | */ 39 | public static SlotitemEquiptype toSlotitemEquiptype(JsonObject json) { 40 | SlotitemEquiptype bean = new SlotitemEquiptype(); 41 | JsonHelper.bind(json) 42 | .setInteger("api_id", bean::setId) 43 | .setString("api_name", bean::setName) 44 | .setInteger("api_show_flg", bean::setShowFlg); 45 | return bean; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/SlotitemEquiptypeCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * アイテム種類のコレクション 12 | * 13 | */ 14 | @Data 15 | public class SlotitemEquiptypeCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = 1623208831316913362L; 18 | 19 | /** アイテム種類 */ 20 | private Map equiptypeMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリから{@link SlotitemEquiptypeCollection}を取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(SlotitemEquiptypeCollection.class, SlotitemEquiptypeCollection::new) 27 | *
28 | * 29 | * @return {@link SlotitemEquiptypeCollection} 30 | */ 31 | public static SlotitemEquiptypeCollection get() { 32 | return Config.getDefault().get(SlotitemEquiptypeCollection.class, SlotitemEquiptypeCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/SlotitemMstCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * アイテムのコレクション 12 | * 13 | */ 14 | @Data 15 | public class SlotitemMstCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = 8409969154221160905L; 18 | 19 | /** アイテム */ 20 | private Map slotitemMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリから{@link SlotitemMstCollection}を取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(SlotitemMstCollection.class, SlotitemMstCollection::new) 27 | *
28 | * 29 | * @return {@link SlotitemMstCollection} 30 | */ 31 | public static SlotitemMstCollection get() { 32 | return Config.getDefault().get(SlotitemMstCollection.class, SlotitemMstCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/Spritesmith.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.util.Map; 4 | 5 | import lombok.Data; 6 | 7 | /** 8 | * スプライト情報 9 | * 10 | */ 11 | @Data 12 | public class Spritesmith { 13 | 14 | private Map frames; 15 | 16 | @Data 17 | public static class Frame { 18 | private Rect frame; 19 | private boolean rotated; 20 | private boolean trimmed; 21 | private Rect spriteSourceSize; 22 | private Rect sourceSize; 23 | } 24 | 25 | @Data 26 | public static class Rect { 27 | private int x; 28 | private int y; 29 | private int w; 30 | private int h; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/StypeCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * 艦種のコレクション 12 | * 13 | */ 14 | @Data 15 | public class StypeCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = -7530294903513038451L; 18 | 19 | /** 艦種 */ 20 | private Map stypeMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリから{@link StypeCollection}を取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(StypeCollection.class, StypeCollection::new) 27 | *
28 | * 29 | * @return {@link StypeCollection} 30 | */ 31 | public static StypeCollection get() { 32 | return Config.getDefault().get(StypeCollection.class, StypeCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/TestAllPredicate.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.util.Objects; 4 | import java.util.function.Predicate; 5 | 6 | public interface TestAllPredicate extends Predicate { 7 | @Override 8 | default public TestAllPredicate and(Predicate other) { 9 | Objects.requireNonNull(other); 10 | return (t) -> { 11 | boolean result1 = test(t); 12 | boolean result2 = other.test(t); 13 | return result1 && result2; 14 | }; 15 | } 16 | 17 | @Override 18 | default public TestAllPredicate or(Predicate other) { 19 | Objects.requireNonNull(other); 20 | return (t) -> { 21 | boolean result1 = test(t); 22 | boolean result2 = other.test(t); 23 | return result1 || result2; 24 | }; 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/logbook/bean/Useitem.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | import javax.json.JsonObject; 6 | 7 | import logbook.internal.JsonHelper; 8 | import lombok.Data; 9 | 10 | /** 11 | * api_mst_useitem 12 | */ 13 | @Data 14 | public class Useitem implements Serializable { 15 | 16 | private static final long serialVersionUID = -3290324243327123224L; 17 | 18 | /** api_id */ 19 | private Integer id; 20 | 21 | /** api_name */ 22 | private String name; 23 | 24 | @Override 25 | public String toString() { 26 | return this.name; 27 | } 28 | 29 | /** 30 | * JsonObjectから{@link Useitem}を構築します 31 | * 32 | * @param json JsonObject 33 | * @return {@link Useitem} 34 | */ 35 | public static Useitem toMission(JsonObject json) { 36 | Useitem bean = new Useitem(); 37 | JsonHelper.bind(json) 38 | .setInteger("api_id", bean::setId) 39 | .setString("api_name", bean::setName); 40 | return bean; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/UseitemCollection.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | import java.util.LinkedHashMap; 5 | import java.util.Map; 6 | 7 | import logbook.internal.Config; 8 | import lombok.Data; 9 | 10 | /** 11 | * アイテムのコレクション 12 | * 13 | */ 14 | @Data 15 | public class UseitemCollection implements Serializable { 16 | 17 | private static final long serialVersionUID = -3813660780247992556L; 18 | 19 | /** アイテム */ 20 | private Map useitemMap = new LinkedHashMap<>(); 21 | 22 | /** 23 | * アプリケーションのデフォルト設定ディレクトリから{@link UseitemCollection}を取得します、 24 | * これは次の記述と同等です 25 | *
26 | * Config.getDefault().get(UseitemCollection.class, UseitemCollection::new) 27 | *
28 | * 29 | * @return {@link UseitemCollection} 30 | */ 31 | public static UseitemCollection get() { 32 | return Config.getDefault().get(UseitemCollection.class, UseitemCollection::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/bean/WindowLocation.java: -------------------------------------------------------------------------------- 1 | package logbook.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | import lombok.Data; 6 | 7 | /** 8 | * ウインドウの位置とサイズ 9 | * 10 | */ 11 | @Data 12 | public class WindowLocation implements Serializable { 13 | 14 | private static final long serialVersionUID = 3548270453031293618L; 15 | 16 | /** X */ 17 | private double x; 18 | 19 | /** Y */ 20 | private double y; 21 | 22 | /** Width */ 23 | private double width; 24 | 25 | /** Height */ 26 | private double height; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/CheckUpdateStartUp.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import logbook.bean.AppConfig; 4 | import logbook.plugin.lifecycle.StartUp; 5 | 6 | /** 7 | * アップデートチェック 8 | * 9 | */ 10 | public class CheckUpdateStartUp implements StartUp { 11 | 12 | @Override 13 | public void run() { 14 | if (!AppConfig.get().isCheckUpdate()) { 15 | return; 16 | } 17 | 18 | CheckUpdate.run(true); 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/java/logbook/internal/ComparableFilter.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import java.util.function.Function; 4 | import java.util.function.Predicate; 5 | 6 | import lombok.Builder; 7 | 8 | @Builder 9 | /** 10 | * 任意の Comparable なパラメータによるフィルター 11 | * 12 | * @param 比較するパラメータを持っているクラス 13 | * @param 比較するパラメータの型 14 | */ 15 | public class ComparableFilter> implements Predicate { 16 | /** ShipItem からパラメータに変換する mapper */ 17 | private Function mapper; 18 | /** 比較対象の値 */ 19 | private T value; 20 | /** 演算子 */ 21 | private Operator type; 22 | 23 | @Override 24 | public boolean test(S obj) { 25 | if (obj == null) { 26 | return false; 27 | } 28 | return this.type.compare(this.mapper.apply(obj), this.value); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/Logs.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import java.time.ZoneId; 4 | import java.time.ZonedDateTime; 5 | import java.time.format.DateTimeFormatter; 6 | 7 | /** 8 | * ログの表示、書き込みで使用する 9 | * 10 | */ 11 | public final class Logs { 12 | 13 | /** 日付書式 */ 14 | public static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 15 | 16 | /** 17 | * タイムゾーンをJSTとして現在の日付/時間を取得します 18 | * 19 | * @return 現在の日付/時間 20 | */ 21 | public static ZonedDateTime now() { 22 | return ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); 23 | } 24 | 25 | /** 26 | * タイムゾーンをJSTとして現在の日付/時間を"yyyy-MM-dd HH:mm:ss"形式の文字列として取得します 27 | * 28 | * @return 現在の日付/時間 29 | */ 30 | public static String nowString() { 31 | return DATE_FORMAT.format(now()); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/Rank.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | /** 4 | * ランク 5 | * 6 | */ 7 | public enum Rank { 8 | 9 | S完全勝利("S完全勝利", 1.2d), 10 | S勝利("S勝利", 1.2d), 11 | A勝利("A勝利", 1.0d), 12 | B戦術的勝利("B戦術的勝利", 1.0d), 13 | C戦術的敗北("C戦術的敗北", 0.8d), 14 | D敗北("D敗北", 0.7d), 15 | E敗北("E敗北", 0.5d); 16 | 17 | /** 名前 */ 18 | private String name; 19 | 20 | /** 経験値倍率 */ 21 | private double ratio; 22 | 23 | Rank(String name, double ratio) { 24 | this.name = name; 25 | this.ratio = ratio; 26 | } 27 | 28 | /** 29 | * 名前を取得します。 30 | * @return 名前 31 | */ 32 | public String getName() { 33 | return this.name; 34 | } 35 | 36 | /** 37 | * 経験値倍率を取得します。 38 | * @return 経験値倍率 39 | */ 40 | public double getRatio() { 41 | return this.ratio; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return this.name; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/SeaArea.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import java.util.stream.Stream; 4 | 5 | /** 6 | * 海域 7 | * 8 | */ 9 | public enum SeaArea { 10 | 11 | 識別札1("千島方面部隊", 1), 12 | 識別札2("沖縄方面部隊", 2), 13 | 識別札3("第二遊撃部隊", 3), 14 | 識別札4("小笠原方面部隊", 4), 15 | 識別札5("南東方面部隊", 5), 16 | 識別札6("第二艦隊", 6), 17 | 識別札7("前進部隊", 7), 18 | 識別札8("機動部隊前衛", 8), 19 | 識別札9("機動部隊", 9), 20 | 識別札10("識別札10", 10); 21 | 22 | /** 名前 */ 23 | private String name; 24 | 25 | /** 海域(イベント海域のお札) */ 26 | private int area; 27 | 28 | SeaArea(String name, int area) { 29 | this.name = name; 30 | this.area = area; 31 | } 32 | 33 | /** 34 | * 名前を取得します。 35 | * @return 名前 36 | */ 37 | public String getName() { 38 | return this.name; 39 | } 40 | 41 | /** 42 | * 海域(イベント海域のお札)を取得します。 43 | * @return 海域(イベント海域のお札) 44 | */ 45 | public int getArea() { 46 | return this.area; 47 | } 48 | 49 | @Override 50 | public String toString() { 51 | return this.name; 52 | } 53 | 54 | /** 55 | * イベント海域を取得します 56 | * 57 | * @param area お札 58 | * @return 海域 59 | */ 60 | public static SeaArea fromArea(int area) { 61 | return Stream.of(SeaArea.values()).filter(s -> s.getArea() == area).findAny().orElse(null); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/ShipImageCacheStrategy.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import java.util.Arrays; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | /** 8 | * 画像キャッシュ設定 9 | * 10 | */ 11 | public enum ShipImageCacheStrategy { 12 | /** 全て */ 13 | ALL, 14 | /** 使用される画像のみ */ 15 | USED("1.jpg", "1.png", "3.jpg", "3.png"), 16 | /** 制限 */ 17 | LIMIT("1.jpg", "1.png"); 18 | 19 | private List names; 20 | 21 | private ShipImageCacheStrategy() { 22 | this.names = null; 23 | } 24 | 25 | private ShipImageCacheStrategy(String... names) { 26 | this.names = Collections.unmodifiableList(Arrays.asList(names)); 27 | } 28 | 29 | public List getFileNames() { 30 | return this.names; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/ShipTypeGroup.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import java.util.Arrays; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | /** 8 | * 艦種グループ 9 | * 10 | */ 11 | public enum ShipTypeGroup { 12 | 13 | 海防艦("海防艦"), 14 | 駆逐艦("駆逐艦"), 15 | 巡洋艦("軽巡洋艦", "重雷装巡洋艦", "重巡洋艦", "航空巡洋艦", "練習巡洋艦"), 16 | 空母("軽空母", "正規空母", "装甲空母"), 17 | 戦艦("戦艦", "航空戦艦"), 18 | 潜水艦("潜水艦", "潜水空母"), 19 | 水上機母艦("水上機母艦"), 20 | 揚陸艦("揚陸艦"), 21 | 工作艦("工作艦"), 22 | 潜水母艦("潜水母艦"), 23 | 補給艦("補給艦"); 24 | 25 | private String[] group; 26 | 27 | private ShipTypeGroup(String... shipTypes) { 28 | this.group = shipTypes; 29 | } 30 | 31 | public List shipTypes() { 32 | return Collections.unmodifiableList(Arrays.asList(this.group)); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/ThreadManager.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import java.util.concurrent.Executors; 4 | import java.util.concurrent.ScheduledExecutorService; 5 | 6 | /** 7 | * スレッドを管理します 8 | * 9 | */ 10 | public final class ThreadManager { 11 | 12 | /** Executor */ 13 | private static final ScheduledExecutorService EXECUTOR = Executors.newScheduledThreadPool(4); 14 | 15 | /** 16 | * アプリケーションで共有するExecutorService 17 | *

18 | * 長時間実行する必要のあるスレッドを登録する場合、割り込みされたかを検知して適切に終了するようにしてください。 19 | *

20 | * 21 | * @return ExecutorService 22 | */ 23 | public static ScheduledExecutorService getExecutorService() { 24 | return EXECUTOR; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/Time.java: -------------------------------------------------------------------------------- 1 | package logbook.internal; 2 | 3 | import java.time.Duration; 4 | import java.util.concurrent.TimeUnit; 5 | 6 | public class Time { 7 | 8 | /** 9 | * 時間のテキスト表現 10 | * 11 | * @param d 期間 12 | * @param message {@code Duration}が0または負の場合のテキスト 13 | * @return 時間のテキスト表現 14 | */ 15 | public static String toString(Duration d, String message) { 16 | if (d.isZero() || d.isNegative()) { 17 | return message; 18 | } 19 | // Durationの秒未満を切り上げた秒数 20 | long duration = d.getSeconds() + Math.min(1, d.getNano()); 21 | 22 | long days = TimeUnit.SECONDS.toDays(duration); 23 | long hours = TimeUnit.SECONDS.toHours(duration) % 24; 24 | long minutes = TimeUnit.SECONDS.toMinutes(duration) % 60; 25 | long seconds = duration % 60; 26 | 27 | StringBuilder sb = new StringBuilder(); 28 | if (days > 0) { 29 | sb.append(days + "日"); 30 | } 31 | if (hours > 0) { 32 | sb.append(hours + "時間"); 33 | } 34 | if (minutes > 0) { 35 | sb.append(minutes + "分"); 36 | } 37 | if (seconds > 0 && days == 0 && hours == 0) { 38 | sb.append(seconds + "秒"); 39 | } 40 | return sb.toString(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/gui/ItemController.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.gui; 2 | 3 | import javafx.fxml.FXML; 4 | import javafx.scene.control.TabPane; 5 | import javafx.stage.Stage; 6 | import logbook.bean.AppItemTableConfig; 7 | 8 | /** 9 | * 所有装備一覧のUIコントローラー(親) 10 | * 11 | */ 12 | public class ItemController extends WindowController { 13 | @FXML 14 | private TabPane tab; 15 | 16 | @FXML 17 | private ItemItemController itemController; 18 | 19 | @FXML 20 | private ItemAirBaseController airbaseController; 21 | 22 | @FXML 23 | void initialize() { 24 | this.tab.getSelectionModel().select(AppItemTableConfig.get().getTabIndex()); 25 | this.tab.getSelectionModel().selectedIndexProperty().addListener((ob, o, n) -> AppItemTableConfig.get().setTabIndex(n.intValue())); 26 | } 27 | 28 | @Override 29 | public void setWindow(Stage window) { 30 | super.setWindow(window); 31 | this.itemController.setWindow(window); 32 | this.airbaseController.setWindow(window); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/gui/ItemFilter.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.gui; 2 | 3 | import java.util.function.Predicate; 4 | 5 | import lombok.Builder; 6 | 7 | /** 8 | * 所有装備一覧のフィルター 9 | * 10 | */ 11 | @FunctionalInterface 12 | public interface ItemFilter extends Predicate { 13 | 14 | @Builder 15 | public static class DefaultFilter implements ItemFilter { 16 | 17 | /** テキスト */ 18 | private boolean typeFilter; 19 | 20 | /** テキスト */ 21 | private String typeValue; 22 | 23 | @Override 24 | public boolean test(Item item) { 25 | if (this.typeFilter) { 26 | if (item.typeProperty().get().contains(this.typeValue)) 27 | return true; 28 | if (item.getName().contains(this.typeValue)) 29 | return true; 30 | 31 | return false; 32 | } 33 | return true; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/gui/TreeTableTool.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.gui; 2 | 3 | import javafx.scene.control.TreeTableView; 4 | 5 | public class TreeTableTool { 6 | /** 7 | * テーブル列の表示・非表示の設定を行う 8 | * @param table テーブル 9 | * @param key テーブルのキー名 10 | */ 11 | static void setVisible(TreeTableView table, String key) { 12 | //Tools.Trees.setVisible(table, key); // not yet implemented 13 | Tools.Trees.setWidth(table, key); 14 | Tools.Trees.setSortOrder(table, key); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/log/LogFormat.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.log; 2 | 3 | /** 4 | * ログ情報 5 | * 6 | */ 7 | public interface LogFormat { 8 | 9 | /** 10 | * ログ名を取得します。 11 | * @return ログ名 12 | */ 13 | String name(); 14 | 15 | /** 16 | * ファイル名を取得します。 17 | * @return ファイル名 18 | */ 19 | default String fileName() { 20 | return name() + ".csv"; 21 | } 22 | 23 | /** 24 | * 代替ファイル名を取得します。 25 | * @return 代替ファイル名 26 | */ 27 | default String alterFileName() { 28 | return name() + "_alternativefile.csv"; 29 | } 30 | 31 | /** 32 | * ヘッダーを取得します。 33 | * @return ヘッダー 34 | */ 35 | String header(); 36 | 37 | /** 38 | * 文字列表現を取得します。 39 | * @return 文字列表現 40 | */ 41 | String format(T value); 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/log/LogFormatBase.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.log; 2 | 3 | import java.time.ZonedDateTime; 4 | import java.time.format.DateTimeFormatter; 5 | 6 | import logbook.internal.Logs; 7 | 8 | public abstract class LogFormatBase implements LogFormat { 9 | 10 | /** 日付書式 */ 11 | protected static final DateTimeFormatter DATE_FORMAT = Logs.DATE_FORMAT; 12 | 13 | /** 14 | * タイムゾーンをJSTとして現在の日付/時間を取得します 15 | * 16 | * @return 現在の日付/時間 17 | */ 18 | protected static ZonedDateTime now() { 19 | return Logs.now(); 20 | } 21 | 22 | /** 23 | * タイムゾーンをJSTとして現在の日付/時間を"yyyy-MM-dd HH:mm:ss"形式の文字列として取得します 24 | * 25 | * @return 現在の日付/時間 26 | */ 27 | protected static String nowString() { 28 | return Logs.nowString(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/proxy/CaptureHolder.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.proxy; 2 | 3 | import java.io.InputStream; 4 | import java.util.ArrayList; 5 | import java.util.Arrays; 6 | import java.util.List; 7 | 8 | public class CaptureHolder { 9 | 10 | private List req = new ArrayList<>(); 11 | 12 | private List res = new ArrayList<>(); 13 | 14 | public void putRequest(byte[] data) { 15 | if (this.req.size() > 0 && Arrays.equals(this.req.get(this.req.size()-1), data)) { 16 | // if the data is the same as the last one in this.req array, no need to add this to req as it is duplicated 17 | return; 18 | } 19 | this.req.add(data); 20 | } 21 | 22 | public InputStream getRequest() { 23 | return new ByteArrayInputStream2(this.req); 24 | } 25 | 26 | public void putResponse(byte[] data) { 27 | this.res.add(data); 28 | } 29 | 30 | public InputStream getResponse() { 31 | return new ByteArrayInputStream2(this.res); 32 | } 33 | 34 | public void clear() { 35 | this.req = null; 36 | this.res = null; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/proxy/Filter.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.proxy; 2 | 3 | /** 4 | * 動作に必要なデータのみ取得するためのフィルターです。 5 | * 6 | */ 7 | public class Filter { 8 | 9 | /** キャプチャーするリクエストのバイトサイズ上限 */ 10 | public static final int MAX_POST_FIELD_SIZE = 1024 * 1024 * 12; 11 | 12 | /** setAttribute用のキー(CaptureHolder) */ 13 | public static final String CONTENT_HOLDER = "logbook.content-holder"; 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/proxy/ProxyHolder.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.proxy; 2 | 3 | import java.util.List; 4 | import java.util.stream.Collectors; 5 | 6 | import logbook.internal.LoggerHolder; 7 | import logbook.plugin.PluginServices; 8 | import logbook.proxy.ProxyServerSpi; 9 | 10 | /** 11 | * プロキシサーバースレッドを保持します 12 | * 13 | */ 14 | public class ProxyHolder { 15 | 16 | private static final Thread SERVER; 17 | 18 | static { 19 | Thread thread = null; 20 | try { 21 | List proxies = PluginServices.instances(ProxyServerSpi.class) 22 | .collect(Collectors.toList()); 23 | ProxyServerSpi impl = null; 24 | for (ProxyServerSpi proxy : proxies) { 25 | // プラグインのプロキシサーバーを優先する 26 | if (impl == null || !(proxy instanceof logbook.internal.proxy.ProxyServerImpl)) { 27 | impl = proxy; 28 | } 29 | } 30 | thread = new Thread(impl); 31 | thread.setDaemon(true); 32 | } catch (Exception e) { 33 | LoggerHolder.get().error("プロキシサーバーの初期化中に例外", e); 34 | } 35 | SERVER = thread; 36 | } 37 | 38 | /** 39 | * リバースプロキシスレッド を取得します 40 | * @return リバースプロキシ スレッドインスタンス 41 | */ 42 | public static Thread getInstance() { 43 | return SERVER; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/logbook/internal/proxy/RequestContentListener.java: -------------------------------------------------------------------------------- 1 | package logbook.internal.proxy; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | import javax.servlet.http.HttpServletRequest; 6 | 7 | import org.eclipse.jetty.client.api.Request; 8 | import org.eclipse.jetty.client.api.Request.ContentListener; 9 | 10 | /** 11 | * リクエストをキャプチャします 12 | * 13 | */ 14 | public final class RequestContentListener implements ContentListener { 15 | 16 | private final HttpServletRequest httpRequest; 17 | 18 | /** 19 | * @param request {@link HttpServletRequest} 20 | */ 21 | public RequestContentListener(HttpServletRequest request) { 22 | this.httpRequest = request; 23 | } 24 | 25 | /* 26 | * 必要なPOSTデータの場合キャプチャします 27 | */ 28 | @Override 29 | public void onContent(Request request, ByteBuffer buffer) { 30 | int length = buffer.remaining(); 31 | 32 | if (((length > 0) && (length <= Filter.MAX_POST_FIELD_SIZE))) { 33 | byte[] bytes = new byte[length]; 34 | buffer.get(bytes); 35 | 36 | CaptureHolder holder = (CaptureHolder) this.httpRequest.getAttribute(Filter.CONTENT_HOLDER); 37 | if (holder == null) { 38 | holder = new CaptureHolder(); 39 | this.httpRequest.setAttribute(Filter.CONTENT_HOLDER, holder); 40 | } 41 | holder.putRequest(bytes); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/logbook/plugin/gui/FleetTabRemark.java: -------------------------------------------------------------------------------- 1 | package logbook.plugin.gui; 2 | 3 | import logbook.bean.DeckPort; 4 | 5 | /** 6 | * 艦隊タブの注釈に追加するプラグインのインターフェイス
7 | * {@link #getContent()}の戻りの型は{@link javafx.scene.Node}またはtoStringメソッド 8 | * によって表現可能である必要があります。 9 | * 10 | */ 11 | public interface FleetTabRemark extends Plugin> { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/logbook/plugin/gui/MainCalcMenu.java: -------------------------------------------------------------------------------- 1 | package logbook.plugin.gui; 2 | 3 | import javafx.scene.control.MenuItem; 4 | 5 | /** 6 | * メイン画面の計算機メニューに追加するプラグインのインターフェイス 7 | * 8 | */ 9 | public interface MainCalcMenu extends Plugin { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/logbook/plugin/gui/MainCommandMenu.java: -------------------------------------------------------------------------------- 1 | package logbook.plugin.gui; 2 | 3 | import javafx.scene.control.MenuItem; 4 | 5 | /** 6 | * メイン画面のコマンドメニューに追加するプラグインのインターフェイス 7 | * 8 | */ 9 | public interface MainCommandMenu extends Plugin { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/logbook/plugin/gui/MainExtMenu.java: -------------------------------------------------------------------------------- 1 | package logbook.plugin.gui; 2 | 3 | import javafx.scene.control.MenuItem; 4 | 5 | /** 6 | * メイン画面のその他メニューに追加するプラグインのインターフェイス 7 | * 8 | */ 9 | public interface MainExtMenu extends Plugin { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/logbook/plugin/gui/Plugin.java: -------------------------------------------------------------------------------- 1 | package logbook.plugin.gui; 2 | 3 | import java.util.Comparator; 4 | import java.util.List; 5 | import java.util.Objects; 6 | import java.util.stream.Collectors; 7 | 8 | import logbook.plugin.PluginServices; 9 | 10 | /** 11 | * GUIを持つプラグインのインターフェイスです 12 | * 13 | * @param プラグインが返すGUI要素の型 14 | */ 15 | public interface Plugin { 16 | 17 | /** 18 | * GUI要素を返します 19 | * 20 | * @return StageやMenuItemなどのGUI要素 21 | */ 22 | T getContent(); 23 | 24 | /** 25 | * ソート順を制御する数値を返します 26 | * 27 | * @return ソート順に使われる数値 28 | */ 29 | default int sortOrder () { 30 | return Integer.MAX_VALUE; 31 | } 32 | 33 | /** 34 | * clazzで指定されたプラグインからGUI要素を取得します。 35 | * 36 | * @param clazz プラグインのインターフェイス 37 | * @return GUI要素 38 | */ 39 | public static , R> List getContent(Class clazz) { 40 | return PluginServices.instances(clazz) 41 | .sorted(Comparator.comparingInt(Plugin::sortOrder)) 42 | .map(Plugin::getContent) 43 | .filter(Objects::nonNull) 44 | .collect(Collectors.toList()); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/logbook/plugin/gui/Updateable.java: -------------------------------------------------------------------------------- 1 | package logbook.plugin.gui; 2 | 3 | /** 4 | * GUI要素が更新可能であることを表すインターフェイスです 5 | * 6 | * @param 受け入れる型 7 | */ 8 | public interface Updateable { 9 | 10 | void updateItem (T item); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/logbook/plugin/lifecycle/StartUp.java: -------------------------------------------------------------------------------- 1 | package logbook.plugin.lifecycle; 2 | 3 | /** 4 | * 開始処理の抽象クラスです。
5 | *
6 | * 実装クラスはServiceLoaderより取得されます。 7 | * 実装クラスが呼び出されるようにするには META-INF/services/logbook.plugin.lifecycle.StartUp に 8 | * 実装クラスの完全修飾名を記述します 9 | *
10 | * アプリケーションが開始されたタイミングで実装がデーモンスレッドとして実行されます。 11 | */ 12 | public interface StartUp extends Runnable { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/logbook/proxy/ContentListenerSpi.java: -------------------------------------------------------------------------------- 1 | package logbook.proxy; 2 | 3 | /** 4 | * レスポンスボディを受け入れるサービス・プロバイダ・インタフェース(SPI)です
5 | *
6 | * まずリクエストに対して{@link #test(RequestMetaData)}が呼び出されます。{@link #test(RequestMetaData)}がtrueを返してかつ、リクエストに対する 7 | * レスポンスが正常に返ってきた場合に{@link #accept(RequestMetaData, ResponseMetaData)}が呼び出されます。
8 | *
9 | * リクエストは並列処理される可能性があるため同期化が必要になることがあります。 10 | */ 11 | public interface ContentListenerSpi { 12 | 13 | /** 14 | * レスポンスを受け入れるかをテストします 15 | * @param requestMetaData リクエストに含まれている情報 16 | * @return 受け入れる場合true 17 | */ 18 | boolean test(RequestMetaData requestMetaData); 19 | 20 | /** 21 | * レスポンスを処理します 22 | * @param requestMetaData リクエストに含まれている情報 23 | * @param responseMetaData レスポンスに含まれている情報 24 | */ 25 | void accept(RequestMetaData requestMetaData, ResponseMetaData responseMetaData); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/logbook/proxy/ProxyServerSpi.java: -------------------------------------------------------------------------------- 1 | package logbook.proxy; 2 | 3 | /** 4 | * プロキシサーバーの抽象クラスです。
5 | *
6 | * 実装クラスはServiceLoaderより取得されます。 7 | * 実装クラスが呼び出されるようにするには META-INF/services/logbook.proxy.ProxyServerSpi に 8 | * 実装クラスの完全修飾名を記述します 9 | *
10 | * プロキシサーバーの実装はデーモンスレッドとして実行され、 11 | * アプリケーションの終了要求時にプロキシサーバースレッドに対して割り込みを行います。
12 | * プロキシサーバーの実装は割り込みに対して適切に終了処理を行うようにしてください。 13 | */ 14 | public interface ProxyServerSpi extends Runnable { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/logbook/proxy/ResponseMetaData.java: -------------------------------------------------------------------------------- 1 | package logbook.proxy; 2 | 3 | import java.io.InputStream; 4 | import java.util.Optional; 5 | 6 | /** 7 | * レスポンスに含まれている情報を ContentListener に提供するオブジェクト 8 | * 9 | */ 10 | public interface ResponseMetaData { 11 | 12 | /** 13 | * レスポンスのステータスコードを取得します 14 | * @return レスポンスのステータスコード 15 | */ 16 | int getStatus(); 17 | 18 | /** 19 | * コンテントタイプを取得します 20 | * @return コンテントタイプ 21 | */ 22 | String getContentType(); 23 | 24 | /** 25 | * レスポンスに含まれるメッセージボディを返します 26 | * @return レスポンスに含まれるメッセージボディ 27 | */ 28 | Optional getResponseBody(); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/apache/logging/log4j/LogManager.java: -------------------------------------------------------------------------------- 1 | package org.apache.logging.log4j; 2 | 3 | import org.slf4j.LoggerFactory; 4 | 5 | public class LogManager { 6 | 7 | public static Logger getLogger(final String name) { 8 | return new Logger(LoggerFactory.getLogger(name)); 9 | } 10 | 11 | public static Logger getLogger(final Class clazz) { 12 | return new Logger(LoggerFactory.getLogger(clazz.getName())); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 sanaehirotaka 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/services/logbook.plugin.gui.FleetTabRemark: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/META-INF/services/logbook.plugin.gui.FleetTabRemark -------------------------------------------------------------------------------- /src/main/resources/META-INF/services/logbook.plugin.lifecycle.StartUp: -------------------------------------------------------------------------------- 1 | logbook.internal.CheckUpdateStartUp 2 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/services/logbook.proxy.ContentListenerSpi: -------------------------------------------------------------------------------- 1 | logbook.internal.APIListener 2 | logbook.internal.ImageListener 3 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/services/logbook.proxy.ProxyServerSpi: -------------------------------------------------------------------------------- 1 | logbook.internal.proxy.ProxyServerImpl 2 | -------------------------------------------------------------------------------- /src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | %date{ISO8601} %-5level %logger{12} [%thread] %msg%n 6 | 7 | 8 | 9 | logs/app.log 10 | 11 | logs/%d{yyyy-MM,aux}/app-%d{yyyy-MM-dd}.log 12 | 13 | 14 | %date{ISO8601} %-5level %logger{12} [%thread] %msg%n 15 | 16 | 17 | WARN 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/resources/logbook/capture_options/Windows_gdigrab_h264.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Windows (gdigrab/H.264)", 3 | "params" : "-f gdigrab\n-show_region 1\n-draw_mouse 1\n-offset_x {x}\n-offset_y {y}\n-video_size {width}x{height}\n-i desktop\n-rtbufsize 100M\n-r 24\n-vcodec libx264\n-pix_fmt yuv420p\n-crf 20\n-auto-alt-ref 0\n-y\n\"{path}\"", 4 | "ext" : "mp4" 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/logbook/capture_options/Windows_gdigrab_h265.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Windows (gdigrab/H.265)", 3 | "params" : "-f gdigrab\n-show_region 1\n-draw_mouse 1\n-offset_x {x}\n-offset_y {y}\n-video_size {width}x{height}\n-i desktop\n-rtbufsize 100M\n-r 24\n-vcodec libx265\n-crf 20\n-auto-alt-ref 0\n-y\n\"{path}\"", 4 | "ext" : "mp4" 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/logbook/capture_options/Windows_gdigrab_huffyuv.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Windows (gdigrab/Huffyuv(Lossless))", 3 | "params" : "-f gdigrab\r\n-show_region 1\r\n-draw_mouse 1\r\n-offset_x {x}\r\n-offset_y {y}\r\n-video_size {width}x{height}\r\n-i desktop\r\n-rtbufsize 100M\r\n-vcodec huffyuv\r\n-vsync passthrough\r\n-y\r\n\"{path}\"\r\n", 4 | "ext" : "avi" 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/logbook/capture_options/Windows_gdigrab_mpeg4.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "Windows (gdigrab/MPEG-4)", 3 | "params" : "-f gdigrab\n-show_region 1\n-draw_mouse 1\n-offset_x {x}\n-offset_y {y}\n-video_size {width}x{height}\n-i desktop\n-rtbufsize 100M\n-r 24\n-vcodec mpeg4\n-b:v 2500k\n-auto-alt-ref 0\n-y\n\"{path}\"", 4 | "ext" : "mp4" 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/logbook/capture_options/list.json: -------------------------------------------------------------------------------- 1 | [ 2 | "logbook/capture_options/Windows_gdigrab_mpeg4.json", 3 | "logbook/capture_options/Windows_gdigrab_h264.json", 4 | "logbook/capture_options/Windows_gdigrab_h265.json", 5 | "logbook/capture_options/Windows_gdigrab_huffyuv.json" 6 | ] 7 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/airbase.css: -------------------------------------------------------------------------------- 1 | .detail { 2 | -fx-font-size: 1.1em; 3 | } 4 | .info .button { 5 | -fx-background-color: #FFD700; 6 | } 7 | 8 | .table-row-cell .change { 9 | -fx-background-color: lightgray; 10 | } 11 | .table-row-cell:selected .change { 12 | -fx-background-color: none; 13 | } 14 | 15 | .table-row-cell .cond2 { 16 | -fx-background-color: #FFD700; 17 | -fx-text-fill: rgb(255, 140, 0); 18 | } 19 | .table-row-cell:selected .cond2 { 20 | -fx-background-color: none; 21 | } 22 | 23 | .table-row-cell .cond3 { 24 | -fx-background-color: #FFD700; 25 | -fx-text-fill: rgb(255, 16, 0); 26 | } 27 | .table-row-cell:selected .cond3 { 28 | -fx-background-color: none; 29 | } 30 | 31 | .table-row-cell .lowsupply { 32 | -fx-background-color: #FFD700; 33 | } 34 | .table-row-cell:selected .lowsupply { 35 | -fx-background-color: none; 36 | } 37 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/akashi_timer.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/alv1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/logbook/gui/alv1.png -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/alv2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/logbook/gui/alv2.png -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/alv3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/logbook/gui/alv3.png -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/alv4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/logbook/gui/alv4.png -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/alv5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/logbook/gui/alv5.png -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/alv6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/logbook/gui/alv6.png -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/alv7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sanaehirotaka/logbook-kai/afae74e3b3a3663c6edd6727f390dc6b3548df52/src/main/resources/logbook/gui/alv7.png -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/application.css: -------------------------------------------------------------------------------- 1 | .root { 2 | -fx-font-family: "Meiryo UI"; 3 | -fx-font-weight: normal; 4 | } 5 | .scroll-pane > .viewport { 6 | -fx-background-color: transparent; 7 | } 8 | .table-cell { 9 | -fx-alignment: center-left; 10 | } 11 | .increment-button ,.decrement-button { 12 | -fx-padding: 0.5em; 13 | } 14 | .titled-pane > .title { 15 | -fx-padding: 0.16665em 0.75em 0.16665em 0.75em; /* 2 9 2 9 */ 16 | } 17 | .align_right { 18 | -fx-alignment: center_right; 19 | } -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/application_large1.css: -------------------------------------------------------------------------------- 1 | .root { 2 | -fx-font-size: 1.2em; 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/application_large2.css: -------------------------------------------------------------------------------- 1 | .root { 2 | -fx-font-size: 1.3em; 3 | } 4 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/battle_detail.css: -------------------------------------------------------------------------------- 1 | .bold { 2 | -fx-font-weight: bold; 3 | } 4 | /* 制空均衡 */ 5 | .dispseiku0 { 6 | -fx-text-fill: darkred; 7 | } 8 | /* 制空権確保 */ 9 | .dispseiku1 { 10 | -fx-text-fill: green; 11 | } 12 | /* 航空優勢 */ 13 | .dispseiku2 { 14 | -fx-text-fill: green; 15 | } 16 | /* 航空劣勢 */ 17 | .dispseiku3 { 18 | -fx-text-fill: darkred; 19 | } 20 | /* 制空権喪失 */ 21 | .dispseiku4 { 22 | -fx-text-fill: red; 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/battle_detail_phase_ship.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/battlelog.css: -------------------------------------------------------------------------------- 1 | /* フィルター */ 2 | .filter VBox { 3 | -fx-padding: .1em; 4 | -fx-min-width: 6em; 5 | -fx-max-width: 16em; 6 | } 7 | .filter CheckComboBox { 8 | -fx-min-width: 6em; 9 | } 10 | .filter .label { 11 | -fx-font-weight: bold; 12 | } 13 | /* 集計 */ 14 | .aggregate { 15 | -fx-max-height: 24em; 16 | } 17 | /* 範囲選択 */ 18 | .date-cell.selected { 19 | -fx-background-color: rgb(123, 201, 111); 20 | } 21 | .date-cell.contains { 22 | -fx-background-color: rgb(198, 228, 139); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/battlelog_dialog.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 19 | 20 | 21 |
22 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
33 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/calc_exp.css: -------------------------------------------------------------------------------- 1 | /* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */ 2 | 3 | /* 経験値計算機 */ 4 | .default-color0.chart-line-symbol { 5 | -fx-background-color: gray, white; 6 | } 7 | .default-color0.chart-series-line { 8 | -fx-stroke: gray; 9 | -fx-stroke-width: 1px; 10 | -fx-stroke-dash-array: 2px; 11 | } 12 | .default-color1.chart-line-symbol { 13 | -fx-background-color: green, white; 14 | } 15 | .default-color1.chart-series-line { 16 | -fx-stroke: green; 17 | -fx-stroke-width: 3px; 18 | } 19 | .default-color2.chart-line-symbol { 20 | -fx-background-color: blue, white; 21 | } 22 | .default-color2.chart-series-line { 23 | -fx-stroke: blue; 24 | -fx-stroke-width: 3px; 25 | } 26 | 27 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/capture.css: -------------------------------------------------------------------------------- 1 | /* キャプチャ */ 2 | .captureWindow .capture { 3 | -fx-font-weight: bold; 4 | } 5 | .captureWindow .start { 6 | -fx-text-fill: blue; 7 | } 8 | .captureWindow .stop { 9 | -fx-text-fill: red; 10 | } 11 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/config.css: -------------------------------------------------------------------------------- 1 | /* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */ 2 | 3 | /* 設定 */ 4 | 5 | .configWindow .configInner,.configWindow .footer { 6 | -fx-padding: 10px; 7 | } 8 | .bold { 9 | -fx-font-weight: bold; 10 | } 11 | .scroll-pane { 12 | -fx-background-color: null; 13 | -fx-background-insets: 0, 0; 14 | -fx-padding: 0; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/logbook/gui/create_pac_file.fxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |