450 Commits

Author SHA1 Message Date
2d172ffe6b Implement basic techhider
All checks were successful
SteamWarCI Build successful
2025-10-08 18:32:32 +02:00
3bfac2d1cf Hotfix: Portal Permissions
All checks were successful
SteamWarCI Build successful
2025-10-07 22:43:54 +02:00
ac24bc4f5b Hotfix: Portal Permissions
All checks were successful
SteamWarCI Build successful
2025-10-07 22:39:38 +02:00
c38777158a Improving SelectAdjacent
All checks were successful
SteamWarCI Build successful
2025-10-03 11:55:37 +02:00
2bc295c620 Fix RegionLib.type
All checks were successful
SteamWarCI Build successful
2025-10-03 09:25:21 +02:00
88cc06560e Fix BauServer Performance
All checks were successful
SteamWarCI Build successful
2025-10-03 09:13:32 +02:00
566a7deee3 Hotfix BackupCommand.backupGui
All checks were successful
SteamWarCI Build successful
2025-10-02 21:14:26 +02:00
ea07766460 Fix RegionCommand.genericRestoreCommand
All checks were successful
SteamWarCI Build successful
2025-10-02 20:55:06 +02:00
9c5b7712cb Improve PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-10-02 20:41:21 +02:00
84b14b8c3d Hotfix /region testblockpoint
All checks were successful
SteamWarCI Build successful
2025-10-02 20:39:30 +02:00
abeb269368 Fix BackupCommand
All checks were successful
SteamWarCI Build successful
2025-09-29 17:46:20 +02:00
fc002abf37 Fix BackupScheduler
All checks were successful
SteamWarCI Build successful
2025-09-29 17:36:10 +02:00
09f9a8ce32 Fix GameModeConfig
All checks were successful
SteamWarCI Build successful
2025-09-29 17:33:02 +02:00
d0d353b24d Fix TNTPhase
All checks were successful
SteamWarCI Build successful
2025-09-29 16:23:54 +02:00
52828c8b4e Hotfix TraceRepository
All checks were successful
SteamWarCI Build successful
2025-09-29 15:52:13 +02:00
01efb9fce5 Hotfix TraceRepository
All checks were successful
SteamWarCI Build successful
2025-09-29 15:48:25 +02:00
8b636a11ee Force rebuild
All checks were successful
SteamWarCI Build successful
2025-09-29 15:29:31 +02:00
8ca1cf9b5c Force rebuild
Some checks failed
SteamWarCI Build failed
2025-09-29 15:26:51 +02:00
ad4304d7b0 Fix 'BAU_INFO_ITEM_LORE_CHANGED'
All checks were successful
SteamWarCI Build successful
2025-09-29 12:44:12 +02:00
e5e931d331 Fix 'BAU_INFO_ITEM_LORE_TESTBLOCK'
All checks were successful
SteamWarCI Build successful
2025-09-29 12:41:39 +02:00
ed87197681 Trigger rebuild
All checks were successful
SteamWarCI Build successful
2025-09-29 11:28:02 +02:00
e6e475e4bb Trigger rebuild
All checks were successful
SteamWarCI Build successful
2025-09-29 11:25:33 +02:00
daa69dc22b Trigger rebuild
All checks were successful
SteamWarCI Build successful
2025-09-29 11:23:20 +02:00
d011ffa536 Trigger rebuild
All checks were successful
SteamWarCI Build successful
2025-09-29 11:20:32 +02:00
4798b16015 Hotfix SWItem.setCustomModelData
All checks were successful
SteamWarCI Build successful
2025-09-29 11:10:11 +02:00
f4c9ce512e Improve WorldEditRendererWrapper20
All checks were successful
SteamWarCI Build successful
2025-09-29 11:00:50 +02:00
bfe9c7559e Improve RayVisualizerCommand
All checks were successful
SteamWarCI Build successful
2025-09-29 10:48:24 +02:00
394e043db3 Hotfix FixedRegion
All checks were successful
SteamWarCI Build successful
2025-09-29 09:34:53 +02:00
d2a6ccc46b Merge pull request 'Modular BauSystem Regions' (#26) from BauSystem/RegionSystem into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #26
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-09-29 09:25:20 +02:00
ccd992f1db Improve SimulatorCursor selection changing
All checks were successful
SteamWarCI Build successful
2025-09-29 09:23:53 +02:00
fa0a9a5c23 Fix PistonCalculator for GLAZED_TERRACOTTA Variations
All checks were successful
SteamWarCI Build successful
Closes: #135
2025-09-29 09:08:45 +02:00
fa6b75e2aa Fix RPlayer (hopefully)
All checks were successful
SteamWarCI Build successful
2025-09-29 08:35:03 +02:00
f2073db1e8 Improve PlayerSkinHandler
All checks were successful
SteamWarCI Build successful
2025-09-29 08:33:08 +02:00
5fe62d67d9 Improve StreamingCommand
All checks were successful
SteamWarCI Build successful
2025-09-29 08:17:49 +02:00
524ce0c579 Update VacationCommand add 'Abwesenheitsnotiz'
All checks were successful
SteamWarCI Build successful
Closes: #144
2025-09-29 08:06:15 +02:00
3685d662fb Hotfix CookieEvents
All checks were successful
SteamWarCI Build successful
2025-09-28 16:47:16 +02:00
19344b9f48 Hotfix EventFight and EventModeListener
All checks were successful
SteamWarCI Build successful
2025-09-28 16:32:45 +02:00
3d3c70845e Hotfix EventModeListener
All checks were successful
SteamWarCI Build successful
2025-09-28 16:19:37 +02:00
797f3a3158 Hotfix EventModeListener
All checks were successful
SteamWarCI Build successful
2025-09-28 15:48:32 +02:00
4b1680967a Fixup VelocityCore
All checks were successful
SteamWarCI Build successful
2025-09-28 14:02:38 +02:00
361c86c99e Merge pull request 'Add update of all coming fights if a fight is stopped' (#145) from VelocityCore/AutoReloadEventFightsOnFinish into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #145
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-09-28 14:00:00 +02:00
613cb76edb Merge pull request 'Add StreamingCommand for streaming mode' (#146) from VelocityCore/StreamingMode into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #146
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-09-28 13:57:43 +02:00
1231fa5c47 Add StreamingCommand for streaming mode
All checks were successful
SteamWarCI Build successful
2025-09-28 13:09:07 +02:00
06a7d9c7fc Add update of all coming fights if a fight is stopped
All checks were successful
SteamWarCI Build successful
2025-09-28 10:42:05 +02:00
21d628b338 Refactor EventRelation: Fix query logic for byEvent, adjust insert fields, and update setFrom parameter handling. Update ResponseRelation to align with updated EventRelation structure.
All checks were successful
SteamWarCI Build successful
2025-09-28 10:28:24 +02:00
56d34f0311 Fix EventChannel
All checks were successful
SteamWarCI Build successful
2025-09-27 19:50:30 +02:00
4322547106 Hotfix EventRelation
All checks were successful
SteamWarCI Build successful
2025-09-27 17:07:22 +02:00
43a582edd8 Hotfix EventRelation
All checks were successful
SteamWarCI Build successful
2025-09-27 16:42:26 +02:00
d4eabfe9b2 Make optional parameter on 'delete' not optional
All checks were successful
SteamWarCI Build successful
2025-09-16 08:54:29 +02:00
bfbb017c8f Remove lockreplay ModifyPart
All checks were successful
SteamWarCI Build successful
2025-09-05 07:48:36 +02:00
5a7349b5a6 Refactor NMSWrapper21 game mode handling: remove unused import and adjust setInternalGameMode to use direct field modification.
All checks were successful
SteamWarCI Build successful
2025-08-09 11:29:58 +02:00
ef91313c29 Adjust gameStateChangeReason field offset for updated packet structure in Minecraft 1.21.
All checks were successful
SteamWarCI Build successful
2025-08-09 11:24:52 +02:00
ba2297ca9a Add new plugin message channels for extended compatibility and feature integration
All checks were successful
SteamWarCI Build successful
2025-08-09 11:18:15 +02:00
ba843633d7 Downgrade api-version in plugin.yml to 1.13 for broader compatibility.
All checks were successful
SteamWarCI Build successful
2025-08-09 00:12:52 +02:00
3b43ad3587 Downgrade api-version in plugin.yml to 1.13 for broader compatibility. 2025-08-09 00:11:44 +02:00
26a45fabb1 Merge pull request '1.21.6 Fightsystem' (#134) from 1.21.6/fightsystem into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #134
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-08-08 23:48:37 +02:00
f8bb69e829 Merge branch 'main' into 1.21.6/fightsystem
All checks were successful
SteamWarCI Build successful
2025-08-05 21:13:24 +02:00
b74b73b871 BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/techhider/TechHiderCommand.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-08-05 21:12:35 +02:00
b695a7e089 Update stuff from peer review
All checks were successful
SteamWarCI Build successful
2025-08-05 20:59:43 +02:00
464d7c85bd Update version handling for Minecraft 1.21.5: Adjust TypeUtils and ServerStarter to support PAPER_21.
All checks were successful
SteamWarCI Build successful
2025-08-03 22:10:15 +02:00
285882be70 Add chunk reset logic for Minecraft 1.21 in CraftbukkitWrapper21 to support advanced chunk management.
All checks were successful
SteamWarCI Build successful
2025-08-03 16:42:05 +02:00
50780ad9bd Add chunk reset logic for Minecraft 1.21 in CraftbukkitWrapper21 to support advanced chunk management.
All checks were successful
SteamWarCI Build successful
2025-08-03 16:39:25 +02:00
bbd2bcae35 Fix BackupCommand
All checks were successful
SteamWarCI Build successful
Fix FixedRegion
2025-08-03 13:06:07 +02:00
a3801790a4 Remove old stuff
All checks were successful
SteamWarCI Build successful
2025-08-02 14:32:24 +02:00
b14c39683a Implement FixedRegion.regionBackups
All checks were successful
SteamWarCI Build successful
2025-08-02 14:31:46 +02:00
0a3ae7117d Fix FixedGlobalRegion
All checks were successful
SteamWarCI Build successful
2025-08-02 13:55:22 +02:00
830ca93105 Implement Area for FixedRegion
Some checks failed
SteamWarCI Build failed
2025-08-02 13:53:52 +02:00
06333d634e Fix RegionConfig
All checks were successful
SteamWarCI Build successful
Implement FixedRegion
Add RegionHistory.Impl
2025-08-02 13:25:22 +02:00
ecb9571624 Add toString() methods 2025-08-02 13:25:22 +02:00
9e0e339277 Finish FixedFlagStorage 2025-08-02 13:25:22 +02:00
06de120fe1 Add RegionSystem.getWorldSpawn
Fix Warp
Update FixedRegionSystem
2025-08-02 13:25:22 +02:00
30db0bb718 Fix Warp.enable 2025-08-02 13:25:22 +02:00
0a4dccd95a Fix WarpListener 2025-08-02 13:25:22 +02:00
5550aa4930 Make FixedGlobalFlagStorage load the options from file 2025-08-02 13:25:22 +02:00
811bd00ed2 Fix Flag.Value to have enum methods for save/load 2025-08-02 13:25:22 +02:00
bc371df796 Rework FixedFlagStorage and FixedGlobalFlagStorage to not be sensitive on adding a new Flag 2025-08-02 13:25:22 +02:00
144975d977 Remove TNTMode.ONLY_BUILD 2025-08-02 13:25:22 +02:00
0763e4b189 Move some stuff around 2025-08-02 13:25:22 +02:00
38b061c12c Add JavaDoc to RegionSystem 2025-08-02 13:25:22 +02:00
91a41ccd3f Add Prototype 2025-08-02 13:25:22 +02:00
576ce891f6 Optimize WorldData 2025-08-02 13:25:22 +02:00
7aff9f08d0 Remove old simulator loading 2025-08-02 13:25:22 +02:00
13ef131401 Remove RegionSkins 2025-08-02 13:25:22 +02:00
56680119e2 Fix ColorCommand 2025-08-02 13:25:22 +02:00
6a5507321e Add FixedGlobalFlagStorage 2025-08-02 13:25:22 +02:00
01d9532aa6 Pot impl a FixedGlobalRegion 2025-08-02 13:25:22 +02:00
c49a212c05 Move regionold to RegionFixed module 2025-08-02 13:25:22 +02:00
e6196251a6 Remove SkinCommand
Fix TickManager15
2025-08-02 13:25:22 +02:00
698f917828 Add RegionSkins 2025-08-02 13:25:22 +02:00
ad87ad7495 Add RegionConfig 2025-08-02 13:25:22 +02:00
6a78499193 Fix some more errors 2025-08-02 13:25:22 +02:00
d55556cb47 Fix some more errors 2025-08-02 13:25:22 +02:00
4f24adf9fd Fix some more errors 2025-08-02 13:25:22 +02:00
94e3eed6df Fix RegionScoreboardElement 2025-08-02 13:25:22 +02:00
8a43809322 Fix RegionScoreboardElement 2025-08-02 13:25:22 +02:00
8fb10c9266 Fix DesignEndStone and DesignEndStoneCommand
Fix Region.Area.reset
2025-08-02 13:25:22 +02:00
fb518efe63 Reduce to 24 compiler errors 2025-08-02 13:25:22 +02:00
598daadd33 Reduce to 34 compiler errors 2025-08-02 13:25:22 +02:00
0287881e33 Fix some more issues 2025-08-02 13:25:22 +02:00
a6b703b821 Fix some more issues 2025-08-02 13:25:22 +02:00
43cca3376e Fix some more issues 2025-08-02 13:25:22 +02:00
7e61db5e58 Fix some more issues 2025-08-02 13:25:22 +02:00
c9b4e6ab45 Improve Region some more 2025-08-02 13:25:22 +02:00
314aaf7a76 Update Region 2025-08-02 13:25:22 +02:00
e98f53bbab Update Region 2025-08-02 13:25:22 +02:00
7dc9da549c Fix some more stuff 2025-08-02 13:25:22 +02:00
3bb84d0dcc Fixup BoundaryViewer to trigger rebuild 2025-08-02 13:25:22 +02:00
3d0e5fc28d Fix many things 2025-08-02 13:25:22 +02:00
5e5bfedb52 Fix some more build errors 2025-08-02 13:25:22 +02:00
ef19959eb2 Fix some more build errors 2025-08-02 13:25:22 +02:00
ae15e16dae Update BauMemberUpdate 2025-08-02 13:25:22 +02:00
9a506a34f8 Fix things and optimize imports 2025-08-02 13:25:22 +02:00
6822dc796f Update Region System of BauSystem 2025-08-02 13:25:22 +02:00
8427ae36f2 Remove unused TestblockMode 2025-08-02 13:25:22 +02:00
7f41559647 Fix build.gradle.kts as of 43618fc2 2025-08-02 13:25:22 +02:00
4e70a675c2 Update Region.inBuildRegion and Region.inTestblockRegion 2025-08-02 13:25:22 +02:00
96daa2c861 Update some part of Region 2025-08-02 13:25:21 +02:00
45646b6ba3 Update SelectAdjacent
All checks were successful
SteamWarCI Build successful
2025-08-02 13:23:03 +02:00
8d1b15b019 Fix PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-08-02 13:14:05 +02:00
2e91a5a582 Trigger rebuild
All checks were successful
SteamWarCI Build successful
2025-08-02 11:42:39 +02:00
018b9a971f Fix stuff in DiscordBot
All checks were successful
SteamWarCI Build successful
2025-08-02 11:36:08 +02:00
70d0f179cc Fix stuff in DiscordBot
All checks were successful
SteamWarCI Build successful
2025-08-02 11:34:41 +02:00
2166096ba5 Fix PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-08-01 21:17:58 +02:00
3a13fc7bb9 Reduce MAX_BLOCKS of SelectAdjacent
All checks were successful
SteamWarCI Build successful
2025-08-01 17:51:19 +02:00
01f55c4309 Fix VacationCommand
All checks were successful
SteamWarCI Build successful
2025-08-01 10:51:17 +02:00
d968187750 Fix VacationCommand
All checks were successful
SteamWarCI Build successful
2025-08-01 10:49:28 +02:00
9e629d09a8 Fix VacationCommand
All checks were successful
SteamWarCI Build successful
2025-08-01 10:48:17 +02:00
d14022e69e Fix ChannelListener
All checks were successful
SteamWarCI Build successful
2025-08-01 10:46:54 +02:00
6623e9d808 Add VacationCommand
All checks were successful
SteamWarCI Build successful
2025-08-01 10:43:37 +02:00
9279d9cd8e Improve SelectAdjacent
All checks were successful
SteamWarCI Build successful
2025-07-31 18:37:02 +02:00
b7963f2fe6 Fix PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-07-31 18:00:38 +02:00
3f88ea1e57 Fix SelectAdjacent but make it a touch slower
All checks were successful
SteamWarCI Build successful
2025-07-31 16:30:02 +02:00
8076f31a19 Fix SelectAdjacent but make it a touch slower
All checks were successful
SteamWarCI Build successful
2025-07-31 16:25:05 +02:00
33e9b3409f Add SelectAdjacent for BauSystem and Builder
All checks were successful
SteamWarCI Build successful
2025-07-31 16:21:08 +02:00
e7803dcf82 Enhance compatibility and feature support for Minecraft 1.21: Add ProtocolWrapper21, update gamerule management, streamline entity tracking, and refine chunk hider logic.
All checks were successful
SteamWarCI Build successful
2025-07-31 11:34:56 +02:00
cf52b50333 Introduce support for Minecraft 1.21: Add ReflectionWrapper21, ChunkHider21, and enhance version compatibility across systems.
All checks were successful
SteamWarCI Build successful
2025-07-31 10:43:40 +02:00
297aa6151d Pot fix RPlayer
All checks were successful
SteamWarCI Build successful
2025-07-31 09:44:28 +02:00
14be3a8e3b Fix CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-30 21:01:18 +02:00
1c1e2e2efe Fix CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-30 20:59:03 +02:00
e30eb35792 Fix CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-30 20:57:38 +02:00
e94f273e21 Fix CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-30 20:56:52 +02:00
c76648e630 Fix CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-30 20:54:18 +02:00
a943dd6014 Fix CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-30 20:51:17 +02:00
0d7776ec6f Fix CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-30 20:47:27 +02:00
7db1d80988 Add SpaceCraft to startable fight servers
All checks were successful
SteamWarCI Build successful
2025-07-30 20:41:01 +02:00
50bd18bae7 Fix DevCommand
All checks were successful
SteamWarCI Build successful
2025-07-30 18:20:41 +02:00
89a55996fc Fix steamwar.devserver.gradle
All checks were successful
SteamWarCI Build successful
2025-07-30 16:45:08 +02:00
f494729b89 Update steamwar.devserver.gradle
All checks were successful
SteamWarCI Build successful
2025-07-30 16:03:39 +02:00
bcabce8b23 Fix JVMCRIUException
All checks were successful
SteamWarCI Build successful
2025-07-30 14:00:47 +02:00
376da2028b Fix ColorCommand
Some checks failed
SteamWarCI Build failed
2025-07-30 13:36:24 +02:00
b6cfaf8135 Fix BauSystem.properties NO_PERMISSION
Some checks failed
SteamWarCI Build failed
2025-07-30 13:34:51 +02:00
5daee0f589 Fix checkpointing of a dev server
Some checks failed
SteamWarCI Build failed
2025-07-30 11:36:40 +02:00
43663ea099 Fix CRIUSupport for local building
Some checks failed
SteamWarCI Build failed
2025-07-30 11:27:09 +02:00
9d1b0063b9 Hotfix RayVisualizerCommand
All checks were successful
SteamWarCI Build successful
2025-07-29 17:55:38 +02:00
e706044f44 Add RayVisualizerCommand
All checks were successful
SteamWarCI Build successful
Closes: #99
2025-07-29 17:46:12 +02:00
332daec716 Enable Loader.setTicksBetweenShots before loader finished
All checks were successful
SteamWarCI Build successful
Closes: #76
2025-07-29 15:37:56 +02:00
2daca017c2 Add InventoryFillerCommand.gui
All checks were successful
SteamWarCI Build successful
Closes: #27
Fix PistonCalculator movement
2025-07-29 14:52:03 +02:00
7edd72ac27 Improve PistonCalculator last time
All checks were successful
SteamWarCI Build successful
2025-07-29 12:32:25 +02:00
1355b57a93 Improve Subserver.run for CRIU
All checks were successful
SteamWarCI Build successful
2025-07-29 12:04:48 +02:00
e04f0d4ad1 Revert the PR merge
All checks were successful
SteamWarCI Build successful
2025-07-29 12:03:33 +02:00
79a6c93f8f Merge pull request 'Improve Subserver.run for checkpoint' (#116) from VelocityCore/ImproveCheckpointHandling into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #116
2025-07-29 11:56:39 +02:00
e36bbfd2a7 Improve PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-07-29 11:18:04 +02:00
65cb544b64 Merge pull request 'Implement anvil inventory handling through SWAnvilInv and related network packets' (#117) from VelocityCore/anvil-inv into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #117
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-07-29 11:06:18 +02:00
8a22afab63 Handle NullPointerException in handleClick method of SWAnvilInv to prevent crashes
All checks were successful
SteamWarCI Build successful
2025-07-29 11:05:46 +02:00
caae9542f4 Fix CLOSE case in SWAnvilInv to properly remove player from openInv map
All checks were successful
SteamWarCI Build successful
2025-07-29 11:03:00 +02:00
4104c60f6b Hotfix PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-07-29 10:52:18 +02:00
69260a9b73 Hotfix PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-07-29 10:15:08 +02:00
4fb6505aef Hotfix PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-07-29 10:09:55 +02:00
bb2f7cf0c1 Hotfix PistonCalculator
All checks were successful
SteamWarCI Build successful
2025-07-29 10:09:14 +02:00
8516c8e536 Closes: #120
All checks were successful
SteamWarCI Build successful
Fix Loader.single
2025-07-29 09:59:38 +02:00
066f06a6e3 Closes: #121
All checks were successful
SteamWarCI Build successful
Improve PistonCalculator
2025-07-29 09:53:17 +02:00
78e176b55e Closes: #94
All checks were successful
SteamWarCI Build successful
2025-07-28 22:08:39 +02:00
86a10b3e97 Remove unused imports and redundant method annotations in SavePart class
All checks were successful
SteamWarCI Build successful
2025-07-26 20:59:45 +02:00
d01efffb6a Add steamshrimp.de to known hostnames in Hostname class
All checks were successful
SteamWarCI Build successful
2025-07-20 00:45:56 +02:00
fd57ba43e9 Mark createdAt as primary key in NodeData class
All checks were successful
SteamWarCI Build successful
2025-07-19 22:48:03 +02:00
eac0390dd3 Implement anvil inventory handling through SWAnvilInv and related network packets
All checks were successful
SteamWarCI Build successful
2025-07-19 22:34:36 +02:00
03005adcd8 Merge pull request 'Add enhance ReplayCommand' (#115) from add-fight-id into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #115
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-07-19 22:06:36 +02:00
933e2119ef Improve Subserver.run for checkpoint
All checks were successful
SteamWarCI Build successful
2025-07-19 18:20:48 +02:00
679d373a1e Fix colors final time, for 1.15 and earlier support
All checks were successful
SteamWarCI Build successful
2025-07-19 18:11:10 +02:00
828084a3d6 Update Guide color
All checks were successful
SteamWarCI Build successful
2025-07-19 17:58:53 +02:00
2b782585b1 Hotfix TeamCommand and WhoisCommand
All checks were successful
SteamWarCI Build successful
2025-07-19 17:54:39 +02:00
b43965be91 Revert "Update PREFIX_GUIDE color to §a in UserPerm"
All checks were successful
SteamWarCI Build successful
This reverts commit 30cdbe072e.
2025-07-19 17:45:39 +02:00
d82f306094 Add getById method in Fight class and enhance ReplayCommand handling with admin replay checks
All checks were successful
SteamWarCI Build successful
2025-07-19 17:12:44 +02:00
30cdbe072e Update PREFIX_GUIDE color to §a in UserPerm
All checks were successful
SteamWarCI Build successful
2025-07-19 17:07:18 +02:00
db7e1a5fc9 Add immersive portals channel to PluginMessage listener
All checks were successful
SteamWarCI Build successful
2025-07-19 17:01:30 +02:00
3e5055c246 Refine checkpoint handling in Subserver and remove unnecessary debug logs in CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-16 09:43:24 +02:00
44c06314c6 Update checkpoint restoration message handling in Subserver
All checks were successful
SteamWarCI Build successful
2025-07-16 09:39:38 +02:00
e06742d6d2 SpigotCore/SpigotCore_Main/src/de/steamwar/core/CheckpointUtilsJ9.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-07-16 09:34:38 +02:00
62e674ed42 SpigotCore/SpigotCore_Main/src/de/steamwar/core/CheckpointUtilsJ9.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-07-14 19:40:33 +02:00
0464442b83 VelocityCore/Persistent/src/de/steamwar/persistent/Subserver.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-07-14 19:38:46 +02:00
c682333771 Add Criu Debug
All checks were successful
SteamWarCI Build successful
2025-07-14 19:13:25 +02:00
58ab619144 Add Criu Debug
All checks were successful
SteamWarCI Build successful
2025-07-14 19:08:35 +02:00
00de852575 Add Criu Debug
All checks were successful
SteamWarCI Build successful
2025-07-14 19:07:48 +02:00
948cf5e8db Add Criu Debug
All checks were successful
SteamWarCI Build successful
2025-07-14 18:52:08 +02:00
7aba8da5a0 Add revision handling to setSchematic method in FightTeam
All checks were successful
SteamWarCI Build successful
2025-07-14 13:40:43 +02:00
5a77854752 Fix replaceColor usage and correct config flag handling
All checks were successful
SteamWarCI Build successful
2025-07-14 11:20:26 +02:00
cf1422f532 Fix NodeData query to correctly order by CreatedAt descending
All checks were successful
SteamWarCI Build successful
2025-07-14 09:46:06 +02:00
6260e65b33 Merge pull request 'Add Schematic Revisions' (#93) from schematic-revisions into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #93
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-07-14 09:13:16 +02:00
6db404c1e6 Merge pull request 'Add AuditLog' (#89) from AuditLog into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #89
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-07-14 09:13:02 +02:00
b086fcaa32 Refactor validator method in download command
All checks were successful
SteamWarCI Build successful
2025-07-13 21:11:18 +02:00
f33b3521b8 Hotfix TNTPoint for 1.15 or earlier
All checks were successful
SteamWarCI Build successful
2025-07-13 21:00:42 +02:00
dc72ec1b93 Hotfix REntityServer for 1.15 or earlier
All checks were successful
SteamWarCI Build successful
2025-07-13 20:57:22 +02:00
0e9c9bd4dc Hotfix DiscordChannel
All checks were successful
SteamWarCI Build successful
2025-07-13 20:48:43 +02:00
291b6b1804 Merge pull request 'Add Winconditions.TIMED_DAMAGE_TECH_KO and Winconditions.RANDOM_ROTATE' (#111) from FightSystem/RandomRotationAndTimedDamageTechKO into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #111
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-07-13 18:40:52 +02:00
104f0cf02d Fix final stuff
All checks were successful
SteamWarCI Build successful
2025-07-13 18:39:53 +02:00
f7662cdcba Fix build
All checks were successful
SteamWarCI Build successful
2025-07-13 18:15:24 +02:00
167b36b10c Update RandomRotate
Some checks failed
SteamWarCI Build failed
2025-07-13 18:10:53 +02:00
b9b541957b Fix older replays
All checks were successful
SteamWarCI Build successful
2025-07-13 17:54:28 +02:00
e9d107f0ed Fix older replays
All checks were successful
SteamWarCI Build successful
2025-07-13 17:54:06 +02:00
1e264a63a2 Add Winconditions.TIMED_DAMAGE_TECH_KO and Winconditions.RANDOM_ROTATE
All checks were successful
SteamWarCI Build successful
2025-07-13 16:48:35 +02:00
868ba4073b Add Winconditions.TIMED_DAMAGE_TECH_KO and Winconditions.RANDOM_ROTATE
All checks were successful
SteamWarCI Build successful
2025-07-13 16:46:11 +02:00
3410dd5a4b Merge pull request 'Improve perceived server start time' (#108) from VelocityCore/ImprovePerceivedServerStartTimeWithCRIU into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #108
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-07-10 13:46:03 +02:00
b86a26a709 Fix Simulator.autoTrace
All checks were successful
SteamWarCI Build successful
2025-07-10 13:44:06 +02:00
71238a0167 Add Simulator.autoTestblock
All checks were successful
SteamWarCI Build successful
2025-07-10 13:40:21 +02:00
30ac947ebb Add Simulator.autoTestblock
All checks were successful
SteamWarCI Build successful
2025-07-10 13:39:03 +02:00
a7d64b5887 Improve TickManager21
All checks were successful
SteamWarCI Build successful
2025-07-10 13:21:17 +02:00
d7908c8255 Improve perceived server start time
All checks were successful
SteamWarCI Build successful
2025-07-10 13:02:24 +02:00
12f26b982e Rever CheckpointUtilsJ9
All checks were successful
SteamWarCI Build successful
2025-07-10 10:52:14 +02:00
2be4118399 Close server socket before world saving
All checks were successful
SteamWarCI Build successful
2025-07-10 10:23:28 +02:00
9d6981ee0c Trigger rebuild
All checks were successful
SteamWarCI Build successful
2025-07-10 10:09:39 +02:00
97a4d47aa7 Merge pull request 'Add support for TPS and tick rate management in 1.21+' (#105) from 1.21.1/tpslimit into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #105
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-07-08 22:17:22 +02:00
d657f9871d Update and integrate legacy system
All checks were successful
SteamWarCI Build successful
2025-07-08 22:16:52 +02:00
a572b84016 Add Items
All checks were successful
SteamWarCI Build successful
2025-07-08 21:11:27 +02:00
f1c6b4b453 Update UserPerm colors "final?"
All checks were successful
SteamWarCI Build successful
2025-07-08 19:58:49 +02:00
d0414c71f3 Fix v3Mode handling in WorldEditWrapper14
All checks were successful
SteamWarCI Build successful
2025-07-08 12:07:03 +02:00
3530aec5e2 Add more Flowers and add Leather horse Armour
All checks were successful
SteamWarCI Build successful
2025-07-08 10:45:40 +02:00
cccd090357 Add support for TPS and tick rate management in 1.21+
All checks were successful
SteamWarCI Build successful
2025-07-07 22:43:16 +02:00
3ae9a41b31 Hotfix: Entities on 1.21+
All checks were successful
SteamWarCI Build successful
2025-07-06 21:58:05 +02:00
b8b38cf777 Merge pull request 'Handle KickedFromServerEvent with redirect and empty component' (#103) from remove-kicked-message into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #103
2025-07-06 17:58:46 +02:00
c1eca74dd0 Handle KickedFromServerEvent with redirect and empty component
All checks were successful
SteamWarCI Build successful
2025-07-06 14:06:07 +02:00
8c23bf5bd4 Fix 1.21 DisplayEntities
All checks were successful
SteamWarCI Build successful
2025-07-06 11:58:54 +02:00
556c8f7db1 Fix MissileWars team colors and TNTLeague team colors
All checks were successful
SteamWarCI Build successful
2025-07-04 17:49:58 +02:00
7a03b327ef Fix tablist for real
All checks were successful
SteamWarCI Build successful
2025-07-03 18:00:17 +02:00
0091cba336 Fix Tablist in 1.21.5 or greater
All checks were successful
SteamWarCI Build successful
2025-07-03 16:59:24 +02:00
35d8bfb588 Update UserPerm
All checks were successful
SteamWarCI Build successful
Fix Tablist
2025-07-03 16:47:58 +02:00
78584fea34 Update UserPerm
All checks were successful
SteamWarCI Build successful
2025-07-03 16:38:46 +02:00
66511e514c Merge pull request 'Add a simple smaller Trace file' (#25) from BauSystem/SmallerTraces into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #25
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-07-03 11:29:52 +02:00
6f64d03fee Update pr stuff
All checks were successful
SteamWarCI Build successful
2025-07-03 11:07:52 +02:00
c04e8d75eb Reorder Colors (again)
All checks were successful
SteamWarCI Build successful
2025-07-03 00:57:25 +02:00
5c7c982175 Merge branch 'main' into schematic-revisions
All checks were successful
SteamWarCI Build successful
2025-07-03 00:45:03 +02:00
d5ca1e14e1 Add prepared flag to schematics and refactor related logic
All checks were successful
SteamWarCI Build successful
2025-07-02 12:25:58 +02:00
60347bc481 Hotfix dependencies
All checks were successful
SteamWarCI Build successful
2025-07-02 11:53:24 +02:00
fbfdcf8fff Merge pull request 'VelocityCore/JDADependencyPlugin' (#91) from VelocityCore/JDADependencyPlugin into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #91
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-07-02 11:46:07 +02:00
e56c41ca66 Improve dependency upload
All checks were successful
SteamWarCI Build successful
2025-07-02 11:36:06 +02:00
3b67048b9c Improve jar size
All checks were successful
SteamWarCI Build successful
2025-07-02 11:22:36 +02:00
6efbda669e Optimize and improve VelocityCore size
All checks were successful
SteamWarCI Build successful
Improve steamwar.devserver.gradle to not upload anything that is up to date!
2025-07-02 11:17:55 +02:00
4bd5d9eb0b Remove unused get and query
All checks were successful
SteamWarCI Build successful
2025-07-02 10:00:43 +02:00
60a70dfc40 Remove unused get
All checks were successful
SteamWarCI Build successful
2025-07-02 09:59:09 +02:00
95a97aed93 Update TraceRepository to save quite a bit smaller traces
All checks were successful
SteamWarCI Build successful
2025-07-02 09:16:48 +02:00
6fa54aba2f Merge pull request 'Update UserPerm' (#92) from UserPermColorUpdate into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #92
2025-07-02 09:16:04 +02:00
d04939fb2c Add a simple smaller Trace file, not finished!
All checks were successful
SteamWarCI Build successful
2025-07-02 08:12:09 +02:00
4c98ce4aff Add Schematic Revisions
All checks were successful
SteamWarCI Build successful
2025-07-01 21:39:08 +02:00
4ed6bc52d0 Update TheBreadBeards Easter particle
All checks were successful
SteamWarCI Build successful
2025-07-01 21:37:12 +02:00
bc00873314 Update UserPerm
All checks were successful
SteamWarCI Build successful
2025-07-01 21:28:59 +02:00
8677d59cce Fix some stuff
All checks were successful
SteamWarCI Build successful
2025-07-01 19:04:13 +02:00
6b16bbc785 Add DiscordDependency plugin for faster upload times
All checks were successful
SteamWarCI Build successful
2025-07-01 19:00:14 +02:00
617bae5a5c Add AuditLog
All checks were successful
SteamWarCI Build successful
2025-07-01 18:48:59 +02:00
9988774fb4 Fix Warp.WorldSpawn
All checks were successful
SteamWarCI Build successful
2025-06-30 17:27:23 +02:00
4fc707431f Fix WorldEditRenderer
All checks were successful
SteamWarCI Build successful
2025-06-30 17:10:24 +02:00
8ff0319fe6 Fix BauSystem.properties
All checks were successful
SteamWarCI Build successful
2025-06-30 16:53:28 +02:00
86537a00de Fix TraceRecorder
All checks were successful
SteamWarCI Build successful
2025-06-30 16:52:02 +02:00
e9f8a89758 Hotfix Tablist duplicate names after softreload
All checks were successful
SteamWarCI Build successful
2025-06-30 16:48:03 +02:00
f37fbfffdf Hotfix SmartPlaceListener
All checks were successful
SteamWarCI Build successful
2025-06-30 16:05:52 +02:00
9798c08cf3 Hotfix SmartPlaceListener
All checks were successful
SteamWarCI Build successful
2025-06-30 16:02:43 +02:00
dbd979a5fe Fix 1.21
All checks were successful
SteamWarCI Build successful
2025-06-30 15:58:31 +02:00
280202c43f Merge pull request 'Update to support Minecraft 1.21.6 version' (#52) from update/1.21.5 into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #52
2025-06-30 15:53:44 +02:00
23df187eb1 settings.gradle.kts aktualisiert
All checks were successful
SteamWarCI Build successful
2025-06-30 15:52:51 +02:00
39af920631 Remove TutorialSystem
All checks were successful
SteamWarCI Build successful
2025-06-30 15:29:19 +02:00
e4864e6eaf Add new changetype alias
All checks were successful
SteamWarCI Build successful
2025-06-29 20:11:36 +02:00
d2bb8e8e59 Fix Relations
All checks were successful
SteamWarCI Build successful
2025-06-29 19:53:42 +02:00
bd9451f2aa Fix Backend
All checks were successful
SteamWarCI Build successful
2025-06-29 11:22:41 +02:00
1bb15d9551 Fix RPlayer skin data
All checks were successful
SteamWarCI Build successful
2025-06-28 14:14:55 +02:00
d06faa5d18 Fix 'java.lang.reflect.InvocationTargetException' for RPlayer being initialised
All checks were successful
SteamWarCI Build successful
2025-06-28 13:32:50 +02:00
bc5e781810 Hotfix VersionAnnouncer
All checks were successful
SteamWarCI Build successful
2025-06-28 13:26:05 +02:00
14b756261e Merge pull request 'Add event grouping' (#57) from event-brackets into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #57
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-06-26 23:40:51 +02:00
1f1f99f8f3 Adjust advancing team logic in EventRelation to fix fromPlace handling
All checks were successful
SteamWarCI Build successful
2025-06-26 23:38:19 +02:00
d9aeb47a3a Merge pull request 'Update WorldEdit CUI to RBlockDisplay' (#34) from WorldEditCUI into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #34
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-06-26 23:28:16 +02:00
afe30fd348 Merge pull request 'Add BauLockState.SUPERVISOR' (#80) from VelocityCore/BauLockSupervisor into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #80
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-06-26 23:28:07 +02:00
9f323c8b38 Merge pull request 'Fix RPlayer not showing when same player is present' (#71) from FixRPlayerHandling into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #71
Reviewed-by: D4rkr34lm <dark@steamwar.de>
2025-06-26 23:28:00 +02:00
b6279fd7fa Remove useless line of code
All checks were successful
SteamWarCI Build successful
2025-06-26 22:06:38 +02:00
3f7cd48f27 Update sensible defaults for WorldEditRendererCUIEditor
All checks were successful
SteamWarCI Build successful
2025-06-26 22:01:56 +02:00
c682678827 Add ClientVersionPacket
All checks were successful
SteamWarCI Build successful
Update VersionAnnouncer
2025-06-26 21:57:44 +02:00
1fd8b3c4cb Add ClientVersionPacket
All checks were successful
SteamWarCI Build successful
2025-06-26 21:52:07 +02:00
c6ecab5aa8 Fix some stuff
All checks were successful
SteamWarCI Build successful
2025-06-26 21:05:11 +02:00
4383e541d8 Fix some stuff 2025-06-26 21:05:11 +02:00
cc4532ab90 Update CAALine to CLine
Update CAABox to CWireframe
2025-06-26 21:05:09 +02:00
3e448e7597 Remove default methods of WorldEditRendererWrapper 2025-06-26 21:04:46 +02:00
d975110470 Final fixes 2025-06-26 21:04:46 +02:00
f6852a5523 Add WorldEditRendererCUIEditor to Builder server 2025-06-26 21:04:45 +02:00
40437afb73 Final fixes 2025-06-26 21:04:45 +02:00
80a156754d Finalize WorldEditCUI 2025-06-26 21:04:45 +02:00
dfc7bbbe13 Fix WorldEditRendererWrapper9 2025-06-26 21:04:45 +02:00
dd5f46069f Delete WorldEditRenderer8 2025-06-26 21:04:45 +02:00
b10897c204 Update WorldEditRenderer 2025-06-26 21:04:43 +02:00
f6dc1e1059 Update WE version of 1.20 to FAWE 1.18 2025-06-26 21:04:35 +02:00
dccb435bce Update WorldEdit CUI to RBlockDisplay 2025-06-26 21:04:35 +02:00
1c8d6580d5 Fix Scoreboard
All checks were successful
SteamWarCI Build successful
2025-06-26 21:01:29 +02:00
187087f56b Fix LaufbauSettings
All checks were successful
SteamWarCI Build successful
2025-06-26 20:20:59 +02:00
77cf101889 Add BauLockState.SUPERVISOR
All checks were successful
SteamWarCI Build successful
2025-06-26 14:49:48 +02:00
0f68f671f5 Merge pull request 'Remove Shields from Check Arena' (#67) from remove-shield-from-check-arena into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #67
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-06-26 14:20:15 +02:00
75c4966e37 Fix SimulatorTNTGui for 1.19
All checks were successful
SteamWarCI Build successful
2025-06-26 13:52:01 +02:00
fcebb4ffd3 Add red team schematic paste in WGCommand
All checks were successful
SteamWarCI Build successful
2025-06-14 22:01:29 +02:00
9abbcc908d Remove unused fillRegion method from WorldEdit wrapper and related code
All checks were successful
SteamWarCI Build successful
2025-06-14 21:56:02 +02:00
4eb40581f2 Hotfix TexturePackSystem
All checks were successful
SteamWarCI Build successful
2025-06-12 22:07:24 +02:00
c3a4e7ed85 Improve network code
All checks were successful
SteamWarCI Build successful
2025-06-12 21:28:49 +02:00
5201a3edc0 Adjust TechareaCommand to refine wireframe bounds using offset subtraction
All checks were successful
SteamWarCI Build successful
2025-06-12 19:53:22 +02:00
c9821053ce Refactor TechareaCommand to support per-player REntityServer instances and add periodic tick updates
All checks were successful
SteamWarCI Build successful
2025-06-12 19:45:45 +02:00
eb8562b3a9 Merge pull request 'Add BlueInsetRegion management and implement TechareaCommand' (#73) from show-tech-area into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #73
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-06-12 19:29:32 +02:00
37acbf0033 Add BlueInsetRegion management and implement TechareaCommand
All checks were successful
SteamWarCI Build successful
2025-06-12 19:27:56 +02:00
9e294afa8f Merge pull request 'Add CEntity, CLine, CWireframe and optimize REntityServer' (#72) from WireFrames into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #72
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-06-12 19:20:58 +02:00
3e9ffa52c3 Fix nit
All checks were successful
SteamWarCI Build successful
2025-06-12 19:19:38 +02:00
3296d9ebb3 Add CEntity, CLine, CWireframe and optimize REntityServer
All checks were successful
SteamWarCI Build successful
2025-06-12 18:53:35 +02:00
3d562cf743 Add skin cache to VelocityCore
All checks were successful
SteamWarCI Build successful
2025-06-11 17:05:47 +02:00
24f4ab7f37 Fix RPlayer not showing when same player is present
All checks were successful
SteamWarCI Build successful
Add DevLobby20 to LobbySystem build.gradle.kts
2025-06-11 15:35:27 +02:00
0ea92be2e1 Fix TexturePackSystem
All checks were successful
SteamWarCI Build successful
2025-06-11 11:25:56 +02:00
88d8016987 Fix TexturePackSystem
All checks were successful
SteamWarCI Build successful
2025-06-11 10:58:01 +02:00
909c1c52aa Hotfix Persistent
All checks were successful
SteamWarCI Build successful
2025-06-11 08:09:31 +02:00
26b126fdba Hotfix Persistent
All checks were successful
SteamWarCI Build successful
2025-06-11 08:05:28 +02:00
ecb2e736aa Mark declined schematics as seen and fix substring usage in CheckedSchematic creation
All checks were successful
SteamWarCI Build successful
2025-06-10 22:34:27 +02:00
38559e8a2b Fix parameter order in CheckedSchematic.create method
All checks were successful
SteamWarCI Build successful
2025-06-10 22:31:14 +02:00
1aba92e707 Add seen and nodeType fields to CheckedSchematic class
All checks were successful
SteamWarCI Build successful
2025-06-10 22:29:31 +02:00
e4df6f55fb Merge pull request 'GUIImprovements' (#64) from GUIImprovements into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #64
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-06-10 21:08:23 +02:00
ff5113e112 Merge pull request 'Refactor schematic checks to handle unseen notifications' (#33) from add-offline-notify into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #33
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-06-10 20:57:33 +02:00
c425ca1171 Merge pull request 'Add declined question handling in CheckCommand' (#66) from add-saved-declined-questions-history into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #66
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-06-10 20:43:53 +02:00
c1293ffda0 Merge pull request 'Add 'queuerestart' command' (#68) from VelocityCore/QueueRestartCommand into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #68
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-06-10 20:43:04 +02:00
02428868c2 Merge pull request 'Add player count to ListCommand' (#69) from VelocityCore/CountInListCommand into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #69
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-06-10 20:42:37 +02:00
adaae7f943 Update Persistent.queueRestart to toggle
All checks were successful
SteamWarCI Build successful
2025-06-10 20:40:04 +02:00
c12d2c2ddf Add player count to ListCommand
All checks were successful
SteamWarCI Build successful
2025-06-10 20:39:11 +02:00
428c63429c Add 'queuerestart' command
All checks were successful
SteamWarCI Build successful
2025-06-10 17:26:20 +02:00
edec84c60a Merge pull request 'Use Transfer Packet for Event Velocity' (#40) from transfer-packet into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #40
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-06-10 17:18:58 +02:00
4f885a7269 Merge branch 'main' into transfer-packet
All checks were successful
SteamWarCI Build successful
2025-06-10 17:18:08 +02:00
dfd9febd8c Remove Shields from Check Arena
All checks were successful
SteamWarCI Build successful
2025-06-08 22:34:05 +02:00
1a570dca17 BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-06-08 18:18:44 +02:00
761977c90a BauSystem/BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/SteamWarLuaPlugin.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-06-08 16:42:45 +02:00
5cc417c43c Add declined question handling in CheckCommand
All checks were successful
SteamWarCI Build successful
- Implemented tracking of declined questions during checks.
- Updated messaging logic to display declined questions to users.
- Added new translations for decline-related messages.
2025-06-05 23:41:01 +02:00
1014df5f31 PR Stuff
All checks were successful
SteamWarCI Build successful
2025-06-03 23:39:16 +02:00
c920664920 Merge branch 'main' into add-offline-notify 2025-06-03 23:35:35 +02:00
3069ffc991 Merge branch 'main' into update/1.21.5
All checks were successful
SteamWarCI Build successful
2025-06-03 23:09:05 +02:00
c3db2b7f86 VelocityCore/src/de/steamwar/velocitycore/listeners/EventModeListener.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-06-01 14:36:49 +02:00
c30f24ab8f Hotfix Protocol Version for real now
All checks were successful
SteamWarCI Build successful
2025-05-31 21:32:19 +02:00
bcb0ad4bef Merge branch 'main' into update/1.21.5
All checks were successful
SteamWarCI Build successful
# Conflicts:
#	VelocityCore/src/de/steamwar/velocitycore/ServerVersion.java
2025-05-31 20:20:07 +02:00
f2a46e54ea Revert "Add WeatherCommand"
All checks were successful
SteamWarCI Build successful
This reverts commit 30fa3fd66e.
2025-05-31 19:40:08 +02:00
daede98a0f Hotfix TeamCommand
All checks were successful
SteamWarCI Build successful
2025-05-31 17:45:24 +02:00
d37a14f280 Move some constants around
All checks were successful
SteamWarCI Build successful
2025-05-31 10:04:21 +02:00
083c5c07c2 Update CMDs for all current CustomModelData usages
All checks were successful
SteamWarCI Build successful
2025-05-31 09:39:03 +02:00
7b059cde0e Add customModelData to Velocity SWItem
All checks were successful
SteamWarCI Build successful
2025-05-31 08:51:56 +02:00
30fa3fd66e Add WeatherCommand
All checks were successful
SteamWarCI Build successful
2025-05-30 21:37:07 +02:00
37f6723542 Add CommonCore.DATA and CMDs
All checks were successful
SteamWarCI Build successful
2025-05-29 17:12:32 +02:00
7a9740c4c4 Fix EventFight activeFights query and add null check for spectatePort in CookieEvents
All checks were successful
SteamWarCI Build successful
2025-05-29 15:05:01 +02:00
54eec6d57c Merge pull request 'SchematicSystem: Add music disks to auto checker' (#59) from SchematicSystem/Allow-music-disks into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #59
Reviewed-by: Chaoscaot <max@chaoscaot.de>
2025-05-29 14:37:49 +02:00
2f93f336c9 Add image upload functionality and enhance page metadata creation.
All checks were successful
SteamWarCI Build successful
2025-05-29 14:30:06 +02:00
62f9d37230 Merge pull request 'Add tech hider bug handling for arena subservers in BugCommand' (#62) from bug-auto-techhider-bug into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #62
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-05-29 14:27:56 +02:00
b479b6667b Merge pull request 'Enable a Dirt Block (Schem owner -1 and Name like GameMode) to be selected for any ServerTeam member' (#51) from FightSystem/EnableDirtBlockForServerTeam into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #51
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-05-29 12:06:41 +02:00
9bc01a4e3b Revert FightTeam
All checks were successful
SteamWarCI Build successful
2025-05-29 12:00:12 +02:00
b14cf445df Fix PR stuff
All checks were successful
SteamWarCI Build successful
2025-05-29 11:32:50 +02:00
527bc39d38 Add some more CustomModelData ids to items
All checks were successful
SteamWarCI Build successful
2025-05-29 08:44:58 +02:00
8defbaa18b Add tech hider bug handling for arena subservers in BugCommand
All checks were successful
SteamWarCI Build successful
2025-05-29 00:03:25 +02:00
a5bb62590c Refactor page routing and point calculation logic
All checks were successful
SteamWarCI Build successful
Streamlined the `page` routing structure by optimizing branch and file handling, introducing a reusable `filesInDirectory` method, and cleaning up redundancies. Enhanced `EventGroup` point calculation with incremental updates, new helper methods (`getTeams`, `getTeamsId`), and better handling of unfinished fights.
2025-05-28 23:57:29 +02:00
c35d4741a0 Add TexturePackSystem
All checks were successful
SteamWarCI Build successful
2025-05-28 14:19:21 +02:00
a2a101c4e3 Merge pull request 'Add NoGravity' (#61) from FightSystem/EnableNoGravityFights into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #61
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-05-27 19:58:55 +02:00
277e1f9f9b Add NoGravity
All checks were successful
SteamWarCI Build successful
2025-05-27 18:15:03 +02:00
380506542f Remove some more duplicates
All checks were successful
SteamWarCI Build successful
2025-05-23 09:13:23 +02:00
d410484e4c Update JDA to newest version
All checks were successful
SteamWarCI Build successful
2025-05-22 19:47:14 +02:00
8768fd7d81 Refactor event handling and group assignment logic
All checks were successful
SteamWarCI Build successful
Replaced `fight.event` with `event.eventID` for consistency and improved event handling. Adjusted `setGroup` to accept `Integer` instead of `EventGroup` to simplify group assignment logic. Removed unused `event` field in `CreateEventFight` and streamlined related processing.
2025-05-22 19:42:49 +02:00
374e314faa Add new WATUT Channel
All checks were successful
SteamWarCI Build successful
2025-05-22 18:19:31 +02:00
45a8aab321 Revert "Add "/event vote" command for SteamWarArcade Event"
All checks were successful
SteamWarCI Build successful
This reverts commit 7f215b921e.
2025-05-18 19:44:29 +02:00
0d15bbc266 Revert "Add "/event vote" command for SteamWarArcade Event"
This reverts commit a5b61fb0d6.
2025-05-18 19:44:28 +02:00
7fa97ce36c Revert "Fix TowerRun event"
This reverts commit 8cd088050d.
2025-05-18 19:44:28 +02:00
8cd088050d Fix TowerRun event
All checks were successful
SteamWarCI Build successful
2025-05-18 16:32:01 +02:00
b0bbc09113 Fix TowerRun event
All checks were successful
SteamWarCI Build successful
2025-05-18 16:28:26 +02:00
a5b61fb0d6 Add "/event vote" command for SteamWarArcade Event
All checks were successful
SteamWarCI Build successful
To be removed after event
2025-05-18 16:22:50 +02:00
297e6c9b59 Fix OOM?
All checks were successful
SteamWarCI Build successful
2025-05-18 15:58:31 +02:00
400c78447a Fix IngameListener
All checks were successful
SteamWarCI Build successful
2025-05-18 15:41:43 +02:00
778d0282d3 Fix IngameListener
All checks were successful
SteamWarCI Build successful
2025-05-18 15:37:43 +02:00
2a314e7035 Add sout
All checks were successful
SteamWarCI Build successful
2025-05-18 15:31:48 +02:00
6ed639fbb3 Add sout
All checks were successful
SteamWarCI Build successful
2025-05-18 13:46:39 +02:00
3a79f19f37 Merge remote-tracking branch 'origin/main'
All checks were successful
SteamWarCI Build successful
2025-05-18 13:34:45 +02:00
f7e81f8204 Hotfix OOM in IngameListener 2025-05-18 13:34:42 +02:00
7f215b921e Add "/event vote" command for SteamWarArcade Event
All checks were successful
SteamWarCI Build successful
To be removed after event
2025-05-18 13:32:09 +02:00
b0be06136d Add 'ergebnis' field to EventFights data model and update logic
All checks were successful
SteamWarCI Build successful
Introduced a new 'ergebnis' field to the EventFights data model to handle fight results. Updated the logic to support processing and updating this field when provided. This ensures better tracking and management of event fight outcomes.
2025-05-18 13:31:14 +02:00
8132e4fca0 Remove code duplication
All checks were successful
SteamWarCI Build successful
2025-05-18 10:34:41 +02:00
bf5eef2ebd Fix copyright nit
Remove SchematicCommand19
2025-05-18 10:28:32 +02:00
69251f42a6 Add music disks to autochecker
All checks were successful
SteamWarCI Build successful
2025-05-17 23:40:48 +02:00
6bbe94150d Merge pull request 'Prevent usage of Flashback channels for restricted players' (#58) from flashback into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #58
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-05-17 11:57:40 +02:00
717cfa8baf Prevent usage of Flashback channels for restricted players
All checks were successful
SteamWarCI Build successful
Added new channel handlers to block Flashback mod channels for users without appropriate permissions. Ensures restricted players using these channels are disconnected with a specific warning message. This enhances control over mod usage and maintains server integrity.
2025-05-16 18:00:23 +02:00
260656ad35 Fix for events
All checks were successful
SteamWarCI Build successful
2025-05-14 19:28:27 +02:00
e893d7934a Fix TowerRun for events
All checks were successful
SteamWarCI Build successful
2025-05-14 19:11:05 +02:00
d0665932f4 Fix TowerRunGame.reset
All checks were successful
SteamWarCI Build successful
2025-05-11 20:19:23 +02:00
d6fba9b0af Fix many simple things
All checks were successful
SteamWarCI Build successful
2025-05-11 19:02:46 +02:00
b229b0d0ae Fix many simple things
All checks were successful
SteamWarCI Build successful
2025-05-11 19:02:02 +02:00
ac00245b04 Fix lag of IngameListener
All checks were successful
SteamWarCI Build successful
2025-05-11 18:50:21 +02:00
6eb01a61b1 Update every Back item to use the new texture
All checks were successful
SteamWarCI Build successful
2025-05-11 18:28:06 +02:00
fa13872f22 Add SWListInv 2025-05-11 18:28:06 +02:00
79edc1c591 Add Simulator to improvements 2025-05-11 18:28:06 +02:00
6e9db276ef Add event referees management and teams endpoint.
Introduced a new route for managing event referees with get, put, and delete operations. Also added an endpoint to fetch all teams, and integrated the referees routing into event configuration.
2025-05-10 22:22:43 +02:00
e3179c69aa Refactor event group management and routing system
All checks were successful
SteamWarCI Build successful
2025-05-08 17:32:12 +02:00
c633694222 Refactor event handling and tie-break logic implementation
All checks were successful
SteamWarCI Build successful
Introduced new methods and structures in EventGroup, EventRelation, and EventFight to streamline point calculations, tie-break detection, and dependency resolution. Improved modularity by adding methods like getLastFight, needsTieBreak, and getDependents while optimizing the event result setting process. This refactor enhances clarity, reduces redundancy, and supports better maintainability of event-related logic.
2025-05-07 16:16:36 +02:00
a4eea298d2 Hotfix PrepareSchem not copying allowReplay and replaceColor while creating a prepared schem
All checks were successful
SteamWarCI Build successful
2025-05-07 14:37:00 +02:00
f387805b40 Add event grouping
All checks were successful
SteamWarCI Build successful
2025-05-07 13:51:13 +02:00
2c644eef26 Merge pull request 'Maybe™️ fix Techhider' (#56) from techhider-fixes into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #56
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-05-02 14:26:18 +02:00
7f0fa09c56 Update OpenJ9 dump configuration to enable heap hprof.
All checks were successful
SteamWarCI Build successful
2025-05-02 14:14:27 +02:00
6940c32b02 Adjust OpenJ9 JVM arguments to include hprof option in dumps.
All checks were successful
SteamWarCI Build successful
2025-05-02 14:13:33 +02:00
5015aca159 Maybe™️ fix Techhider
All checks were successful
SteamWarCI Build successful
2025-05-02 10:13:47 +02:00
32c85b9bd5 Merge pull request 'Add error handling and logging to Techhider and TinyProtocol' (#55) from techhider-debug-nachrichten into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #55
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-04-29 18:13:00 +02:00
15bb92fbba Improve error handling and logging in Techhider and TinyProtocol
All checks were successful
SteamWarCI Build successful
Refined logging messages for clarity by replacing "Techhider" with "PacketInterceptor" where appropriate. Adjusted error handling in `TechhiderbugCommand` by removing redundant `flush` calls and properly logging exceptions during bug report generation. These changes aim to enhance maintainability and debugging.
2025-04-29 18:04:58 +02:00
d6a5caf95d Add error handling and logging to Techhider and TinyProtocol
All checks were successful
SteamWarCI Build successful
2025-04-29 17:59:22 +02:00
1912ad52e4 Add protocol version check to handle potential packet issue
All checks were successful
SteamWarCI Build successful
2025-04-28 23:25:36 +02:00
66d18e316b Hotfix: Schematic Download geht für nicht Supervisor Player
All checks were successful
SteamWarCI Build successful
2025-04-28 16:47:43 +02:00
f30c3b2f34 Update anvilgui library to version 1.10.5-SNAPSHOT
All checks were successful
SteamWarCI Build successful
2025-04-27 02:58:05 +02:00
7e863e8062 Refactor entity field access with version-aware adjustments
All checks were successful
SteamWarCI Build successful
2025-04-27 02:53:59 +02:00
5cdad8c2f4 Add Dev 1.21.5
All checks were successful
SteamWarCI Build successful
2025-04-27 02:28:39 +02:00
87a7120a6a Merge remote-tracking branch 'origin/main'
All checks were successful
SteamWarCI Build successful
2025-04-26 23:57:03 +02:00
b5a9564808 Allow next next location in JumpAndRun 2025-04-26 23:56:59 +02:00
f93362a023 LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-04-26 23:48:33 +02:00
b1bef4ced5 Add ErrorLogging for Bugged Schematics
All checks were successful
SteamWarCI Build successful
2025-04-26 22:27:53 +02:00
e7e1e2d968 Merge remote-tracking branch 'origin/main'
All checks were successful
SteamWarCI Build successful
2025-04-26 22:17:50 +02:00
713275ba11 Add ErrorLogging for Bugged Schematics 2025-04-26 22:17:43 +02:00
e72ae3cf94 LobbySystem/src/de/steamwar/lobby/jumpandrun/JumpAndRun.java aktualisiert
All checks were successful
SteamWarCI Build successful
2025-04-26 22:13:31 +02:00
d36753dec1 Merge pull request 'Fixed meterstock' (#54) from BauSystem/fix-meterstock into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #54
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-04-26 13:37:33 +02:00
84cc292df4 Fixed meterstock
All checks were successful
SteamWarCI Build successful
2025-04-26 13:08:13 +02:00
f89c4e88f9 Fix HotbarKit
All checks were successful
SteamWarCI Build successful
Fix steamwar.devserver.gradle
Add WarGear20 to build.gradle.kts
2025-04-25 18:07:14 +02:00
aeff16b7dd Update to support Minecraft 1.21.5 version
All checks were successful
SteamWarCI Build successful
2025-04-24 14:07:35 +02:00
bb97d80c18 Refactor to align with Minecraft 1.21.5 API changes
All checks were successful
SteamWarCI Build successful
2025-04-24 13:10:48 +02:00
7d45680fcb Enable a Dirt Block (Schem owner -1 and Name like GameMode) to be selected for any ServerTeam member
All checks were successful
SteamWarCI Build successful
2025-04-23 21:52:27 +02:00
a38f9222dd Merge remote-tracking branch 'origin/main'
All checks were successful
SteamWarCI Build successful
2025-04-23 20:55:30 +02:00
5ee9d3e167 Hotfix HotbarKit 2025-04-23 20:55:26 +02:00
98321de46c Merge pull request 'Replace Jukeboxes with Lodestone in panzer sklave' (#50) from BauSystem/fix-panzersklave into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #50
Reviewed-by: YoyoNow <yoyonow@noreply.localhost>
2025-04-23 19:14:53 +02:00
239ba3f213 made more readable
All checks were successful
SteamWarCI Build successful
2025-04-23 19:14:44 +02:00
3d7dedd3ad Fix jukeboxes in panzer sklave
All checks were successful
SteamWarCI Build successful
2025-04-23 19:13:07 +02:00
ef66b8c1f1 Fix HotbarKit.onInventoryClick not resetting the cursor item
All checks were successful
SteamWarCI Build successful
2025-04-23 18:28:58 +02:00
1201b16ee4 Merge pull request 'Improve Server starter 'steamwar.devserver.gradle'' (#41) from ImprovedServerStarter into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #41
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-04-23 18:16:39 +02:00
4ddd88f540 Merge pull request 'Enable clicking 'Ready' in inventory' (#42) from FightSystem/HotbarKitInInv into main
All checks were successful
SteamWarCI Build successful
Reviewed-on: #42
Reviewed-by: Lixfel <lixfel@noreply.localhost>
2025-04-23 18:12:40 +02:00
ca35ab9234 Remove code Duplication HotbarKit
All checks were successful
SteamWarCI Build successful
2025-04-20 20:41:47 +02:00
3df84a7dad Update from PR
All checks were successful
SteamWarCI Build successful
2025-04-20 20:40:19 +02:00
83c20729fa Fix RAM usage on multiple usages
All checks were successful
SteamWarCI Build successful
2025-04-20 08:27:56 +02:00
925901e40e Fix steamwar.devserver.gradle 2025-04-20 08:27:56 +02:00
059dd314d1 Fix building of DevServer 2025-04-20 08:27:56 +02:00
86ff619548 Add FightServer to configure those 2025-04-20 08:27:56 +02:00
76e00b07db Add plugins option to DevServer Task 2025-04-20 08:27:56 +02:00
4edfd32ff5 Add a check if the template exists in the user.home directory 2025-04-20 08:27:56 +02:00
5669725f9b Fix dev.py path 2025-04-20 08:27:56 +02:00
335649fa87 Fix steamwar.devserver.gradle 2025-04-20 08:27:56 +02:00
9001e83321 Add steamwar.properties 'worldName' and 'host'
Remove some options
2025-04-20 08:27:56 +02:00
32703c6659 Enable Velocity, prio Setup needed for that 2025-04-20 08:27:56 +02:00
e393aad25f Add all parameters that dev.py has 2025-04-20 08:27:56 +02:00
50543ddd4e Improve Server starter 'steamwar.devserver.gradle'
See build.gradle.kts of BauSystem
2025-04-20 08:27:56 +02:00
ae7d394ae2 Enable clicking 'Ready' in inventory
All checks were successful
SteamWarCI Build successful
2025-04-17 15:45:25 +02:00
40eeb4993f Add support for cookie-based event spectating
All checks were successful
SteamWarCI Build successful
ACHTUNG: Janky!
2025-04-13 20:06:38 +02:00
4c23915987 Use Transfer Packet for Event Velocity
Some checks failed
SteamWarCI Build failed
2025-04-13 18:09:24 +02:00
71522973a7 Refactor schematic checks to handle unseen notifications
All checks were successful
SteamWarCI Build successful
2025-03-24 16:50:39 +01:00
436 changed files with 11475 additions and 4224 deletions

4
.gitignore vendored
View File

@ -17,3 +17,7 @@ bin/
# Other # Other
lib lib
/WebsiteBackend/data
/WebsiteBackend/logs
/WebsiteBackend/skins
/WebsiteBackend/config.json

View File

@ -0,0 +1,140 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2020 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.utils;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.bausystem.utils.tps.TPSFreezeUtils;
import de.steamwar.bausystem.utils.tps.TPSLimitUtils;
import de.steamwar.core.TPSWarpUtils;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class TickManager15 implements TickManager, Listener {
private static float currentTPSLimit = 20;
private boolean currentlyStepping = false;
private float currentLimit;
private int stepsTotal;
private int stepsLeft;
@Override
public boolean canFreeze() {
return TPSFreezeUtils.isCanFreeze();
}
@Override
public void setTickRate(float tickRate) {
if (currentlyStepping) {
currentlyStepping = false;
Bukkit.getOnlinePlayers().forEach(player -> {
BossBarService.instance.remove(player, Region.getGlobalRegion(), "TickStep");
});
}
TPSWarpUtils.warp(tickRate);
if (currentTPSLimit == 0 && tickRate != 0) {
TPSFreezeUtils.unfreeze();
}
currentTPSLimit = tickRate;
if (tickRate == 0) {
TPSLimitUtils.unlimit();
TPSFreezeUtils.freeze();
} else if (tickRate < 20.0) {
TPSLimitUtils.limit(tickRate);
} else if (tickRate >= 20) {
TPSLimitUtils.unlimit();
}
}
@Override
public boolean isFrozen() {
return TPSFreezeUtils.frozen();
}
@Override
public void setFreeze(boolean freeze) {
if (freeze) {
setTickRate(0);
}
}
@Override
public void stepTicks(int ticks) {
currentLimit = 0;
setTickRate(20);
stepsLeft = ticks;
stepsTotal = ticks;
currentlyStepping = true;
}
@Override
public void sprintTicks(int ticks) {
currentLimit = currentTPSLimit;
setTickRate(4000);
stepsLeft = ticks;
stepsTotal = ticks;
currentlyStepping = true;
}
@Override
public boolean isSprinting() {
return currentlyStepping && currentTPSLimit > 20;
}
@Override
public boolean isStepping() {
return currentlyStepping && currentTPSLimit <= 20;
}
@Override
public float getTickRate() {
return currentTPSLimit;
}
@Override
public void setBlockTpsPacket(boolean block) {
}
@Override
public long getTotalTicks() {
return stepsTotal;
}
@Override
public long getDoneTicks() {
return stepsTotal - stepsLeft;
}
@Override
public long getRemainingTicks() {
return stepsLeft;
}
@EventHandler
public void onTickEnd(TickEndEvent event) {
if (!currentlyStepping) return;
stepsLeft--;
if (stepsLeft <= 0) {
setTickRate(currentLimit);
}
}
}

View File

@ -1,7 +1,7 @@
/* /*
* This file is a part of the SteamWar software. * This file is a part of the SteamWar software.
* *
* Copyright (C) 2023 SteamWar.de-Serverteam * Copyright (C) 2020 SteamWar.de-Serverteam
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by * it under the terms of the GNU Affero General Public License as published by
@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package de.steamwar.bausystem.features.tpslimit; package de.steamwar.bausystem.utils.tps;
import de.steamwar.Reflection; import de.steamwar.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;

View File

@ -1,7 +1,7 @@
/* /*
* This file is a part of the SteamWar software. * This file is a part of the SteamWar software.
* *
* Copyright (C) 2023 SteamWar.de-Serverteam * Copyright (C) 2020 SteamWar.de-Serverteam
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by * it under the terms of the GNU Affero General Public License as published by
@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package de.steamwar.bausystem.features.tpslimit; package de.steamwar.bausystem.utils.tps;
import de.steamwar.Reflection; import de.steamwar.Reflection;
import lombok.Getter; import lombok.Getter;

View File

@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package de.steamwar.bausystem.features.tpslimit; package de.steamwar.bausystem.utils.tps;
import de.steamwar.Reflection; import de.steamwar.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;

View File

@ -22,7 +22,6 @@ package de.steamwar.bausystem.utils;
import com.destroystokyo.paper.event.server.ServerTickEndEvent; import com.destroystokyo.paper.event.server.ServerTickEndEvent;
import com.destroystokyo.paper.event.server.ServerTickStartEvent; import com.destroystokyo.paper.event.server.ServerTickStartEvent;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.tpslimit.TPSFreezeUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -37,7 +36,7 @@ public class TickListener19 implements TickListener, Listener {
@EventHandler @EventHandler
public void onServerTickStart(ServerTickStartEvent event) { public void onServerTickStart(ServerTickStartEvent event) {
if (TPSFreezeUtils.isFrozen()) return; if (TickManager.impl.isFrozen()) return;
Bukkit.getPluginManager().callEvent(new TickStartEvent()); Bukkit.getPluginManager().callEvent(new TickStartEvent());
tickStartRan = true; tickStartRan = true;
} }

View File

@ -21,41 +21,39 @@ package de.steamwar.bausystem.utils;
import de.steamwar.Reflection; import de.steamwar.Reflection;
import de.steamwar.bausystem.features.util.NoClipCommand; import de.steamwar.bausystem.features.util.NoClipCommand;
import net.minecraft.core.component.DataComponents; import io.papermc.paper.datacomponent.DataComponentTypes;
import net.minecraft.nbt.NBTBase; import io.papermc.paper.datacomponent.item.ItemContainerContents;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
import net.minecraft.nbt.NBTTagList; import net.minecraft.network.protocol.game.ClientboundExplodePacket;
import net.minecraft.network.protocol.game.PacketPlayInSetCreativeSlot; import net.minecraft.network.protocol.game.ClientboundGameEventPacket;
import net.minecraft.network.protocol.game.PacketPlayOutExplosion; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.network.protocol.game.PacketPlayOutGameStateChange; import net.minecraft.server.level.ServerPlayerGameMode;
import net.minecraft.server.level.EntityPlayer; import net.minecraft.world.entity.player.Abilities;
import net.minecraft.server.level.PlayerInteractManager; import net.minecraft.world.level.GameType;
import net.minecraft.world.entity.player.EntityHuman;
import net.minecraft.world.entity.player.PlayerAbilities;
import net.minecraft.world.item.component.CustomData;
import net.minecraft.world.level.EnumGamemode;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_21_R2.inventory.CraftItemStack; import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.util.List;
import java.util.Optional; import java.util.Optional;
public class NMSWrapper21 implements NMSWrapper { public class NMSWrapper21 implements NMSWrapper {
private static final Reflection.Field<PlayerInteractManager> playerInteractManager = Reflection.getField(EntityPlayer.class, null, PlayerInteractManager.class); private static final Reflection.Field<ServerPlayerGameMode> playerInteractManager = Reflection.getField(ServerPlayer.class, null, ServerPlayerGameMode.class);
private static final Reflection.Field<GameType> playerGameMode = Reflection.getField(ServerPlayerGameMode.class, GameType.class, 0);
@Override @Override
public void setInternalGameMode(Player player, GameMode gameMode) { public void setInternalGameMode(Player player, GameMode gameMode) {
playerInteractManager.get(((CraftPlayer) player).getHandle()).a(EnumGamemode.a(gameMode.getValue())); playerGameMode.set(playerInteractManager.get(((CraftPlayer) player).getHandle()), GameType.byId(gameMode.getValue()));
} }
@Override @Override
public void setSlotToItemStack(Player player, Object o) { public void setSlotToItemStack(Player player, Object o) {
PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot = (PacketPlayInSetCreativeSlot) o; ClientboundContainerSetSlotPacket packetPlayInSetCreativeSlot = (ClientboundContainerSetSlotPacket) o;
int index = packetPlayInSetCreativeSlot.b(); int index = packetPlayInSetCreativeSlot.getSlot();
if (index >= 36 && index <= 44) { if (index >= 36 && index <= 44) {
index -= 36; index -= 36;
} else if (index > 44) { } else if (index > 44) {
@ -63,25 +61,23 @@ public class NMSWrapper21 implements NMSWrapper {
} else if (index <= 8) { } else if (index <= 8) {
index = index - 8 + 36; index = index - 8 + 36;
} }
player.getInventory().setItem(index, CraftItemStack.asBukkitCopy(packetPlayInSetCreativeSlot.e())); player.getInventory().setItem(index, CraftItemStack.asBukkitCopy(packetPlayInSetCreativeSlot.getItem()));
if (index < 9) player.getInventory().setHeldItemSlot(index); if (index < 9) player.getInventory().setHeldItemSlot(index);
player.updateInventory(); player.updateInventory();
} }
private static final Reflection.Field<PacketPlayOutGameStateChange.a> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, PacketPlayOutGameStateChange.a.class, 12); private static final Reflection.Field<ClientboundGameEventPacket.Type> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, ClientboundGameEventPacket.Type.class, 14);
@Override @Override
public void setGameStateChangeReason(Object packet) { public void setGameStateChangeReason(Object packet) {
gameStateChangeReason.set(packet, PacketPlayOutGameStateChange.d); gameStateChangeReason.set(packet, ClientboundGameEventPacket.CHANGE_GAME_MODE);
} }
private static final Reflection.Field<PlayerAbilities> playerAbilities = Reflection.getField(EntityHuman.class, null, PlayerAbilities.class);
@Override @Override
public void setPlayerBuildAbilities(Player player) { public void setPlayerBuildAbilities(Player player) {
PlayerAbilities abilities = playerAbilities.get(((CraftPlayer) player).getHandle()); Abilities abilities = (((CraftPlayer) player).getHandle()).getAbilities();
abilities.d = true; abilities.mayBuild = true;
abilities.e = true; abilities.mayfly = true;
} }
@Override @Override
@ -93,49 +89,45 @@ public class NMSWrapper21 implements NMSWrapper {
@Override @Override
public boolean checkItemStack(ItemStack item) { public boolean checkItemStack(ItemStack item) {
net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); ItemContainerContents data = item.getData(DataComponentTypes.CONTAINER);
NBTTagCompound tag = nmsItem.a(DataComponents.b, CustomData.a).c(); if (data == null) {
if (tag.e("BlockEntityTag")) {
NBTTagCompound blockTag = tag.p("BlockEntityTag");
if (blockTag.e("Items")) {
return drillDown(blockTag.c("Items", 10), 0, 0) > threshold;
}
}
return false; return false;
} }
private int drillDown(NBTTagList items, int layer, int start) { return drillDown(data.contents(), 0, 0) > threshold;
}
private int drillDown(List<ItemStack> items, int layer, int start) {
if (layer > 2) return start + threshold; if (layer > 2) return start + threshold;
int invalid = start; int invalid = start;
for (NBTBase nbtBase : items) { for (int i = start; i < items.size(); i++) {
if (!(nbtBase instanceof NBTTagCompound slot)) ItemStack item = items.get(i);
if (item.isEmpty()) continue;
invalid += item.getAmount();
ItemContainerContents data = item.getData(DataComponentTypes.CONTAINER);
if (data == null) {
continue; continue;
if (slot.e("tag")) {
invalid += slot.f("Count");
NBTTagCompound iTag = slot.p("tag");
if (iTag.e("BlockEntityTag")) {
NBTTagCompound blockTag = iTag.p("BlockEntityTag");
if (blockTag.e("Items")) {
invalid = drillDown(blockTag.c("Items", 10), layer + 1, invalid);
} }
List<ItemStack> subItems = data.contents();
if (subItems.size() > 1) {
invalid = drillDown(subItems, layer + 1, invalid);
} }
} }
if (invalid > threshold)
break;
}
return invalid; return invalid;
} }
@Override @Override
public Object resetExplosionKnockback(Object packet) { public Object resetExplosionKnockback(Object packet) {
PacketPlayOutExplosion explosion = (PacketPlayOutExplosion) packet; ClientboundExplodePacket explosion = (ClientboundExplodePacket) packet;
return new PacketPlayOutExplosion( return new ClientboundExplodePacket(
explosion.b(), explosion.center(),
Optional.empty(), Optional.empty(),
explosion.f(), explosion.explosionParticle(),
explosion.g() explosion.explosionSound()
); );
} }
} }

View File

@ -0,0 +1,150 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2025 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.utils;
import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.Reflection;
import de.steamwar.bausystem.BauSystem;
import net.minecraft.network.protocol.game.ClientboundTickingStatePacket;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerTickRateManager;
import net.minecraft.world.TickRateManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class TickManager21 implements TickManager {
private static final ServerTickRateManager manager = MinecraftServer.getServer().tickRateManager();
private static final Reflection.Field<Integer> frozenTicksToRun = Reflection.getField(TickRateManager.class, int.class, 0);
private static final Reflection.Field<Long> remainingSprintTicks = Reflection.getField(ServerTickRateManager.class, long.class, 0);
private boolean blockTpsPacket = true;
private int totalSteps;
public TickManager21() {
TinyProtocol.instance.addFilter(ClientboundTickingStatePacket.class, this::blockPacket);
}
private Object blockPacket(Player player, Object packet) {
if (blockTpsPacket) {
return new ClientboundTickingStatePacket(20, manager.isFrozen());
} else {
return packet;
}
}
@Override
public boolean canFreeze() {
return true;
}
@Override
public void setBlockTpsPacket(boolean block) {
blockTpsPacket = block;
if (blockTpsPacket) {
ClientboundTickingStatePacket packet = new ClientboundTickingStatePacket(20, manager.isFrozen());
Bukkit.getOnlinePlayers().forEach(player -> TinyProtocol.instance.sendPacket(player, packet));
} else {
ClientboundTickingStatePacket packet = new ClientboundTickingStatePacket(manager.tickrate(), manager.isFrozen());
Bukkit.getOnlinePlayers().forEach(player -> TinyProtocol.instance.sendPacket(player, packet));
}
}
@Override
public void setTickRate(float tickRate) {
if (isFrozen()) {
setFreeze(false);
}
manager.setTickRate(tickRate);
}
@Override
public boolean isFrozen() {
return manager.isFrozen();
}
@Override
public void setFreeze(boolean freeze) {
manager.setFrozen(freeze);
}
@Override
public void stepTicks(int ticks) {
if (manager.isSprinting()) {
manager.stopSprinting();
} else if (manager.isSteppingForward()) {
manager.stopStepping();
}
this.totalSteps = ticks;
manager.setFrozen(true);
manager.stepGameIfPaused(ticks);
manager.setFrozen(false);
Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), (bukkitTask) -> {
if (manager.isSteppingForward()) return;
manager.setFrozen(true);
bukkitTask.cancel();
}, 1, 1);
manager.tick();
}
@Override
public void sprintTicks(int ticks) {
if (manager.isSteppingForward()) {
manager.stopStepping();
} else if (manager.isSprinting()) {
manager.stopSprinting();
}
this.totalSteps = ticks;
manager.requestGameToSprint(ticks, true);
}
@Override
public boolean isSprinting() {
return manager.isSprinting();
}
@Override
public boolean isStepping() {
return manager.isSteppingForward();
}
@Override
public float getTickRate() {
return manager.tickrate();
}
@Override
public long getRemainingTicks() {
if (isSprinting()) {
return remainingSprintTicks.get(manager);
} else {
return frozenTicksToRun.get(manager);
}
}
@Override
public long getDoneTicks() {
return totalSteps - getRemainingTicks();
}
@Override
public long getTotalTicks() {
return totalSteps;
}
}

View File

@ -25,7 +25,7 @@ PAGE_LIST=§e Page ({0}/{1}) »»
LIST_PREVIOUS_PAGE=§ePrevious page LIST_PREVIOUS_PAGE=§ePrevious page
LIST_NEXT_PAGE=§eNext page LIST_NEXT_PAGE=§eNext page
# Permissions # Permissions
NO_PERMISSION=You are not allowed to use that here NO_PERMISSION=§7You are not allowed to use that here
SPECTATOR=§fSpectator SPECTATOR=§fSpectator
# Scoreboard # Scoreboard
SCOREBOARD_TIME=Time SCOREBOARD_TIME=Time
@ -38,6 +38,7 @@ SCOREBOARD_TRACE_TICKS=Ticks
SCOREBOARD_TECHHIDER=TechHider§8: §aOn SCOREBOARD_TECHHIDER=TechHider§8: §aOn
SCOREBOARD_XRAY=XRay§8: §aOn SCOREBOARD_XRAY=XRay§8: §aOn
SCOREBOARD_LOCK_TEAM=Bau Lock§8: §eTeam SCOREBOARD_LOCK_TEAM=Bau Lock§8: §eTeam
SCOREBOARD_LOCK_SUPERVISOR=Bau Lock§8: §eSupervisor
SCOREBOARD_LOCK_TEAM_AND_SERVERTEAM=Bau Lock§8: §e(Server) Team SCOREBOARD_LOCK_TEAM_AND_SERVERTEAM=Bau Lock§8: §e(Server) Team
SCOREBOARD_LOCK_SERVERTEAM=Bau Lock§8: §eServer Team SCOREBOARD_LOCK_SERVERTEAM=Bau Lock§8: §eServer Team
SCOREBOARD_LOCK_NOBODY=Bau Lock§8: §cNobody SCOREBOARD_LOCK_NOBODY=Bau Lock§8: §cNobody
@ -136,7 +137,9 @@ BAU_INFO_ITEM_LORE_FIRE=§7Fire§8: §e{0}
BAU_INFO_ITEM_LORE_COLOR=§7Color§8: §e{0} BAU_INFO_ITEM_LORE_COLOR=§7Color§8: §e{0}
BAU_INFO_ITEM_LORE_PROTECT=§7Protect§8: §e{0} BAU_INFO_ITEM_LORE_PROTECT=§7Protect§8: §e{0}
BAU_INFO_ITEM_LORE_ITEMS=§7Items§8: §e{0} BAU_INFO_ITEM_LORE_ITEMS=§7Items§8: §e{0}
BAU_INFO_ITEM_LORE_NO_GRAVITY = §8NoGravity§8: §e{0} BAU_INFO_ITEM_LORE_NO_GRAVITY = §7NoGravity§8: §e{0}
BAU_INFO_ITEM_LORE_TESTBLOCK=§7Testblock§8: §e{0}
BAU_INFO_ITEM_LORE_CHANGED=§7Changed§8: §e{0}
BAU_INFO_COMMAND_HELP=§8/§ebauinfo §8- §7Information regarding this build server BAU_INFO_COMMAND_HELP=§8/§ebauinfo §8- §7Information regarding this build server
BAU_INFO_COMMAND_OWNER=§7Owner§8: §e{0} BAU_INFO_COMMAND_OWNER=§7Owner§8: §e{0}
BAU_INFO_COMMAND_MEMBER=§7{0} §8[§7{1}§8]§8: §e{2} BAU_INFO_COMMAND_MEMBER=§7{0} §8[§7{1}§8]§8: §e{2}
@ -389,6 +392,12 @@ INVENTORY_FILL_HELP=§8/§einventoryfill §8- §7Toggles InventoryFill
INVENTORY_FILL_INFO=§7Helps you fill containers by looking at them while sneaking and dropping the item. Or just scroll on a container to change the amount of the item inside. INVENTORY_FILL_INFO=§7Helps you fill containers by looking at them while sneaking and dropping the item. Or just scroll on a container to change the amount of the item inside.
INVENTORY_FILL_ENABLE=§aInventoryFiller activated INVENTORY_FILL_ENABLE=§aInventoryFiller activated
INVENTORY_FILL_DISABLE=§cInventoryFiller deactivated INVENTORY_FILL_DISABLE=§cInventoryFiller deactivated
INVENTORY_FILL_GUI_NAME=Inventory Filler
INVENTORY_FILL_GUI_POWER=§ePower§8:§7 {0}
INVENTORY_FILL_GUI_TNT=§eTNT
# Ray Visualizer
RAY_VISUALIZER_ENABLE=§aRayVisualizer activated
RAY_VISUALIZER_DISABLE=§aRayVisualizer deactivated
# Killchecker # Killchecker
KILLCHECKER_HELP_ENABLE=§8/§ekillchecker enable §8- §7Enables Killchecker / Recalculates kills KILLCHECKER_HELP_ENABLE=§8/§ekillchecker enable §8- §7Enables Killchecker / Recalculates kills
KILLCHECKER_HELP_DISABLE=§8/§ekillchecker disable §8- §7Disables Killchecker KILLCHECKER_HELP_DISABLE=§8/§ekillchecker disable §8- §7Disables Killchecker
@ -396,6 +405,7 @@ KILLCHECKER_INFO=§7Shows the overlaps of cannon kills in your build area.
KILLCHECKER_INFO2=§7Only colorable blocks like Wool, Terractotta, Stained Glass and Concrete are counted. KILLCHECKER_INFO2=§7Only colorable blocks like Wool, Terractotta, Stained Glass and Concrete are counted.
KILLCHECKER_ENABLE=§aKillchecker activated KILLCHECKER_ENABLE=§aKillchecker activated
KILLCHECKER_DISABLE=§cKillchecker deactivated KILLCHECKER_DISABLE=§cKillchecker deactivated
KILLCHECKER_NO_BUILD=§cThere is no Build Area in this Region
KILLCHECKER_BOSSBAR=§e§l{0} §7(§e{1}%§7) §e§l{2}§7 cannons KILLCHECKER_BOSSBAR=§e§l{0} §7(§e{1}%§7) §e§l{2}§7 cannons
# BlockCounter # BlockCounter
BLOCK_COUNTER_HELP_TOGGLE=§8/§eblockcounter §8- §7Toggle on/off BLOCK_COUNTER_HELP_TOGGLE=§8/§eblockcounter §8- §7Toggle on/off
@ -514,7 +524,7 @@ LOADER_HELP_GUI=§8/§7loader gui §8- §7Shows Loader gui
LOADER_HELP_STOP=§8/§eloader stop §8- §7Stops recording/playback LOADER_HELP_STOP=§8/§eloader stop §8- §7Stops recording/playback
LOADER_HELP_WAIT=§8/§7loader wait §8[§7Ticks§8] - §7Sets wait time between shots LOADER_HELP_WAIT=§8/§7loader wait §8[§7Ticks§8] - §7Sets wait time between shots
LOADER_HELP_SPEED=§8/§7loader speed §8[§7Ticks§8] - §7Sets wait time between actions LOADER_HELP_SPEED=§8/§7loader speed §8[§7Ticks§8] - §7Sets wait time between actions
LOADER_NO_LOADER=§cYou have no Laoder. Create one with /loader setup LOADER_NO_LOADER=§cYou have no Loader. Create one with /loader setup
LOADER_NEW=§7Load your cannon and fire it once, to initialise the loader. LOADER_NEW=§7Load your cannon and fire it once, to initialise the loader.
LOADER_HOW_TO_START=§7Then, execute /§eloader start§7 to start the Loader LOADER_HOW_TO_START=§7Then, execute /§eloader start§7 to start the Loader
LOADER_ACTIVE=§7The Loader is now active. LOADER_ACTIVE=§7The Loader is now active.
@ -730,12 +740,10 @@ REGION_ITEM_RESET=§eReset
REGION_ITEM_TESTBLOCK=§eDummy REGION_ITEM_TESTBLOCK=§eDummy
REGION_ITEM_TNT_OFF=§7TNT: §eDeactivated REGION_ITEM_TNT_OFF=§7TNT: §eDeactivated
REGION_ITEM_TNT_ONLY_TB=§7TNT: §eonly dummy REGION_ITEM_TNT_ONLY_TB=§7TNT: §eonly dummy
REGION_ITEM_TNT_ONLY_BUILD=§7TNT: §eonly build
REGION_ITEM_TNT_ON=§7TNT: §eActivated REGION_ITEM_TNT_ON=§7TNT: §eActivated
REGION_ITEM_SELECTOR_TITLE=Tnt Mode REGION_ITEM_SELECTOR_TITLE=Tnt Mode
REGION_ITEM_SELECTOR_ON=§eActivate REGION_ITEM_SELECTOR_ON=§eActivate
REGION_ITEM_SELECTOR_ONLY_TB=§eonly dummy REGION_ITEM_SELECTOR_ONLY_TB=§eonly dummy
REGION_ITEM_SELECTOR_ONLY_BUILD=§eonly build
REGION_ITEM_SELECTOR_OFF=§eDeactivate REGION_ITEM_SELECTOR_OFF=§eDeactivate
#Region #Region
REGION_COLOR_HELP_COLOR=§8/§ecolor §8[§7Color§8] §8- §7Sets the color of the region REGION_COLOR_HELP_COLOR=§8/§ecolor §8[§7Color§8] §8- §7Sets the color of the region
@ -846,7 +854,7 @@ LAUFBAU_SETTINGS_INACTIVE=§cInactive
LAUFBAU_SETTINGS_MIXED=§e{0}§8/§e{1} §aActive LAUFBAU_SETTINGS_MIXED=§e{0}§8/§e{1} §aActive
LAUFBAU_SETTINGS_GUI_BACK=§eBack LAUFBAU_SETTINGS_GUI_BACK=§eBack
LAUFBAU_SETTINGS_TOGGLE=§eClick §8-§7 Toggle LAUFBAU_SETTINGS_TOGGLE=§eClick §8-§7 Toggle
LAUFBAU_SETTINGS_ADVANCED=§eMiddle-Click §8-§7 Advanced settings LAUFBAU_SETTINGS_ADVANCED=§eLeft-Click §8-§7 Advanced settings
LAUFBAU_BLOCK_COBWEB=§eCobweb LAUFBAU_BLOCK_COBWEB=§eCobweb
LAUFBAU_BLOCK_GRASS_PATH=§eGrass Path LAUFBAU_BLOCK_GRASS_PATH=§eGrass Path
LAUFBAU_BLOCK_SOUL_SAND=§eSoul Sand LAUFBAU_BLOCK_SOUL_SAND=§eSoul Sand
@ -932,7 +940,6 @@ SELECT_HELP=§8/§eselect §8[§7RegionsTyp§8] §8- §7Select a region type
SELECT_EXTENSION_HELP=§8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Select a region type with or without extension SELECT_EXTENSION_HELP=§8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Select a region type with or without extension
SELECT_GLOBAL_REGION=§cThe global region cannot be selected SELECT_GLOBAL_REGION=§cThe global region cannot be selected
SELECT_NO_TYPE=§cThis region has no {0} SELECT_NO_TYPE=§cThis region has no {0}
SELECT_NO_EXTENSION=§cThis region has no extension
SELECT_MESSAGE=§7WorldEdit selection set to {0}, {1}, {2} and {3}, {4}, {5} SELECT_MESSAGE=§7WorldEdit selection set to {0}, {1}, {2} and {3}, {4}, {5}
SKULL_HELP=§8/§eskull §8[§eplayer§8] §8-§7 Receive a player head SKULL_HELP=§8/§eskull §8[§eplayer§8] §8-§7 Receive a player head
SKULL_INVALID=§cInvalid player name SKULL_INVALID=§cInvalid player name

View File

@ -25,7 +25,7 @@ PAGE_LIST=§e Seite ({0}/{1}) »»
LIST_PREVIOUS_PAGE=§eVorherige Seite LIST_PREVIOUS_PAGE=§eVorherige Seite
LIST_NEXT_PAGE=§eNächste Seite LIST_NEXT_PAGE=§eNächste Seite
# Permission # Permission
NO_PERMISSION=Du darfst dies hier nicht nutzen NO_PERMISSION=§7Du darfst dies hier nicht nutzen
SPECTATOR=§fZuschauer SPECTATOR=§fZuschauer
# Scoreboard # Scoreboard
SCOREBOARD_TIME=Uhrzeit SCOREBOARD_TIME=Uhrzeit
@ -119,12 +119,9 @@ BACKUP_LORE=§eKlicken zum Laden
BAU_COMMAND_HELP_INFO=§8/§ebau info §8- §7Alias für §8/§ebauinfo BAU_COMMAND_HELP_INFO=§8/§ebau info §8- §7Alias für §8/§ebauinfo
BAU_INFO_ITEM_NAME=§eBau-Management BAU_INFO_ITEM_NAME=§eBau-Management
## This is used in BauInfoBauGuiItem.java ## This is used in BauInfoBauGuiItem.java
BAU_INFO_ITEM_LORE_TNT=§7TNT§8: §e{0}
BAU_INFO_ITEM_LORE_FREEZE=§7Freeze§8: §e{0}
BAU_INFO_ITEM_LORE_DAMAGE=§7Damage§8: §e{0}
BAU_INFO_ITEM_LORE_FIRE=§7Feuer§8: §e{0} BAU_INFO_ITEM_LORE_FIRE=§7Feuer§8: §e{0}
BAU_INFO_ITEM_LORE_COLOR=§7Farbe§8: §e{0} BAU_INFO_ITEM_LORE_COLOR=§7Farbe§8: §e{0}
BAU_INFO_ITEM_LORE_PROTECT=§7Protect§8: §e{0} BAU_INFO_ITEM_LORE_CHANGED=§7Verändert§8: §e{0}
BAU_INFO_COMMAND_HELP=§8/§ebauinfo §8- §7Gibt Informationen über den Bau BAU_INFO_COMMAND_HELP=§8/§ebauinfo §8- §7Gibt Informationen über den Bau
BAU_INFO_COMMAND_OWNER=§7Besitzer§8: §e{0} BAU_INFO_COMMAND_OWNER=§7Besitzer§8: §e{0}
BAU_INFO_COMMAND_MEMBER=§7{0} §8[§7{1}§8]§8: §e{2} BAU_INFO_COMMAND_MEMBER=§7{0} §8[§7{1}§8]§8: §e{2}
@ -350,8 +347,11 @@ SMART_PLACE_DISABLE=§cSmartPlace deaktiviert
# InventoryFiller # InventoryFiller
INVENTORY_FILL_HELP=§8/§einventoryfill §8- §7Toggled InventoryFill INVENTORY_FILL_HELP=§8/§einventoryfill §8- §7Toggled InventoryFill
INVENTORY_FILL_INFO=§7Hilft dir, Behälter zu füllen, indem du sie beim sneaken ansiehst und den Gegenstand fallen lässt. Oder scrolle einfach auf einen Behälter, um die Menge des gehaltenen Gegenstandes darin zu ändern. INVENTORY_FILL_INFO=§7Hilft dir, Behälter zu füllen, indem du sie beim sneaken ansiehst und den Gegenstand fallen lässt. Oder scrolle einfach auf einen Behälter, um die Menge des gehaltenen Gegenstandes darin zu ändern.
INVENTORY_FILL_ENABLE=§aInventoryFiller activated INVENTORY_FILL_ENABLE=§aInventoryFiller aktiviert
INVENTORY_FILL_DISABLE=§cInventoryFiller deactivated INVENTORY_FILL_DISABLE=§cInventoryFiller deaktiviert
# Ray Visualizer
RAY_VISUALIZER_ENABLE=§aRayVisualizer aktiviert
RAY_VISUALIZER_DISABLE=§aRayVisualizer deaktiviert
# Killchecker # Killchecker
KILLCHECKER_HELP_ENABLE=§8/§ekillchecker enable §8- §7Aktiviert Killchecker / Berechnet kills neu KILLCHECKER_HELP_ENABLE=§8/§ekillchecker enable §8- §7Aktiviert Killchecker / Berechnet kills neu
KILLCHECKER_HELP_DISABLE=§8/§ekillchecker disable §8- §7Deaktiviert Killchecker KILLCHECKER_HELP_DISABLE=§8/§ekillchecker disable §8- §7Deaktiviert Killchecker
@ -359,6 +359,7 @@ KILLCHECKER_INFO=§7Zeigt Überlappungen der Kanonen Kills im Baubereich an.
KILLCHECKER_INFO2=§7Nur farbige Blöcke wie Wolle, Terracotta, Stained Glass und Concrete wird gezählt. KILLCHECKER_INFO2=§7Nur farbige Blöcke wie Wolle, Terracotta, Stained Glass und Concrete wird gezählt.
KILLCHECKER_ENABLE=§aKillchecker aktiviert KILLCHECKER_ENABLE=§aKillchecker aktiviert
KILLCHECKER_DISABLE=§cKillchecker deaktiviert KILLCHECKER_DISABLE=§cKillchecker deaktiviert
KILLCHECKER_NO_BUILD=§cEs gibt keinen Baubereich in dieser Region
KILLCHECKER_BOSSBAR=§e§l{0} §7(§e{1}%§7) §e§l{2}§7 Kanonnen KILLCHECKER_BOSSBAR=§e§l{0} §7(§e{1}%§7) §e§l{2}§7 Kanonnen
# BlockCounter # BlockCounter
BLOCK_COUNTER_HELP_TOGGLE=§8/§eblockcounter §8- §7Wechsel zwischen an und aus BLOCK_COUNTER_HELP_TOGGLE=§8/§eblockcounter §8- §7Wechsel zwischen an und aus
@ -677,12 +678,10 @@ REGION_ITEM_RESET=§eReset
REGION_ITEM_TESTBLOCK=§eTestblock REGION_ITEM_TESTBLOCK=§eTestblock
REGION_ITEM_TNT_OFF=§7TNT: §eAusgeschaltet REGION_ITEM_TNT_OFF=§7TNT: §eAusgeschaltet
REGION_ITEM_TNT_ONLY_TB=§7TNT: §enur Testblock REGION_ITEM_TNT_ONLY_TB=§7TNT: §enur Testblock
REGION_ITEM_TNT_ONLY_BUILD=§7TNT: §enur Baubereich
REGION_ITEM_TNT_ON=§7TNT: §eEingeschaltet REGION_ITEM_TNT_ON=§7TNT: §eEingeschaltet
REGION_ITEM_SELECTOR_TITLE=Tnt Modus REGION_ITEM_SELECTOR_TITLE=Tnt Modus
REGION_ITEM_SELECTOR_ON=§eEinschalten REGION_ITEM_SELECTOR_ON=§eEinschalten
REGION_ITEM_SELECTOR_ONLY_TB=§enur Testblock REGION_ITEM_SELECTOR_ONLY_TB=§enur Testblock
REGION_ITEM_SELECTOR_ONLY_BUILD=§enur Baubereich
REGION_ITEM_SELECTOR_OFF=§eAusschalten REGION_ITEM_SELECTOR_OFF=§eAusschalten
#Region #Region
REGION_COLOR_HELP_COLOR=§8/§ecolor §8[§7Color§8] §8- §7Setze die Farbe der Region REGION_COLOR_HELP_COLOR=§8/§ecolor §8[§7Color§8] §8- §7Setze die Farbe der Region
@ -792,7 +791,7 @@ LAUFBAU_SETTINGS_INACTIVE=§cInaktiv
LAUFBAU_SETTINGS_MIXED=§e{0}§8/§e{1} §aAktiv LAUFBAU_SETTINGS_MIXED=§e{0}§8/§e{1} §aAktiv
LAUFBAU_SETTINGS_GUI_BACK=§eBack LAUFBAU_SETTINGS_GUI_BACK=§eBack
LAUFBAU_SETTINGS_TOGGLE=§eClick §8-§7 Toggle LAUFBAU_SETTINGS_TOGGLE=§eClick §8-§7 Toggle
LAUFBAU_SETTINGS_ADVANCED=§eMiddle-Click §8-§7 Erweiterte Einstellung LAUFBAU_SETTINGS_ADVANCED=§eLinks-Click §8-§7 Erweiterte Einstellung
LAUFBAU_BLOCK_COBWEB=§eCobweb LAUFBAU_BLOCK_COBWEB=§eCobweb
LAUFBAU_BLOCK_GRASS_PATH=§eGrass Path LAUFBAU_BLOCK_GRASS_PATH=§eGrass Path
LAUFBAU_BLOCK_SOUL_SAND=§eSoul Sand LAUFBAU_BLOCK_SOUL_SAND=§eSoul Sand
@ -874,7 +873,6 @@ SELECT_HELP=§8/§eselect §8[§7RegionsTyp§8] §8- §7Wähle einen RegionsTyp
SELECT_EXTENSION_HELP=§8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Wähle einen RegionsTyp aus mit oder ohne Extension SELECT_EXTENSION_HELP=§8/§eselect §8[§7RegionsTyp§8] §8[§7Extension§8] §8- §7Wähle einen RegionsTyp aus mit oder ohne Extension
SELECT_GLOBAL_REGION=§cDie globale Region kannst du nicht auswählen SELECT_GLOBAL_REGION=§cDie globale Region kannst du nicht auswählen
SELECT_NO_TYPE=§cDiese Region hat keinen {0} SELECT_NO_TYPE=§cDiese Region hat keinen {0}
SELECT_NO_EXTENSION=§cDiese Region hat keine Ausfahrmaße
SELECT_MESSAGE=§7WorldEdit auswahl auf {0}, {1}, {2} und {3}, {4}, {5} gesetzt SELECT_MESSAGE=§7WorldEdit auswahl auf {0}, {1}, {2} und {3}, {4}, {5} gesetzt
SKULL_HELP=§8/§eskull §8[§eSpieler§8] §8-§7 Gibt einen SpielerKopf SKULL_HELP=§8/§eskull §8[§eSpieler§8] §8-§7 Gibt einen SpielerKopf
SKULL_INVALID=§cUngültiger Spieler SKULL_INVALID=§cUngültiger Spieler

View File

@ -28,21 +28,21 @@ import de.steamwar.bausystem.features.script.lua.libs.LuaLib;
import de.steamwar.bausystem.features.slaves.laufbau.BoundingBoxLoader; import de.steamwar.bausystem.features.slaves.laufbau.BoundingBoxLoader;
import de.steamwar.bausystem.features.slaves.panzern.Panzern; import de.steamwar.bausystem.features.slaves.panzern.Panzern;
import de.steamwar.bausystem.features.slaves.panzern.PanzernAlgorithm; import de.steamwar.bausystem.features.slaves.panzern.PanzernAlgorithm;
import de.steamwar.bausystem.features.tpslimit.TPSFreezeUtils;
import de.steamwar.bausystem.features.tracer.TraceManager; import de.steamwar.bausystem.features.tracer.TraceManager;
import de.steamwar.bausystem.features.tracer.TraceRecorder; import de.steamwar.bausystem.features.tracer.TraceRecorder;
import de.steamwar.bausystem.features.world.BauScoreboard; import de.steamwar.bausystem.features.world.BauScoreboard;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.loader.PrototypeLoader; import de.steamwar.bausystem.region.RegionSystem;
import de.steamwar.bausystem.region.loader.RegionLoader;
import de.steamwar.bausystem.region.loader.Updater;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.bausystem.utils.TickListener; import de.steamwar.bausystem.utils.TickListener;
import de.steamwar.bausystem.utils.TickManager;
import de.steamwar.bausystem.worlddata.WorldData; import de.steamwar.bausystem.worlddata.WorldData;
import de.steamwar.command.AbstractValidator; import de.steamwar.command.AbstractValidator;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.SWCommandUtils; import de.steamwar.command.SWCommandUtils;
import de.steamwar.core.CRIUSleepEvent;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.core.WorldEditRendererCUIEditor;
import de.steamwar.linkage.LinkedInstance; import de.steamwar.linkage.LinkedInstance;
import de.steamwar.linkage.MaxVersion; import de.steamwar.linkage.MaxVersion;
import de.steamwar.linkage.MinVersion; import de.steamwar.linkage.MinVersion;
@ -55,6 +55,7 @@ import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
@ -73,7 +74,7 @@ import java.util.function.Consumer;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class BauSystem extends JavaPlugin { public class BauSystem extends JavaPlugin implements Listener {
// This should be treated as final! // This should be treated as final!
public static Message MESSAGE; public static Message MESSAGE;
@ -94,6 +95,8 @@ public class BauSystem extends JavaPlugin {
instance = this; instance = this;
SWUtils.setBausystem(instance); SWUtils.setBausystem(instance);
RegionSystem.INSTANCE.load();
/*
try { try {
PrototypeLoader.load(); PrototypeLoader.load();
RegionLoader.load(); RegionLoader.load();
@ -106,6 +109,7 @@ public class BauSystem extends JavaPlugin {
new Updater(PrototypeLoader.file, PrototypeLoader::load); new Updater(PrototypeLoader.file, PrototypeLoader::load);
new Updater(RegionLoader.file, RegionLoader::load); new Updater(RegionLoader.file, RegionLoader::load);
*/
SWCommandUtils.addValidator(Player.class, validator(Permission.BUILD)); SWCommandUtils.addValidator(Player.class, validator(Permission.BUILD));
SWCommandUtils.addValidator(CommandSender.class, validator(Permission.BUILD)); SWCommandUtils.addValidator(CommandSender.class, validator(Permission.BUILD));
@ -206,6 +210,13 @@ public class BauSystem extends JavaPlugin {
TraceManager.instance.init(); TraceManager.instance.init();
TraceRecorder.instance.init(); TraceRecorder.instance.init();
new WorldEditRendererCUIEditor();
}
@EventHandler
public void onCRIUSleep(CRIUSleepEvent event) {
RegionSystem.INSTANCE.save();
} }
@Override @Override
@ -220,6 +231,7 @@ public class BauSystem extends JavaPlugin {
}); });
WorldData.write(); WorldData.write();
RegionSystem.INSTANCE.save();
Config.getInstance().saveAll(); Config.getInstance().saveAll();
} }
@ -263,7 +275,7 @@ public class BauSystem extends JavaPlugin {
@Override @Override
public void run() { public void run() {
if (TPSFreezeUtils.isFrozen()) return; if (TickManager.impl.isFrozen()) return;
if (counter >= delay) { if (counter >= delay) {
runnable.run(); runnable.run();
cancel(); cancel();
@ -281,7 +293,7 @@ public class BauSystem extends JavaPlugin {
@Override @Override
public void run() { public void run() {
if (TPSFreezeUtils.isFrozen()) return; if (TickManager.impl.isFrozen()) return;
if (counter >= (first ? delay : period)) { if (counter >= (first ? delay : period)) {
first = false; first = false;
runnable.run(); runnable.run();

View File

@ -21,11 +21,9 @@ package de.steamwar.bausystem;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.features.world.BauMemberUpdate; import de.steamwar.bausystem.features.world.BauMemberUpdate;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.sql.BauweltMember; import de.steamwar.sql.BauweltMember;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.HashSet; import java.util.HashSet;

View File

@ -24,7 +24,6 @@ import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper; import de.steamwar.command.TypeMapper;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;

View File

@ -24,8 +24,6 @@ import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.ItemUtils; import de.steamwar.bausystem.utils.ItemUtils;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -33,8 +31,6 @@ import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.data.type.Chest; import org.bukkit.block.data.type.Chest;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -43,9 +39,9 @@ import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import java.io.File; import java.util.Arrays;
import java.text.SimpleDateFormat; import java.util.HashMap;
import java.util.*; import java.util.Map;
@Linked @Linked
public class AutostartListener implements Listener { public class AutostartListener implements Listener {
@ -106,11 +102,11 @@ public class AutostartListener implements Listener {
public void activate(Player player) { public void activate(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.isGlobal()) { if (region.getType().isGlobal()) {
BauSystem.MESSAGE.send("AUTOSTART_MESSAGE_NO_REGION", player); BauSystem.MESSAGE.send("AUTOSTART_MESSAGE_NO_REGION", player);
return; return;
} }
if (!region.hasType(RegionType.TESTBLOCK)) { if (region.getTestblockArea().isEmpty()) {
BauSystem.MESSAGE.send("AUTOSTART_MESSAGE_NO_REGION", player); BauSystem.MESSAGE.send("AUTOSTART_MESSAGE_NO_REGION", player);
return; return;
} }
@ -131,20 +127,12 @@ public class AutostartListener implements Listener {
event.blockList().forEach(block -> { event.blockList().forEach(block -> {
Region region = Region.getRegion(block.getLocation()); Region region = Region.getRegion(block.getLocation());
if (!regionStartTime.containsKey(region)) return; if (!regionStartTime.containsKey(region)) return;
if (!region.hasType(RegionType.TESTBLOCK)) return; if (!region.getTestblockArea().inRegion(block.getLocation(), true)) return;
if (!region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) return;
long tickDiff = TPSUtils.currentRealTick.get() - regionStartTime.remove(region); long tickDiff = TPSUtils.currentRealTick.get() - regionStartTime.remove(region);
long preFightDurationInSeconds = getPreFightDurationInSeconds(region); long preFightDurationInSeconds = region.getGameModeConfig().getTimes().getPreFightDuration();
RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT1", tickDiff); RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT1", tickDiff);
RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT2", preFightDurationInSeconds, ((preFightDurationInSeconds * 20) - tickDiff)); RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT2", preFightDurationInSeconds, ((preFightDurationInSeconds * 20) - tickDiff));
RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT3"); RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT3");
}); });
} }
private int getPreFightDurationInSeconds(Region region) {
File file = region.gameModeConfig();
if (file == null) return 30;
FileConfiguration config = YamlConfiguration.loadConfiguration(file);
return config.getInt("Times.PreFightDuration", 30);
}
} }

View File

@ -19,31 +19,23 @@
package de.steamwar.bausystem.features.backup; package de.steamwar.bausystem.features.backup;
import com.sk89q.worldedit.EditSession;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.Color;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionBackups;
import de.steamwar.bausystem.region.flags.ChangedMode;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode; import de.steamwar.command.PreviousArguments;
import de.steamwar.bausystem.region.tags.Tag;
import de.steamwar.bausystem.utils.PasteBuilder;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.SWCommandUtils;
import de.steamwar.command.TypeMapper; import de.steamwar.command.TypeMapper;
import de.steamwar.command.TypeValidator;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv; import de.steamwar.inventory.SWListInv;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.io.File; import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Linked @Linked
@ -54,7 +46,7 @@ public class BackupCommand extends SWCommand {
} }
static boolean checkGlobalRegion(Region region, Player p) { static boolean checkGlobalRegion(Region region, Player p) {
if (region.isGlobal()) { if (region.getType().isGlobal()) {
BauSystem.MESSAGE.send("BACKUP_REGION_NO_REGION", p); BauSystem.MESSAGE.send("BACKUP_REGION_NO_REGION", p);
return true; return true;
} }
@ -67,11 +59,12 @@ public class BackupCommand extends SWCommand {
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
} }
if (!region.get(Tag.CHANGED)) { if (region.getFlags().get(Flag.CHANGED).isWithDefault(ChangedMode.NO_CHANGE)) {
BauSystem.MESSAGE.send("BACKUP_CREATE_NO_CHANGE", p); BauSystem.MESSAGE.send("BACKUP_CREATE_NO_CHANGE", p);
return; return;
} }
if (region.backup()) { Optional<RegionBackups.Backup> backup = region.getBackups().create(RegionBackups.BackupType.MANUAL);
if (backup.isPresent()) {
BauSystem.MESSAGE.send("BACKUP_CREATE_SUCCESS", p); BauSystem.MESSAGE.send("BACKUP_CREATE_SUCCESS", p);
} else { } else {
BauSystem.MESSAGE.send("BACKUP_CREATE_FAILURE", p); BauSystem.MESSAGE.send("BACKUP_CREATE_FAILURE", p);
@ -79,25 +72,12 @@ public class BackupCommand extends SWCommand {
} }
@Register(value = "load", description = "BACKUP_HELP_LOAD") @Register(value = "load", description = "BACKUP_HELP_LOAD")
public void backupLoad(@Validator("owner") Player p, @Mapper("backupName") String backupName) { public void backupLoad(@Validator("owner") Player p, @Mapper("backup") @ErrorMessage("BACKUP_LOAD_FAILURE") RegionBackups.Backup backup) {
Region region = Region.getRegion(p.getLocation()); if (backup.load()) {
if (checkGlobalRegion(region, p)) {
return;
}
File backupFile = region.getBackupFile(backupName.replace('_', ' '));
if (backupFile == null) {
BauSystem.MESSAGE.send("BACKUP_LOAD_FAILURE", p);
return;
}
EditSession editSession = new PasteBuilder(new PasteBuilder.FileProvider(backupFile))
.pastePoint(region.getMinPoint().add(region.getPrototype().getSizeX() / 2, 0, region.getPrototype().getSizeZ() / 2))
.minPoint(region.getMinPoint())
.maxPoint(region.getMaxPoint())
.waterLevel(region.getWaterLevel())
.run();
region.remember(editSession);
BauSystem.MESSAGE.send("BACKUP_LOAD", p); BauSystem.MESSAGE.send("BACKUP_LOAD", p);
} else {
BauSystem.MESSAGE.send("BACKUP_LOAD_FAILURE", p);
}
} }
@Register(value = "list", description = "BACKUP_HELP_LIST") @Register(value = "list", description = "BACKUP_HELP_LIST")
@ -106,10 +86,10 @@ public class BackupCommand extends SWCommand {
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
} }
List<String> backups = listBackup(p); List<RegionBackups.Backup> backups = listBackup(p);
BauSystem.MESSAGE.send("BACKUP_LIST_HEAD", p, backups.size()); BauSystem.MESSAGE.send("BACKUP_LIST_HEAD", p, backups.size());
backups.forEach(s -> { backups.forEach(backup -> {
BauSystem.MESSAGE.send("BACKUP_LIST_ENTRY", p, "/backup load " + s, new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup load " + s), s); BauSystem.MESSAGE.send("BACKUP_LIST_ENTRY", p, "/backup load " + backup.getName(), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/backup load " + backup.getName()), backup.getName());
}); });
} }
@ -119,34 +99,44 @@ public class BackupCommand extends SWCommand {
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
} }
List<String> backups = listBackup(p); List<RegionBackups.Backup> backups = listBackup(p);
List<SWListInv.SWListEntry<String>> swListEntries = new ArrayList<>(); List<SWListInv.SWListEntry<RegionBackups.Backup>> swListEntries = new ArrayList<>();
List<String> lore = Arrays.asList(BauSystem.MESSAGE.parse("BACKUP_LORE", p)); List<String> lore = Arrays.asList(BauSystem.MESSAGE.parse("BACKUP_LORE", p));
for (int i = 0; i < backups.size(); i++) { for (int i = 0; i < backups.size(); i++) {
String s = backups.get(i); RegionBackups.Backup backup = backups.get(i);
SWItem swItem = new SWItem(Material.BRICK, BauSystem.MESSAGE.parse("BACKUP_ITEM_NAME", p, s), lore, false, clickType -> {}); SWItem swItem = new SWItem(Material.BRICK, BauSystem.MESSAGE.parse("BACKUP_ITEM_NAME", p, backup.getName()), lore, false, clickType -> {});
swItem.getItemStack().setAmount(i + 1); swItem.getItemStack().setAmount(i + 1);
swListEntries.add(new SWListInv.SWListEntry<>(swItem, s)); swListEntries.add(new SWListInv.SWListEntry<>(swItem, backup));
} }
SWListInv<String> swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("BACKUP_INV_NAME", p), swListEntries, (clickType, s) -> { SWListInv<RegionBackups.Backup> swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("BACKUP_INV_NAME", p), swListEntries, (clickType, s) -> {
p.getOpenInventory().close(); p.getOpenInventory().close();
p.performCommand("backup load " + s); backupLoad(p, s);
}); });
swListInv.open(); swListInv.open();
} }
@Mapper(value = "backupName", local = true) @Mapper(value = "backup", local = true)
public TypeMapper<String> backupMapper() { public TypeMapper<RegionBackups.Backup> backupMapper() {
return SWCommandUtils.createMapper(s -> s, (commandSender, s) -> listBackup((Player) commandSender)); return new TypeMapper<>() {
@Override
public RegionBackups.Backup map(CommandSender commandSender, String[] previousArguments, String s) {
return Region.getRegion(((Player) commandSender).getLocation()).getBackups().get(s);
} }
private List<String> listBackup(Player p) { @Override
public Collection<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
return listBackup((Player) sender).stream().map(RegionBackups.Backup::getName).collect(Collectors.toList());
}
};
}
private List<RegionBackups.Backup> listBackup(Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return Collections.emptyList(); return Collections.emptyList();
} }
try { try {
return region.listBackup().stream().map(s -> s.substring(0, s.length() - 6).replace(' ', '_')).collect(Collectors.toList()); return region.getBackups().list();
} catch (NullPointerException e) { } catch (NullPointerException e) {
return Collections.emptyList(); return Collections.emptyList();
} }

View File

@ -23,6 +23,7 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.FlagOptional;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.core.Core; import de.steamwar.core.Core;
@ -56,15 +57,10 @@ public class BauInfoBauGuiItem extends BauGuiItem {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
List<String> stringList = new ArrayList<>(); List<String> stringList = new ArrayList<>();
for (Flag flag : Flag.getFlags()) { for (Flag flag : Flag.getFlags()) {
if (flag == Flag.PROTECT && region.getFloorLevel() == 0) { if (!region.getFlags().has(flag).isApplicable()) continue;
continue; FlagOptional<?> value = region.getFlags().get(flag);
} if (value.isPresent()) {
if (flag == Flag.ITEMS && Core.getVersion() < 19) { stringList.add(BauSystem.MESSAGE.parse("BAU_INFO_ITEM_LORE_" + flag.name(), player, BauSystem.MESSAGE.parse(value.getWithDefault().getChatValue(), player)));
continue;
}
Flag.Value<?> value = region.get(flag);
if (value != null) {
stringList.add(BauSystem.MESSAGE.parse("BAU_INFO_ITEM_LORE_" + flag.name(), player, BauSystem.MESSAGE.parse(value.getChatValue(), player)));
} }
} }
itemStack.setLore(stringList); itemStack.setLore(stringList);

View File

@ -19,13 +19,11 @@
package de.steamwar.bausystem.features.bau; package de.steamwar.bausystem.features.bau;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.command.PreviousArguments; import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper; import de.steamwar.command.TypeMapper;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.techhider.TechHider;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;

View File

@ -3,6 +3,7 @@ package de.steamwar.bausystem.features.bau;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.region.FlagOptional;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
@ -30,12 +31,10 @@ public class InfoCommand extends SWCommand {
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_OWNER", p, SteamwarUser.get(bauServer.getOwnerID()).getUserName()); BauSystem.MESSAGE.send("BAU_INFO_COMMAND_OWNER", p, SteamwarUser.get(bauServer.getOwnerID()).getUserName());
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
for (Flag flag : Flag.getFlags()) { for (Flag flag : Flag.getFlags()) {
if (flag == Flag.PROTECT && region.getFloorLevel() == 0) { if (!region.getFlags().has(flag).isApplicable()) continue;
continue; FlagOptional<?> value = region.getFlags().get(flag);
} if (value.isPresent()) {
Flag.Value<?> value = region.get(flag); BauSystem.MESSAGE.send("BAU_INFO_COMMAND_FLAG", p, BauSystem.MESSAGE.parse(flag.getChatValue(), p), BauSystem.MESSAGE.parse(value.getWithDefault().getChatValue(), p));
if (value != null) {
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_FLAG", p, BauSystem.MESSAGE.parse(flag.getChatValue(), p), BauSystem.MESSAGE.parse(value.getChatValue(), p));
} }
} }

View File

@ -23,7 +23,6 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.cannon.depth.Depth; import de.steamwar.bausystem.features.cannon.depth.Depth;
import de.steamwar.bausystem.features.cannon.depth.DepthManager; import de.steamwar.bausystem.features.cannon.depth.DepthManager;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
@ -85,8 +84,8 @@ public class CannonDetector implements Listener {
grouped.forEach((cannonKey, tntPrimeds) -> { grouped.forEach((cannonKey, tntPrimeds) -> {
if (tntPrimeds.size() <= 5) return; if (tntPrimeds.size() <= 5) return;
Region region = Region.getRegion(tntPrimeds.get(0).getLocation()); Region region = Region.getRegion(tntPrimeds.get(0).getLocation());
if (region.isGlobal()) return; if (region.getType().isGlobal()) return;
if (!region.hasType(RegionType.TESTBLOCK)) return; if (region.getTestblockArea().isEmpty()) return;
Depth depth = new Depth(region); Depth depth = new Depth(region);
DepthManager.init(tntPrimeds, depth); DepthManager.init(tntPrimeds, depth);
}); });

View File

@ -22,7 +22,6 @@ package de.steamwar.bausystem.features.cannon;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter; import lombok.Getter;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import java.util.Set; import java.util.Set;

View File

@ -23,8 +23,6 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.HoverEvent; import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
@ -50,7 +48,7 @@ public class Depth {
public void update(List<Block> blocks) { public void update(List<Block> blocks) {
List<Block> blocksList = blocks.stream() List<Block> blocksList = blocks.stream()
.filter(block -> region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) .filter(block -> region.getTestblockArea().inRegion(block.getLocation(), true))
.collect(Collectors.toList()); .collect(Collectors.toList());
tntCount++; tntCount++;
for (Block block : blocksList) { for (Block block : blocksList) {

View File

@ -29,12 +29,11 @@ import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet; import java.util.stream.Collectors;
import java.util.List;
import java.util.Set;
public class DesignEndStone { public class DesignEndStone {
@ -44,18 +43,26 @@ public class DesignEndStone {
private REntityServer entityServer = new REntityServer(); private REntityServer entityServer = new REntityServer();
private List<REntity> entities = new ArrayList<>(); private List<REntity> entities = new ArrayList<>();
private Set<Location> locations = new HashSet<>(); private Set<Location> locations = new HashSet<>();
private boolean wsOrAs; private Set<Material> limited;
private double maxBlastResistance; private boolean calculateFromBottom;
public DesignEndStone(Region region) { public DesignEndStone(Region region) {
this.minX = region.getMinPointBuild().getX(); this.minX = region.getBuildArea().getMinPoint(false).getX();
this.minY = region.getMinPointBuild().getY(); this.minY = region.getBuildArea().getMinPoint(false).getY();
this.minZ = region.getMinPointBuild().getZ(); this.minZ = region.getBuildArea().getMinPoint(false).getZ();
this.maxX = region.getMaxPointBuild().getX(); this.maxX = region.getBuildArea().getMaxPoint(false).getX();
this.maxY = region.getMaxPointBuild().getY(); this.maxY = region.getBuildArea().getMaxPoint(false).getY();
this.maxZ = region.getMaxPointBuild().getZ(); this.maxZ = region.getBuildArea().getMaxPoint(false).getZ();
wsOrAs = region.getName().startsWith("ws") || region.getName().startsWith("as");
maxBlastResistance = wsOrAs ? 6.1 : 9.0; limited = region.getGameModeConfig()
.getSchematic()
.getLimited()
.entrySet()
.stream()
.filter(entry -> entry.getValue() == 0)
.flatMap(entry -> entry.getKey().stream())
.collect(Collectors.toSet());
calculateFromBottom = region.getGameModeConfig().getArena().isNoFloor();
entityServer.setCallback((player, rEntity, entityAction) -> { entityServer.setCallback((player, rEntity, entityAction) -> {
if (entityAction != REntityServer.EntityAction.ATTACK) return; if (entityAction != REntityServer.EntityAction.ATTACK) return;
@ -76,7 +83,7 @@ public class DesignEndStone {
calc(minX, minY, maxZ, maxX, maxY, maxZ, 0, 0, -1, maxZ - minZ); calc(minX, minY, maxZ, maxX, maxY, maxZ, 0, 0, -1, maxZ - minZ);
calc(minX, minY, minZ, minX, maxY, maxZ, 1, 0, 0, maxX - minX); calc(minX, minY, minZ, minX, maxY, maxZ, 1, 0, 0, maxX - minX);
calc(maxX, minY, minZ, maxX, maxY, maxZ, -1, 0, 0, maxX - minX); calc(maxX, minY, minZ, maxX, maxY, maxZ, -1, 0, 0, maxX - minX);
if (wsOrAs) { if (calculateFromBottom) {
calc(minX, minY, minZ, maxX, minY, maxZ, 0, 1, 0, maxY - minY + 1); calc(minX, minY, minZ, maxX, minY, maxZ, 0, 1, 0, maxY - minY + 1);
} else { } else {
int airBlocks = 0; int airBlocks = 0;
@ -106,7 +113,7 @@ public class DesignEndStone {
int cz = z + step * dirZ; int cz = z + step * dirZ;
Material material = WORLD.getBlockAt(cx, cy, cz).getType(); Material material = WORLD.getBlockAt(cx, cy, cz).getType();
if (material != Material.WATER && material != Material.LAVA && material.getBlastResistance() >= maxBlastResistance) { if (material != Material.WATER && material != Material.LAVA && limited.contains(material)) {
Location location = new Location(WORLD, cx + 0.5, cy, cz + 0.5); Location location = new Location(WORLD, cx + 0.5, cy, cz + 0.5);
if (!locations.add(location)) break; if (!locations.add(location)) break;
RFallingBlockEntity entity = new RFallingBlockEntity(entityServer, location, Material.RED_STAINED_GLASS); RFallingBlockEntity entity = new RFallingBlockEntity(entityServer, location, Material.RED_STAINED_GLASS);

View File

@ -21,7 +21,6 @@ package de.steamwar.bausystem.features.design.endstone;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent; import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -49,7 +48,11 @@ public class DesignEndStoneCommand extends SWCommand implements Listener {
@Register(description = "DESIGN_ENDSTONE_COMMAND_HELP") @Register(description = "DESIGN_ENDSTONE_COMMAND_HELP")
public void genericCommand(@Validator Player player) { public void genericCommand(@Validator Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (!region.hasType(RegionType.BUILD)) { if (region.getBuildArea().isEmpty()) {
BauSystem.MESSAGE.send("DESIGN_ENDSTONE_REGION_ERROR", player);
return;
}
if (!region.getGameModeConfig().isLoaded()) {
BauSystem.MESSAGE.send("DESIGN_ENDSTONE_REGION_ERROR", player); BauSystem.MESSAGE.send("DESIGN_ENDSTONE_REGION_ERROR", player);
return; return;
} }

View File

@ -23,6 +23,7 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.gui.BauGUI; import de.steamwar.bausystem.features.gui.BauGUI;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.core.TrickyTrialsWrapper; import de.steamwar.core.TrickyTrialsWrapper;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv; import de.steamwar.inventory.SWListInv;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -74,7 +75,7 @@ public class BauGuiEditor implements Listener {
inv.setItem(mapping.getSize() + 5, new SWItem(Material.BARRIER, BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_TRASH", p), Arrays.asList(BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_TRASH_LORE", p)), false, clickType -> { inv.setItem(mapping.getSize() + 5, new SWItem(Material.BARRIER, BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_TRASH", p), Arrays.asList(BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_TRASH_LORE", p)), false, clickType -> {
}).getItemStack()); }).getItemStack());
inv.setItem(mapping.getSize() + 6, new SWItem(TrickyTrialsWrapper.impl.getTurtleScute(), BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_MORE", p)).getItemStack()); inv.setItem(mapping.getSize() + 6, new SWItem(TrickyTrialsWrapper.impl.getTurtleScute(), BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_MORE", p)).getItemStack());
inv.setItem(mapping.getSize() + 8, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_CLOSE", p)).getItemStack()); inv.setItem(mapping.getSize() + 8, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_CLOSE", p)).setCustomModelData(CMDs.BACK).getItemStack());
p.openInventory(inv); p.openInventory(inv);
p.getOpenInventory().setCursor(cursor == null ? new SWItem().getItemStack() : cursor); p.getOpenInventory().setCursor(cursor == null ? new SWItem().getItemStack() : cursor);

View File

@ -4,12 +4,45 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Material;
import org.bukkit.block.Barrel;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.block.ShulkerBox;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BlockStateMeta;
import java.util.HashMap;
import java.util.Map;
@Linked @Linked
public class InventoryFillerCommand extends SWCommand { public class InventoryFillerCommand extends SWCommand {
private static final Map<Integer, Integer> POWER_TO_FILLLEVEL = new HashMap<>();
static {
POWER_TO_FILLLEVEL.put(0, 0);
POWER_TO_FILLLEVEL.put(1, 1);
POWER_TO_FILLLEVEL.put(2, 1 * 64 + 60);
POWER_TO_FILLLEVEL.put(3, 3 * 64 + 55);
POWER_TO_FILLLEVEL.put(4, 5 * 64 + 51);
POWER_TO_FILLLEVEL.put(5, 7 * 64 + 46);
POWER_TO_FILLLEVEL.put(6, 9 * 64 + 42);
POWER_TO_FILLLEVEL.put(7, 11 * 64 + 37);
POWER_TO_FILLLEVEL.put(8, 13 * 64 + 32);
POWER_TO_FILLLEVEL.put(9, 15 * 64 + 28);
POWER_TO_FILLLEVEL.put(10, 17 * 64 + 23);
POWER_TO_FILLLEVEL.put(11, 19 * 64 + 19);
POWER_TO_FILLLEVEL.put(12, 21 * 64 + 14);
POWER_TO_FILLLEVEL.put(13, 23 * 64 + 10);
POWER_TO_FILLLEVEL.put(14, 25 * 64 + 5);
POWER_TO_FILLLEVEL.put(15, 27 * 64 + 0);
}
public InventoryFillerCommand() { public InventoryFillerCommand() {
super("inventoryfill"); super("inventoryfill");
} }
@ -25,4 +58,112 @@ public class InventoryFillerCommand extends SWCommand {
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("INVENTORY_FILL_DISABLE", player)); SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("INVENTORY_FILL_DISABLE", player));
} }
} }
@Register("gui")
public void gui(Player player) {
SWInventory inventory = new SWInventory(player, 18, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_NAME", player));
inventory.setItem(0, new SWItem(Material.REDSTONE, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 0)).setAmount(1));
inventory.setItem(1, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 1)).setAmount(1));
inventory.setItem(2, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 2)).setAmount(2));
inventory.setItem(3, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 3)).setAmount(3));
inventory.setItem(4, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 4)).setAmount(4));
inventory.setItem(5, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 5)).setAmount(5));
inventory.setItem(6, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 6)).setAmount(6));
inventory.setItem(7, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 7)).setAmount(7));
inventory.setItem(8, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 8)).setAmount(8));
inventory.setItem(9, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 9)).setAmount(9));
inventory.setItem(10, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 10)).setAmount(10));
inventory.setItem(11, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 11)).setAmount(11));
inventory.setItem(12, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 12)).setAmount(12));
inventory.setItem(13, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 13)).setAmount(13));
inventory.setItem(14, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 14)).setAmount(14));
inventory.setItem(15, new SWItem(Material.REDSTONE_TORCH, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_POWER", player, 15)).setAmount(15));
inventory.setItem(17, new SWItem(Material.TNT, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_TNT", player)));
for (int i = 0; i < 16; i++) {
inventory.setEventCallback(i, inventoryClickEvent -> {
selectInventoryType(player, inventoryClickEvent.getCurrentItem().getItemMeta().getDisplayName(), Material.DANDELION, POWER_TO_FILLLEVEL.get(inventoryClickEvent.getCurrentItem().getAmount()));
});
}
inventory.setEventCallback(17, inventoryClickEvent -> {
selectInventoryType(player, inventoryClickEvent.getCurrentItem().getItemMeta().getDisplayName(), Material.TNT, POWER_TO_FILLLEVEL.get(15));
});
inventory.open();
}
private final Material[] SHULKER_BOX_MATERIALS = new Material[]{
Material.SHULKER_BOX,
Material.WHITE_SHULKER_BOX,
Material.LIGHT_GRAY_SHULKER_BOX,
Material.GRAY_SHULKER_BOX,
Material.BLACK_SHULKER_BOX,
Material.BROWN_SHULKER_BOX,
Material.RED_SHULKER_BOX,
Material.ORANGE_SHULKER_BOX,
Material.YELLOW_SHULKER_BOX,
Material.LIME_SHULKER_BOX,
Material.GREEN_SHULKER_BOX,
Material.CYAN_SHULKER_BOX,
Material.LIGHT_BLUE_SHULKER_BOX,
Material.BLUE_SHULKER_BOX,
Material.PURPLE_SHULKER_BOX,
Material.MAGENTA_SHULKER_BOX,
Material.PINK_SHULKER_BOX
};
private void selectInventoryType(Player player, String name, Material material, int count) {
ItemStack[] itemStacks = new ItemStack[27];
int index = 0;
int amount = count;
while (amount > 0) {
ItemStack stack;
if (amount > 64) {
stack = new ItemStack(material, 64);
amount -= 64;
} else {
stack = new ItemStack(material, amount);
amount = 0;
}
itemStacks[index++] = stack;
}
SWInventory inventory = new SWInventory(player, 27, BauSystem.MESSAGE.parse("INVENTORY_FILL_GUI_NAME", player));
int i = 0;
for (Material type : SHULKER_BOX_MATERIALS) {
inventory.setItemEvent(i++, generateFilledInventory(name, type, itemStacks), inventoryClickEvent -> {
SWUtils.giveItemToPlayer(player, inventoryClickEvent.getCurrentItem());
});
}
inventory.setItemEvent(27 - 6, generateFilledInventory(name, Material.CHEST, itemStacks), inventoryClickEvent -> {
SWUtils.giveItemToPlayer(player, inventoryClickEvent.getCurrentItem());
});
inventory.setItemEvent(27 - 4, generateFilledInventory(name, Material.BARREL, itemStacks), inventoryClickEvent -> {
SWUtils.giveItemToPlayer(player, inventoryClickEvent.getCurrentItem());
});
inventory.open();
}
private ItemStack generateFilledInventory(String name, Material material, ItemStack[] itemStacks) {
ItemStack itemStack = new ItemStack(material);
BlockStateMeta meta = (BlockStateMeta) itemStack.getItemMeta();
BlockState state = meta.getBlockState();
if (state instanceof ShulkerBox box) {
box.getInventory().setContents(itemStacks);
box.update();
meta.setBlockState(box);
} else if (state instanceof Chest chest) {
chest.getInventory().setContents(itemStacks);
chest.update();
meta.setBlockState(chest);
} else if (state instanceof Barrel barrel) {
barrel.getInventory().setContents(itemStacks);
barrel.update();
meta.setBlockState(barrel);
}
meta.setDisplayName(name);
itemStack.setItemMeta(meta);
return itemStack;
}
} }

View File

@ -38,7 +38,6 @@ import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set;
@Linked @Linked
public class KillcheckerCommand extends SWCommand implements Listener { public class KillcheckerCommand extends SWCommand implements Listener {
@ -57,6 +56,10 @@ public class KillcheckerCommand extends SWCommand implements Listener {
@Register(value = "enable", description = "KILLCHECKER_HELP_ENABLE") @Register(value = "enable", description = "KILLCHECKER_HELP_ENABLE")
public void genericCommand(@Validator Player player, @OptionalValue("-outline") @StaticValue(value = {"-area", "-outline"}, allowISE = true) boolean onlyOutline) { public void genericCommand(@Validator Player player, @OptionalValue("-outline") @StaticValue(value = {"-area", "-outline"}, allowISE = true) boolean onlyOutline) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.getBuildArea().isEmpty()) {
BauSystem.MESSAGE.send("KILLCHECKER_NO_BUILD", player);
return;
}
KillcheckerVisualizer killcheckerVisualizer = visualizers.computeIfAbsent(region, region1 -> new KillcheckerVisualizer(region1, bossBarService)); KillcheckerVisualizer killcheckerVisualizer = visualizers.computeIfAbsent(region, region1 -> new KillcheckerVisualizer(region1, bossBarService));
killcheckerVisualizer.recalc(); killcheckerVisualizer.recalc();
killcheckerVisualizer.show(player, onlyOutline); killcheckerVisualizer.show(player, onlyOutline);

View File

@ -22,8 +22,6 @@ package de.steamwar.bausystem.features.killchecker;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Point; import de.steamwar.bausystem.region.Point;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar; import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar;
import de.steamwar.bausystem.utils.bossbar.BossBarService; import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.entity.REntity; import de.steamwar.entity.REntity;
@ -75,8 +73,8 @@ public class KillcheckerVisualizer {
public KillcheckerVisualizer(Region region, BossBarService bossBarService) { public KillcheckerVisualizer(Region region, BossBarService bossBarService) {
this.region = region; this.region = region;
this.minPoint = region.getMinPoint(RegionType.BUILD, RegionExtensionType.NORMAL); this.minPoint = region.getBuildArea().getMinPoint(false);
this.maxPoint = region.getMaxPoint(RegionType.BUILD, RegionExtensionType.NORMAL); this.maxPoint = region.getBuildArea().getMaxPoint(false);
yArea = (maxPoint.getX() - minPoint.getX()) * (maxPoint.getZ() - minPoint.getZ()); yArea = (maxPoint.getX() - minPoint.getX()) * (maxPoint.getZ() - minPoint.getZ());
zArea = (maxPoint.getX() - minPoint.getX()) * (maxPoint.getY() - minPoint.getY()); zArea = (maxPoint.getX() - minPoint.getX()) * (maxPoint.getY() - minPoint.getY());

View File

@ -73,7 +73,7 @@ public class Loader implements Listener {
Bukkit.getPluginManager().registerEvents(this, BauSystem.getInstance()); Bukkit.getPluginManager().registerEvents(this, BauSystem.getInstance());
BauSystem.runTaskTimer(BauSystem.getInstance(), () -> { BauSystem.runTaskTimer(BauSystem.getInstance(), () -> {
if (stage != Stage.RUNNING) return; if (stage != Stage.RUNNING && stage != Stage.SINGLE) return;
if(!Permission.BUILD.hasPermission(p)) return; if(!Permission.BUILD.hasPermission(p)) return;
if (waitTime > 0) { if (waitTime > 0) {
waitTime--; waitTime--;
@ -149,13 +149,16 @@ public class Loader implements Listener {
} }
public boolean setTicksBetweenShots(int delay) { public boolean setTicksBetweenShots(int delay) {
if (elements.size() == 0) return false; if (elements.isEmpty()) return false;
LoaderElement loaderElement = elements.get(elements.size() - 1); LoaderElement loaderElement = elements.get(elements.size() - 1);
if (loaderElement instanceof LoaderWait) { if (loaderElement instanceof LoaderWait) {
((LoaderWait) loaderElement).setDelay(delay); ((LoaderWait) loaderElement).setDelay(delay);
return true; } else {
LoaderWait loaderWait = new LoaderWait(delay);
elements.add(loaderWait);
pause();
} }
return false; return true;
} }
public void setTicksBetweenBlocks(int delay) { public void setTicksBetweenBlocks(int delay) {

View File

@ -44,7 +44,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class LoaderRecorder implements Listener { public class LoaderRecorder implements Listener {

View File

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.loader.elements; package de.steamwar.bausystem.features.loader.elements;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
@ -113,7 +114,7 @@ public abstract class LoaderInteractionElement<T extends Enum<T> & LoaderSetting
}); });
listInv.setItem(48, new SWItem(Material.ARROW, "§7Back", clickType -> { listInv.setItem(48, new SWItem(Material.ARROW, "§7Back", clickType -> {
backAction.run(); backAction.run();
})); }).setCustomModelData(CMDs.BACK));
listInv.setItem(50, new SWItem(Material.GHAST_SPAWN_EGG, "§7Insert another Setting", clickType -> { listInv.setItem(50, new SWItem(Material.GHAST_SPAWN_EGG, "§7Insert another Setting", clickType -> {
elements.add(defaultSetting); elements.add(defaultSetting);
extraPower.add(0); extraPower.add(0);
@ -150,7 +151,7 @@ public abstract class LoaderInteractionElement<T extends Enum<T> & LoaderSetting
SWInventory swInventory = new SWInventory(player, guiSize, BauSystem.MESSAGE.parse("LOADER_GUI_SETTINGS_TITLE", player)); SWInventory swInventory = new SWInventory(player, guiSize, BauSystem.MESSAGE.parse("LOADER_GUI_SETTINGS_TITLE", player));
for (int i = guiSize - 9; i < guiSize; i++) swInventory.setItem(i, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§7", clickType -> {})); for (int i = guiSize - 9; i < guiSize; i++) swInventory.setItem(i, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§7", clickType -> {}));
swInventory.setItem(guiSize - 9, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LOADER_GUI_SETTINGS_BACK", player)).getItemStack(), clickType -> back.run()); swInventory.setItem(guiSize - 9, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LOADER_GUI_SETTINGS_BACK", player)).setCustomModelData(CMDs.BACK).getItemStack(), clickType -> back.run());
swInventory.setItem(guiSize - 5, new SWItem(Material.WOODEN_AXE, BauSystem.MESSAGE.parse("LOADER_GUI_SETTINGS_COPY", player)).getItemStack(), clickType -> { swInventory.setItem(guiSize - 5, new SWItem(Material.WOODEN_AXE, BauSystem.MESSAGE.parse("LOADER_GUI_SETTINGS_COPY", player)).getItemStack(), clickType -> {
SWAnvilInv swAnvilInv = new SWAnvilInv(player, BauSystem.MESSAGE.parse("LOADER_GUI_COPY_TITLE", player), "1"); SWAnvilInv swAnvilInv = new SWAnvilInv(player, BauSystem.MESSAGE.parse("LOADER_GUI_COPY_TITLE", player), "1");
swAnvilInv.setCallback(s -> { swAnvilInv.setCallback(s -> {

View File

@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.loader.elements.impl;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.loader.elements.LoaderElement; import de.steamwar.bausystem.features.loader.elements.LoaderElement;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
@ -60,7 +61,7 @@ public class LoaderWait implements LoaderElement {
public void click(Player player, Runnable backAction) { public void click(Player player, Runnable backAction) {
SWInventory swInventory = new SWInventory(player, 18, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_TITLE", player)); SWInventory swInventory = new SWInventory(player, 18, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_TITLE", player));
for (int i = 9; i < 18; i++) swInventory.setItem(i, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§7")); for (int i = 9; i < 18; i++) swInventory.setItem(i, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§7"));
swInventory.setItem(9, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_BACK", player)).getItemStack(), clickType -> backAction.run()); swInventory.setItem(9, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_BACK", player)).setCustomModelData(CMDs.BACK).getItemStack(), clickType -> backAction.run());
swInventory.setItem(3, new SWItem(SWItem.getDye(1), BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> { swInventory.setItem(3, new SWItem(SWItem.getDye(1), BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE", player), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_SETTING_TICKS_REMOVE_ONE_SHIFT", player)), false, clickType -> {}).getItemStack(), clickType -> {
delay -= clickType.isShiftClick() ? 5 : 1; delay -= clickType.isShiftClick() ? 5 : 1;

View File

@ -22,8 +22,6 @@ package de.steamwar.bausystem.features.loadtimer;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -158,7 +156,7 @@ public class Loadtimer implements Listener {
} }
public void onTntExplode(EntityExplodeEvent event) { public void onTntExplode(EntityExplodeEvent event) {
if (region.inRegion(event.getLocation(), RegionType.BUILD, RegionExtensionType.EXTENSION) && stage == Stage.IGNITION) { if (region.getBuildArea().inRegion(event.getLocation(), true) && stage == Stage.IGNITION) {
stage = Stage.END; stage = Stage.END;
explode = TPSUtils.currentRealTick.get(); explode = TPSUtils.currentRealTick.get();
print(); print();

View File

@ -39,7 +39,7 @@ public class LoadtimerCommand extends SWCommand {
@Register(value = "start", description = {"LOADTIMER_HELP_START_2", "LOADTIMER_HELP_START_3"}) @Register(value = "start", description = {"LOADTIMER_HELP_START_2", "LOADTIMER_HELP_START_3"})
public void start(@Validator Player p, TimerMode mode) { public void start(@Validator Player p, TimerMode mode) {
Region r = Region.getRegion(p.getLocation()); Region r = Region.getRegion(p.getLocation());
if (r.isGlobal()) return; if (r.getType().isGlobal()) return;
if (!Loadtimer.hasTimer(r)) if (!Loadtimer.hasTimer(r))
Loadtimer.createLoadtimer(r, mode == TimerMode.HALF); Loadtimer.createLoadtimer(r, mode == TimerMode.HALF);
} }
@ -47,7 +47,7 @@ public class LoadtimerCommand extends SWCommand {
@Register(value = "stop", description = "LOADTIMER_HELP_STOP") @Register(value = "stop", description = "LOADTIMER_HELP_STOP")
public void stop(@Validator Player p) { public void stop(@Validator Player p) {
Region r = Region.getRegion(p.getLocation()); Region r = Region.getRegion(p.getLocation());
if (r.isGlobal()) return; if (r.getType().isGlobal()) return;
if (Loadtimer.hasTimer(r)) if (Loadtimer.hasTimer(r))
Loadtimer.getTimer(r).delete(); Loadtimer.getTimer(r).delete();
} }

View File

@ -46,7 +46,7 @@ public class LoadtimerGuiItem extends BauGuiItem {
@Override @Override
public ItemStack getItem(Player player) { public ItemStack getItem(Player player) {
Region r = Region.getRegion(player.getLocation()); Region r = Region.getRegion(player.getLocation());
if (r.isGlobal()) if (r.getType().isGlobal())
return new SWItem(Material.BOWL, BauSystem.MESSAGE.parse("LOADTIMER_GUI_GLOBAL", player)).getItemStack(); return new SWItem(Material.BOWL, BauSystem.MESSAGE.parse("LOADTIMER_GUI_GLOBAL", player)).getItemStack();
if (Loadtimer.hasTimer(r)) { if (Loadtimer.hasTimer(r)) {
return new SWItem(Material.BOW, BauSystem.MESSAGE.parse("LOADTIMER_GUI_STOP", player)).getItemStack(); return new SWItem(Material.BOW, BauSystem.MESSAGE.parse("LOADTIMER_GUI_STOP", player)).getItemStack();
@ -58,7 +58,7 @@ public class LoadtimerGuiItem extends BauGuiItem {
@Override @Override
public boolean click(ClickType click, Player p) { public boolean click(ClickType click, Player p) {
Region r = Region.getRegion(p.getLocation()); Region r = Region.getRegion(p.getLocation());
if (r.isGlobal()) return false; if (r.getType().isGlobal()) return false;
if (Loadtimer.hasTimer(r)) { if (Loadtimer.hasTimer(r)) {
p.performCommand("lt stop"); p.performCommand("lt stop");
} else { } else {

View File

@ -20,7 +20,6 @@
package de.steamwar.bausystem.features.observer; package de.steamwar.bausystem.features.observer;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;

View File

@ -0,0 +1,207 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2020 SteamWar.de-Serverteam
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package de.steamwar.bausystem.features.rayvisualizer;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.command.SWCommand;
import de.steamwar.entity.CRay;
import de.steamwar.entity.REntityServer;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion;
import org.bukkit.*;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.util.RayTraceResult;
import java.util.List;
@Linked
@MinVersion(20)
public class RayVisualizerCommand extends SWCommand implements Listener {
private BlockData VISIBLE = Material.LIME_CONCRETE.createBlockData();
private BlockData BLOCKED = Material.RED_CONCRETE.createBlockData();
private class CRayData {
private CRay[] rays = new CRay[27 * 400];
private boolean[] used = new boolean[27 * 400];
public void reset() {
for (int i = 0; i < 27 * 400; i++) {
if (!used[i] && rays[i] != null) {
rays[i].die();
rays[i] = null;
}
used[i] = false;
}
}
private boolean locEquals(Location loc1, Location loc2) {
if ((long)(loc1.getX() * 1000) != (long)(loc2.getX() * 1000)) return false;
if ((long)(loc1.getY() * 1000) != (long)(loc2.getY() * 1000)) return false;
if ((long)(loc1.getZ() * 1000) != (long)(loc2.getZ() * 1000)) return false;
return true;
}
public CRay get(Location from, Location to) {
for (int i = 0; i < rays.length; i++) {
if (rays[i] != null && locEquals(from, rays[i].getFrom()) && locEquals(to, rays[i].getTo())) {
used[i] = true;
return rays[i];
}
}
for (int i = 0; i < rays.length; i++) {
if (rays[i] != null && locEquals(from, rays[i].getFrom()) && !used[i]) {
used[i] = true;
return rays[i];
}
}
for (int i = 0; i < rays.length; i++) {
if (used[i]) continue;
CRay ray = rays[i];
if (ray != null) {
return ray;
}
ray = new CRay(server);
ray.setBlock(Material.LIME_CONCRETE.createBlockData());
ray.setWidth(1 / 32f);
rays[i] = ray;
used[i] = true;
return ray;
}
return null;
}
}
private CRayData rayData = new CRayData();
private final REntityServer server = new REntityServer();
private final World WORLD = Bukkit.getWorlds().get(0);
public RayVisualizerCommand() {
super("rayvisualizer");
Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), () -> {
if (server.getPlayers().isEmpty()) return;
List<TNTPrimed> primedList = WORLD.getEntitiesByClass(TNTPrimed.class)
.stream().toList();
rayData.reset();
if (primedList.isEmpty()) return;
calculateRays(primedList, primedList);
}, 1, 1);
}
private void calculateRays(List<TNTPrimed> fromTNTs, List<TNTPrimed> toTNTs) {
for (TNTPrimed to : toTNTs) {
int hitting = 0;
int total = 0;
for (TNTPrimed from : fromTNTs) {
if (from == to) continue;
if (from.getFuseTicks() >= to.getFuseTicks()) continue;
if (to.getLocation().distanceSquared(from.getLocation()) > 25) continue;
if (!from.isInWater()) continue;
Location fromLoc = from.getLocation();
Location toLoc = to.getLocation().clone().add(-0.49, 0, -0.49);
final double minX = 0.5 * (1 - Math.floor(2 * 0.98 + 1) / (2 * 0.98 + 1));
final double minZ = 0.5 * (1 - Math.floor(2 * 0.98 + 1) / (2 * 0.98 + 1));
final double spacing = 0.98 / (2 * 0.98 + 1);
for (int dx = 0; dx < 3; dx++) {
for (int dy = 0; dy < 3; dy++) {
for (int dz = 0; dz < 3; dz++) {
Location end = toLoc.clone().add(minX + dx * spacing, 0 + dy * spacing, minZ + dz * spacing);
RayTraceResult result = fromLoc.getWorld().rayTraceBlocks(fromLoc, end.clone().subtract(fromLoc).toVector(), end.distance(fromLoc), FluidCollisionMode.NEVER, true);
CRay cRay = rayData.get(fromLoc, end);
if (cRay == null) continue;
cRay.setFrom(fromLoc);
cRay.setTo(end);
if (result != null && result.getHitBlock() != null) {
cRay.setBlock(BLOCKED);
} else {
cRay.setBlock(VISIBLE);
hitting++;
}
}
}
}
total += 27;
}
if (total == 0) {
to.setCustomNameVisible(false);
} else {
int remainder = hitting % 27;
int whole = hitting / 27;
to.setCustomNameVisible(true);
to.setCustomName("§e" + whole + " " + remainder + "/27");
}
}
}
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
if (!Permission.BUILD.hasPermission(event.getPlayer())) return;
boolean rayvisualizer = Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("rayvisualizer", false);
if (rayvisualizer) server.addPlayer(event.getPlayer());
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
server.removePlayer(event.getPlayer());
}
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
for (Player player : Bukkit.getOnlinePlayers()) {
if (Permission.BUILD.hasPermission(player)) {
boolean rayvisualizer = Config.getInstance().get(player).getPlainValueOrDefault("rayvisualizer", false);
if (rayvisualizer) server.addPlayer(player);
} else {
server.removePlayer(player);
}
}
}, 1);
}
@Register
public void toggle(@Validator Player player) {
boolean rayvisualizer = Config.getInstance().get(player).getPlainValueOrDefault("rayvisualizer", false);
Config.getInstance().get(player).put("rayvisualizer", !rayvisualizer);
if (!rayvisualizer) {
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("RAY_VISUALIZER_ENABLE", player));
server.addPlayer(player);
} else {
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("RAY_VISUALIZER_DISABLE", player));
server.removePlayer(player);
}
}
}

View File

@ -23,8 +23,8 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.ColorMode;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
@ -34,8 +34,6 @@ import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance; import de.steamwar.linkage.LinkedInstance;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.io.IOException;
@Linked @Linked
public class ColorCommand extends SWCommand { public class ColorCommand extends SWCommand {
@ -47,29 +45,31 @@ public class ColorCommand extends SWCommand {
} }
@Register(description = "REGION_COLOR_HELP_COLOR") @Register(description = "REGION_COLOR_HELP_COLOR")
public void genericColor(Player p, ColorMode color) { public void genericColor(@Validator Player p, ColorMode color) {
genericColorSet(p, color, ColorizationType.LOCAL); genericColorSet(p, color, ColorizationType.LOCAL);
} }
@Register(description = "REGION_COLOR_HELP_COLOR_TYPE") @Register(description = "REGION_COLOR_HELP_COLOR_TYPE")
public void genericColorSet(@Validator Player p, ColorMode color, ColorizationType colorizationType) { public void genericColorSet(@Validator Player p, ColorMode color, ColorizationType colorizationType) {
if (colorizationType == ColorizationType.GLOBAL) { if (colorizationType == ColorizationType.GLOBAL) {
Region.setGlobal(Flag.COLOR, color); Region.getRegions().forEach(region -> {
region.getFlags().set(Flag.COLOR, color);
});
BauSystem.MESSAGE.send("REGION_COLOR_GLOBAL", p, BauSystem.MESSAGE.parse(color.getChatValue(), p)); BauSystem.MESSAGE.send("REGION_COLOR_GLOBAL", p, BauSystem.MESSAGE.parse(color.getChatValue(), p));
return; return;
} }
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (region.isGlobal()) { if (!region.getFlags().has(Flag.COLOR).isWritable()) {
BauSystem.MESSAGE.send("REGION_COLOR_NO_REGION", p); BauSystem.MESSAGE.send("REGION_COLOR_NO_REGION", p);
return; return;
} }
region.set(Flag.COLOR, color); region.getFlags().set(Flag.COLOR, color);
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.FileProvider(region.getResetFile(RegionType.NORMAL))) PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.FileProvider(region.getArea().getResetFile()))
.ignoreAir(true) .ignoreAir(true)
.onlyColors(true) .onlyColors(true)
.color(color.getColor()); .color(color);
region.reset(pasteBuilder, RegionType.NORMAL, RegionExtensionType.NORMAL); region.getArea().reset(pasteBuilder, false);
RegionUtils.message(region, "REGION_REGION_COLORED"); RegionUtils.message(region, "REGION_REGION_COLORED");
RegionUtils.message(region, "REGION_REGION_COLORED_FAILED"); RegionUtils.message(region, "REGION_REGION_COLORED_FAILED");
} catch (SecurityException e) { } catch (SecurityException e) {
@ -78,7 +78,7 @@ public class ColorCommand extends SWCommand {
} }
@Register @Register
public void genericColorSet(Player p, ColorizationType colorizationType, ColorMode color) { public void genericColorSet(@Validator Player p, ColorizationType colorizationType, ColorMode color) {
genericColorSet(p, color, colorizationType); genericColorSet(p, color, colorizationType);
} }

View File

@ -19,13 +19,11 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.FireMode;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FireMode;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -55,13 +53,11 @@ public class FireCommand extends SWCommand {
} }
private boolean toggle(Region region) { private boolean toggle(Region region) {
switch (region.getPlain(Flag.FIRE, FireMode.class)) { if (region.getFlags().get(Flag.FIRE).isWithDefault(FireMode.ALLOW)) {
case ALLOW: region.getFlags().set(Flag.FIRE, FireMode.DENY);
region.set(Flag.FIRE, FireMode.DENY);
return true; return true;
default: } else {
case DENY: region.getFlags().set(Flag.FIRE, FireMode.ALLOW);
region.set(Flag.FIRE, FireMode.ALLOW);
return false; return false;
} }
} }

View File

@ -2,8 +2,8 @@ package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.FireMode;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FireMode;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -17,12 +17,12 @@ public class FireListener implements Listener, ScoreboardElement {
@EventHandler @EventHandler
public void onFireDamage(BlockBurnEvent e) { public void onFireDamage(BlockBurnEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).getPlain(Flag.FIRE, FireMode.class) == FireMode.DENY) e.setCancelled(true); if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FIRE).isWithDefault(FireMode.DENY)) e.setCancelled(true);
} }
@EventHandler @EventHandler
public void onFireSpread(BlockSpreadEvent e) { public void onFireSpread(BlockSpreadEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).getPlain(Flag.FIRE, FireMode.class) == FireMode.DENY) e.setCancelled(true); if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FIRE).isWithDefault(FireMode.DENY)) e.setCancelled(true);
} }
@Override @Override
@ -37,7 +37,7 @@ public class FireListener implements Listener, ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
if (region.get(Flag.FIRE) == Flag.FIRE.getDefaultValue()) return null; if (region.getFlags().get(Flag.FIRE).isWithDefault(FireMode.DENY)) return null;
return "§e" + BauSystem.MESSAGE.parse(Flag.FIRE.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.get(Flag.FIRE).getChatValue(), p); return "§e" + BauSystem.MESSAGE.parse(Flag.FIRE.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.getFlags().get(Flag.FIRE).getWithDefault().getChatValue(), p);
} }
} }

View File

@ -19,13 +19,11 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; import de.steamwar.bausystem.region.flags.FreezeMode;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -55,13 +53,11 @@ public class FreezeCommand extends SWCommand {
} }
private boolean toggle(Region region) { private boolean toggle(Region region) {
switch (region.getPlain(Flag.FREEZE, FreezeMode.class)) { if (region.getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
case ACTIVE: region.getFlags().set(Flag.FREEZE, FreezeMode.INACTIVE);
region.set(Flag.FREEZE, FreezeMode.INACTIVE);
return false; return false;
default: } else {
case INACTIVE: region.getFlags().set(Flag.FREEZE, FreezeMode.ACTIVE);
region.set(Flag.FREEZE, FreezeMode.ACTIVE);
return true; return true;
} }
} }

View File

@ -3,7 +3,7 @@ package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; import de.steamwar.bausystem.region.flags.FreezeMode;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.core.TrickyTrialsWrapper; import de.steamwar.core.TrickyTrialsWrapper;
@ -29,9 +29,7 @@ public class FreezeListener implements Listener, ScoreboardElement {
@EventHandler @EventHandler
public void onEntitySpawn(EntitySpawnEvent e) { public void onEntitySpawn(EntitySpawnEvent e) {
if (Region.getRegion(e.getLocation()).get(Flag.FREEZE) == FreezeMode.INACTIVE) { if (Region.getRegion(e.getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.INACTIVE)) return;
return;
}
e.setCancelled(true); e.setCancelled(true);
if (e.getEntityType() == TrickyTrialsWrapper.impl.getTntEntityType()) { if (e.getEntityType() == TrickyTrialsWrapper.impl.getTntEntityType()) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
@ -43,8 +41,7 @@ public class FreezeListener implements Listener, ScoreboardElement {
@EventHandler @EventHandler
public void onBlockCanBuild(BlockCanBuildEvent e) { public void onBlockCanBuild(BlockCanBuildEvent e) {
if (!e.isBuildable()) return; if (!e.isBuildable()) return;
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.INACTIVE) if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.INACTIVE)) return;
return;
if (e.getMaterial() == Material.TNT) { if (e.getMaterial() == Material.TNT) {
e.setBuildable(false); e.setBuildable(false);
e.getBlock().setType(Material.TNT, false); e.getBlock().setType(Material.TNT, false);
@ -53,14 +50,14 @@ public class FreezeListener implements Listener, ScoreboardElement {
@EventHandler @EventHandler
public void onEntityChangeBlock(EntityChangeBlockEvent e) { public void onEntityChangeBlock(EntityChangeBlockEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onPhysicsEvent(BlockPhysicsEvent e) { public void onPhysicsEvent(BlockPhysicsEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
if (e.getSourceBlock().getType() == Material.NOTE_BLOCK) { if (e.getSourceBlock().getType() == Material.NOTE_BLOCK) {
BlockState state = e.getSourceBlock().getState(); BlockState state = e.getSourceBlock().getState();
NoteBlock noteBlock = (NoteBlock) state.getBlockData(); NoteBlock noteBlock = (NoteBlock) state.getBlockData();
@ -85,152 +82,53 @@ public class FreezeListener implements Listener, ScoreboardElement {
@EventHandler @EventHandler
public void onPistonExtend(BlockPistonExtendEvent e) { public void onPistonExtend(BlockPistonExtendEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler
public void onNotePlay(NotePlayEvent event) {
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=45, z=98},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=44, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=BARRIER,data=Block{minecraft:barrier},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=45, z=97},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=45, z=99},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=custom_head,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=custom_head,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=custom_head,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=BARRIER,data=Block{minecraft:barrier},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=custom_head,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=48, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=custom_head,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=custom_head,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=45, z=97},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=96},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=BARRIER,data=Block{minecraft:barrier},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=45, z=99},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=BARRIER,data=Block{minecraft:barrier},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-108, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=BARRIER,data=Block{minecraft:barrier},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=45, z=98},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=BARRIER,data=Block{minecraft:barrier},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-104, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=45, z=98},type=CYAN_TERRACOTTA,data=Block{minecraft:cyan_terracotta},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=46, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=46, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=BARRIER,data=Block{minecraft:barrier},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=48, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=harp,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@78078831}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=100},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=46, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=100},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=46, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=100},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=45, z=100},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=100},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=100},type=STONE_SLAB,data=Block{minecraft:stone_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=100},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=46, z=100},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=100},type=STONE_SLAB,data=Block{minecraft:stone_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=49, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=48, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=48, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=99},type=SMOOTH_STONE,data=Block{minecraft:smooth_stone},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=48, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
////[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=true],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=100},type=STONE_SLAB,data=Block{minecraft:stone_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=48, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=100},type=STONE_SLAB,data=Block{minecraft:stone_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=102},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-108, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=100},type=STONE_SLAB,data=Block{minecraft:stone_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=46, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-107, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=100},type=STONE_SLAB,data=Block{minecraft:stone_slab}[type=bottom,waterlogged=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-104, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=46, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=48, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-105, y=47, z=100},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=101},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-107, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-105, y=47, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=46, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=48, z=98},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=97},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=99},type=AIR,data=Block{minecraft:air},fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
//[STDOUT] CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b} -> CraftBlock{pos=BlockPosition{x=-106, y=47, z=98},type=NOTE_BLOCK,data=Block{minecraft:note_block}[instrument=basedrum,note=9,powered=false],fluid=net.minecraft.world.level.material.FluidTypeEmpty@1531ed7b}
}
@EventHandler @EventHandler
public void onPistonRetract(BlockPistonRetractEvent e) { public void onPistonRetract(BlockPistonRetractEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onBlockGrow(BlockGrowEvent e) { public void onBlockGrow(BlockGrowEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onRedstoneEvent(BlockRedstoneEvent e) { public void onRedstoneEvent(BlockRedstoneEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setNewCurrent(e.getOldCurrent()); e.setNewCurrent(e.getOldCurrent());
} }
} }
@EventHandler @EventHandler
public void onBlockDispense(BlockDispenseEvent e) { public void onBlockDispense(BlockDispenseEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onInventoryMoveEvent(InventoryMoveItemEvent e) { public void onInventoryMoveEvent(InventoryMoveItemEvent e) {
if (e.getDestination().getLocation() != null && Region.getRegion(e.getDestination().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (e.getDestination().getLocation() != null && Region.getRegion(e.getDestination().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} else if (e.getSource().getLocation() != null && Region.getRegion(e.getSource().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { } else if (e.getSource().getLocation() != null && Region.getRegion(e.getSource().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent e) { public void onBlockBreak(BlockBreakEvent e) {
if (Core.getVersion() < 19) return; if (Core.getVersion() < 19) return;
if (e.getPlayer().getInventory().getItemInMainHand().getType() == Material.DEBUG_STICK) return; if (e.getPlayer().getInventory().getItemInMainHand().getType() == Material.DEBUG_STICK) return;
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
e.getBlock().setType(Material.BARRIER, false); e.getBlock().setType(Material.BARRIER, false);
e.getBlock().setType(Material.AIR, false); e.getBlock().setType(Material.AIR, false);
@ -253,35 +151,35 @@ public class FreezeListener implements Listener, ScoreboardElement {
@EventHandler @EventHandler
public void onFluidLevelChange(FluidLevelChangeEvent e) { public void onFluidLevelChange(FluidLevelChangeEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onBlockSpread(BlockSpreadEvent e) { public void onBlockSpread(BlockSpreadEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onBlockFromTo(BlockFromToEvent e) { public void onBlockFromTo(BlockFromToEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onSpongeAbsorb(SpongeAbsorbEvent e) { public void onSpongeAbsorb(SpongeAbsorbEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@EventHandler @EventHandler
public void onBlockForm(BlockFormEvent e) { public void onBlockForm(BlockFormEvent e) {
if (Region.getRegion(e.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
e.setCancelled(true); e.setCancelled(true);
} }
} }
@ -289,7 +187,7 @@ public class FreezeListener implements Listener, ScoreboardElement {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent e) { public void onPlayerInteract(PlayerInteractEvent e) {
if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
if (Region.getRegion(e.getClickedBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getClickedBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
Block block = e.getClickedBlock(); Block block = e.getClickedBlock();
if (block.getType() == Material.LEVER) { if (block.getType() == Material.LEVER) {
Switch data = ((Switch) block.getBlockData()); Switch data = ((Switch) block.getBlockData());
@ -300,9 +198,9 @@ public class FreezeListener implements Listener, ScoreboardElement {
} }
@EventHandler @EventHandler
public void onBlockFade(BlockFadeEvent event) { public void onBlockFade(BlockFadeEvent e) {
if (Region.getRegion(event.getBlock().getLocation()).get(Flag.FREEZE) == FreezeMode.ACTIVE) { if (Region.getRegion(e.getBlock().getLocation()).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
event.setCancelled(true); e.setCancelled(true);
} }
} }
@ -318,7 +216,7 @@ public class FreezeListener implements Listener, ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
if (region.get(Flag.FREEZE) == Flag.FREEZE.getDefaultValue()) return null; if (region.getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.INACTIVE)) return null;
return "§e" + BauSystem.MESSAGE.parse(Flag.FREEZE.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.get(Flag.FREEZE).getChatValue(), p); return "§e" + BauSystem.MESSAGE.parse(Flag.FREEZE.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.getFlags().get(Flag.FREEZE).getWithDefault().getChatValue(), p);
} }
} }

View File

@ -19,14 +19,11 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.GlobalRegion;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ItemMode; import de.steamwar.bausystem.region.flags.ItemMode;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion; import de.steamwar.linkage.MinVersion;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -58,13 +55,11 @@ public class ItemsCommand extends SWCommand {
} }
private boolean toggle(Region region) { private boolean toggle(Region region) {
switch (region.getPlain(Flag.ITEMS, ItemMode.class)) { if (region.getFlags().get(Flag.ITEMS).isWithDefault(ItemMode.ACTIVE)) {
case ACTIVE: region.getFlags().set(Flag.ITEMS, ItemMode.INACTIVE);
region.set(Flag.ITEMS, ItemMode.INACTIVE);
return false; return false;
default: } else {
case INACTIVE: region.getFlags().set(Flag.ITEMS, ItemMode.ACTIVE);
region.set(Flag.ITEMS, ItemMode.ACTIVE);
return true; return true;
} }
} }

View File

@ -22,7 +22,7 @@ package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ItemMode; import de.steamwar.bausystem.region.flags.ItemMode;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion; import de.steamwar.linkage.MinVersion;
@ -35,13 +35,9 @@ import org.bukkit.event.entity.ItemSpawnEvent;
@MinVersion(19) @MinVersion(19)
public class ItemsListener implements Listener, ScoreboardElement { public class ItemsListener implements Listener, ScoreboardElement {
private static ItemMode getMode(Region region) {
return region.getPlain(Flag.ITEMS, ItemMode.class);
}
@EventHandler @EventHandler
public void onItemSpawn(ItemSpawnEvent event) { public void onItemSpawn(ItemSpawnEvent event) {
if (getMode(Region.getRegion(event.getLocation())) == ItemMode.INACTIVE) { if (Region.getRegion(event.getLocation()).getFlags().get(Flag.ITEMS).isWithDefault(ItemMode.INACTIVE)) {
event.setCancelled(true); event.setCancelled(true);
} }
} }
@ -58,7 +54,7 @@ public class ItemsListener implements Listener, ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
if (region.get(Flag.ITEMS) == Flag.ITEMS.getDefaultValue()) return null; if (region.getFlags().get(Flag.ITEMS).isWithDefault(ItemMode.INACTIVE)) return null;
return "§e" + BauSystem.MESSAGE.parse(Flag.ITEMS.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.get(Flag.ITEMS).getChatValue(), p); return "§e" + BauSystem.MESSAGE.parse(Flag.ITEMS.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.getFlags().get(Flag.ITEMS).getWithDefault().getChatValue(), p);
} }
} }

View File

@ -22,7 +22,7 @@ package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.NoGravityMode; import de.steamwar.bausystem.region.flags.NoGravityMode;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -53,13 +53,11 @@ public class NoGravityCommand extends SWCommand {
} }
private boolean toggle(Region region) { private boolean toggle(Region region) {
switch (region.getPlain(Flag.NO_GRAVITY, NoGravityMode.class)) { if (region.getFlags().get(Flag.NO_GRAVITY).isWithDefault(NoGravityMode.ACTIVE)) {
case ACTIVE: region.getFlags().set(Flag.NO_GRAVITY, NoGravityMode.INACTIVE);
region.set(Flag.NO_GRAVITY, NoGravityMode.INACTIVE);
return false; return false;
default: } else {
case INACTIVE: region.getFlags().set(Flag.NO_GRAVITY, NoGravityMode.ACTIVE);
region.set(Flag.NO_GRAVITY, NoGravityMode.ACTIVE);
return true; return true;
} }
} }

View File

@ -22,7 +22,7 @@ package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.NoGravityMode; import de.steamwar.bausystem.region.flags.NoGravityMode;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
@ -34,14 +34,10 @@ import org.bukkit.event.entity.EntitySpawnEvent;
@Linked @Linked
public class NoGravityListener implements Listener, ScoreboardElement { public class NoGravityListener implements Listener, ScoreboardElement {
private static NoGravityMode getMode(Region region) {
return region.getPlain(Flag.NO_GRAVITY, NoGravityMode.class);
}
@EventHandler @EventHandler
public void onEntitySpawn(EntitySpawnEvent event) { public void onEntitySpawn(EntitySpawnEvent event) {
if (event.getEntityType() == EntityType.PLAYER) return; if (event.getEntityType() == EntityType.PLAYER) return;
if (getMode(Region.getRegion(event.getLocation())) == NoGravityMode.ACTIVE) { if (Region.getRegion(event.getLocation()).getFlags().get(Flag.NO_GRAVITY).isWithDefault(NoGravityMode.ACTIVE)) {
event.getEntity().setGravity(false); event.getEntity().setGravity(false);
} }
} }
@ -58,7 +54,7 @@ public class NoGravityListener implements Listener, ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
if (region.get(Flag.NO_GRAVITY) == Flag.NO_GRAVITY.getDefaultValue()) return null; if (region.getFlags().get(Flag.NO_GRAVITY).isWithDefault(NoGravityMode.INACTIVE)) return null;
return "§e" + BauSystem.MESSAGE.parse(Flag.NO_GRAVITY.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.get(Flag.NO_GRAVITY).getChatValue(), p); return "§e" + BauSystem.MESSAGE.parse(Flag.NO_GRAVITY.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.getFlags().get(Flag.NO_GRAVITY).getWithDefault().getChatValue(), p);
} }
} }

View File

@ -20,13 +20,11 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode; import de.steamwar.bausystem.region.flags.ProtectMode;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeValidator;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -41,22 +39,18 @@ public class ProtectCommand extends SWCommand {
public void genericProtectCommand(@Validator Player p) { public void genericProtectCommand(@Validator Player p) {
Region region = regionCheck(p); Region region = regionCheck(p);
if (region == null) return; if (region == null) return;
switch (region.getPlain(Flag.PROTECT, ProtectMode.class)) { if (region.getFlags().get(Flag.PROTECT).isWithDefault(ProtectMode.ACTIVE)) {
case ACTIVE: region.getFlags().set(Flag.PROTECT, ProtectMode.INACTIVE);
region.set(Flag.PROTECT, ProtectMode.INACTIVE);
RegionUtils.actionBar(region, "REGION_PROTECT_DISABLE"); RegionUtils.actionBar(region, "REGION_PROTECT_DISABLE");
break; } else {
default: region.getFlags().set(Flag.PROTECT, ProtectMode.ACTIVE);
case INACTIVE:
region.set(Flag.PROTECT, ProtectMode.ACTIVE);
RegionUtils.actionBar(region, "REGION_PROTECT_ENABLE"); RegionUtils.actionBar(region, "REGION_PROTECT_ENABLE");
break;
} }
} }
private Region regionCheck(Player player) { private Region regionCheck(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.getFloorLevel() == 0) { if (!region.getFlags().has(Flag.PROTECT).isApplicable()) {
BauSystem.MESSAGE.send("REGION_PROTECT_FALSE_REGION", player); BauSystem.MESSAGE.send("REGION_PROTECT_FALSE_REGION", player);
return null; return null;
} }

View File

@ -1,9 +1,10 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Point;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode; import de.steamwar.bausystem.region.flags.ProtectMode;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Location; import org.bukkit.Location;
@ -21,13 +22,11 @@ public class ProtectListener implements Listener, ScoreboardElement {
private void explode(List<Block> blockList, Location location) { private void explode(List<Block> blockList, Location location) {
Region region = Region.getRegion(location); Region region = Region.getRegion(location);
if (region.getFloorLevel() == 0) { if (region.getFlags().get(Flag.PROTECT).isWithDefault(ProtectMode.INACTIVE)) return;
return; Point p1 = region.getBuildArea().getMinPoint(true);
} Point p2 = region.getTestblockArea().getMinPoint(true);
if (region.getPlain(Flag.PROTECT, ProtectMode.class) == ProtectMode.INACTIVE) { int floorLevel = Math.min(p1.getY(), p2.getY());
return; blockList.removeIf(block -> block.getY() < floorLevel);
}
blockList.removeIf(block -> block.getY() < region.getFloorLevel());
} }
@EventHandler @EventHandler
@ -52,8 +51,7 @@ public class ProtectListener implements Listener, ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
if (region.getFloorLevel() == 0) return null; if (region.getFlags().get(Flag.PROTECT).isWithDefault(ProtectMode.INACTIVE)) return null;
if (region.get(Flag.PROTECT) != Flag.PROTECT.getDefaultValue()) return null; return "§e" + BauSystem.MESSAGE.parse(Flag.PROTECT.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.getFlags().get(Flag.PROTECT).getWithDefault().getChatValue(), p);
return "§e" + BauSystem.MESSAGE.parse(Flag.PROTECT.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.get(Flag.PROTECT).getChatValue(), p);
} }
} }

View File

@ -32,30 +32,20 @@ import de.steamwar.bausystem.region.Point;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.shared.Pair; import de.steamwar.bausystem.shared.Pair;
import de.steamwar.bausystem.utils.FlatteningWrapper; import de.steamwar.bausystem.utils.FlatteningWrapper;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
import de.steamwar.bausystem.utils.WorldEditUtils; import de.steamwar.bausystem.utils.WorldEditUtils;
import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance; import de.steamwar.linkage.LinkedInstance;
import de.steamwar.sql.SchematicNode; import de.steamwar.sql.SchematicNode;
import net.md_5.bungee.api.chat.ClickEvent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors;
@Linked @Linked
public class RegionCommand extends SWCommand { public class RegionCommand extends SWCommand {
@ -71,7 +61,7 @@ public class RegionCommand extends SWCommand {
} }
static boolean checkGlobalRegion(Region region, Player p) { static boolean checkGlobalRegion(Region region, Player p) {
if (region.isGlobal()) { if (region.getType().isGlobal()) {
BauSystem.MESSAGE.send("REGION_REGION_NO_REGION", p); BauSystem.MESSAGE.send("REGION_REGION_NO_REGION", p);
return true; return true;
} }
@ -83,7 +73,7 @@ public class RegionCommand extends SWCommand {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) return; if (checkGlobalRegion(region, p)) return;
if (region.undo()) { if (region.getHistory().undo()) {
RegionUtils.message(region, "REGION_REGION_UNDID"); RegionUtils.message(region, "REGION_REGION_UNDID");
} else { } else {
BauSystem.MESSAGE.send("REGION_REGION_NOTHING_UNDO", p); BauSystem.MESSAGE.send("REGION_REGION_NOTHING_UNDO", p);
@ -97,7 +87,7 @@ public class RegionCommand extends SWCommand {
return; return;
} }
if (region.redo()) { if (region.getHistory().redo()) {
RegionUtils.message(region, "REGION_REGION_REDID"); RegionUtils.message(region, "REGION_REGION_REDID");
} else { } else {
BauSystem.MESSAGE.send("REGION_REGION_NOTHING_REDO", p); BauSystem.MESSAGE.send("REGION_REGION_NOTHING_REDO", p);
@ -110,10 +100,10 @@ public class RegionCommand extends SWCommand {
if(checkGlobalRegion(region, p)) return; if(checkGlobalRegion(region, p)) return;
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.FileProvider(region.getResetFile(RegionType.NORMAL))) PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.FileProvider(region.getArea().getResetFile()))
.ignoreAir(true) .ignoreAir(true)
.color(region.getPlain(Flag.COLOR, ColorMode.class).getColor()); .color(region.getFlags().get(Flag.COLOR).getWithDefault());
region.reset(pasteBuilder, RegionType.NORMAL, RegionExtensionType.NORMAL); region.getArea().reset(pasteBuilder, false);
RegionUtils.message(region, "REGION_REGION_RESTORED"); RegionUtils.message(region, "REGION_REGION_RESTORED");
} catch (SecurityException e) { } catch (SecurityException e) {
BauSystem.MESSAGE.send("REGION_REGION_FAILED_RESTORE", p); BauSystem.MESSAGE.send("REGION_REGION_FAILED_RESTORE", p);
@ -134,8 +124,8 @@ public class RegionCommand extends SWCommand {
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.SchematicProvider(node)) PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.SchematicProvider(node))
.ignoreAir(true) .ignoreAir(true)
.color(region.getPlain(Flag.COLOR, ColorMode.class).getColor()); .color(region.getFlags().get(Flag.COLOR).getWithDefault());
region.reset(pasteBuilder, RegionType.NORMAL, RegionExtensionType.NORMAL); region.getArea().reset(pasteBuilder, false);
RegionUtils.message(region, "REGION_REGION_RESTORED"); RegionUtils.message(region, "REGION_REGION_RESTORED");
} catch (SecurityException e) { } catch (SecurityException e) {
BauSystem.MESSAGE.send("REGION_REGION_FAILED_RESTORE", p); BauSystem.MESSAGE.send("REGION_REGION_FAILED_RESTORE", p);
@ -149,11 +139,11 @@ public class RegionCommand extends SWCommand {
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
} }
if (region.getCopyPoint() == null) { if (region.getBuildArea().isEmpty()) {
BauSystem.MESSAGE.send("REGION_REGION_TP_UNKNOWN", p); BauSystem.MESSAGE.send("REGION_REGION_TP_UNKNOWN", p);
return; return;
} }
p.teleport(region.getCopyPoint().toLocation(p, 0.5, 0, 0.5), PlayerTeleportEvent.TeleportCause.COMMAND); p.teleport(region.getBuildArea().getCopyPoint().toLocation(p, 0.5, 0, 0.5), PlayerTeleportEvent.TeleportCause.COMMAND);
BauSystem.MESSAGE.send("REGION_REGION_TP_COPY", p); BauSystem.MESSAGE.send("REGION_REGION_TP_COPY", p);
} }
@ -164,70 +154,33 @@ public class RegionCommand extends SWCommand {
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
} }
if (region.getTestBlockPoint() == null) { if (region.getTestblockArea().isEmpty()) {
BauSystem.MESSAGE.send("REGION_REGION_TP_UNKNOWN", p); BauSystem.MESSAGE.send("REGION_REGION_TP_UNKNOWN", p);
return; return;
} }
p.teleport(region.getTestBlockPoint().toLocation(p, 0.5, 0, 0.5), PlayerTeleportEvent.TeleportCause.COMMAND); p.teleport(region.getTestblockArea().getCopyPoint().toLocation(p, 0.5, 0, 0.5), PlayerTeleportEvent.TeleportCause.COMMAND);
BauSystem.MESSAGE.send("REGION_REGION_TP_TEST_BLOCK", p); BauSystem.MESSAGE.send("REGION_REGION_TP_TEST_BLOCK", p);
} }
@Register(value = "changeskin", description = "REGION_REGION_HELP_CHANGESKIN_INFO")
@Register("skin")
public void changeSkinCommand(Player p) {
Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) {
return;
}
BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_INFO", p, region.getSkin());
String creator = region.getPrototype().getSkinMap().get(region.getSkin()).getCreator();
if (creator != null) {
BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_INFO_CREATOR", p, creator);
}
}
@Register(value = "changeskin", description = "REGION_REGION_HELP_CHANGESKIN")
@Register("skin")
public void changeSkinCommand(@Validator Player p, @Mapper("skinTypeMapper") String s) {
Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) {
return;
}
if (!region.getPrototype().getSkinMap().containsKey(s)) {
BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_UNKNOWN", p);
} else {
if (region.setSkin(s)) {
BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_CHANGE", p, s);
BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_CHANGE_UPDATE", p, BauSystem.MESSAGE.parse("REGION_REGION_CHANGESKIN_CHANGE_UPDATE_HOVER", p), new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/reset"));
} else {
BauSystem.MESSAGE.send("REGION_REGION_CHANGESKIN_INVALID", p);
}
}
}
@Register(value = "copy", description = "REGION_REGION_HELP_COPY") @Register(value = "copy", description = "REGION_REGION_HELP_COPY")
public void copyCommand(@Validator Player p, @OptionalValue("") @StaticValue(value = {"", "-e", "-s"}, allowISE = true) int option) { public void copyCommand(@Validator Player p, @OptionalValue("") @StaticValue(value = {"", "-e", "-s"}, allowISE = true) int option) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
} }
if (!region.hasType(RegionType.BUILD)) { if (region.getBuildArea().isEmpty()) {
BauSystem.MESSAGE.send("REGION_REGION_NO_BUILD", p); BauSystem.MESSAGE.send("REGION_REGION_NO_BUILD", p);
return; return;
} }
if (region.getCopyPoint() == null) {
BauSystem.MESSAGE.send("REGION_REGION_TP_UNKNOWN", p);
return;
}
Point minPoint = region.getMinPoint(RegionType.BUILD, RegionExtensionType.NORMAL); Point minPoint = region.getBuildArea().getMinPoint(false);
Point maxPoint = region.getMaxPoint(RegionType.BUILD, RegionExtensionType.NORMAL); Point maxPoint = region.getBuildArea().getMaxPoint(false);
switch (option) { switch (option) {
case 0: case 0:
break; break;
case 1: case 1:
minPoint = region.getMinPoint(RegionType.BUILD, RegionExtensionType.EXTENSION); minPoint = region.getBuildArea().getMinPoint(true);
maxPoint = region.getMaxPoint(RegionType.BUILD, RegionExtensionType.EXTENSION); maxPoint = region.getBuildArea().getMaxPoint(true);
break; break;
case 2: case 2:
Pair<Location, Location> selection = WorldEditUtils.getSelection(p); Pair<Location, Location> selection = WorldEditUtils.getSelection(p);
@ -238,7 +191,7 @@ public class RegionCommand extends SWCommand {
break; break;
} }
Clipboard clipboard = FlatteningWrapper.impl.copy(minPoint, maxPoint, region.getCopyPoint()); Clipboard clipboard = FlatteningWrapper.impl.copy(minPoint, maxPoint, region.getBuildArea().getCopyPoint());
WorldEdit.getInstance() WorldEdit.getInstance()
.getSessionManager() .getSessionManager()
.get(BukkitAdapter.adapt(p)) .get(BukkitAdapter.adapt(p))
@ -252,14 +205,10 @@ public class RegionCommand extends SWCommand {
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
} }
if (!region.hasType(RegionType.BUILD)) { if (region.getBuildArea().isEmpty()) {
BauSystem.MESSAGE.send("REGION_REGION_NO_BUILD", p); BauSystem.MESSAGE.send("REGION_REGION_NO_BUILD", p);
return; return;
} }
if (region.getCopyPoint() == null) {
BauSystem.MESSAGE.send("REGION_REGION_TP_UNKNOWN", p);
return;
}
ClipboardHolder clipboardHolder = WorldEdit.getInstance() ClipboardHolder clipboardHolder = WorldEdit.getInstance()
.getSessionManager() .getSessionManager()
@ -287,13 +236,13 @@ public class RegionCommand extends SWCommand {
} }
try (EditSession e = WorldEditUtils.getEditSession(p)) { try (EditSession e = WorldEditUtils.getEditSession(p)) {
Operations.completeBlindly(clipboardHolder.createPaste(e).ignoreAirBlocks(ignoreAir).to(toBlockVector3(region.getCopyPoint())).build()); Operations.completeBlindly(clipboardHolder.createPaste(e).ignoreAirBlocks(ignoreAir).to(toBlockVector3(region.getBuildArea().getCopyPoint())).build());
WorldEditUtils.addToPlayer(p, e); WorldEditUtils.addToPlayer(p, e);
if (selectPasted) { if (selectPasted) {
Clipboard clipboard = clipboardHolder.getClipboards().get(0); Clipboard clipboard = clipboardHolder.getClipboards().get(0);
BlockVector3 minPointSelection = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()).add(toBlockVector3(region.getCopyPoint())); BlockVector3 minPointSelection = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()).add(toBlockVector3(region.getBuildArea().getCopyPoint()));
BlockVector3 maxPointSelection = clipboard.getRegion().getMaximumPoint().subtract(clipboard.getOrigin()).add(toBlockVector3(region.getCopyPoint())); BlockVector3 maxPointSelection = clipboard.getRegion().getMaximumPoint().subtract(clipboard.getOrigin()).add(toBlockVector3(region.getBuildArea().getCopyPoint()));
FlatteningWrapper.impl.setSelection(p, Point.fromBlockVector3(minPointSelection), Point.fromBlockVector3(maxPointSelection)); FlatteningWrapper.impl.setSelection(p, Point.fromBlockVector3(minPointSelection), Point.fromBlockVector3(maxPointSelection));
} }
BauSystem.MESSAGE.send("REGION_REGION_PASTE_DONE", p); BauSystem.MESSAGE.send("REGION_REGION_PASTE_DONE", p);
@ -303,25 +252,4 @@ public class RegionCommand extends SWCommand {
private BlockVector3 toBlockVector3(Point point) { private BlockVector3 toBlockVector3(Point point) {
return BlockVector3.at(point.getX(), point.getY(), point.getZ()); return BlockVector3.at(point.getX(), point.getY(), point.getZ());
} }
@Mapper(value = "skinTypeMapper", local = true)
private TypeMapper<String> skinTypeMapper() {
return new TypeMapper<String>() {
@Override
public List<String> tabCompletes(CommandSender commandSender, PreviousArguments previousArguments, String s) {
Player p = (Player) commandSender;
Region region = Region.getRegion(p.getLocation());
if (region.isGlobal()) {
return Collections.emptyList();
}
return region.getPrototype().getSkinMap().keySet().stream().map(c -> c.replace(' ', '_')).collect(Collectors.toList());
}
@Override
public String map(CommandSender commandSender, PreviousArguments previousArguments, String s) {
return s.replace('_', ' ');
}
};
}
} }

View File

@ -21,7 +21,8 @@ package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.tags.Tag; import de.steamwar.bausystem.region.flags.ChangedMode;
import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -180,13 +181,7 @@ public class RegionListener implements Listener {
} }
} }
private static void tagChangedRegion(final Location location) { private static void tagChangedRegion(final Location location) {
new BukkitRunnable() { Region.getRegion(location).getFlags().set(Flag.CHANGED, ChangedMode.HAS_CHANGE);
@Override
public void run() {
Region.getRegion(location).set(Tag.CHANGED);
}
}.runTaskAsynchronously(BauSystem.getInstance());
} }
} }

View File

@ -20,12 +20,16 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.GlobalRegion;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.io.File;
import java.util.List;
import java.util.Optional;
@Linked @Linked
public class RegionScoreboardElement implements ScoreboardElement { public class RegionScoreboardElement implements ScoreboardElement {
@ -41,7 +45,10 @@ public class RegionScoreboardElement implements ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
if (GlobalRegion.getInstance() == region) return null; if (region.getType().isGlobal()) return null;
return "§e" + BauSystem.MESSAGE.parse("SCOREBOARD_REGION", p) + "§8: §7" + region.getDisplayName(); if (!region.getGameModeConfig().isLoaded()) return null;
List<String> names = region.getGameModeConfig().getServer().getChatNames();
if (names.isEmpty()) return null;
return "§e" + BauSystem.MESSAGE.parse("SCOREBOARD_REGION", p) + "§8: §7" + names.get(0);
} }
} }

View File

@ -21,13 +21,10 @@ package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.region.GlobalRegion;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionSystem;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -55,12 +52,10 @@ public class ResetCommand extends SWCommand {
Region region = regionCheck(p); Region region = regionCheck(p);
if (region == null) return; if (region == null) return;
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.FileProvider(region.getResetFile(RegionType.NORMAL))) PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.FileProvider(region.getArea().getResetFile()))
.color(region.getPlain(Flag.COLOR, ColorMode.class).getColor()); .color(region.getFlags().get(Flag.COLOR).getWithDefault());
region.reset(pasteBuilder, RegionType.NORMAL, RegionExtensionType.NORMAL); region.getArea().reset(pasteBuilder, false);
for (Flag value : Flag.getResetFlags()) { region.getFlags().clear();
region.set(value, value.getDefaultValue());
}
RegionUtils.message(region, "REGION_RESET_RESETED"); RegionUtils.message(region, "REGION_RESET_RESETED");
} catch (SecurityException e) { } catch (SecurityException e) {
BauSystem.MESSAGE.send("REGION_RESET_ERROR", p); BauSystem.MESSAGE.send("REGION_RESET_ERROR", p);
@ -88,8 +83,8 @@ public class ResetCommand extends SWCommand {
} }
try { try {
PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.SchematicProvider(node)) PasteBuilder pasteBuilder = new PasteBuilder(new PasteBuilder.SchematicProvider(node))
.color(region.getPlain(Flag.COLOR, ColorMode.class).getColor()); .color(region.getFlags().get(Flag.COLOR).getWithDefault());
region.reset(pasteBuilder, RegionType.NORMAL, RegionExtensionType.NORMAL); region.getArea().reset(pasteBuilder, true);
RegionUtils.message(region, "REGION_RESET_RESETED"); RegionUtils.message(region, "REGION_RESET_RESETED");
} catch (SecurityException e) { } catch (SecurityException e) {
BauSystem.MESSAGE.send("REGION_RESET_ERROR", p); BauSystem.MESSAGE.send("REGION_RESET_ERROR", p);
@ -99,7 +94,7 @@ public class ResetCommand extends SWCommand {
private Region regionCheck(Player player) { private Region regionCheck(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region == GlobalRegion.getInstance()) { if (region == RegionSystem.INSTANCE.getGlobalRegion()) {
BauSystem.MESSAGE.send("REGION_RESET_NO_REGION", player); BauSystem.MESSAGE.send("REGION_RESET_NO_REGION", player);
return null; return null;
} }

View File

@ -20,16 +20,14 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; import de.steamwar.bausystem.region.flags.TNTMode;
import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.region.flags.TestblockMode;
import de.steamwar.command.PreviousArguments; import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper; import de.steamwar.command.TypeMapper;
import de.steamwar.command.TypeValidator;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -74,9 +72,6 @@ public class TNTCommand extends SWCommand {
case ONLY_TB: case ONLY_TB:
requestedMessage = getTestblockEnableMessage(); requestedMessage = getTestblockEnableMessage();
break; break;
case ONLY_BUILD:
requestedMessage = getBuildEnableMessage();
break;
} }
tntToggle(region, tntMode, requestedMessage); tntToggle(region, tntMode, requestedMessage);
} }
@ -92,13 +87,12 @@ public class TNTCommand extends SWCommand {
Map<String, TNTMode> tntModeMap = new HashMap<>(tntModeMapReduced); Map<String, TNTMode> tntModeMap = new HashMap<>(tntModeMapReduced);
tntModeMap.put("testblock", TNTMode.ONLY_TB); tntModeMap.put("testblock", TNTMode.ONLY_TB);
tntModeMap.put("tb", TNTMode.ONLY_TB); tntModeMap.put("tb", TNTMode.ONLY_TB);
tntModeMap.put("build", TNTMode.ONLY_BUILD);
return new TypeMapper<TNTMode>() { return new TypeMapper<>() {
@Override @Override
public List<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) { public List<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
Region region = Region.getRegion(((Player) sender).getLocation()); Region region = Region.getRegion(((Player) sender).getLocation());
if (region.hasType(RegionType.TESTBLOCK) && region.hasType(RegionType.BUILD)) { if (region.getFlags().get(Flag.TESTBLOCK).isNotWithDefault(TestblockMode.NO_VALUE)) {
return new ArrayList<>(tntModeMap.keySet()); return new ArrayList<>(tntModeMap.keySet());
} else { } else {
return new ArrayList<>(tntModeMapReduced.keySet()); return new ArrayList<>(tntModeMapReduced.keySet());
@ -108,7 +102,7 @@ public class TNTCommand extends SWCommand {
@Override @Override
public TNTMode map(CommandSender sender, PreviousArguments previousArguments, String s) { public TNTMode map(CommandSender sender, PreviousArguments previousArguments, String s) {
Region region = Region.getRegion(((Player) sender).getLocation()); Region region = Region.getRegion(((Player) sender).getLocation());
if (region.hasType(RegionType.TESTBLOCK) && region.hasType(RegionType.BUILD)) { if (region.getFlags().get(Flag.TESTBLOCK).isNotWithDefault(TestblockMode.NO_VALUE)) {
return tntModeMap.getOrDefault(s, null); return tntModeMap.getOrDefault(s, null);
} else { } else {
return tntModeMapReduced.getOrDefault(s, null); return tntModeMapReduced.getOrDefault(s, null);
@ -134,24 +128,23 @@ public class TNTCommand extends SWCommand {
} }
private void tntToggle(Region region, TNTMode requestedMode, String requestedMessage) { private void tntToggle(Region region, TNTMode requestedMode, String requestedMessage) {
if (requestedMode != null && region.hasType(RegionType.TESTBLOCK) && region.hasType(RegionType.BUILD)) { if (requestedMode != null && region.getFlags().get(Flag.TESTBLOCK).isNotWithDefault(TestblockMode.NO_VALUE)) {
region.set(Flag.TNT, requestedMode); region.getFlags().set(Flag.TNT, requestedMode);
RegionUtils.actionBar(region, requestedMessage); RegionUtils.actionBar(region, requestedMessage);
return; return;
} }
switch (region.getPlain(Flag.TNT, TNTMode.class)) { switch (region.getFlags().get(Flag.TNT).getWithDefault()) {
case ALLOW: case ALLOW:
case ONLY_TB: case ONLY_TB:
case ONLY_BUILD: region.getFlags().set(Flag.TNT, TNTMode.DENY);
region.set(Flag.TNT, TNTMode.DENY);
RegionUtils.actionBar(region, getDisableMessage()); RegionUtils.actionBar(region, getDisableMessage());
break; break;
case DENY: case DENY:
if (region.hasType(RegionType.TESTBLOCK) && region.hasType(RegionType.BUILD)) { if (region.getFlags().get(Flag.TESTBLOCK).isNotWithDefault(TestblockMode.NO_VALUE)) {
region.set(Flag.TNT, TNTMode.ONLY_TB); region.getFlags().set(Flag.TNT, TNTMode.ONLY_TB);
RegionUtils.actionBar(region, getTestblockEnableMessage()); RegionUtils.actionBar(region, getTestblockEnableMessage());
} else { } else {
region.set(Flag.TNT, TNTMode.ALLOW); region.getFlags().set(Flag.TNT, TNTMode.ALLOW);
RegionUtils.actionBar(region, getEnableMessage()); RegionUtils.actionBar(region, getEnableMessage());
} }
break; break;

View File

@ -23,9 +23,7 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; import de.steamwar.bausystem.region.flags.TNTMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.ScoreboardElement; import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@ -37,7 +35,6 @@ import org.bukkit.event.block.BlockExplodeEvent;
import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
@Linked @Linked
public class TNTListener implements Listener, ScoreboardElement { public class TNTListener implements Listener, ScoreboardElement {
@ -45,27 +42,14 @@ public class TNTListener implements Listener, ScoreboardElement {
private void explode(List<Block> blockList) { private void explode(List<Block> blockList) {
blockList.removeIf(block -> { blockList.removeIf(block -> {
Region region = Region.getRegion(block.getLocation()); Region region = Region.getRegion(block.getLocation());
TNTMode value = region.getPlain(Flag.TNT); TNTMode value = region.getFlags().get(Flag.TNT).getWithDefault();
if (value == TNTMode.ALLOW) { if (value == TNTMode.ALLOW) {
return false; return false;
} else if (value == TNTMode.ONLY_TB) { } else if (value == TNTMode.ONLY_TB) {
if (region.hasType(RegionType.BUILD) && region.inRegion(block.getLocation(), RegionType.BUILD, RegionExtensionType.NORMAL)) { if (region.getBuildArea().inRegion(block.getLocation(), true)) {
RegionUtils.actionBar(region, "REGION_TNT_BUILD_DESTROY"); RegionUtils.actionBar(region, "REGION_TNT_BUILD_DESTROY");
return true; return true;
} }
if (region.hasType(RegionType.BUILD) && region.inRegion(block.getLocation(), RegionType.BUILD, RegionExtensionType.EXTENSION)) {
RegionUtils.actionBar(region, "REGION_TNT_BUILD_DESTROY");
return true;
}
} else if (value == TNTMode.ONLY_BUILD) {
if (region.hasType(RegionType.TESTBLOCK) && region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.NORMAL)) {
RegionUtils.actionBar(region, "REGION_TNT_TB_DESTROY");
return true;
}
if (region.hasType(RegionType.TESTBLOCK) && region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) {
RegionUtils.actionBar(region, "REGION_TNT_TB_DESTROY");
return true;
}
} }
return value == TNTMode.DENY; return value == TNTMode.DENY;
}); });
@ -93,6 +77,7 @@ public class TNTListener implements Listener, ScoreboardElement {
@Override @Override
public String get(Region region, Player p) { public String get(Region region, Player p) {
return "§e" + BauSystem.MESSAGE.parse(Flag.TNT.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.get(Flag.TNT).getChatValue(), p); if (region.getFlags().get(Flag.TNT).isWithDefault(TNTMode.ALLOW)) return null;
return "§e" + BauSystem.MESSAGE.parse(Flag.TNT.getChatValue(), p) + "§8: " + BauSystem.MESSAGE.parse(region.getFlags().get(Flag.TNT).getWithDefault().getChatValue(), p);
} }
} }

View File

@ -20,19 +20,16 @@
package de.steamwar.bausystem.features.region; package de.steamwar.bausystem.features.region;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionUtils; import de.steamwar.bausystem.region.RegionUtils;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType; import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType; import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
import de.steamwar.command.PreviousArguments; import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper; import de.steamwar.command.TypeMapper;
import de.steamwar.command.TypeValidator;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance; import de.steamwar.linkage.LinkedInstance;
import de.steamwar.sql.Punishment; import de.steamwar.sql.Punishment;
@ -43,10 +40,8 @@ import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -99,14 +94,14 @@ public class TestblockCommand extends SWCommand {
} }
try { try {
PasteBuilder.ClipboardProvider clipboardProvider = node == null ? new PasteBuilder.FileProvider(region.getResetFile(RegionType.TESTBLOCK)) : new PasteBuilder.SchematicProvider(node); PasteBuilder.ClipboardProvider clipboardProvider = node == null ? new PasteBuilder.FileProvider(region.getTestblockArea().getResetFile()) : new PasteBuilder.SchematicProvider(node);
PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider) PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider)
.ignoreAir(ignoreAir) .ignoreAir(ignoreAir)
.onlyColors(onlyColors) .onlyColors(onlyColors)
.removeTNT(removeTNT) .removeTNT(removeTNT)
.removeWater(removeWater) .removeWater(removeWater)
.color(region.getPlain(Flag.COLOR, ColorMode.class).getColor()); .color(region.getFlags().get(Flag.COLOR).getWithDefault());
region.reset(pasteBuilder, RegionType.TESTBLOCK, regionExtensionType); region.getTestblockArea().reset(pasteBuilder, regionExtensionType == RegionExtensionType.EXTENSION);
RegionUtils.message(region, "REGION_TB_DONE"); RegionUtils.message(region, "REGION_TB_DONE");
} catch (SecurityException e) { } catch (SecurityException e) {
BauSystem.MESSAGE.send("REGION_TB_ERROR", p); BauSystem.MESSAGE.send("REGION_TB_ERROR", p);
@ -159,7 +154,7 @@ public class TestblockCommand extends SWCommand {
private Region regionCheck(Player player) { private Region regionCheck(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (!region.hasType(RegionType.TESTBLOCK)) { if (region.getTestblockArea().isEmpty()) {
BauSystem.MESSAGE.send("REGION_TB_NO_REGION", player); BauSystem.MESSAGE.send("REGION_TB_NO_REGION", player);
return null; return null;
} }

View File

@ -22,10 +22,9 @@ package de.steamwar.bausystem.features.region.items;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.Color;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.ColorMode;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv; import de.steamwar.inventory.SWListInv;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -45,7 +44,7 @@ public class ColorBauGuiItem extends BauGuiItem {
super(2); super(2);
} }
private static Material mapColor(Color color) { private static Material mapColor(ColorMode color) {
switch (color) { switch (color) {
case RED: case RED:
return Material.RED_CONCRETE; return Material.RED_CONCRETE;
@ -85,17 +84,17 @@ public class ColorBauGuiItem extends BauGuiItem {
@Override @Override
public ItemStack getItem(Player player) { public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
ColorMode mode = region.getPlain(Flag.COLOR, ColorMode.class); ColorMode mode = region.getFlags().get(Flag.COLOR).orElse(ColorMode.PINK);
return new SWItem(mapColor(mode.getColor()), BauSystem.MESSAGE.parse("REGION_ITEM_COLOR", player, BauSystem.MESSAGE.parse(mode.getChatValue(), player))).getItemStack(); return new SWItem(mapColor(mode), BauSystem.MESSAGE.parse("REGION_ITEM_COLOR", player, BauSystem.MESSAGE.parse(mode.getChatValue(), player))).getItemStack();
} }
@Override @Override
public boolean click(ClickType click, Player p) { public boolean click(ClickType click, Player p) {
p.closeInventory(); p.closeInventory();
ColorMode current = Region.getRegion(p.getLocation()).getPlain(Flag.COLOR, ColorMode.class); ColorMode current = Region.getRegion(p.getLocation()).getFlags().get(Flag.COLOR).orElse(ColorMode.PINK);
List<SWListInv.SWListEntry<ColorMode>> items = new ArrayList<>(); List<SWListInv.SWListEntry<ColorMode>> items = new ArrayList<>();
for (ColorMode value : ColorMode.values()) { for (ColorMode value : ColorMode.values()) {
items.add(new SWListInv.SWListEntry<>(new SWItem(mapColor(value.getColor()), (byte) 0, "§f" + BauSystem.MESSAGE.parse(value.getChatValue(), p), Collections.emptyList(), value == current, clickType -> { items.add(new SWListInv.SWListEntry<>(new SWItem(mapColor(value), (byte) 0, "§f" + BauSystem.MESSAGE.parse(value.getChatValue(), p), Collections.emptyList(), value == current, clickType -> {
}), value)); }), value));
} }
SWListInv<ColorMode> inv = new SWListInv<>(p, BauSystem.MESSAGE.parse("REGION_ITEM_COLOR_CHOOSE", p), items, (clickType, colorMode) -> { SWListInv<ColorMode> inv = new SWListInv<>(p, BauSystem.MESSAGE.parse("REGION_ITEM_COLOR_CHOOSE", p), items, (clickType, colorMode) -> {

View File

@ -23,8 +23,8 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.FireMode;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FireMode;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Material; import org.bukkit.Material;
@ -42,7 +42,10 @@ public class FireBauGuiItem extends BauGuiItem {
@Override @Override
public ItemStack getItem(Player player) { public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.getPlain(Flag.FIRE, FireMode.class) == FireMode.ALLOW) { if (!region.getFlags().has(Flag.FIRE).isApplicable()) {
return new SWItem(Material.BARRIER, "").getItemStack();
}
if (region.getFlags().get(Flag.FIRE).isWithDefault(FireMode.ALLOW)) {
return new SWItem(Material.FIRE_CHARGE, BauSystem.MESSAGE.parse("REGION_ITEM_FIRE_ALLOW", player)).getItemStack(); return new SWItem(Material.FIRE_CHARGE, BauSystem.MESSAGE.parse("REGION_ITEM_FIRE_ALLOW", player)).getItemStack();
} else { } else {
return new SWItem(Material.FIREWORK_STAR, BauSystem.MESSAGE.parse("REGION_ITEM_FIRE_DISALLOW", player)).getItemStack(); return new SWItem(Material.FIREWORK_STAR, BauSystem.MESSAGE.parse("REGION_ITEM_FIRE_DISALLOW", player)).getItemStack();

View File

@ -24,7 +24,7 @@ import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; import de.steamwar.bausystem.region.flags.FreezeMode;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Material; import org.bukkit.Material;
@ -42,7 +42,10 @@ public class FreezeBauGuiItem extends BauGuiItem {
@Override @Override
public ItemStack getItem(Player player) { public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.getPlain(Flag.FREEZE, FreezeMode.class) == FreezeMode.ACTIVE) { if (!region.getFlags().has(Flag.FREEZE).isApplicable()) {
return new SWItem(Material.BARRIER, "").getItemStack();
}
if (region.getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) {
return new SWItem(Material.GUNPOWDER, BauSystem.MESSAGE.parse("REGION_ITEM_FREEZE_ALLOW", player)).getItemStack(); return new SWItem(Material.GUNPOWDER, BauSystem.MESSAGE.parse("REGION_ITEM_FREEZE_ALLOW", player)).getItemStack();
} else { } else {
return new SWItem(Material.REDSTONE, BauSystem.MESSAGE.parse("REGION_ITEM_FREEZE_DISALLOW", player)).getItemStack(); return new SWItem(Material.REDSTONE, BauSystem.MESSAGE.parse("REGION_ITEM_FREEZE_DISALLOW", player)).getItemStack();

View File

@ -25,7 +25,7 @@ import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode; import de.steamwar.bausystem.region.flags.ProtectMode;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.Material; import org.bukkit.Material;
@ -43,7 +43,10 @@ public class ProtectBauGuiItem extends BauGuiItem {
@Override @Override
public ItemStack getItem(Player player) { public ItemStack getItem(Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.getPlain(Flag.PROTECT, ProtectMode.class) == ProtectMode.ACTIVE) { if (!region.getFlags().has(Flag.PROTECT).isApplicable()) {
return new SWItem(Material.BARRIER, "").getItemStack();
}
if (region.getFlags().get(Flag.PROTECT).isWithDefault(ProtectMode.ACTIVE)) {
return SWUtils.setCustomModelData(new SWItem(Material.OBSIDIAN, BauSystem.MESSAGE.parse("REGION_ITEM_PROTECT_ALLOW", player)), 1).getItemStack(); return SWUtils.setCustomModelData(new SWItem(Material.OBSIDIAN, BauSystem.MESSAGE.parse("REGION_ITEM_PROTECT_ALLOW", player)), 1).getItemStack();
} else { } else {
return SWUtils.setCustomModelData(new SWItem(Material.STONE, BauSystem.MESSAGE.parse("REGION_ITEM_PROTECT_DISALLOW", player)), 1).getItemStack(); return SWUtils.setCustomModelData(new SWItem(Material.STONE, BauSystem.MESSAGE.parse("REGION_ITEM_PROTECT_DISALLOW", player)), 1).getItemStack();

View File

@ -24,8 +24,7 @@ import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.TNTMode; import de.steamwar.bausystem.region.flags.TNTMode;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
@ -43,13 +42,11 @@ public class TntBauGuiItem extends BauGuiItem {
@Override @Override
public ItemStack getItem(Player player) { public ItemStack getItem(Player player) {
switch (Region.getRegion(player.getLocation()).getPlain(Flag.TNT, TNTMode.class)) { switch (Region.getRegion(player.getLocation()).getFlags().get(Flag.TNT).getWithDefault()) {
case DENY: case DENY:
return new SWItem(Material.MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_TNT_OFF", player)).getItemStack(); return new SWItem(Material.MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_TNT_OFF", player)).getItemStack();
case ONLY_TB: case ONLY_TB:
return new SWItem(Material.TNT_MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_TNT_ONLY_TB", player)).getItemStack(); return new SWItem(Material.TNT_MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_TNT_ONLY_TB", player)).getItemStack();
case ONLY_BUILD:
return new SWItem(Material.OBSIDIAN, BauSystem.MESSAGE.parse("REGION_ITEM_TNT_ONLY_BUILD", player)).getItemStack();
default: default:
return new SWItem(Material.TNT, BauSystem.MESSAGE.parse("REGION_ITEM_TNT_ON", player)).getItemStack(); return new SWItem(Material.TNT, BauSystem.MESSAGE.parse("REGION_ITEM_TNT_ON", player)).getItemStack();
} }
@ -58,12 +55,12 @@ public class TntBauGuiItem extends BauGuiItem {
@Override @Override
public boolean click(ClickType click, Player p) { public boolean click(ClickType click, Player p) {
if (click == ClickType.LEFT) { if (click == ClickType.LEFT) {
switch (Region.getRegion(p.getLocation()).getPlain(Flag.TNT, TNTMode.class)) { switch (Region.getRegion(p.getLocation()).getFlags().get(Flag.TNT).getWithDefault()) {
case DENY: case DENY:
updateTntMode(TNTMode.ALLOW, p); updateTntMode(TNTMode.ALLOW, p);
break; break;
case ALLOW: case ALLOW:
if (Region.getRegion(p.getLocation()).hasType(RegionType.BUILD) && Region.getRegion(p.getLocation()).hasType(RegionType.TESTBLOCK)) { if (!Region.getRegion(p.getLocation()).getBuildArea().isEmpty() && !Region.getRegion(p.getLocation()).getTestblockArea().isEmpty()) {
updateTntMode(TNTMode.ONLY_TB, p); updateTntMode(TNTMode.ONLY_TB, p);
break; break;
} }
@ -77,15 +74,11 @@ public class TntBauGuiItem extends BauGuiItem {
updateTntMode(TNTMode.ALLOW, p); updateTntMode(TNTMode.ALLOW, p);
p.closeInventory(); p.closeInventory();
})); }));
if (Region.getRegion(p.getLocation()).hasType(RegionType.BUILD) && Region.getRegion(p.getLocation()).hasType(RegionType.TESTBLOCK)) { if (!Region.getRegion(p.getLocation()).getBuildArea().isEmpty() && !Region.getRegion(p.getLocation()).getTestblockArea().isEmpty()) {
selector.setItem(3, new SWItem(Material.TNT_MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_SELECTOR_ONLY_TB", p), clickType -> { selector.setItem(3, new SWItem(Material.TNT_MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_SELECTOR_ONLY_TB", p), clickType -> {
updateTntMode(TNTMode.ONLY_TB, p); updateTntMode(TNTMode.ONLY_TB, p);
p.closeInventory(); p.closeInventory();
})); }));
selector.setItem(5, new SWItem(Material.OBSIDIAN, BauSystem.MESSAGE.parse("REGION_ITEM_SELECTOR_ONLY_BUILD", p), clickType -> {
updateTntMode(TNTMode.ONLY_BUILD, p);
p.closeInventory();
}));
} }
selector.setItem(7, new SWItem(Material.MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_SELECTOR_OFF", p), clickType -> { selector.setItem(7, new SWItem(Material.MINECART, BauSystem.MESSAGE.parse("REGION_ITEM_SELECTOR_OFF", p), clickType -> {
updateTntMode(TNTMode.DENY, p); updateTntMode(TNTMode.DENY, p);
@ -101,9 +94,6 @@ public class TntBauGuiItem extends BauGuiItem {
case ONLY_TB: case ONLY_TB:
p.performCommand("tnt tb"); p.performCommand("tnt tb");
break; break;
case ONLY_BUILD:
p.performCommand("tnt build");
break;
case ALLOW: case ALLOW:
p.performCommand("tnt on"); p.performCommand("tnt on");
break; break;

View File

@ -22,7 +22,6 @@ package de.steamwar.bausystem.features.script;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.features.script.lua.SteamWarPlatform; import de.steamwar.bausystem.features.script.lua.SteamWarPlatform;
import de.steamwar.bausystem.utils.ItemUtils;
import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv; import de.steamwar.inventory.SWListInv;

View File

@ -28,7 +28,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.luaj.vm2.LuaValue;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;

View File

@ -153,7 +153,7 @@ public class EventListener implements Listener {
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
if(!Permission.BUILD.hasPermission(player)) continue; if(!Permission.BUILD.hasPermission(player)) continue;
if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { if (tntRegion.getArea().inRegion(player.getLocation(), false)) {
ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTSpawn, LuaValue.NIL, event); ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTSpawn, LuaValue.NIL, event);
} }
} }
@ -171,11 +171,11 @@ public class EventListener implements Listener {
table.set("y", event.getLocation().getY()); table.set("y", event.getLocation().getY());
table.set("z", event.getLocation().getZ()); table.set("z", event.getLocation().getZ());
boolean inBuild = event.blockList().stream().anyMatch(block -> tntRegion.inRegion(block.getLocation(), RegionType.BUILD, RegionExtensionType.EXTENSION)); boolean inBuild = event.blockList().stream().anyMatch(block -> tntRegion.getBuildArea().inRegion(block.getLocation(), true));
for (Player player : Bukkit.getOnlinePlayers()) { for (Player player : Bukkit.getOnlinePlayers()) {
if(!Permission.BUILD.hasPermission(player)) continue; if(!Permission.BUILD.hasPermission(player)) continue;
if (tntRegion.inRegion(player.getLocation(), RegionType.NORMAL, RegionExtensionType.NORMAL)) { if (tntRegion.getArea().inRegion(player.getLocation(), false)) {
ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplode, table, event); ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplode, table, event);
if (inBuild) { if (inBuild) {
ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplodeInBuild, table, event); ScriptRunner.callEvent(player, SteamWarGlobalLuaPlugin.EventType.TNTExplodeInBuild, table, event);

View File

@ -22,19 +22,14 @@ package de.steamwar.bausystem.features.script.lua;
import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.bukkit.BukkitPlayer;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.event.platform.CommandEvent; import com.sk89q.worldedit.event.platform.CommandEvent;
import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.Actor;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.features.script.ScriptRunner; import de.steamwar.bausystem.features.script.ScriptRunner;
import de.steamwar.bausystem.features.script.lua.libs.LuaLib; import de.steamwar.bausystem.features.script.lua.libs.LuaLib;
import de.steamwar.bausystem.features.world.WorldEditListener; import de.steamwar.bausystem.features.world.WorldEditListener;
import de.steamwar.bausystem.utils.WorldEditUtils; import de.steamwar.bausystem.utils.WorldEditUtils;
import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWAnvilInv;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
@ -47,8 +42,6 @@ import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs; import org.luaj.vm2.Varargs;
import org.luaj.vm2.lib.*; import org.luaj.vm2.lib.*;
import java.lang.reflect.Proxy;
import java.net.InetSocketAddress;
import java.util.*; import java.util.*;
import java.util.logging.Level; import java.util.logging.Level;
@ -166,6 +159,8 @@ public class SteamWarLuaPlugin extends TwoArgFunction {
env.set("rawlen", NIL); env.set("rawlen", NIL);
env.set("rawset", NIL); env.set("rawset", NIL);
env.set("xpcall", NIL); env.set("xpcall", NIL);
env.set("require", NIL);
env.set("package", NIL);
return null; return null;
} }

View File

@ -20,19 +20,17 @@
package de.steamwar.bausystem.features.script.lua.libs; package de.steamwar.bausystem.features.script.lua.libs;
import de.steamwar.bausystem.features.loader.Loader; import de.steamwar.bausystem.features.loader.Loader;
import de.steamwar.bausystem.region.GlobalRegion;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.RegionSystem;
import de.steamwar.bausystem.region.flags.flagvalues.FireMode; import de.steamwar.bausystem.region.flags.*;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode;
import de.steamwar.bausystem.region.flags.flagvalues.ProtectMode;
import de.steamwar.bausystem.region.flags.flagvalues.TNTMode;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue; import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.OneArgFunction; import org.luaj.vm2.lib.OneArgFunction;
import java.util.List;
import java.util.UUID;
import java.util.function.Supplier; import java.util.function.Supplier;
@Linked @Linked
@ -46,27 +44,29 @@ public class RegionLib implements LuaLib {
private LuaTable create(Supplier<Region> region, Player player) { private LuaTable create(Supplier<Region> region, Player player) {
LuaTable table = LuaValue.tableOf(); LuaTable table = LuaValue.tableOf();
table.set("name", getter(() -> region.get().getName())); table.set("name", getter(() -> region.get().getID().toString()));
table.set("id", getter(() -> region.get().getID().toString()));
table.set("type", getter(() -> { table.set("type", getter(() -> {
Region region1 = region.get(); Region rg = region.get();
if (region1 instanceof GlobalRegion) { if (rg.getType().isGlobal()) {
return "global"; return "global";
} else {
return region1.getPrototype().getName();
} }
List<String> chatNames = rg.getGameModeConfig().getServer().getChatNames();
if (chatNames.isEmpty()) {
return "unknown";
}
return chatNames.get(0).toLowerCase();
})); }));
LuaValue tntLib = LuaValue.tableOf(); LuaValue tntLib = LuaValue.tableOf();
tntLib.set("mode", getter(() -> region.get().getPlain(Flag.TNT, TNTMode.class).name())); tntLib.set("mode", getter(() -> region.get().getFlags().get(Flag.TNT).nameWithDefault()));
tntLib.set("enabled", getter(() -> region.get().getPlain(Flag.TNT, TNTMode.class) != TNTMode.DENY)); tntLib.set("enabled", getter(() -> region.get().getFlags().get(Flag.TNT).orElse(null) != TNTMode.DENY));
tntLib.set("onlyTb", getter(() -> region.get().getPlain(Flag.TNT, TNTMode.class) == TNTMode.ONLY_TB)); tntLib.set("onlyTb", getter(() -> region.get().getFlags().get(Flag.TNT).orElse(null) == TNTMode.ONLY_TB));
tntLib.set("onlyBuild", getter(() -> region.get().getPlain(Flag.TNT, TNTMode.class) == TNTMode.ONLY_BUILD));
table.set("tnt", tntLib); table.set("tnt", tntLib);
table.set("fire", getter(() -> region.get().getPlain(Flag.FIRE, FireMode.class) == FireMode.ALLOW)); table.set("fire", getter(() -> region.get().getFlags().get(Flag.FIRE).orElse(null) == FireMode.ALLOW));
table.set("freeze", getter(() -> region.get().getPlain(Flag.FREEZE, FreezeMode.class) == FreezeMode.ACTIVE)); table.set("freeze", getter(() -> region.get().getFlags().get(Flag.FREEZE).orElse(null) == FreezeMode.ACTIVE));
table.set("protect", getter(() -> region.get().getPlain(Flag.PROTECT, ProtectMode.class) == ProtectMode.ACTIVE)); table.set("protect", getter(() -> region.get().getFlags().get(Flag.PROTECT).orElse(null) == ProtectMode.ACTIVE));
//LuaValue traceLib = LuaValue.tableOf(); //LuaValue traceLib = LuaValue.tableOf();
//traceLib.set("active", getter(() -> !region.get().isGlobal() && Recorder.INSTANCE.get(region.get()) instanceof ActiveTracer)); //traceLib.set("active", getter(() -> !region.get().isGlobal() && Recorder.INSTANCE.get(region.get()) instanceof ActiveTracer));
@ -79,16 +79,16 @@ public class RegionLib implements LuaLib {
Loader loader = Loader.getLoader(player); Loader loader = Loader.getLoader(player);
table.set("loader", getter(() -> loader == null ? "OFF" : loader.getStage().name())); table.set("loader", getter(() -> loader == null ? "OFF" : loader.getStage().name()));
table.set("copyPoint", getter(() -> toPos(region.get().getCopyPoint()))); table.set("copyPoint", getter(() -> toPos(region.get().getBuildArea().getCopyPoint())));
table.set("minPointBuild", getter(() -> toPos(region.get().getMinPointBuild()))); table.set("minPointBuild", getter(() -> toPos(region.get().getBuildArea().getMinPoint(false))));
table.set("maxPointBuild", getter(() -> toPos(region.get().getMaxPointBuild()))); table.set("maxPointBuild", getter(() -> toPos(region.get().getBuildArea().getMinPoint(false))));
table.set("minPointBuildExtension", getter(() -> toPos(region.get().getMinPointBuildExtension()))); table.set("minPointBuildExtension", getter(() -> toPos(region.get().getBuildArea().getMinPoint(true))));
table.set("maxPointBuildExtension", getter(() -> toPos(region.get().getMaxPointBuildExtension()))); table.set("maxPointBuildExtension", getter(() -> toPos(region.get().getBuildArea().getMinPoint(true))));
table.set("testblockPoint", getter(() -> toPos(region.get().getTestBlockPoint()))); table.set("testblockPoint", getter(() -> toPos(region.get().getTestblockArea().getCopyPoint())));
table.set("minPointTestblock", getter(() -> toPos(region.get().getMinPointTestblock()))); table.set("minPointTestblock", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(false))));
table.set("maxPointTestblock", getter(() -> toPos(region.get().getMaxPointTestblock()))); table.set("maxPointTestblock", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(false))));
table.set("minPointTestblockExtension", getter(() -> toPos(region.get().getMinPointTestblockExtension()))); table.set("minPointTestblockExtension", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(true))));
table.set("maxPointTestblockExtension", getter(() -> toPos(region.get().getMaxPointTestblockExtension()))); table.set("maxPointTestblockExtension", getter(() -> toPos(region.get().getTestblockArea().getMinPoint(true))));
return table; return table;
} }
@ -99,11 +99,11 @@ public class RegionLib implements LuaLib {
table.set("get", new OneArgFunction() { table.set("get", new OneArgFunction() {
@Override @Override
public LuaValue call(LuaValue arg) { public LuaValue call(LuaValue arg) {
return create(() -> Region.getREGION_MAP().get(arg.checkjstring()), player); return create(() -> RegionSystem.INSTANCE.getRegion(UUID.fromString(arg.checkjstring())).orElse(RegionSystem.INSTANCE.getGlobalRegion()), player);
} }
}); });
table.set("list", getter(() -> LuaValue.listOf(Region.getREGION_MAP().values().stream().map(region -> create(() -> region, player)).toArray(LuaTable[]::new)))); table.set("list", getter(() -> LuaValue.listOf(RegionSystem.INSTANCE.getRegions().map(region -> create(() -> region, player)).toArray(LuaTable[]::new))));
return table; return table;
} }

View File

@ -24,9 +24,7 @@ import de.steamwar.bausystem.utils.ScoreboardElement;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.Varargs; import org.luaj.vm2.Varargs;
import org.luaj.vm2.lib.TwoArgFunction;
import org.luaj.vm2.lib.VarArgFunction; import org.luaj.vm2.lib.VarArgFunction;
@Linked @Linked

View File

@ -21,7 +21,6 @@ package de.steamwar.bausystem.features.script.lua.libs;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.loader.Loader;
import de.steamwar.bausystem.features.loader.LoaderRecorder; import de.steamwar.bausystem.features.loader.LoaderRecorder;
import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;

View File

@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.script.lua.libs;
import com.google.gson.*; import com.google.gson.*;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.RegionSystem;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.api.Disable; import de.steamwar.linkage.api.Disable;
@ -74,7 +75,7 @@ public class StorageLib implements LuaLib, Enable, Disable {
jsonObject.keySet().forEach(key -> { jsonObject.keySet().forEach(key -> {
map.put(key, fromJson(jsonObject.get(key))); map.put(key, fromJson(jsonObject.get(key)));
}); });
Region region = Region.getREGION_MAP().get(regionStorage.getName().substring(0, regionStorage.getName().length() - ".json".length())); Region region = RegionSystem.INSTANCE.getRegion(UUID.fromString(regionStorage.getName().substring(0, regionStorage.getName().length() - ".json".length()))).orElse(null);
REGION_STORAGE.put(region, map); REGION_STORAGE.put(region, map);
} catch (Exception e) {} } catch (Exception e) {}
} }
@ -143,7 +144,7 @@ public class StorageLib implements LuaLib, Enable, Disable {
regionStorageDirectory.mkdirs(); regionStorageDirectory.mkdirs();
for (Map.Entry<Region, HashMap<String, LuaValue>> entry : REGION_STORAGE.entrySet()) { for (Map.Entry<Region, HashMap<String, LuaValue>> entry : REGION_STORAGE.entrySet()) {
try { try {
FileWriter fileWriter = new FileWriter(new File(regionStorageDirectory, entry.getKey().getName() + ".json")); FileWriter fileWriter = new FileWriter(new File(regionStorageDirectory, entry.getKey().getID().toString() + ".json"));
gson.toJson(toJson(entry.getValue()), fileWriter); gson.toJson(toJson(entry.getValue()), fileWriter);
fileWriter.close(); fileWriter.close();
} catch (IOException e) {} } catch (IOException e) {}

View File

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.script.lua.libs; package de.steamwar.bausystem.features.script.lua.libs;
import de.steamwar.bausystem.features.tpslimit.TPSSystem; import de.steamwar.bausystem.features.tpslimit.TPSSystem;
import de.steamwar.bausystem.utils.TickManager;
import de.steamwar.core.TPSWatcher; import de.steamwar.core.TPSWatcher;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance; import de.steamwar.linkage.LinkedInstance;
@ -51,7 +52,7 @@ public class TpsLib implements LuaLib {
tpsLib.set("fiveMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.FIVE_MINUTES))); tpsLib.set("fiveMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.FIVE_MINUTES)));
tpsLib.set("tenMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_MINUTES))); tpsLib.set("tenMinute", getter(() -> TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_MINUTES)));
tpsLib.set("current", getter(TPSWatcher::getTPS)); tpsLib.set("current", getter(TPSWatcher::getTPS));
tpsLib.set("limit", getter(TPSSystem::getCurrentTPSLimit)); tpsLib.set("limit", getter(() -> (double) TickManager.impl.getTickRate()));
return tpsLib; return tpsLib;
} }
} }

View File

@ -54,7 +54,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
@Register @Register
public void genericCommand(@Validator Player player, ShieldPrintingState shieldPrintingState) { public void genericCommand(@Validator Player player, ShieldPrintingState shieldPrintingState) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.isGlobal()) { if (region.getType().isGlobal()) {
BauSystem.MESSAGE.send("SHIELD_PRINTING_NO_REGION", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_NO_REGION", player);
return; return;
} }
@ -90,7 +90,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
@Register("stop") @Register("stop")
public void stopCommand(@Validator Player player) { public void stopCommand(@Validator Player player) {
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.isGlobal()) { if (region.getType().isGlobal()) {
BauSystem.MESSAGE.send("SHIELD_PRINTING_NO_REGION", player); BauSystem.MESSAGE.send("SHIELD_PRINTING_NO_REGION", player);
return; return;
} }
@ -111,7 +111,7 @@ public class ShieldPrintingCommand extends SWCommand implements Listener {
return false; return false;
} }
Region region = Region.getRegion(player.getLocation()); Region region = Region.getRegion(player.getLocation());
if (region.isGlobal()) { if (region.getType().isGlobal()) {
messageSender.send("SHIELD_PRINTING_NO_REGION", player); messageSender.send("SHIELD_PRINTING_NO_REGION", player);
return false; return false;
} }

View File

@ -23,7 +23,6 @@ import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.shieldprinting.BlockDataConfiguration; import de.steamwar.bausystem.features.shieldprinting.BlockDataConfiguration;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Piston; import org.bukkit.block.data.type.Piston;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;

View File

@ -76,7 +76,7 @@ public class SimulatorCommand extends SWCommand {
@Register(value = "start", description = "SIMULATOR_START_HELP") @Register(value = "start", description = "SIMULATOR_START_HELP")
public void start(@Validator Player p, @ErrorMessage("SIMULATOR_NOT_EXISTS") Simulator simulator) { public void start(@Validator Player p, @ErrorMessage("SIMULATOR_NOT_EXISTS") Simulator simulator) {
SimulatorExecutor.run(simulator, () -> {}); SimulatorExecutor.run(p, simulator, null);
} }
@Register(value = "rename", description = "SIMULATOR_RENAME_HELP") @Register(value = "rename", description = "SIMULATOR_RENAME_HELP")

View File

@ -19,8 +19,8 @@
package de.steamwar.bausystem.features.simulator; package de.steamwar.bausystem.features.simulator;
import de.steamwar.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.Reflection;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
@ -40,10 +40,13 @@ import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent; import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.ItemUtils; import de.steamwar.bausystem.utils.ItemUtils;
import de.steamwar.bausystem.utils.RayTraceUtils; import de.steamwar.bausystem.utils.RayTraceUtils;
import de.steamwar.data.CMDs;
import de.steamwar.entity.REntity; import de.steamwar.entity.REntity;
import de.steamwar.entity.REntityServer; import de.steamwar.entity.REntityServer;
import de.steamwar.entity.RFallingBlockEntity; import de.steamwar.entity.RFallingBlockEntity;
import de.steamwar.inventory.SWAnvilInv; import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked; import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion; import de.steamwar.linkage.MinVersion;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -147,8 +150,23 @@ public class SimulatorCursor implements Listener {
return; return;
} }
if (LAST_SNEAKS.containsKey(player)) { if (LAST_SNEAKS.containsKey(player)) {
cursorType.put(player, cursorType.getOrDefault(player, CursorType.TNT).switchType()); SWInventory swInventory = new SWInventory(player, 9, "Simulator Cursor");
int slot = 2;
CursorType currentType = cursorType.getOrDefault(player, CursorType.TNT);
for (CursorType type : CursorType.values()) {
boolean selected = type == currentType;
SWItem swItem = new SWItem(selected ? type.material : type.nonSelectedMaterial, "§e" + type.name)
.setCustomModelData(selected ? 0 : CMDs.Simulator.NEW_PHASE)
.setLore(Collections.singletonList("§eClick to select"))
.setCallback(click -> {
cursorType.put(player, type);
calcCursor(player); calcCursor(player);
player.closeInventory();
});
swInventory.setItem(slot, swItem);
slot += 2;
}
swInventory.open();
} else { } else {
LAST_SNEAKS.put(player, System.currentTimeMillis()); LAST_SNEAKS.put(player, System.currentTimeMillis());
} }
@ -331,25 +349,16 @@ public class SimulatorCursor implements Listener {
@Getter @Getter
@AllArgsConstructor @AllArgsConstructor
public enum CursorType { public enum CursorType {
TNT(Material.TNT, SimulatorCursor::getPosFree, "TNT", vector -> new TNTElement(vector).add(new TNTPhase())), TNT(Material.TNT, Material.GUNPOWDER, SimulatorCursor::getPosFree, "TNT", vector -> new TNTElement(vector).add(new TNTPhase())),
REDSTONE_BLOCK(Material.REDSTONE_BLOCK, SimulatorCursor::getPosBlockAligned, "Redstone Block", vector -> new RedstoneElement(vector).add(new RedstonePhase())), REDSTONE_BLOCK(Material.REDSTONE_BLOCK, Material.REDSTONE, SimulatorCursor::getPosBlockAligned, "Redstone Block", vector -> new RedstoneElement(vector).add(new RedstonePhase())),
OBSERVER(Material.OBSERVER, SimulatorCursor::getPosBlockAligned, "Observer", vector -> new ObserverElement(vector).add(new ObserverPhase())), OBSERVER(Material.OBSERVER, Material.QUARTZ, SimulatorCursor::getPosBlockAligned, "Observer", vector -> new ObserverElement(vector).add(new ObserverPhase())),
; ;
private Material material; private Material material;
private Material nonSelectedMaterial;
private BiFunction<Player, RayTraceUtils.RRayTraceResult, Vector> position; private BiFunction<Player, RayTraceUtils.RRayTraceResult, Vector> position;
private String name; private String name;
private Function<Vector, SimulatorElement<?>> elementFunction; private Function<Vector, SimulatorElement<?>> elementFunction;
public CursorType switchType() {
if (this == TNT) {
return REDSTONE_BLOCK;
}
if (this == REDSTONE_BLOCK) {
return OBSERVER;
}
return TNT;
}
} }
@EventHandler @EventHandler
@ -367,7 +376,7 @@ public class SimulatorCursor implements Listener {
if (simulator == null) { if (simulator == null) {
return; return;
} }
SimulatorExecutor.run(simulator, () -> {}); SimulatorExecutor.run(event.getPlayer(), simulator, null);
return; return;
} }

View File

@ -40,9 +40,11 @@ public final class Simulator {
private SimulatorStabGenerator stabGenerator = null; private SimulatorStabGenerator stabGenerator = null;
private Material material = Material.BARREL; private Material material = Material.BARREL;
private final String name; private final String name;
private boolean autoTrace = false;
private final List<SimulatorGroup> groups = new ArrayList<>(); private final List<SimulatorGroup> groups = new ArrayList<>();
private boolean autoTrace = false;
private boolean autoTestblock = false;
public void move(int x, int y, int z) { public void move(int x, int y, int z) {
groups.forEach(simulatorGroup -> { groups.forEach(simulatorGroup -> {
simulatorGroup.move(x, y, z); simulatorGroup.move(x, y, z);

View File

@ -33,7 +33,6 @@ import yapion.hierarchy.types.YAPIONObject;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
@Getter @Getter

View File

@ -25,8 +25,6 @@ import lombok.Setter;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import yapion.hierarchy.types.YAPIONObject; import yapion.hierarchy.types.YAPIONObject;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
@Getter @Getter

View File

@ -23,7 +23,7 @@ import de.steamwar.bausystem.features.simulator.data.SimulatorPhase;
import de.steamwar.bausystem.features.simulator.execute.SimulatorAction; import de.steamwar.bausystem.features.simulator.execute.SimulatorAction;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.FreezeMode; import de.steamwar.bausystem.region.flags.FreezeMode;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@ -65,7 +65,7 @@ public final class TNTPhase extends SimulatorPhase {
@Override @Override
public void accept(World world) { public void accept(World world) {
Location location = position.toLocation(world); Location location = position.toLocation(world);
if (Region.getRegion(location).get(Flag.FREEZE) == FreezeMode.ACTIVE) return; if (Region.getRegion(location).getFlags().get(Flag.FREEZE).isWithDefault(FreezeMode.ACTIVE)) return;
TNTPrimed tnt = world.spawn(location, TNTPrimed.class); TNTPrimed tnt = world.spawn(location, TNTPrimed.class);
if (!xJump) tnt.setVelocity(tnt.getVelocity().setX(0)); if (!xJump) tnt.setVelocity(tnt.getVelocity().setX(0));
if (!yJump) tnt.setVelocity(tnt.getVelocity().setY(0)); if (!yJump) tnt.setVelocity(tnt.getVelocity().setY(0));

View File

@ -31,6 +31,7 @@ import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion; import de.steamwar.linkage.MinVersion;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -46,7 +47,7 @@ public class SimulatorExecutor implements Listener {
private static Map<Long, Map<Integer, List<SimulatorAction>>> tickStartActions = new HashMap<>(); private static Map<Long, Map<Integer, List<SimulatorAction>>> tickStartActions = new HashMap<>();
private static Map<Long, List<SimulatorAction>> tickEndActions = new HashMap<>(); private static Map<Long, List<SimulatorAction>> tickEndActions = new HashMap<>();
public static boolean run(Simulator simulator, Runnable onEnd) { public static boolean run(Player player, Simulator simulator, Runnable onEnd) {
if (currentlyRunning.contains(simulator)) return false; if (currentlyRunning.contains(simulator)) return false;
currentlyRunning.add(simulator); currentlyRunning.add(simulator);
@ -83,10 +84,15 @@ public class SimulatorExecutor implements Listener {
}); });
} }
if (onEnd != null) {
onEnd.run(); onEnd.run();
} }
}
}); });
if (player != null && simulator.isAutoTestblock()) {
player.performCommand("tb");
}
if (simulator.isAutoTrace() && onEnd == null) { if (simulator.isAutoTrace() && onEnd == null) {
simulator.getGroups() simulator.getGroups()
.stream() .stream()

View File

@ -45,7 +45,7 @@ public class StabDirection extends StabStep {
@Override @Override
protected void start() { protected void start() {
try (EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new BukkitWorld(Bukkit.getWorlds().get(0)), -1)) { try (EditSession e = WorldEdit.getInstance().getEditSessionFactory().getEditSession(new BukkitWorld(Bukkit.getWorlds().get(0)), -1)) {
e.setBlocks((com.sk89q.worldedit.regions.Region) new CuboidRegion(data.region.getMinPointTestblockExtension().toBlockVector3(), data.region.getMaxPointTestblockExtension().toBlockVector3()), Objects.requireNonNull(BlockTypes.AIR).getDefaultState().toBaseBlock()); e.setBlocks((com.sk89q.worldedit.regions.Region) new CuboidRegion(data.region.getTestblockArea().getMinPoint(true).toBlockVector3(), data.region.getTestblockArea().getMaxPoint(true).toBlockVector3()), Objects.requireNonNull(BlockTypes.AIR).getDefaultState().toBaseBlock());
} }
Trace trace = TraceRecorder.instance.startRecording(data.region); Trace trace = TraceRecorder.instance.startRecording(data.region);

View File

@ -19,12 +19,8 @@
package de.steamwar.bausystem.features.simulator.execute; package de.steamwar.bausystem.features.simulator.execute;
import de.steamwar.bausystem.features.tracer.Trace;
import de.steamwar.bausystem.features.tracer.TraceRecorder; import de.steamwar.bausystem.features.tracer.TraceRecorder;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar; import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar;
@ -38,9 +34,11 @@ public class StabFinalizer extends StabStep {
protected void start() { protected void start() {
try { try {
PasteBuilder.ClipboardProvider clipboardProvider = new PasteBuilder.ClipboardProviderImpl(data.clipboard); PasteBuilder.ClipboardProvider clipboardProvider = new PasteBuilder.ClipboardProviderImpl(data.clipboard);
PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider) PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider);
.color(data.region.getPlain(Flag.COLOR, ColorMode.class).getColor()); if (data.region.getFlags().has(Flag.COLOR).isReadable()) {
data.region.reset(pasteBuilder, RegionType.TESTBLOCK, RegionExtensionType.EXTENSION); pasteBuilder.color(data.region.getFlags().get(Flag.COLOR).getWithDefault());
}
data.region.getTestblockArea().reset(pasteBuilder, true);
} catch (SecurityException e) { } catch (SecurityException e) {
stop(); stop();
throw e; throw e;

View File

@ -22,9 +22,6 @@ package de.steamwar.bausystem.features.simulator.execute;
import de.steamwar.bausystem.features.simulator.data.tnt.TNTPhase; import de.steamwar.bausystem.features.simulator.data.tnt.TNTPhase;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.flags.Flag; import de.steamwar.bausystem.region.flags.Flag;
import de.steamwar.bausystem.region.flags.flagvalues.ColorMode;
import de.steamwar.bausystem.region.utils.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.PasteBuilder; import de.steamwar.bausystem.utils.PasteBuilder;
import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar; import de.steamwar.bausystem.utils.bossbar.BauSystemBossbar;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -56,7 +53,8 @@ public class StabGenerator extends StabStep implements Listener {
public void onEntityExplode(EntityExplodeEvent event) { public void onEntityExplode(EntityExplodeEvent event) {
if (Region.getRegion(event.getEntity().getLocation()) == data.region) { if (Region.getRegion(event.getEntity().getLocation()) == data.region) {
event.blockList().forEach(block -> { event.blockList().forEach(block -> {
if (!data.region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) return; if (!data.region.getTestblockArea().inRegion(block.getLocation(), true))
return;
int component = data.direction.component.apply(block.getLocation().toVector()); int component = data.direction.component.apply(block.getLocation().toVector());
destroyedBlocksPerSlice.computeIfAbsent(component, __ -> new HashSet<>()) destroyedBlocksPerSlice.computeIfAbsent(component, __ -> new HashSet<>())
.add(block.getLocation()); .add(block.getLocation());
@ -72,9 +70,11 @@ public class StabGenerator extends StabStep implements Listener {
protected void start() { protected void start() {
try { try {
PasteBuilder.ClipboardProvider clipboardProvider = new PasteBuilder.ClipboardProviderImpl(data.clipboard); PasteBuilder.ClipboardProvider clipboardProvider = new PasteBuilder.ClipboardProviderImpl(data.clipboard);
PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider) PasteBuilder pasteBuilder = new PasteBuilder(clipboardProvider);
.color(data.region.getPlain(Flag.COLOR, ColorMode.class).getColor()); if (data.region.getFlags().has(Flag.COLOR).isReadable()) {
data.region.reset(pasteBuilder, RegionType.TESTBLOCK, RegionExtensionType.EXTENSION); pasteBuilder.color(data.region.getFlags().get(Flag.COLOR).getWithDefault());
}
data.region.getTestblockArea().reset(pasteBuilder, true);
} catch (SecurityException e) { } catch (SecurityException e) {
stop(); stop();
throw e; throw e;

View File

@ -72,7 +72,7 @@ public class StabSetup extends StabStep {
if (TraceRecorder.instance.isAutoTraceEnabledInRegion(data.region)) { if (TraceRecorder.instance.isAutoTraceEnabledInRegion(data.region)) {
TraceRecorder.instance.removeAutoTraceRegion(data.region); TraceRecorder.instance.removeAutoTraceRegion(data.region);
} }
data.clipboard = FlatteningWrapper.impl.copy(data.region.getMinPointTestblockExtension(), data.region.getMaxPointTestblockExtension(), data.region.getTestBlockPoint()); data.clipboard = FlatteningWrapper.impl.copy(data.region.getTestblockArea().getMinPoint(true), data.region.getTestblockArea().getMaxPoint(true), data.region.getTestblockArea().getCopyPoint());
new StabDirection(data); new StabDirection(data);
} }

View File

@ -58,7 +58,7 @@ public abstract class StabStep {
protected abstract void start(); protected abstract void start();
protected final void runSimulator(Runnable onFinish) { protected final void runSimulator(Runnable onFinish) {
SimulatorExecutor.run(data.simulator, () -> { SimulatorExecutor.run(null, data.simulator, () -> {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> { Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
if (this instanceof Listener) { if (this instanceof Listener) {
HandlerList.unregisterAll((Listener) this); HandlerList.unregisterAll((Listener) this);

View File

@ -25,6 +25,7 @@ import de.steamwar.bausystem.features.simulator.data.SimulatorElement;
import de.steamwar.bausystem.features.simulator.data.SimulatorGroup; import de.steamwar.bausystem.features.simulator.data.SimulatorGroup;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorPageGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorPageGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -70,12 +71,12 @@ public class SimulatorGroupGui extends SimulatorPageGui<SimulatorElement<?>> {
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> { inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> {
simulatorGroup.getElements().clear(); simulatorGroup.getElements().clear();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.DELETE));
inventory.setItem(4, simulatorGroup.toItem(player, clickType -> { inventory.setItem(4, simulatorGroup.toItem(player, clickType -> {
if (simulatorGroup.getMaterial() == null) return; if (simulatorGroup.getMaterial() == null) return;
@ -85,7 +86,7 @@ public class SimulatorGroupGui extends SimulatorPageGui<SimulatorElement<?>> {
inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> { inventory.setItem(48, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
new SimulatorGroupSettingsGui(player, simulator, simulatorGroup, this).open(); new SimulatorGroupSettingsGui(player, simulator, simulatorGroup, this).open();
})); }).setCustomModelData(CMDs.Simulator.SETTINGS));
boolean disabled = simulatorGroup.getMaterial() == null ? simulatorGroup.getElements().stream().allMatch(SimulatorElement::isDisabled) : simulatorGroup.isDisabled(); boolean disabled = simulatorGroup.getMaterial() == null ? simulatorGroup.getElements().stream().allMatch(SimulatorElement::isDisabled) : simulatorGroup.isDisabled();
inventory.setItem(50, new SWItem(disabled ? Material.ENDER_PEARL : Material.ENDER_EYE, simulatorGroup.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { inventory.setItem(50, new SWItem(disabled ? Material.ENDER_PEARL : Material.ENDER_EYE, simulatorGroup.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> {
if (simulatorGroup.getMaterial() == null) { if (simulatorGroup.getMaterial() == null) {
@ -96,7 +97,7 @@ public class SimulatorGroupGui extends SimulatorPageGui<SimulatorElement<?>> {
simulatorGroup.setDisabled(!disabled); simulatorGroup.setDisabled(!disabled);
} }
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
} }
@Override @Override

View File

@ -25,10 +25,10 @@ import de.steamwar.bausystem.features.simulator.data.SimulatorGroup;
import de.steamwar.bausystem.features.simulator.data.tnt.TNTElement; import de.steamwar.bausystem.features.simulator.data.tnt.TNTElement;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.util.Arrays; import java.util.Arrays;
@ -58,7 +58,7 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
inventory.setItem(4, simulatorGroup.toItem(player, clickType -> { inventory.setItem(4, simulatorGroup.toItem(player, clickType -> {
@ -69,10 +69,10 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = simulatorGroup.getBaseTick(); int baseTicks = simulatorGroup.getBaseTick();
inventory.setItem(9, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); simulatorGroup.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> { SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> {
new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> {
if (integer < 0) return false; if (integer < 0) return false;
@ -83,14 +83,14 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
simulatorGroup.changeBaseTicks(-baseTicks); simulatorGroup.changeBaseTicks(-baseTicks);
} else { } else {
simulatorGroup.changeBaseTicks(clickType.isShiftClick() ? -5 : -1); simulatorGroup.changeBaseTicks(clickType.isShiftClick() ? -5 : -1);
} }
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
boolean allTNT = simulatorGroup.getElements().stream().allMatch(TNTElement.class::isInstance); boolean allTNT = simulatorGroup.getElements().stream().allMatch(TNTElement.class::isInstance);
@ -163,10 +163,10 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
} }
//Pos X //Pos X
inventory.setItem(15, SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0, 0); simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(24, new SWItem(Material.PAPER, "§eX", clickType -> { inventory.setItem(24, new SWItem(Material.PAPER, "§eX", clickType -> {
new SimulatorAnvilGui<>(player, "Relative X", "", Double::parseDouble, number -> { new SimulatorAnvilGui<>(player, "Relative X", "", Double::parseDouble, number -> {
if(!allTNT){ if(!allTNT){
@ -177,16 +177,16 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).setItem(Material.PAPER).open(); }, this).setItem(Material.PAPER).open();
})); }));
inventory.setItem(33, SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> {
simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0, 0); simulatorGroup.move(clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0); simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(25, new SWItem(Material.PAPER, "§eY", clickType -> { inventory.setItem(25, new SWItem(Material.PAPER, "§eY", clickType -> {
new SimulatorAnvilGui<>(player, "Relative Y", "", Double::parseDouble, number -> { new SimulatorAnvilGui<>(player, "Relative Y", "", Double::parseDouble, number -> {
if(!allTNT){ if(!allTNT){
@ -197,16 +197,16 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).setItem(Material.PAPER).open(); }, this).setItem(Material.PAPER).open();
})); }));
inventory.setItem(34, SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> {
simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0); simulatorGroup.move(0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList(allTNT ? "§7Shift§8: §e+0.0625" : "§7Shift§8: §e+5"), false, clickType -> {
simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1); simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? 0.0625 : 5) : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(26, new SWItem(Material.PAPER, "§eZ", clickType -> { inventory.setItem(26, new SWItem(Material.PAPER, "§eZ", clickType -> {
new SimulatorAnvilGui<>(player, "Relative Z", "", Double::parseDouble, number -> { new SimulatorAnvilGui<>(player, "Relative Z", "", Double::parseDouble, number -> {
if(!allTNT){ if(!allTNT){
@ -217,9 +217,9 @@ public class SimulatorGroupSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).setItem(Material.PAPER).open(); }, this).setItem(Material.PAPER).open();
})); }));
inventory.setItem(35, SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList(allTNT ? "§7Shift§8: §e-0.0625" : "§7Shift§8: §e-5"), false, clickType -> {
simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1); simulatorGroup.move(0, 0, clickType.isShiftClick() ? (allTNT ? -0.0625 : -5) : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
} }
} }

View File

@ -24,6 +24,7 @@ import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.bausystem.features.simulator.data.SimulatorElement; import de.steamwar.bausystem.features.simulator.data.SimulatorElement;
import de.steamwar.bausystem.features.simulator.data.SimulatorGroup; import de.steamwar.bausystem.features.simulator.data.SimulatorGroup;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorPageGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorPageGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -50,7 +51,7 @@ public class SimulatorGui extends SimulatorPageGui<SimulatorGroup> {
})); }));
inventory.setItem(49, new SWItem(Material.REPEATER, "§eSettings", clickType -> { inventory.setItem(49, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
new SimulatorSettingsGui(player, simulator, this).open(); new SimulatorSettingsGui(player, simulator, this).open();
})); }).setCustomModelData(CMDs.Simulator.SETTINGS));
} }
@Override @Override

View File

@ -23,6 +23,7 @@ import de.steamwar.bausystem.features.simulator.SimulatorWatcher;
import de.steamwar.bausystem.features.simulator.data.Simulator; import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorPageGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorPageGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -75,7 +76,7 @@ public class SimulatorMaterialGui extends SimulatorPageGui<Material> {
})); }));
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
} }
@Override @Override

View File

@ -26,6 +26,7 @@ import de.steamwar.bausystem.features.simulator.data.observer.ObserverElement;
import de.steamwar.bausystem.features.simulator.data.observer.ObserverPhase; import de.steamwar.bausystem.features.simulator.data.observer.ObserverPhase;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorScrollGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorScrollGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -82,12 +83,12 @@ public class SimulatorObserverGui extends SimulatorScrollGui<ObserverPhase> {
new SimulatorGroupGui(player, simulator, newParent, simulatorGui).open(); new SimulatorGroupGui(player, simulator, newParent, simulatorGui).open();
} }
} }
})); }).setCustomModelData(CMDs.BACK));
inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> { inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> {
observer.getPhases().clear(); observer.getPhases().clear();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.DELETE));
// Material Chooser // Material Chooser
inventory.setItem(4, observer.toItem(player, clickType -> { inventory.setItem(4, observer.toItem(player, clickType -> {
@ -97,18 +98,18 @@ public class SimulatorObserverGui extends SimulatorScrollGui<ObserverPhase> {
// Settings // Settings
inventory.setItem(47, new SWItem(Material.REPEATER, "§eSettings", clickType -> { inventory.setItem(47, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
new SimulatorObserverSettingsGui(player, simulator, observer, this).open(); new SimulatorObserverSettingsGui(player, simulator, observer, this).open();
})); }).setCustomModelData(CMDs.Simulator.SETTINGS));
// Enable/Disable // Enable/Disable
inventory.setItem(48, new SWItem(observer.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, observer.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { inventory.setItem(48, new SWItem(observer.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, observer.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> {
observer.setDisabled(!observer.isDisabled()); observer.setDisabled(!observer.isDisabled());
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
// Group chooser // Group chooser
inventory.setItem(51, new SWItem(Material.LEAD, "§eJoin Group", clickType -> { inventory.setItem(51, new SWItem(Material.LEAD, "§eJoin Group", clickType -> {
new SimulatorGroupChooserGui(player, simulator, observer, observer.getGroup(simulator), this).open(); new SimulatorGroupChooserGui(player, simulator, observer, observer.getGroup(simulator), this).open();
})); }).setCustomModelData(CMDs.Simulator.JOIN_GROUP));
} }
@Override @Override
@ -151,15 +152,15 @@ public class SimulatorObserverGui extends SimulatorScrollGui<ObserverPhase> {
new SWItem(SWItem.getDye(getter.get() < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(SWItem.getDye(getter.get() < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
observer, observer,
new SWItem(SWItem.getDye(getter.get() > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> { new SWItem(SWItem.getDye(getter.get() > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> {
setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
new SWItem(Material.ANVIL, "§eEdit Activation", clickType -> { new SWItem(Material.ANVIL, "§eEdit Activation", clickType -> {
new SimulatorObserverPhaseSettingsGui(player, simulator, this.observer, observerPhase, this).open(); new SimulatorObserverPhaseSettingsGui(player, simulator, this.observer, observerPhase, this).open();
}), }).setCustomModelData(CMDs.Simulator.EDIT_ACTIVATION),
}; };
} }
@ -168,12 +169,12 @@ public class SimulatorObserverGui extends SimulatorScrollGui<ObserverPhase> {
return new SWItem[]{ return new SWItem[]{
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
addNewPhase(clickType.isShiftClick()); addNewPhase(clickType.isShiftClick());
}), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
new SWItem(Material.QUARTZ, "§eObserver§8:§a New Phase", clickType -> { new SWItem(Material.QUARTZ, "§eObserver§8:§a New Phase", clickType -> {
addNewPhase(false); addNewPhase(false);
}), }).setCustomModelData(CMDs.Simulator.NEW_PHASE),
new SWItem(SWItem.getDye(8), "§7", clickType -> { new SWItem(SWItem.getDye(8), "§7", clickType -> {
}), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
}; };
} }

View File

@ -27,6 +27,7 @@ import de.steamwar.bausystem.features.simulator.data.observer.ObserverPhase;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.BlockFace; import org.bukkit.block.BlockFace;
@ -62,7 +63,7 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
inventory.setItem(4, observerElement.toItem(player, clickType -> { inventory.setItem(4, observerElement.toItem(player, clickType -> {
@ -74,7 +75,7 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
observerElement.getPhases().remove(observer); observerElement.getPhases().remove(observer);
back.open(); back.open();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.DELETE));
int index = observerElement.getPhases().indexOf(observer); int index = observerElement.getPhases().indexOf(observer);
int min; int min;
@ -95,10 +96,10 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
//Tick Offset //Tick Offset
int offset = observer.getTickOffset(); int offset = observer.getTickOffset();
inventory.setItem(10, SWItem.getDye(offset < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(10, new SWItem(SWItem.getDye(offset < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
observer.setTickOffset(Math.min(max, offset + (clickType.isShiftClick() ? 5 : 1))); observer.setTickOffset(Math.min(max, offset + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem offsetItem = new SWItem(Material.REPEATER, "§eStart at§8:§7 " + offset, clickType -> { SWItem offsetItem = new SWItem(Material.REPEATER, "§eStart at§8:§7 " + offset, clickType -> {
new SimulatorAnvilGui<>(player, "Start at", offset + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Start at", offset + "", Integer::parseInt, integer -> {
@ -111,17 +112,17 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64))); offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64)));
inventory.setItem(19, offsetItem); inventory.setItem(19, offsetItem);
inventory.setItem(28, SWItem.getDye(offset > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(28, new SWItem(SWItem.getDye(offset > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
observer.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1))); observer.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Order //Order
int order = observer.getOrder(); int order = observer.getOrder();
inventory.setItem(13, SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(13, new SWItem(SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
observer.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1))); observer.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
Material negativeNumbers = Material.getMaterial(Core.getVersion() >= 19 ? "RECOVERY_COMPASS" : "FIREWORK_STAR"); Material negativeNumbers = Material.getMaterial(Core.getVersion() >= 19 ? "RECOVERY_COMPASS" : "FIREWORK_STAR");
SWItem orderItem = new SWItem(order >= 0 ? Material.COMPASS : negativeNumbers, "§eActivation Order§8:§7 " + order, clickType -> { SWItem orderItem = new SWItem(order >= 0 ? Material.COMPASS : negativeNumbers, "§eActivation Order§8:§7 " + order, clickType -> {
@ -136,10 +137,10 @@ public class SimulatorObserverPhaseSettingsGui extends SimulatorBaseGui {
orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30))); orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30)));
inventory.setItem(22, orderItem); inventory.setItem(22, orderItem);
inventory.setItem(31, SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(31, new SWItem(SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
observer.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1))); observer.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
// Update orientation // Update orientation
inventory.setItem(25, new SWItem(Material.SUNFLOWER, "§7", clickType -> { inventory.setItem(25, new SWItem(Material.SUNFLOWER, "§7", clickType -> {

View File

@ -24,6 +24,7 @@ import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.bausystem.features.simulator.data.observer.ObserverElement; import de.steamwar.bausystem.features.simulator.data.observer.ObserverElement;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -56,7 +57,7 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
inventory.setItem(4, observer.toItem(player, clickType -> { inventory.setItem(4, observer.toItem(player, clickType -> {
@ -65,10 +66,10 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = observer.getBaseTick(); int baseTicks = observer.getBaseTick();
inventory.setItem(9, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
observer.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); observer.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> { SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> {
new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> {
if (integer < 0) return false; if (integer < 0) return false;
@ -79,20 +80,20 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
observer.changeBaseTicks(-baseTicks); observer.changeBaseTicks(-baseTicks);
} else { } else {
observer.changeBaseTicks(clickType.isShiftClick() ? -5 : -1); observer.changeBaseTicks(clickType.isShiftClick() ? -5 : -1);
} }
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos X //Pos X
inventory.setItem(15, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
observer.move(clickType.isShiftClick() ? 5 : 1, 0, 0); observer.move(clickType.isShiftClick() ? 5 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(24, new SWItem(Material.PAPER, "§eX§8:§7 " + observer.getPosition().getBlockX(), clickType -> { inventory.setItem(24, new SWItem(Material.PAPER, "§eX§8:§7 " + observer.getPosition().getBlockX(), clickType -> {
new SimulatorAnvilGui<>(player, "X", observer.getPosition().getBlockX() + "", Integer::parseInt, i -> { new SimulatorAnvilGui<>(player, "X", observer.getPosition().getBlockX() + "", Integer::parseInt, i -> {
observer.getPosition().setX(i); observer.getPosition().setX(i);
@ -100,16 +101,16 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(33, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
observer.move(clickType.isShiftClick() ? -5 : -1, 0, 0); observer.move(clickType.isShiftClick() ? -5 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
observer.move(0, clickType.isShiftClick() ? 5 : 1, 0); observer.move(0, clickType.isShiftClick() ? 5 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
inventory.setItem(25, new SWItem(Material.PAPER, "§eY§8:§7 " + observer.getPosition().getBlockY(), clickType -> { inventory.setItem(25, new SWItem(Material.PAPER, "§eY§8:§7 " + observer.getPosition().getBlockY(), clickType -> {
new SimulatorAnvilGui<>(player, "Y", observer.getPosition().getBlockY() + "", Integer::parseInt, i -> { new SimulatorAnvilGui<>(player, "Y", observer.getPosition().getBlockY() + "", Integer::parseInt, i -> {
observer.getPosition().setY(i); observer.getPosition().setY(i);
@ -117,16 +118,16 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(34, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
observer.move(0, clickType.isShiftClick() ? -5 : -1, 0); observer.move(0, clickType.isShiftClick() ? -5 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
observer.move(0, 0, clickType.isShiftClick() ? 5 : 1); observer.move(0, 0, clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
inventory.setItem(26, new SWItem(Material.PAPER, "§eZ§8:§7 " + observer.getPosition().getBlockZ(), clickType -> { inventory.setItem(26, new SWItem(Material.PAPER, "§eZ§8:§7 " + observer.getPosition().getBlockZ(), clickType -> {
new SimulatorAnvilGui<>(player, "Z", observer.getPosition().getBlockZ() + "", Integer::parseInt, i -> { new SimulatorAnvilGui<>(player, "Z", observer.getPosition().getBlockZ() + "", Integer::parseInt, i -> {
observer.getPosition().setZ(i); observer.getPosition().setZ(i);
@ -134,9 +135,9 @@ public class SimulatorObserverSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(35, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
observer.move(0, 0, clickType.isShiftClick() ? -5 : -1); observer.move(0, 0, clickType.isShiftClick() ? -5 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
} }
} }

View File

@ -26,6 +26,7 @@ import de.steamwar.bausystem.features.simulator.data.redstone.RedstoneElement;
import de.steamwar.bausystem.features.simulator.data.redstone.RedstonePhase; import de.steamwar.bausystem.features.simulator.data.redstone.RedstonePhase;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorScrollGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorScrollGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.bukkit.Material; import org.bukkit.Material;
@ -88,12 +89,12 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui<SimulatorRedstoneGu
new SimulatorGroupGui(player, simulator, newParent, simulatorGui).open(); new SimulatorGroupGui(player, simulator, newParent, simulatorGui).open();
} }
} }
})); }).setCustomModelData(CMDs.BACK));
inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> { inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> {
redstone.getPhases().clear(); redstone.getPhases().clear();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.DELETE));
// Material Chooser // Material Chooser
inventory.setItem(4, redstone.toItem(player, clickType -> { inventory.setItem(4, redstone.toItem(player, clickType -> {
@ -103,18 +104,18 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui<SimulatorRedstoneGu
// Settings // Settings
inventory.setItem(47, new SWItem(Material.REPEATER, "§eSettings", clickType -> { inventory.setItem(47, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
new SimulatorRedstoneSettingsGui(player, simulator, redstone, this).open(); new SimulatorRedstoneSettingsGui(player, simulator, redstone, this).open();
})); }).setCustomModelData(CMDs.Simulator.SETTINGS));
// Enable/Disable // Enable/Disable
inventory.setItem(48, new SWItem(redstone.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, redstone.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { inventory.setItem(48, new SWItem(redstone.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, redstone.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> {
redstone.setDisabled(!redstone.isDisabled()); redstone.setDisabled(!redstone.isDisabled());
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
// Group chooser // Group chooser
inventory.setItem(51, new SWItem(Material.LEAD, "§eJoin Group", clickType -> { inventory.setItem(51, new SWItem(Material.LEAD, "§eJoin Group", clickType -> {
new SimulatorGroupChooserGui(player, simulator, redstone, redstone.getGroup(simulator), this).open(); new SimulatorGroupChooserGui(player, simulator, redstone, redstone.getGroup(simulator), this).open();
})); }).setCustomModelData(CMDs.Simulator.JOIN_GROUP));
} }
@Override @Override
@ -166,15 +167,15 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui<SimulatorRedstoneGu
new SWItem(SWItem.getDye(getter.get() < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(SWItem.getDye(getter.get() < max ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.min(max, getter.get() + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
redstone, redstone,
new SWItem(SWItem.getDye(getter.get() > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> { new SWItem(SWItem.getDye(getter.get() > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> {
setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1))); setter.accept(Math.max(min, getter.get() - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
new SWItem(Material.ANVIL, "§eEdit Activation", clickType -> { new SWItem(Material.ANVIL, "§eEdit Activation", clickType -> {
new SimulatorRedstonePhaseSettingsGui(player, simulator, this.redstone, redstoneSubPhase.phase, this).open(); new SimulatorRedstonePhaseSettingsGui(player, simulator, this.redstone, redstoneSubPhase.phase, this).open();
}), }).setCustomModelData(CMDs.Simulator.EDIT_ACTIVATION),
}; };
} }
@ -183,12 +184,12 @@ public class SimulatorRedstoneGui extends SimulatorScrollGui<SimulatorRedstoneGu
return new SWItem[]{ return new SWItem[]{
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
addNewPhase(clickType.isShiftClick()); addNewPhase(clickType.isShiftClick());
}), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
new SWItem(Material.REDSTONE, "§eRedstone§8:§a New Phase", clickType -> { new SWItem(Material.REDSTONE, "§eRedstone§8:§a New Phase", clickType -> {
addNewPhase(false); addNewPhase(false);
}), }).setCustomModelData(CMDs.Simulator.NEW_PHASE),
new SWItem(SWItem.getDye(8), "§7", clickType -> { new SWItem(SWItem.getDye(8), "§7", clickType -> {
}), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
}; };
} }

View File

@ -27,6 +27,7 @@ import de.steamwar.bausystem.features.simulator.data.redstone.RedstonePhase;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -60,7 +61,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
inventory.setItem(4, redstoneElement.toItem(player, clickType -> { inventory.setItem(4, redstoneElement.toItem(player, clickType -> {
@ -72,7 +73,7 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
redstoneElement.getPhases().remove(redstone); redstoneElement.getPhases().remove(redstone);
back.open(); back.open();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.DELETE));
int index = redstoneElement.getPhases().indexOf(redstone); int index = redstoneElement.getPhases().indexOf(redstone);
int min; int min;
@ -96,10 +97,10 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
//Tick Offset //Tick Offset
int offset = redstone.getTickOffset(); int offset = redstone.getTickOffset();
inventory.setItem(10, SWItem.getDye(offset < maxOffset ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(10, new SWItem(SWItem.getDye(offset < maxOffset ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
redstone.setTickOffset(Math.min(maxOffset, offset + (clickType.isShiftClick() ? 5 : 1))); redstone.setTickOffset(Math.min(maxOffset, offset + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem offsetItem = new SWItem(Material.REPEATER, "§eStart at§8:§7 " + offset, clickType -> { SWItem offsetItem = new SWItem(Material.REPEATER, "§eStart at§8:§7 " + offset, clickType -> {
new SimulatorAnvilGui<>(player, "Start at", offset + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Start at", offset + "", Integer::parseInt, integer -> {
@ -112,17 +113,17 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64))); offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64)));
inventory.setItem(19, offsetItem); inventory.setItem(19, offsetItem);
inventory.setItem(28, SWItem.getDye(offset > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(28, new SWItem(SWItem.getDye(offset > min ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
redstone.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1))); redstone.setTickOffset(Math.max(min, offset - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Lifetime //Lifetime
int lifetime = redstone.getLifetime(); int lifetime = redstone.getLifetime();
inventory.setItem(11, SWItem.getDye(lifetime < maxLifetime ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(11, new SWItem(SWItem.getDye(lifetime < maxLifetime ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
redstone.setLifetime(Math.min(maxLifetime, lifetime + (clickType.isShiftClick() ? 5 : 1))); redstone.setLifetime(Math.min(maxLifetime, lifetime + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem lifetimeItem = new SWItem(Material.CLOCK, "§eActivation Time§8:§7 " + lifetime, clickType -> { SWItem lifetimeItem = new SWItem(Material.CLOCK, "§eActivation Time§8:§7 " + lifetime, clickType -> {
new SimulatorAnvilGui<>(player, "Activation Time", lifetime + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Activation Time", lifetime + "", Integer::parseInt, integer -> {
@ -135,17 +136,17 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64))); lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64)));
inventory.setItem(20, lifetimeItem); inventory.setItem(20, lifetimeItem);
inventory.setItem(29, SWItem.getDye(lifetime > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(29, new SWItem(SWItem.getDye(lifetime > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
redstone.setLifetime(Math.max(0, lifetime - (clickType.isShiftClick() ? 5 : 1))); redstone.setLifetime(Math.max(0, lifetime - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Order //Order
int order = redstone.getOrder(); int order = redstone.getOrder();
inventory.setItem(13, SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(13, new SWItem(SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
redstone.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1))); redstone.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
Material negativeNumbers = Material.getMaterial(Core.getVersion() >= 19 ? "RECOVERY_COMPASS" : "FIREWORK_STAR"); Material negativeNumbers = Material.getMaterial(Core.getVersion() >= 19 ? "RECOVERY_COMPASS" : "FIREWORK_STAR");
SWItem orderItem = new SWItem(order >= 0 ? Material.COMPASS : negativeNumbers, "§eActivation Order§8:§7 " + order, clickType -> { SWItem orderItem = new SWItem(order >= 0 ? Material.COMPASS : negativeNumbers, "§eActivation Order§8:§7 " + order, clickType -> {
@ -160,9 +161,9 @@ public class SimulatorRedstonePhaseSettingsGui extends SimulatorBaseGui {
orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30))); orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30)));
inventory.setItem(22, orderItem); inventory.setItem(22, orderItem);
inventory.setItem(31, SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(31, new SWItem(SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
redstone.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1))); redstone.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
} }
} }

View File

@ -24,6 +24,7 @@ import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.bausystem.features.simulator.data.redstone.RedstoneElement; import de.steamwar.bausystem.features.simulator.data.redstone.RedstoneElement;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -55,7 +56,7 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
inventory.setItem(4, redstone.toItem(player, clickType -> { inventory.setItem(4, redstone.toItem(player, clickType -> {
@ -64,10 +65,10 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = redstone.getBaseTick(); int baseTicks = redstone.getBaseTick();
inventory.setItem(9, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
redstone.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); redstone.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> { SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> {
new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> {
if (integer < 0) return false; if (integer < 0) return false;
@ -78,20 +79,20 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
redstone.changeBaseTicks(-baseTicks); redstone.changeBaseTicks(-baseTicks);
} else { } else {
redstone.changeBaseTicks(clickType.isShiftClick() ? -5 : -1); redstone.changeBaseTicks(clickType.isShiftClick() ? -5 : -1);
} }
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos X //Pos X
inventory.setItem(15, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
redstone.move(clickType.isShiftClick() ? 5 : 1, 0, 0); redstone.move(clickType.isShiftClick() ? 5 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(24, new SWItem(Material.PAPER, "§eX§8:§7 " + redstone.getPosition().getBlockX(), clickType -> { inventory.setItem(24, new SWItem(Material.PAPER, "§eX§8:§7 " + redstone.getPosition().getBlockX(), clickType -> {
new SimulatorAnvilGui<>(player, "X", redstone.getPosition().getBlockX() + "", Integer::parseInt, i -> { new SimulatorAnvilGui<>(player, "X", redstone.getPosition().getBlockX() + "", Integer::parseInt, i -> {
redstone.getPosition().setX(i); redstone.getPosition().setX(i);
@ -99,16 +100,16 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(33, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
redstone.move(clickType.isShiftClick() ? -5 : -1, 0, 0); redstone.move(clickType.isShiftClick() ? -5 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
redstone.move(0, clickType.isShiftClick() ? 5 : 1, 0); redstone.move(0, clickType.isShiftClick() ? 5 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(25, new SWItem(Material.PAPER, "§eY§8:§7 " + redstone.getPosition().getBlockY(), clickType -> { inventory.setItem(25, new SWItem(Material.PAPER, "§eY§8:§7 " + redstone.getPosition().getBlockY(), clickType -> {
new SimulatorAnvilGui<>(player, "Y", redstone.getPosition().getBlockY() + "", Integer::parseInt, i -> { new SimulatorAnvilGui<>(player, "Y", redstone.getPosition().getBlockY() + "", Integer::parseInt, i -> {
redstone.getPosition().setY(i); redstone.getPosition().setY(i);
@ -116,16 +117,16 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(34, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
redstone.move(0, clickType.isShiftClick() ? -5 : -1, 0); redstone.move(0, clickType.isShiftClick() ? -5 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
redstone.move(0, 0, clickType.isShiftClick() ? 5 : 1); redstone.move(0, 0, clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(26, new SWItem(Material.PAPER, "§eZ§8:§7 " + redstone.getPosition().getBlockZ(), clickType -> { inventory.setItem(26, new SWItem(Material.PAPER, "§eZ§8:§7 " + redstone.getPosition().getBlockZ(), clickType -> {
new SimulatorAnvilGui<>(player, "Z", redstone.getPosition().getBlockZ() + "", Integer::parseInt, i -> { new SimulatorAnvilGui<>(player, "Z", redstone.getPosition().getBlockZ() + "", Integer::parseInt, i -> {
redstone.getPosition().setZ(i); redstone.getPosition().setZ(i);
@ -133,9 +134,9 @@ public class SimulatorRedstoneSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(35, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
redstone.move(0, 0, clickType.isShiftClick() ? -5 : -1); redstone.move(0, 0, clickType.isShiftClick() ? -5 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
} }
} }

View File

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.simulator.gui;
import de.steamwar.bausystem.features.simulator.SimulatorWatcher; import de.steamwar.bausystem.features.simulator.SimulatorWatcher;
import de.steamwar.bausystem.features.simulator.data.Simulator; import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -47,7 +48,7 @@ public class SimulatorSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
inventory.setItem(4, simulator.toItem(player, clickType -> { inventory.setItem(4, simulator.toItem(player, clickType -> {
@ -55,45 +56,49 @@ public class SimulatorSettingsGui extends SimulatorBaseGui {
})); }));
//AutoTrace //AutoTrace
inventory.setItem(20, new SWItem(simulator.isAutoTrace() ? Material.CHAIN_COMMAND_BLOCK : Material.COMMAND_BLOCK, "§eAutoTrace§8: " + (simulator.isAutoTrace() ? "§aOn" : "§cOff"), clickType -> { inventory.setItem(19, new SWItem(simulator.isAutoTrace() ? Material.CHAIN_COMMAND_BLOCK : Material.COMMAND_BLOCK, "§eAutoTrace§8: " + (simulator.isAutoTrace() ? "§aOn" : "§cOff"), clickType -> {
simulator.setAutoTrace(!simulator.isAutoTrace()); simulator.setAutoTrace(!simulator.isAutoTrace());
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }));
inventory.setItem(20, new SWItem(simulator.isAutoTestblock() ? Material.END_STONE : Material.BARRIER, "§eTestblock§8: " + (simulator.isAutoTestblock() ? "§aOn" : "§cOff"), clickType -> {
simulator.setAutoTestblock(!simulator.isAutoTestblock());
SimulatorWatcher.update(simulator);
}));
//Pos X //Pos X
inventory.setItem(15, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulator.move(clickType.isShiftClick() ? 5 : 1, 0, 0); simulator.move(clickType.isShiftClick() ? 5 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(24, new SWItem(Material.PAPER, "§eX", clickType -> { inventory.setItem(24, new SWItem(Material.PAPER, "§eX", clickType -> {
})); }));
inventory.setItem(33, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
simulator.move(clickType.isShiftClick() ? -5 : -1, 0, 0); simulator.move(clickType.isShiftClick() ? -5 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Y //Pos Y
inventory.setItem(16, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulator.move(0, clickType.isShiftClick() ? 5 : 1, 0); simulator.move(0, clickType.isShiftClick() ? 5 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(25, new SWItem(Material.PAPER, "§eY", clickType -> { inventory.setItem(25, new SWItem(Material.PAPER, "§eY", clickType -> {
})); }));
inventory.setItem(34, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
simulator.move(0, clickType.isShiftClick() ? -5 : -1, 0); simulator.move(0, clickType.isShiftClick() ? -5 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Pos Z //Pos Z
inventory.setItem(17, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
simulator.move(0, 0, clickType.isShiftClick() ? 5 : 1); simulator.move(0, 0, clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(26, new SWItem(Material.PAPER, "§eZ", clickType -> { inventory.setItem(26, new SWItem(Material.PAPER, "§eZ", clickType -> {
})); }));
inventory.setItem(35, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
simulator.move(0, 0, clickType.isShiftClick() ? -5 : -1); simulator.move(0, 0, clickType.isShiftClick() ? -5 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
} }
} }

View File

@ -29,6 +29,8 @@ import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorScrollGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorScrollGui;
import de.steamwar.bausystem.region.Region; import de.steamwar.bausystem.region.Region;
import de.steamwar.core.Core;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -81,12 +83,12 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
new SimulatorGroupGui(player, simulator, newParent, simulatorGui).open(); new SimulatorGroupGui(player, simulator, newParent, simulatorGui).open();
} }
} }
})); }).setCustomModelData(CMDs.BACK));
inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> { inventory.setItem(8, new SWItem(Material.BARRIER, "§eDelete", clickType -> {
tnt.getPhases().clear(); tnt.getPhases().clear();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.DELETE));
// Material Chooser // Material Chooser
inventory.setItem(4, tnt.toItem(player, clickType -> { inventory.setItem(4, tnt.toItem(player, clickType -> {
@ -95,11 +97,12 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
inventory.setItem(47, new SWItem(Material.REPEATER, "§eSettings", clickType -> { inventory.setItem(47, new SWItem(Material.REPEATER, "§eSettings", clickType -> {
new SimulatorTNTSettingsGui(player, simulator, tnt, this).open(); new SimulatorTNTSettingsGui(player, simulator, tnt, this).open();
})); }).setCustomModelData(CMDs.Simulator.SETTINGS));
inventory.setItem(48, new SWItem(tnt.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, tnt.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> { inventory.setItem(48, new SWItem(tnt.isDisabled() ? Material.ENDER_PEARL : Material.ENDER_EYE, tnt.isDisabled() ? "§cDisabled" : "§aEnabled", clickType -> {
tnt.setDisabled(!tnt.isDisabled()); tnt.setDisabled(!tnt.isDisabled());
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.ENABLED_OR_DISABLED));
if (Core.getVersion() > 19) {
inventory.setItem(49, new SWItem(Material.CALIBRATED_SCULK_SENSOR, "§eCreate Stab", click -> { inventory.setItem(49, new SWItem(Material.CALIBRATED_SCULK_SENSOR, "§eCreate Stab", click -> {
new SimulatorAnvilGui<>(player, "Depth Limit", "", Integer::parseInt, depthLimit -> { new SimulatorAnvilGui<>(player, "Depth Limit", "", Integer::parseInt, depthLimit -> {
if (depthLimit <= 0) return false; if (depthLimit <= 0) return false;
@ -107,17 +110,18 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
return true; return true;
}, null).open(); }, null).open();
})); }).setCustomModelData(CMDs.Simulator.CREATE_STAB));
}
inventory.setItem(50, new SWItem(Material.CHEST, parent.getElements().size() == 1 ? "§eMake Group" : "§eAdd another TNT to Group", clickType -> { inventory.setItem(50, new SWItem(Material.CHEST, parent.getElements().size() == 1 ? "§eMake Group" : "§eAdd another TNT to Group", clickType -> {
TNTElement tntElement = new TNTElement(tnt.getPosition().clone()); TNTElement tntElement = new TNTElement(tnt.getPosition().clone());
tntElement.add(new TNTPhase()); tntElement.add(new TNTPhase());
parent.add(tntElement); parent.add(tntElement);
new SimulatorGroupGui(player, simulator, parent, new SimulatorGui(player, simulator)).open(); new SimulatorGroupGui(player, simulator, parent, new SimulatorGui(player, simulator)).open();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.MAKE_GROUP));
inventory.setItem(51, new SWItem(Material.LEAD, "§eJoin Group", clickType -> { inventory.setItem(51, new SWItem(Material.LEAD, "§eJoin Group", clickType -> {
new SimulatorGroupChooserGui(player, simulator, tnt, tnt.getGroup(simulator), this).open(); new SimulatorGroupChooserGui(player, simulator, tnt, tnt.getGroup(simulator), this).open();
})); }).setCustomModelData(CMDs.Simulator.JOIN_GROUP));
} }
@Override @Override
@ -136,15 +140,15 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
tntSetting.setCount(tntSetting.getCount() + (clickType.isShiftClick() ? 5 : 1)); tntSetting.setCount(tntSetting.getCount() + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
tnt, tnt,
new SWItem(SWItem.getDye(tntSetting.getCount() > 1 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> { new SWItem(SWItem.getDye(tntSetting.getCount() > 1 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8:§e -5"), false, clickType -> {
tntSetting.setCount(Math.max(1, tntSetting.getCount() - (clickType.isShiftClick() ? 5 : 1))); tntSetting.setCount(Math.max(1, tntSetting.getCount() - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
new SWItem(Material.ANVIL, "§eEdit Phase", clickType -> { new SWItem(Material.ANVIL, "§eEdit Phase", clickType -> {
new SimulatorTNTPhaseSettingsGui(player, simulator, this.tnt, tntSetting, this).open(); new SimulatorTNTPhaseSettingsGui(player, simulator, this.tnt, tntSetting, this).open();
}), }).setCustomModelData(CMDs.Simulator.EDIT_ACTIVATION),
}; };
} }
@ -153,12 +157,12 @@ public class SimulatorTNTGui extends SimulatorScrollGui<TNTPhase> {
return new SWItem[]{ return new SWItem[]{
new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> { new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8:§e +5"), false, clickType -> {
addNewPhase(clickType.isShiftClick()); addNewPhase(clickType.isShiftClick());
}), }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED),
new SWItem(Material.GUNPOWDER, "§eTNT§8:§a New Phase", clickType -> { new SWItem(Material.GUNPOWDER, "§eTNT§8:§a New Phase", clickType -> {
addNewPhase(false); addNewPhase(false);
}), }).setCustomModelData(CMDs.Simulator.NEW_PHASE),
new SWItem(SWItem.getDye(8), "§7", clickType -> { new SWItem(SWItem.getDye(8), "§7", clickType -> {
}), }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED),
}; };
} }

View File

@ -27,6 +27,7 @@ import de.steamwar.bausystem.features.simulator.data.tnt.TNTPhase;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -60,7 +61,7 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
inventory.setItem(4, tntElement.toItem(player, clickType -> { inventory.setItem(4, tntElement.toItem(player, clickType -> {
@ -72,14 +73,14 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
tntElement.getPhases().remove(tnt); tntElement.getPhases().remove(tnt);
back.open(); back.open();
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
})); }).setCustomModelData(CMDs.Simulator.DELETE));
//Count //Count
int count = tnt.getCount(); int count = tnt.getCount();
inventory.setItem(9, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
tnt.setCount(count + (clickType.isShiftClick() ? 5 : 1)); tnt.setCount(count + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem countItem = new SWItem(Material.TNT, "§eCount§8:§7 " + count, clickType -> { SWItem countItem = new SWItem(Material.TNT, "§eCount§8:§7 " + count, clickType -> {
new SimulatorAnvilGui<>(player, "Count", count + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Count", count + "", Integer::parseInt, integer -> {
@ -92,17 +93,17 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
countItem.getItemStack().setAmount(Math.max(1, Math.min(count, 64))); countItem.getItemStack().setAmount(Math.max(1, Math.min(count, 64)));
inventory.setItem(18, countItem); inventory.setItem(18, countItem);
inventory.setItem(27, SWItem.getDye(count > 1 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(SWItem.getDye(count > 1 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
tnt.setCount(Math.max(1, count - (clickType.isShiftClick() ? 5 : 1))); tnt.setCount(Math.max(1, count - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Tick Offset //Tick Offset
int offset = tnt.getTickOffset(); int offset = tnt.getTickOffset();
inventory.setItem(10, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(10, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
tnt.setTickOffset(offset + (clickType.isShiftClick() ? 5 : 1)); tnt.setTickOffset(offset + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem offsetItem = new SWItem(Material.REPEATER, "§eStart at§8:§7 " + offset, clickType -> { SWItem offsetItem = new SWItem(Material.REPEATER, "§eStart at§8:§7 " + offset, clickType -> {
new SimulatorAnvilGui<>(player, "Start at", offset + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Start at", offset + "", Integer::parseInt, integer -> {
@ -115,17 +116,17 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64))); offsetItem.getItemStack().setAmount(Math.max(1, Math.min(offset, 64)));
inventory.setItem(19, offsetItem); inventory.setItem(19, offsetItem);
inventory.setItem(28, SWItem.getDye(offset > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(28, new SWItem(SWItem.getDye(offset > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
tnt.setTickOffset(Math.max(0, offset - (clickType.isShiftClick() ? 5 : 1))); tnt.setTickOffset(Math.max(0, offset - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Lifetime //Lifetime
int lifetime = tnt.getLifetime(); int lifetime = tnt.getLifetime();
inventory.setItem(11, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(11, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
tnt.setLifetime(lifetime + (clickType.isShiftClick() ? 5 : 1)); tnt.setLifetime(lifetime + (clickType.isShiftClick() ? 5 : 1));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem lifetimeItem = new SWItem(Material.CLOCK, "§eLifetime§8:§7 " + lifetime, clickType -> { SWItem lifetimeItem = new SWItem(Material.CLOCK, "§eLifetime§8:§7 " + lifetime, clickType -> {
new SimulatorAnvilGui<>(player, "Lifetime", lifetime + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Lifetime", lifetime + "", Integer::parseInt, integer -> {
@ -138,17 +139,17 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64))); lifetimeItem.getItemStack().setAmount(Math.max(1, Math.min(lifetime, 64)));
inventory.setItem(20, lifetimeItem); inventory.setItem(20, lifetimeItem);
inventory.setItem(29, SWItem.getDye(lifetime > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(29, new SWItem(SWItem.getDye(lifetime > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
tnt.setLifetime(Math.max(1, lifetime - (clickType.isShiftClick() ? 5 : 1))); tnt.setLifetime(Math.max(1, lifetime - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Order //Order
int order = tnt.getOrder(); int order = tnt.getOrder();
inventory.setItem(13, SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(13, new SWItem(SWItem.getDye(order < SimulatorPhase.ORDER_LIMIT ? 10 : 8), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
tnt.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1))); tnt.setOrder(Math.min(SimulatorPhase.ORDER_LIMIT, order + (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
Material negativeNumbers = Material.getMaterial(Core.getVersion() >= 19 ? "RECOVERY_COMPASS" : "FIREWORK_STAR"); Material negativeNumbers = Material.getMaterial(Core.getVersion() >= 19 ? "RECOVERY_COMPASS" : "FIREWORK_STAR");
SWItem orderItem = new SWItem(order >= 0 ? Material.COMPASS : negativeNumbers, "§eCalculation Order§8:§7 " + order, clickType -> { SWItem orderItem = new SWItem(order >= 0 ? Material.COMPASS : negativeNumbers, "§eCalculation Order§8:§7 " + order, clickType -> {
@ -163,10 +164,10 @@ public class SimulatorTNTPhaseSettingsGui extends SimulatorBaseGui {
orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30))); orderItem.getItemStack().setAmount(Math.max(1, Math.min(Math.abs(order), 30)));
inventory.setItem(22, orderItem); inventory.setItem(22, orderItem);
inventory.setItem(31, SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(31, new SWItem(SWItem.getDye(order > -SimulatorPhase.ORDER_LIMIT ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
tnt.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1))); tnt.setOrder(Math.max(-SimulatorPhase.ORDER_LIMIT, order - (clickType.isShiftClick() ? 5 : 1)));
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
//Jump //Jump
SWItem jumpX = new SWItem(tnt.isXJump() ? Material.LIME_WOOL : Material.RED_WOOL, "§7TNT §eJump X§8: " + (tnt.isZJump() ? "§aon" : "§coff"), clickType -> { SWItem jumpX = new SWItem(tnt.isXJump() ? Material.LIME_WOOL : Material.RED_WOOL, "§7TNT §eJump X§8: " + (tnt.isZJump() ? "§aon" : "§coff"), clickType -> {

View File

@ -24,10 +24,10 @@ import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.bausystem.features.simulator.data.tnt.TNTElement; import de.steamwar.bausystem.features.simulator.data.tnt.TNTElement;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorAnvilGui;
import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui; import de.steamwar.bausystem.features.simulator.gui.base.SimulatorBaseGui;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -58,7 +58,7 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
// Back Arrow // Back Arrow
inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> { inventory.setItem(0, new SWItem(Material.ARROW, "§eBack", clickType -> {
back.open(); back.open();
})); }).setCustomModelData(CMDs.BACK));
// Material Chooser // Material Chooser
List<String> lore = new ArrayList<>(); List<String> lore = new ArrayList<>();
@ -74,10 +74,10 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
// Base Tick // Base Tick
int baseTicks = tnt.getBaseTick(); int baseTicks = tnt.getBaseTick();
inventory.setItem(9, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> { inventory.setItem(9, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+5"), false, clickType -> {
tnt.changeBaseTicks(clickType.isShiftClick() ? 5 : 1); tnt.changeBaseTicks(clickType.isShiftClick() ? 5 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> { SWItem baseTick = new SWItem(Material.REPEATER, "§eTicks§8:§7 " + baseTicks, clickType -> {
new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> { new SimulatorAnvilGui<>(player, "Ticks", baseTicks + "", Integer::parseInt, integer -> {
if (integer < 0) return false; if (integer < 0) return false;
@ -88,14 +88,14 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
}); });
baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64))); baseTick.getItemStack().setAmount(Math.max(1, Math.min(baseTicks, 64)));
inventory.setItem(18, baseTick); inventory.setItem(18, baseTick);
inventory.setItem(27, SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> { inventory.setItem(27, new SWItem(SWItem.getDye(baseTicks > 0 ? 1 : 8), "§e-1", Arrays.asList("§7Shift§8: §e-5"), false, clickType -> {
if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) { if (baseTicks - (clickType.isShiftClick() ? 5 : 1) < 0) {
tnt.changeBaseTicks(-baseTicks); tnt.changeBaseTicks(-baseTicks);
} else { } else {
tnt.changeBaseTicks(clickType.isShiftClick() ? -5 : -1); tnt.changeBaseTicks(clickType.isShiftClick() ? -5 : -1);
} }
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
// Subpixel Alignment // Subpixel Alignment
inventory.setItem(21, new SWItem(Material.SUNFLOWER, "§7Align§8: §eCenter", clickType -> { inventory.setItem(21, new SWItem(Material.SUNFLOWER, "§7Align§8: §eCenter", clickType -> {
@ -135,10 +135,10 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
inventory.setItem(30, positivXItem); inventory.setItem(30, positivXItem);
// Pos X // Pos X
inventory.setItem(15, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> { inventory.setItem(15, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> {
tnt.move(clickType.isShiftClick() ? 0.0625 : 1, 0, 0); tnt.move(clickType.isShiftClick() ? 0.0625 : 1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(24, new SWItem(Material.PAPER, "§eX§8:§7 " + tnt.getPosition().getX(), clickType -> { inventory.setItem(24, new SWItem(Material.PAPER, "§eX§8:§7 " + tnt.getPosition().getX(), clickType -> {
new SimulatorAnvilGui<>(player, "X", tnt.getPosition().getX() + "", Double::parseDouble, d -> { new SimulatorAnvilGui<>(player, "X", tnt.getPosition().getX() + "", Double::parseDouble, d -> {
tnt.getPosition().setX(d); tnt.getPosition().setX(d);
@ -146,16 +146,16 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(33, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> { inventory.setItem(33, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> {
tnt.move(clickType.isShiftClick() ? -0.0625 : -1, 0, 0); tnt.move(clickType.isShiftClick() ? -0.0625 : -1, 0, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
// Pos Y // Pos Y
inventory.setItem(16, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> { inventory.setItem(16, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> {
tnt.move(0, clickType.isShiftClick() ? 0.0625 : 1, 0); tnt.move(0, clickType.isShiftClick() ? 0.0625 : 1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(25, new SWItem(Material.PAPER, "§eY§8:§7 " + tnt.getPosition().getY(), clickType -> { inventory.setItem(25, new SWItem(Material.PAPER, "§eY§8:§7 " + tnt.getPosition().getY(), clickType -> {
new SimulatorAnvilGui<>(player, "Y", tnt.getPosition().getY() + "", Double::parseDouble, d -> { new SimulatorAnvilGui<>(player, "Y", tnt.getPosition().getY() + "", Double::parseDouble, d -> {
tnt.getPosition().setY(d); tnt.getPosition().setY(d);
@ -163,16 +163,16 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(34, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> { inventory.setItem(34, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> {
tnt.move(0, clickType.isShiftClick() ? -0.0625 : -1, 0); tnt.move(0, clickType.isShiftClick() ? -0.0625 : -1, 0);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
// Pos Z // Pos Z
inventory.setItem(17, SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> { inventory.setItem(17, new SWItem(SWItem.getDye(10), "§e+1", Arrays.asList("§7Shift§8: §e+0.0625"), false, clickType -> {
tnt.move(0, 0, clickType.isShiftClick() ? 0.0625 : 1); tnt.move(0, 0, clickType.isShiftClick() ? 0.0625 : 1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.INCREMENT_OR_DISABLED));
inventory.setItem(26, new SWItem(Material.PAPER, "§eZ§8:§7 " + tnt.getPosition().getZ(), clickType -> { inventory.setItem(26, new SWItem(Material.PAPER, "§eZ§8:§7 " + tnt.getPosition().getZ(), clickType -> {
new SimulatorAnvilGui<>(player, "Z", tnt.getPosition().getZ() + "", Double::parseDouble, d -> { new SimulatorAnvilGui<>(player, "Z", tnt.getPosition().getZ() + "", Double::parseDouble, d -> {
tnt.getPosition().setZ(d); tnt.getPosition().setZ(d);
@ -180,9 +180,9 @@ public class SimulatorTNTSettingsGui extends SimulatorBaseGui {
return true; return true;
}, this).open(); }, this).open();
})); }));
inventory.setItem(35, SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> { inventory.setItem(35, new SWItem(SWItem.getDye(1), "§e-1", Arrays.asList("§7Shift§8: §e-0.0625"), false, clickType -> {
tnt.move(0, 0, clickType.isShiftClick() ? -0.0625 : -1); tnt.move(0, 0, clickType.isShiftClick() ? -0.0625 : -1);
SimulatorWatcher.update(simulator); SimulatorWatcher.update(simulator);
}); }).setCustomModelData(CMDs.Simulator.DECREMENT_OR_DISABLED));
} }
} }

View File

@ -21,6 +21,7 @@ package de.steamwar.bausystem.features.simulator.gui.base;
import de.steamwar.bausystem.features.simulator.data.Simulator; import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -50,19 +51,19 @@ public abstract class SimulatorPageGui<T> extends SimulatorBaseGui {
headerAndFooter(); headerAndFooter();
page = Math.min(page, maxPage()); page = Math.min(page, maxPage());
inventory.setItem(size - 9, SWItem.getDye(page > 0 ? 10 : 8), page > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(page > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 9, new SWItem(SWItem.getDye(page > 0 ? 10 : 8), page > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(page > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> {
if (page > 0) { if (page > 0) {
page--; page--;
open(); open();
} }
}); }).setCustomModelData(CMDs.PREVIOUS_PAGE));
boolean hasNext = page < maxPage() - (data.size() % (size - 18) == 0 ? 1 : 0); boolean hasNext = page < maxPage() - (data.size() % (size - 18) == 0 ? 1 : 0);
inventory.setItem(size - 1, SWItem.getDye(hasNext ? 10 : 8), hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 1, new SWItem(SWItem.getDye(hasNext ? 10 : 8), hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> {
if (hasNext) { if (hasNext) {
page++; page++;
open(); open();
} }
}); }).setCustomModelData(CMDs.NEXT_PAGE));
int minElement = page * (size - 18); int minElement = page * (size - 18);
int maxElement = Math.min(data.size(), (page + 1) * (size - 18)); int maxElement = Math.min(data.size(), (page + 1) * (size - 18));

View File

@ -22,6 +22,7 @@ package de.steamwar.bausystem.features.simulator.gui.base;
import de.steamwar.bausystem.features.simulator.data.Simulator; import de.steamwar.bausystem.features.simulator.data.Simulator;
import de.steamwar.core.Core; import de.steamwar.core.Core;
import de.steamwar.data.CMDs;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -50,19 +51,19 @@ public abstract class SimulatorScrollGui<T> extends SimulatorBaseGui {
headerAndFooter(); headerAndFooter();
scroll = maxScroll(); scroll = maxScroll();
inventory.setItem(size - 9, SWItem.getDye(scroll > 0 ? 10 : 8), scroll > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(scroll > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 9, new SWItem(SWItem.getDye(scroll > 0 ? 10 : 8), scroll > 0 ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(scroll > 0 ? "SWLISINV_PREVIOUS_PAGE_ACTIVE" : "SWLISINV_PREVIOUS_PAGE_INACTIVE", player), clickType -> {
if (scroll > 0) { if (scroll > 0) {
scroll = Math.max(0, scroll - 9); scroll = Math.max(0, scroll - 9);
open(); open();
} }
}); }).setCustomModelData(CMDs.PREVIOUS_PAGE));
boolean hasNext = (data.size() + 1) - scroll > 9; boolean hasNext = (data.size() + 1) - scroll > 9;
inventory.setItem(size - 1, SWItem.getDye(hasNext ? 10 : 8), hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> { inventory.setItem(size - 1, new SWItem(SWItem.getDye(hasNext ? 10 : 8), hasNext ? (byte) 10 : (byte) 8, Core.MESSAGE.parse(hasNext ? "SWLISINV_NEXT_PAGE_ACTIVE" : "SWLISINV_NEXT_PAGE_INACTIVE", player), clickType -> {
if (hasNext) { if (hasNext) {
scroll = Math.min(scroll + 9, data.size() + 1 - 9); scroll = Math.min(scroll + 9, data.size() + 1 - 9);
open(); open();
} }
}); }).setCustomModelData(CMDs.NEXT_PAGE));
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
if (scroll + i < data.size()) { if (scroll + i < data.size()) {

View File

@ -68,6 +68,7 @@ public class SimFormatSimulatorLoader implements SimulatorLoader {
private void loadSimulator(YAPIONObject simulatorObject, Simulator simulator) { private void loadSimulator(YAPIONObject simulatorObject, Simulator simulator) {
simulator.setMaterial(Material.valueOf(simulatorObject.getPlainValue("material"))); simulator.setMaterial(Material.valueOf(simulatorObject.getPlainValue("material")));
simulator.setAutoTrace(simulatorObject.getPlainValue("autoTrace")); simulator.setAutoTrace(simulatorObject.getPlainValue("autoTrace"));
simulator.setAutoTestblock(simulatorObject.getPlainValueOrDefault("autoTestblock", false));
YAPIONArray groups = simulatorObject.getArray("groups"); YAPIONArray groups = simulatorObject.getArray("groups");
groups.streamObject().forEach(groupObject -> { groups.streamObject().forEach(groupObject -> {

View File

@ -39,6 +39,7 @@ public class SimulatorSaver {
YAPIONObject simulatorObject = new YAPIONObject(); YAPIONObject simulatorObject = new YAPIONObject();
simulatorObject.add("material", simulator.getMaterial().name()); simulatorObject.add("material", simulator.getMaterial().name());
simulatorObject.add("autoTrace", simulator.isAutoTrace()); simulatorObject.add("autoTrace", simulator.isAutoTrace());
simulatorObject.add("autoTestblock", simulator.isAutoTestblock());
YAPIONArray groups = new YAPIONArray(); YAPIONArray groups = new YAPIONArray();
simulator.getGroups().forEach(group -> { simulator.getGroups().forEach(group -> {

Some files were not shown because too many files have changed in this diff Show More