SteamWar/BauSystem2.0
Archiviert
12
0

Commits vergleichen

...
Dieses Repository wurde am 2024-08-05 archiviert. Du kannst Dateien ansehen und es klonen, aber nicht pushen oder Issues/Pull-Requests öffnen.

997 Commits

Autor SHA1 Nachricht Datum
yoyosource
47d5f29ae6 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-08-03 22:28:04 +02:00
yoyosource
552a1ea7fc Add SmartPlaceListener for Block under Repeater
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-18 20:00:33 +02:00
yoyosource
d77e8e829e Fix BauSystem.properties
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-17 14:39:42 +02:00
yoyosource
bd06bce3dc Fix NoGravityListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-17 14:25:01 +02:00
yoyosource
76ecc8e6e4 Add NoGravityCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-17 14:22:43 +02:00
yoyosource
820e7fcbb2 Add NoGravityCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-17 14:19:19 +02:00
yoyosource
94958de2da Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-17 14:04:03 +02:00
yoyosource
2214b7dc3d Fix ClipboardListener 2024-07-17 14:03:55 +02:00
75e6b28e0e Trigger Rebuild
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-17 07:45:51 +02:00
a1dd919afa Merge pull request 'Added debug message for trace history map nullpointer and potential fix' (#257) from fix-trace-history-nullpointer into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #257
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-07-16 22:38:04 +02:00
D4rkr34lm
2b0b2a08d7 Added todo for debug removal
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-16 22:31:09 +02:00
D4rkr34lm
7fc76e5e2a fixed wrong map in debug message
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-07-16 22:19:11 +02:00
D4rkr34lm
5153609776 Added debug message for trace history map nullpointer and potential fix
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-07-16 21:56:08 +02:00
593113bbc3 Merge pull request 'fix(tracer): Fixed first point of advanced flag incorrect calc order' (#254) from fix-tracer-advanced-flag-first-tick-calc into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #254
2024-07-06 18:48:59 +02:00
D4rkr34lm
a62c08b097 fix(tracer): Fixed first point of advanced flag incorrect calc order
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-06 12:54:09 +02:00
442ba6f483 Merge pull request 'fix(tracer): Fixed wrong velocity taken in advanced flag' (#253) from fix-direction-decision-in-advanced-flag into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #253
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-07-04 17:17:15 +02:00
D4rkr34lm
e253e12994 use fixed ci
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-07-04 17:15:19 +02:00
D4rkr34lm
38bb687c5b fix(tracer): Fixed wrong velocity taken in advanced flag
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-07-04 15:33:40 +02:00
yoyosource
30ddf671ae Fix messages for clear command
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-18 11:08:41 +02:00
yoyosource
2829706d6b Fix DesignEndStone
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix DevServer kicking every member not added
Fix WarpListener for 1.20+
2024-05-16 16:36:59 +02:00
yoyosource
ab6c762323 Fix DesignEndStone
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-16 15:47:30 +02:00
yoyosource
d5acfa3f5c Fix DesignEndStone
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-16 15:42:34 +02:00
yoyosource
3370e211f9 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-16 15:31:00 +02:00
yoyosource
29c7732166 Potential fix for weird starting behaviour 2024-05-16 15:30:53 +02:00
ec3a8a1421 Merge pull request 'Improved Advanced-Flag to backtrack instead of going forward' (#252) from tracer/advanced-flag-improvemnt into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #252
Reviewed-by: Lixfel <lixfel@steamwar.de>
2024-05-12 09:14:35 +02:00
D4rkr34lm
f054710a95 Improved Advanced-Flag to backtrack instead of going forward
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-10 18:34:50 +02:00
67f6363852 Merge pull request 'Fixed build-destory-only not working' (#251) from tracer/fixed-only-destroy-flags into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #251
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-05-09 17:49:24 +02:00
7182635558 Merge pull request 'Added advanced logging for trace read EOF' (#250) from tracer/debug-corrupted-records-save-files into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #250
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-05-09 17:49:08 +02:00
D4rkr34lm
7d01ebf4ed Fixed build-destory-only not working
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-09 12:18:27 +02:00
D4rkr34lm
595c45bb54 Added advanced logging for trace read EOF
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-09 11:44:50 +02:00
45a61e554f Merge pull request 'Fixed clear nullpointer' (#249) from tracer/fix-clear-nullpointer into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #249
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-05-04 15:53:21 +02:00
D4rkr34lm
a43e141340 Fixed clear nullpointer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-04 13:56:10 +02:00
4a334d8693 Merge pull request 'Made Trace Records loading syncronized' (#247) from tracer/made-records-loading-syncronized into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #247
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-05-02 21:06:29 +02:00
D4rkr34lm
6a6833a0e0 Made Trace Records loading syncronized
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-02 20:49:28 +02:00
daedbb26a7 Merge pull request 'Fixed laufbau first tnt bug' (#246) from fix-laufbau into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #246
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-05-01 13:44:46 +02:00
D4rkr34lm
d5ab11addd Fixed laufbau first tnt bug
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-05-01 13:42:44 +02:00
Chaoscaot
aa22ccf5b4 Merge pull request 'tracer/simulator-autotrace-fix' (#245) from tracer/simulator-autotrace-fix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #245
Reviewed-by: Chaoscaot <chaoscaot@zohomail.eu>
2024-04-29 21:43:19 +02:00
D4rkr34lm
723b86b955 Removed debugstatement
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-29 20:18:44 +02:00
D4rkr34lm
a116f7e4b1 Fixed fuse 80 subtick calc order problem with failsafe
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-29 20:16:27 +02:00
680f9d8b3f Merge pull request 'hotfix flag autocomplete' (#244) from tracer/hotfix-flag-autocomplete into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #244
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-28 15:12:11 +02:00
D4rkr34lm
00dcb10451 hotfix flag autocomplete
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 15:05:50 +02:00
c815cd52fb Merge pull request 'Hotfixed failsafe' (#243) from tracer/hotfix-failsafe into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #243
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-28 12:31:06 +02:00
D4rkr34lm
ddb701cbd6 Hotfixed failsafe
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 12:30:07 +02:00
929400b4d9 Merge pull request 'tracer/bug-354-Fix-smaller-trace-issues' (#242) from tracer/bug-354-Fix-smaller-trace-issues into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #242
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-28 12:15:17 +02:00
D4rkr34lm
e9ff8a7dc5 Merge master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 12:14:08 +02:00
D4rkr34lm
a36bae3a8d ...
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 12:11:22 +02:00
D4rkr34lm
7502270b96 Fixed killall interaction
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-28 12:10:33 +02:00
D4rkr34lm
0c91261d55 Inlined failsave 2024-04-28 12:09:14 +02:00
D4rkr34lm
add259788d Fixed stop message
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 12:02:03 +02:00
D4rkr34lm
4568ceee36 Changed auto trace toggle to setable
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 11:59:42 +02:00
106a13bd13 Merge pull request 'Fix' (#240) from tracer/fix-historyMap-nullpointer into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #240
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-28 11:49:38 +02:00
D4rkr34lm
2aec97304d Made -- to -
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 11:18:41 +02:00
D4rkr34lm
7fa31704f4 Added non toggle methods for auto tracer to recorder
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 11:17:09 +02:00
D4rkr34lm
95132a17d3 Fixed tnt point tss wrong
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-28 11:01:37 +02:00
D4rkr34lm
e08e53a554 Fix
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-25 20:32:05 +02:00
5ab6b8832b Merge pull request 'trace/trace-del-and-trace-share-fix' (#239) from trace/trace-del-and-trace-share-fix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #239
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-22 22:57:11 +02:00
D4rkr34lm
2861a4e19b fixed help messag
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 22:56:14 +02:00
D4rkr34lm
18430e13fe Renamed trace share to trace broadcast
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 22:51:28 +02:00
D4rkr34lm
e8eeeb729a Changed behavior of trace deletion while being recorded
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 22:49:13 +02:00
792b089e4f Merge pull request 'Fix trace Rserver null error ?' (#237) from trace/server-nullpointer-fix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #237
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-22 21:17:47 +02:00
D4rkr34lm
b602fb06d0 Used Compute if absent
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 20:27:34 +02:00
18769a6931 Merge pull request 'Trace now closes on being deleted' (#238) from trace/trace-clear-not-stopping-trace-fix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #238
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-22 20:20:09 +02:00
D4rkr34lm
f1b3b27c14 Trace now closes on being deleted
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 20:15:05 +02:00
D4rkr34lm
fd17b8315f Fix trace Rserver null error ?
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 19:58:34 +02:00
2ed6008aea Merge pull request 'Final fix' (#236) from trace/exeption-fix-3 into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #236
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-22 19:00:44 +02:00
D4rkr34lm
a5b90be2db Final fix
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 18:37:04 +02:00
yoyosource
c278b1cfe1 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 17:36:08 +02:00
yoyosource
486d04dd66 Hotfix BauSystem.properties for InfoCommand 2024-04-22 17:36:02 +02:00
f1d929e33b Merge pull request 'Fix trace is added two times to manager' (#235) from trace-2times-in-manager-bug into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #235
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-22 17:28:22 +02:00
6f6b61b310 Merge pull request 'Added alias for trace clear' (#234) from trace-clear-alias into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #234
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-22 17:28:09 +02:00
yoyosource
f50d887da5 Hotfix TraceEntity 2.0?
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-22 15:21:47 +02:00
D4rkr34lm
5d2886c0a5 Fix trace is added two times to manager
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 22:13:27 +02:00
D4rkr34lm
9d96d5a2a8 Added alias for trace clear
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 21:57:00 +02:00
yoyosource
07cd605d2c Hotfix TraceEntity
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 19:42:13 +02:00
aeb5ebfc12 Merge pull request 'Trace Refactor' (#233) from TracerGUI into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #233
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-21 16:03:24 +02:00
yoyosource
7e96d1c846 Fix TraceRecordingWrapper.startTick
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 16:00:34 +02:00
yoyosource
5595f3177c Remove redundancy in data storage
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 15:55:26 +02:00
yoyosource
e931d7157e Rewrite ViewFlag.filter with Stream API to reduce copies of lists
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 15:47:18 +02:00
yoyosource
b64e06479f Disable IsolateFlag if no isolation is active
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 15:36:12 +02:00
yoyosource
86cf7e8ca5 Fix messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 15:31:45 +02:00
yoyosource
69b629d72e Fix messages 2024-04-21 15:30:12 +02:00
D4rkr34lm
143ba020ed Add message
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 15:27:14 +02:00
D4rkr34lm
d0a08bc331 Fix isolate click message
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 15:21:12 +02:00
D4rkr34lm
d81fb4e020 Merge remote-tracking branch 'origin/TracerGUI' into TracerGUI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
# Conflicts:
#	BauSystem_Main/src/BauSystem.properties
#	BauSystem_Main/src/BauSystem_de.properties
2024-04-21 15:02:53 +02:00
D4rkr34lm
7ddfcb83ec Added isolate on trace entity 2024-04-21 14:57:44 +02:00
yoyosource
09aa662171 Add messages to TraceCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 14:46:47 +02:00
yoyosource
56a72b1e83 Add TraceCommand.share
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 14:36:15 +02:00
yoyosource
295eb82fe9 Add TraceCommand.share
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 14:29:26 +02:00
yoyosource
f7727eb01c Add TraceScoreboardElement
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 13:23:15 +02:00
yoyosource
4e56760eea Merge remote-tracking branch 'origin/TracerGUI' into TracerGUI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-21 13:17:36 +02:00
yoyosource
f69cbd2724 Add TraceScoreboardElement 2024-04-21 13:17:28 +02:00
D4rkr34lm
0d09db2284 Docs at 90 Percent
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-20 00:51:51 +02:00
yoyosource
47772ad23d Update ViewFlag.TIME
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 18:08:11 +02:00
yoyosource
83e5324986 Update ViewFlag.FUSE
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 18:06:05 +02:00
D4rkr34lm
8512a7bec5 Merge remote-tracking branch 'origin/TracerGUI' into TracerGUI
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-18 17:56:50 +02:00
D4rkr34lm
35988bfcd3 Made name consistent with old naming
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-18 17:56:45 +02:00
yoyosource
67a34ee5ca Fix bundle counting entity twice
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 17:54:20 +02:00
yoyosource
5af9cfcaad Fix Trace.bundleRecords
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 17:42:40 +02:00
yoyosource
8b07e93a70 Fix Trace.bundleRecords
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 17:25:47 +02:00
D4rkr34lm
4d9aacfc3e Merge remote-tracking branch 'origin/TracerGUI' into TracerGUI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 17:13:00 +02:00
D4rkr34lm
6a3f3f8b0a fixed filters
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-18 17:12:53 +02:00
yoyosource
4e6755033a Fix some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 17:08:39 +02:00
D4rkr34lm
4422c249dc Made loose filter more loose
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-18 17:07:16 +02:00
D4rkr34lm
1a3850600c Merge branch 'TracerGUI' of https://steamwar.de/devlabs/SteamWar/BauSystem2.0 into TracerGUI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 16:48:48 +02:00
yoyosource
33d687b216 Add gzip compression to trace data
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 16:19:23 +02:00
D4rkr34lm
2eab79cf69 Merge branch 'TracerGUI' of https://steamwar.de/devlabs/SteamWar/BauSystem2.0 into TracerGUI 2024-04-18 16:17:58 +02:00
D4rkr34lm
1bcf415186 Closed recource leak
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-18 16:14:49 +02:00
yoyosource
27dc30619b Merge remote-tracking branch 'origin/TracerGUI' into TracerGUI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 16:11:53 +02:00
yoyosource
17a8389703 Add Loader.single 2024-04-18 16:11:46 +02:00
D4rkr34lm
d170e96542 Made trace clear region wise
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-18 16:10:15 +02:00
yoyosource
356b14d49c Fix some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-18 15:52:30 +02:00
D4rkr34lm
7a9a2283a9 Merge remote-tracking branch 'origin/TracerGUI' into TracerGUI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-17 21:50:04 +02:00
D4rkr34lm
d5d8c52862 Fixed Ignite Flag
Fixed Formating

Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-17 21:49:47 +02:00
yoyosource
163967483f Remove accidental committed stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-17 21:41:56 +02:00
yoyosource
ed799b2937 Fix some things maybe!
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-17 16:31:36 +02:00
D4rkr34lm
d13c415565 Added savind and loading for traces
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-16 22:35:07 +02:00
yoyosource
39d2205b85 Fix TraceCommand.delete
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-12 17:58:20 +02:00
yoyosource
c4296a3781 Fix performance stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-12 17:18:39 +02:00
yoyosource
31e0a0172f Fix some stuff and make it more ugly
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-12 17:13:27 +02:00
yoyosource
bcdad382c7 Update tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-12 16:24:32 +02:00
yoyosource
597c968463 Update tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-12 16:18:30 +02:00
D4rkr34lm
43a04a68bf Renamed TNTRecord sec
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-11 17:49:23 +02:00
D4rkr34lm
80967ab4e7 Add date to Trace
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-09 23:10:49 +02:00
D4rkr34lm
e06d612a0e Renamed TNTRecord
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-09 22:46:00 +02:00
yoyosource
224127eac6 Update tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-09 18:10:18 +02:00
yoyosource
1aa63255e7 Update tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-09 14:59:19 +02:00
yoyosource
7f4834412d Remove legacy materials if there were any
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-08 17:27:34 +02:00
yoyosource
e01ac8ac58 Fix TPSSystem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-08 17:20:23 +02:00
yoyosource
7ece12de47 Update materials of KillcheckerVisualizer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-08 14:23:59 +02:00
yoyosource
af19931946 Optimize ProcessingTracesState
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-08 13:25:13 +02:00
yoyosource
b8e79f9c55 Update Trace and TraceManager
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-08 11:56:52 +02:00
yoyosource
c7b8b5d2da Hotfix RegionCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-08 08:28:52 +02:00
yoyosource
41d4ce2472 Fix build errors
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 17:22:37 +02:00
yoyosource
4ed5f40fed Fix build errors
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 17:21:05 +02:00
yoyosource
a6867cb4f9 Fix SimulatorExecutor
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-07 17:19:13 +02:00
yoyosource
7cd61fd9a4 Add ViewFlagHolder
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-07 17:15:54 +02:00
yoyosource
3f9f3341a3 Fix AtFlag
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-07 16:51:24 +02:00
yoyosource
e7438029b0 Add /rgc and /rgp and /region copy and /region paste
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 16:39:00 +02:00
3755395eab Integrated TraceRecorder with Simulator
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: D4rkr34lm <darth.m.frohn@gmail.com>
2024-04-07 15:20:58 +02:00
yoyosource
e64c50b566 Reformat many things
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-07 13:38:36 +02:00
yoyosource
207826ae8a Optimize BundleFilter
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-07 13:29:30 +02:00
9b70f2b365 Merge pull request 'Close #226 and #227' (#230) from SmallSimFixes into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #230
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-04-07 13:07:57 +02:00
D4rkr34lm
ae470ffadd Fixed spelling
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 13:06:58 +02:00
D4rkr34lm
4a0cd6c51e Add subpixel alignment to storage
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 13:05:25 +02:00
D4rkr34lm
3b53926195 Updated ui name
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 12:57:50 +02:00
D4rkr34lm
687cb4451e Made text input move of group relativ
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 12:56:26 +02:00
D4rkr34lm
41fab57e1a Fixed Sub_Pixel to big
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-07 12:46:39 +02:00
yoyosource
d8d049d5d9 Merge remote-tracking branch 'origin/TracerGUI' into TracerGUI
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-07 12:32:43 +02:00
yoyosource
e8db5d86c2 Merge branch 'master' into TracerGUI
# Conflicts:
#	BauSystem_Main/src/BauSystem.properties
#	BauSystem_Main/src/BauSystem_de.properties
#	BauSystem_Main/src/de/steamwar/bausystem/features/simulator/TNTSimulator.java
#	BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TraceCommand.java
#	BauSystem_Main/src/de/steamwar/bausystem/features/tracer/TracerBauGuiItem.java
#	BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/Recorder.java
#	BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/SingleTraceRecorder.java
#	BauSystem_Main/src/de/steamwar/bausystem/features/tracer/show/TraceShowManager.java
2024-04-07 12:32:13 +02:00
D4rkr34lm
1fc9a43604 Added trace follow
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-03 00:14:37 +02:00
D4rkr34lm
488866cee6 Added comand for trace at
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-04-02 23:52:18 +02:00
D4rkr34lm
eefe92309d Fixed #226
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Added text input for simulator group
2024-04-02 22:59:40 +02:00
D4rkr34lm
c369662a28 Fixed #227 and made subpixelalignment more user friendly
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-04-02 22:35:27 +02:00
D4rkr34lm
870578dcf9 Added at-Flag
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-30 16:09:06 +01:00
D4rkr34lm
987a00ae51 Added proper info print to chat
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Refactored Isolate
2024-03-26 22:11:08 +01:00
D4rkr34lm
c0dcb99f7b Changes by jojo
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-21 16:30:10 +01:00
D4rkr34lm
d80e4cf3e0 Fixed inverse x required flags
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Fixed exeption handeling in record ClassMapper
Fixed advanced flag
Added flag aliasses
2024-03-21 16:29:51 +01:00
D4rkr34lm
2d7ae67335 Added required Flags
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-21 15:04:09 +01:00
D4rkr34lm
be25b71cb8 added render call to isolate
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-21 14:45:10 +01:00
D4rkr34lm
a94f5747a0 Implemented trace isolate
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-21 14:03:20 +01:00
D4rkr34lm
5a59578a66 Changed Record id from uuid to incremental int
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-19 16:09:32 +01:00
D4rkr34lm
10a63f1876 Fixed build destroy and testblock destroy flags
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-18 22:47:16 +01:00
D4rkr34lm
5ec9fbb6e0 Fixed Trace id assignment
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Fixed trace recording of source tnt
2024-03-18 22:40:41 +01:00
719b38f5af Merge pull request 'Fix BucketEntityEvent on 1.15 (and 1.19 Build servers)' (#225) from fixBucketEntityEvent into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #225
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-03-15 16:34:19 +01:00
aa8d2bfcd0 Fix BucketEntityEvent on 1.15 (and 1.19 Build servers)
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-15 16:27:43 +01:00
yoyosource
cf329f4236 Fix TPSScoreboardElement
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-14 21:53:10 +01:00
yoyosource
6abeed0b02 Fix ShieldPrinting setting air on click on block
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-14 17:01:56 +01:00
D4rkr34lm
45cc3abd0a Fixed Advanced flag having gravity
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-14 12:31:17 +01:00
D4rkr34lm
2cd3c3527e Added Micromotion view Flag
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-14 12:25:54 +01:00
5a835acb80 Fix Techhider
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-14 11:50:52 +01:00
5a991de55a Fix Techhider
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-14 11:49:04 +01:00
D4rkr34lm
827929382a Added source, build-destroy, testblock-destroy
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-13 23:59:17 +01:00
D4rkr34lm
1282f6066c Added count, fuse and time flags
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-13 23:18:57 +01:00
D4rkr34lm
8a78dcbc78 Added Advanced flag
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-13 23:14:27 +01:00
D4rkr34lm
04b49fe827 Added Ignite Flag
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Added inverse flags
2024-03-12 22:28:33 +01:00
D4rkr34lm
8a3d8a9c33 Expanded Command with delete option
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-12 20:31:20 +01:00
D4rkr34lm
dfd20f03b6 Fixed auto trace
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-12 15:20:38 +01:00
yoyosource
234f476672 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-11 20:42:00 +01:00
yoyosource
b7cb909986 Add interactAt to documentation 2024-03-11 20:41:52 +01:00
5b8d7bc28f Merge pull request 'Type zum BlockInteract Event im Scriptsystem hinzugefügt' (#224) from ScriptEventDataExpansion into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #224
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-03-09 13:58:29 +01:00
D4rkr34lm
f1db3c2047 Updated doc
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-08 22:23:13 +01:00
D4rkr34lm
2d5bedc63a Added block type to playerInteract event in script api
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-08 22:10:41 +01:00
D4rkr34lm
8781da6a3d Added hide command
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-08 22:06:07 +01:00
yoyosource
a91c352b15 Update pos definition and some other stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-07 22:20:35 +01:00
yoyosource
f7481bfa0f Add server.onlinePlayerCount to Script System
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-07 15:40:52 +01:00
yoyosource
2ccc7920d5 Fix BauScoreboard
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-05 12:21:11 +01:00
yoyosource
3ecd31e80c Update ScoreboardLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-05 12:13:30 +01:00
yoyosource
1da5b65460 Add ScoreboardLib and TpsLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-05 11:06:31 +01:00
D4rkr34lm
1cbe614171 Fixed nullpointer in auto trace finish check
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-03 22:18:31 +01:00
D4rkr34lm
4620e83a82 Reintroduced id return on trace recording start
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-02 22:18:04 +01:00
D4rkr34lm
6ec62d9720 Reintroduced trace id
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-02 22:14:56 +01:00
D4rkr34lm
335e2cc437 Added docs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-02 22:11:46 +01:00
D4rkr34lm
75edfc8375 Made for easier interfacing with api by allowing to toggle
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
show from manager
2024-03-02 22:10:36 +01:00
D4rkr34lm
ccf155d500 Fixed flag static init order leading to null pointer exeption
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-02 21:51:49 +01:00
D4rkr34lm
e4346a36e1 Temporarily removed trace from lua api
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-02 21:35:51 +01:00
D4rkr34lm
8aa0ee4d9d Updated simulator fo new trace api
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-02 21:35:09 +01:00
D4rkr34lm
fccdcb2519 Made auto-traces finish
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-02 21:19:52 +01:00
yoyosource
b47d85ebe9 Fix Config.save
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-03-02 11:34:22 +01:00
D4rkr34lm
0c37cfc3bb Readded auto-trace
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-01 23:48:53 +01:00
D4rkr34lm
1094f4a979 Readded Explosion Flag
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-01 23:19:11 +01:00
D4rkr34lm
c03fbb65e6 Refactored view flag to be abstract class
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-01 23:06:36 +01:00
D4rkr34lm
48175de8d8 Addapted laufbau for new trace api
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-01 22:08:34 +01:00
D4rkr34lm
eeb47f1d08 Added id to filter for records of same tnt
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-01 11:46:30 +01:00
D4rkr34lm
e71ccc3160 Replaced doubly linked list structure with ArrayList refrence, for tnt history
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-03-01 11:40:24 +01:00
D4rkr34lm
40f4af2a06 Started adapting laufbau
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-02-29 21:27:21 +01:00
D4rkr34lm
3c22840278 Removed old trace
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-02-29 11:03:59 +01:00
D4rkr34lm
c621048014 Removed old iterators
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-02-29 11:00:56 +01:00
D4rkr34lm
1644b96886 Moved Classes
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Reimplemented basic command
2024-02-22 20:29:10 +01:00
D4rkr34lm
f62d9e626b Added live rendering
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-02-21 13:34:25 +01:00
D4rkr34lm
3a3c4819f9 Removed null returns
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-02-20 23:22:34 +01:00
D4rkr34lm
5c96da9acd Fixed bugs with trace rendering
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Added toString
2024-02-20 23:11:58 +01:00
yoyosource
5a03623b14 Fix ScriptSystem in 1.15?
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-18 12:15:00 +01:00
yoyosource
f837b37b50 Fix ClipboardListener.onLogin loading copy schem for builder
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 18:13:25 +01:00
yoyosource
fd603f3c7f Fix Config
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 16:27:23 +01:00
yoyosource
280b5b2613 Recolor Players in InfoCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 16:19:57 +01:00
yoyosource
7f62ad8005 Update InfoCommand output
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 15:22:48 +01:00
yoyosource
d1196c6e4e Add AutostartListener Bedrock autostarter
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 13:37:17 +01:00
yoyosource
009a1f3fa4 Fix PanzernCommand for glass blocks
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 13:12:10 +01:00
yoyosource
a05116a16c Fix SpectatorListener.resendChunks
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 12:22:56 +01:00
yoyosource
cc15781b44 Hotfix Config
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 09:32:26 +01:00
yoyosource
8053796341 Update permission of BackupCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 09:15:43 +01:00
yoyosource
9466a8c981 Fix AntiBauAddMemberFix
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 08:55:47 +01:00
yoyosource
338980f0d3 Fix AntiBauAddMemberFix 2024-02-17 08:55:33 +01:00
e4dc05ce02 Merge pull request 'Update Permission' (#220) from PermissionUpdate into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #220
Reviewed-by: Lixfel <lixfel@steamwar.de>
2024-02-17 08:53:30 +01:00
yoyosource
de08488371 Fix AxiomPermissionCheck
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-17 08:36:51 +01:00
yoyosource
21e7bd89af Fix BindCommand and SteamWarLuaPlugin
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-16 08:24:42 +01:00
yoyosource
953db69425 Fix BackupCommand
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-02-16 08:09:40 +01:00
yoyosource
1d49a6981b Merge branch 'master' into PermissionUpdate
# Conflicts:
#	BauSystem_Main/src/de/steamwar/bausystem/features/script/lua/libs/ServerLib.java
#	BauSystem_Main/src/de/steamwar/bausystem/features/tpslimit/TPSSystem.java
#	BauSystem_Main/src/de/steamwar/bausystem/features/world/AxiomPermissionCheck.java
2024-02-16 08:09:13 +01:00
d9dd64271e Merge pull request 'Potential WE axe fix' (#223) from potentialWEAxeFix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #223
Reviewed-by: Chaoscaot <chaoscaot@zohomail.eu>
2024-02-13 10:51:46 +01:00
yoyosource
c2c686319d Fix ServerLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-11 15:17:07 +01:00
7ded9eefa4 Potential WE axe fix
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-06 22:39:33 +01:00
yoyosource
b211f9cf79 Hot Hot Hot-fix Players on Bauserver without add
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-04 01:18:50 +01:00
yoyosource
2ba51e66e0 Fix BindCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-01 21:48:14 +01:00
yoyosource
f83ba6ab96 Fix AxiomPermissionCheck
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-02-01 20:02:43 +01:00
yoyosource
b891c5adf1 Fix TPSSystem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-30 19:48:43 +01:00
yoyosource
78c0bc51b9 Fix SimulatorSaver
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-01-30 16:10:50 +01:00
yoyosource
d1afb344d9 Fix SimulatorSaver
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-30 16:06:53 +01:00
yoyosource
e77680d25a Fix AxiomPermissionCheck
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-23 10:11:19 +01:00
yoyosource
94bf2f3ae6 Hotfix SpectatorListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-20 20:35:19 +01:00
yoyosource
775d428671 Fix SpectatorListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-19 20:33:27 +01:00
yoyosource
ea5df6cee3 Fix SteamWarLuaPlugin
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-19 17:08:11 +01:00
yoyosource
da1ea27f61 Remove Permission.SPECTATOR
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-01-19 17:02:57 +01:00
yoyosource
2bf0b0c6e8 Merge branch 'master' into PermissionUpdate
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2024-01-19 16:51:09 +01:00
85e6aab9e6 Merge pull request 'Fix freeze order.' (#222) from checkpoint into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #222
2024-01-19 15:53:03 +01:00
ad9b0aeab0 Fix freeze order.
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-19 15:52:06 +01:00
016a2a3469 Merge pull request 'Checkpoint idle server' (#221) from checkpoint into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #221
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2024-01-18 01:23:41 +01:00
c2bec98063 Checkpoint idle server
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-17 16:20:24 +01:00
yoyosource
ada8fefd62 Fix SimulatorSaver
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2024-01-14 11:52:20 +01:00
yoyosource
21aa22d75f Fix SteamWarLuaPlugin WE permission for WorldEdit commands
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-27 17:34:00 +01:00
yoyosource
a3f5098137 Merge branch 'master' into PermissionUpdate
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-25 11:41:44 +01:00
yoyosource
cdac4235f5 Fix SimulatorTNTPhaseSettingsGui
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-25 11:38:20 +01:00
yoyosource
b166d8ff6b Merge branch 'master' into PermissionUpdate
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
# Conflicts:
#	BauSystem_Main/src/de/steamwar/bausystem/features/simulator/SimulatorCursor.java
2023-12-25 11:31:44 +01:00
yoyosource
2c5a50bff3 Update BauMemberUpdate
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-23 17:54:54 +01:00
D4rkr34lm
beb49cdcd1 Added option for bundeling to trace rendering
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-23 17:43:34 +01:00
yoyosource
96b84a798b Update BauMemberUpdate
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-23 16:45:48 +01:00
yoyosource
6e9693d838 Update Techhider of Spectators
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-23 15:06:49 +01:00
yoyosource
2a55f607d3 Add dynamic spectator disable
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-23 14:18:32 +01:00
yoyosource
0ac735c30f Add ForceSpectatorCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add TechHiderCommand.toggleHider for spectators
2023-12-23 13:02:44 +01:00
yoyosource
b00babdcbd Fix permission messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-23 08:01:38 +01:00
yoyosource
f5e4d725fe Add BauMemberUpdate and BauMemberUpdateEvent
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 16:55:41 +01:00
yoyosource
ca8a916042 Optimize imports
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 15:16:28 +01:00
yoyosource
8da1fdac58 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 14:57:54 +01:00
yoyosource
927ce1f495 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 11:48:55 +01:00
yoyosource
0bf27db398 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 10:19:40 +01:00
yoyosource
202e03c957 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 10:03:24 +01:00
yoyosource
2cfed8b84d Fix CancelPacketHandleException in SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 09:24:49 +01:00
yoyosource
ec10b0fe71 Add Observer to Simulator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 09:01:54 +01:00
yoyosource
bff63482ef Add BauLockStateScoreboard
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-22 08:44:54 +01:00
yoyosource
4f266a30ab Fix StorageLib in 1.15
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-20 20:39:23 +01:00
D4rkr34lm
85512be3a8 Added methode to hide trail
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-19 16:22:54 +01:00
yoyosource
67c9f66d13 Fix AutostartListener for specific GameMode configs 2023-12-19 16:22:54 +01:00
yoyosource
f2a957c88f Hotfix AntiCursorReCentering 2023-12-19 16:22:54 +01:00
yoyosource
d1ff80b9dc Hotfix AntiCursorReCentering 2023-12-19 16:22:54 +01:00
yoyosource
41ed83dfe0 Add AntiCursorReCentering 2023-12-19 16:22:54 +01:00
D4rkr34lm
2bf3cfbb1d Reimplemented trace rendering
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-19 16:17:14 +01:00
yoyosource
19bb7cc733 Fix synchronized errors
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-17 13:07:48 +01:00
yoyosource
17c03f629a Fix SimulatorBaseGui open
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-17 12:48:05 +01:00
yoyosource
f6644d8ad8 Fix Gui not populated on tpslimit 0
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-17 12:24:01 +01:00
yoyosource
4ff706e1ef Fix Gui
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-17 12:20:36 +01:00
yoyosource
3d0ebbe743 Fix TNTPhase spawning in frozen Region
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 22:22:53 +01:00
yoyosource
5556bd7875 Update SimulatorBauGuiItem Permission
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 21:39:25 +01:00
yoyosource
5fe0079e30 Merge branch 'master' into PermissionUpdate 2023-12-16 21:38:01 +01:00
yoyosource
006a0edef6 Add SimulatorBauGuiItem back
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 21:36:13 +01:00
yoyosource
6305453e15 Fix Permission for SignEdit and other stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 21:34:29 +01:00
yoyosource
a61f1e2c8c Fix Permission for ServerLib.getBlockAt and setBlockAt and exec
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 18:08:48 +01:00
yoyosource
78f7e42629 Fix Permission
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 16:52:59 +01:00
D4rkr34lm
3dddb48d0c Adjusted more permissions
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 15:53:02 +01:00
yoyosource
37e6628aaa Fix SpectatorListener
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 15:12:16 +01:00
yoyosource
bcb8b31ba9 Add Permission.MEMBER
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 14:51:24 +01:00
D4rkr34lm
832484c2a2 Merge branch 'PermissionUpdate' of https://steamwar.de/devlabs/SteamWar/BauSystem2.0 into PermissionUpdate
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 14:49:01 +01:00
D4rkr34lm
7802a03f48 Addjusted permissions 2023-12-16 14:47:33 +01:00
yoyosource
20af36a4a2 Add SpectatorListener
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 14:42:01 +01:00
yoyosource
0cec90c55c Add validator for player and commandsender for checking build Permission
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 14:19:30 +01:00
yoyosource
0b70bdfe97 Fix Permission.SPECTATOR
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 14:05:58 +01:00
yoyosource
ec93dfd8ec Add Permission.SPECTATOR
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 14:04:46 +01:00
yoyosource
1a6c0de502 Update Permission
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-12-16 14:01:42 +01:00
yoyosource
b73af3e2ec Hotfix SimulatorStorage
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 12:48:52 +01:00
27627c3b41 Merge pull request 'SimRework2.0' (#216) from SimRework2.0 into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #216
2023-12-16 12:30:56 +01:00
4f592e754c Merge branch 'master' into SimRework2.0
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 12:29:50 +01:00
yoyosource
52fcb69e1e Optimize imports
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-16 12:27:33 +01:00
yoyosource
a0ff726fb4 Add several Anvil Guis
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix some lifetime and offset contraints for RedstonePhases
2023-12-15 19:56:59 +01:00
yoyosource
61282c0f84 Fix MaterialCommand triggering WorldEditListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-03 15:19:19 +01:00
yoyosource
1ed10c8c86 Fix SmartPlaceListener click on Comparator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-12-02 12:58:31 +01:00
D4rkr34lm
f94aeeda01 Added next link in tnt record
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-11-26 17:00:02 +01:00
yoyosource
4c7f56be7c Fix ColorCodes
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-11-18 20:29:41 +01:00
yoyosource
36e0c4c910 Fix NPE for Point convertion to Pos
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-11-17 18:18:55 +01:00
yoyosource
bdeb7da4c6 Add a few RegionLib getters
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add storage saving and loading
2023-11-17 18:14:16 +01:00
b58e418ea4 Changed Data Structure for TNTRecords and TNT tracking, to record update order properly 2023-11-10 15:49:12 +01:00
D4rkr34lm
979428d493 Added methods to record tnt to Recorder 2023-11-06 02:05:17 +01:00
D4rkr34lm
84150aadd2 Added getters to TraceManager 2023-11-06 01:20:59 +01:00
D4rkr34lm
32fb859764 Finished data part of Trace class 2023-11-06 00:56:02 +01:00
D4rkr34lm
b886745113 Finished data class for a tnt record 2023-11-06 00:45:32 +01:00
D4rkr34lm
27a542590c Started Trace Refactoring
Laid out basic class structure
2023-11-06 00:11:03 +01:00
yoyosource
fdc201e99d Add only similar elements inside of groups
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add delete to group gui and redstone and tnt
Rework SimulatorRedstoneGui
Add 'Make Group' option to SimulatorTNTGui
Fix Player Join server crash
Add 'Create Sim' to Select Simulator Gui
2023-10-28 23:14:35 +02:00
yoyosource
06a68a7004 Fix lore of sim item
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-28 09:56:24 +02:00
yoyosource
11fdd08f79 Fix some stuff and layout
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-27 21:08:02 +02:00
yoyosource
8fb4a4669a Fix source/target compatibility
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-27 17:55:13 +02:00
yoyosource
5686b6bc40 Fix source/target compatibility
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-27 17:50:33 +02:00
yoyosource
98455a29ce Fix source/target compatibility
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-27 17:48:02 +02:00
yoyosource
08839343c3 Fix SimulatorSettingsGui click on XYZ
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-27 17:43:59 +02:00
yoyosource
a0859923f0 Add SimulatorAnvilGui and add anvil gui's to everything
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-27 17:41:29 +02:00
yoyosource
b379f8457d Fix simulator double activation while tnt still present
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-27 16:46:56 +02:00
yoyosource
402de21c47 Add order to SimulatorRedstonePhaseSettingsGui
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-27 16:43:03 +02:00
yoyosource
c05724efda Update SimulatorExecutor and fix many bugs
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-27 16:34:54 +02:00
yoyosource
c050046820 Remove old and move new
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-27 11:55:47 +02:00
yoyosource
b49c75d6bd Add storage api and implement SimulatorStorage
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-26 22:31:30 +02:00
yoyosource
61d1f0bd45 Add loading and saving methods and fix many QOL things
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-26 18:08:03 +02:00
yoyosource
61f7218fc0 Add some QOL Simulator changes
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-25 23:03:59 +02:00
yoyosource
4ee93b59dd Fix AutostartListener for specific GameMode configs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-25 14:35:15 +02:00
yoyosource
21ec66b4e2 Fix many things
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-10-25 14:13:45 +02:00
yoyosource
20b116f228 Update many GUI's
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Add SimulatorCursor.onPlayerInteract
2023-10-24 23:05:16 +02:00
yoyosource
d09c3548a7 Add SimulatorStorage
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Add SimulatorCursor showing highlighted entity
2023-10-24 18:23:29 +02:00
yoyosource
c0551c0cf8 Fix SimulatorWatcher for non watched Simulator 2023-10-24 18:23:29 +02:00
yoyosource
648482183a Move some stuff and add SimulatorCursor 2023-10-24 18:23:29 +02:00
yoyosource
4e6ee3b95b Add SimulatorWatcher.show, SimulatorWatcher.hide 2023-10-24 18:23:29 +02:00
yoyosource
3506083416 Add SimulatorExecutor 2023-10-24 18:23:29 +02:00
yoyosource
834039c4d4 Consolidate Item Generation
Fix Back arrow in element gui
2023-10-24 18:23:29 +02:00
yoyosource
327dded73b Consolidate Item Generation
Fix Back arrow in element gui
2023-10-24 18:23:29 +02:00
D4rkr34lm
933e4fe7d9 Removed parent group from group chooser menu 2023-10-24 18:23:29 +02:00
yoyosource
f6ee55c44f Optimize SimulatorBaseGui 2023-10-24 18:23:29 +02:00
yoyosource
9ceb8b40ae Fix useless reopening in old versions 2023-10-24 18:23:29 +02:00
D4rkr34lm
647ef97bfb Add group chooser fix 2023-10-24 18:23:29 +02:00
aef8edca07 Add group choosing and creation 2023-10-24 18:23:29 +02:00
yoyosource
b090b31503 Finalize GUI 2023-10-24 18:23:29 +02:00
yoyosource
e47cf80d60 Finalize GUI 2023-10-24 18:23:29 +02:00
4eb3a310a7 Add sorting of phases 2023-10-24 18:23:29 +02:00
68f81c8c3e Add last Phase and option for adding phase
Refactored for coherent naming sceme
2023-10-24 18:23:29 +02:00
0f7c19da5a Add quick delete fo phases 2023-10-24 18:23:29 +02:00
b5a81eb6db Add rmoval of empty group 2023-10-24 18:23:29 +02:00
D4rkr34lm
6e39f3e92a Made some fixes 2023-10-24 18:23:28 +02:00
D4rkr34lm
1b2d19c31d Add call to tnt phase menu 2023-10-24 18:23:28 +02:00
D4rkr34lm
f067e55d1f Refactored PhaseGuis 2023-10-24 18:23:28 +02:00
D4rkr34lm
273fba879e Add Phase order upper limit 2023-10-24 18:23:28 +02:00
D4rkr34lm
420cf4a5b8 Finalize first gui version 2023-10-24 18:23:28 +02:00
D4rkr34lm
148761fa63 Add Subpixel alignment to SimTNTSettingGui 2023-10-24 18:23:28 +02:00
yoyosource
fbe4f00ac0 Add basic GUI's
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-24 18:23:28 +02:00
D4rkr34lm
7980f49dfa Add Licence header 2023-10-24 18:23:28 +02:00
D4rkr34lm
0f1a8f5531 Add final DataStructure 2023-10-24 18:23:28 +02:00
D4rkr34lm
077a9854a5 Add class Hierarchy 2023-10-24 18:23:28 +02:00
D4rkr34lm
44f6d1c15d Added new sim data structure 2023-10-24 18:23:28 +02:00
yoyosource
0be117c001 Hotfix AntiCursorReCentering
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-24 18:23:12 +02:00
yoyosource
758c32e353 Hotfix AntiCursorReCentering
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-24 18:12:03 +02:00
yoyosource
8f1cac6f1f Add AntiCursorReCentering
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-22 12:20:29 +02:00
yoyosource
5de070c90e Update Tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-22 12:07:52 +02:00
yoyosource
c330fdcc1d Fix PistonCalculator for normal Pistons
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-17 08:15:04 +02:00
yoyosource
40dcee6eee Fix Warp and Compass a bit
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-16 17:45:18 +02:00
yoyosource
04e7c5f565 Fix Simulator with tpslimit 0
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-16 17:10:13 +02:00
yoyosource
89e8148158 Fix Trace Show consolidating too early
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-16 17:04:18 +02:00
yoyosource
d281860b81 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-16 14:25:24 +02:00
yoyosource
05c01e25e2 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-16 14:12:33 +02:00
yoyosource
f0741dbc19 Hotfix BEEHIVE sound for SmartPlace
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-15 21:14:27 +02:00
yoyosource
e18b2622eb Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-15 18:37:31 +02:00
yoyosource
2b3f2a72d7 Fix SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-14 13:09:57 +02:00
yoyosource
8128aa7324 Fix PacketCache growing uncontrollably
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-10-14 12:27:14 +02:00
yoyosource
83a281b278 Update TPSLimit system to TPSSystem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Cleanup some mess from before
2023-10-11 15:35:02 +02:00
yoyosource
6197fd81c1 Hotfix PlaceItemUtils for Slab/Stairs/Trapdoor
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-08 12:07:27 +02:00
yoyosource
fcb1ce4e4b Hotfix PlaceItemUtils and Blackstone placing Walls in 1.19
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-07 21:05:01 +02:00
yoyosource
f82d5815ee Hotfix PlaceItemUtils
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix TraceCommand not having messages

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-07 08:34:22 +02:00
yoyosource
71f1a1244e Hotfix PlaceItemWrapper15
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-06 15:46:23 +02:00
yoyosource
3183d71478 Fix PlaceItemUtils in 1.19
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-06 15:26:47 +02:00
cf569d6e76 Merge pull request 'QOL' (#203) from QOL into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #203
2023-10-06 14:59:47 +02:00
yoyosource
cc8c6ba61d Fix SmartPlaceListener sound on force place
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-06 14:40:09 +02:00
yoyosource
b8c74db0f3 Fix PlaceItemUtils
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-05 21:21:24 +02:00
yoyosource
643486cfe5 Fix Depth
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-05 21:10:55 +02:00
yoyosource
1a93f2fc41 Add -water as for /trace show in WarShip regions
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-10-03 11:32:20 +02:00
yoyosource
8217e9645b Add TraceCommand.showAtCommand, TraceCommand.showFromCommand and TraceCommand.showFromToCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-27 11:44:01 +02:00
yoyosource
925ba19ff3 Fix PlaceItemUtils and SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-27 11:41:44 +02:00
yoyosource
c0b40d00a5 Fix PlaceItemUtils
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-27 11:19:20 +02:00
yoyosource
b1cd4604eb Fix -ignite -micro enable -water by default
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-26 12:39:42 +02:00
yoyosource
2f5eb080cf Fix PistonCalculator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-26 10:23:13 +02:00
yoyosource
910762126f Fix Off-Hand Item in Double Swap Hand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-26 09:52:54 +02:00
yoyosource
207953cb98 Add Material GUI click item to get into inv
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-26 09:42:54 +02:00
yoyosource
9982804a20 Update SmartPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix PlaceItemUtils

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-26 09:27:30 +02:00
yoyosource
898d6269e5 Fix SignEditFrom20
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add PlaceItemUtils

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-25 22:27:42 +02:00
yoyosource
8da3c7bcf7 Hotfix SignEditFrom20
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-24 18:10:09 +02:00
yoyosource
71c8b7c062 Add SignEditFrom20 for 1.20+
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Change SignEdit to SignEditUntil19 for <=1.19

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-24 18:05:01 +02:00
yoyosource
a0c7f024ad Fix Testblock paste
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-24 16:54:11 +02:00
yoyosource
cbe41f7e7f Fix DoubleF for Script System on higher TPS
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-24 15:36:10 +02:00
yoyosource
06cc2bb35b Fix testblock pasting
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-24 15:32:55 +02:00
yoyosource
b956f34a7e Show unmovable Blocks in PistonCalculator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-24 13:16:08 +02:00
yoyosource
c08bb9d702 Simplify tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-23 15:45:42 +02:00
yoyosource
33e070bc43 Finalize BindCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-23 14:39:56 +02:00
yoyosource
22334ab15a Finalize BindCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-23 14:35:23 +02:00
yoyosource
438010a7fb Fix ItemBindCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-22 23:18:24 +02:00
yoyosource
c0880fc62a Fix ItemBindCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-22 15:08:39 +02:00
D4rkr34lm
d810d50d22 Added Item Bind Command
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-09-21 21:42:53 +02:00
yoyosource
451c47d3ed Add TraceRecordAutoDeletion
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-20 17:14:34 +02:00
yoyosource
5abd29056b Fix BossbarLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-19 17:26:54 +02:00
yoyosource
b47210a5ae Hotfix PasteBuilder.removeWater
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-19 16:35:58 +02:00
yoyosource
110172a98a Fix Tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix BossbarLib

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-18 21:14:01 +02:00
yoyosource
292907b735 Fix TestblockCommand permission
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix XrayCommand destroy block on right click

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-18 17:26:44 +02:00
yoyosource
a59bf7345f Fix ShowModeParameterType exclusions
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-18 17:19:42 +02:00
yoyosource
952d2f03dc Add -testblockdestroy and -testblockdestroyonly as Trace Show options
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-18 17:18:27 +02:00
yoyosource
7cd8d40e11 Add /loader speed and /loader wait
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-18 16:36:33 +02:00
yoyosource
c20eb8c331 Add Last Wait in Loader to be 120 ticks
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-18 16:26:05 +02:00
yoyosource
f7cfe5d2bd Translate LoaderComparator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-18 16:22:18 +02:00
Chaoscaot
b59a4a637e
Fixes and BossbarLib draft
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-09-18 09:02:24 +02:00
yoyosource
23fba7074d Add TNTMode.ONLY_BUILD
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-17 16:37:20 +02:00
yoyosource
42e8df6b53 Remove Redstonetester since nobody uses it
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-17 16:20:27 +02:00
yoyosource
91960f501b Fix LoaderRecorder messages on BlockBreakEvent
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-17 16:14:52 +02:00
yoyosource
9c9d7bc533 Update AutoStart time since start now shown as game ticks
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-17 16:11:19 +02:00
yoyosource
adc394e660 Add LoaderTNT editing
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add more filter options
Add remove loader element on break block

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-17 16:03:51 +02:00
yoyosource
13afc55b1f Fix LoaderLectern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-17 13:56:03 +02:00
yoyosource
8ecb6e173f Update Loader usage and add copy
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-17 13:52:58 +02:00
yoyosource
bf2de904dc Fix AttributeRemoveCommand showing whole attribute instead of name
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add AutostartListener Chest capability
Update InfoCommand coloring
Add DesignEndStone recalc
Fix KillcheckerVisualizer area for double kills

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-16 22:55:14 +02:00
yoyosource
f2978a16c0 Fix Event priority of EntityExplodeEvent
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-15 17:37:43 +02:00
yoyosource
9e9c653aba Fix EventListener for TNT explosions in Build Region
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-15 17:32:09 +02:00
Chaoscaot
1da569c41b
Fix NoClip
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-09-10 20:56:14 +02:00
yoyosource
ce6c101df3 Remove color replace on BackupCommand.backupLoad
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-10 15:54:14 +02:00
c6a045fe94 Fix 30 Minute shutdown for empty server
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-09-08 08:55:03 +02:00
yoyosource
e2779ba107 Remove /arceon command
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-07 20:22:58 +02:00
yoyosource
ce1de0dfdf Add AxiomPermissionCheck
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-06 19:54:12 +02:00
yoyosource
6096d48a05 Add AxiomPermissionCheck
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-06 19:41:43 +02:00
yoyosource
db349c2a05 Optimize Laufbau performance
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-02 15:30:48 +02:00
yoyosource
6400e20bbb Fix Record lastVelocity calculation
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-02 12:11:22 +02:00
yoyosource
a8aa431210 Update AFKStopperListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-09-01 16:33:10 +02:00
yoyosource
85b383c596 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-08-31 17:15:06 +02:00
yoyosource
b434a406e0 Hotfix LoaderLever
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-31 17:01:41 +02:00
4ec83673cf Merge pull request 'UserPerm' (#201) from userPerm into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #201
Reviewed-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-08-30 12:09:05 +02:00
d3a49bbeb0 UserPerm
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-08-29 21:46:49 +02:00
yoyosource
0c6b1b7f68 Fix Simulator still shown after removing item from inventory
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-27 13:07:27 +02:00
yoyosource
ecc24470f6 Fix TNTSimulator still shown after removing from inventory
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-27 13:02:30 +02:00
yoyosource
56f7fddb0e Fix Loader convenience with creating NOOP's
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-27 12:54:04 +02:00
yoyosource
8e4b383655 Fix ShieldPrinting with Powerable, Openable, ... BlockData
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-27 12:23:44 +02:00
yoyosource
a0fe836616 Fix ItemsCommand in Local Region if Global is not enabled
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-26 11:56:56 +02:00
yoyosource
213667541c Remove LockSchemCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-25 21:50:02 +02:00
5897b1da75 Fix Noclip
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-08-25 21:07:56 +02:00
yoyosource
9af09f5863 Hotfix ShieldPrinting
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-24 17:23:03 +02:00
yoyosource
59caeca6f7 Add 1.20 support
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-20 15:57:02 +02:00
yoyosource
f6e71a03c1 Hotfix die letzte
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-20 15:37:46 +02:00
yoyosource
88e772896c Hotfix TNTPrimedIterator18
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-20 15:30:18 +02:00
yoyosource
11ce513ec2 Add TNTPrimedIterator 1.20 support
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-20 15:18:59 +02:00
yoyosource
4afaec91bb Hotfix WorldEditListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-19 23:50:03 +02:00
yoyosource
98b5b8605e Fix RegionLib in Gloal scripts
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-19 23:30:20 +02:00
dce679afa2 Merge pull request 'TestBlockPaste-Without-Water' (#146) from TestBlockPaste-Without-Water into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #146
2023-08-19 23:29:19 +02:00
eec5e97842 Merge branch 'master' into TestBlockPaste-Without-Water
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-08-19 23:29:10 +02:00
yoyosource
ed862ba6b2 Fix paste problems
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-19 23:25:52 +02:00
yoyosource
ca907a7478 Remove unused api and cleanup rest
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-08-16 21:19:12 +02:00
Chaoscaot
00dcfe3a49
Fix catches
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-08-02 12:51:01 +02:00
Chaoscaot
02c095a946
Fix Error Messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-08-02 12:42:55 +02:00
yoyosource
7f3c0d2fd0 Fix stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 21:14:12 +02:00
yoyosource
fc03ba67e5 Hotfix ResetCommand
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 21:04:07 +02:00
yoyosource
3e27a0b366 Update PasteBuilder and usages
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 21:02:33 +02:00
yoyosource
c398ad239d Merge branch 'master' into TestBlockPaste-Without-Water
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-30 17:39:30 +02:00
yoyosource
82b385e5ff Hotfix ScriptGUI removing script on pressing escape when naming
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 14:22:36 +02:00
yoyosource
a1c45b86af Update StorageLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 14:10:28 +02:00
yoyosource
b5e67bc576 Hotfix SCRIPT.md
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 14:04:33 +02:00
yoyosource
9ca83f02d9 Update StorageLib and add some utility functions
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 14:02:36 +02:00
yoyosource
13ec64a4fa Hotfix NPE in StorageLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 12:08:47 +02:00
yoyosource
bae39e2921 Hotfix punishments for ResetCommand and TestblockCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-30 11:55:51 +02:00
yoyosource
814a5f4364 Add PasteBuilder as the new alternative to pasting via region.reset
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-29 12:47:48 +02:00
yoyosource
b02eda9fe8 Fix TestblockCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-28 22:54:19 +02:00
yoyosource
ad55b25cf0 Fix TestblockCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-28 22:16:55 +02:00
zOnlyKroks
8a01394092 Make things actually build
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-28 21:52:07 +02:00
zOnlyKroks
86df9ceef6 Merge branch 'master' into TestBlockPaste-Without-Water
# Conflicts:
#	BauSystem_Main/src/de/steamwar/bausystem/features/region/TestblockCommand.java
2023-07-28 21:47:57 +02:00
zOnlyKroks
d8b93e976f Implement Testblock Command
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-28 21:41:56 +02:00
Chaoscaot
6ab820ad71
Fix docs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-28 14:59:36 +02:00
Chaoscaot
c3f75cdc2a
Fix typo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-28 14:57:48 +02:00
Chaoscaot
bdd437eebd
Add Inventory notice and fix region.get
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-28 14:57:32 +02:00
Chaoscaot
531fb013aa
Add List
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-28 14:50:03 +02:00
Chaoscaot
b1e376d47f
Add region.get()
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-28 14:41:42 +02:00
Chaoscaot
3584b83b28 „SCRIPT.md“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-28 10:52:32 +02:00
yoyosource
3c30f57e08 Hotfix Exceptions in InventoryLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-28 10:46:09 +02:00
zOnlyKroks
edfc331d03 Use parameters
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-27 15:43:55 +02:00
zOnlyKroks
9ad455ea2d fix logic flaw
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-27 01:09:52 +02:00
zOnlyKroks
1fe2394e01 Add option for tnt less pasting
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-27 01:08:55 +02:00
Chaoscaot
9003884dad
Schei¿ Encoding
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-26 23:12:19 +02:00
8ebef6d097 Merge pull request 'NoSchemSharing bug fix' (#193) from NoSchemSharingWithTestBlock into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #193
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-07-26 20:44:34 +02:00
542adab804 Merge pull request 'Add Definitions for Luanalysis' (#192) from defs into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #192
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-07-26 20:42:48 +02:00
zOnlyKroks
69347e652f Fix formatting
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-26 19:40:15 +02:00
zOnlyKroks
d4c38367c7 Add import
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-26 18:51:50 +02:00
zOnlyKroks
966a7336e1 Unscrew intellij
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-26 18:50:56 +02:00
zOnlyKroks
65f11dc917 Fix yet another typo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-26 18:10:02 +02:00
zOnlyKroks
6afc5f3e81 Fix typo
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-26 18:08:43 +02:00
zOnlyKroks
3e703c8b06 No Schem Receiving
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-26 18:07:30 +02:00
fdd579af5a Merge branch 'master' into NoSchemSharingWithTestBlock
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-26 13:57:25 +02:00
zOnlyKroks
040f0373c8 Implement Punishment Check in ResetCommand
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-26 13:55:45 +02:00
zOnlyKroks
361d96ddf3 Fix import
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-26 13:49:53 +02:00
Chaoscaot
df882e3382
Fix Docs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-26 13:03:41 +02:00
Chaoscaot
de2a393bf8 Merge branch 'master' into defs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-26 13:02:08 +02:00
zOnlyKroks
37559ca688 Fix spelling and logic
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-07-26 12:15:33 +02:00
Chaoscaot
f53f0cedd9
Fix Docs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-26 11:15:45 +02:00
Chaoscaot
a1880a61e9
Cleanup Defs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-26 11:11:12 +02:00
Chaoscaot
040b25d601
Add Copyright
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-26 01:04:33 +02:00
Chaoscaot
f9c61808bb
Add Definitions for Luanalysis
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-26 01:02:07 +02:00
Chaoscaot
9d644782a8
Hotfix: Add Better Inventory item() Function
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-26 00:40:52 +02:00
1e2522af12 Merge pull request 'Add InventoryLib' (#191) from inventory_api into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #191
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-07-24 17:14:35 +02:00
Chaoscaot
60b3916ae7 „SCRIPT.md“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-24 14:00:05 +02:00
Chaoscaot
b2a770353e
Moar Docs
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-24 11:31:50 +02:00
Chaoscaot
e8f90cb400
Add InventoryLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-23 22:35:47 +02:00
yoyosource
1ece69a6e2 Fix IncompleteRegionException for ColorReplaceCommand and TypeReplaceCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-22 15:50:19 +02:00
yoyosource
27798df7ce Hotfix Loader Bau slowdowns and crashes
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-22 14:30:32 +02:00
yoyosource
5f7f11bf87 Add some utility functions
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-20 17:07:09 +02:00
yoyosource
532c722636 Fix documentation
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-20 16:31:44 +02:00
yoyosource
6bb9900646 Closes: #185
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add RandomLib

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-20 16:29:48 +02:00
yoyosource
5f9d3b1e5b Fix SCRIPT.md
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-20 11:18:51 +02:00
yoyosource
fd1e021e80 Update scoreboard and fix ITEMS Flag
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-20 09:21:38 +02:00
yoyosource
0b992a5663 Hotfix player lib and world edit lib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-19 22:46:20 +02:00
yoyosource
8fe93d39a6 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-19 22:00:49 +02:00
yoyosource
d36945c217 Hotfix yaw and pitch in PlayerLib
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-19 22:00:41 +02:00
404baf148b Merge pull request 'Add StorageLib' (#184) from storage into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #184
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-07-19 20:48:24 +02:00
Chaoscaot
aa0594fa6c
Add StorageLib
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-19 20:42:09 +02:00
yoyosource
bb133b8d7d Hotfix DoubleSwap and DebugStick
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-17 21:01:50 +02:00
yoyosource
93267d22a1 Fix documentation
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-17 20:23:58 +02:00
yoyosource
9207d3c966 Fix command stack overflow
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-17 20:14:38 +02:00
yoyosource
abc053bf8b Clean up some internal stuff
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-17 20:02:41 +02:00
yoyosource
a5932ac9d8 Hotfix PlayerInteract.getHand() null value
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-17 19:53:46 +02:00
yoyosource
611d7e978b Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-17 17:42:01 +02:00
yoyosource
32dcc8e7b4 Hotfix die zweite
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-17 17:41:06 +02:00
Chaoscaot
73e1ef75ab
Fix WE-Axe
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-17 17:33:58 +02:00
yoyosource
b93c743969 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-17 17:24:42 +02:00
yoyosource
e7a80981bb Fix FAWE exec()
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-17 17:24:30 +02:00
Chaoscaot
5f0ac969d5
Throw on global methods in local
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-17 17:22:10 +02:00
Chaoscaot
d606c01bdf
Add Length Method
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-17 17:16:18 +02:00
Chaoscaot
586e94d50a
Fix Error Messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-17 16:57:39 +02:00
9598838d2e Merge pull request 'Script System Lua' (#178) from lua into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #178
2023-07-17 16:44:03 +02:00
445b85cfaa Merge branch 'master' into lua
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-17 16:42:49 +02:00
yoyosource
9062bc698e Hotfix LaufbauState
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-16 21:25:43 +02:00
yoyosource
65e425ebdb Hotfix KillcheckerVisualizer bossbar progress
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-07-16 21:18:25 +02:00
74f7653a58 „SCRIPT.md“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-07-16 20:04:22 +02:00
Chaoscaot
706eb17362 Fixing...
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-07-01 13:40:52 +02:00
yoyosource
4b4b623fee Hotfix NPE in FreezeListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-26 20:59:31 +02:00
yoyosource
6c6b17eb30 Fix tpslimit 0 with all necessary features
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-20 17:56:26 +02:00
yoyosource
a317891685 Auto reshow on MicroMotion
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-18 18:42:11 +02:00
yoyosource
65cf7ffe77 Auto reshow on MicroMotion
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-18 18:20:21 +02:00
yoyosource
8ef7bafa22 Fix MicroMotion detector in Trace
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-18 17:58:52 +02:00
yoyosource
1b28b377e2 Add ShowModeParameterType.MICROMOTION
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-18 17:19:00 +02:00
yoyosource
949f7d1aeb Fix some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 20:09:02 +02:00
yoyosource
1337ec8ddf Update load usage calculation
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 18:18:45 +02:00
yoyosource
9a4aa3281a Remove load calculation
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 17:47:13 +02:00
yoyosource
b52283afa3 Update and hopefully fix the persisting issue
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 17:13:46 +02:00
yoyosource
a950640aae Disable System.out messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 12:18:51 +02:00
yoyosource
4d4e13ad53 Fix timeout
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 11:47:32 +02:00
yoyosource
c8fb4ffde1 Add some debug infos
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 11:47:12 +02:00
yoyosource
8f1fa7c2d6 Hotfix LoaderLever
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-17 11:17:54 +02:00
yoyosource
567f88c916 Update RamUsage
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-16 19:40:09 +02:00
yoyosource
8a5c3b1647 Add unlimited TPS and better AFKStopperListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-15 22:49:38 +02:00
yoyosource
e01d551a21 Update LoaderMovement
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-14 17:12:09 +02:00
yoyosource
c786850e46 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-06-14 17:03:37 +02:00
yoyosource
3d4468ef8c Add Tracer to global Region
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-14 17:03:29 +02:00
0ebfaae4c1 Fix typo
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-06-13 22:34:58 +02:00
yoyosource
5d56f4238d Add ShieldPrinting help messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-06-12 21:43:42 +02:00
Chaoscaot
ce389ca881 Fixing...
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-06-07 21:52:21 +02:00
Chaoscaot
70c9bb1d06 Fixing...
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-06-07 21:51:43 +02:00
Chaoscaot
5a09ece591 Fixing...
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-06-07 21:46:38 +02:00
Chaoscaot
29851ca4ca Fixing...
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-06-06 17:40:37 +02:00
Chaoscaot
43cecb54e3 Add WorldEditLib and Script Preview
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-05-28 00:59:06 +02:00
acb84b2729 Merge pull request 'Add Gradle Plugin' (#179) from gradle_plugin into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #179
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-05-21 21:29:57 +02:00
Chaoscaot
85a8dae7a9 Add Gradle Plugin
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-05-21 20:40:40 +02:00
Chaoscaot
900bbb0aec Add default ff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-05-21 14:55:46 +02:00
Chaoscaot
bf2e1c694d Fix UnsignCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-05-21 13:45:07 +02:00
Chaoscaot
dd69f7ba83 Add Cancelable Events
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-05-21 13:33:45 +02:00
Chaoscaot
96b37e1df1 Update Docs and some fixes
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-05-21 13:02:15 +02:00
Chaoscaot
2d8056883c Update Docs and Add Global GUI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: Chaoscaot <chaoscaot@zohomail.eu>
2023-05-21 11:27:36 +02:00
Chaoscaot
edd44c172c Add Hotkeys
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-05-19 20:12:52 +02:00
Chaoscaot
95f0625031 Add Copyright
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-05-19 19:34:45 +02:00
Chaoscaot
16a6d10472 Script System Lua
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Todo:
* /script and global script storage
* Code Cleanup
2023-05-19 19:29:38 +02:00
yoyosource
072833f503 Fix TPSLimit Freeze
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-13 11:09:28 +02:00
yoyosource
6b395bde17 Remove help
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-10 21:03:28 +02:00
yoyosource
d2473ee72f Add global ItemsCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-10 20:59:42 +02:00
yoyosource
911f91a570 Fix messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-09 21:10:52 +02:00
yoyosource
d715a6a066 Hotfix BauInfoBauGuiItem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-09 19:56:41 +02:00
yoyosource
76631908f0 Add Flag.ITEMS for 1.19 server and up
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-09 19:45:27 +02:00
a573836bd6 Merge pull request 'LoaderRework' (#175) from LoaderRework into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #175
2023-05-09 18:31:41 +02:00
yoyosource
f6357c2a37 Fix package name
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-09 18:31:03 +02:00
yoyosource
f4e98ca95a Add all translations
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-09 18:28:53 +02:00
yoyosource
7c9c27ae3e Update LoaderDaylightDetector
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-09 17:19:27 +02:00
yoyosource
07abd7a1e7 Merge branch 'master' into LoaderRework 2023-05-09 17:04:32 +02:00
yoyosource
7785bb4c11 Reenable item
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-09 16:44:21 +02:00
yoyosource
989bb1f1d5 Merge branch 'master' into LoaderRework
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-05-09 15:59:25 +02:00
3c7168494f Fix TPS Warp inversion
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-05-09 11:42:39 +02:00
a80770f5d3 Removing 1.15 only TPSWarp limiter...
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-05-09 11:25:47 +02:00
yoyosource
a73372a406 Update some more messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-07 22:36:33 +02:00
yoyosource
be33184cfe Update some gui texts
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-07 01:50:56 +02:00
yoyosource
bb654018d6 Update some multilingual stuff for Loader and LoaderCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-07 01:43:28 +02:00
yoyosource
55a720eb43 Remove unused translations
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-05 17:15:10 +02:00
yoyosource
ac2900c080 Add Loader setWaitBetween TNT and setGlobalWait
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-05 17:07:55 +02:00
yoyosource
6e82b57fbf Fix some stuff and add lores
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-05 16:51:14 +02:00
yoyosource
823e6e5534 Update scoreboard
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 20:17:30 +02:00
yoyosource
40ba9b838e Fix LoaderMovement
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 18:10:32 +02:00
yoyosource
b1dcd6d57b Update Loader and fix many things
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 18:00:54 +02:00
yoyosource
792f16fadf Update Loader
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 17:13:15 +02:00
yoyosource
7e78c2890a Update loader and remove old one
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 16:59:06 +02:00
yoyosource
88c015f7f9 Merge branch 'master' into LoaderRework
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-05-01 16:41:22 +02:00
yoyosource
35f882c123 Update Loader
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 16:39:00 +02:00
7fae86d2d4 Merge pull request 'BetterScoreboard' (#174) from BetterScoreboard into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #174
2023-05-01 15:06:41 +02:00
yoyosource
d0ab735bbf Hotfix stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 15:06:15 +02:00
yoyosource
043b3860a0 Add better Scoreboard building
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 14:30:29 +02:00
yoyosource
c320f92ea3 Update BauScoreboard design
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 12:34:22 +02:00
yoyosource
e997243887 Update LoaderRecorder
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 12:20:24 +02:00
yoyosource
b4d63e1fe9 Add reworked Loader
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-05-01 00:04:14 +02:00
f90a54728b Merge pull request 'SkullCommand' (#172) from SkullCommand into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #172
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-04-30 14:25:03 +02:00
528b441f46 Merge branch 'master' into SkullCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-30 14:23:05 +02:00
8bc2fda2ba „BauSystem_Main/src/de/steamwar/bausystem/features/loader/Loader.java“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-30 14:22:59 +02:00
3abeffd8b3 Merge pull request 'Fixed Issue #110 Loader bugt bei Strings' (#173) from psilab into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #173
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-04-30 14:22:20 +02:00
154d6fd08e Merge branch 'master' into psilab
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-30 14:20:59 +02:00
f1925dc366 „BauSystem_Main/src/de/steamwar/bausystem/features/loader/Loader.java“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-30 14:20:37 +02:00
yoyosource
4dafaab5d9 Update TNTSimulator.edit to better reflect interactability
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-30 12:39:11 +02:00
yoyosource
c3838138b4 Fix DesignEndStone
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-29 14:19:05 +02:00
yoyosource
a767a942fb Add DesignEndStone or DesignEndStoneCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add Line for BauScoreboard to show XRay and TechHider

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-29 11:49:27 +02:00
yoyosource
b494f0bf3a Hotfix Tracer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-24 16:24:31 +02:00
d625260fbe Merge branch 'master' into psilab
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-21 19:53:27 +02:00
5019f79b67 Merge branch 'master' into SkullCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-21 18:49:37 +02:00
PsiRobot
740d3cfb95 Fix SkullCommand for Bedrock
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-21 16:45:24 +00:00
yoyosource
37b76eff30 Add ShowModeParameterType.TICKS_SINCE_START
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-19 18:08:36 +02:00
yoyosource
7be2934e89 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-19 13:38:57 +02:00
yoyosource
3786f1e2bb Add sand shield printing tracking
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-19 13:38:00 +02:00
da0a53d636 Merge pull request 'Added new Buttons to Loader' (#171) from Button-Fix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #171
Reviewed-by: Lixfel <lixfel@steamwar.de>
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2023-04-18 13:06:33 +02:00
377bcb92fb Generalized LoaderButton assignment
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-04-18 11:55:30 +02:00
ad4a054a63 Added new Buttons to Loader
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Detonator not nescessary since detection works differently
2023-04-18 11:46:58 +02:00
yoyosource
f991992528 Fix stoplag for ShieldPrinting.apply
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-16 17:39:51 +02:00
yoyosource
a15e5aaf50 Remove some memory
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-16 17:07:40 +02:00
yoyosource
61895377d1 Hotfix RegionedBossbar
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-16 16:56:05 +02:00
yoyosource
48b2a87c96 Fix ShieldPrinting
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-16 16:53:58 +02:00
yoyosource
e9d7c8211f Add ShieldPrinting
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-16 12:11:43 +02:00
yoyosource
3f5f4d7b80 Remove tnt flicker
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-16 11:26:09 +02:00
yoyosource
3c1275393f Hotfix Memory Leak
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-14 18:45:00 +02:00
yoyosource
e60ae56b67 Fix TPSLimit 0
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-14 18:43:59 +02:00
yoyosource
cfd625c6f0 Remove sout
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-13 19:52:56 +02:00
yoyosource
b8a27294fc Possibly fix ScriptExecutor
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-04-04 18:33:36 +02:00
PsiRobot
3f4f237d63 Fixed Issue #110 Loader bugt bei Strings
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-03-23 22:27:51 +00:00
yoyosource
36532ccd5d Fix divide by Zero
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-19 14:24:42 +01:00
yoyosource
66b601bbfd Fix SIOOBE for Substring
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-19 14:22:43 +01:00
yoyosource
e2a2344c89 Add DragonEggCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-19 14:19:28 +01:00
yoyosource
d6c9e8f827 Hotfix Xray
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-19 14:14:08 +01:00
yoyosource
fa906f7f4f Hotfix Xray
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-19 14:11:09 +01:00
a916b44a21 Merge pull request 'Add CuboidColorization filter option' (#167) from KillcheckerImprovements into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #167
2023-03-15 21:13:53 +01:00
7ea2ef694e Merge branch 'master' into KillcheckerImprovements
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-03-15 21:10:11 +01:00
yoyosource
0061bf7707 Add another help message
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-15 21:05:33 +01:00
yoyosource
ca730f7b8f Fix NPE of KillcheckerVisualizer.hide
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-15 20:59:34 +01:00
yoyosource
b902fffb76 Move visualization outside of build area
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-15 18:36:36 +01:00
yoyosource
b75d7c278a Finalize Killchecker and include BauSystem Bossbar API for better Bossbar usage
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-15 18:09:13 +01:00
yoyosource
ca338699fa Hotfix If
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-14 18:23:52 +01:00
yoyosource
8e133f0832 Probable fix for SelfJoin Event
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-13 20:58:53 +01:00
yoyosource
0e17679fab Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-03-12 21:05:03 +01:00
yoyosource
69b31483f4 Fix -builddestroyonly Trace option
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-12 21:04:56 +01:00
519c832c9d Hotfix NMSWrapper19
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-03-11 17:04:22 +01:00
yoyosource
e7d5cee75a Hotfix NPE
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-09 21:20:52 +01:00
yoyosource
3e3415e9ca Update some visuals, still needs to be multilingualed
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-08 21:56:25 +01:00
yoyosource
4b3b8691b5 Finalize everything
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add Cuboid for killchecker

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-08 21:02:32 +01:00
yoyosource
22b3da59e8 Update Killchecker
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-08 19:04:54 +01:00
yoyosource
d4727d5ed9 Add CuboidColorization filter option
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-08 07:43:22 +01:00
yoyosource
106a1a8fb0 Hotfix TNTElement alignment
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Author: PSIRobot

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-06 21:17:42 +01:00
yoyosource
ae1e10ecc6 Remove unused code
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-05 11:07:50 +01:00
yoyosource
43f1ecc985 Revert "Hotfix everything that does not work"
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
This reverts commit 4cfd7402a4.
2023-03-03 17:10:45 +01:00
yoyosource
4cfd7402a4 Hotfix everything that does not work
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-03 17:04:21 +01:00
yoyosource
91255be757 Hotfix NoClipCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-03 16:34:40 +01:00
yoyosource
b6730eca0e Hotfix NoClipCommand
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-03-03 16:31:13 +01:00
2d8b9defaa Merge pull request 'Add 1.19.3 support' (#149) from 1.19.3 into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #149
Reviewed-by: Lixfel <lixfel@steamwar.de>
2023-03-03 16:20:31 +01:00
yoyosource
9e31f05d83 Add /sl as alias for FreezeCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-28 16:51:17 +01:00
yoyosource
de067103cb Hotfix AttributeRemoveCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-27 20:27:30 +01:00
yoyosource
d9385691e4 Hotfix clear simulator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-25 15:16:03 +01:00
yoyosource
5d1fb567ef Fix alignment the second time
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-25 15:12:49 +01:00
yoyosource
1086808cf0 Fix some NPE's
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-25 14:29:26 +01:00
yoyosource
2dd5e16bda Fix alignment
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-25 13:58:42 +01:00
yoyosource
599d717602 Add darkness skins back
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-25 13:27:33 +01:00
ce41f817da Merge pull request 'Remove yellow color replace' (#150) from StreamlineColorReplace into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #150
2023-02-25 13:11:29 +01:00
yoyosource
dbde27d66b Add 1.19.3 support
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-25 09:55:49 +01:00
yoyosource
d3609dd2a0 Remove yellow color replace
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 22:13:34 +01:00
yoyosource
20e30627dd Remove sout
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 21:59:40 +01:00
yoyosource
fb920902f0 Hotfix the last one
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 21:59:28 +01:00
yoyosource
137bf5eeca Hotfix some more stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 21:40:43 +01:00
yoyosource
fce5b9c493 Hotfix some more stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 21:39:00 +01:00
yoyosource
7ab25a6ddb Hotfix TNTSimulator other sim stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 21:09:14 +01:00
yoyosource
73bdfe28f1 Hotfix TNTSimulator.remove
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 20:54:29 +01:00
ce8b4d8fa9 Merge pull request 'REntity' (#148) from REntity into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #148
Reviewed-by: Lixfel <lixfel@steamwar.de>
2023-02-24 20:31:33 +01:00
yoyosource
162e3f16b7 Fix TNTSimulatorGui
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 20:30:04 +01:00
yoyosource
070a58651b Last Hotfixes
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 20:25:27 +01:00
yoyosource
f149ccce93 First buildable version
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 18:03:57 +01:00
yoyosource
0f69d4acb1 Update some code
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 17:50:53 +01:00
yoyosource
a8b3410749 Update simulator internals to use REntityServer
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-24 09:36:03 +01:00
yoyosource
cc2668a49b Remove unused RayTraceUtils
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 18:13:53 +01:00
yoyosource
81df1e02be Fix NMSWrapper imports
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 18:12:31 +01:00
yoyosource
74d8f008a3 Remove entity creation methods
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 18:09:19 +01:00
yoyosource
fe82e38a0d Add Detonator click back
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 17:58:29 +01:00
yoyosource
bb5312ee92 Add TraceTNTClickListener back
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 17:54:14 +01:00
yoyosource
75b822ece1 Fix KillcheckerVisualizer
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 17:40:57 +01:00
yoyosource
c2ab476c22 Update Detonator
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Update some part or simulator

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 15:54:46 +01:00
yoyosource
9bf04d3093 Add REntity RayTrace
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-23 11:26:04 +01:00
yoyosource
da431752b3 Merge branch 'master' into REntity
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-23 10:54:03 +01:00
yoyosource
b2ddc1ef2d Add KillcheckerCommand and KillcheckerVisualizer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-22 18:52:30 +01:00
BuildTools
2f66580e60 sollte jetzt klappen, ich werde versuchen mehr in die devlabs rein zuschauen
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-18 13:41:02 +01:00
BuildTools
5d55784f79 sollte jetzt auch mit waterlogged blocks gehen
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-16 21:53:52 +01:00
yoyosource
1352b5eab7 Update stome stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-10 16:10:47 +01:00
BuildTools
55a63dacaf es kann sein das da was fehlt, da ich mit den commits durcheinander gekommen bin
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-06 21:38:12 +01:00
BuildTools
4bae6b8d43 finally working waterremover when doing /tb idk
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-06 09:37:34 +01:00
yoyosource
11593c6aa8 Fix some trace errors
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-05 12:24:34 +01:00
yoyosource
cb474ea75b Fix some trace errors
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-04 21:52:22 +01:00
yoyosource
b4f4a2fe13 Update tracer to REntityServer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Update warp to REntityServer

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-04 14:31:24 +01:00
BuildTools
5c8b70fc12 added check if it actually is a tb
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-04 12:15:45 +01:00
BuildTools
d2a3483d31 added check if it actually is a tb 2023-02-04 12:12:10 +01:00
BuildTools
cdc0dbea86 fixed mistake 2
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-04 11:56:52 +01:00
BuildTools
3d8a6e95fa fixed mistake
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-04 11:54:37 +01:00
BuildTools
8a425cc435 Prevent Water from being pasted using /tb <schem>
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-02-04 11:26:50 +01:00
yoyosource
41391df882 Update tracer to REntityServer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-02-03 19:20:34 +01:00
yoyosource
6e56ecdc99 Add Permission.Perm
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-19 16:57:23 +01:00
MoBrot
50d4e7ef2f NoSchemSharing with Testblock Fix.
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2023-01-18 16:35:33 +01:00
yoyosource
8b97ea0383 Fix LaufbauState
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-17 18:13:32 +01:00
yoyosource
ff6970deba Hotfix DefaultHotbar
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-17 16:04:48 +01:00
yoyosource
558da3b6a0 Hotfix Substring
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-17 16:01:57 +01:00
yoyosource
79137e14b2 Fix 0 and null because it is expected behaviour and not used!
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-16 16:43:10 +01:00
yoyosource
418fbd9aa4 Fix 0 and null because it is expected behaviour and not used!
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-16 16:42:30 +01:00
yoyosource
629bf2edfe Fix 0 and null because it is expected behaviour and not used!
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-16 16:41:47 +01:00
yoyosource
fa0f80f36f Remove deprecated code usage from CommandAPI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-15 20:48:09 +01:00
yoyosource
7ac5240289 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-01-15 20:39:24 +01:00
yoyosource
46b9239801 Remove deprecated code usage from CommandAPI
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-15 20:39:09 +01:00
756d749fa3 Adapt CI config to new CI
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2023-01-15 12:28:09 +01:00
yoyosource
8cfc7bda85 Hotfix MaterialCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-14 18:04:29 +01:00
yoyosource
ab32dbd1ff Add prototypes19.yapion, regions19.yapion
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-12 22:21:58 +01:00
yoyosource
3975a7cf63 Fix SkinCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-12 10:10:49 +01:00
yoyosource
7ce2cb1595 Fix SkinCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-11 22:50:36 +01:00
yoyosource
e6ae92bfa4 Add BoundaryViewer
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add first prototypes19.yapion (AS still missing)
Add first regions19.yapion (AS still missing)

Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-11 22:41:39 +01:00
yoyosource
54b17fa62d Fix name constant
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-07 11:06:24 +01:00
yoyosource
0c4fa56a83 Fix Expression
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2023-01-05 08:18:52 +01:00
yoyosource
2e9b578e9f Fix techhide hide message
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-28 16:39:21 +01:00
yoyosource
d0dab38d55 Fix various WorldEdit stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-28 16:34:40 +01:00
yoyosource
54b34bbfae Update script structure
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-28 16:09:05 +01:00
yoyosource
162fbbaa0c Add EventType.Scoreboard
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add more Constants

Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-28 14:23:17 +01:00
yoyosource
1bfcb55d35 Merge branch 'ScriptEditor'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-28 12:01:16 +01:00
yoyosource
4a55af680d Hotfix CreatingLaufState and BlockBoundingBox
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-27 19:50:14 +01:00
yoyosource
e9c7d6cf07 Initial draft ScriptEditor
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-25 00:24:43 +01:00
yoyosource
675d0d616e Fix script calling other command without expression replacement
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-25 00:14:50 +01:00
yoyosource
77e38d6d99 Fix getMaterial and setMaterial
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-24 13:31:00 +01:00
yoyosource
514f771dfd Fix if command for scripts
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-24 12:07:24 +01:00
yoyosource
187c2a68d0 Fix panzern and laufbau undon
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 23:22:10 +01:00
yoyosource
f7440af50a Hotfix ScriptExecutor
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 23:02:38 +01:00
yoyosource
1058a49f1f Fix variable resolution order
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 22:52:11 +01:00
yoyosource
397de5e08a Update messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 22:16:41 +01:00
yoyosource
c2eb369163 Add Hotkeys
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 22:10:58 +01:00
yoyosource
766a3aef51 Add hotkeys
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 21:08:16 +01:00
yoyosource
e1fc5525ec Fix TeleportCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 19:17:37 +01:00
yoyosource
3465956c4f Fix EqualOperator and NotEqualOperator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-12-23 19:15:47 +01:00
yoyosource
cef0111fdf Fix ScriptExecutor for WorldEdit commands
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add new expression system
2022-12-23 18:42:40 +01:00
yoyosource
28424698d6 Add numbers to Simulator name whitelist
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-21 21:03:16 +01:00
yoyosource
3ccdec1141 Update Checkerboard3DMask
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-18 10:42:54 +01:00
yoyosource
807a3fddaf Fix build.gradle
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-18 10:31:55 +01:00
yoyosource
c0972b312e Fix build.gradle
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-18 10:28:55 +01:00
yoyosource
0cf4de14ad Fix build.gradle
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-18 10:26:40 +01:00
yoyosource
e668ea01ea Fix SelectCommand
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-18 10:20:33 +01:00
yoyosource
a9d06fbe84 FAWEMaskParser_GENERIC.java
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2022-12-18 10:14:08 +01:00
yoyosource
0a11fca681 Add some Masks and Patterns to FAWE
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2022-12-17 22:46:37 +01:00
yoyosource
8b62559547 Fix ColorReplaceCommand and TypeReplaceCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-17 12:07:54 +01:00
yoyosource
d31d8b7b01 Add /ac command as aliases to AttributesCopyCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-15 20:05:06 +01:00
yoyosource
5a7a435b9a Update prototypes4.yapion and regions4.yapion
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-15 16:14:35 +01:00
yoyosource
3a28f5c42f Hotfix AttributesCopyCommand and AttributesPlaceListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-09 22:14:09 +01:00
yoyosource
6a52a319ab Hotfix MultipleFacingAttribute and AttributesPlaceListener and AttributesCopyCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-09 20:24:48 +01:00
yoyosource
e7e714f8ee Hotfix RedstoneWireAttribute and RepeaterAttribute
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-09 20:00:06 +01:00
yoyosource
6d298e1dec Hotfix WallAttribute
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 21:18:30 +01:00
yoyosource
0b633fc8fe Hotfix WallAttribute
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 21:18:05 +01:00
yoyosource
d5ab00c2c2 Hotfix AttributesCopyCommand.isSame
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 21:02:01 +01:00
yoyosource
fd98aa1b69 Hotfix StairsAttribute
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 20:50:08 +01:00
yoyosource
b90facb7d7 Hotfix RedstoneWireAttribute
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 20:46:03 +01:00
yoyosource
2b959228db Hotfix AttributeRemoveCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 20:38:58 +01:00
yoyosource
9c788a27d6 Hotfix AttributeRemoveCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 20:34:42 +01:00
yoyosource
75ba8813d3 Add attributes copy feature
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-12-08 20:21:51 +01:00
yoyosource
8100667da5 Fix some rotate behaviour
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-11-22 15:50:23 +01:00
635d235a87 „BauSystem_Main/src/de/steamwar/bausystem/features/util/TeleportCommand.java“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-11-21 07:29:35 +01:00
yoyosource
248c3a17c6 Update AutoShutdownListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-11-20 12:40:18 +01:00
4e6fa7cd42 Merge pull request 'Adapt to CommonDB' (#139) from commonDB into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #139
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2022-11-12 15:33:33 +01:00
472b6a3a47 Merge branch 'master' into commonDB
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-11-12 15:32:06 +01:00
532de2291d Merge pull request 'BauGUI (Editor) Improvements' (#142) from gui_improvements into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #142
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2022-11-12 12:03:05 +01:00
a00a23fed5 Merge branch 'master' into gui_improvements
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-11-12 12:02:10 +01:00
yoyosource
18319e99fb Fix some messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-11-12 12:01:05 +01:00
Chaoscaot
6d7d517835 Add Schematic GUI Bau GUI Item
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-11-12 08:59:32 +01:00
Chaoscaot
98201061d3 Add Close Button 2022-11-12 08:52:11 +01:00
Chaoscaot
06c2810061 Fix: Typo 2022-11-11 19:36:05 +01:00
5242730878 Merge branch 'master' into commonDB
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
# Conflicts:
#	BauSystem_Main/src/de/steamwar/bausystem/features/world/ClipboardListener.java
2022-10-29 12:30:50 +02:00
yoyosource
23ded823f0 Fix coral death while freeze is active
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-24 17:25:00 +02:00
yoyosource
9275fd552c Add unmoveable flag for MaterialCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-24 17:06:02 +02:00
yoyosource
566c612327 Add TNTPrimedIterator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-24 16:40:08 +02:00
yoyosource
4f2a6a70c4 Possible optimization of trace recorder
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-16 18:12:51 +02:00
yoyosource
9bb4cf548b Hotfix Recorder NPE
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-13 17:12:03 +02:00
yoyosource
fca07eba75 Fix laufbautool
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-09 21:13:22 +02:00
yoyosource
a57cd0287a Update custom model data
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-09 13:35:16 +02:00
yoyosource
f944fbd8cd Hotfix recorder
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-05 16:10:39 +02:00
yoyosource
f2ef3c4634 Hotfix recorder
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-05 15:58:16 +02:00
yoyosource
e7bda055b8 Hotfix weird trace show behaviour when cleared
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-04 17:12:59 +02:00
2b4cd8731d „BauSystem_Main/src/de/steamwar/bausystem/features/tracer/record/Recorder.java“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-10-04 15:50:21 +02:00
yoyosource
95af58e60e Hotfix isolated tnt
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 21:45:59 +02:00
yoyosource
7c79b47d61 Hotfix memory leak
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 21:38:05 +02:00
yoyosource
31f04ef07b Add trace ShowModeParameterType.BUILD_DESTROY_ONLY
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 21:24:23 +02:00
yoyosource
5e9b11d140 Add trace replay loop
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 21:05:18 +02:00
yoyosource
b0690d28d3 Update messages
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 19:03:21 +02:00
yoyosource
e894ed08f6 Add simple Trace replay
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 18:58:40 +02:00
yoyosource
f438b4aa77 Add TraceCommand.isolate
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 18:06:26 +02:00
yoyosource
ad8cd86338 Add SingleTraceRecorder
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 17:22:45 +02:00
yoyosource
399c86aa6d Rework tracer
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-03 17:01:43 +02:00
yoyosource
1e1d8d718a Fix xray and techhider
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-02 17:02:45 +02:00
yoyosource
dd5c932f15 Fix TraceEntity19.display with ticks
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix TraceTNTClickListener
Add Trace isolation

Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-02 16:54:01 +02:00
yoyosource
41a457920d Optimize Laufbau
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-02 15:46:22 +02:00
yoyosource
9728341529 Fix ETA message
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-02 14:21:31 +02:00
c975685995 Merge pull request 'Hotbar deserialize fix' (#140) from hb_fix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #140
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2022-10-02 13:07:00 +02:00
yoyosource
765584bc9a Fix ETA message
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-02 13:06:25 +02:00
yoyosource
bdda84f333 Fix TraceTNTClickListener and NoCreativeKnockback
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-10-02 13:03:27 +02:00
Chaoscaot
c447315b9e Hotbar deserialize fix
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-10-02 08:12:49 +02:00
yoyosource
b8adf7fb08 Update BlockBoundingBox impls
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-28 18:57:52 +02:00
yoyosource
c227a67635 Update to linkage system
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-25 16:32:59 +02:00
yoyosource
ba3293cdc2 Update to linkage system
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-25 16:32:27 +02:00
yoyosource
98925dcb4a Remove old linkage things
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-25 11:30:33 +02:00
86b22cd0a1 Adapt to CommonDB
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
2022-09-24 20:39:09 +02:00
yoyosource
ac91c77584 Add new linkages that are needed
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-24 20:26:33 +02:00
yoyosource
fc5a397097 Merge branch 'master' into Linkage 2022-09-24 20:07:14 +02:00
yoyosource
fae3a3d928 Remove useless messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-24 20:06:55 +02:00
yoyosource
17ff693b78 Fix some translations
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-24 20:06:08 +02:00
yoyosource
d888545e8f Fix some translations
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-24 20:05:17 +02:00
yoyosource
6a3f53a1c1 Add eta to laufbau states
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-24 20:04:26 +02:00
yoyosource
f3ac49fd12 Add copy to Simulator
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-24 20:03:43 +02:00
yoyosource
3b3ab508a7 Add SpigotCore to annotationProcessor
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-24 20:02:01 +02:00
yoyosource
e77d82839d Hotfix lightning rods
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-19 21:04:25 +02:00
yoyosource
abfe37dbb9 Add 1.19 blocks and sizes to laufbau
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-19 17:06:30 +02:00
yoyosource
21e9017d32 Hotfix plain linkages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-18 20:39:44 +02:00
yoyosource
c09d1a9ba3 Hotfix FreezeListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-18 15:02:45 +02:00
yoyosource
0f4924c9e8 Hotfix FreezeListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-18 14:59:55 +02:00
yoyosource
0cf588784d Update BackupScheduler
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-18 13:51:23 +02:00
yoyosource
01cb4abb39 Update BackupScheduler
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-18 13:32:15 +02:00
ddabee9d99 „BauSystem_Main/src/de/steamwar/bausystem/features/world/KickallCommand.java“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-09-14 14:22:15 +02:00
yoyosource
e4ba3249d7 Add KickallCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-13 21:03:02 +02:00
yoyosource
89f1971106 Fix XrayCommand also xray end_stone_bricks
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-13 20:53:07 +02:00
yoyosource
71e51654ce Add percentages to //cr and //tr
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-13 16:50:19 +02:00
718247a3d4 Merge pull request '+Add InventoryFillerCommand' (#135) from InventoryFillToggle into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #135
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2022-09-13 16:05:41 +02:00
yoyosource
74861f0797 Update how the validation work for the semi we commands
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-13 15:48:03 +02:00
yoyosource
cca55fa115 Hotfix purpur
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-13 15:38:46 +02:00
yoyosource
bed0891579 Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-09-13 15:27:31 +02:00
yoyosource
59c02c37c9 Fix Hotbar errors
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-13 15:27:26 +02:00
yoyosource
70c0488083 Fix Hotbar errors
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-13 15:24:45 +02:00
ae35549bbd „BauSystem_Main/src/BauSystem_de.properties“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-09-13 08:19:29 +02:00
07b16ccdcd „BauSystem_Main/src/BauSystem.properties“ ändern
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-09-13 08:18:00 +02:00
yoyosource
dfcaac5045 Fix stuff and rebuild
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-12 18:26:18 +02:00
yoyosource
50580f916a Add TypeReplaceCommand
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-12 17:39:37 +02:00
yoyosource
3e2b22be02 Fix some MultiReplaceCommand stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-11 21:24:23 +02:00
yoyosource
3ef7812aa7 Add MultiReplaceCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-10 15:22:49 +02:00
yoyosource
403ca8dae7 Update stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-10 15:15:38 +02:00
yoyosource
37f3726ccc Add ColorReplaceCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Add TypeReplaceCommand WIP

Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-10 13:55:56 +02:00
yoyosource
8bdc9c69d8 Move WorldEditUtils
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-09 17:10:43 +02:00
MoBrot
4e431c298a +move InventoryFillBauGuiItem to inventoryfiller package
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-09-07 14:45:08 +02:00
MoBrot
73f7fb2970 +Add Lore to InventoryFillBauGuiItem.getItem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-09-06 20:30:29 +02:00
MoBrot
f878efab32 +Add InventoryFillBauGuiItem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
+Add OTHER_ITEMS_INVENTORY_FILL_NAME in BauSystem.properties
2022-09-04 21:16:57 +02:00
MoBrot
60f10ae765 +Add InventoryFillerCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
+Add INVENTORY_FILL_HELP in BauSystem.properties
+Add INVENTORY_FILL_INFO in BauSystem.properties
2022-09-03 16:35:06 +02:00
yoyosource
ac9b75e009 Remove BauSystem
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-01 18:03:42 +02:00
yoyosource
c0c22980a2 Remove BauSystem
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-09-01 18:03:32 +02:00
yoyosource
b4466e6444 Add selection edit group options
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 21:45:02 +02:00
yoyosource
a516363fdb Fix MaterialLazyInit
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 18:24:32 +02:00
yoyosource
1fd78cf11d Closes: #106
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 18:07:48 +02:00
yoyosource
276907cfd3 Fix edge case for PistonCalculator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 17:45:49 +02:00
yoyosource
210fd0bd9f Closes: #118
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 17:22:25 +02:00
yoyosource
6a6eadb937 Closes: #121
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 17:15:39 +02:00
yoyosource
f63d529b55 Fix edge case for PistonCalculator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 17:06:24 +02:00
yoyosource
776dd84668 Fix edge case for slot 0
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 16:59:33 +02:00
yoyosource
549baedf4d Add PistonCalculatorCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 16:36:17 +02:00
yoyosource
e247dbe8f3 Add PistonCalculator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Closes: #132

Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 16:28:12 +02:00
yoyosource
f854f4896f Closes: #126
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 13:53:30 +02:00
yoyosource
509aa79979 Closes: #107
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 13:51:07 +02:00
yoyosource
ad4e5bbb26 Closes: #126
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 13:45:08 +02:00
yoyosource
974b12a1fd Hotfix InventoryFiller
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 13:37:19 +02:00
yoyosource
a3aa343683 Add new feature to InventoryFiller
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 13:34:02 +02:00
yoyosource
ae5795da17 Hotfix Panzern init
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 12:16:42 +02:00
yoyosource
f1aab8d3f7 Fix NPE
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-28 09:43:11 +02:00
yoyosource
f5b68687b5 Rename ChestFiller to InventoryFiller
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 22:54:38 +02:00
yoyosource
777f3cd506 Add ChestFiller
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 22:50:42 +02:00
yoyosource
cc9bd07743 Undo Optimize command injection
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 21:27:31 +02:00
yoyosource
be86b222d1 Optimize command injection
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 21:22:19 +02:00
yoyosource
456f7dd660 Optimize listener injection
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 21:04:35 +02:00
yoyosource
3e38e27b73 Optimize listener injection
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 20:56:19 +02:00
yoyosource
ee1a82b5d3 Fix ScriptExecutor
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 17:58:41 +02:00
yoyosource
3b964a2e18 Update generated code improve startup time with proper lazy init
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 17:45:12 +02:00
yoyosource
80eeaf533e Update generated code
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 15:35:46 +02:00
yoyosource
cee526b47a Add BauSystem enable timings
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 15:15:05 +02:00
yoyosource
805e4de4e5 Remove reflections from startup
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 15:07:10 +02:00
yoyosource
8b9978102d Fix LaufbauLazyInit
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-27 15:05:25 +02:00
yoyosource
f6db278214 Optimize imports
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 21:53:03 +02:00
yoyosource
bf8f8d2cf3 Fix somes stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 21:17:06 +02:00
yoyosource
f1289c1192 Fix somes stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 21:05:31 +02:00
yoyosource
eb352a36dd Fix somes stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 21:00:22 +02:00
yoyosource
c7b21bfc74 Remove unused order field
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 20:51:59 +02:00
yoyosource
def07fe50c Remove sout
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 20:47:01 +02:00
yoyosource
5758820679 Optimize some init stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 20:45:43 +02:00
yoyosource
6830852c78 Add MaterialLazyInit
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 20:16:38 +02:00
yoyosource
948c19167a Merge remote-tracking branch 'origin/master'
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-26 20:10:12 +02:00
yoyosource
c464a57828 Add PanzernAlgorithmLazyInit
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-26 20:10:03 +02:00
ed57eaec1a Add LaufbauLazyInit
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-25 11:30:30 +02:00
418b122f02 Merge pull request 'Remove System.out calls' (#128) from remove_system_out into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #128
Reviewed-by: Lixfel <lixfel@steamwar.de>
2022-08-23 17:01:37 +02:00
acf94338fc Merge pull request 'Fix Detonator type selection' (#129) from fix_detonator into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #129
Reviewed-by: Lixfel <lixfel@steamwar.de>
2022-08-23 17:01:29 +02:00
5cce94b635 Merge pull request 'Fix Language' (#130) from lang_fixes into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #130
Reviewed-by: Lixfel <lixfel@steamwar.de>
2022-08-23 17:01:14 +02:00
d4e582d5ea Merge pull request 'Rename English Countingwand' (#131) from counting_wand into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #131
Reviewed-by: Lixfel <lixfel@steamwar.de>
2022-08-23 17:01:04 +02:00
Chaoscaot
ec2074ce73 Rename English Countingwand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-23 12:41:49 +02:00
Chaoscaot
aaff263b5b Fix Language
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-23 12:04:00 +02:00
Chaoscaot
d9d383679f Fix Detonator type selection
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-23 11:50:28 +02:00
Chaoscaot
87c9827d46 Remove Timing map
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-23 11:35:15 +02:00
Chaoscaot
6c30fae13d Remove System.out calls
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-23 11:34:00 +02:00
5a32b90499 Merge pull request 'Update TinyProtocol API' (#127) from updateTinyApi into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #127
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2022-08-22 17:35:58 +02:00
bde4a29920 Update TinyProtocol API
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-22 17:34:35 +02:00
933ea78752 Fix stop
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-21 12:42:48 +02:00
yoyosource
e649e40876 Fix StopCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-19 18:55:49 +02:00
yoyosource
512e017905 Rebuild
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-18 21:07:56 +02:00
yoyosource
b722d9ab0f Remove last guard checks
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-18 20:27:05 +02:00
yoyosource
028c115731 Update region features
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-18 20:01:09 +02:00
yoyosource
72f0d08808 Remove some guard statements
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-17 21:07:41 +02:00
yoyosource
15559b500d Add some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 21:23:15 +02:00
yoyosource
700bfc6100 Fix ScriptEventListener Drop runs LeftClick bug
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 20:38:37 +02:00
yoyosource
32ab629a81 Add lever toggleability in frozen region
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 20:24:10 +02:00
yoyosource
2edc08943a Fix MaterialCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 18:15:59 +02:00
yoyosource
5703194017 Fix sneaking const naming in gui
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 18:08:19 +02:00
yoyosource
b5c2ef50df Fix /minecraft:... commands in script system
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 17:59:19 +02:00
yoyosource
d64e7a9299 Update MaterialCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 17:58:07 +02:00
yoyosource
09c69e4b3c Update MaterialCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 17:57:42 +02:00
yoyosource
7ae525391e Fix /minecraft:... commands in script system
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-08 05:51:43 +02:00
yoyosource
ab35286f97 Disable SimulatorPreview19 for now
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-07 18:05:22 +02:00
yoyosource
36efdd9a5f Fix warp entity sound
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-07 17:55:39 +02:00
yoyosource
81b8b5e4af Fix sim unwanted editing
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix sim double click editing

Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-07 17:09:09 +02:00
yoyosource
17fdb08060 Fix some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-07 16:48:17 +02:00
yoyosource
a21e652ac9 Add create button
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Fix rounding error

Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-06 17:43:07 +02:00
yoyosource
b22fabe8cd Add TraceTNTClickListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-06 17:24:48 +02:00
yoyosource
3be33adb00 Add LoaderCommand.singleLoader
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-06 14:30:08 +02:00
yoyosource
4a373b7234 Update PlayerMovementWrapper location
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-06 14:12:59 +02:00
ac6c621fb5 Merge pull request 'Fix TPSLimit Movement' (#101) from tps_limit_movement_fix into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #101
Reviewed-by: YoyoNow <jwsteam@nidido.de>
2022-08-06 14:10:39 +02:00
yoyosource
2e4825c4a9 Optmize Detonator.getBlock
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-06 11:38:10 +02:00
yoyosource
659f09cb82 Fix Detonator for pressure plates and buttons
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-06 11:21:48 +02:00
yoyosource
8f32793593 Add NoCreativeKnockback
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-06 11:15:33 +02:00
Chaoscaot
f323c043b2 Refactor
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-06 11:15:30 +02:00
yoyosource
a35caa5d37 Fix HotbarCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-05 21:22:39 +02:00
yoyosource
c4e7c84348 Add global NightVisionCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-05 21:18:18 +02:00
yoyosource
5283bd5697 Fix SignEdit NPE
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-05 20:56:03 +02:00
yoyosource
54b955c1f5 Update SignEdit
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-05 20:48:06 +02:00
8f89c4d63a Merge pull request 'Armor to Hotbar' (#99) from armor_to_hotbar into master
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Reviewed-on: #99
Reviewed-by: Lixfel <lixfel@steamwar.de>
2022-08-05 20:34:30 +02:00
Chaoscaot
75dcb3dbea Fix TPSLimit Movement
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-05 15:29:32 +02:00
Chaoscaot
5e462ae097 Armor to Hotbar
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-05 14:07:41 +02:00
2c2d27893d Fix redo too
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-05 12:32:06 +02:00
6d7b2eec1a Pot corruption fix
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-05 12:22:11 +02:00
d4f49aeddb Remove debug messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-05 11:44:54 +02:00
4fcedb8c72 Add debug messages for region undo debugging
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-05 11:33:31 +02:00
4a3d806bf4 Fix 1.19.1
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-08-05 08:26:27 +02:00
yoyosource
88aa07ccb2 Update FlatteningWrapper
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-03 19:10:26 +02:00
yoyosource
056015395a Fix one edge case of RedstonetesterUtils
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-08-01 21:48:34 +02:00
yoyosource
04249488d9 Fix NoClipCommand for real now
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-31 21:21:20 +02:00
yoyosource
92b7a6ddbc Update NoClipCommand kinda fix it I guess
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-31 21:09:20 +02:00
yoyosource
a86fbf0ded Optimize imports NMSWrapper19
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-30 19:27:16 +02:00
yoyosource
2eabd2ea3d Fix NoClipCommand for item pick
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-30 17:43:40 +02:00
yoyosource
78cc53a564 Fix messages
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-30 14:24:34 +02:00
yoyosource
084adea7ef Add XrayCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-30 14:21:56 +02:00
yoyosource
d5f4503e08 Fix FreezeListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-30 11:29:38 +02:00
yoyosource
c128a3594c Update TechHiderCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 23:30:22 +02:00
yoyosource
102bbea11e Update TechHiderCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 23:25:16 +02:00
yoyosource
5784cdc446 Update TechHiderCommand
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 23:12:58 +02:00
yoyosource
4773ba970d Fix FreezeListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 23:06:13 +02:00
yoyosource
b40fe28c7e Fix FreezeListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 22:43:34 +02:00
yoyosource
7330b4346b Fix FreezeListener again
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 22:37:40 +02:00
yoyosource
e428006b6c Fix FreezeListener again
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 22:36:41 +02:00
yoyosource
c304fc034f Fix FreezeListener again
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 22:30:17 +02:00
yoyosource
bb3ac6c515 Fix FreezeListener again
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 22:24:45 +02:00
yoyosource
2127af664d Fix FreezeListener for 1.19
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-29 20:35:43 +02:00
yoyosource
c706f85254 Add copy and testblock point to WarpListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-28 16:17:30 +02:00
yoyosource
5d8bd398ec Fix WarpListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-28 15:50:53 +02:00
yoyosource
ccb2f8540f Fix WarpListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-26 16:32:05 +02:00
yoyosource
8c61efe320 Update icons
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-22 20:59:37 +02:00
yoyosource
21ddadae99 Update icons
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-22 20:57:00 +02:00
yoyosource
8bfb564a68 Add delete icon in tnt menu
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 17:35:35 +02:00
yoyosource
840ae4e7b6 Fix TNTSimulatorListener.onBlockPlace
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 17:31:40 +02:00
yoyosource
633112ffd1 Fix offhand remove item
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 17:25:07 +02:00
yoyosource
e95b61e818 Remove velocity min
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 16:53:43 +02:00
yoyosource
cf46465cfd Hotfix stuff and rebuild
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 16:49:03 +02:00
yoyosource
6c3ea5ccc7 Update some stuff
Einige Prüfungen sind fehlgeschlagen
SteamWarCI Build failed
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 16:44:52 +02:00
yoyosource
a0c644dd1c Optimize code
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 15:20:23 +02:00
yoyosource
07a1dd7195 Update stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 14:32:32 +02:00
yoyosource
662982f20e Fix NPE
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 14:02:45 +02:00
yoyosource
8e28422b8f Update recalculate
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-21 14:01:07 +02:00
yoyosource
935be23238 Add basic sim preview for 1.19
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-20 23:52:21 +02:00
yoyosource
cf4f0c5c07 Fix some translations
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-07-18 21:34:47 +02:00
yoyosource
9fe57e9cbc Fix offhand simulator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-07-18 16:44:44 +02:00
yoyosource
be0f15891b Fix offhand simulator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-07-18 16:25:26 +02:00
yoyosource
f1f783f0ec Fix offhand simulator
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
2022-07-18 16:15:53 +02:00
yoyosource
58a6a855a8 Fix count to TNTClickListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-05 17:27:46 +02:00
yoyosource
096ee8d586 Add count to TNTClickListener
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-05 17:18:31 +02:00
yoyosource
eb7dcbcdd4 Update and fix some stuff
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-04 15:32:28 +02:00
yoyosource
b8b50987d1 Fix weird BlockRotatingBehaviour
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-04 00:24:34 +02:00
yoyosource
07d8b7383a Update build.gradle
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-07-01 21:18:49 +02:00
yoyosource
47459d832d Remove sys out
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-06-28 21:58:11 +02:00
yoyosource
94e7902f2a Add sys out
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful
Signed-off-by: yoyosource <yoyosource@nidido.de>
2022-06-28 21:55:43 +02:00
523 geänderte Dateien mit 28360 neuen und 18626 gelöschten Zeilen

8
.gitignore vendored
Datei anzeigen

@ -1,5 +1,7 @@
# Package Files # Build files
*.jar *.jar
**/bin
**/build
# Gradle # Gradle
.gradle .gradle
@ -10,6 +12,10 @@ steamwar.properties
# IntelliJ IDEA # IntelliJ IDEA
.idea .idea
*.iml *.iml
plugin.yml
# Other # Other
lib lib
#linkage
LinkageUtils.java

Datei anzeigen

@ -27,8 +27,8 @@ version '1.0'
compileJava.options.encoding = 'UTF-8' compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 1.8 sourceCompatibility = 17
targetCompatibility = 1.8 targetCompatibility = 17
sourceSets { sourceSets {
main { main {

Datei anzeigen

@ -1,82 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.entities;
import de.steamwar.bausystem.features.detonator.AbstractDetonatorEntity;
import net.minecraft.server.v1_15_R1.*;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class DetonatorEntity15 extends EntityFallingBlock implements AbstractDetonatorEntity {
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
private final Vector position;
private int references = 0;
public DetonatorEntity15(World world, Vector position) {
super(((CraftWorld) world).getHandle(), position.getX(), position.getY(), position.getZ(), Blocks.RED_STAINED_GLASS.getBlockData());
this.position = position;
this.h(true);
this.setNoGravity(true);
this.ticksLived = -12000;
}
@Override
public void display(Player player) {
if (references++ > 0)
return;
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(getId(), getUniqueID(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.FALLING_BLOCK, Block.getCombinedId(Blocks.RED_STAINED_GLASS.getBlockData()), ZERO);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection;
playerConnection.sendPacket(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(getId(), datawatcher, true);
playerConnection.sendPacket(packetPlayOutEntityMetadata);
}
@Override
public boolean hide(Player player, boolean force) {
if (!force && --references > 0)
return false;
sendDestroy(player);
die();
return true;
}
private void sendDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(getId());
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutEntityDestroy);
}
@Override
public void sendEntity(Player player) {
display(player);
}
@Override
public void sendEntityDestroy(Player player) {
hide(player, false);
}
}

Datei anzeigen

@ -1,64 +0,0 @@
/*
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.entities;
import de.steamwar.bausystem.features.simulator.AbstractSimulatorEntity;
import de.steamwar.bausystem.shared.BaseEntity15;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class SimulatorEntity15 extends BaseEntity15 implements AbstractSimulatorEntity {
private boolean printed = false;
public SimulatorEntity15(World world, Vector position, boolean highlight) {
super(world, position, highlight ? Material.WHITE_STAINED_GLASS : Material.TNT);
this.setNoGravity(true);
this.ticksLived = -12000;
}
@Override
public void display(Player player) {
if (printed) return;
printed = true;
sendEntity(player);
}
@Override
public void setPosition(Vector position) {
this.position = position;
setPosition(position.getX(), position.getY(), position.getZ());
}
@Override
public boolean hide(Player player, boolean force) {
if (!printed) return false;
printed = false;
sendEntityDestroy(player);
die();
return true;
}
}

Datei anzeigen

@ -1,73 +0,0 @@
/*
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.entities;
import de.steamwar.bausystem.features.tracer.AbstractTraceEntity;
import de.steamwar.bausystem.shared.BaseEntity15;
import de.steamwar.bausystem.shared.ReferenceCounter;
import net.minecraft.server.v1_15_R1.ChatComponentText;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class TraceEntity15 extends BaseEntity15 implements AbstractTraceEntity {
private boolean exploded = false;
private ReferenceCounter referenceCounter = new ReferenceCounter();
public TraceEntity15(World world, Vector position, boolean tnt) {
super(world, position, tnt ? Material.TNT : Material.WHITE_STAINED_GLASS);
this.setNoGravity(true);
this.ticksLived = -12000;
}
@Override
public void display(Player player, boolean exploded, int ticks) {
if (ticks != -1) {
this.setCustomNameVisible(true);
this.setCustomName(new ChatComponentText(ticks + ""));
}
if (!this.exploded && exploded) {
this.setCustomNameVisible(true);
this.setCustomName(new ChatComponentText("Bumm"));
this.exploded = true;
if (referenceCounter.increment() > 0) {
sendEntityDestroy(player);
}
} else if (referenceCounter.increment() > 0) {
return;
}
sendEntity(player);
}
@Override
public boolean hide(Player player, boolean force) {
if (!force && referenceCounter.decrement() > 0) {
return false;
}
sendEntityDestroy(player);
die();
return true;
}
}

Datei anzeigen

@ -1,60 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.entities;
import de.steamwar.bausystem.features.warp.AbstractWarpEntity;
import de.steamwar.bausystem.shared.BaseArmorStand15;
import net.minecraft.server.v1_15_R1.ChatComponentText;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class WarpEntity15 extends BaseArmorStand15 implements AbstractWarpEntity {
private String name;
public WarpEntity15(World world, Vector position, String name) {
super(world, position);
setInvisible(true);
setSmall(true);
this.name = name;
this.setNoGravity(true);
this.ticksLived = -12000;
}
@Override
public void display(Player player) {
this.setCustomNameVisible(true);
this.setCustomName(new ChatComponentText(name));
sendEntity(player);
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public boolean hide(Player player) {
sendEntityDestroy(player);
die();
return true;
}
}

Datei anzeigen

@ -1,56 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.shared;
import net.minecraft.server.v1_15_R1.*;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class BaseArmorStand15 extends EntityArmorStand implements AbstractEntity {
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
protected Vector position;
public BaseArmorStand15(World world, Vector position) {
super(((CraftWorld) world).getHandle(), position.getX(), position.getY(), position.getZ());
this.position = position;
setNoGravity(true);
ticksLived = -12000;
}
public void sendEntity(Player player) {
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(getId(), getUniqueID(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.ARMOR_STAND, 0, ZERO);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection;
playerConnection.sendPacket(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(getId(), datawatcher, true);
playerConnection.sendPacket(packetPlayOutEntityMetadata);
}
public void sendEntityDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(getId());
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutEntityDestroy);
}
}

Datei anzeigen

@ -1,60 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.shared;
import net.minecraft.server.v1_15_R1.*;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_15_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_15_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class BaseEntity15 extends EntityFallingBlock implements AbstractEntity {
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
private final IBlockData iBlockData;
protected Vector position;
public BaseEntity15(World world, Vector position, Material blockType) {
super(((CraftWorld) world).getHandle(), position.getX(), position.getY(), position.getZ(), ((CraftBlockData) blockType.createBlockData()).getState());
this.iBlockData = ((CraftBlockData) blockType.createBlockData()).getState();
this.position = position;
this.setNoGravity(true);
this.ticksLived = -12000;
}
public void sendEntity(Player player) {
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(getId(), getUniqueID(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.FALLING_BLOCK, Block.getCombinedId(iBlockData), ZERO);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().playerConnection;
playerConnection.sendPacket(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(getId(), datawatcher, true);
playerConnection.sendPacket(packetPlayOutEntityMetadata);
}
public void sendEntityDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(getId());
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutEntityDestroy);
}
}

Datei anzeigen

@ -37,14 +37,11 @@ import com.sk89q.worldedit.function.operation.Operations;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.transform.AffineTransform; import com.sk89q.worldedit.math.transform.AffineTransform;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.CuboidRegionSelector;
import com.sk89q.worldedit.session.ClipboardHolder; import com.sk89q.worldedit.session.ClipboardHolder;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypes;
import de.steamwar.bausystem.region.Color;
import de.steamwar.bausystem.region.PasteOptions;
import de.steamwar.bausystem.region.Point; import de.steamwar.bausystem.region.Point;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -60,10 +57,15 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.Arrays;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiPredicate;
import java.util.logging.Level; import java.util.logging.Level;
public class FlatteningWrapper15 implements FlatteningWrapper.IFlatteningWrapper { public class FlatteningWrapper15 implements FlatteningWrapper {
@Override @Override
public boolean isNoBook(ItemStack item) { public boolean isNoBook(ItemStack item) {
@ -104,76 +106,55 @@ public class FlatteningWrapper15 implements FlatteningWrapper.IFlatteningWrapper
private static final WorldEditPlugin WORLDEDIT_PLUGIN = Objects.requireNonNull((WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit")); private static final WorldEditPlugin WORLDEDIT_PLUGIN = Objects.requireNonNull((WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"));
private static final World BUKKITWORLD = new BukkitWorld(Bukkit.getWorlds().get(0)); private static final World BUKKITWORLD = new BukkitWorld(Bukkit.getWorlds().get(0));
@Override @Override
public void setSelection(Player p, Point minPoint, Point maxPoint) { public void setSelection(Player p, Point minPoint, Point maxPoint) {
WORLDEDIT_PLUGIN.getSession(p).setRegionSelector(BUKKITWORLD, new CuboidRegionSelector(BUKKITWORLD, toBlockVector3(minPoint), toBlockVector3(maxPoint))); WORLDEDIT_PLUGIN.getSession(p).setRegionSelector(BUKKITWORLD, new CuboidRegionSelector(BUKKITWORLD, toBlockVector3(minPoint), toBlockVector3(maxPoint)));
} }
private static final BaseBlock WOOL = Objects.requireNonNull(BlockTypes.PINK_WOOL).getDefaultState().toBaseBlock();
private static final BaseBlock WOOL2 = Objects.requireNonNull(BlockTypes.YELLOW_WOOL).getDefaultState().toBaseBlock();
private static final BaseBlock CLAY = Objects.requireNonNull(BlockTypes.PINK_TERRACOTTA).getDefaultState().toBaseBlock();
private static final BaseBlock CLAY2 = Objects.requireNonNull(BlockTypes.YELLOW_TERRACOTTA).getDefaultState().toBaseBlock();
private static final BaseBlock GLAZED = Objects.requireNonNull(BlockTypes.PINK_GLAZED_TERRACOTTA).getDefaultState().toBaseBlock();
private static final BaseBlock GLASS = Objects.requireNonNull(BlockTypes.PINK_STAINED_GLASS).getDefaultState().toBaseBlock();
private static final BaseBlock GLASS2 = Objects.requireNonNull(BlockTypes.YELLOW_STAINED_GLASS).getDefaultState().toBaseBlock();
private static final BaseBlock GLASS_PANE = Objects.requireNonNull(BlockTypes.PINK_STAINED_GLASS_PANE).getDefaultState().toBaseBlock();
private static final BaseBlock GLASS_PANE2 = Objects.requireNonNull(BlockTypes.YELLOW_STAINED_GLASS_PANE).getDefaultState().toBaseBlock();
private static final BaseBlock CONCRETE = Objects.requireNonNull(BlockTypes.PINK_CONCRETE).getDefaultState().toBaseBlock();
private static final BaseBlock CONCRETE2 = Objects.requireNonNull(BlockTypes.YELLOW_CONCRETE).getDefaultState().toBaseBlock();
private static final BaseBlock CONCRETE_POWDER = Objects.requireNonNull(BlockTypes.PINK_CONCRETE_POWDER).getDefaultState().toBaseBlock();
private static final BaseBlock CARPET = Objects.requireNonNull(BlockTypes.PINK_CARPET).getDefaultState().toBaseBlock();
private final Map<String, Long> timing = new HashMap<>();
private void start(String name) {
timing.put(name, System.currentTimeMillis());
}
private long stop(String name) {
return System.currentTimeMillis() - timing.getOrDefault(name, System.currentTimeMillis());
}
@Override @Override
public EditSession paste(File file, Point pastePoint, PasteOptions pasteOptions) { public Clipboard loadSchematic(File file) {
start("clipboardLoad");
Clipboard clipboard; Clipboard clipboard;
try (ClipboardReader reader = Objects.requireNonNull(ClipboardFormats.findByFile(file)).getReader(new FileInputStream(file))) { try (ClipboardReader reader = Objects.requireNonNull(ClipboardFormats.findByFile(file)).getReader(new FileInputStream(file))) {
clipboard = reader.read(); clipboard = reader.read();
} catch (NullPointerException | IOException e) { } catch (NullPointerException | IOException e) {
throw new SecurityException("Bausystem schematic not found", e); throw new SecurityException("Bausystem schematic not found", e);
} }
System.out.println("Clipboard Load: " + stop("clipboardLoad")); return clipboard;
start("paste");
EditSession editSession = paste(clipboard, pastePoint, pasteOptions);
System.out.println("Paste: " + stop("paste"));
return editSession;
} }
@Override @Override
public EditSession paste(Clipboard clipboard, Point pastePoint, PasteOptions pasteOptions) { public EditSession paste(PasteBuilder pasteBuilder) {
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)) {
start("changeColor"); Clipboard clipboard = pasteBuilder.getClipboard();
if (pasteOptions.getColor() != Color.YELLOW) {
changeColor(clipboard, pasteOptions.getColor());
}
if (pasteOptions.isOnlyColors()) {
Set<String> blocks = new HashSet<>();
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_wool");
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_terracotta");
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_glazed_terracotta");
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_stained_glass");
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_stained_glass_pane");
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_concrete");
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_concrete_powder");
blocks.add("minecraft:" + pasteOptions.getColor().name().toLowerCase() + "_carpet");
if (!pasteBuilder.getMappers().isEmpty()) {
BlockVector3 minimum = clipboard.getRegion().getMinimumPoint();
for (int x = 0; x < clipboard.getDimensions().getX(); x++) {
for (int y = 0; y < clipboard.getDimensions().getY(); y++) {
for (int z = 0; z < clipboard.getDimensions().getZ(); z++) {
BlockVector3 pos = minimum.add(x, y, z);
pasteBuilder.getMappers().forEach(mapper -> mapper.accept(clipboard, pos));
}
}
}
}
AtomicReference<BlockVector3> pastePoint = new AtomicReference<>();
if (!pasteBuilder.getPredicates().isEmpty()) {
e.setMask(new Mask() { e.setMask(new Mask() {
@Override @Override
public boolean test(BlockVector3 blockVector3) { public boolean test(BlockVector3 blockVector3) {
BaseBlock block = clipboard.getFullBlock(blockVector3); BaseBlock block = clipboard.getFullBlock(blockVector3.subtract(pastePoint.get()).add(clipboard.getRegion().getMinimumPoint()));
String blockName = block.toString().toLowerCase(); String blockName = block.getBlockType().toString().toLowerCase();
return blocks.contains(blockName); for (BiPredicate<BaseBlock, String> predicate : pasteBuilder.getPredicates()) {
if (!predicate.test(block, blockName)) return false;
}
return true;
}
public Mask copy() {
return this;
} }
@Nullable @Nullable
@ -181,38 +162,28 @@ public class FlatteningWrapper15 implements FlatteningWrapper.IFlatteningWrapper
public Mask2D toMask2D() { public Mask2D toMask2D() {
return null; return null;
} }
public Mask copy() {
return this;
}
}); });
} }
System.out.println("ChangeColor: " + stop("changeColor"));
start("transform");
ClipboardHolder ch = new ClipboardHolder(clipboard); ClipboardHolder ch = new ClipboardHolder(clipboard);
BlockVector3 dimensions = clipboard.getDimensions(); BlockVector3 dimensions = clipboard.getDimensions();
BlockVector3 v = BlockVector3.at(pastePoint.getX(), pastePoint.getY(), pastePoint.getZ()); BlockVector3 v = BlockVector3.at(pasteBuilder.getPastPoint().getX(), pasteBuilder.getPastPoint().getY(), pasteBuilder.getPastPoint().getZ());
BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin()); BlockVector3 offset = clipboard.getRegion().getMinimumPoint().subtract(clipboard.getOrigin());
if (pasteOptions.isRotate()) { if (pasteBuilder.isRotate()) {
ch.setTransform(new AffineTransform().rotateY(180)); ch.setTransform(new AffineTransform().rotateY(180));
v = v.add(dimensions.getX() / 2, 0, dimensions.getZ() / 2).subtract(offset.multiply(-1, 1, -1)).subtract(0, 0, 1); v = v.add(dimensions.getX() / 2, 0, dimensions.getZ() / 2).subtract(offset.multiply(-1, 1, -1)).subtract(0, 0, 1);
} else { } else {
v = v.subtract(dimensions.getX() / 2, 0, dimensions.getZ() / 2).subtract(offset); v = v.subtract(dimensions.getX() / 2, 0, dimensions.getZ() / 2).subtract(offset);
} }
System.out.println("Transform: " + stop("transform")); pastePoint.set(v);
start("reset"); if (pasteBuilder.isReset()) {
if (pasteOptions.isReset()) { e.setBlocks(new CuboidRegion(toBlockVector3(pasteBuilder.getMinPoint()), toBlockVector3(pasteBuilder.getMaxPoint())), Objects.requireNonNull(BlockTypes.AIR).getDefaultState().toBaseBlock());
e.setBlocks((Region) new CuboidRegion(toBlockVector3(pasteOptions.getMinPoint()), toBlockVector3(pasteOptions.getMaxPoint())), Objects.requireNonNull(BlockTypes.AIR).getDefaultState().toBaseBlock()); if (pasteBuilder.getWaterLevel() != 0) {
if (pasteOptions.getWaterLevel() != 0) { e.setBlocks(new CuboidRegion(toBlockVector3(pasteBuilder.getMinPoint()), toBlockVector3(pasteBuilder.getMaxPoint()).withY(pasteBuilder.getWaterLevel())), Objects.requireNonNull(BlockTypes.WATER).getDefaultState().toBaseBlock());
e.setBlocks((Region) new CuboidRegion(toBlockVector3(pasteOptions.getMinPoint()), toBlockVector3(pasteOptions.getMaxPoint()).withY(pasteOptions.getWaterLevel())), Objects.requireNonNull(BlockTypes.WATER).getDefaultState().toBaseBlock());
} }
} }
System.out.println("Reset: " + stop("reset")); Operations.completeBlindly(ch.createPaste(e).to(v).ignoreAirBlocks(pasteBuilder.isIgnoreAir()).build());
start("operation");
Operations.completeBlindly(ch.createPaste(e).to(v).ignoreAirBlocks(pasteOptions.isIgnoreAir()).build());
System.out.println("Operation: " + stop("operation"));
return e; return e;
} catch (WorldEditException e) { } catch (WorldEditException e) {
throw new SecurityException(e.getMessage(), e); throw new SecurityException(e.getMessage(), e);
@ -220,56 +191,7 @@ public class FlatteningWrapper15 implements FlatteningWrapper.IFlatteningWrapper
} }
@Override @Override
public void changeColor(Clipboard clipboard, Color color) throws WorldEditException { public Clipboard copy(Point minPoint, Point maxPoint, Point copyPoint) {
BlockVector3 minimum = clipboard.getRegion().getMinimumPoint();
BaseBlock wool = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_wool")).getDefaultState().toBaseBlock();
BaseBlock clay = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_terracotta")).getDefaultState().toBaseBlock();
BaseBlock glazed = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_glazed_terracotta")).getDefaultState().toBaseBlock();
BaseBlock glass = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_stained_glass")).getDefaultState().toBaseBlock();
BaseBlock glassPane = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_stained_glass_pane")).getDefaultState().toBaseBlock();
BaseBlock carpet = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_carpet")).getDefaultState().toBaseBlock();
BaseBlock concrete = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_concrete")).getDefaultState().toBaseBlock();
BaseBlock concretePowder = Objects.requireNonNull(BlockTypes.get(color.name().toLowerCase() + "_concrete_powder")).getDefaultState().toBaseBlock();
for (int x = 0; x < clipboard.getDimensions().getX(); x++) {
for (int y = 0; y < clipboard.getDimensions().getY(); y++) {
for (int z = 0; z < clipboard.getDimensions().getZ(); z++) {
BlockVector3 pos = minimum.add(x, y, z);
BaseBlock block = clipboard.getFullBlock(pos);
if (block.equals(WOOL)) {
clipboard.setBlock(pos, wool);
} else if (block.equals(WOOL2)) {
clipboard.setBlock(pos, wool);
} else if (block.equals(CLAY)) {
clipboard.setBlock(pos, clay);
} else if (block.equals(CLAY2)) {
clipboard.setBlock(pos, clay);
} else if (block.equals(GLAZED)) {
clipboard.setBlock(pos, glazed);
} else if (block.equals(GLASS)) {
clipboard.setBlock(pos, glass);
} else if (block.equals(GLASS2)) {
clipboard.setBlock(pos, glass);
} else if (block.equals(GLASS_PANE)) {
clipboard.setBlock(pos, glassPane);
} else if (block.equals(GLASS_PANE2)) {
clipboard.setBlock(pos, glassPane);
} else if (block.equals(CARPET)) {
clipboard.setBlock(pos, carpet);
} else if (block.equals(CONCRETE)) {
clipboard.setBlock(pos, concrete);
} else if (block.equals(CONCRETE2)) {
clipboard.setBlock(pos, concrete);
} else if (block.equals(CONCRETE_POWDER)) {
clipboard.setBlock(pos, concretePowder);
}
}
}
}
}
@Override
public boolean backup(Point minPoint, Point maxPoint, File file) {
BukkitWorld bukkitWorld = new BukkitWorld(Bukkit.getWorlds().get(0)); BukkitWorld bukkitWorld = new BukkitWorld(Bukkit.getWorlds().get(0));
CuboidRegion region = new CuboidRegion(bukkitWorld, toBlockVector3(minPoint), toBlockVector3(maxPoint)); CuboidRegion region = new CuboidRegion(bukkitWorld, toBlockVector3(minPoint), toBlockVector3(maxPoint));
BlockArrayClipboard clipboard = new BlockArrayClipboard(region); BlockArrayClipboard clipboard = new BlockArrayClipboard(region);
@ -282,12 +204,21 @@ public class FlatteningWrapper15 implements FlatteningWrapper.IFlatteningWrapper
copy.setCopyingBiomes(false); copy.setCopyingBiomes(false);
Operations.complete(copy); Operations.complete(copy);
clipboard.setOrigin(toBlockVector3(copyPoint));
return clipboard;
} catch (WorldEditException e) {
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
return null;
}
}
@Override
public boolean backup(Point minPoint, Point maxPoint, File file) {
Clipboard clipboard = copy(minPoint, maxPoint, minPoint);
try (ClipboardWriter writer = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(file))) { try (ClipboardWriter writer = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(file))) {
writer.write(clipboard); writer.write(clipboard);
}
return true; return true;
} catch (WorldEditException | IOException e) { } catch (IOException e) {
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e); Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
return false; return false;
} }
@ -309,19 +240,4 @@ public class FlatteningWrapper15 implements FlatteningWrapper.IFlatteningWrapper
return ((Waterlogged) data).isWaterlogged(); return ((Waterlogged) data).isWaterlogged();
} }
@Override
public Material getTraceShowMaterial() {
return Material.LIME_CONCRETE;
}
@Override
public Material getTraceHideMaterial() {
return Material.RED_CONCRETE;
}
@Override
public Material getTraceXZMaterial() {
return Material.QUARTZ_SLAB;
}
} }

Datei anzeigen

@ -20,20 +20,11 @@
package de.steamwar.bausystem.utils; package de.steamwar.bausystem.utils;
import com.comphenix.tinyprotocol.Reflection; import com.comphenix.tinyprotocol.Reflection;
import de.steamwar.bausystem.entities.DetonatorEntity15;
import de.steamwar.bausystem.entities.SimulatorEntity15;
import de.steamwar.bausystem.entities.TraceEntity15;
import de.steamwar.bausystem.features.detonator.AbstractDetonatorEntity;
import de.steamwar.bausystem.features.util.NoClipCommand; import de.steamwar.bausystem.features.util.NoClipCommand;
import de.steamwar.bausystem.features.simulator.AbstractSimulatorEntity;
import de.steamwar.bausystem.features.tracer.AbstractTraceEntity;
import de.steamwar.bausystem.features.warp.AbstractWarpEntity;
import de.steamwar.bausystem.entities.WarpEntity15;
import net.minecraft.server.v1_15_R1.*; import net.minecraft.server.v1_15_R1.*;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
@ -41,15 +32,15 @@ import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.LongSupplier; import java.util.function.LongSupplier;
public class NMSWrapper15 implements NMSWrapper.INMSWrapper { public class NMSWrapper15 implements NMSWrapper {
private static final Reflection.FieldAccessor<EnumGamemode> playerGameMode = Reflection.getField(PlayerInteractManager.class, EnumGamemode.class, 0); private static final Reflection.FieldAccessor<EnumGamemode> playerGameMode = Reflection.getField(PlayerInteractManager.class, EnumGamemode.class, 0);
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void setInternalGameMode(Player player, GameMode gameMode) { public void setInternalGameMode(Player player, GameMode gameMode) {
@ -57,37 +48,23 @@ public class NMSWrapper15 implements NMSWrapper.INMSWrapper {
} }
@Override @Override
public void init(LongSupplier longSupplier) { public void setSlotToItemStack(Player player, Object o) {
SystemUtils.a = () -> System.nanoTime() + longSupplier.getAsLong(); PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot = (PacketPlayInSetCreativeSlot) o;
int index = packetPlayInSetCreativeSlot.b();
if (index >= 36 && index <= 44) {
index -= 36;
} else if (index > 44) {
index -= 5;
} else if (index <= 8) {
index = index - 8 + 36;
} }
player.getInventory().setItem(index, CraftItemStack.asBukkitCopy(packetPlayInSetCreativeSlot.getItemStack()));
private static final List<Packet<?>> packets = new ArrayList<>(); if (index < 9) player.getInventory().setHeldItemSlot(index);
private static final Vec3D noMotion = new Vec3D(0, 0, 0); player.updateInventory();
@Override
public void createTickCache(World world) {
packets.clear();
world.getEntities().stream().filter(entity -> !(entity instanceof Player)).forEach(entity -> {
packets.add(new PacketPlayOutEntityVelocity(entity.getEntityId(), noMotion));
packets.add(new PacketPlayOutEntityTeleport(((CraftEntity) entity).getHandle()));
if (entity instanceof TNTPrimed) {
net.minecraft.server.v1_15_R1.Entity serverEntity = ((CraftEntity) entity).getHandle();
packets.add(new PacketPlayOutEntityMetadata(serverEntity.getId(), serverEntity.getDataWatcher(), true));
}
});
}
@Override
public void sendTickPackets() {
Bukkit.getOnlinePlayers().forEach(player -> {
PlayerConnection connection = ((CraftPlayer) player).getHandle().playerConnection;
for (Packet<?> p : packets) {
connection.sendPacket(p);
}
});
} }
private static final Reflection.FieldAccessor<Integer> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, int.class, 0); private static final Reflection.FieldAccessor<Integer> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, int.class, 0);
@Override @Override
public void setGameStateChangeReason(Object packet) { public void setGameStateChangeReason(Object packet) {
gameStateChangeReason.set(packet, 3); gameStateChangeReason.set(packet, 3);
@ -99,17 +76,13 @@ public class NMSWrapper15 implements NMSWrapper.INMSWrapper {
((CraftPlayer) player).getHandle().abilities.canInstantlyBuild = true; ((CraftPlayer) player).getHandle().abilities.canInstantlyBuild = true;
} }
@Override
public Particle tntPositionParticle() {
return Particle.BARRIER;
}
@Override @Override
public Material pathMaterial() { public Material pathMaterial() {
return Material.GRASS_PATH; return Material.GRASS_PATH;
} }
private static final int threshold = 2048; private static final int threshold = 2048;
@Override @Override
public boolean checkItemStack(ItemStack item) { public boolean checkItemStack(ItemStack item) {
net.minecraft.server.v1_15_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); net.minecraft.server.v1_15_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
@ -147,23 +120,16 @@ public class NMSWrapper15 implements NMSWrapper.INMSWrapper {
return invalid; return invalid;
} }
@Override private final Class<?> explosionPacket = Reflection.getClass("{nms.network.protocol.game}.PacketPlayOutExplosion");
public AbstractWarpEntity createWarp(World world, Vector position, String name) { private final Reflection.FieldAccessor<Double> a = Reflection.getField(explosionPacket, double.class, 0);
return new WarpEntity15(world, position, name); private final Reflection.FieldAccessor<Double> b = Reflection.getField(explosionPacket, double.class, 1);
} private final Reflection.FieldAccessor<Double> c = Reflection.getField(explosionPacket, double.class, 2);
private final Reflection.FieldAccessor<Float> d = Reflection.getField(explosionPacket, float.class, 0);
private final Reflection.FieldAccessor<List> e = Reflection.getField(explosionPacket, List.class, 0);
@Override @Override
public AbstractSimulatorEntity createSimulator(World world, Vector tntPosition, boolean highlight) { public Object resetExplosionKnockback(Object packet) {
return new SimulatorEntity15(world, tntPosition, highlight); PacketPlayOutExplosion packetPlayOutExplosion = (PacketPlayOutExplosion) packet;
} return new PacketPlayOutExplosion(a.get(packetPlayOutExplosion), b.get(packetPlayOutExplosion), c.get(packetPlayOutExplosion), d.get(packetPlayOutExplosion), e.get(packetPlayOutExplosion), Vec3D.a);
@Override
public AbstractDetonatorEntity constructDetonator(World world, Vector position) {
return new DetonatorEntity15(world, position);
}
@Override
public AbstractTraceEntity createTrace(World world, Vector tntPosition, boolean tnt) {
return new TraceEntity15(world, tntPosition, tnt);
} }
} }

Datei anzeigen

@ -0,0 +1,43 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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 org.bukkit.Material;
public class PlaceItemWrapper15 implements PlaceItemWrapper {
public PlaceItemWrapper15() {
for (Material material : Material.values()) {
if (!material.isBlock()) continue;
if (material.isLegacy()) continue;
String nonWall = material.name().replace("_WALL_", "").replace("WALL_", "").replace("_WALL", "");
try {
Material nonWallMaterial = Material.valueOf(nonWall);
if (nonWallMaterial != material && nonWallMaterial.isItem() && !nonWallMaterial.isBlock()) {
BLOCK_MATERIAL_TO_WALL_BLOCK_MATERIAL.put(nonWallMaterial, material);
}
} catch (Exception e) {
// Ignore
}
}
ITEM_MATERIAL_TO_BLOCK_MATERIAL.put(Material.REDSTONE, Material.REDSTONE_WIRE);
}
}

Datei anzeigen

@ -0,0 +1,59 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.Reflection;
import de.steamwar.bausystem.utils.PlayerMovementWrapper;
import net.minecraft.server.v1_15_R1.EntityPlayer;
import net.minecraft.server.v1_15_R1.PacketPlayInFlying;
import net.minecraft.server.v1_15_R1.PacketPlayOutEntity;
import net.minecraft.server.v1_15_R1.PacketPlayOutEntityTeleport;
import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class PlayerMovementWrapper15 implements PlayerMovementWrapper {
@Override
public void setPosition(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (Float.isNaN(packetPlayInFlying.a(Float.NaN))) {
entityPlayer.e(packetPlayInFlying.a(0.0), packetPlayInFlying.b(0.0), packetPlayInFlying.c(0.0));
} else {
entityPlayer.setLocation(packetPlayInFlying.a(0.0), packetPlayInFlying.b(0.0), packetPlayInFlying.c(0.0), packetPlayInFlying.a(0F), packetPlayInFlying.b(0F));
}
}
@Override
public Object convertToOut(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
Object packet = Reflection.newInstance(teleportPacket);
teleportEntity.set(packet, player.getEntityId());
teleportPosition.set(packet, packetPlayInFlying.a(0.0), packetPlayInFlying.b(0.0), packetPlayInFlying.c(0.0));
if (Float.isNaN(packetPlayInFlying.a(Float.NaN))) {
teleportYaw.set(packet, rotToByte(player.getLocation().getYaw()));
teleportPitch.set(packet, rotToByte(player.getLocation().getPitch()));
} else {
teleportYaw.set(packet, rotToByte(packetPlayInFlying.a(0.0F)));
teleportPitch.set(packet, rotToByte(packetPlayInFlying.b(0.0F)));
}
return packet;
}
}

Datei anzeigen

@ -0,0 +1,23 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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;
public class TickListener15 implements TickListener {
}

Datei anzeigen

@ -27,8 +27,8 @@ version '1.0'
compileJava.options.encoding = 'UTF-8' compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 1.8 sourceCompatibility = 17
targetCompatibility = 1.8 targetCompatibility = 17
sourceSets { sourceSets {
main { main {

Datei anzeigen

@ -1,95 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.entities;
import de.steamwar.bausystem.features.detonator.AbstractDetonatorEntity;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata;
import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
import net.minecraft.server.network.PlayerConnection;
import net.minecraft.world.entity.EntityTypes;
import net.minecraft.world.entity.item.EntityFallingBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.phys.Vec3D;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class DetonatorEntity18 extends EntityFallingBlock implements AbstractDetonatorEntity {
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
private final Vector position;
private int references = 0;
public DetonatorEntity18(World world, Vector position) {
super(((CraftWorld) world).getHandle(), position.getX(), position.getY(), position.getZ(), Blocks.du.n());
this.position = position;
this.h(true);
this.e(true);
this.S = -12000;
}
@Override
public int getId() {
return ae();
}
@Override
public void display(Player player) {
if (references++ > 0)
return;
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(getId(), cm(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.C, Block.i(Blocks.du.n()), ZERO);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().b;
playerConnection.a(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(getId(), Y, true);
playerConnection.a(packetPlayOutEntityMetadata);
}
@Override
public boolean hide(Player player, boolean force) {
if (!force && --references > 0)
return false;
sendDestroy(player);
ag();
return true;
}
private void sendDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(getId());
((CraftPlayer) player).getHandle().b.a(packetPlayOutEntityDestroy);
}
@Override
public void sendEntity(Player player) {
display(player);
}
@Override
public void sendEntityDestroy(Player player) {
hide(player, false);
}
}

Datei anzeigen

@ -1,68 +0,0 @@
/*
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.entities;
import de.steamwar.bausystem.features.simulator.AbstractSimulatorEntity;
import de.steamwar.bausystem.shared.BaseEntity18;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class SimulatorEntity18 extends BaseEntity18 implements AbstractSimulatorEntity {
private boolean printed = false;
public SimulatorEntity18(World world, Vector position, boolean highlight) {
super(world, position, highlight ? Material.WHITE_STAINED_GLASS : Material.TNT);
this.e(true);
this.S = -12000;
}
@Override
public int getId() {
return ae();
}
@Override
public void display(Player player) {
if (printed) return;
printed = true;
sendEntity(player);
}
@Override
public void setPosition(Vector position) {
this.position = position;
e(position.getX(), position.getY(), position.getZ());
}
@Override
public boolean hide(Player player, boolean force) {
if (!printed) return false;
printed = false;
sendEntityDestroy(player);
ag();
return true;
}
}

Datei anzeigen

@ -1,73 +0,0 @@
/*
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.entities;
import de.steamwar.bausystem.features.tracer.AbstractTraceEntity;
import de.steamwar.bausystem.shared.BaseEntity18;
import de.steamwar.bausystem.shared.ReferenceCounter;
import net.minecraft.network.chat.ChatComponentText;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class TraceEntity18 extends BaseEntity18 implements AbstractTraceEntity {
private boolean exploded = false;
private ReferenceCounter referenceCounter = new ReferenceCounter();
public TraceEntity18(World world, Vector position, boolean tnt) {
super(world, position, tnt ? Material.TNT : Material.WHITE_STAINED_GLASS);
this.e(true);
this.S = -12000;
}
@Override
public void display(Player player, boolean exploded, int ticks) {
if (ticks != -1) {
this.n(true);
this.a(new ChatComponentText(ticks + ""));
}
if (!this.exploded && exploded) {
this.n(true);
this.a(new ChatComponentText("Bumm"));
this.exploded = true;
if (referenceCounter.increment() > 0) {
sendEntityDestroy(player);
}
} else if (referenceCounter.increment() > 0) {
return;
}
sendEntity(player);
}
@Override
public boolean hide(Player player, boolean force) {
if (!force && referenceCounter.decrement() > 0) {
return false;
}
sendEntityDestroy(player);
ag();
return true;
}
}

Datei anzeigen

@ -1,60 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.entities;
import de.steamwar.bausystem.features.warp.AbstractWarpEntity;
import de.steamwar.bausystem.shared.BaseArmorStand18;
import net.minecraft.network.chat.ChatComponentText;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class WarpEntity18 extends BaseArmorStand18 implements AbstractWarpEntity {
private String name;
public WarpEntity18(World world, Vector position, String name) {
super(world, position);
this.j(true);
this.a(true);
this.name = name;
this.e(true);
this.S = -12000;
}
@Override
public void display(Player player) {
this.n(true);
this.a(new ChatComponentText(name));
sendEntity(player);
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public boolean hide(Player player) {
sendEntityDestroy(player);
ag();
return true;
}
}

Datei anzeigen

@ -1,62 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.shared;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata;
import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
import net.minecraft.server.network.PlayerConnection;
import net.minecraft.world.entity.EntityTypes;
import net.minecraft.world.entity.decoration.EntityArmorStand;
import net.minecraft.world.phys.Vec3D;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class BaseArmorStand18 extends EntityArmorStand implements AbstractEntity {
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
protected Vector position;
public BaseArmorStand18(World world, Vector position) {
super(((CraftWorld) world).getHandle(), position.getX(), position.getY(), position.getZ());
this.position = position;
e(true);
S = -12000;
}
public void sendEntity(Player player) {
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(ae(), cm(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.c, 0, ZERO);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().b;
playerConnection.a(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(ae(), Y, true);
playerConnection.a(packetPlayOutEntityMetadata);
}
public void sendEntityDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(ae());
((CraftPlayer) player).getHandle().b.a(packetPlayOutEntityDestroy);
}
}

Datei anzeigen

@ -1,68 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.shared;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata;
import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
import net.minecraft.server.network.PlayerConnection;
import net.minecraft.world.entity.EntityTypes;
import net.minecraft.world.entity.item.EntityFallingBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.IBlockData;
import net.minecraft.world.phys.Vec3D;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class BaseEntity18 extends EntityFallingBlock implements AbstractEntity {
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
private final IBlockData iBlockData;
protected Vector position;
public BaseEntity18(World world, Vector position, Material blockType) {
super(((CraftWorld) world).getHandle(), position.getX(), position.getY(), position.getZ(), ((CraftBlockData) blockType.createBlockData()).getState());
this.iBlockData = ((CraftBlockData) blockType.createBlockData()).getState();
this.position = position;
this.e(true);
this.S = -12000;
}
public void sendEntity(Player player) {
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(ae(), cm(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.C, Block.i(iBlockData), ZERO);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().b;
playerConnection.a(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(ae(), Y, true);
playerConnection.a(packetPlayOutEntityMetadata);
}
public void sendEntityDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(ae());
((CraftPlayer) player).getHandle().b.a(packetPlayOutEntityDestroy);
}
}

Datei anzeigen

@ -21,43 +21,35 @@ package de.steamwar.bausystem.utils;
import com.comphenix.tinyprotocol.Reflection; import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.entities.DetonatorEntity18;
import de.steamwar.bausystem.entities.SimulatorEntity18;
import de.steamwar.bausystem.entities.TraceEntity18;
import de.steamwar.bausystem.entities.WarpEntity18;
import de.steamwar.bausystem.features.detonator.AbstractDetonatorEntity;
import de.steamwar.bausystem.features.util.NoClipCommand; import de.steamwar.bausystem.features.util.NoClipCommand;
import de.steamwar.bausystem.features.simulator.AbstractSimulatorEntity;
import de.steamwar.bausystem.features.tracer.AbstractTraceEntity;
import de.steamwar.bausystem.features.warp.AbstractWarpEntity;
import net.minecraft.SystemUtils; import net.minecraft.SystemUtils;
import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.PacketPlayOutEntityTeleport;
import net.minecraft.network.protocol.game.PacketPlayOutEntityVelocity;
import net.minecraft.network.protocol.game.PacketPlayOutGameStateChange;
import net.minecraft.server.level.PlayerInteractManager; import net.minecraft.server.level.PlayerInteractManager;
import net.minecraft.world.level.EnumGamemode; import net.minecraft.world.level.EnumGamemode;
import net.minecraft.world.phys.Vec3D; import net.minecraft.world.phys.Vec3D;
import org.bukkit.*; import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity; import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack; import org.bukkit.craftbukkit.v1_18_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.LongSupplier; import java.util.function.LongSupplier;
public class NMSWrapper18 implements NMSWrapper.INMSWrapper { public class NMSWrapper18 implements NMSWrapper {
private static final Reflection.FieldAccessor<EnumGamemode> playerGameMode = Reflection.getField(PlayerInteractManager.class, EnumGamemode.class, 0); private static final Reflection.FieldAccessor<EnumGamemode> playerGameMode = Reflection.getField(PlayerInteractManager.class, EnumGamemode.class, 0);
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void setInternalGameMode(Player player, GameMode gameMode) { public void setInternalGameMode(Player player, GameMode gameMode) {
@ -66,36 +58,23 @@ public class NMSWrapper18 implements NMSWrapper.INMSWrapper {
} }
@Override @Override
public void init(LongSupplier longSupplier) { public void setSlotToItemStack(Player player, Object o) {
SystemUtils.a = () -> System.nanoTime() + longSupplier.getAsLong(); PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot = (PacketPlayInSetCreativeSlot) o;
int index = packetPlayInSetCreativeSlot.b();
if (index >= 36 && index <= 44) {
index -= 36;
} else if (index > 44) {
index -= 5;
} else if (index <= 8) {
index = index - 8 + 36;
} }
player.getInventory().setItem(index, CraftItemStack.asBukkitCopy(packetPlayInSetCreativeSlot.c()));
private static final List<Packet<?>> packets = new ArrayList<>(); if (index < 9) player.getInventory().setHeldItemSlot(index);
private static final Vec3D noMotion = new Vec3D(0, 0, 0); player.updateInventory();
@Override
public void createTickCache(World world) {
packets.clear();
world.getEntities().stream().filter(entity -> !(entity instanceof Player)).forEach(entity -> {
packets.add(new PacketPlayOutEntityVelocity(entity.getEntityId(), noMotion));
packets.add(new PacketPlayOutEntityTeleport(((CraftEntity) entity).getHandle()));
if (entity instanceof TNTPrimed) {
net.minecraft.world.entity.Entity serverEntity = ((CraftEntity) entity).getHandle();
packets.add(new PacketPlayOutEntityMetadata(serverEntity.ae(), serverEntity.ai(), true));
}
});
}
@Override
public void sendTickPackets() {
Bukkit.getOnlinePlayers().forEach(player -> {
for (Packet<?> p : packets) {
TinyProtocol.instance.sendPacket(player, p);
}
});
} }
private static final Reflection.FieldAccessor<PacketPlayOutGameStateChange.a> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, PacketPlayOutGameStateChange.a.class, 12); private static final Reflection.FieldAccessor<PacketPlayOutGameStateChange.a> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, PacketPlayOutGameStateChange.a.class, 12);
@Override @Override
public void setGameStateChangeReason(Object packet) { public void setGameStateChangeReason(Object packet) {
gameStateChangeReason.set(packet, PacketPlayOutGameStateChange.d); gameStateChangeReason.set(packet, PacketPlayOutGameStateChange.d);
@ -107,17 +86,13 @@ public class NMSWrapper18 implements NMSWrapper.INMSWrapper {
((CraftPlayer) player).getHandle().fs().e = true; ((CraftPlayer) player).getHandle().fs().e = true;
} }
@Override
public Particle tntPositionParticle() {
return Particle.BLOCK_MARKER;
}
@Override @Override
public Material pathMaterial() { public Material pathMaterial() {
return Material.DIRT_PATH; return Material.DIRT_PATH;
} }
private static final int threshold = 2048; private static final int threshold = 2048;
@Override @Override
public boolean checkItemStack(ItemStack item) { public boolean checkItemStack(ItemStack item) {
net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
@ -155,23 +130,16 @@ public class NMSWrapper18 implements NMSWrapper.INMSWrapper {
return invalid; return invalid;
} }
@Override private final Class<?> explosionPacket = Reflection.getClass("{nms.network.protocol.game}.PacketPlayOutExplosion");
public AbstractWarpEntity createWarp(World world, Vector position, String name) { private final Reflection.FieldAccessor<Double> a = Reflection.getField(explosionPacket, double.class, 0);
return new WarpEntity18(world, position, name); private final Reflection.FieldAccessor<Double> b = Reflection.getField(explosionPacket, double.class, 1);
} private final Reflection.FieldAccessor<Double> c = Reflection.getField(explosionPacket, double.class, 2);
private final Reflection.FieldAccessor<Float> d = Reflection.getField(explosionPacket, float.class, 0);
private final Reflection.FieldAccessor<List> e = Reflection.getField(explosionPacket, List.class, 0);
@Override @Override
public AbstractSimulatorEntity createSimulator(World world, Vector tntPosition, boolean highlight) { public Object resetExplosionKnockback(Object packet) {
return new SimulatorEntity18(world, tntPosition, highlight); PacketPlayOutExplosion packetPlayOutExplosion = (PacketPlayOutExplosion) packet;
} return new PacketPlayOutExplosion(a.get(packetPlayOutExplosion), b.get(packetPlayOutExplosion), c.get(packetPlayOutExplosion), d.get(packetPlayOutExplosion), e.get(packetPlayOutExplosion), null);
@Override
public AbstractDetonatorEntity constructDetonator(World world, Vector position) {
return new DetonatorEntity18(world, position);
}
@Override
public AbstractTraceEntity createTrace(World world, Vector tntPosition, boolean tnt) {
return new TraceEntity18(world, tntPosition, tnt);
} }
} }

Datei anzeigen

@ -0,0 +1,57 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.Reflection;
import de.steamwar.bausystem.utils.PlayerMovementWrapper;
import net.minecraft.network.protocol.game.PacketPlayInFlying;
import net.minecraft.server.level.EntityPlayer;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
public class PlayerMovementWrapper18 implements PlayerMovementWrapper {
@Override
public void setPosition(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (packetPlayInFlying.h) {
entityPlayer.b(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c, packetPlayInFlying.d, packetPlayInFlying.e);
} else {
entityPlayer.e(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c);
}
}
@Override
public Object convertToOut(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
Object packet = Reflection.newInstance(teleportPacket);
teleportEntity.set(packet, player.getEntityId());
teleportPosition.set(packet, packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c);
if (packetPlayInFlying.h) {
teleportYaw.set(packet, rotToByte(player.getLocation().getYaw()));
teleportPitch.set(packet, rotToByte(player.getLocation().getPitch()));
} else {
teleportYaw.set(packet, rotToByte(packetPlayInFlying.d));
teleportPitch.set(packet, rotToByte(packetPlayInFlying.e));
}
return packet;
}
}

Datei anzeigen

@ -27,8 +27,8 @@ version '1.0'
compileJava.options.encoding = 'UTF-8' compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 1.8 sourceCompatibility = 17
targetCompatibility = 1.8 targetCompatibility = 17
sourceSets { sourceSets {
main { main {
@ -51,6 +51,7 @@ dependencies {
implementation project(":BauSystem_Main") implementation project(":BauSystem_Main")
compileOnly 'org.spigotmc:spigot-api:1.19-R0.1-SNAPSHOT' compileOnly 'org.spigotmc:spigot-api:1.19-R0.1-SNAPSHOT'
compileOnly 'io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT'
compileOnly 'it.unimi.dsi:fastutil:8.5.6' compileOnly 'it.unimi.dsi:fastutil:8.5.6'
compileOnly 'com.mojang:datafixerupper:4.0.26' compileOnly 'com.mojang:datafixerupper:4.0.26'
compileOnly 'io.netty:netty-all:4.1.68.Final' compileOnly 'io.netty:netty-all:4.1.68.Final'

Datei anzeigen

@ -1,124 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.entities;
import de.steamwar.bausystem.features.detonator.AbstractDetonatorEntity;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata;
import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
import net.minecraft.server.network.PlayerConnection;
import net.minecraft.world.entity.EntityTypes;
import net.minecraft.world.entity.item.EntityFallingBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.IBlockData;
import net.minecraft.world.phys.Vec3D;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.lang.reflect.Field;
public class DetonatorEntity19 extends EntityFallingBlock implements AbstractDetonatorEntity {
private static final Field ao;
static {
try {
ao = EntityFallingBlock.class.getDeclaredField("ao");
ao.setAccessible(true);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
}
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
private final Vector position;
private int references = 0;
private IBlockData iBlockData;
public DetonatorEntity19(World world, Vector position) {
super(EntityTypes.E, ((CraftWorld) world).getHandle());
try {
ao.set(this, ((CraftBlockData) Material.RED_STAINED_GLASS.createBlockData()).getState());
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
this.q = true;
e(position.getX(), position.getY(), position.getZ());
f(Vec3D.b);
t = position.getX();
u = position.getY();
v = position.getZ();
a(this.db());
this.iBlockData = ((CraftBlockData) Material.RED_STAINED_GLASS.createBlockData()).getState();
this.position = position;
this.e(true);
this.S = -12000;
}
@Override
public int getId() {
return ae();
}
@Override
public void display(Player player) {
if (references++ > 0)
return;
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(ae(), cp(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.E, Block.i(iBlockData), ZERO, 0.0);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().b;
playerConnection.a(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(getId(), Y, true);
playerConnection.a(packetPlayOutEntityMetadata);
}
@Override
public boolean hide(Player player, boolean force) {
if (!force && --references > 0)
return false;
sendDestroy(player);
ag();
return true;
}
private void sendDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(getId());
((CraftPlayer) player).getHandle().b.a(packetPlayOutEntityDestroy);
}
@Override
public void sendEntity(Player player) {
display(player);
}
@Override
public void sendEntityDestroy(Player player) {
hide(player, false);
}
}

Datei anzeigen

@ -1,68 +0,0 @@
/*
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.entities;
import de.steamwar.bausystem.features.simulator.AbstractSimulatorEntity;
import de.steamwar.bausystem.shared.BaseEntity19;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class SimulatorEntity19 extends BaseEntity19 implements AbstractSimulatorEntity {
private boolean printed = false;
public SimulatorEntity19(World world, Vector position, boolean highlight) {
super(world, position, highlight ? Material.WHITE_STAINED_GLASS : Material.TNT);
this.e(true);
this.S = -12000;
}
@Override
public int getId() {
return ae();
}
@Override
public void display(Player player) {
if (printed) return;
printed = true;
sendEntity(player);
}
@Override
public void setPosition(Vector position) {
this.position = position;
e(position.getX(), position.getY(), position.getZ());
}
@Override
public boolean hide(Player player, boolean force) {
if (!printed) return false;
printed = false;
sendEntityDestroy(player);
ag();
return true;
}
}

Datei anzeigen

@ -1,74 +0,0 @@
/*
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.entities;
import de.steamwar.bausystem.features.tracer.AbstractTraceEntity;
import de.steamwar.bausystem.shared.BaseEntity19;
import de.steamwar.bausystem.shared.ReferenceCounter;
import net.minecraft.network.chat.IChatMutableComponent;
import net.minecraft.network.chat.contents.LiteralContents;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class TraceEntity19 extends BaseEntity19 implements AbstractTraceEntity {
private boolean exploded = false;
private ReferenceCounter referenceCounter = new ReferenceCounter();
public TraceEntity19(World world, Vector position, boolean tnt) {
super(world, position, tnt ? Material.TNT : Material.WHITE_STAINED_GLASS);
this.e(true);
this.S = -12000;
}
@Override
public void display(Player player, boolean exploded, int ticks) {
if (ticks != -1) {
this.n(true);
this.a(IChatMutableComponent.a(new LiteralContents(ticks + "")));
}
if (!this.exploded && exploded) {
this.n(true);
this.a(IChatMutableComponent.a(new LiteralContents("Bumm")));
this.exploded = true;
if (referenceCounter.increment() > 0) {
sendEntityDestroy(player);
}
} else if (referenceCounter.increment() > 0) {
return;
}
sendEntity(player);
}
@Override
public boolean hide(Player player, boolean force) {
if (!force && referenceCounter.decrement() > 0) {
return false;
}
sendEntityDestroy(player);
ag();
return true;
}
}

Datei anzeigen

@ -1,61 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.entities;
import de.steamwar.bausystem.features.warp.AbstractWarpEntity;
import de.steamwar.bausystem.shared.BaseArmorStand19;
import net.minecraft.network.chat.IChatMutableComponent;
import net.minecraft.network.chat.contents.LiteralContents;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class WarpEntity19 extends BaseArmorStand19 implements AbstractWarpEntity {
private String name;
public WarpEntity19(World world, Vector position, String name) {
super(world, position);
this.j(true);
this.a(true);
this.name = name;
this.e(true);
this.S = -12000;
}
@Override
public void display(Player player) {
this.n(true);
this.a(IChatMutableComponent.a(new LiteralContents(name)));
sendEntity(player);
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public boolean hide(Player player) {
sendEntityDestroy(player);
ag();
return true;
}
}

Datei anzeigen

@ -1,62 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.shared;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata;
import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
import net.minecraft.server.network.PlayerConnection;
import net.minecraft.world.entity.EntityTypes;
import net.minecraft.world.entity.decoration.EntityArmorStand;
import net.minecraft.world.phys.Vec3D;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
public class BaseArmorStand19 extends EntityArmorStand implements AbstractEntity {
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
protected Vector position;
public BaseArmorStand19(World world, Vector position) {
super(((CraftWorld) world).getHandle(), position.getX(), position.getY(), position.getZ());
this.position = position;
e(true);
S = -12000;
}
public void sendEntity(Player player) {
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(ae(), cp(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.c, 0, ZERO, 0.0);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().b;
playerConnection.a(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(ae(), Y, true);
playerConnection.a(packetPlayOutEntityMetadata);
}
public void sendEntityDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(ae());
((CraftPlayer) player).getHandle().b.a(packetPlayOutEntityDestroy);
}
}

Datei anzeigen

@ -1,94 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.shared;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata;
import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity;
import net.minecraft.server.network.PlayerConnection;
import net.minecraft.world.entity.EntityTypes;
import net.minecraft.world.entity.item.EntityFallingBlock;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.IBlockData;
import net.minecraft.world.phys.Vec3D;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.block.data.CraftBlockData;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.lang.reflect.Field;
public class BaseEntity19 extends EntityFallingBlock implements AbstractEntity {
private static final Field ao;
static {
try {
ao = EntityFallingBlock.class.getDeclaredField("ao");
ao.setAccessible(true);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
}
private static final Vec3D ZERO = new Vec3D(0, 0, 0);
private final IBlockData iBlockData;
protected Vector position;
public BaseEntity19(World world, Vector position, Material blockType) {
super(EntityTypes.E, ((CraftWorld) world).getHandle());
try {
ao.set(this, ((CraftBlockData) blockType.createBlockData()).getState());
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
this.q = true;
e(position.getX(), position.getY(), position.getZ());
f(Vec3D.b);
t = position.getX();
u = position.getY();
v = position.getZ();
a(this.db());
this.iBlockData = ((CraftBlockData) blockType.createBlockData()).getState();
this.position = position;
this.e(true);
this.S = -12000;
}
public void sendEntity(Player player) {
PacketPlayOutSpawnEntity packetPlayOutSpawnEntity = new PacketPlayOutSpawnEntity(ae(), cp(), position.getX(), position.getY(), position.getZ(), 0, 0, EntityTypes.E, Block.i(iBlockData), ZERO, 0.0);
PlayerConnection playerConnection = ((CraftPlayer) player).getHandle().b;
playerConnection.a(packetPlayOutSpawnEntity);
PacketPlayOutEntityMetadata packetPlayOutEntityMetadata = new PacketPlayOutEntityMetadata(ae(), Y, true);
playerConnection.a(packetPlayOutEntityMetadata);
}
public void sendEntityDestroy(Player player) {
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(ae());
((CraftPlayer) player).getHandle().b.a(packetPlayOutEntityDestroy);
}
}

Datei anzeigen

@ -21,81 +21,60 @@ package de.steamwar.bausystem.utils;
import com.comphenix.tinyprotocol.Reflection; import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.entities.DetonatorEntity19;
import de.steamwar.bausystem.entities.SimulatorEntity19;
import de.steamwar.bausystem.entities.TraceEntity19;
import de.steamwar.bausystem.entities.WarpEntity19;
import de.steamwar.bausystem.features.detonator.AbstractDetonatorEntity;
import de.steamwar.bausystem.features.util.NoClipCommand; import de.steamwar.bausystem.features.util.NoClipCommand;
import de.steamwar.bausystem.features.simulator.AbstractSimulatorEntity;
import de.steamwar.bausystem.features.tracer.AbstractTraceEntity;
import de.steamwar.bausystem.features.warp.AbstractWarpEntity;
import net.minecraft.SystemUtils; import net.minecraft.SystemUtils;
import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata; import net.minecraft.network.protocol.game.*;
import net.minecraft.network.protocol.game.PacketPlayOutEntityTeleport; import net.minecraft.network.syncher.DataWatcher;
import net.minecraft.network.protocol.game.PacketPlayOutEntityVelocity;
import net.minecraft.network.protocol.game.PacketPlayOutGameStateChange;
import net.minecraft.server.level.PlayerInteractManager; import net.minecraft.server.level.PlayerInteractManager;
import net.minecraft.world.level.EnumGamemode; import net.minecraft.world.level.EnumGamemode;
import net.minecraft.world.phys.Vec3D; import net.minecraft.world.phys.Vec3D;
import org.bukkit.*; import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity; import org.bukkit.GameMode;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; import org.bukkit.World;
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_19_R2.inventory.CraftItemStack;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.LongSupplier; import java.util.function.LongSupplier;
public class NMSWrapper19 implements NMSWrapper.INMSWrapper { public class NMSWrapper19 implements NMSWrapper {
private static final Reflection.FieldAccessor<EnumGamemode> playerGameMode = Reflection.getField(PlayerInteractManager.class, EnumGamemode.class, 0); private static final Reflection.FieldAccessor<EnumGamemode> playerGameMode = Reflection.getField(PlayerInteractManager.class, EnumGamemode.class, 0);
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void setInternalGameMode(Player player, GameMode gameMode) { public void setInternalGameMode(Player player, GameMode gameMode) {
playerGameMode.set(((CraftPlayer) player).getHandle().d, EnumGamemode.a(gameMode.getValue())); playerGameMode.set(((CraftPlayer) player).getHandle().d, EnumGamemode.a(gameMode.getValue()));
} }
@Override @Override
public void init(LongSupplier longSupplier) { public void setSlotToItemStack(Player player, Object o) {
SystemUtils.a = () -> System.nanoTime() + longSupplier.getAsLong(); PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot = (PacketPlayInSetCreativeSlot) o;
int index = packetPlayInSetCreativeSlot.b();
if (index >= 36 && index <= 44) {
index -= 36;
} else if (index > 44) {
index -= 5;
} else if (index <= 8) {
index = index - 8 + 36;
} }
player.getInventory().setItem(index, CraftItemStack.asBukkitCopy(packetPlayInSetCreativeSlot.c()));
private static final List<Packet<?>> packets = new ArrayList<>(); if (index < 9) player.getInventory().setHeldItemSlot(index);
private static final Vec3D noMotion = new Vec3D(0, 0, 0); player.updateInventory();
@Override
public void createTickCache(World world) {
packets.clear();
world.getEntities().stream().filter(entity -> !(entity instanceof Player)).forEach(entity -> {
packets.add(new PacketPlayOutEntityVelocity(entity.getEntityId(), noMotion));
packets.add(new PacketPlayOutEntityTeleport(((CraftEntity) entity).getHandle()));
if (entity instanceof TNTPrimed) {
net.minecraft.world.entity.Entity serverEntity = ((CraftEntity) entity).getHandle();
packets.add(new PacketPlayOutEntityMetadata(serverEntity.ae(), serverEntity.ai(), true));
}
});
}
@Override
public void sendTickPackets() {
Bukkit.getOnlinePlayers().forEach(player -> {
for (Packet<?> p : packets) {
TinyProtocol.instance.sendPacket(player, p);
}
});
} }
private static final Reflection.FieldAccessor<PacketPlayOutGameStateChange.a> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, PacketPlayOutGameStateChange.a.class, 12); private static final Reflection.FieldAccessor<PacketPlayOutGameStateChange.a> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, PacketPlayOutGameStateChange.a.class, 12);
@Override @Override
public void setGameStateChangeReason(Object packet) { public void setGameStateChangeReason(Object packet) {
gameStateChangeReason.set(packet, PacketPlayOutGameStateChange.d); gameStateChangeReason.set(packet, PacketPlayOutGameStateChange.d);
@ -103,13 +82,8 @@ public class NMSWrapper19 implements NMSWrapper.INMSWrapper {
@Override @Override
public void setPlayerBuildAbilities(Player player) { public void setPlayerBuildAbilities(Player player) {
((CraftPlayer) player).getHandle().fC().d = true; ((CraftPlayer) player).getHandle().fF().d = true;
((CraftPlayer) player).getHandle().fC().e = true; ((CraftPlayer) player).getHandle().fF().e = true;
}
@Override
public Particle tntPositionParticle() {
return Particle.BLOCK_MARKER;
} }
@Override @Override
@ -118,6 +92,7 @@ public class NMSWrapper19 implements NMSWrapper.INMSWrapper {
} }
private static final int threshold = 2048; private static final int threshold = 2048;
@Override @Override
public boolean checkItemStack(ItemStack item) { public boolean checkItemStack(ItemStack item) {
net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(item); net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
@ -155,23 +130,16 @@ public class NMSWrapper19 implements NMSWrapper.INMSWrapper {
return invalid; return invalid;
} }
@Override private final Class<?> explosionPacket = Reflection.getClass("{nms.network.protocol.game}.PacketPlayOutExplosion");
public AbstractWarpEntity createWarp(World world, Vector position, String name) { private final Reflection.FieldAccessor<Double> a = Reflection.getField(explosionPacket, double.class, 0);
return new WarpEntity19(world, position, name); private final Reflection.FieldAccessor<Double> b = Reflection.getField(explosionPacket, double.class, 1);
} private final Reflection.FieldAccessor<Double> c = Reflection.getField(explosionPacket, double.class, 2);
private final Reflection.FieldAccessor<Float> d = Reflection.getField(explosionPacket, float.class, 0);
private final Reflection.FieldAccessor<List> e = Reflection.getField(explosionPacket, List.class, 0);
@Override @Override
public AbstractSimulatorEntity createSimulator(World world, Vector tntPosition, boolean highlight) { public Object resetExplosionKnockback(Object packet) {
return new SimulatorEntity19(world, tntPosition, highlight); PacketPlayOutExplosion packetPlayOutExplosion = (PacketPlayOutExplosion) packet;
} return new PacketPlayOutExplosion(a.get(packetPlayOutExplosion), b.get(packetPlayOutExplosion), c.get(packetPlayOutExplosion), d.get(packetPlayOutExplosion), e.get(packetPlayOutExplosion), null);
@Override
public AbstractDetonatorEntity constructDetonator(World world, Vector position) {
return new DetonatorEntity19(world, position);
}
@Override
public AbstractTraceEntity createTrace(World world, Vector tntPosition, boolean tnt) {
return new TraceEntity19(world, tntPosition, tnt);
} }
} }

Datei anzeigen

@ -0,0 +1,61 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.Reflection;
import net.minecraft.network.protocol.game.PacketPlayInFlying;
import net.minecraft.server.level.EntityPlayer;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class PlayerMovementWrapper19 implements PlayerMovementWrapper {
@Override
public void setPosition(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (packetPlayInFlying.h) {
entityPlayer.b(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c, packetPlayInFlying.d, packetPlayInFlying.e);
} else {
entityPlayer.e(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c);
}
}
@Override
public Object convertToOut(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
Object packet = Reflection.newInstance(teleportPacket);
teleportEntity.set(packet, player.getEntityId());
teleportPosition.set(packet, packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c);
if (packetPlayInFlying.h) {
teleportYaw.set(packet, rotToByte(player.getLocation().getYaw()));
teleportPitch.set(packet, rotToByte(player.getLocation().getPitch()));
} else {
teleportYaw.set(packet, rotToByte(packetPlayInFlying.d));
teleportPitch.set(packet, rotToByte(packetPlayInFlying.e));
}
return packet;
}
}

Datei anzeigen

@ -1,33 +0,0 @@
/*
This file is a part of the SteamWar software.
Copyright (C) 2021 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.Reflection;
import com.mojang.authlib.GameProfile;
import de.steamwar.bausystem.features.util.NoClipCommand;
public class ProtocolWrapper19 implements ProtocolWrapper {
private static final Reflection.ConstructorInvoker playerInfoDataConstructor = Reflection.getConstructor(NoClipCommand.playerInfoDataClass, GameProfile.class, int.class, NoClipCommand.enumGamemode, NoClipCommand.iChatBaseComponent, Reflection.getClass("net.minecraft.world.entity.player.ProfilePublicKey$a"));
@Override
public Object playerInfoDataConstructor(Object packet, GameProfile profile, Object mode) {
return playerInfoDataConstructor.invoke(profile, 0, mode, null, null);
}
}

Datei anzeigen

@ -0,0 +1,51 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.destroystokyo.paper.event.server.ServerTickEndEvent;
import com.destroystokyo.paper.event.server.ServerTickStartEvent;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.tpslimit.TPSFreezeUtils;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class TickListener19 implements TickListener, Listener {
private boolean tickStartRan = false;
public TickListener19() {
Bukkit.getPluginManager().registerEvents(this, BauSystem.getInstance());
}
@EventHandler
public void onServerTickStart(ServerTickStartEvent event) {
if (TPSFreezeUtils.isFrozen()) return;
Bukkit.getPluginManager().callEvent(new TickStartEvent());
tickStartRan = true;
}
@EventHandler
public void onServerTickEnd(ServerTickEndEvent event) {
if (!tickStartRan) return;
Bukkit.getPluginManager().callEvent(new TickEndEvent());
tickStartRan = false;
}
}

62
BauSystem_20/build.gradle Normale Datei
Datei anzeigen

@ -0,0 +1,62 @@
/*
* 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/>.
*/
plugins {
id 'base'
id 'java'
}
group 'steamwar'
version '1.0'
compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 17
targetCompatibility = 17
sourceSets {
main {
java {
srcDirs = ['src/']
}
resources {
srcDirs = ['src/']
exclude '**/*.java', '**/*.kt'
}
}
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.22'
testCompileOnly 'org.projectlombok:lombok:1.18.22'
annotationProcessor 'org.projectlombok:lombok:1.18.22'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.22'
implementation project(":BauSystem_Main")
compileOnly 'org.spigotmc:spigot-api:1.20-R0.1-SNAPSHOT'
compileOnly 'it.unimi.dsi:fastutil:8.5.6'
compileOnly 'com.mojang:datafixerupper:4.0.26'
compileOnly 'io.netty:netty-all:4.1.68.Final'
compileOnly 'com.mojang:authlib:1.5.25'
compileOnly 'com.mojang:brigadier:1.0.18'
compileOnly swdep('Spigot-1.20')
compileOnly swdep('SpigotCore')
}

Datei anzeigen

@ -0,0 +1,136 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.Reflection;
import de.steamwar.bausystem.features.util.NoClipCommand;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.protocol.game.PacketPlayInSetCreativeSlot;
import net.minecraft.network.protocol.game.PacketPlayOutExplosion;
import net.minecraft.network.protocol.game.PacketPlayOutGameStateChange;
import net.minecraft.server.level.PlayerInteractManager;
import net.minecraft.world.level.EnumGamemode;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.util.List;
public class NMSWrapper20 implements NMSWrapper {
private static final Reflection.FieldAccessor<EnumGamemode> playerGameMode = Reflection.getField(PlayerInteractManager.class, EnumGamemode.class, 0);
@Override
@SuppressWarnings("deprecation")
public void setInternalGameMode(Player player, GameMode gameMode) {
playerGameMode.set(((CraftPlayer) player).getHandle().e, EnumGamemode.a(gameMode.getValue()));
}
@Override
public void setSlotToItemStack(Player player, Object o) {
PacketPlayInSetCreativeSlot packetPlayInSetCreativeSlot = (PacketPlayInSetCreativeSlot) o;
int index = packetPlayInSetCreativeSlot.a();
if (index >= 36 && index <= 44) {
index -= 36;
} else if (index > 44) {
index -= 5;
} else if (index <= 8) {
index = index - 8 + 36;
}
player.getInventory().setItem(index, CraftItemStack.asBukkitCopy(packetPlayInSetCreativeSlot.c()));
if (index < 9) player.getInventory().setHeldItemSlot(index);
player.updateInventory();
}
private static final Reflection.FieldAccessor<PacketPlayOutGameStateChange.a> gameStateChangeReason = Reflection.getField(NoClipCommand.gameStateChange, PacketPlayOutGameStateChange.a.class, 12);
@Override
public void setGameStateChangeReason(Object packet) {
gameStateChangeReason.set(packet, PacketPlayOutGameStateChange.d);
}
@Override
public void setPlayerBuildAbilities(Player player) {
((CraftPlayer) player).getHandle().fO().d = true;
((CraftPlayer) player).getHandle().fO().e = true;
}
@Override
public Material pathMaterial() {
return Material.DIRT_PATH;
}
private static final int threshold = 2048;
@Override
public boolean checkItemStack(ItemStack item) {
net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound tag = nmsItem.v();
if (tag != null && tag.e("BlockEntityTag")) {
NBTTagCompound blockTag = tag.p("BlockEntityTag");
if (blockTag.e("Items")) {
return drillDown(blockTag.c("Items", 10), 0, 0) > threshold;
}
}
return false;
}
private int drillDown(NBTTagList items, int layer, int start) {
if (layer > 2) return start + threshold;
int invalid = start;
for (NBTBase nbtBase : items) {
if (!(nbtBase instanceof NBTTagCompound))
continue;
NBTTagCompound slot = (NBTTagCompound) nbtBase;
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);
}
}
}
if (invalid > threshold)
break;
}
return invalid;
}
private final Class<?> explosionPacket = Reflection.getClass("{nms.network.protocol.game}.PacketPlayOutExplosion");
private final Reflection.FieldAccessor<Double> a = Reflection.getField(explosionPacket, double.class, 0);
private final Reflection.FieldAccessor<Double> b = Reflection.getField(explosionPacket, double.class, 1);
private final Reflection.FieldAccessor<Double> c = Reflection.getField(explosionPacket, double.class, 2);
private final Reflection.FieldAccessor<Float> d = Reflection.getField(explosionPacket, float.class, 0);
private final Reflection.FieldAccessor<List> e = Reflection.getField(explosionPacket, List.class, 0);
@Override
public Object resetExplosionKnockback(Object packet) {
PacketPlayOutExplosion packetPlayOutExplosion = (PacketPlayOutExplosion) packet;
return new PacketPlayOutExplosion(a.get(packetPlayOutExplosion), b.get(packetPlayOutExplosion), c.get(packetPlayOutExplosion), d.get(packetPlayOutExplosion), e.get(packetPlayOutExplosion), null);
}
}

Datei anzeigen

@ -0,0 +1,43 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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 org.bukkit.Material;
import org.bukkit.block.data.BlockData;
public class PlaceItemWrapper20 implements PlaceItemWrapper {
public PlaceItemWrapper20() {
for (Material material : Material.values()) {
if (!material.isBlock()) continue;
if (material.isLegacy()) continue;
BlockData blockData = material.createBlockData();
Material placementMaterial = blockData.getPlacementMaterial();
if (material == placementMaterial) continue;
if (placementMaterial == Material.AIR) continue;
if (placementMaterial.isItem() && !placementMaterial.isBlock()) {
ITEM_MATERIAL_TO_BLOCK_MATERIAL.put(placementMaterial, material);
}
if (material.name().contains("WALL")) {
BLOCK_MATERIAL_TO_WALL_BLOCK_MATERIAL.put(placementMaterial, material);
}
}
}
}

Datei anzeigen

@ -0,0 +1,62 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.Reflection;
import net.minecraft.network.protocol.game.PacketPlayInFlying;
import net.minecraft.network.protocol.game.PacketPlayOutEntityTeleport;
import net.minecraft.server.level.EntityPlayer;
import org.bukkit.Location;
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class PlayerMovementWrapper20 implements PlayerMovementWrapper {
@Override
public void setPosition(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (packetPlayInFlying.h) {
entityPlayer.b(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c, packetPlayInFlying.d, packetPlayInFlying.e);
} else {
entityPlayer.e(packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c);
}
}
@Override
public Object convertToOut(Player player, Object object) {
PacketPlayInFlying packetPlayInFlying = ((PacketPlayInFlying) object);
Object packet = Reflection.newInstance(teleportPacket);
teleportEntity.set(packet, player.getEntityId());
teleportPosition.set(packet, packetPlayInFlying.a, packetPlayInFlying.b, packetPlayInFlying.c);
if (packetPlayInFlying.h) {
teleportYaw.set(packet, rotToByte(player.getLocation().getYaw()));
teleportPitch.set(packet, rotToByte(player.getLocation().getPitch()));
} else {
teleportYaw.set(packet, rotToByte(packetPlayInFlying.d));
teleportPitch.set(packet, rotToByte(packetPlayInFlying.e));
}
return packet;
}
}

Datei anzeigen

@ -1,7 +1,7 @@
/* /*
* This file is a part of the SteamWar software. * This file is a part of the SteamWar software.
* *
* Copyright (C) 2021 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,20 +17,31 @@
* 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.loader.activations; plugins {
id 'base'
import de.steamwar.bausystem.features.loader.Loader; id 'java'
import org.bukkit.entity.Player;
public abstract class AbstractLoaderActivation {
Player p;
public AbstractLoaderActivation(Player p) {
this.p = p;
} }
public abstract boolean execute(); group 'steamwar'
version '1.0'
public abstract int delay(Loader loader); compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 17
targetCompatibility = 17
sourceSets {
main {
java {
srcDirs = ['src/']
}
resources {
srcDirs = ['src/']
exclude '**/*.java', '**/*.kt'
}
}
}
dependencies {
compileOnly swdep('SpigotCore')
} }

Datei anzeigen

@ -17,17 +17,24 @@
* 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.utils; package de.steamwar.linkage.types;
import com.comphenix.tinyprotocol.Reflection; import de.steamwar.linkage.LinkageType;
import com.mojang.authlib.GameProfile; import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.bausystem.features.util.NoClipCommand; import de.steamwar.linkage.plan.MethodBuilder;
public class ProtocolWrapper15 implements ProtocolWrapper { import javax.lang.model.element.TypeElement;
public class BauGuiItem_GENERIC implements LinkageType {
private static final Reflection.ConstructorInvoker playerInfoDataConstructor = Reflection.getConstructor(NoClipCommand.playerInfoDataClass, NoClipCommand.playerInfoPacket, GameProfile.class, int.class, NoClipCommand.enumGamemode, NoClipCommand.iChatBaseComponent);
@Override @Override
public Object playerInfoDataConstructor(Object packet, GameProfile profile, Object mode) { public String method() {
return playerInfoDataConstructor.invoke(packet, profile, 0, mode, null); return "linkGUIItems";
}
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) {
buildPlan.addImport("de.steamwar.bausystem.features.gui.BauGUI");
methodBuilder.addLine("BauGUI.addItem(" + s + ");");
} }
} }

Datei anzeigen

@ -1,7 +1,7 @@
/* /*
* This file is a part of the SteamWar software. * This file is a part of the SteamWar software.
* *
* Copyright (C) 2021 SteamWar.de-Serverteam * Copyright (C) 2022 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,22 +17,23 @@
* 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.linkage; package de.steamwar.linkage.types;
import org.atteo.classindex.IndexAnnotated; import de.steamwar.linkage.LinkageType;
import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.linkage.plan.MethodBuilder;
import java.lang.annotation.*; import javax.lang.model.element.TypeElement;
@IndexAnnotated public class BoundingBoxLoader_GENERIC implements LinkageType {
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Repeatable(Linked.Linkages.class)
public @interface Linked {
LinkageType value();
@Retention(RetentionPolicy.RUNTIME) @Override
@Target({ElementType.TYPE}) public String method() {
@interface Linkages { return "linkBoundingBox";
@SuppressWarnings("unused") Linked[] value() default {}; }
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder method, String instance, TypeElement typeElement) {
method.addLine(instance + ".load();");
} }
} }

Datei anzeigen

@ -0,0 +1,40 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.linkage.types;
import de.steamwar.linkage.LinkageType;
import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.linkage.plan.MethodBuilder;
import javax.lang.model.element.TypeElement;
public class ConfigConverter_GENERIC implements LinkageType {
@Override
public String method() {
return "link";
}
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) {
buildPlan.addImport("de.steamwar.bausystem.configplayer.Config");
methodBuilder.addLine("Config.addConfigConverter(" + s + ");");
}
}

Datei anzeigen

@ -0,0 +1,41 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.linkage.types;
import de.steamwar.linkage.LinkageType;
import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.linkage.plan.MethodBuilder;
import javax.lang.model.element.TypeElement;
public class FAWEMaskParser_GENERIC implements LinkageType {
@Override
public String method() {
return "link";
}
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) {
methodBuilder.addLine("if (org.bukkit.Bukkit.getPluginManager().getPlugin(\"FastAsyncWorldEdit\") != null) {");
methodBuilder.addLine(" " + s + ";");
methodBuilder.addLine("}");
}
}

Datei anzeigen

@ -0,0 +1,41 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.linkage.types;
import de.steamwar.linkage.LinkageType;
import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.linkage.plan.MethodBuilder;
import javax.lang.model.element.TypeElement;
public class FAWEPatternParser_GENERIC implements LinkageType {
@Override
public String method() {
return "link";
}
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) {
methodBuilder.addLine("if (org.bukkit.Bukkit.getPluginManager().getPlugin(\"FastAsyncWorldEdit\") != null) {");
methodBuilder.addLine(" " + s + ";");
methodBuilder.addLine("}");
}
}

Datei anzeigen

@ -0,0 +1,40 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.linkage.types;
import de.steamwar.linkage.LinkageType;
import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.linkage.plan.MethodBuilder;
import javax.lang.model.element.TypeElement;
public class LuaLib_GENERIC implements LinkageType {
@Override
public String method() {
return "link";
}
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) {
buildPlan.addImport("de.steamwar.bausystem.features.script.lua.SteamWarLuaPlugin");
methodBuilder.addLine("SteamWarLuaPlugin.add(" + s + ");");
}
}

Datei anzeigen

@ -0,0 +1,40 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.linkage.types;
import de.steamwar.linkage.LinkageType;
import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.linkage.plan.MethodBuilder;
import javax.lang.model.element.TypeElement;
public class PanzernAlgorithm_GENERIC implements LinkageType {
@Override
public String method() {
return "linkPanzern";
}
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) {
buildPlan.addImport("de.steamwar.bausystem.features.slaves.panzern.Panzern");
methodBuilder.addLine("Panzern.add(" + s + ");");
}
}

Datei anzeigen

@ -0,0 +1,40 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.linkage.types;
import de.steamwar.linkage.LinkageType;
import de.steamwar.linkage.plan.BuildPlan;
import de.steamwar.linkage.plan.MethodBuilder;
import javax.lang.model.element.TypeElement;
public class ScoreboardElement_GENERIC implements LinkageType {
@Override
public String method() {
return "link";
}
@Override
public void generateCode(BuildPlan buildPlan, MethodBuilder methodBuilder, String s, TypeElement typeElement) {
buildPlan.addImport("de.steamwar.bausystem.features.world.BauScoreboard");
methodBuilder.addLine("BauScoreboard.addElement(" + s + ");");
}
}

Datei anzeigen

@ -27,13 +27,13 @@ version '1.0'
compileJava.options.encoding = 'UTF-8' compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 1.8 sourceCompatibility = 17
targetCompatibility = 1.8 targetCompatibility = 17
sourceSets { sourceSets {
main { main {
java { java {
srcDirs = ['src/'] srcDirs = ['src/', 'build/generated/sources/annotationProcessor/java/main/']
} }
resources { resources {
srcDirs = ['src/'] srcDirs = ['src/']
@ -51,16 +51,19 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok:1.18.22' annotationProcessor 'org.projectlombok:lombok:1.18.22'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.22' testAnnotationProcessor 'org.projectlombok:lombok:1.18.22'
implementation 'org.atteo.classindex:classindex:3.11' implementation project(":BauSystem_Linkage")
testImplementation 'org.atteo.classindex:classindex:3.11' annotationProcessor project(":BauSystem_Linkage")
annotationProcessor 'org.atteo.classindex:classindex:3.11'
testAnnotationProcessor 'org.atteo.classindex:classindex:3.11'
compileOnly 'org.spigotmc:spigot-api:1.19-R0.1-SNAPSHOT' compileOnly 'org.spigotmc:spigot-api:1.20-R0.1-SNAPSHOT'
compileOnly 'com.mojang:authlib:1.5.25' compileOnly 'com.mojang:authlib:1.5.25'
compileOnly 'io.netty:netty-all:4.1.68.Final' compileOnly 'io.netty:netty-all:4.1.68.Final'
compileOnly swdep('Spigot-1.19') compileOnly swdep('Spigot-1.20')
compileOnly swdep('WorldEdit-1.15')
compileOnly swdep('SpigotCore') compileOnly swdep('SpigotCore')
annotationProcessor swdep('SpigotCore')
compileOnly swdep('FastAsyncWorldEdit-1.18')
compileOnly swdep('AxiomPaper')
implementation 'org.luaj:luaj-jse:3.0.1'
} }

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Datei-Diff unterdrückt, da er zu groß ist Diff laden

Datei anzeigen

@ -21,45 +21,44 @@ package de.steamwar.bausystem;
import com.comphenix.tinyprotocol.TinyProtocol; import com.comphenix.tinyprotocol.TinyProtocol;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.features.tpslimit.TPSFreezeUtils;
import de.steamwar.bausystem.linkage.LinkageUtils; import de.steamwar.bausystem.linkage.LinkageUtils;
import de.steamwar.bausystem.region.loader.PrototypeLoader; import de.steamwar.bausystem.region.loader.PrototypeLoader;
import de.steamwar.bausystem.region.loader.RegionLoader; import de.steamwar.bausystem.region.loader.RegionLoader;
import de.steamwar.bausystem.region.loader.Updater; import de.steamwar.bausystem.region.loader.Updater;
import de.steamwar.bausystem.utils.TickListener;
import de.steamwar.bausystem.worlddata.WorldData; import de.steamwar.bausystem.worlddata.WorldData;
import de.steamwar.command.AbstractValidator;
import de.steamwar.command.SWCommandUtils;
import de.steamwar.message.Message; import de.steamwar.message.Message;
import de.steamwar.scoreboard.SWScoreboard;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.PrintStream; import java.io.PrintStream;
import java.nio.file.Files; import java.util.concurrent.atomic.AtomicReference;
import java.nio.file.Path; import java.util.function.Consumer;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.util.logging.Level; import java.util.logging.Level;
public class BauSystem extends JavaPlugin implements Listener { 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;
public static final boolean DEV_SERVER = !System.getProperty("user.home").endsWith("minecraft");
@Getter @Getter
private static BauSystem instance; private static BauSystem instance;
private World world;
@Override @Override
public void onEnable() { public void onEnable() {
SWScoreboard.class.getName();
world = Bukkit.getWorlds().get(0);
fixBauSystem();
// LOGGER // LOGGER
fixLogging(); fixLogging();
@ -74,13 +73,40 @@ public class BauSystem extends JavaPlugin implements Listener {
} catch (SecurityException e) { } catch (SecurityException e) {
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e); Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
Bukkit.shutdown(); Bukkit.shutdown();
System.exit(1);
return; return;
} }
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(CommandSender.class, validator(Permission.BUILD));
SWCommandUtils.addValidator("supervisor", validator(Permission.SUPERVISOR));
SWCommandUtils.addValidator("owner", validator(Permission.OWNER));
try {
LinkageUtils.link(); LinkageUtils.link();
} catch (Exception e) {
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
Bukkit.shutdown();
System.exit(1);
return;
}
TickListener.impl.init();
}
private <T extends CommandSender> AbstractValidator<T, ?> validator(Permission permission) {
return (commandSender, object, messageSender) -> {
if (commandSender instanceof Player) {
if (permission.hasPermission((Player) commandSender)) {
return true;
}
messageSender.send("NO_PERMISSION");
return false;
}
return true;
};
} }
@Override @Override
@ -113,59 +139,44 @@ public class BauSystem extends JavaPlugin implements Listener {
})); }));
} }
private void fixBauSystem() { public static BukkitTask runTaskLater(Plugin plugin, Runnable runnable, long delay) {
if (!new File(world.getWorldFolder(), "sections.yml").exists()) { return new BukkitRunnable() {
try { private int counter = 1;
Path path = new File(world.getWorldFolder(), "region").toPath();
BasicFileAttributes attributes = Files.readAttributes(path, BasicFileAttributes.class); @Override
FileTime creationTime = attributes.creationTime(); public void run() {
long millis = creationTime.toMillis(); if (TPSFreezeUtils.isFrozen()) return;
if (millis < 1611081960) { if (counter >= delay) {
createLink("sections3.yml", "sections.yml"); runnable.run();
} else { cancel();
createLink("sections4.yml", "sections.yml");
}
} catch (IOException e) {
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
Bukkit.shutdown();
return; return;
} }
counter++;
} }
int number = -1; }.runTaskTimer(plugin, 0, 1);
try {
String string = new File(world.getWorldFolder(), "sections.yml").getCanonicalPath();
if (string.endsWith("/sections2.yml")) number = 2;
if (string.endsWith("/sections3.yml")) number = 3;
if (string.endsWith("/sections4.yml")) number = 4;
Bukkit.getLogger().log(Level.INFO, "SectionFile: " + string);
} catch (IOException e) {
Bukkit.getLogger().log(Level.SEVERE, e.getMessage(), e);
Bukkit.shutdown();
return;
}
if (number == -1) {
return;
}
if (!new File(world.getWorldFolder(),"prototypes.yapion").exists()) {
createLink("prototypes" + number + ".yapion", "prototypes.yapion");
}
if (!new File(world.getWorldFolder(),"regions.yapion").exists()) {
createLink("regions" + number + ".yapion", "regions.yapion");
}
} }
private void createLink(String source, String destination) { public static BukkitTask runTaskTimer(Plugin plugin, Runnable runnable, long delay, long period) {
try { return new BukkitRunnable() {
Bukkit.getLogger().log(Level.INFO, "Executing: ln -s /home/minecraft/server/Bau15/{0} {1}", new String[]{source, destination}); private int counter = 1;
ProcessBuilder processBuilder = new ProcessBuilder("ln", "-s", "/home/minecraft/server/Bau15/" + source, destination); private boolean first = true;
processBuilder.directory(world.getWorldFolder());
processBuilder.inheritIO();
Process process = processBuilder.start(); @Override
process.waitFor(); public void run() {
} catch (IOException | InterruptedException e) { if (TPSFreezeUtils.isFrozen()) return;
Thread.currentThread().interrupt(); if (counter >= (first ? delay : period)) {
Bukkit.shutdown(); first = false;
} runnable.run();
counter = 1;
return;
}
counter++;
}
}.runTaskTimer(plugin, 0, 1);
}
public static void runTaskTimer(Plugin plugin, Consumer<BukkitTask> consumer, long delay, long period) {
AtomicReference<BukkitTask> task = new AtomicReference<>();
task.set(runTaskTimer(plugin, () -> consumer.accept(task.get()), delay, period));
} }
} }

Datei anzeigen

@ -20,54 +20,77 @@
package de.steamwar.bausystem; 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.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.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.HashSet;
import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
@AllArgsConstructor @AllArgsConstructor
public enum Permission { public enum Permission {
WORLD(BauweltMember::isWorld), OWNER(bauweltMember -> false),
WORLDEDIT(BauweltMember::isWorldEdit), SUPERVISOR(bauweltMember -> {
MEMBER(bauweltMember -> true), return bauweltMember.isSupervisor();
OWNER(bauweltMember -> false); }),
BUILD(bauweltMember -> {
if (isTempOnlySpectator(bauweltMember)) return false;
return bauweltMember.isBuild() || SUPERVISOR.permissionPredicate.test(bauweltMember);
}),
/**
* Only used for {@link BauMemberUpdate}
*/
REAL_SPECTATOR(bauweltMember -> {
return !bauweltMember.isBuild() && !bauweltMember.isSupervisor();
}),
/**
* Primarily used for {@link de.steamwar.bausystem.linkage.specific.GuiItem}
*/
MEMBER(bauweltMember -> {
return true;
});
private static final Set<Integer> TEMP_ONLY_SPECTATOR = new HashSet<>();
private static boolean isTempOnlySpectator(BauweltMember bauweltMember) {
return TEMP_ONLY_SPECTATOR.contains(bauweltMember.getMemberID());
}
public static boolean isTempOnlySpectator(Player player) {
return TEMP_ONLY_SPECTATOR.contains(SteamwarUser.get(player.getUniqueId()).getId());
}
public static void forceOnlySpectator(Player player) {
TEMP_ONLY_SPECTATOR.add(SteamwarUser.get(player.getUniqueId()).getId());
BauMemberUpdate.baumemberUpdate();
}
/**
* Only used by {@link BauMemberUpdate}
*/
public static void removeForceOnlySpectator(Player player) {
TEMP_ONLY_SPECTATOR.remove(SteamwarUser.get(player.getUniqueId()).getId());
}
private final Predicate<BauweltMember> permissionPredicate; private final Predicate<BauweltMember> permissionPredicate;
public boolean hasPermission(BauweltMember bauweltMember) {
if (bauweltMember == null) return false;
return permissionPredicate.test(bauweltMember);
}
public boolean hasPermission(Player member) { public boolean hasPermission(Player member) {
if (member.getUniqueId().equals(BauServer.getInstance().getOwner())) { if (SteamwarUser.get(member.getUniqueId()).getId() == BauServer.getInstance().getOwnerID()) {
return true; return this != REAL_SPECTATOR;
}
BauweltMember bauMember = BauweltMember.getBauMember(BauServer.getInstance().getOwner(), member.getUniqueId());
if (bauMember == null) {
return false;
}
return permissionPredicate.test(bauMember);
}
public static boolean hasPermission(Player member, Permission permission) {
return permission.hasPermission(member);
}
private static void sendMessages(Player player, boolean ableTo, BauweltMember target, String what) {
Player targetPlayer = Bukkit.getPlayer(SteamwarUser.get(target.getMemberID()).getUUID());
if (targetPlayer != null) {
if (ableTo) {
BauSystem.MESSAGE.send("PERMISSION_CHANGE_OTHER_ENABLE", targetPlayer, player.getName(), BauSystem.MESSAGE.parse(what, targetPlayer));
} else {
BauSystem.MESSAGE.send("PERMISSION_CHANGE_OTHER_DISABLE", targetPlayer, player.getName(), BauSystem.MESSAGE.parse(what, targetPlayer));
}
}
if (ableTo) {
BauSystem.MESSAGE.send("PERMISSION_CHANGE_YOU_ENABLE", player, BauSystem.MESSAGE.parse(what, player));
} else {
BauSystem.MESSAGE.send("PERMISSION_CHANGE_YOU_DISABLE", player, BauSystem.MESSAGE.parse(what, player));
} }
BauweltMember bauweltMember = BauweltMember.getBauMember(BauServer.getInstance().getOwner(), member.getUniqueId());
if (bauweltMember == null) return this == REAL_SPECTATOR;
return permissionPredicate.test(bauweltMember);
} }
} }

Datei anzeigen

@ -19,6 +19,7 @@
package de.steamwar.bausystem; package de.steamwar.bausystem;
import de.steamwar.inventory.SWItem;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
@ -29,6 +30,7 @@ import org.bukkit.Material;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import java.util.function.Function; import java.util.function.Function;
@ -59,6 +61,13 @@ public class SWUtils {
} }
} }
public static SWItem setCustomModelData(SWItem item, int customModelData) {
ItemMeta itemMeta = item.getItemMeta();
itemMeta.setCustomModelData(customModelData);
item.setItemMeta(itemMeta);
return item;
}
public static void sendToActionbar(Player p, String message) { public static void sendToActionbar(Player p, String message) {
p.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message)); p.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
} }

Datei anzeigen

@ -19,15 +19,14 @@
package de.steamwar.bausystem.config; package de.steamwar.bausystem.config;
import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.linkage.Linked;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.providers.BauServerInfo; import de.steamwar.providers.BauServerInfo;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import lombok.Getter; import lombok.Getter;
import java.util.UUID; import java.util.UUID;
@Linked(LinkageType.PLAIN) @Linked
public class BauServer { public class BauServer {
@Getter @Getter

Datei anzeigen

@ -20,8 +20,7 @@
package de.steamwar.bausystem.configplayer; package de.steamwar.bausystem.configplayer;
import de.steamwar.bausystem.configplayer.serializer.ConfigurationSerializableSerializer; import de.steamwar.bausystem.configplayer.serializer.ConfigurationSerializableSerializer;
import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.linkage.Linked;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.sql.UserConfig; import de.steamwar.sql.UserConfig;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -40,7 +39,7 @@ import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.logging.Level; import java.util.logging.Level;
@Linked(LinkageType.LISTENER) @Linked
public class Config implements Listener { public class Config implements Listener {
static { static {
@ -98,7 +97,7 @@ public class Config implements Listener {
public void saveAll() { public void saveAll() {
playerConfigurations.forEach((uuid, yapionObject) -> { playerConfigurations.forEach((uuid, yapionObject) -> {
String string = yapionObject.toYAPION(new StringOutput()).getResult(); String string = yapionObject.toYAPION(new StringOutput()).getResult().replaceAll("\\+", "\\");
UserConfig.updatePlayerConfig(uuid, "bausystem", string); UserConfig.updatePlayerConfig(uuid, "bausystem", string);
}); });
playerConfigurations.clear(); playerConfigurations.clear();
@ -113,7 +112,7 @@ public class Config implements Listener {
UUID uuid = player.getUniqueId(); UUID uuid = player.getUniqueId();
if (playerConfigurations.containsKey(uuid)) { if (playerConfigurations.containsKey(uuid)) {
YAPIONObject yapionObject = playerConfigurations.get(uuid); YAPIONObject yapionObject = playerConfigurations.get(uuid);
String string = yapionObject.toYAPION(new StringOutput()).getResult(); String string = yapionObject.toYAPION(new StringOutput()).getResult().replaceAll("\\\\+", "\\\\");
UserConfig.updatePlayerConfig(uuid, "bausystem", string); UserConfig.updatePlayerConfig(uuid, "bausystem", string);
} }
} }

Datei anzeigen

@ -0,0 +1,112 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.attributescopy;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.MinVersion;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
@Linked
public class AttributeRemoveCommand extends SWCommand {
public AttributeRemoveCommand() {
super("removeattribute", "attributesremove");
}
@Register({"all"})
@Register({"*"})
public void genericCommand(@Validator Player player) {
ItemStack itemStack = player.getInventory().getItemInMainHand();
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setLore(new ArrayList<>());
itemStack.setItemMeta(itemMeta);
BauSystem.MESSAGE.send("ATTRIBUTE_REMOVE_ALL", player);
}
@Register(description = "ATTRIBUTE_REMOVE_COMMAND_HELP")
public void genericCommand(@Validator Player player, @Mapper("attribute") String attribute) {
ItemStack itemStack = player.getInventory().getItemInMainHand();
ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta == null) {
BauSystem.MESSAGE.send("ATTRIBUTE_REMOVE_NOT_FOUND", player);
return;
}
List<String> lore = itemMeta.getLore();
if (lore == null) {
BauSystem.MESSAGE.send("ATTRIBUTE_REMOVE_NOT_FOUND", player);
return;
}
if (lore.isEmpty()) {
BauSystem.MESSAGE.send("ATTRIBUTE_REMOVE_NOT_FOUND", player);
return;
}
if (!lore.get(0).equals("§eAttributes§8:")) {
BauSystem.MESSAGE.send("ATTRIBUTE_REMOVE_NOT_FOUND", player);
return;
}
lore.removeIf(s -> s.startsWith("§8-§7 " + attribute + "§8:"));
if (lore.size() == 1) {
itemStack.setItemMeta(null);
} else {
itemMeta.setLore(lore);
itemStack.setItemMeta(itemMeta);
}
BauSystem.MESSAGE.send("ATTRIBUTE_REMOVE_SINGLE", player, attribute);
}
@Mapper(value = "attribute", local = true)
public TypeMapper<String> attribute() {
return new TypeMapper<String>() {
@Override
public Collection<String> tabCompletes(CommandSender commandSender, PreviousArguments previousArguments, String s) {
Player player = (Player) commandSender;
ItemStack itemStack = player.getInventory().getItemInMainHand();
ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta == null) return null;
List<String> lore = itemMeta.getLore();
if (lore == null) return null;
if (lore.isEmpty()) return null;
if (!lore.get(0).equals("§eAttributes§8:")) return null;
return lore.stream()
.skip(1)
.map(s1 -> s1.substring(6))
.map(s1 -> s1.substring(0, s1.indexOf("§8:")))
.collect(Collectors.toList());
}
@Override
public String map(CommandSender commandSender, PreviousArguments previousArguments, String s) {
return s;
}
};
}
}

Datei anzeigen

@ -0,0 +1,128 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.attributescopy;
import lombok.experimental.UtilityClass;
import org.bukkit.block.data.BlockData;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@UtilityClass
public class AttributeUtils {
private Map<Method, String> names = new HashMap<>();
private Map<Class<?>, List<Method>> getters = new HashMap<>();
private Map<Class<?>, Map<String, Method>> setters = new HashMap<>();
private void generate(BlockData blockData) {
Class<? extends BlockData> clazz = blockData.getClass();
if (getters.containsKey(clazz) && setters.containsKey(clazz)) return;
Map<String, List<Method>> methods = new HashMap<>();
for (Method declaredMethod : clazz.getMethods()) {
String s = declaredMethod.getName();
if (s.startsWith("get") && declaredMethod.getParameterCount() == 0) {
methods.computeIfAbsent(s.substring(3), aClass -> new ArrayList<>()).add(declaredMethod);
} else if (s.startsWith("is") && declaredMethod.getParameterCount() == 0) {
methods.computeIfAbsent(s.substring(2), aClass -> new ArrayList<>()).add(declaredMethod);
} else if (s.startsWith("set") && declaredMethod.getParameterCount() == 1) {
methods.computeIfAbsent(s.substring(3), aClass -> new ArrayList<>()).add(declaredMethod);
}
}
for (Map.Entry<String, List<Method>> entry : methods.entrySet()) {
if (entry.getValue().size() != 2) continue;
for (Method method : entry.getValue()) {
names.put(method, entry.getKey());
if (method.getName().startsWith("is") || method.getName().startsWith("get")) {
getters.computeIfAbsent(clazz, aClass -> new ArrayList<>()).add(method);
} else {
setters.computeIfAbsent(clazz, aClass -> new HashMap<>()).put(entry.getKey(), method);
}
}
}
}
public void copy(BlockData blockData, List<String> attributes) {
generate(blockData);
getters.getOrDefault(blockData.getClass(), new ArrayList<>()).forEach(method -> {
try {
Object invoke = method.invoke(blockData);
if (invoke != null) {
attributes.add("§8-§7 " + names.get(method) + "§8:§7 " + convert(invoke));
}
} catch (Exception e) {
// ignore
}
});
}
public void paste(BlockData blockData, List<String> attributes) {
generate(blockData);
for (String attribute : attributes) {
String[] split = attribute.split("§8:§7 ");
if (split.length != 2) continue;
String name = split[0].substring(6);
String value = split[1];
Method method = setters.getOrDefault(blockData.getClass(), new HashMap<>()).get(name);
if (method == null) continue;
try {
method.invoke(blockData, convert(value, method.getParameterTypes()[0]));
} catch (Exception e) {
// ignore
}
}
}
private String convert(Object o) {
if (o.getClass().isEnum()) {
return ((Enum<?>) o).name();
} else {
return o.toString();
}
}
private Object convert(String s, Class<?> type) {
if (type.isEnum()) {
return Enum.valueOf((Class<? extends Enum>) type, s);
} else if (type == int.class || type == Integer.class) {
return Integer.parseInt(s);
} else if (type == double.class || type == Double.class) {
return Double.parseDouble(s);
} else if (type == float.class || type == Float.class) {
return Float.parseFloat(s);
} else if (type == long.class || type == Long.class) {
return Long.parseLong(s);
} else if (type == short.class || type == Short.class) {
return Short.parseShort(s);
} else if (type == byte.class || type == Byte.class) {
return Byte.parseByte(s);
} else if (type == boolean.class || type == Boolean.class) {
return Boolean.parseBoolean(s);
} else {
return s;
}
}
}

Datei anzeigen

@ -0,0 +1,88 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.attributescopy;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.FluidCollisionMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.ArrayList;
import java.util.List;
@Linked
public class AttributesCopyCommand extends SWCommand {
public AttributesCopyCommand() {
super("copyattributes", "attributescopy", "ac");
}
@Register
public void genericCommand(@Validator Player player) {
Block block = player.getTargetBlockExact(8, FluidCollisionMode.ALWAYS);
if (block == null) return;
ItemStack mainHand = player.getInventory().getItemInMainHand();
if (!(block.getType().isItem() && block.getType() == mainHand.getType() || isSame(block, mainHand))) {
BauSystem.MESSAGE.send("ATTRIBUTES_CANT_COPY", player);
return;
}
BlockData blockData = block.getBlockData();
List<String> attributesToCopy = new ArrayList<>();
if (block.getType() != mainHand.getType()) {
attributesToCopy.add("§8-§7 Material§8:§7 " + block.getType().name());
}
AttributeUtils.copy(blockData, attributesToCopy);
if (attributesToCopy.isEmpty()) {
BauSystem.MESSAGE.send("ATTRIBUTES_NO_COPY", player);
return;
}
ItemMeta itemMeta = mainHand.getItemMeta();
List<String> lore = new ArrayList<>(attributesToCopy);
lore.add(0, "§eAttributes§8:");
itemMeta.setLore(lore);
mainHand.setItemMeta(itemMeta);
player.getInventory().setItemInMainHand(mainHand);
BauSystem.MESSAGE.send("ATTRIBUTES_COPIED", player);
}
private boolean isSame(Block block, ItemStack itemStack) {
if (itemStack.getType() == Material.REDSTONE && block.getType() == Material.REDSTONE_WIRE) return true;
if (itemStack.getType() == Material.PLAYER_HEAD && block.getType() == Material.PLAYER_WALL_HEAD) return true;
if (itemStack.getType() == Material.ZOMBIE_HEAD && block.getType() == Material.ZOMBIE_WALL_HEAD) return true;
if (itemStack.getType() == Material.CREEPER_HEAD && block.getType() == Material.CREEPER_WALL_HEAD) return true;
if (itemStack.getType() == Material.DRAGON_HEAD && block.getType() == Material.DRAGON_WALL_HEAD) return true;
if (itemStack.getType() == Material.SKELETON_SKULL && block.getType() == Material.SKELETON_WALL_SKULL) return true;
if (itemStack.getType() == Material.WITHER_SKELETON_SKULL && block.getType() == Material.WITHER_SKELETON_WALL_SKULL) return true;
if (itemStack.getType() == Material.TORCH && block.getType() == Material.WALL_TORCH) return true;
if (itemStack.getType() == Material.SOUL_TORCH && block.getType() == Material.SOUL_WALL_TORCH) return true;
if (itemStack.getType() == Material.REDSTONE_TORCH && block.getType() == Material.REDSTONE_WALL_TORCH) return true;
if (itemStack.getType() == Material.WHEAT_SEEDS && block.getType() == Material.WHEAT) return true;
if (itemStack.getType().name().contains("_BANNER") && block.getType().name().contains("_WALL_BANNER")) return true;
return false;
}
}

Datei anzeigen

@ -0,0 +1,88 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.attributescopy;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.linkage.Linked;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.block.Block;
import org.bukkit.block.Skull;
import org.bukkit.block.data.BlockData;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.List;
@Linked
public class AttributesPlaceListener implements Listener {
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
ItemStack itemStack = event.getItemInHand();
ItemMeta itemMeta = itemStack.getItemMeta();
if (itemMeta == null) return;
List<String> strings = itemMeta.getLore();
if (strings == null) return;
if (strings.isEmpty()) return;
if (!strings.get(0).equals("§eAttributes§8:")) return;
Material type = event.getBlock().getType();
OfflinePlayer offlinePlayer = null;
if (event.getBlock().getState() instanceof Skull) {
Skull skull = (Skull) event.getBlock().getState();
offlinePlayer = skull.getOwningPlayer();
}
OfflinePlayer finalPlayerProfile = offlinePlayer;
event.setCancelled(true);
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
Material material = strings.stream()
.filter(s -> s.startsWith("§8-§7 Material§8:§7 "))
.map(s -> s.replace("§8-§7 Material§8:§7 ", ""))
.map(String::toUpperCase)
.map(s -> {
try {
return Material.valueOf(s);
} catch (Exception e) {
return null;
}
})
.findFirst()
.orElse(type);
event.getBlock().setType(material, false);
Block block = event.getBlock();
BlockData blockData = block.getBlockData();
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
if (block.getState() instanceof Skull && finalPlayerProfile != null) {
Skull skull = (Skull) block.getState();
skull.setOwningPlayer(finalPlayerProfile);
skull.update(true, false);
}
}, 1);
AttributeUtils.paste(blockData, strings);
block.setBlockData(blockData, false);
}, 1);
}
}

Datei anzeigen

@ -20,12 +20,11 @@
package de.steamwar.bausystem.features.autostart; package de.steamwar.bausystem.features.autostart;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@Linked(LinkageType.COMMAND) @Linked
public class AutoStartCommand extends SWCommand { public class AutoStartCommand extends SWCommand {
public AutoStartCommand() { public AutoStartCommand() {
@ -33,7 +32,7 @@ public class AutoStartCommand extends SWCommand {
} }
@Register(description = "AUTOSTART_COMMAND_HELP") @Register(description = "AUTOSTART_COMMAND_HELP")
public void genericCommand(Player p) { public void genericCommand(@Validator Player p) {
SWUtils.giveItemToPlayer(p, AutostartListener.getWandItem(p)); SWUtils.giveItemToPlayer(p, AutostartListener.getWandItem(p));
} }
} }

Datei anzeigen

@ -20,15 +20,14 @@
package de.steamwar.bausystem.features.autostart; package de.steamwar.bausystem.features.autostart;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.linkage.Linked;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@Linked(LinkageType.BAU_GUI_ITEM) @Linked
public class AutoStartGuiItem extends BauGuiItem { public class AutoStartGuiItem extends BauGuiItem {
public AutoStartGuiItem() { public AutoStartGuiItem() {
@ -51,6 +50,6 @@ public class AutoStartGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.MEMBER; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -20,31 +20,34 @@
package de.steamwar.bausystem.features.autostart; package de.steamwar.bausystem.features.autostart;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.tpslimit.TPSUtils; import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
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.RegionExtensionType;
import de.steamwar.bausystem.region.utils.RegionType; 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 lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
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;
import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent;
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.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Linked(LinkageType.LISTENER) @Linked
public class AutostartListener implements Listener { public class AutostartListener implements Listener {
@Getter @Getter
@ -65,15 +68,42 @@ public class AutostartListener implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!ItemUtils.isItem(event.getItem(), "autostart")) { if (!ItemUtils.isItem(event.getItem(), "autostart")) {
return; return;
} }
if (event.getClickedBlock() == null) { if (event.getClickedBlock() == null) {
return; return;
} }
if (event.getClickedBlock().getBlockData() instanceof Chest) {
return;
}
if (event.getClickedBlock().getType() == Material.BEDROCK) {
event.getClickedBlock().setType(Material.SLIME_BLOCK);
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
event.getClickedBlock().setType(Material.BEDROCK, false);
}, 1);
}
activate(event.getPlayer()); activate(event.getPlayer());
} }
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
if (!(event.getPlayer() instanceof Player)) {
return;
}
if(!Permission.BUILD.hasPermission((Player) event.getPlayer())) return;
if (!ItemUtils.isItem(event.getPlayer().getInventory().getItemInMainHand(), "autostart")) {
return;
}
if (event.getInventory().getLocation() == null) {
return;
}
if (event.getInventory().getLocation().getBlock().getBlockData() instanceof Chest) {
activate((Player) event.getPlayer());
}
}
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.isGlobal()) {
@ -89,7 +119,7 @@ public class AutostartListener implements Listener {
} else { } else {
BauSystem.MESSAGE.send("AUTOSTART_MESSAGE_START", player); BauSystem.MESSAGE.send("AUTOSTART_MESSAGE_START", player);
} }
regionStartTime.put(region, TPSUtils.currentTick.get()); regionStartTime.put(region, TPSUtils.currentRealTick.get());
} }
@EventHandler @EventHandler
@ -97,17 +127,24 @@ public class AutostartListener implements Listener {
if (regionStartTime.isEmpty()) { if (regionStartTime.isEmpty()) {
return; return;
} }
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.hasType(RegionType.TESTBLOCK)) return;
if (!region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) return; if (!region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION)) return;
long tickDiff = TPSUtils.currentTick.get() - regionStartTime.remove(region); long tickDiff = TPSUtils.currentRealTick.get() - regionStartTime.remove(region);
RegionUtils.message(region, player -> { long preFightDurationInSeconds = getPreFightDurationInSeconds(region);
return BauSystem.MESSAGE.parse("AUTOSTART_MESSAGE_RESULT1", player, new SimpleDateFormat(BauSystem.MESSAGE.parse("AUTOSTART_MESSAGE_DATE_PATTERN", player)).format(new Date(tickDiff * 50))); RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT1", tickDiff);
}); RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT2", preFightDurationInSeconds, ((preFightDurationInSeconds * 20) - tickDiff));
RegionUtils.message(region, "AUTOSTART_MESSAGE_RESULT2", 30, (600 - 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);
}
} }

Datei anzeigen

@ -19,15 +19,22 @@
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.Permission;
import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.bausystem.region.Color;
import de.steamwar.bausystem.linkage.Linked;
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.flagvalues.ColorMode;
import de.steamwar.bausystem.region.tags.Tag; import de.steamwar.bausystem.region.tags.Tag;
import de.steamwar.command.*; import de.steamwar.bausystem.utils.PasteBuilder;
import de.steamwar.command.SWCommand;
import de.steamwar.command.SWCommandUtils;
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 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.entity.Player; import org.bukkit.entity.Player;
@ -39,7 +46,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Linked(LinkageType.COMMAND) @Linked
public class BackupCommand extends SWCommand { public class BackupCommand extends SWCommand {
public BackupCommand() { public BackupCommand() {
@ -55,7 +62,7 @@ public class BackupCommand extends SWCommand {
} }
@Register(value = "create", description = "BACKUP_HELP_CREATE") @Register(value = "create", description = "BACKUP_HELP_CREATE")
public void backupCreate(@Guard Player p) { public void backupCreate(@Validator("owner") Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
@ -72,7 +79,7 @@ public class BackupCommand extends SWCommand {
} }
@Register(value = "load", description = "BACKUP_HELP_LOAD") @Register(value = "load", description = "BACKUP_HELP_LOAD")
public void backupLoad(@Guard Player p, @Mapper("backupName") String backupName) { public void backupLoad(@Validator("owner") Player p, @Mapper("backupName") String backupName) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {
return; return;
@ -83,7 +90,13 @@ public class BackupCommand extends SWCommand {
BauSystem.MESSAGE.send("BACKUP_LOAD_FAILURE", p); BauSystem.MESSAGE.send("BACKUP_LOAD_FAILURE", p);
return; return;
} }
region.reset(backupFile); 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);
} }
@ -117,7 +130,7 @@ public class BackupCommand extends SWCommand {
} }
SWListInv<String> swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("BACKUP_INV_NAME", p), swListEntries, (clickType, s) -> { SWListInv<String> swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("BACKUP_INV_NAME", p), swListEntries, (clickType, s) -> {
p.getOpenInventory().close(); p.getOpenInventory().close();
backupLoad(p, s); p.performCommand("backup load " + s);
}); });
swListInv.open(); swListInv.open();
} }
@ -127,20 +140,6 @@ public class BackupCommand extends SWCommand {
return SWCommandUtils.createMapper(s -> s, (commandSender, s) -> listBackup((Player) commandSender)); return SWCommandUtils.createMapper(s -> s, (commandSender, s) -> listBackup((Player) commandSender));
} }
@ClassGuard(value = Player.class, local = true)
public GuardChecker backupGuard() {
return (commandSender, guardCheckType, strings, s) -> {
Player player = (Player) commandSender;
if (Permission.hasPermission(player, Permission.WORLDEDIT)) {
return GuardResult.ALLOWED;
}
if (guardCheckType != GuardCheckType.TAB_COMPLETE) {
BauSystem.MESSAGE.send("BACKUP_NO_PERMS", player);
}
return GuardResult.DENIED;
};
}
private List<String> listBackup(Player p) { private List<String> listBackup(Player p) {
Region region = Region.getRegion(p.getLocation()); Region region = Region.getRegion(p.getLocation());
if (checkGlobalRegion(region, p)) { if (checkGlobalRegion(region, p)) {

Datei anzeigen

@ -1,64 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.bau;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.LinkedInstance;
import de.steamwar.command.GuardCheckType;
import de.steamwar.command.GuardChecker;
import de.steamwar.command.GuardResult;
import de.steamwar.command.SWCommand;
import org.bukkit.entity.Player;
@Linked(LinkageType.COMMAND)
public class BauCommand extends SWCommand {
@LinkedInstance
private BauServer bauServer;
@LinkedInstance
private InfoCommand infoCommand;
public BauCommand() {
super("bau", "b", "gs");
}
@Register(value = "info", description = "BAU_COMMAND_HELP_INFO")
public void infoCommand(Player p) {
infoCommand.sendBauInfo(p);
}
@ClassGuard(value = Player.class, local = true)
public GuardChecker bauGuard() {
return (commandSender, guardCheckType, strings, s) -> {
Player p = (Player) commandSender;
if (!bauServer.getOwner().equals(p.getUniqueId())) {
if (guardCheckType != GuardCheckType.TAB_COMPLETE) {
BauSystem.MESSAGE.send("BAU_NO_WORLD", p);
}
return GuardResult.DENIED;
}
return GuardResult.ALLOWED;
};
}
}

Datei anzeigen

@ -22,12 +22,12 @@ 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.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
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.core.Core;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -37,7 +37,7 @@ import org.bukkit.inventory.ItemStack;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@Linked(LinkageType.BAU_GUI_ITEM) @Linked
public class BauInfoBauGuiItem extends BauGuiItem { public class BauInfoBauGuiItem extends BauGuiItem {
public BauInfoBauGuiItem() { public BauInfoBauGuiItem() {
@ -59,6 +59,9 @@ public class BauInfoBauGuiItem extends BauGuiItem {
if (flag == Flag.PROTECT && region.getFloorLevel() == 0) { if (flag == Flag.PROTECT && region.getFloorLevel() == 0) {
continue; continue;
} }
if (flag == Flag.ITEMS && Core.getVersion() < 19) {
continue;
}
Flag.Value<?> value = region.get(flag); Flag.Value<?> value = region.get(flag);
if (value != null) { if (value != null) {
stringList.add(BauSystem.MESSAGE.parse("BAU_INFO_ITEM_LORE_" + flag.name(), player, BauSystem.MESSAGE.parse(value.getChatValue(), player))); stringList.add(BauSystem.MESSAGE.parse("BAU_INFO_ITEM_LORE_" + flag.name(), player, BauSystem.MESSAGE.parse(value.getChatValue(), player)));

Datei anzeigen

@ -0,0 +1,73 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.bau;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.command.PreviousArguments;
import de.steamwar.command.SWCommand;
import de.steamwar.command.TypeMapper;
import de.steamwar.linkage.Linked;
import de.steamwar.techhider.TechHider;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Collection;
import java.util.stream.Collectors;
@Linked
public class ForceSpectatorCommand extends SWCommand {
public ForceSpectatorCommand() {
super("forcespectator");
}
@Register
public void forceSpectator(@Validator("supervisor") Player player, @Mapper("builder") Player other) {
Permission.forceOnlySpectator(other);
}
@Mapper("builder")
public TypeMapper<Player> spectatorMapper() {
return new TypeMapper<>() {
@Override
public Player map(CommandSender commandSender, String[] previousArguments, String s) {
Player player = Bukkit.getPlayer(s);
if (player == null) {
return null;
}
if (Permission.BUILD.hasPermission(player) && !Permission.SUPERVISOR.hasPermission(player)) {
return player;
}
return null;
}
@Override
public Collection<String> tabCompletes(CommandSender sender, PreviousArguments previousArguments, String s) {
return Bukkit.getOnlinePlayers().stream()
.filter(Permission.BUILD::hasPermission)
.filter(player -> !Permission.SUPERVISOR.hasPermission(player))
.map(Player::getName)
.collect(Collectors.toList());
}
};
}
}

Datei anzeigen

@ -1,44 +1,32 @@
package de.steamwar.bausystem.features.bau; 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.config.BauServer; import de.steamwar.bausystem.config.BauServer;
import de.steamwar.bausystem.features.tpslimit.TPSWarpUtils;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.LinkedInstance;
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;
import de.steamwar.core.TPSWatcher; import de.steamwar.core.TPSWatcher;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
import de.steamwar.sql.BauweltMember; import de.steamwar.sql.BauweltMember;
import de.steamwar.sql.SteamwarUser; import de.steamwar.sql.SteamwarUser;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.List; import java.util.*;
import static de.steamwar.bausystem.features.tpslimit.TPSWarpUtils.getTps; @Linked
@Linked(LinkageType.COMMAND)
public class InfoCommand extends SWCommand { public class InfoCommand extends SWCommand {
@LinkedInstance @LinkedInstance
private BauServer bauServer; public BauServer bauServer;
public InfoCommand() { public InfoCommand() {
super("bauinfo"); super("bauinfo");
} }
@Register(help = true) @Register(description = "BAU_INFO_COMMAND_HELP")
public void genericHelp(Player p, String... args) {
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_HELP", p);
}
@Register
public void genericCommand(Player p) { public void genericCommand(Player p) {
sendBauInfo(p);
}
public void sendBauInfo(Player p) {
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()) {
@ -51,29 +39,48 @@ public class InfoCommand extends SWCommand {
} }
} }
if (Permission.BUILD.hasPermission(p)) {
List<BauweltMember> members = BauweltMember.getMembers(bauServer.getOwnerID()); List<BauweltMember> members = BauweltMember.getMembers(bauServer.getOwnerID());
StringBuilder membermessage = new StringBuilder(); Map<Permission, List<BauweltMember>> memberByPermission = new HashMap<>();
membermessage.append(BauSystem.MESSAGE.parsePrefixed("BAU_INFO_COMMAND_MEMBER", p)); members.forEach(member -> {
if (Permission.SUPERVISOR.hasPermission(member)) {
for (BauweltMember member : members) { memberByPermission.computeIfAbsent(Permission.SUPERVISOR, __ -> new ArrayList<>()).add(member);
membermessage.append(BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_INFO", p, } else if (Permission.BUILD.hasPermission(member)) {
SteamwarUser.get(member.getMemberID()).getUserName(), memberByPermission.computeIfAbsent(Permission.BUILD, __ -> new ArrayList<>()).add(member);
member.isWorldEdit() ? BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WE_ALLOW", p) : BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WE_DISALLOW", p), } else {
member.isWorld() ? BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WORLD_ALLOW", p) : BauSystem.MESSAGE.parse("BAU_INFO_MEMBER_WORLD_DISALLOW", p) memberByPermission.computeIfAbsent(Permission.MEMBER, __ -> new ArrayList<>()).add(member);
)); }
});
List<BauweltMember> supervisor = memberByPermission.getOrDefault(Permission.SUPERVISOR, Collections.emptyList());
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_MEMBER", p, "§eSupervisor", supervisor.size(), supervisor.isEmpty() ? "§8<none>" : joining(supervisor));
List<BauweltMember> builder = memberByPermission.getOrDefault(Permission.BUILD, Collections.emptyList());
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_MEMBER", p, "§6Builder", builder.size(), builder.isEmpty() ? "§8<none>" : joining(builder));
List<BauweltMember> spectator = memberByPermission.getOrDefault(Permission.MEMBER, Collections.emptyList());
BauSystem.MESSAGE.send("BAU_INFO_COMMAND_MEMBER", p, "§7Spectator", spectator.size(), spectator.isEmpty() ? "§8<none>" : joining(spectator));
} }
p.sendMessage(membermessage.toString());
StringBuilder tpsMessage = new StringBuilder(); StringBuilder tpsMessage = new StringBuilder();
tpsMessage.append(BauSystem.MESSAGE.parsePrefixed("BAU_INFO_COMMAND_TPS", p)); tpsMessage.append(BauSystem.MESSAGE.parsePrefixed("BAU_INFO_COMMAND_TPS", p));
tpsMessage.append(" ").append(getTps(TPSWatcher.TPSType.ONE_SECOND)); tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.ONE_SECOND));
tpsMessage.append(" ").append(getTps(TPSWatcher.TPSType.TEN_SECONDS)); tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_SECONDS));
if (!TPSWarpUtils.isWarping()) {
tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.ONE_MINUTE)); tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.ONE_MINUTE));
tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.FIVE_MINUTES)); tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.FIVE_MINUTES));
tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_MINUTES)); tpsMessage.append(" ").append(TPSWatcher.getTPS(TPSWatcher.TPSType.TEN_MINUTES));
}
p.sendMessage(tpsMessage.toString()); p.sendMessage(tpsMessage.toString());
} }
private String joining(List<BauweltMember> bauweltMembers) {
StringBuilder st = new StringBuilder();
for (int i = 0; i < bauweltMembers.size(); i++) {
if (i != 0) {
st.append("§8, ");
}
st.append("§7");
st.append(SteamwarUser.get(bauweltMembers.get(i).getMemberID()).getUserName());
}
return st.toString();
}
} }

Datei anzeigen

@ -0,0 +1,96 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.cannon;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.cannon.depth.Depth;
import de.steamwar.bausystem.features.cannon.depth.DepthManager;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.linkage.Linked;
import org.bukkit.Bukkit;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.util.Vector;
import java.util.*;
import java.util.stream.Collectors;
@Linked
public class CannonDetector implements Listener {
private Map<TNTPrimed, Vector> velocities = new HashMap<>();
private Map<TNTPrimed, Set<UUID>> propulsionOfProjectile = new HashMap<>();
@EventHandler(priority = EventPriority.LOW)
public void onEntityExplode(EntityExplodeEvent event) {
if (!(event.getEntity() instanceof TNTPrimed)) {
return;
}
TNTPrimed tnt = (TNTPrimed) event.getEntity();
propulsionOfProjectile.remove(tnt);
DepthManager.update(tnt, event.blockList());
List<TNTPrimed> tnts = Bukkit.getWorlds().get(0).getEntitiesByClass(TNTPrimed.class)
.stream()
.filter(entity -> entity != tnt)
.filter(entity -> entity.getFuseTicks() > 1)
.filter(entity -> entity.getLocation().distance(event.getLocation()) <= 8)
.collect(Collectors.toList());
if (tnts.isEmpty()) {
return;
}
boolean isEmpty = velocities.isEmpty();
tnts.forEach(tntPrimed -> {
velocities.put(tntPrimed, tntPrimed.getVelocity().clone());
propulsionOfProjectile.computeIfAbsent(tntPrimed, __ -> new HashSet<>()).add(tnt.getUniqueId());
});
if (!isEmpty) {
return;
}
BauSystem.runTaskLater(BauSystem.getInstance(), () -> {
Map<CannonKey, List<TNTPrimed>> grouped = new HashMap<>();
velocities.forEach((tntPrimed, vector) -> {
boolean xBiggest = Math.abs(vector.getX()) > Math.abs(vector.getZ());
boolean zBiggest = Math.abs(vector.getZ()) > Math.abs(vector.getX());
Vector vec = new Vector(xBiggest ? Math.signum(vector.getX()) : 0, Math.round(vector.getY() * 100), zBiggest ? Math.signum(vector.getZ()) : 0);
grouped.computeIfAbsent(new CannonKey(propulsionOfProjectile.get(tntPrimed), vec), ignored -> new ArrayList<>()).add(tntPrimed);
});
grouped.forEach((cannonKey, tntPrimeds) -> {
if (tntPrimeds.size() <= 5) return;
Region region = Region.getRegion(tntPrimeds.get(0).getLocation());
if (region.isGlobal()) return;
if (!region.hasType(RegionType.TESTBLOCK)) return;
Depth depth = new Depth(region);
DepthManager.init(tntPrimeds, depth);
});
velocities.clear();
}, 1);
}
}

Datei anzeigen

@ -0,0 +1,37 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.cannon;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.util.Vector;
import java.util.Set;
import java.util.UUID;
@AllArgsConstructor
@EqualsAndHashCode
@Getter
public final class CannonKey {
private Set<UUID> propulsions;
private Vector velocityVector;
}

Datei anzeigen

@ -0,0 +1,109 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.cannon.depth;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region;
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.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class Depth {
private Region region;
private Vector minVector = null;
private Vector maxVector = null;
private int tntCount = 0;
public Depth(Region region) {
this.region = region;
}
public void update(List<Block> blocks) {
List<Block> blocksList = blocks.stream()
.filter(block -> region.inRegion(block.getLocation(), RegionType.TESTBLOCK, RegionExtensionType.EXTENSION))
.collect(Collectors.toList());
tntCount++;
for (Block block : blocksList) {
internalUpdate(block);
}
}
public void finish() {
if (maxVector == null || minVector == null) return;
Vector dimensions = maxVector.subtract(minVector);
dimensions.setX(Math.abs(dimensions.getX()));
dimensions.setY(Math.abs(dimensions.getY()));
dimensions.setZ(Math.abs(dimensions.getZ()));
RegionUtils.message(region, player -> {
player.spigot().sendMessage(getMessage(player, dimensions.getBlockX() + 1, dimensions.getBlockY() + 1, dimensions.getBlockZ() + 1, tntCount));
});
}
private void internalUpdate(Block block) {
if (minVector == null) {
minVector = block.getLocation().toVector();
}
minVector.setX(Math.min(minVector.getX(), block.getX()));
minVector.setY(Math.min(minVector.getY(), block.getY()));
minVector.setZ(Math.min(minVector.getZ(), block.getZ()));
if (maxVector == null) {
maxVector = block.getLocation().toVector();
}
maxVector.setX(Math.max(maxVector.getX(), block.getX()));
maxVector.setY(Math.max(maxVector.getY(), block.getY()));
maxVector.setZ(Math.max(maxVector.getZ(), block.getZ()));
}
private static BaseComponent[] getMessage(Player player, int x, int y, int z, int tntCount) {
final Set<Integer> dimensions = new HashSet<>();
dimensions.add(x);
dimensions.add(y);
dimensions.add(z);
int max = getMax(dimensions);
TextComponent headerComponent = new TextComponent(BauSystem.MESSAGE.parse("DEPTH_COUNTER_MESSAGE", player));
TextComponent depthComponent = new TextComponent(BauSystem.MESSAGE.parse("DEPTH_COUNTER_COUNT", player, x == max ? "§e" : "§7", x, y == max ? "§e" : "§7", y, z == max ? "§e" : "§7", z));
depthComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponent[]{new TextComponent(BauSystem.MESSAGE.parse("DEPTH_COUNTER_HOVER", player))}));
TextComponent tntComponent = new TextComponent(BauSystem.MESSAGE.parse("DEPTH_COUNTER_TNT", player, tntCount));
return new BaseComponent[]{headerComponent, depthComponent, tntComponent};
}
private static int getMax(Set<Integer> values) {
return values.stream().max(Integer::compare).orElse(0);
}
}

Datei anzeigen

@ -0,0 +1,48 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.cannon.depth;
import lombok.experimental.UtilityClass;
import org.bukkit.block.Block;
import org.bukkit.entity.TNTPrimed;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@UtilityClass
public class DepthManager {
private Map<TNTPrimed, Depth> depths = new HashMap<>();
public void init(List<TNTPrimed> list, Depth depth) {
for (TNTPrimed tnt : list) {
depths.putIfAbsent(tnt, depth);
}
}
public void update(TNTPrimed tnt, List<Block> blocks) {
Depth depth = depths.remove(tnt);
if (depth == null) return;
depth.update(blocks);
if (depths.containsValue(depth)) return;
depth.finish();
}
}

Datei anzeigen

@ -28,6 +28,7 @@ import lombok.experimental.UtilityClass;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -40,6 +41,9 @@ public class Countingwand {
public static ItemStack getWandItem(Player player) { public static ItemStack getWandItem(Player player) {
ItemStack itemStack = new SWItem(Material.STICK, BauSystem.MESSAGE.parse("COUNTINGWAND_ITEM_NAME", player), Arrays.asList(BauSystem.MESSAGE.parse("COUNTINGWAND_ITEM_LORE1", player), BauSystem.MESSAGE.parse("COUNTINGWAND_ITEM_LORE2", player)), false, null).getItemStack(); ItemStack itemStack = new SWItem(Material.STICK, BauSystem.MESSAGE.parse("COUNTINGWAND_ITEM_NAME", player), Arrays.asList(BauSystem.MESSAGE.parse("COUNTINGWAND_ITEM_LORE1", player), BauSystem.MESSAGE.parse("COUNTINGWAND_ITEM_LORE2", player)), false, null).getItemStack();
ItemUtils.setItem(itemStack, "countingwand"); ItemUtils.setItem(itemStack, "countingwand");
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setCustomModelData(1);
itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }

Datei anzeigen

@ -20,13 +20,12 @@
package de.steamwar.bausystem.features.countingwand; package de.steamwar.bausystem.features.countingwand;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@Linked(LinkageType.COMMAND) @Linked
public class CountingwandCommand extends SWCommand { public class CountingwandCommand extends SWCommand {
public CountingwandCommand() { public CountingwandCommand() {

Datei anzeigen

@ -20,15 +20,14 @@
package de.steamwar.bausystem.features.countingwand; package de.steamwar.bausystem.features.countingwand;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@Linked(LinkageType.BAU_GUI_ITEM) @Linked
public class CountingwandGuiItem extends BauGuiItem { public class CountingwandGuiItem extends BauGuiItem {
public CountingwandGuiItem() { public CountingwandGuiItem() {
@ -49,6 +48,6 @@ public class CountingwandGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.WORLDEDIT; return Permission.MEMBER;
} }
} }

Datei anzeigen

@ -19,9 +19,8 @@
package de.steamwar.bausystem.features.countingwand; package de.steamwar.bausystem.features.countingwand;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.region.Point; import de.steamwar.bausystem.region.Point;
import de.steamwar.linkage.Linked;
import org.bukkit.FluidCollisionMode; import org.bukkit.FluidCollisionMode;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -34,7 +33,7 @@ import org.bukkit.util.RayTraceResult;
import java.util.Objects; import java.util.Objects;
@Linked(LinkageType.LISTENER) @Linked
public class CountingwandListener implements Listener { public class CountingwandListener implements Listener {
@EventHandler @EventHandler

Datei anzeigen

@ -0,0 +1,141 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.design.endstone;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region;
import de.steamwar.entity.REntity;
import de.steamwar.entity.REntityServer;
import de.steamwar.entity.RFallingBlockEntity;
import net.md_5.bungee.api.ChatMessageType;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class DesignEndStone {
private static final World WORLD = Bukkit.getWorlds().get(0);
private int minX, minY, minZ, maxX, maxY, maxZ;
private REntityServer entityServer = new REntityServer();
private List<REntity> entities = new ArrayList<>();
private Set<Location> locations = new HashSet<>();
private boolean wsOrAs;
private double maxBlastResistance;
public DesignEndStone(Region region) {
this.minX = region.getMinPointBuild().getX();
this.minY = region.getMinPointBuild().getY();
this.minZ = region.getMinPointBuild().getZ();
this.maxX = region.getMaxPointBuild().getX();
this.maxY = region.getMaxPointBuild().getY();
this.maxZ = region.getMaxPointBuild().getZ();
wsOrAs = region.getName().startsWith("ws") || region.getName().startsWith("as");
maxBlastResistance = wsOrAs ? 6.1 : 9.0;
entityServer.setCallback((player, rEntity, entityAction) -> {
if (entityAction != REntityServer.EntityAction.ATTACK) return;
Location location = new Location(WORLD, rEntity.getX(), rEntity.getY(), rEntity.getZ());
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
location.getBlock().breakNaturally();
calc();
}, 1);
});
}
public void calc() {
entities.forEach(REntity::die);
entities.clear();
locations.clear();
calc(minX, minY, minZ, maxX, maxY, minZ, 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(maxX, minY, minZ, maxX, maxY, maxZ, -1, 0, 0, maxX - minX);
if (wsOrAs) {
calc(minX, minY, minZ, maxX, minY, maxZ, 0, 1, 0, maxY - minY + 1);
} else {
int airBlocks = 0;
double minAirBlocks = (maxX - minX) * (maxZ - minZ) * 0.1;
for (int x = minX; x < maxX; x++) {
for (int z = minZ; z < maxZ; z++) {
if (WORLD.getBlockAt(x, minY, z).getType().isAir()) {
airBlocks++;
if (airBlocks > minAirBlocks) break;
}
}
}
if (airBlocks > minAirBlocks) {
calc(minX, minY, minZ, maxX, minY, maxZ, 0, 1, 0, maxY - minY + 1);
}
}
calc(minX, maxY, minZ, maxX, maxY, maxZ, 0, -1, 0, maxY - minY + 1);
}
private void calc(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, int dirX, int dirY, int dirZ, int steps) {
for (int x = minX; x <= maxX; x++) {
for (int y = minY; y <= maxY; y++) {
for (int z = minZ; z <= maxZ; z++) {
for (int step = 0; step < steps; step++) {
int cx = x + step * dirX;
int cy = y + step * dirY;
int cz = z + step * dirZ;
Material material = WORLD.getBlockAt(cx, cy, cz).getType();
if (material != Material.WATER && material != Material.LAVA && material.getBlastResistance() >= maxBlastResistance) {
Location location = new Location(WORLD, cx + 0.5, cy, cz + 0.5);
if (!locations.add(location)) break;
RFallingBlockEntity entity = new RFallingBlockEntity(entityServer, location, Material.RED_STAINED_GLASS);
entity.setNoGravity(true);
entity.setGlowing(true);
entities.add(entity);
break;
} else if (!material.isAir() && material != Material.WATER && material != Material.LAVA) {
break;
}
}
}
}
}
}
public void toggle(Player player) {
if (entityServer.getPlayers().contains(player)) {
entityServer.removePlayer(player);
BauSystem.MESSAGE.sendPrefixless("DESIGN_ENDSTONE_DISABLE", player, ChatMessageType.ACTION_BAR);
} else {
entityServer.addPlayer(player);
calc();
BauSystem.MESSAGE.sendPrefixless("DESIGN_ENDSTONE_ENABLE", player, ChatMessageType.ACTION_BAR);
}
}
public boolean removePlayer(Player player) {
entityServer.removePlayer(player);
return entityServer.getPlayers().isEmpty();
}
}

Datei anzeigen

@ -0,0 +1,97 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.design.endstone;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.region.utils.RegionType;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@Linked
public class DesignEndStoneCommand extends SWCommand implements Listener {
public DesignEndStoneCommand() {
super("designendstone");
}
private Map<Region, DesignEndStone> designEndStoneMap = new HashMap<>();
@Register(description = "DESIGN_ENDSTONE_COMMAND_HELP")
public void genericCommand(@Validator Player player) {
Region region = Region.getRegion(player.getLocation());
if (!region.hasType(RegionType.BUILD)) {
BauSystem.MESSAGE.send("DESIGN_ENDSTONE_REGION_ERROR", player);
return;
}
designEndStoneMap.computeIfAbsent(region, DesignEndStone::new).toggle(player);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
disableDesignEndStone(event.getPlayer());
}
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(this::disableDesignEndStone);
}
private void disableDesignEndStone(Player player) {
new HashSet<>(designEndStoneMap.entrySet()).forEach(regionDesignEndStoneEntry -> {
if (regionDesignEndStoneEntry.getValue().removePlayer(player)) {
designEndStoneMap.remove(regionDesignEndStoneEntry.getKey());
}
});
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
update(event.getBlock().getLocation());
}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
BauSystem.runTaskLater(BauSystem.getInstance(), () -> {
update(event.getBlock().getLocation());
}, 1);
}
private void update(Location location) {
Region region = Region.getRegion(location);
DesignEndStone designEndStone = designEndStoneMap.get(region);
if (designEndStone == null) {
return;
}
designEndStone.calc();
}
}

Datei anzeigen

@ -25,7 +25,8 @@ import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.features.autostart.AutostartListener; import de.steamwar.bausystem.features.autostart.AutostartListener;
import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage; import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage;
import de.steamwar.bausystem.features.detonator.storage.ItemStorage; import de.steamwar.bausystem.features.detonator.storage.ItemStorage;
import de.steamwar.bausystem.utils.NMSWrapper; import de.steamwar.entity.REntityServer;
import de.steamwar.entity.RFallingBlockEntity;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
@ -44,7 +45,7 @@ import java.util.*;
@UtilityClass @UtilityClass
public class Detonator { public class Detonator {
private static final Map<Player, List<AbstractDetonatorEntity>> ENTITIES_MAP = new HashMap<>(); private static final Map<Player, REntityServer> ENTITIES_MAP = new HashMap<>();
private static final Vector HALF = new Vector(0.5, 0, 0.5); private static final Vector HALF = new Vector(0.5, 0, 0.5);
public static boolean isDetonator(ItemStack itemStack) { public static boolean isDetonator(ItemStack itemStack) {
@ -52,18 +53,24 @@ public class Detonator {
} }
public static void showDetonator(Player p, List<Location> locs) { public static void showDetonator(Player p, List<Location> locs) {
List<AbstractDetonatorEntity> entities = new LinkedList<>(); if (ENTITIES_MAP.containsKey(p)) return;
locs.stream().map(Location::toVector).forEach(vector -> entities.add(NMSWrapper.impl.constructDetonator(p.getWorld(), vector.add(HALF)))); REntityServer entities = new REntityServer();
entities.forEach(abstractDetonatorEntity -> abstractDetonatorEntity.display(p)); entities.setCallback((player, rEntity, entityAction) -> {
ENTITIES_MAP.putIfAbsent(p, entities); Vector vector = new Vector(rEntity.getX(), rEntity.getY(), rEntity.getZ());
DetonatorListener.addLocationToDetonator(vector.toLocation(player.getWorld()).getBlock().getLocation(), player);
DetonatorListener.HAS_UPDATED.add(player);
});
entities.addPlayer(p);
ENTITIES_MAP.put(p, entities);
locs.forEach(location -> {
RFallingBlockEntity entity = new RFallingBlockEntity(entities, location.clone().add(HALF), Material.RED_STAINED_GLASS);
entity.setNoGravity(true);
});
} }
public static void hideDetonator(Player p) { public static void hideDetonator(Player p) {
ENTITIES_MAP.remove(p).forEach(abstractDetonatorEntity -> abstractDetonatorEntity.hide(p, true)); ENTITIES_MAP.remove(p).close();
}
public static List<AbstractDetonatorEntity> getDetoEntities(Player p) {
return ENTITIES_MAP.getOrDefault(p, new ArrayList<>());
} }
public static boolean hasActiveDetonatorShow(Player p) { public static boolean hasActiveDetonatorShow(Player p) {
@ -192,34 +199,23 @@ public class Detonator {
switch (block.getType()) { switch (block.getType()) {
case LEVER: case LEVER:
return Detoblock.SWITCH; return Detoblock.SWITCH;
case ACACIA_BUTTON:
case BIRCH_BUTTON:
case DARK_OAK_BUTTON:
case JUNGLE_BUTTON:
case OAK_BUTTON:
case SPRUCE_BUTTON:
return Detoblock.WOOD_BUTTON;
case STONE_BUTTON:
return Detoblock.STONE_BUTTON;
case ACACIA_PRESSURE_PLATE:
case BIRCH_PRESSURE_PLATE:
case DARK_OAK_PRESSURE_PLATE:
case JUNGLE_PRESSURE_PLATE:
case OAK_PRESSURE_PLATE:
case SPRUCE_PRESSURE_PLATE:
case STONE_PRESSURE_PLATE:
return Detoblock.PRESSURE_PLATE;
case HEAVY_WEIGHTED_PRESSURE_PLATE:
case LIGHT_WEIGHTED_PRESSURE_PLATE:
return Detoblock.WEIGHTED_PRESSURE_PLATE;
case TRIPWIRE: case TRIPWIRE:
return Detoblock.TRIPWIRE; return Detoblock.TRIPWIRE;
case NOTE_BLOCK: case NOTE_BLOCK:
return Detoblock.NOTEBLOCK; return Detoblock.NOTEBLOCK;
case DAYLIGHT_DETECTOR: case DAYLIGHT_DETECTOR:
return Detoblock.DAYLIGHTSENSOR; return Detoblock.DAYLIGHTSENSOR;
case HEAVY_WEIGHTED_PRESSURE_PLATE:
case LIGHT_WEIGHTED_PRESSURE_PLATE:
return Detoblock.WEIGHTED_PRESSURE_PLATE;
default: default:
if (block.getBlockData() instanceof Powerable) { if (block.getType().name().contains("STONE_BUTTON")) {
return Detoblock.STONE_BUTTON;
} else if (block.getType().name().contains("BUTTON")) {
return Detoblock.WOOD_BUTTON;
} else if (block.getType().name().contains("PRESSURE_PLATE")) {
return Detoblock.PRESSURE_PLATE;
} else if (block.getBlockData() instanceof Powerable) {
return Detoblock.POWERABLE; return Detoblock.POWERABLE;
} else { } else {
return Detoblock.INVALID; return Detoblock.INVALID;

Datei anzeigen

@ -20,14 +20,13 @@
package de.steamwar.bausystem.features.detonator; package de.steamwar.bausystem.features.detonator;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@Linked(LinkageType.BAU_GUI_ITEM) @Linked
public class DetonatorBauGuiItem extends BauGuiItem { public class DetonatorBauGuiItem extends BauGuiItem {
public DetonatorBauGuiItem() { public DetonatorBauGuiItem() {
@ -48,6 +47,6 @@ public class DetonatorBauGuiItem extends BauGuiItem {
@Override @Override
public Permission permission() { public Permission permission() {
return Permission.MEMBER; return Permission.BUILD;
} }
} }

Datei anzeigen

@ -24,10 +24,9 @@ import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage; import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage;
import de.steamwar.bausystem.features.detonator.storage.ItemStorage; import de.steamwar.bausystem.features.detonator.storage.ItemStorage;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.utils.ItemUtils; import de.steamwar.bausystem.utils.ItemUtils;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -35,7 +34,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import java.util.Arrays; import java.util.Arrays;
@Linked(LinkageType.COMMAND) @Linked
public class DetonatorCommand extends SWCommand { public class DetonatorCommand extends SWCommand {
public static ItemStack getWAND(Player player) { public static ItemStack getWAND(Player player) {
@ -47,23 +46,24 @@ public class DetonatorCommand extends SWCommand {
meta.setLore(Arrays.asList(BauSystem.MESSAGE.parse("DETONATOR_WAND_LORE_1", player), meta.setLore(Arrays.asList(BauSystem.MESSAGE.parse("DETONATOR_WAND_LORE_1", player),
BauSystem.MESSAGE.parse("DETONATOR_WAND_LORE_2", player), BauSystem.MESSAGE.parse("DETONATOR_WAND_LORE_2", player),
BauSystem.MESSAGE.parse("DETONATOR_WAND_LORE_3", player))); BauSystem.MESSAGE.parse("DETONATOR_WAND_LORE_3", player)));
meta.setCustomModelData(3);
wand.setItemMeta(meta); wand.setItemMeta(meta);
ItemUtils.setItem(wand, "detonator"); ItemUtils.setItem(wand, "detonator");
return wand; return wand;
} }
protected DetonatorCommand() { public DetonatorCommand() {
super("detonator", "dt"); super("detonator", "dt");
} }
@Register(value = "wand", description = "DETONATOR_HELP_WAND") @Register(value = "wand", description = "DETONATOR_HELP_WAND")
public void giveWand(Player p) { public void giveWand(@Validator Player p) {
SWUtils.giveItemToPlayer(p, getWAND(p)); SWUtils.giveItemToPlayer(p, getWAND(p));
} }
@Register(value = "click", description = "DETONATOR_HELP_CLICK") @Register(value = "click", description = "DETONATOR_HELP_CLICK")
public void clickDetonator(Player p) { public void clickDetonator(@Validator Player p) {
Detonator.activateDetonator(new ItemStorage(p)); Detonator.activateDetonator(new ItemStorage(p));
} }

Datei anzeigen

@ -19,14 +19,12 @@
package de.steamwar.bausystem.features.detonator; package de.steamwar.bausystem.features.detonator;
import com.comphenix.tinyprotocol.Reflection;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage; import de.steamwar.bausystem.features.detonator.storage.DetonatorStorage;
import de.steamwar.bausystem.features.detonator.storage.ItemStorage; import de.steamwar.bausystem.features.detonator.storage.ItemStorage;
import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.linkage.Linked;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.utils.ProtocolAPI;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -39,39 +37,14 @@ import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerSwapHandItemsEvent; import org.bukkit.event.player.PlayerSwapHandItemsEvent;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;
@Linked(LinkageType.LISTENER) @Linked
public class DetonatorListener implements Listener { public class DetonatorListener implements Listener {
public static final Class<?> useEntity = Reflection.getClass("{nms.network.protocol.game}.PacketPlayInUseEntity"); static final Set<Player> HAS_UPDATED = new HashSet<>();
private static final Reflection.FieldAccessor<Integer> entityIdFieldAccessor = Reflection.getField(useEntity, int.class, 0);
private static final Set<Player> HAS_UPDATED = new HashSet<>(); static void addLocationToDetonator(Location location, Player p) {
public DetonatorListener() {
ProtocolAPI.setIncomingHandler(useEntity, (player, o) -> {
List<AbstractDetonatorEntity> entities = Detonator.getDetoEntities(player);
if (entities.isEmpty()) {
return o;
}
int entityId = entityIdFieldAccessor.get(o);
AbstractDetonatorEntity entity = entities.stream().filter(abstractDetonatorEntity -> abstractDetonatorEntity.getId() == entityId).findFirst().orElse(null);
if (entity == null) {
return o;
}
Location location = entity.getBukkitEntity().getLocation().getBlock().getLocation();
addLocationToDetonator(location, player);
HAS_UPDATED.add(player);
return null;
});
}
private static void addLocationToDetonator(Location location, Player p) {
Detoblock detoblock = Detonator.getBlock(location.getBlock()); Detoblock detoblock = Detonator.getBlock(location.getBlock());
if (detoblock == Detoblock.INVALID) { if (detoblock == Detoblock.INVALID) {
SWUtils.sendToActionbar(p, BauSystem.MESSAGE.parse("DETONATOR_INVALID_BLOCK", p)); SWUtils.sendToActionbar(p, BauSystem.MESSAGE.parse("DETONATOR_INVALID_BLOCK", p));
@ -93,6 +66,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
Player p = event.getPlayer(); Player p = event.getPlayer();
if (Detonator.isDetonator(p.getInventory().getItemInMainHand())) { if (Detonator.isDetonator(p.getInventory().getItemInMainHand())) {
event.setCancelled(true); event.setCancelled(true);
@ -103,6 +77,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onPlayerInteract(PlayerInteractEvent event) { public void onPlayerInteract(PlayerInteractEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Detonator.isDetonator(event.getItem())) { if (!Detonator.isDetonator(event.getItem())) {
return; return;
} }
@ -117,7 +92,7 @@ public class DetonatorListener implements Listener {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerMove(PlayerMoveEvent event) { public void onPlayerMove(PlayerMoveEvent event) {
if (!Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) { if (!Permission.BUILD.hasPermission(event.getPlayer()) ||!Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) {
if (Detonator.hasActiveDetonatorShow(event.getPlayer())) { if (Detonator.hasActiveDetonatorShow(event.getPlayer())) {
Detonator.hideDetonator(event.getPlayer()); Detonator.hideDetonator(event.getPlayer());
} }
@ -138,6 +113,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onPlayerItemHeld(PlayerItemHeldEvent event) { public void onPlayerItemHeld(PlayerItemHeldEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) { if (Detonator.isDetonator(event.getPlayer().getInventory().getItemInMainHand())) {
HAS_UPDATED.add(event.getPlayer()); HAS_UPDATED.add(event.getPlayer());
} }
@ -145,6 +121,7 @@ public class DetonatorListener implements Listener {
@EventHandler @EventHandler
public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) { public void onPlayerSwapHandItems(PlayerSwapHandItemsEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (Detonator.isDetonator(event.getMainHandItem()) || Detonator.isDetonator(event.getOffHandItem())) { if (Detonator.isDetonator(event.getMainHandItem()) || Detonator.isDetonator(event.getOffHandItem())) {
HAS_UPDATED.add(event.getPlayer()); HAS_UPDATED.add(event.getPlayer());
} }

Datei anzeigen

@ -23,9 +23,9 @@ 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;
import de.steamwar.bausystem.features.gui.editor.BauGuiMapping; import de.steamwar.bausystem.features.gui.editor.BauGuiMapping;
import de.steamwar.bausystem.linkage.LinkageUtils;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWInventory;
import lombok.Getter;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@ -38,9 +38,13 @@ import java.util.*;
@UtilityClass @UtilityClass
public class BauGUI { public class BauGUI {
@Getter
private static final Map<Integer, BauGuiItem> ITEMS = new HashMap<>(); private static final Map<Integer, BauGuiItem> ITEMS = new HashMap<>();
public static Map<Integer, BauGuiItem> getITEMS() {
if (ITEMS.isEmpty()) LinkageUtils.linkGUIItems();
return ITEMS;
}
private static final Set<Player> OPEN_INVS = new HashSet<>(); private static final Set<Player> OPEN_INVS = new HashSet<>();
private static boolean updating = false; private static boolean updating = false;
@ -56,7 +60,6 @@ public class BauGUI {
if (ITEMS.containsKey(item.getId())) { if (ITEMS.containsKey(item.getId())) {
throw new IllegalArgumentException("Duplicate Id Key: " + item.getId() + ". From Classes: " + ITEMS.get(item.getId()).getClass().getName() + " and " + item.getClass().getName()); throw new IllegalArgumentException("Duplicate Id Key: " + item.getId() + ". From Classes: " + ITEMS.get(item.getId()).getClass().getName() + " and " + item.getClass().getName());
} }
System.out.println("Added Item: " + item.getId());
ITEMS.put(item.getId(), item); ITEMS.put(item.getId(), item);
} }
@ -66,7 +69,7 @@ public class BauGUI {
} }
BauGuiMapping mapping = BauGuiMapping.getGuiMapping(p); BauGuiMapping mapping = BauGuiMapping.getGuiMapping(p);
SWInventory inv = new SWInventory(p, mapping.getSize(), BauSystem.MESSAGE.parse("GUI_NAME", p)); SWInventory inv = new SWInventory(p, mapping.getSize(), BauSystem.MESSAGE.parse("GUI_NAME", p));
ITEMS.values().forEach(item -> { getITEMS().values().forEach(item -> {
if (!mapping.isShown(item.getId())) { if (!mapping.isShown(item.getId())) {
return; return;
} }
@ -78,7 +81,7 @@ public class BauGUI {
} }
} else { } else {
p.closeInventory(); p.closeInventory();
BauSystem.MESSAGE.send("GUI_NO_PERMISSION", p); BauSystem.MESSAGE.send("NO_PERMISSION", p);
} }
}); });
}); });
@ -105,26 +108,13 @@ public class BauGUI {
if (!permission.hasPermission(p)) { if (!permission.hasPermission(p)) {
List<String> lore = meta.getLore(); List<String> lore = meta.getLore();
if (lore == null) { if (lore == null) {
lore = Collections.singletonList(BauSystem.MESSAGE.parse(permissionString(permission), p)); lore = Collections.singletonList(BauSystem.MESSAGE.parse("NO_PERMISSION", p));
} else { } else {
lore.add(BauSystem.MESSAGE.parse(permissionString(permission), p)); lore.add(BauSystem.MESSAGE.parse("NO_PERMISSION", p));
} }
meta.setLore(lore); meta.setLore(lore);
} }
itemStack.setItemMeta(meta); itemStack.setItemMeta(meta);
return itemStack; return itemStack;
} }
private static String permissionString(Permission permission) {
switch (permission) {
case OWNER:
return "GUI_NO_OWNER";
case WORLD:
return "GUI_NO_WORLD";
case WORLDEDIT:
return "GUI_NO_WORLDEDIT";
default:
return "GUI_NO_MEMBER";
}
}
} }

Datei anzeigen

@ -20,16 +20,15 @@
package de.steamwar.bausystem.features.gui; package de.steamwar.bausystem.features.gui;
import de.steamwar.bausystem.features.gui.editor.BauGuiEditor; import de.steamwar.bausystem.features.gui.editor.BauGuiEditor;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@Linked(LinkageType.COMMAND) @Linked
public class BauGUICommand extends SWCommand { public class BauGUICommand extends SWCommand {
protected BauGUICommand() { public BauGUICommand() {
super("gui", "baugui", "g"); super("gui", "baugui", "g");
} }

Datei anzeigen

@ -21,10 +21,9 @@ package de.steamwar.bausystem.features.gui;
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.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked;
import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -33,7 +32,7 @@ import org.bukkit.inventory.ItemStack;
import java.util.Arrays; import java.util.Arrays;
@Linked(LinkageType.BAU_GUI_ITEM) @Linked
public class BauGuiBauGuiItem extends BauGuiItem { public class BauGuiBauGuiItem extends BauGuiItem {
public BauGuiBauGuiItem() { public BauGuiBauGuiItem() {

Datei anzeigen

@ -19,14 +19,13 @@
package de.steamwar.bausystem.features.gui; package de.steamwar.bausystem.features.gui;
import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.linkage.Linked;
import de.steamwar.bausystem.linkage.Linked;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerInteractEvent;
@Linked(LinkageType.LISTENER) @Linked
public class BauGuiListener implements Listener { public class BauGuiListener implements Listener {
@EventHandler @EventHandler

Datei anzeigen

@ -21,11 +21,10 @@ package de.steamwar.bausystem.features.gui.editor;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.features.gui.BauGUI; import de.steamwar.bausystem.features.gui.BauGUI;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
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 lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -40,13 +39,14 @@ import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
import java.util.*; import java.util.*;
@Linked(LinkageType.LISTENER) @Linked
public class BauGuiEditor implements Listener { public class BauGuiEditor implements Listener {
@Getter @Getter
@ -73,6 +73,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(Material.SCUTE, BauSystem.MESSAGE.parse("GUI_EDITOR_ITEM_MORE", p)).getItemStack()); inv.setItem(mapping.getSize() + 6, new SWItem(Material.SCUTE, 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());
p.openInventory(inv); p.openInventory(inv);
p.getOpenInventory().setCursor(cursor == null ? new SWItem().getItemStack() : cursor); p.getOpenInventory().setCursor(cursor == null ? new SWItem().getItemStack() : cursor);
@ -156,6 +157,10 @@ public class BauGuiEditor implements Listener {
}); });
inv.open(); inv.open();
break; break;
case 8:
saveMapping(p);
BauGUI.openBauGui(p);
break;
default: default:
} }
} }
@ -189,14 +194,17 @@ public class BauGuiEditor implements Listener {
} }
private void saveMapping(Player p) { private void saveMapping(Player p) {
BauGuiMapping mapping = BauGuiMapping.getGuiMapping(p); saveMapping(p.getOpenInventory(), BauGuiMapping.getGuiMapping(p));
}
private void saveMapping(InventoryView view, BauGuiMapping mapping) {
if (mapping.isSaved()) { if (mapping.isSaved()) {
return; return;
} }
HashMap<Integer, Integer> newMapping = new HashMap<>(); HashMap<Integer, Integer> newMapping = new HashMap<>();
for (int i = 0; i < p.getOpenInventory().getTopInventory().getContents().length; i++) { for (int i = 0; i < view.getTopInventory().getContents().length; i++) {
ItemStack itemStack = p.getOpenInventory().getTopInventory().getContents()[i]; ItemStack itemStack = view.getTopInventory().getContents()[i];
if (itemStack == null || itemStack.getType() == Material.AIR || i >= mapping.getSize()) continue; if (itemStack == null || itemStack.getType() == Material.AIR || i >= mapping.getSize()) continue;
newMapping.put(getId(itemStack), i); newMapping.put(getId(itemStack), i);
} }
@ -219,7 +227,7 @@ public class BauGuiEditor implements Listener {
Player p = (Player) event.getPlayer(); Player p = (Player) event.getPlayer();
saveMapping(p); saveMapping(event.getView(), BauGuiMapping.getGuiMapping(p));
open_Edits.remove(p); open_Edits.remove(p);
} }
} }

Datei anzeigen

@ -21,16 +21,15 @@ package de.steamwar.bausystem.features.gui.editor;
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.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.specific.BauGuiItem; import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.inventory.SWItem; import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@Linked(LinkageType.BAU_GUI_ITEM) @Linked
public class BauGuiEditorGuiItem extends BauGuiItem { public class BauGuiEditorGuiItem extends BauGuiItem {
public BauGuiEditorGuiItem() { public BauGuiEditorGuiItem() {

Datei anzeigen

@ -20,6 +20,7 @@
package de.steamwar.bausystem.features.hotbar; package de.steamwar.bausystem.features.hotbar;
import de.steamwar.bausystem.configplayer.Config; import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.core.Core;
import lombok.experimental.UtilityClass; import lombok.experimental.UtilityClass;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -30,14 +31,18 @@ import yapion.parser.YAPIONParser;
import yapion.serializing.YAPIONDeserializer; import yapion.serializing.YAPIONDeserializer;
import yapion.serializing.YAPIONSerializer; import yapion.serializing.YAPIONSerializer;
import java.util.HashSet;
import java.util.Set;
@UtilityClass @UtilityClass
public class DefaultHotbar { public class DefaultHotbar {
private final YAPIONArray DEFAULT_HOTBAR = YAPIONParser.parse("{[{@type(org.bukkit.inventory.ItemStack)v(2230)type(WOODEN_AXE)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(WorldEdit Wand)lore{@type(java.util.ArrayList)values[Left click: select pos #1,Right click: select pos #2]}}},{@type(org.bukkit.inventory.ItemStack)v(2230)type(COMPASS)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(Navigation Wand)lore{@type(java.util.ArrayList)values[Left click: jump to location,Right click: pass through walls]}}},null,null,null,null,null,null,{@type(org.bukkit.inventory.ItemStack)v(2230)type(NETHER_STAR)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(§eBau GUI)}}]}").getArray(""); private final YAPIONArray DEFAULT_HOTBAR = YAPIONParser.parse("{[{@type(org.bukkit.inventory.ItemStack)v(2230)type(WOODEN_AXE)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(WorldEdit Wand)lore{@type(java.util.ArrayList)values[Left click: select pos #1,Right click: select pos #2]}}},{@type(org.bukkit.inventory.ItemStack)v(2230)type(COMPASS)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(Navigation Wand)lore{@type(java.util.ArrayList)values[Left click: jump to location,Right click: pass through walls]}}},null,null,null,null,null,null,{@type(org.bukkit.inventory.ItemStack)v(2230)type(NETHER_STAR)meta{@type(org.bukkit.inventory.meta.ItemMeta)meta-type(UNSPECIFIC)display-name(§eBau GUI)}},null,null,{@type(org.bukkit.inventory.ItemStack)v(3117)type(ELYTRA)},null]}").getArray("");
public void updateHotbar(Player p) { public void updateHotbar(Player p) {
ItemStack[] hotbar = new ItemStack[9]; ItemStack[] hotbar = new ItemStack[13];
System.arraycopy(p.getInventory().getContents(), 0, hotbar, 0, 9); System.arraycopy(p.getInventory().getContents(), 0, hotbar, 0, 9);
System.arraycopy(p.getInventory().getArmorContents(), 0, hotbar, 9, 4);
YAPIONArray yapionArray = new YAPIONArray(); YAPIONArray yapionArray = new YAPIONArray();
for (ItemStack itemStack : hotbar) { for (ItemStack itemStack : hotbar) {
if (itemStack != null) { if (itemStack != null) {
@ -46,27 +51,39 @@ public class DefaultHotbar {
yapionArray.add(new YAPIONValue<>(null)); yapionArray.add(new YAPIONValue<>(null));
} }
} }
Config.getInstance().get(p).add("hotbar", yapionArray); Config.getInstance().get(p).add("hotbar-" + Core.getVersion(), yapionArray);
Config.getInstance().save(p); Config.getInstance().save(p);
} }
public void setHotbar(Player p) { public void setHotbar(Player p) {
ItemStack[] hotbar = getItems(p); ItemStack[] hotbar = getItems(p);
ItemStack[] inv = p.getInventory().getContents(); ItemStack[] inv = p.getInventory().getContents();
ItemStack[] armor = p.getInventory().getArmorContents();
System.arraycopy(hotbar, 0, inv, 0, 9); System.arraycopy(hotbar, 0, inv, 0, 9);
System.arraycopy(hotbar, 9, armor, 0, 4);
p.getInventory().setContents(inv); p.getInventory().setContents(inv);
p.getInventory().setArmorContents(armor);
} }
public ItemStack[] getItems(Player p) { public ItemStack[] getItems(Player p) {
YAPIONArray yapionArray = Config.getInstance().get(p).getYAPIONArrayOrSetDefault("hotbar", defaultHotbar()); Config.getInstance().get(p).remap("hotbar", "hotbar-19");
ItemStack[] hotbar = new ItemStack[9]; YAPIONArray yapionArray = Config.getInstance().get(p).getYAPIONArrayOrSetDefault("hotbar-" + Core.getVersion(), defaultHotbar());
ItemStack[] hotbar = new ItemStack[13];
Set<Integer> invalid = new HashSet<>();
yapionArray.forEach((integer, yapionAnyType) -> { yapionArray.forEach((integer, yapionAnyType) -> {
if (yapionAnyType instanceof YAPIONValue) { if (yapionAnyType instanceof YAPIONValue) {
hotbar[integer] = null; hotbar[integer] = null;
} else { } else {
hotbar[integer] = (ItemStack) YAPIONDeserializer.deserialize((YAPIONObject) yapionAnyType); try {
hotbar[integer] = YAPIONDeserializer.deserialize((YAPIONObject) yapionAnyType);
} catch (Exception e) {
invalid.add(integer);
hotbar[integer] = null;
}
} }
}); });
invalid.forEach(i -> yapionArray.set(i, new YAPIONValue<>(null)));
if (!invalid.isEmpty()) Config.getInstance().save(p);
return hotbar; return hotbar;
} }

Datei anzeigen

@ -20,23 +20,22 @@
package de.steamwar.bausystem.features.hotbar; package de.steamwar.bausystem.features.hotbar;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.inventory.SWInventory; import de.steamwar.inventory.SWInventory;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@Linked(LinkageType.COMMAND) @Linked
public class HotbarCommand extends SWCommand { public class HotbarCommand extends SWCommand {
protected HotbarCommand() { public HotbarCommand() {
super("hotbar", "hb"); super("hotbar", "hb");
addDefaultHelpMessage("HOTBAR_HELP_GENERIC"); addDefaultHelpMessage("HOTBAR_HELP_GENERIC");
} }
@Register(value = "load", description = "HOTBAR_HELP_LOAD") @Register(value = "load", description = "HOTBAR_HELP_LOAD")
public void loadHotbar(Player p) { public void loadHotbar(@Validator Player p) {
DefaultHotbar.setHotbar(p); DefaultHotbar.setHotbar(p);
BauSystem.MESSAGE.send("HOTBAR_LOADED", p); BauSystem.MESSAGE.send("HOTBAR_LOADED", p);
} }
@ -49,7 +48,7 @@ public class HotbarCommand extends SWCommand {
@Register(value = "show", description = "HOTBAR_HELP_SHOW") @Register(value = "show", description = "HOTBAR_HELP_SHOW")
public void showHotbar(Player p) { public void showHotbar(Player p) {
SWInventory inv = new SWInventory(p, 9, BauSystem.MESSAGE.parse("HOTBAR_INVENTORY", p)); SWInventory inv = new SWInventory(p, 18, BauSystem.MESSAGE.parse("HOTBAR_INVENTORY", p));
ItemStack[] hotbar = DefaultHotbar.getItems(p); ItemStack[] hotbar = DefaultHotbar.getItems(p);
for (int i = 0; i < hotbar.length; i++) { for (int i = 0; i < hotbar.length; i++) {
if (hotbar[i] == null) continue; if (hotbar[i] == null) continue;

Datei anzeigen

@ -19,19 +19,20 @@
package de.steamwar.bausystem.features.hotbar; package de.steamwar.bausystem.features.hotbar;
import de.steamwar.bausystem.linkage.LinkageType; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.Linked; import de.steamwar.linkage.Linked;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
@Linked(LinkageType.LISTENER) @Linked
public class HotbarListener implements Listener { public class HotbarListener implements Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
if (allNull(event.getPlayer().getInventory().getContents())) { if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (allNull(event.getPlayer().getInventory().getContents()) && allNull(event.getPlayer().getInventory().getArmorContents())) {
DefaultHotbar.setHotbar(event.getPlayer()); DefaultHotbar.setHotbar(event.getPlayer());
} }
} }

Datei anzeigen

@ -0,0 +1,42 @@
package de.steamwar.bausystem.features.inventoryfiller;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.inventory.SWItem;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import java.util.Collections;
@Linked
public class InventoryFillBauGuiItem extends BauGuiItem {
public InventoryFillBauGuiItem() {
super(34);
}
@LinkedInstance
public InventoryFillerCommand command;
@Override
public Permission permission() {
return Permission.MEMBER;
}
@Override
public ItemStack getItem(Player player) {
String loreKey = Config.getInstance().get(player).getPlainValueOrDefault("inventoryfill", false) ? "OTHER_ITEMS_INVENTORY_FILL_LORE_ACTIVE" : "OTHER_ITEMS_INVENTORY_FILL_LORE_INACTIVE";
return new SWItem(Material.HOPPER, BauSystem.MESSAGE.parse("OTHER_ITEMS_INVENTORY_FILL_NAME", player), Collections.singletonList(BauSystem.MESSAGE.parse(loreKey, player)), false, clickType -> {}).getItemStack();
}
@Override
public boolean click(ClickType click, Player p) {
command.toggle(p);
return false;
}
}

Datei anzeigen

@ -0,0 +1,124 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2022 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.inventoryfiller;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.linkage.Linked;
import net.md_5.bungee.api.ChatMessageType;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Container;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerItemHeldEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
@Linked
public class InventoryFiller implements Listener {
@EventHandler
public void onPlayerDropItem(PlayerDropItemEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return;
if (!event.getPlayer().isSneaking()) return;
Block block = event.getPlayer().getTargetBlockExact(5);
if (block == null) return;
if (!(block.getState() instanceof Container)) return;
Container container = (Container) block.getState();
Inventory inventory = container.getInventory();
ItemStack itemStack = event.getItemDrop().getItemStack().clone();
itemStack.setAmount(itemStack.getType().getMaxStackSize());
event.setCancelled(true);
for (int i = 0; i < inventory.getSize(); i++) {
inventory.setItem(i, itemStack);
}
BauSystem.MESSAGE.sendPrefixless("CHESTFILLER_FILLED", event.getPlayer(), ChatMessageType.ACTION_BAR);
}
/**
* For MacOS user: https://www.curseforge.com/minecraft/mc-mods/shift-scroll-fix
*/
@EventHandler
public void onPlayerItemHeld(PlayerItemHeldEvent event) {
if(!Permission.BUILD.hasPermission(event.getPlayer())) return;
if (!Config.getInstance().get(event.getPlayer()).getPlainValueOrDefault("inventoryfill", false)) return;
if (!event.getPlayer().isSneaking()) return;
ItemStack itemStack = event.getPlayer().getInventory().getItemInMainHand();
if (itemStack.getType() == Material.AIR) return;
Block block = event.getPlayer().getTargetBlockExact(5);
if (block == null) return;
if (!(block.getState() instanceof Container)) return;
Container container = (Container) block.getState();
Inventory inventory = container.getInventory();
event.setCancelled(true);
int upperBound = event.getPreviousSlot() + 4;
if (upperBound > 8) upperBound -= 8;
int lowerBound = event.getPreviousSlot() - 5;
if (lowerBound < 0) lowerBound += 8;
int direction = 0;
if (event.getPreviousSlot() != 0 && (event.getNewSlot() > event.getPreviousSlot() || (upperBound < event.getPreviousSlot() && event.getNewSlot() < upperBound))) {
direction = 1;
} else if (event.getPreviousSlot() == 0 && event.getNewSlot() > upperBound) {
direction = -1;
} else if (event.getNewSlot() < event.getPreviousSlot() || (lowerBound > event.getPreviousSlot() && event.getNewSlot() >= lowerBound)) {
direction = -1;
} else if (event.getPreviousSlot() == 0) {
direction = 1;
}
int count = 0;
int emptySlot = -1;
int filledSlot = -1;
for (int i = 0; i < inventory.getSize(); i++) {
ItemStack current = inventory.getItem(i);
if (current == null) {
if (emptySlot == -1) emptySlot = i;
continue;
}
if (current.getType() == itemStack.getType()) {
count += current.getAmount();
int emptyAmount = itemStack.getType().getMaxStackSize() - current.getAmount();
if (direction == -1) filledSlot = Math.max(filledSlot, i);
if (emptyAmount > 0) filledSlot = Math.min(i, filledSlot);
if (emptyAmount > 0 && filledSlot == -1) filledSlot = i;
}
}
int slotToUse = direction == -1 ? filledSlot : (filledSlot == -1 ? emptySlot : filledSlot);
if (slotToUse == -1) return;
ItemStack current = inventory.getItem(slotToUse);
if (current == null) {
ItemStack now = itemStack.clone();
now.setAmount(1);
inventory.setItem(slotToUse, now);
} else {
current.setAmount(current.getAmount() + direction);
}
BauSystem.MESSAGE.sendPrefixless("CHESTFILLER_COUNT", event.getPlayer(), ChatMessageType.ACTION_BAR, itemStack.getType(), count + direction);
}
}

Datei anzeigen

@ -0,0 +1,28 @@
package de.steamwar.bausystem.features.inventoryfiller;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.configplayer.Config;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player;
@Linked
public class InventoryFillerCommand extends SWCommand {
public InventoryFillerCommand() {
super("inventoryfill");
}
@Register(description = {"INVENTORY_FILL_HELP", "INVENTORY_FILL_INFO"})
public void toggle(Player player) {
boolean inventoryFill = Config.getInstance().get(player).getPlainValueOrDefault("inventoryfill", false);
Config.getInstance().get(player).put("inventoryfill", !inventoryFill);
if (!inventoryFill) {
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("INVENTORY_FILL_ENABLE", player));
BauSystem.MESSAGE.send("INVENTORY_FILL_INFO", player);
}else {
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("INVENTORY_FILL_DISABLE", player));
}
}
}

Datei anzeigen

@ -1,7 +1,7 @@
/* /*
* This file is a part of the SteamWar software. * This file is a part of the SteamWar software.
* *
* Copyright (C) 2021 SteamWar.de-Serverteam * Copyright (C) 2023 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,20 +17,18 @@
* 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.testblock.depthcounter; package de.steamwar.bausystem.features.killchecker;
import java.util.Arrays; import lombok.AllArgsConstructor;
import java.util.HashSet; import lombok.Data;
import java.util.Set;
@Data
public enum CountMode { @AllArgsConstructor
public class Cuboid {
X, private double x;
Y, private double y;
Z; private double z;
private double dx;
public static Set<CountMode> ALL() { private double dy;
return new HashSet<>(Arrays.asList(values())); private double dz;
}
} }

Datei anzeigen

@ -0,0 +1,115 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.killchecker;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Region;
import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.utils.bossbar.BossBarService;
import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import de.steamwar.linkage.LinkedInstance;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@Linked
public class KillcheckerCommand extends SWCommand implements Listener {
private Map<Region, KillcheckerVisualizer> visualizers = new HashMap<>();
@LinkedInstance
public BossBarService bossBarService;
public KillcheckerCommand() {
super("killchecker");
addDefaultHelpMessage("KILLCHECKER_INFO");
addDefaultHelpMessage("KILLCHECKER_INFO2");
}
@Register(value = "enable", description = "KILLCHECKER_HELP_ENABLE")
public void genericCommand(@Validator Player player, @OptionalValue("-outline") @StaticValue(value = {"-area", "-outline"}, allowISE = true) boolean onlyOutline) {
Region region = Region.getRegion(player.getLocation());
KillcheckerVisualizer killcheckerVisualizer = visualizers.computeIfAbsent(region, region1 -> new KillcheckerVisualizer(region1, bossBarService));
killcheckerVisualizer.recalc();
killcheckerVisualizer.show(player, onlyOutline);
BauSystem.MESSAGE.send("KILLCHECKER_ENABLE", player);
}
@Register(value = "disable", description = "KILLCHECKER_HELP_DISABLE")
public void disableCommand(Player player) {
Region region = Region.getRegion(player.getLocation());
KillcheckerVisualizer killcheckerVisualizer = visualizers.get(region);
if (killcheckerVisualizer != null) {
if (killcheckerVisualizer.hide(player)) {
visualizers.remove(region);
}
}
BauSystem.MESSAGE.send("KILLCHECKER_DISABLE", player);
}
@EventHandler
public void onBauMemberUpdate(BauMemberUpdateEvent event) {
event.getNewSpectator().forEach(this::hide);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
hide(event.getPlayer());
}
private void hide(Player player) {
new HashSet<>(visualizers.entrySet()).forEach(regionKillcheckerVisualizerEntry -> {
if (regionKillcheckerVisualizerEntry.getValue().hide(player)) {
visualizers.remove(regionKillcheckerVisualizerEntry.getKey());
}
});
}
private void recalc(Block block) {
Region region = Region.getRegion(block.getLocation());
KillcheckerVisualizer killcheckerVisualizer = visualizers.get(region);
if (killcheckerVisualizer != null) {
killcheckerVisualizer.recalc();
}
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
recalc(event.getBlock());
}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
Bukkit.getScheduler().runTaskLater(BauSystem.getInstance(), () -> {
recalc(event.getBlock());
}, 1);
}
}

Datei anzeigen

@ -0,0 +1,390 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.killchecker;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.region.Point;
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.BossBarService;
import de.steamwar.entity.REntity;
import de.steamwar.entity.REntityServer;
import de.steamwar.entity.RFallingBlockEntity;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.boss.BarColor;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class KillcheckerVisualizer {
private static final Material[] MATERIALS = new Material[]{
Material.LIME_STAINED_GLASS,
Material.LIME_CONCRETE,
Material.GREEN_STAINED_GLASS,
Material.GREEN_CONCRETE,
Material.YELLOW_STAINED_GLASS,
Material.YELLOW_CONCRETE,
Material.ORANGE_STAINED_GLASS,
Material.ORANGE_CONCRETE,
Material.RED_STAINED_GLASS,
Material.RED_CONCRETE,
Material.PURPLE_STAINED_GLASS,
Material.PURPLE_CONCRETE,
Material.BLACK_STAINED_GLASS,
Material.BLACK_CONCRETE,
};
private static final World WORLD = Bukkit.getWorlds().get(0);
private static final double SURROUND = 4.5;
private final Point minPoint;
private final Point maxPoint;
private final int yArea;
private final int zArea;
private final int xArea;
private final Region region;
private final BossBarService bossBarService;
public KillcheckerVisualizer(Region region, BossBarService bossBarService) {
this.region = region;
this.minPoint = region.getMinPoint(RegionType.BUILD, RegionExtensionType.NORMAL);
this.maxPoint = region.getMaxPoint(RegionType.BUILD, RegionExtensionType.NORMAL);
yArea = (maxPoint.getX() - minPoint.getX()) * (maxPoint.getZ() - minPoint.getZ());
zArea = (maxPoint.getX() - minPoint.getX()) * (maxPoint.getY() - minPoint.getY());
xArea = (maxPoint.getY() - minPoint.getY()) * (maxPoint.getZ() - minPoint.getZ());
this.bossBarService = bossBarService;
}
private final REntityServer outline = new REntityServer();
private final REntityServer inner = new REntityServer();
private final Map<Point, Integer> killCount = new HashMap<>();
private final Set<Point> outlinePointsCache = new HashSet<>();
private final Map<Point, REntity> rEntities = new HashMap<>();
private double percent = 0;
private int kills = 0;
private int cannonCount = 0;
public void recalc() {
Set<Cuboid> cuboids = new HashSet<>();
Set<Point> points = new HashSet<>();
for (int x = minPoint.getX() + 1; x < maxPoint.getX(); x++) {
for (int y = minPoint.getY(); y < maxPoint.getY(); y++) {
for (int z = minPoint.getZ() + 1; z < maxPoint.getZ(); z++) {
if (points.contains(new Point(x, y, z))) continue;
Block block = WORLD.getBlockAt(x, y, z);
if (block.getType().isAir()) continue;
String name = block.getType().name();
if (!name.endsWith("_WOOL") && !name.endsWith("_STAINED_GLASS") && !name.endsWith("_CONCRETE") && !name.endsWith("_TERRACOTTA")) continue;
if (name.equals("_GLAZED_TERRACOTTA")) continue;
Cuboid cuboid = create(block.getType(), x, y, z);
cuboids.add(cuboid);
for (int dx = (int) cuboid.getX(); dx <= cuboid.getDx(); dx++) {
for (int dy = (int) cuboid.getY(); dy <= cuboid.getDy(); dy++) {
for (int dz = (int) cuboid.getZ(); dz <= cuboid.getDz(); dz++) {
points.add(new Point(dx, dy, dz));
}
}
}
}
}
}
cannonCount = cuboids.size();
Map<Point, Integer> kill = new HashMap<>();
int yKills = 0;
int yCount = 0;
Set<Point> yPoints = new HashSet<>();
for (int x = minPoint.getX(); x <= maxPoint.getX(); x++) {
for (int z = minPoint.getZ(); z <= maxPoint.getZ(); z++) {
Set<Cuboid> cuboidSet = new HashSet<>();
for (Cuboid cuboid : cuboids) {
if (x >= cuboid.getX() - SURROUND && x < cuboid.getDx() + SURROUND && z >= cuboid.getZ() - SURROUND && z < cuboid.getDz() + SURROUND) {
cuboidSet.add(cuboid);
}
}
if (cuboidSet.size() > 1) {
yCount++;
yKills += splitIntoDoubleKills(cuboidSet.size());
Point p2 = new Point(x, maxPoint.getY() + 1, z);
yPoints.add(p2);
kill.put(p2, Math.max(kill.getOrDefault(p2, 0), cuboidSet.size()));
}
}
}
int xKills = 0;
int xCount = 0;
Set<Point> xPoints = new HashSet<>();
for (int y = minPoint.getY(); y <= maxPoint.getY(); y++) {
for (int z = minPoint.getZ(); z <= maxPoint.getZ(); z++) {
Set<Cuboid> cuboidSet = new HashSet<>();
for (Cuboid cuboid : cuboids) {
if (y >= cuboid.getY() - SURROUND && y < cuboid.getDy() + SURROUND && z >= cuboid.getZ() - SURROUND && z < cuboid.getDz() + SURROUND) {
cuboidSet.add(cuboid);
}
}
if (cuboidSet.size() > 1) {
xCount++;
xKills += splitIntoDoubleKills(cuboidSet.size());
Point p1 = new Point(minPoint.getX() - 1, y, z);
xPoints.add(p1);
kill.put(p1, Math.max(kill.getOrDefault(p1, 0), cuboidSet.size()));
Point p2 = new Point(maxPoint.getX() + 1, y, z);
xPoints.add(p2);
kill.put(p2, Math.max(kill.getOrDefault(p2, 0), cuboidSet.size()));
}
}
}
int zKills = 0;
int zCount = 0;
Set<Point> zPoints = new HashSet<>();
for (int x = minPoint.getX(); x <= maxPoint.getX(); x++) {
for (int y = minPoint.getY(); y <= maxPoint.getY(); y++) {
Set<Cuboid> cuboidSet = new HashSet<>();
for (Cuboid cuboid : cuboids) {
if (x >= cuboid.getX() - SURROUND && x < cuboid.getDx() + SURROUND && y >= cuboid.getY() - SURROUND && y < cuboid.getDy() + SURROUND) {
cuboidSet.add(cuboid);
}
}
if (cuboidSet.size() > 1) {
zCount++;
zKills += splitIntoDoubleKills(cuboidSet.size());
Point p1 = new Point(x, y, minPoint.getZ() - 1);
zPoints.add(p1);
kill.put(p1, Math.max(kill.getOrDefault(p1, 0), cuboidSet.size()));
Point p2 = new Point(x, y, maxPoint.getZ() + 1);
zPoints.add(p2);
kill.put(p2, Math.max(kill.getOrDefault(p2, 0), cuboidSet.size()));
}
}
}
Set<Point> outlinePoints = new HashSet<>();
yPoints.forEach(point -> {
Point p1 = new Point(point.getX() - 1, point.getY(), point.getZ());
Point p2 = new Point(point.getX() + 1, point.getY(), point.getZ());
Point p3 = new Point(point.getX(), point.getY(), point.getZ() - 1);
Point p4 = new Point(point.getX(), point.getY(), point.getZ() + 1);
Point p5 = new Point(point.getX() - 1, point.getY(), point.getZ() - 1);
Point p6 = new Point(point.getX() - 1, point.getY(), point.getZ() + 1);
Point p7 = new Point(point.getX() + 1, point.getY(), point.getZ() - 1);
Point p8 = new Point(point.getX() + 1, point.getY(), point.getZ() + 1);
int count = kill.get(point);
int surrounded = 0;
if (kill.getOrDefault(p1, 0) == count) surrounded++;
if (kill.getOrDefault(p2, 0) == count) surrounded++;
if (kill.getOrDefault(p3, 0) == count) surrounded++;
if (kill.getOrDefault(p4, 0) == count) surrounded++;
if (surrounded != 4) outlinePoints.add(point);
if (kill.getOrDefault(p5, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p6, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p7, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p8, 0) != count) outlinePoints.add(point);
});
xPoints.forEach(point -> {
Point p1 = new Point(point.getX(), point.getY() - 1, point.getZ());
Point p2 = new Point(point.getX(), point.getY() + 1, point.getZ());
Point p3 = new Point(point.getX(), point.getY(), point.getZ() - 1);
Point p4 = new Point(point.getX(), point.getY(), point.getZ() + 1);
Point p5 = new Point(point.getX(), point.getY() - 1, point.getZ() - 1);
Point p6 = new Point(point.getX(), point.getY() - 1, point.getZ() + 1);
Point p7 = new Point(point.getX(), point.getY() + 1, point.getZ() - 1);
Point p8 = new Point(point.getX(), point.getY() + 1, point.getZ() + 1);
int count = kill.get(point);
int surrounded = 0;
if (kill.getOrDefault(p1, 0) == count) surrounded++;
if (kill.getOrDefault(p2, 0) == count) surrounded++;
if (kill.getOrDefault(p3, 0) == count) surrounded++;
if (kill.getOrDefault(p4, 0) == count) surrounded++;
if (surrounded != 4) outlinePoints.add(point);
if (kill.getOrDefault(p5, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p6, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p7, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p8, 0) != count) outlinePoints.add(point);
});
zPoints.forEach(point -> {
Point p1 = new Point(point.getX() - 1, point.getY(), point.getZ());
Point p2 = new Point(point.getX() + 1, point.getY(), point.getZ());
Point p3 = new Point(point.getX(), point.getY() - 1, point.getZ());
Point p4 = new Point(point.getX(), point.getY() + 1, point.getZ());
Point p5 = new Point(point.getX() - 1, point.getY() - 1, point.getZ());
Point p6 = new Point(point.getX() - 1, point.getY() + 1, point.getZ());
Point p7 = new Point(point.getX() + 1, point.getY() - 1, point.getZ());
Point p8 = new Point(point.getX() + 1, point.getY() + 1, point.getZ());
int count = kill.get(point);
int surrounded = 0;
if (kill.getOrDefault(p1, 0) == count) surrounded++;
if (kill.getOrDefault(p2, 0) == count) surrounded++;
if (kill.getOrDefault(p3, 0) == count) surrounded++;
if (kill.getOrDefault(p4, 0) == count) surrounded++;
if (surrounded != 4) outlinePoints.add(point);
if (kill.getOrDefault(p5, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p6, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p7, 0) != count) outlinePoints.add(point);
if (kill.getOrDefault(p8, 0) != count) outlinePoints.add(point);
});
double xPercent = zCount / (double) xArea;
double yPercent = yCount / (double) yArea;
double zPercent = xCount / (double) zArea;
percent = (xPercent + yPercent + zPercent) / 3;
kills = zKills + yKills + xKills;
outline.getPlayers().forEach(this::updateBossBar);
Set<Point> pointSet = new HashSet<>(killCount.keySet());
Set<Point> outlinePointsCacheLast = new HashSet<>(outlinePointsCache);
outlinePointsCache.clear();
for (Point point : pointSet) {
if (!kill.containsKey(point)) {
rEntities.get(point).die();
rEntities.remove(point);
killCount.remove(point);
}
}
kill.forEach((point, count) -> {
if (rEntities.containsKey(point)) {
if (killCount.get(point) == count && outlinePoints.contains(point) == outlinePointsCacheLast.contains(point)) return;
rEntities.get(point).die();
}
RFallingBlockEntity entity = new RFallingBlockEntity(outlinePoints.contains(point) ? outline : inner, point.toLocation(WORLD, 0.5, 0, 0.5), MATERIALS[Math.min(count - 1, MATERIALS.length) - 1]);
entity.setNoGravity(true);
rEntities.put(point, entity);
if (outlinePoints.contains(point)) outlinePointsCache.add(point);
killCount.put(point, count);
});
}
private int splitIntoDoubleKills(int kills) {
return kills * (kills - 1) / 2;
}
private void updateBossBar(Player player) {
BauSystemBossbar bossbar = bossBarService.get(player, region, "killchecker");
bossbar.setTitle(BauSystem.MESSAGE.parse("KILLCHECKER_BOSSBAR", player, kills, ((int) (percent * 1000) / 10.0), cannonCount));
bossbar.setProgress(Math.min(Math.max(percent, 0), 1));
if (percent >= 0.35) {
bossbar.setColor(BarColor.RED);
} else if (percent >= 0.25) {
bossbar.setColor(BarColor.PURPLE);
} else if (percent >= 0.15) {
bossbar.setColor(BarColor.YELLOW);
} else {
bossbar.setColor(BarColor.GREEN);
}
}
private Cuboid create(Material type, int x, int y, int z) {
Set<Point> checked = new HashSet<>();
Set<Point> points = new HashSet<>();
points.add(new Point(x, y, z));
while (!points.isEmpty()) {
Point point = points.iterator().next();
points.remove(point);
if (!checked.add(point)) continue;
if (point.getX() < minPoint.getX() || point.getX() > maxPoint.getX()) continue;
if (point.getY() < minPoint.getY() || point.getY() > maxPoint.getY()) continue;
if (point.getZ() < minPoint.getZ() || point.getZ() > maxPoint.getZ()) continue;
if (WORLD.getBlockAt(point.getX() + 1, point.getY(), point.getZ()).getType() == type) {
points.add(new Point(point.getX() + 1, point.getY(), point.getZ()));
}
if (WORLD.getBlockAt(point.getX(), point.getY() + 1, point.getZ()).getType() == type) {
points.add(new Point(point.getX(), point.getY() + 1, point.getZ()));
}
if (WORLD.getBlockAt(point.getX(), point.getY(), point.getZ() + 1).getType() == type) {
points.add(new Point(point.getX(), point.getY(), point.getZ() + 1));
}
if (WORLD.getBlockAt(point.getX() - 1, point.getY(), point.getZ()).getType() == type) {
points.add(new Point(point.getX() - 1, point.getY(), point.getZ()));
}
if (WORLD.getBlockAt(point.getX(), point.getY() - 1, point.getZ()).getType() == type) {
points.add(new Point(point.getX(), point.getY() - 1, point.getZ()));
}
if (WORLD.getBlockAt(point.getX(), point.getY(), point.getZ() - 1).getType() == type) {
points.add(new Point(point.getX(), point.getY(), point.getZ() - 1));
}
}
int minX = Integer.MAX_VALUE;
int maxX = Integer.MIN_VALUE;
int minY = Integer.MAX_VALUE;
int maxY = Integer.MIN_VALUE;
int minZ = Integer.MAX_VALUE;
int maxZ = Integer.MIN_VALUE;
for (Point point : checked) {
if (point.getX() < minX) minX = point.getX();
if (point.getX() > maxX) maxX = point.getX();
if (point.getY() < minY) minY = point.getY();
if (point.getY() > maxY) maxY = point.getY();
if (point.getZ() < minZ) minZ = point.getZ();
if (point.getZ() > maxZ) maxZ = point.getZ();
}
return new Cuboid(minX, minY, minZ, maxX, maxY, maxZ);
}
public void show(Player player, boolean onlyOutline) {
outline.addPlayer(player);
if (!onlyOutline) {
inner.addPlayer(player);
} else {
inner.removePlayer(player);
}
updateBossBar(player);
}
public boolean hide(Player player) {
outline.removePlayer(player);
inner.removePlayer(player);
bossBarService.remove(player, region, "killchecker");
if (outline.getPlayers().isEmpty() && inner.getPlayers().isEmpty()) {
outline.close();
inner.close();
return true;
}
return false;
}
}

Datei anzeigen

@ -1,7 +1,7 @@
/* /*
* This file is a part of the SteamWar software. * This file is a part of the SteamWar software.
* *
* Copyright (C) 2021 SteamWar.de-Serverteam * Copyright (C) 2023 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
@ -20,201 +20,361 @@
package de.steamwar.bausystem.features.loader; package de.steamwar.bausystem.features.loader;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.SWUtils; import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.features.loader.activations.AbstractLoaderActivation; import de.steamwar.bausystem.features.loader.elements.LoaderElement;
import de.steamwar.bausystem.features.loader.activations.BlockPlaceLoaderActivation; import de.steamwar.bausystem.features.loader.elements.LoaderInteractionElement;
import de.steamwar.bausystem.features.loader.activations.InteractionActivation; import de.steamwar.bausystem.features.loader.elements.impl.LoaderTNT;
import de.steamwar.bausystem.features.loader.elements.impl.LoaderWait;
import de.steamwar.bausystem.shared.EnumDisplay; import de.steamwar.bausystem.shared.EnumDisplay;
import lombok.AccessLevel; import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWItem;
import de.steamwar.inventory.SWListInv;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
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;
import org.bukkit.event.block.Action; import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitTask;
import java.util.*; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
@Getter
@Setter
public class Loader implements Listener { public class Loader implements Listener {
private static final Map<Player, Loader> LOADER_MAP = new HashMap<>(); private static final Map<Player, Loader> LOADER_MAP = new HashMap<>();
public static Loader getLoader(Player player) {
return LOADER_MAP.get(player);
}
public static void newLoader(Player player) {
LOADER_MAP.put(player, new Loader(player));
}
private final Player p; private final Player p;
private final List<AbstractLoaderActivation> actions = new LinkedList<>();
private int ticksBetweenShots = 80;
private int ticksBetweenBlocks = 1;
private Stage stage;
private int lastActivation = -1;
private int countdown = 0;
@Getter(AccessLevel.PRIVATE) @Getter
private final BukkitTask task; private Stage stage = Stage.SETUP;
private LoaderRecorder recorder;
@Getter(AccessLevel.PRIVATE) private List<LoaderElement> elements = new ArrayList<>();
@Setter(AccessLevel.PRIVATE) private int currentElement = 0;
private AbstractLoaderActivation current; private long waitTime = 0;
@Getter(AccessLevel.PRIVATE) public Loader(Player p) {
@Setter(AccessLevel.PRIVATE)
private ListIterator<AbstractLoaderActivation> iterator;
private Loader(Player p) {
this.p = p; this.p = p;
stage = Stage.SETUP; this.recorder = new LoaderRecorder(p, elements);
Bukkit.getPluginManager().registerEvents(this, BauSystem.getInstance()); Bukkit.getPluginManager().registerEvents(this, BauSystem.getInstance());
task = Bukkit.getScheduler().runTaskTimer(BauSystem.getInstance(), this::run, 1, 1);
BauSystem.runTaskTimer(BauSystem.getInstance(), () -> {
if (stage != Stage.RUNNING) return;
if(!Permission.BUILD.hasPermission(p)) return;
if (waitTime > 0) {
waitTime--;
return;
}
if (currentElement >= elements.size()) {
currentElement = 0;
if (stage == Stage.SINGLE) {
stage = Stage.PAUSE;
return;
}
} }
public static Loader getLoader(Player p) { while (currentElement < elements.size()) {
return LOADER_MAP.getOrDefault(p, null); LoaderElement element = elements.get(currentElement);
currentElement++;
element.execute(delay -> waitTime = delay);
if (waitTime > 0) {
if (element instanceof LoaderTNT) currentElement--;
return;
}
}
}, 0, 1);
} }
public static Loader newLoader(Player p) { public void single() {
return LOADER_MAP.put(p, new Loader(p)); if (stage == Stage.END) return;
if (stage == Stage.RUNNING) return;
stage = Stage.SINGLE;
if (recorder != null) {
recorder.stop();
recorder = null;
}
if (elements.isEmpty()) {
BauSystem.MESSAGE.send("LOADER_NOTHING_RECORDED", p);
stop();
}
} }
public void start() { public void start() {
iterator = actions.listIterator(); if (stage == Stage.END) return;
countdown = 0; if (stage == Stage.RUNNING) return;
current = null;
stage = Stage.RUNNING; stage = Stage.RUNNING;
if (recorder != null) {
recorder.stop();
recorder = null;
}
if (elements.isEmpty()) {
BauSystem.MESSAGE.send("LOADER_NOTHING_RECORDED", p);
stop();
}
} }
public void pause() { public void pause() {
if (stage == Stage.RUNNING) { if (stage == Stage.END) return;
if (stage == Stage.PAUSE) return;
stage = Stage.PAUSE; stage = Stage.PAUSE;
if (recorder != null) {
recorder.stop();
recorder = null;
} }
} }
public void resume() {
if (stage == Stage.PAUSE) {
stage = Stage.RUNNING;
}
}
public void setup() {
stage = Stage.SETUP;
iterator = null;
current = null;
countdown = 0;
}
public void stop() { public void stop() {
stage = Stage.END; stage = Stage.END;
task.cancel(); if (recorder != null) {
LOADER_MAP.remove(p, this); recorder.stop();
recorder = null;
}
elements.clear();
LOADER_MAP.remove(p);
} }
public void clear() { public boolean setTicksBetweenShots(int delay) {
if (stage == Stage.SETUP) { if (elements.size() == 0) return false;
actions.clear(); LoaderElement loaderElement = elements.get(elements.size() - 1);
BauSystem.MESSAGE.send("LOADER_MESSAGE_CLEAR", p); if (loaderElement instanceof LoaderWait) {
((LoaderWait) loaderElement).setDelay(delay);
return true;
}
return false;
}
public void setTicksBetweenBlocks(int delay) {
for (int i = 0; i < elements.size() - 1; i++) {
LoaderElement loaderElement = elements.get(i);
if (loaderElement instanceof LoaderWait) {
((LoaderWait) loaderElement).setDelay(delay);
}
}
}
public void gui(SettingsSorting settingsSorting) {
List<SWListInv.SWListEntry<LoaderElement>> list = new ArrayList<>();
AtomicBoolean allWait = new AtomicBoolean(true);
Runnable updateRunnable = () -> {
list.clear();
for (int i = 0; i < elements.size(); i++) {
LoaderElement previous = i > 0 ? elements.get(i - 1) : null;
LoaderElement current = elements.get(i);
LoaderElement next = i < elements.size() - 1 ? elements.get(i + 1) : null;
if (!settingsSorting.shouldShow(previous, current, next)) {
continue;
}
if ((!(current instanceof LoaderWait))) {
allWait.set(false);
}
SWItem item = current.menu(p);
if (current instanceof LoaderInteractionElement<?>) {
LoaderInteractionElement<?> interactionElement = (LoaderInteractionElement<?>) current;
List<String> lore = new ArrayList<>();
if (item.getItemMeta() != null && item.getItemMeta().getLore() != null) {
lore.addAll(item.getItemMeta().getLore());
lore.add("§8");
}
lore.add(BauSystem.MESSAGE.parse("LOADER_SETTING_MODES", p, interactionElement.size()));
lore.add(BauSystem.MESSAGE.parse("LOADER_GUI_CLICK_TO_EDIT", p));
item.setLore(lore);
} else { } else {
BauSystem.MESSAGE.send("LOADER_MESSAGE_CLEAR_HELP", p); List<String> lore = new ArrayList<>();
if (item.getItemMeta() != null && item.getItemMeta().getLore() != null) {
lore.addAll(item.getItemMeta().getLore());
lore.add("§8");
} }
lore.add(BauSystem.MESSAGE.parse("LOADER_GUI_CLICK_TO_EDIT", p));
item.setLore(lore);
} }
list.add(new SWListInv.SWListEntry<>(item, current));
public void run() {
if (stage == Stage.SETUP && lastActivation >= 0)
lastActivation++;
if (stage != Stage.RUNNING) {
return;
} }
if (list.isEmpty()) {
if (countdown-- > 0) { allWait.set(false);
return;
} }
};
updateRunnable.run();
while (countdown <= 0) { SWListInv<LoaderElement> swListInv = new SWListInv<>(p, BauSystem.MESSAGE.parse("LOADER_GUI_TITLE", p), false, list, (clickType, loaderElement) -> {});
if (!iterator.hasNext()) { swListInv.setCallback((clickType, entry) -> entry.click(p, () -> {
countdown = getTicksBetweenShots(); updateRunnable.run();
iterator = actions.listIterator(); swListInv.open();
return; }));
SWItem settingItem = new SWItem(settingsSorting.getMaterial(), "§e" + BauSystem.MESSAGE.parse(settingsSorting.getName(), p), clickType -> {
if (clickType == ClickType.LEFT) {
int index = settingsSorting.ordinal() + 1;
if (index >= SettingsSorting.LENGTH) {
index = 0;
} }
gui(SettingsSorting.values()[index]);
current = iterator.next(); } else if (clickType == ClickType.RIGHT) {
int index = settingsSorting.ordinal() - 1;
if (current.execute()) { if (index < 0) {
countdown = current.delay(this); index = SettingsSorting.LENGTH - 1;
}
gui(SettingsSorting.values()[index]);
}
});
List<String> strings = new ArrayList<>();
for (SettingsSorting setting : SettingsSorting.values()) {
if (setting == settingsSorting) {
strings.add("§e> §7" + BauSystem.MESSAGE.parse(setting.getName(), p));
} else { } else {
countdown = 1; strings.add("§8> §7" + BauSystem.MESSAGE.parse(setting.getName(), p));
iterator.previous();
}
} }
} }
settingItem.setLore(strings);
swListInv.setItem(48, settingItem);
public void undo() { if (allWait.get()) {
if (actions.isEmpty() || stage != Stage.SETUP) { SWItem setWait = new SWItem(Material.PAPER, BauSystem.MESSAGE.parse("LOADER_GUI_SHOW_WAITS_SET_ALL", p), clickType -> {
return; SWAnvilInv swAnvilInv = new SWAnvilInv(p, BauSystem.MESSAGE.parse("LOADER_GUI_SHOW_WAITS_TITLE", p), "");
swAnvilInv.setCallback(s -> {
try {
long delay = Math.max(Long.parseLong(s), 0);
list.forEach(loaderElementSWListEntry -> {
((LoaderWait) loaderElementSWListEntry.getObject()).setDelay(delay);
});
} catch (NumberFormatException ignored) {
} }
actions.remove(actions.size() - 1); gui(settingsSorting);
} });
swAnvilInv.open();
@EventHandler });
public void onBlockPlace(BlockPlaceEvent event) { swListInv.setItem(50, setWait);
if (event.getPlayer() != p) { } else {
return; swListInv.setItem(50, new SWItem(Material.GRAY_STAINED_GLASS_PANE, "§8"));
}
if (stage != Stage.SETUP) {
return;
}
if (event.getBlock().getType() != Material.TNT) {
return;
}
actions.add(new BlockPlaceLoaderActivation(p, event.getBlock().getLocation(), Material.TNT));
SWUtils.sendToActionbar(p, BauSystem.MESSAGE.parse("LOADER_MESSAGE_TNT", p, actions.size()));
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getPlayer() != p) {
return;
}
if (stage != Stage.SETUP) {
return;
}
if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL)
return;
if (event.getClickedBlock().getType() == Material.OBSERVER)
return;
LoaderButton button = LoaderButton.fromBlock(event.getClickedBlock());
if (button != LoaderButton.INVALID) {
actions.add(InteractionActivation.construct(p, event.getClickedBlock().getLocation(), this));
lastActivation = 0;
SWUtils.sendToActionbar(p, BauSystem.MESSAGE.parse("LOADER_MESSAGE_INTERACT", p, BauSystem.MESSAGE.parse(button.getName(), p), actions.size()));
} }
swListInv.open();
} }
@EventHandler @EventHandler
public void onPlayerQuit(PlayerQuitEvent event) { public void onPlayerQuit(PlayerQuitEvent event) {
if (event.getPlayer() != p) { if (event.getPlayer() != p) return;
return;
}
stop(); stop();
} }
public String getProgress() {
return Math.max(currentElement, 1) + "§8/§7" + elements.size();
}
public enum SettingsSorting {
ALL {
@Override
public Material getMaterial() {
return Material.STRUCTURE_VOID;
}
@Override
public String getName() {
return "LOADER_GUI_SHOW_ALL";
}
@Override
public boolean shouldShow(LoaderElement previous, LoaderElement current, LoaderElement next) {
return true;
}
},
WAIT {
@Override
public Material getMaterial() {
return Material.CLOCK;
}
@Override
public String getName() {
return "LOADER_GUI_SHOW_WAITS";
}
@Override
public boolean shouldShow(LoaderElement previous, LoaderElement current, LoaderElement next) {
return current instanceof LoaderWait;
}
},
WAIT_BETWEEN_TNT {
@Override
public Material getMaterial() {
return Material.REDSTONE_BLOCK;
}
@Override
public String getName() {
return "LOADER_GUI_SHOW_WAITS_BETWEEN_TNT";
}
@Override
public boolean shouldShow(LoaderElement previous, LoaderElement current, LoaderElement next) {
return previous instanceof LoaderTNT && current instanceof LoaderWait && next instanceof LoaderTNT;
}
},
INTERACTIONS {
@Override
public Material getMaterial() {
return Material.REPEATER;
}
@Override
public String getName() {
return "LOADER_GUI_SHOW_INTERACTIONS";
}
@Override
public boolean shouldShow(LoaderElement previous, LoaderElement current, LoaderElement next) {
return current instanceof LoaderInteractionElement && !(current instanceof LoaderTNT);
}
},
TNT {
@Override
public Material getMaterial() {
return Material.TNT;
}
@Override
public String getName() {
return "LOADER_GUI_SHOW_TNT";
}
@Override
public boolean shouldShow(LoaderElement previous, LoaderElement current, LoaderElement next) {
return current instanceof LoaderTNT;
}
},
;
public static int LENGTH = SettingsSorting.values().length;
public abstract Material getMaterial();
public abstract String getName();
public abstract boolean shouldShow(LoaderElement previous, LoaderElement current, LoaderElement next);
}
@AllArgsConstructor @AllArgsConstructor
public enum Stage implements EnumDisplay { public enum Stage implements EnumDisplay {
SETUP("LOADER_SETUP"), SETUP("LOADER_SETUP"),
RUNNING("LOADER_RUNNING"), RUNNING("LOADER_RUNNING"),
SINGLE("LOADER_SINGLE"),
PAUSE("LOADER_PAUSE"), PAUSE("LOADER_PAUSE"),
END("LOADER_END"); END("LOADER_END");
@Getter @Getter
private String chatValue; private final String chatValue;
} }
} }

Datei anzeigen

@ -1,106 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.loader;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.bausystem.linkage.specific.BauGuiItem;
import de.steamwar.inventory.SWAnvilInv;
import de.steamwar.inventory.SWInventory;
import de.steamwar.inventory.SWItem;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import java.util.Arrays;
@Linked(LinkageType.BAU_GUI_ITEM)
public class LoaderBauGuiItem extends BauGuiItem {
public LoaderBauGuiItem() {
super(9);
}
@Override
public ItemStack getItem(Player player) {
return new SWItem(Material.FLINT_AND_STEEL, BauSystem.MESSAGE.parse("LOADER_GUI_NAME", player)).getItemStack();
}
@Override
public boolean click(ClickType click, Player p) {
p.closeInventory();
openLoaderGui(p);
return false;
}
private void openLoaderGui(Player p) {
SWInventory inv = new SWInventory(p, 9, BauSystem.MESSAGE.parse("LOADER_GUI_NAME", p));
if (Loader.getLoader(p) == null) {
inv.setItem(4, new SWItem(Material.SCUTE, BauSystem.MESSAGE.parse("LOADER_GUI_NEW", p), clickType -> {
p.closeInventory();
p.performCommand("loader setup");
}));
} else {
Loader loader = Loader.getLoader(p);
if (loader.getStage() != Loader.Stage.RUNNING) {
inv.setItem(0, new SWItem(Material.GREEN_DYE, BauSystem.MESSAGE.parse("LOADER_GUI_START", p), clickType -> {
p.closeInventory();
p.performCommand("loader start");
}));
} else {
inv.setItem(0, new SWItem(Material.RED_DYE, BauSystem.MESSAGE.parse("LOADER_GUI_PAUSE", p), clickType -> {
p.closeInventory();
p.performCommand("loader pause");
}));
}
inv.setItem(2, new SWItem(Material.ARROW, BauSystem.MESSAGE.parse("LOADER_GUI_UNDO", p), clickType -> {
p.closeInventory();
p.performCommand("loader undo");
}));
inv.setItem(4, new SWItem(Material.COMPASS, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT", p), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_LORE", p, loader.getTicksBetweenShots())), false, clickType -> {
p.closeInventory();
SWAnvilInv anvilInv = new SWAnvilInv(p, BauSystem.MESSAGE.parse("LOADER_GUI_WAIT_TITLE", p));
anvilInv.setItem(Material.CLOCK);
anvilInv.setCallback(s -> p.performCommand("loader delay " + s));
anvilInv.open();
}));
inv.setItem(6, new SWItem(Material.CLOCK, BauSystem.MESSAGE.parse("LOADER_GUI_SPEED", p), Arrays.asList(BauSystem.MESSAGE.parse("LOADER_GUI_SPEED_LORE", p, loader.getTicksBetweenBlocks())), false, clickType -> {
p.closeInventory();
SWAnvilInv anvilInv = new SWAnvilInv(p, BauSystem.MESSAGE.parse("LOADER_GUI_SPEED_TITLE", p));
anvilInv.setItem(Material.CLOCK);
anvilInv.setCallback(s -> p.performCommand("loader speed " + s));
anvilInv.open();
}));
inv.setItem(8, new SWItem(Material.BARRIER, BauSystem.MESSAGE.parse("LOADER_GUI_STOP", p), clickType -> {
p.closeInventory();
p.performCommand("loader stop");
}));
}
inv.open();
}
@Override
public Permission permission() {
return Permission.WORLD;
}
}

Datei anzeigen

@ -1,79 +0,0 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2021 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.loader;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.bukkit.block.Block;
@AllArgsConstructor
@RequiredArgsConstructor
@Getter
public enum LoaderButton {
SWITCH(0, true, "LOADER_BUTTON_SWITCH"),
WOOD_BUTTON(30, "LOADER_BUTTON_WOOD_BUTTON"),
STONE_BUTTON(20, "LOADER_BUTTON_STONE_BUTTON"),
PRESSURE_PLATE(30, "LOADER_BUTTON_PRESSURE_PLATE"),
WEIGHTED_PRESSURE_PLATE(20, "LOADER_BUTTON_WEIGHTED_PRESSURE_PLATE"),
TRIPWIRE(30, "LOADER_BUTTON_TRIPWIRE"),
NOTEBLOCK(1, "LOADER_BUTTON_NOTEBLOCK"),
DAYLIGHTSENSOR(0, true, "LOADER_BUTTON_DAYLIGHTSENSOR"),
INVALID(-1, "LOADER_BUTTON_INVALID");
private final int time;
private boolean toggle;
private final String name;
public static LoaderButton fromBlock(Block block) {
switch (block.getType()) {
case LEVER:
return LoaderButton.SWITCH;
case ACACIA_BUTTON:
case BIRCH_BUTTON:
case DARK_OAK_BUTTON:
case JUNGLE_BUTTON:
case OAK_BUTTON:
case SPRUCE_BUTTON:
return LoaderButton.WOOD_BUTTON;
case STONE_BUTTON:
return LoaderButton.STONE_BUTTON;
case ACACIA_PRESSURE_PLATE:
case BIRCH_PRESSURE_PLATE:
case DARK_OAK_PRESSURE_PLATE:
case JUNGLE_PRESSURE_PLATE:
case OAK_PRESSURE_PLATE:
case SPRUCE_PRESSURE_PLATE:
case STONE_PRESSURE_PLATE:
return LoaderButton.PRESSURE_PLATE;
case HEAVY_WEIGHTED_PRESSURE_PLATE:
case LIGHT_WEIGHTED_PRESSURE_PLATE:
return LoaderButton.WEIGHTED_PRESSURE_PLATE;
case TRIPWIRE:
return LoaderButton.TRIPWIRE;
case NOTE_BLOCK:
return LoaderButton.NOTEBLOCK;
case DAYLIGHT_DETECTOR:
return LoaderButton.DAYLIGHTSENSOR;
default:
return LoaderButton.INVALID;
}
}
}

Datei anzeigen

@ -1,7 +1,7 @@
/* /*
* This file is a part of the SteamWar software. * This file is a part of the SteamWar software.
* *
* Copyright (C) 2021 SteamWar.de-Serverteam * Copyright (C) 2023 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
@ -20,21 +20,18 @@
package de.steamwar.bausystem.features.loader; package de.steamwar.bausystem.features.loader;
import de.steamwar.bausystem.BauSystem; import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.Permission; import de.steamwar.bausystem.utils.BauMemberUpdateEvent;
import de.steamwar.bausystem.linkage.LinkageType;
import de.steamwar.bausystem.linkage.Linked;
import de.steamwar.command.GuardCheckType;
import de.steamwar.command.GuardChecker;
import de.steamwar.command.GuardResult;
import de.steamwar.command.SWCommand; import de.steamwar.command.SWCommand;
import de.steamwar.linkage.Linked;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@Linked(LinkageType.COMMAND) @Linked
public class LoaderCommand extends SWCommand { public class LoaderCommand extends SWCommand implements Listener {
protected LoaderCommand() { public LoaderCommand() {
super("loader", "autoloader", "al"); super("loader");
addDefaultHelpMessage("LOADER_HELP_OTHER");
} }
private boolean loaderNullCheck(Loader loader, Player p) { private boolean loaderNullCheck(Loader loader, Player p) {
@ -42,120 +39,84 @@ public class LoaderCommand extends SWCommand {
BauSystem.MESSAGE.send("LOADER_NO_LOADER", p); BauSystem.MESSAGE.send("LOADER_NO_LOADER", p);
return true; return true;
} }
return false; return false;
} }
@Register(value = "setup", description = "LOADER_HELP_SETUP") @Register(value = "setup", description = "LOADER_HELP_SETUP")
public void setupLoader(@Guard Player p) { public void setupLoader(@Validator Player player) {
if (Loader.getLoader(p) != null) { if (Loader.getLoader(player) != null) {
Loader.getLoader(p).setup(); BauSystem.MESSAGE.send("LOADER_SETUP_STOP_FIRST", player);
BauSystem.MESSAGE.send("LOADER_BACK_SETUP", p); return;
} else {
Loader.newLoader(p);
BauSystem.MESSAGE.send("LOADER_NEW", p);
BauSystem.MESSAGE.send("LOADER_HOW_TO_START", p);
} }
Loader.newLoader(player);
BauSystem.MESSAGE.send("LOADER_NEW", player);
BauSystem.MESSAGE.send("LOADER_HOW_TO_START", player);
} }
@Register(value = "start", description = "LOADER_HELP_START") @Register(value = "start", description = "LOADER_HELP_START")
public void startLoader(@Guard Player p) { public void startLoader(@Validator Player player) {
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(player);
if (loaderNullCheck(loader, p)) { if (loaderNullCheck(loader, player)) return;
return;
}
loader.start(); loader.start();
BauSystem.MESSAGE.send("LOADER_ACTIVE", p); BauSystem.MESSAGE.send("LOADER_ACTIVE", player);
} }
@Register(value = "stop", description = "LOADER_HELP_STOP") @Register(value = "stop", description = "LOADER_HELP_STOP")
public void stopLoader(@Guard Player p) { public void stopLoader(@Validator Player player) {
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(player);
if (loaderNullCheck(loader, p)) { if (loaderNullCheck(loader, player)) return;
return;
}
loader.stop(); loader.stop();
BauSystem.MESSAGE.send("LOADER_STOP", p); BauSystem.MESSAGE.send("LOADER_STOP", player);
} }
@Register(value = "pause", description = "LOADER_HELP_PAUSE") @Register(value = "pause", description = "LOADER_HELP_PAUSE")
public void pauseLoader(@Guard Player p) { public void pauseLoader(@Validator Player player) {
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(player);
if (loaderNullCheck(loader, p)) { if (loaderNullCheck(loader, player)) return;
return;
}
loader.pause(); loader.pause();
BauSystem.MESSAGE.send("LOADER_PAUSED", p); BauSystem.MESSAGE.send("LOADER_PAUSED", player);
} }
@Register(value = "resume", description = "LOADER_HELP_RESUME") @Register(value = "gui", description = "LOADER_HELP_GUI")
public void resumeLoader(@Guard Player p) { public void guiLoader(@Validator Player player) {
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(player);
if (loaderNullCheck(loader, p)) { if (loaderNullCheck(loader, player)) return;
return; loader.gui(Loader.SettingsSorting.ALL);
}
loader.resume();
BauSystem.MESSAGE.send("LOADER_RESUME", p);
} }
@Register(value = "wait", description = "LOADER_HELP_WAIT") @Register(value = "wait", description = "LOADER_HELP_WAIT")
public void shotDelayLoader(@Guard Player p, int delay) { public void shotDelayLoader(@Validator Player p, @Min(intValue = 1) @ErrorMessage("LOADER_SMALL_TIME") int delay) {
if (delay < 1) {
BauSystem.MESSAGE.send("LOADER_SMALL_TIME", p);
return;
}
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(p);
if (loaderNullCheck(loader, p)) { if (loaderNullCheck(loader, p)) return;
return; if (loader.setTicksBetweenShots(delay)) {
BauSystem.MESSAGE.send("LOADER_NEW_TIME", p, delay);
} else {
BauSystem.MESSAGE.send("LOADER_SMALL_TIME", p);
} }
BauSystem.MESSAGE.send("LOADER_NEW_TIME", p, delay, loader.getTicksBetweenShots());
loader.setTicksBetweenShots(delay);
} }
@Register(value = "speed", description = "LOADER_HELP_SPEED") @Register(value = "speed", description = "LOADER_HELP_SPEED")
public void speedLoader(@Guard Player p, int delay) { public void speedLoader(@Validator Player p, @Min(intValue = 0) @ErrorMessage("LOADER_SMALL_TIME") int delay) {
if (delay < 0) {
BauSystem.MESSAGE.send("LOADER_SMALL_TIME", p);
return;
}
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(p);
if (loaderNullCheck(loader, p)) { if (loaderNullCheck(loader, p)) return;
return; BauSystem.MESSAGE.send("LOADER_NEW_LOAD_TIME", p, delay);
}
BauSystem.MESSAGE.send("LOADER_NEW_LOAD_TIME", p, delay, loader.getTicksBetweenBlocks());
loader.setTicksBetweenBlocks(delay); loader.setTicksBetweenBlocks(delay);
} }
@Register(value = "undo", description = "LOADER_HELP_UNDO") @Register(value = "single", description = "LOADER_HELP_SINGLE")
public void undoLast(@Guard Player p) { public void singleLoader(@Validator Player p) {
Loader loader = Loader.getLoader(p); Loader loader = Loader.getLoader(p);
if (loaderNullCheck(loader, p)) { if (loaderNullCheck(loader, p)) return;
return; loader.single();
} BauSystem.MESSAGE.send("LOADER_SINGLE_CMD", p);
BauSystem.MESSAGE.send("LOADER_UNDO", p);
loader.undo();
} }
@Register(value = "clear", description = "LOADER_HELP_CLEAR") @EventHandler
public void clearLoader(@Guard Player p) { public void onBauMemberUpdate(BauMemberUpdateEvent event) {
Loader loader = Loader.getLoader(p); event.getNewSpectator().forEach(player -> {
if (loaderNullCheck(loader, p)) { Loader loader = Loader.getLoader(player);
return; if (loader == null) return;
} loader.stop();
loader.clear(); });
}
@ClassGuard(value = Player.class, local = true)
public GuardChecker loaderGuard() {
return (commandSender, guardCheckType, strings, s) -> {
Player player = (Player) commandSender;
if (!Permission.hasPermission(player, Permission.WORLD)) {
if (guardCheckType != GuardCheckType.TAB_COMPLETE) {
BauSystem.MESSAGE.send("LOADER_PERMS", player);
}
return GuardResult.DENIED;
}
return GuardResult.ALLOWED;
};
} }
} }

Datei anzeigen

@ -0,0 +1,231 @@
/*
* This file is a part of the SteamWar software.
*
* Copyright (C) 2023 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.loader;
import de.steamwar.bausystem.BauSystem;
import de.steamwar.bausystem.SWUtils;
import de.steamwar.bausystem.features.loader.elements.LoaderElement;
import de.steamwar.bausystem.features.loader.elements.LoaderInteractionElement;
import de.steamwar.bausystem.features.loader.elements.impl.*;
import de.steamwar.bausystem.features.tpslimit.TPSUtils;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.EquipmentSlot;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class LoaderRecorder implements Listener {
private Player player;
private List<LoaderElement> loaderElementList;
private long lastInteraction = TPSUtils.currentRealTick.get();
public LoaderRecorder(Player player, List<LoaderElement> loaderElementList) {
this.player = player;
this.loaderElementList = loaderElementList;
Bukkit.getPluginManager().registerEvents(this, BauSystem.getInstance());
}
public void stop() {
addWaitTime(true);
HandlerList.unregisterAll(this);
player = null;
blockSet.clear();
}
private void addWaitTime(boolean last) {
if (loaderElementList.isEmpty()) {
lastInteraction = TPSUtils.currentRealTick.get();
return;
}
if (loaderElementList.get(loaderElementList.size() - 1) instanceof LoaderWait) {
return;
}
long diff = TPSUtils.currentRealTick.get() - lastInteraction;
if (last) diff = 120;
lastInteraction = TPSUtils.currentRealTick.get();
loaderElementList.add(new LoaderWait(diff));
}
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
if (event.getPlayer() != player) return;
if (event.getBlock().getType() != Material.TNT) return;
addWaitTime(false);
loaderElementList.add(new LoaderTNT(event.getBlock().getLocation()));
message("LOADER_BUTTON_TNT");
}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {
if (event.getPlayer() != player) return;
boolean removedOne = false;
for (int i = 0; i < loaderElementList.size(); i++) {
LoaderElement element = loaderElementList.get(i);
if (!(element instanceof LoaderInteractionElement)) continue;
LoaderInteractionElement interactionElement = (LoaderInteractionElement) element;
if (interactionElement.getLocation().equals(event.getBlock().getLocation())) {
loaderElementList.remove(i);
if (i > 0) {
loaderElementList.remove(i - 1);
}
removedOne = true;
break;
}
}
if (removedOne) {
if (event.getBlock().getType() != Material.TNT) {
event.setCancelled(true);
}
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("LOADER_MESSAGE_UNINTERACT", player));
}
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.getPlayer() != player) return;
if (player.isSneaking()) return;
if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL) return;
if (event.getClickedBlock().getType() == Material.OBSERVER) return;
if (event.getHand() == EquipmentSlot.OFF_HAND) return;
addWaitTime(false);
Block block = event.getClickedBlock();
getLoaderInteractionElement(block, (loaderInteractionElement, s) -> {
loaderElementList.add(loaderInteractionElement);
message(s);
});
}
private Map<Location, Long> blockSet = new HashMap<>();
private Map<Location, LoaderMovement> movementSet = new HashMap<>();
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if (event.getPlayer() != player) return;
Block fromBlock = event.getFrom().getBlock();
Block toBlock = event.getTo().getBlock();
calcMovementBlocks(fromBlock, toBlock);
fromBlock = fromBlock.getRelative(0, 1, 0);
toBlock = toBlock.getRelative(0, 1, 0);
calcMovementBlocks(fromBlock, toBlock);
}
private void calcMovementBlocks(Block fromBlock, Block toBlock) {
if (!blockSet.containsKey(toBlock.getLocation())) {
Long startTime = blockSet.remove(fromBlock.getLocation());
LoaderMovement loaderMovement = movementSet.remove(fromBlock.getLocation());
if (loaderMovement != null && startTime != null) {
loaderMovement.setInitialTicks(TPSUtils.currentRealTick.get() - startTime);
}
blockSet.put(toBlock.getLocation(), TPSUtils.currentRealTick.get());
addWaitTime(false);
loaderMovement = null;
Material type = toBlock.getType();
switch (type) {
case TRIPWIRE:
loaderMovement = new LoaderMovement(toBlock.getLocation(), "LOADER_BUTTON_TRIPWIRE", Material.STRING);
message("LOADER_BUTTON_TRIPWIRE");
break;
case LIGHT_WEIGHTED_PRESSURE_PLATE:
case HEAVY_WEIGHTED_PRESSURE_PLATE:
loaderMovement = new LoaderMovement(toBlock.getLocation(), "LOADER_BUTTON_WEIGHTED_PRESSURE_PLATE", type);
message("LOADER_BUTTON_WEIGHTED_PRESSURE_PLATE");
break;
default:
if (type.name().endsWith("PRESSURE_PLATE")) {
loaderMovement = new LoaderMovement(toBlock.getLocation(), "LOADER_BUTTON_PRESSURE_PLATE", type);
message("LOADER_BUTTON_PRESSURE_PLATE");
}
break;
}
if (loaderMovement != null) {
movementSet.put(toBlock.getLocation(), loaderMovement);
loaderElementList.add(loaderMovement);
}
}
}
public static void getLoaderInteractionElement(Block block, BiConsumer<LoaderInteractionElement<?>, String> consumer) {
Material type = block.getType();
switch (type) {
case COMPARATOR:
consumer.accept(new LoaderComparator(block.getLocation()), "LOADER_BUTTON_COMPARATOR");
break;
case REPEATER:
consumer.accept(new LoaderRepeater(block.getLocation()), "LOADER_BUTTON_REPEATER");
break;
case NOTE_BLOCK:
consumer.accept(new LoaderNoteBlock(block.getLocation()), "LOADER_BUTTON_NOTEBLOCK");
break;
case LEVER:
consumer.accept(new LoaderLever(block.getLocation()), "LOADER_BUTTON_SWITCH");
break;
case DAYLIGHT_DETECTOR:
consumer.accept(new LoaderDaylightDetector(block.getLocation()), "LOADER_BUTTON_DAYLIGHT_DETECTOR");
break;
case LECTERN:
consumer.accept(new LoaderLectern(block.getLocation()), "LOADER_BUTTON_LECTERN");
break;
case IRON_TRAPDOOR:
case IRON_DOOR:
break;
default:
if (type.name().endsWith("_TRAPDOOR")) {
consumer.accept(new LoaderOpenable(block.getLocation(), "LOADER_BUTTON_TRAPDOOR", type), "LOADER_BUTTON_TRAPDOOR");
} else if (type.name().endsWith("_DOOR")) {
consumer.accept(new LoaderOpenable(block.getLocation(), "LOADER_BUTTON_DOOR", type), "LOADER_BUTTON_DOOR");
} else if (type.name().endsWith("FENCE_GATE")) {
consumer.accept(new LoaderOpenable(block.getLocation(), "LOADER_BUTTON_FENCEGATE", type), "LOADER_BUTTON_FENCEGATE");
} else if (type.name().endsWith("STONE_BUTTON")) {
consumer.accept(new LoaderTicks(block.getLocation(), "LOADER_BUTTON_STONE_BUTTON", type, 20), "LOADER_BUTTON_STONE_BUTTON");
} else if (type.name().endsWith("BUTTON")) {
consumer.accept(new LoaderTicks(block.getLocation(), "LOADER_BUTTON_WOOD_BUTTON", type, 30), "LOADER_BUTTON_WOOD_BUTTON");
}
break;
}
}
private void message(String type) {
SWUtils.sendToActionbar(player, BauSystem.MESSAGE.parse("LOADER_MESSAGE_INTERACT", player, BauSystem.MESSAGE.parse(type, player), loaderElementList.size()));
}
}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden Mehr anzeigen