345 Commits

Author SHA1 Message Date
9bb6c35edd Fix Jenkins (#143)
* Update build.gradle.kts

* attempting more fixes

* Update Jenkinsfile

* Update Jenkinsfile

* can github build it

* try this

* Update build.gradle.kts

* Update Jenkinsfile
2023-09-23 14:19:20 -05:00
35fd7b6fc0 Update Paper 2023-09-23 12:36:55 -05:00
ddd6e20790 Update Paper 2023-09-20 17:58:00 -05:00
71a75afe98 Update Paper 2023-09-12 18:09:19 -05:00
378d710612 Update Paper 2023-09-07 11:26:06 -05:00
a07a38484b Update Paper 2023-08-30 18:54:39 -05:00
4d3359cb97 Update Paper 2023-08-26 18:16:09 -05:00
allinkdev
e82a295608 Add length limit to note block sound (#141)
Reported by @NekosAreKawaii
2023-08-25 09:59:50 -05:00
5a7aef059d Update Paper 2023-08-24 16:21:12 -05:00
e8dbeb27e9 Update Paper 2023-08-22 15:45:16 -05:00
e1d2dd4813 Update Paper 2023-08-16 18:25:45 -05:00
c4826c11c8 Update Paper 2023-08-12 21:50:18 -05:00
Luna
44567fd8b0 Remove packet overflow console error (#135) 2023-08-12 11:45:47 -05:00
1111ffabd7 Update Paper 2023-08-10 15:04:30 -05:00
a928a00e34 Update Paper 2023-08-08 16:12:26 -05:00
dce994005e Update Paper 2023-08-06 16:48:24 -05:00
4727e8db38 Update Paper 2023-08-05 15:29:43 -05:00
Luna
8303790110 Add me to MIT author list (#134) 2023-07-31 12:58:48 -05:00
Luna
6b951f73c5 Fix chat signatures disabler on Bungee (#132) 2023-07-30 11:29:13 -05:00
36b4a55f38 Update Paper 2023-07-29 14:06:31 -05:00
Luna
1175851f8d Don't return null Components in the Component codec (#131)
Found by Sk8kman
2023-07-28 18:05:47 -05:00
896bf3f11b Update Paper 2023-07-28 11:51:48 -05:00
ed986eccd1 Update Paper 2023-07-25 14:58:49 -05:00
b4d84dc21b Update Paper 2023-07-23 16:22:47 -05:00
5d1989e36c Update Paper 2023-07-22 19:53:29 -05:00
Luna
3a063e3397 Account for key length in NbtUtility getTagSize (#129) 2023-07-22 18:23:42 -05:00
0d9d87dacf Update Paper 2023-07-20 16:36:06 -05:00
71a59bc142 Update Paper 2023-07-18 16:01:00 -05:00
8f81b70a32 Update Paper 2023-07-15 14:54:38 -05:00
6015aa70b7 Update Paper 2023-07-14 16:11:25 -05:00
b697c4be94 Update Paper 2023-07-12 17:39:17 -05:00
77e1aa9166 Update Paper 2023-07-11 15:23:17 -05:00
30357ec6b0 Update Paper and Gradle 2023-07-10 17:16:10 -05:00
577780ddbf Update Paper 2023-07-09 14:04:14 -05:00
allinkdev
8134fe5dc1 Mute invalid Enderdragon phases (#126) 2023-07-06 16:44:45 -06:00
allinkdev
503d399712 Mute invalid attributes (#123) 2023-07-06 17:18:03 -05:00
083e1d8f83 Update Paper 2023-07-06 16:13:45 -05:00
allinkdev
4c6342a24c Limit save data for Bees and Vexes (#122) 2023-07-05 17:56:09 -05:00
Luna
5b98ad272f Fix packet-related lag exploits (1.20.1) (#117)
* Fix packet-related lag exploits

* Fix oopsie
2023-07-05 10:08:19 -05:00
Luna
2109ba025d Fix unused patches (#115)
* Remove patch that is now in Paper

* Redirect Paper's safe component method to ours
2023-07-04 11:49:28 -05:00
Luna
25eed98578 Fix nocom exploit (#114) 2023-07-03 20:12:08 -05:00
8bb5b4c152 Update Paper 2023-07-02 23:31:14 -05:00
Luna
9515027636 Don't log on too many chained updates (#113) 2023-07-02 13:20:33 -05:00
Luna
41e0723e0e Patch cleanup 2 (#112)
* First pass

* Second pass

* Limit string tag visitors to 1024 elements

* Split configuration patch into multiple patches

* Third and final pass

* Fix build error
2023-07-01 15:21:13 -05:00
Luna
76bd4f5ff2 Fix paper config resolve-selectors-in-books option (#110) 2023-06-29 10:34:35 -05:00
Luna
51d07d5014 Check if block entity tag query position is loaded (#109) 2023-06-28 21:13:50 -05:00
1376571cbd Update Paper 2023-06-28 14:12:00 -05:00
Luna
0070aa0553 More improvements to chat signatures disabler (#107)
Co-authored-by: Telesphoreo <me@telesphoreo.me>
2023-06-28 13:19:50 -05:00
Luna
d749843f1e More armor trim fixes (#108) 2023-06-28 11:34:31 -06:00
Luna
f9f5f1b345 Fix decorated pot invalid resourcelocation exploit (#106) 2023-06-25 21:02:42 -05:00
d2e0e16016 Update Paper 2023-06-21 16:54:56 -05:00
Luna
ddaee58457 Fix tile entity packet spam exploit (#105)
Co-authored-by: Telesphoreo <me@telesphoreo.me>
2023-06-20 23:16:57 -05:00
allinkdev
ab658d7e35 Improve chat signature disabling patch (#104)
* Do not log expired chat message if signatures are disabled

* Do not kick when chat signatures are disabled
2023-06-20 22:41:08 -05:00
016966e97e Update Paper 2023-06-18 19:13:08 -05:00
7bc46e28a7 Update Paper 2023-06-17 15:57:57 -05:00
345cce1b63 Update Paper 2023-06-16 22:59:23 -05:00
allinkdev
871cc5653c Clean up patches (#103)
* Clean up command block event patch

* Merge resource location patches

* Merge map decoration patches

* Merge Video's resource location patches

* Merge large tag reset patches
2023-06-16 22:54:59 -05:00
ca518d0329 Update Paper 2023-06-15 14:01:42 -05:00
Luna
70c16f6ffa Fix ResourceLocation exploits (1.20.1) (#102)
* Catch null ResourceLocations in CraftNamespacedKey

* Some more ResourceLocation validation
2023-06-14 03:07:38 -05:00
9809c34764 Merge branch '1.20.1' of https://github.com/AtlasMediaGroup/Scissors into 1.20.1 2023-06-13 14:35:22 -05:00
c92c04eff6 Remove publishing task
The reason for removing this is that in theory anyone could publish to the API. I will handle it in a more secure way from now on
2023-06-13 14:35:12 -05:00
allinkdev
f44bda2c9e Fix command block events (#99)
* Update the workflow

* Fix command block events

Hopefully for the last time

---------

Co-authored-by: Telesphoreo <me@telesphoreo.me>
2023-06-13 13:07:07 -05:00
0c8658f767 Update links for 1.20.1 2023-06-13 12:50:51 -05:00
6b00cbdbb9 WHY IS THE SCISSORS DEV SO SLOW 2023-06-13 12:45:38 -05:00
0aff8684fe Update Paper 2023-06-12 16:40:59 -05:00
Luna
e7512f7b6d Fix invalid armor trim exploit (#98) 2023-06-12 16:28:48 -05:00
772d2a7558 Correct javadoc link 2023-06-11 02:02:58 -05:00
defd33d2bd Update Paper 2023-06-10 23:19:15 -05:00
adb61dab39 Update Paper 2023-06-09 17:52:20 -05:00
08e661b27a Update Paper 2023-06-09 12:15:44 -05:00
8ee33f4a4d Fix latest Paper revision 2023-06-09 01:24:06 -05:00
7bebfce7df Fix compilation errors 2023-06-08 23:04:37 -05:00
cb210eb5a1 Add some links to the readme 2023-06-08 20:30:23 -05:00
4a8c0ce378 Change Scissors branding 2023-06-08 20:19:18 -05:00
f128a0fc62 Add Metrics to Scissors 2023-06-08 20:14:22 -05:00
a40a8e3ed6 Update to 1.20 2023-06-08 19:58:46 -05:00
Luna
ab53c6814b Limit beacon effectRange (#95) 2023-06-07 13:57:08 -06:00
3405fa3232 Update Paper 2023-06-07 12:29:06 -05:00
59f6462025 CI improvements (#93)
* test this

* remove this, this plugin never actually worked

* ok i found the problem
2023-06-04 21:06:04 -05:00
a1fe3d1750 oops, this should work 2023-06-04 19:37:57 -05:00
00033dcc39 try this 2023-06-04 19:34:49 -05:00
b81bae46e1 I have no idea if this will work 2023-06-04 19:29:41 -05:00
Justin A.L. Link
5ea4ed902f Add getHandlerList() method to CommandMinecartPlayerEditEvent (#91) 2023-06-04 16:20:01 -05:00
Allink
31486dfa18 Add missing static handler list method (#90) 2023-06-04 11:08:34 -06:00
f64bb8faef Update Paper 2023-06-02 20:34:58 -05:00
Allink
15efff8ce2 Implement command block events (#86)
* Implement command block events

* Make annotation test pass

* Squash annotation test patch into base patch
2023-06-02 16:23:19 -06:00
Allink
e7763fa7ea Add depth limit to SNBT (#87) 2023-06-02 16:07:55 -06:00
Luna
cbfc1beb6a Add depth limit to Component deserializer (1.19.4) (#84)
* Add depth limit to Component deserializer

* Make depth limit configurable; increase placeholder penalty
2023-05-31 17:18:11 -06:00
Luna
ae17467c1b Fix component extra empty array exploit (#82) 2023-05-29 16:59:58 -06:00
Chipmunk
08930195bb Make excluding players from nbt components configurable (#81) 2023-05-28 13:17:40 -05:00
57d7a75327 Update Paper 2023-05-27 18:00:05 -05:00
d984c7c69d Update Paper 2023-05-12 19:30:27 -07:00
8137fc3be6 Update Paper 2023-05-07 18:44:03 -05:00
904899cebf Update Paper 2023-05-06 15:53:47 -05:00
af86fbc465 Update Paper 2023-04-28 21:43:33 -05:00
Luna
3bf9c85578 Patch exploits (#79) 2023-04-28 13:50:48 -06:00
a58e246027 Update Paper 2023-04-24 13:25:43 -05:00
e405542287 Update Paper 2023-04-21 12:47:22 -05:00
a9bfcf6807 Update Paper 2023-04-19 13:53:48 -05:00
cc7bc46050 Update Paper 2023-04-16 19:42:45 -05:00
f18b6dae45 Update Paper 2023-04-14 15:24:52 -05:00
da48bc9763 Update Paper 2023-04-13 18:31:29 -05:00
Luna
db22a6b194 Patch 2 crash exploits (#78)
* Limit projectile velocity to 1024

* Limit sculk catalyst cursor positions
2023-04-10 18:08:03 -06:00
Luna
205e742c56 Improve chunkban patch (#77) 2023-04-08 13:10:07 -06:00
9342bc1cbc Update Paper 2023-04-07 15:48:19 -05:00
8f9ead55be Update Paper 2023-04-04 19:06:20 -05:00
Luna
345a876a96 Patch large selector distance crash (#76) 2023-04-02 22:18:55 -06:00
2bcc072b4d Update Paper 2023-04-02 15:20:27 -05:00
29bbdee52a Update Paper 2023-03-30 14:20:31 -05:00
4216384a4e Remove patch that is now in Paper 2023-03-30 14:07:15 -05:00
218ce6b4f6 Update Paper 2023-03-29 14:57:52 -05:00
8cc375fae2 Update Paper 2023-03-26 22:00:55 -05:00
ea97a96485 Update Paper 2023-03-25 21:44:54 -05:00
a082025718 Update Paper 2023-03-23 21:25:07 -05:00
b6bdd08731 Update Paper 2023-03-20 14:59:44 -05:00
Allink
45d0803b60 Patch invalid entity rotation log spam (#75) 2023-03-20 02:16:58 -05:00
c4a62cdd67 Update Paper 2023-03-19 16:09:47 -05:00
70b8aecf57 [ci skip] Remove unused import 2023-03-16 01:58:22 -05:00
344357d4c9 Backport this patch from 1.17.1 2023-03-16 01:55:06 -05:00
20b899d08c Quick format 2023-03-16 00:12:59 -05:00
4c619e5bf6 Allow CI skipping 2023-03-16 00:10:04 -05:00
abe80e859a Don't archive artifacts yet 2023-03-15 23:55:34 -05:00
0f3cbe912a Fix compilation errors 2023-03-15 23:46:12 -05:00
f8e15546d6 Merge the deleted patches into one giant patch
These were all related to the Scissors config, and it's easier to fixup the patch and add stuff specifically related to the config file rather than having it spread across multiple patches
2023-03-15 23:34:28 -05:00
c6da2c38d2 First pass at patches 2023-03-15 22:57:35 -05:00
9c6fa332cc Build changes for 1.19.4 2023-03-15 22:08:04 -05:00
dcd2e77668 Update Paper 2023-03-14 19:21:05 -05:00
d327333931 Update Paper 2023-03-11 15:01:47 -06:00
3cc85072ce Update Paper 2023-03-07 17:08:02 -06:00
c0a8f2c8de ? 2023-03-06 01:02:55 -06:00
785a0df912 Update Paper 2023-03-06 00:59:08 -06:00
ec540fe8cf Update Paper 2023-03-01 19:48:25 -06:00
888600908c Update Paper 2023-02-26 23:05:34 -06:00
Luna
06a169e968 Fix #72 (#73) 2023-02-25 11:37:46 -06:00
95982e53d4 Update Paper 2023-02-24 01:22:27 -06:00
a7cf65f55f Update memory requirements 2023-02-22 14:09:37 -06:00
a3a2b2e3ef Update Paper 2023-02-22 14:08:11 -06:00
3740b5b839 Attempt to fix out of memory issues 2023-02-17 20:49:12 -06:00
0a52c58984 Update Paper 2023-02-17 20:23:49 -06:00
52198351ee Update Paper 2023-02-16 01:49:51 -06:00
aceb6d07db Update Paper 2023-02-11 14:58:28 -06:00
7f0ce69109 Update Paper 2023-02-08 01:03:27 -06:00
c69c8303df Update Paper 2023-02-03 16:44:08 -06:00
Allink
1dddffad0d Add configuration option to disable chat signatures (#71)
Ported to 1.19.3
2023-02-03 02:22:11 -06:00
23ac49a449 Update Paper 2023-01-19 22:40:50 -06:00
4dc42ffd77 Update Paper 2023-01-15 13:47:43 -06:00
be8709b6aa Update Paper 2023-01-12 16:23:55 -06:00
cfa0f1315a Update Paper 2023-01-10 00:28:22 -06:00
39b51c9c98 Update README.md 2023-01-05 19:17:46 -06:00
b1d55dd712 Update Paper 2023-01-05 14:39:20 -06:00
fb0f7a0e6e Update Paper 2023-01-01 19:37:43 -06:00
d61ec8e005 Update Paper 2022-12-26 19:58:16 -06:00
24df678717 Update Paper 2022-12-23 22:17:23 -06:00
30649288d2 Update Paper 2022-12-21 16:43:54 -06:00
9b774083a1 Update Paper 2022-12-16 17:24:43 -06:00
6e4690bc33 Update Paper 2022-12-14 16:09:36 -06:00
1fbdb2897b Update Paper 2022-12-13 21:59:49 -06:00
c6ebc3f940 Update Javadoc link 2022-12-11 15:04:40 -06:00
840ea83089 Start publishing to Jenkins 2022-12-11 14:11:37 -06:00
2b7e841786 Fix compilation error 2022-12-11 00:16:06 -06:00
0a8af0044c This is all of them except 1 2022-12-11 00:04:11 -06:00
5e3b6a6cf9 Checkpoint
The patches apply, this is to see if it will actually build
2022-12-10 23:26:17 -06:00
2edf8fa89b Add a few more
Note that patch 10 had some changes so I took a guess on how to fix it. Needs testing most likely
2022-12-10 22:51:09 -06:00
5edc7febfe These cleanly went in 2022-12-10 22:36:19 -06:00
fcbea8dbf2 Update Gradle to match Paper 2022-12-10 22:30:30 -06:00
6b23f8bc8f Begin work on 1.19.3
Only got through one patch as of now. Not publishing JARs to Jenkins for now
2022-12-10 22:28:09 -06:00
690ddc47e4 Update Paper 2022-12-08 13:55:14 -06:00
63388769fa Update Paper 2022-11-30 13:39:30 -06:00
Allink
5f01adf7df Prevent velocity freeze (#69) 2022-11-27 21:48:07 -06:00
bc03e4c346 Update Paper 2022-11-27 17:42:51 -06:00
6bc7d62442 Update Paper 2022-11-25 22:34:27 -06:00
4dd3fb4231 Update Paper 2022-11-12 17:00:46 -06:00
1ea217f446 Update Paper 2022-11-10 17:23:17 -06:00
6a4e753d93 Update Paper 2022-10-30 18:45:27 -05:00
86480faff1 Update Paper 2022-10-21 20:51:45 -05:00
666fb0285d Update Paper 2022-10-18 16:47:12 -05:00
b3693eebb8 Update Paper 2022-10-08 16:32:38 -05:00
b967d20421 Update Paper 2022-10-02 17:14:40 -05:00
58aafacb0a Update Paper 2022-09-27 20:41:07 -05:00
4a70956116 Update Paper 2022-09-26 13:07:45 -05:00
15012da3ac Update Paper 2022-09-13 01:41:21 -05:00
4644e58727 Update Paper 2022-09-08 21:26:19 -05:00
ffe270f7e3 Update Paper 2022-09-04 00:39:16 -05:00
7d9d2d1b19 Update Paper 2022-08-30 21:31:34 -05:00
586fbef4a0 Update Paper 2022-08-27 15:15:03 -05:00
b97ad351c5 Update Paper 2022-08-25 18:51:04 -05:00
8b85104178 Create 0041-Fixes-out-of-bounds-HangingEntity-crash-exploit.patch 2022-08-22 21:37:27 -05:00
f6f17d3367 Update Paper 2022-08-22 20:44:24 -05:00
Allink
cbe46d2861 Refuse to convert legacy messages over 1k characters (#60) 2022-08-19 21:12:03 -05:00
0215674820 Update Paper 2022-08-17 21:42:45 -05:00
153867c212 Update Paper 2022-08-13 21:08:11 -05:00
8d04bad165 Update dependencies 2022-08-08 22:51:43 -05:00
a5de04ba78 Update README.md 2022-08-08 21:36:48 -05:00
830820dfbc System messages
From my testing this works great and still works with plugins and keeps any formatting modifications but without the fear mongering red indicator and trouble sign
2022-08-08 21:23:40 -05:00
7b46352204 Update Paper 2022-08-08 20:36:04 -05:00
7b6bb1bd74 Update Paper 2022-08-06 20:01:57 -05:00
afe71a6ba3 Update Jenkinsfile 2022-08-05 20:56:34 -05:00
fa4a8298ed Update to 1.19.2 2022-08-05 20:54:38 -05:00
a2f43a7ab4 Update Paper 2022-08-03 19:52:04 -05:00
4a96d6865f Update Paper 2022-08-02 19:10:49 -05:00
efa11ae31f Update Paper 2022-08-01 18:01:03 -05:00
Allink
a2356397db Add configuration option to disable chat signatures, update Paper and some patch fixes (#59)
* Update Paper

* Update Patches for 1.19.1

* Fix method style

* Fix incorrect access modifier for configuration defaults

* Add configuration option to disable chat signatures
2022-08-01 17:46:08 -05:00
9139d8537a Update Paper 2022-07-30 16:21:17 -05:00
1530ddabf9 Update Paper 2022-07-29 20:48:11 -05:00
442a0e1e2d Fix badge 2022-07-28 12:25:11 -05:00
966df15c7a Mm so true 2022-07-27 23:21:01 -05:00
46de5deb9c First test of 1.19.1 2022-07-27 22:57:50 -05:00
95d23dbac5 So true 2022-07-27 22:11:41 -05:00
Allink
1306a6c873 Fix crash on /timings paste (#55) (#58) 2022-07-27 21:25:46 -05:00
bde00fb532 https://media.skyline.to/kc1VHYJwg2.png 2022-07-26 00:30:19 -05:00
a2200193be Update Paper 2022-07-25 23:19:23 -05:00
Allink
e03a64585c Update Paper (#53) 2022-07-23 21:56:40 -07:00
c3c3691092 Update Paper 2022-07-21 13:28:24 -10:00
275f305109 Update Paper 2022-07-13 21:14:38 -05:00
Allink
253787181e Fix ClickEvents on Signs bypassing permissions (#51) 2022-07-13 14:41:17 -05:00
Allink
97cdd47afa Move Scissors configuration file into config folder (#48) 2022-07-13 13:34:11 -05:00
Allink
183f609960 Fix container click patch (#47) 2022-07-12 11:19:31 -05:00
Luna
1db95f6694 Validate block entity tag query positions (#44) 2022-07-12 00:55:01 -05:00
Allink
6512c37e24 Add scissors config, command & disable command books (1.19) (#41)
* Add Scissors configuration file & command

* Disable running commands in books by default
2022-07-10 10:48:29 -05:00
Allink
765255d611 Improve invalid container event patch (#38) 2022-07-10 01:46:35 -05:00
Allink
ce5f721017 Patch 'sploits (1.19) (#35)
* Prevent invalid container events

* Do not attempt to cast items to recipes
2022-07-09 21:21:23 -05:00
f203e5630b Update Paper 2022-07-09 20:32:51 -05:00
Allink
4e394aa041 Port a877b64 to 1.19 (#32) 2022-07-08 17:36:16 -05:00
e92f6946e3 Oops 2022-07-05 17:11:25 -05:00
aa0bc01f7b Add publishing for Scissors API 2022-07-05 17:07:53 -05:00
6731e603e9 Update Paper 2022-07-05 14:03:22 -05:00
Allink
bc4782d2d0 Add spectator teleport event (#28) 2022-07-05 13:52:02 -05:00
df406d6f6d Add me to MIT license 2022-07-04 23:25:15 -05:00
62fa0e6c6a Merge pull request #25 from allinkdev/masterblocks/1.19
Add MasterBlockFireEvent (1.19)
2022-07-04 23:05:05 -05:00
Allink
e017c84af6 Add MasterBlockFireEvent 2022-07-04 22:34:11 +01:00
6c8de52589 Update Paper 2022-07-02 18:31:31 -05:00
0c6410e8a9 Update Paper 2022-06-27 20:22:19 -05:00
c59f492237 Remove build discarder 2022-06-26 22:45:36 -05:00
45669c2172 Update Paper 2022-06-26 22:22:46 -05:00
d981e274f1 Update Paper 2022-06-22 23:14:29 -05:00
8a3dc6c302 Change CI link 2022-06-22 22:56:36 -05:00
3a60b3ab37 Update Paper 2022-06-22 19:57:02 -05:00
8074a8306b Update gradle.properties 2022-06-21 00:01:52 -05:00
b00feaf91a Update Paper 2022-06-19 15:46:16 -05:00
0e1cc122c3 Update README.md 2022-06-18 21:49:18 -05:00
40af013bbb Merge pull request #19 from allinkdev/patch-1
Add me to MIT License list
2022-06-18 21:44:16 -05:00
8b0e9c3871 Reattribute patches 2022-06-18 21:42:47 -05:00
dd249b8583 Pretty big oversight 2022-06-17 21:34:11 -05:00
79afac5492 Create 0030-Block-server-side-chunkbans.patch 2022-06-17 15:36:14 -05:00
9877024fa5 Update Paper 2022-06-17 14:56:34 -05:00
2aec7e25da Great timing... 2022-06-16 16:18:12 -05:00
dbf90cec2a Update Paper 2022-06-16 16:13:24 -05:00
7cbe6427cd Update Paper 2022-06-14 23:16:46 -05:00
9f0cddbcef Update Paper and fix updater 2022-06-14 20:02:26 -05:00
f1e08dcc42 SO TRUE 2022-06-13 22:40:10 -05:00
483a476d6b yep, it was using an older version of netty 2022-06-13 22:37:50 -05:00
07bf264e8e Jenkins is not fetching the right Netty for some reason 2022-06-13 22:30:35 -05:00
b4b765c036 attempt to clean cache for jenkins 2022-06-13 21:25:53 -05:00
31e9accdad Update paperweight + Paper repo 2022-06-13 21:10:45 -05:00
1722cee0e5 Update Paper 2022-06-13 19:17:28 -05:00
69c3ff7ce7 Update Paper 2022-06-13 14:54:00 -05:00
3460823829 Add missing patch 2022-06-12 01:01:55 -05:00
49d65f1c1c keeping this here for the future 2022-06-12 00:43:34 -05:00
5e9e4b6f2b Spoke too soon
I have no idea why this didn't work, I didn't change anything here
2022-06-12 00:42:39 -05:00
5ca9ce2099 Last patch 🎉 2022-06-12 00:35:09 -05:00
4ecd7e939c I screwed up on this one 2022-06-12 00:23:51 -05:00
22c1ac0796 THIS TOOK FOREVER 2022-06-12 00:17:34 -05:00
64c2270dc4 do i need this 2022-06-11 23:33:59 -05:00
b73be0a454 this took forever 2022-06-11 23:33:50 -05:00
625be35102 Create 0023-Reset-large-tags.patch 2022-06-11 23:20:41 -05:00
b9c09dbfcb Create 0022-Validate-coordinates-before-attempting-to-get-block-.patch 2022-06-11 23:09:00 -05:00
cf944e7f5a Create 0021-Add-custom-classes-used-by-Scissors.patch 2022-06-11 22:57:28 -05:00
7f7c19808f Remove this patch - I have a better idea 2022-06-11 22:53:40 -05:00
0d6eb6daef Add a few more patches 2022-06-11 22:37:25 -05:00
400436d77a Update Paper 2022-06-11 22:22:28 -05:00
19ad81accd Update Paper 2022-06-11 19:07:30 -05:00
f0dc9c94c1 ok guess not 2022-06-11 01:00:48 -05:00
15d8cdc7b3 These work
I have no idea how to get stuff from net.minecraft.* in so I can edit them
2022-06-11 00:53:02 -05:00
c00bd362d6 Attempt to fix compilation error 2022-06-11 00:09:28 -05:00
6725d50dcf Create 0017-Validate-String-UUIDs-during-the-CompoundTag-GamePro.patch 2022-06-11 00:01:56 -05:00
aa48ad0b21 Checkpoint 2022-06-10 23:55:22 -05:00
f8d4eb9eaa First time trying to fix a failed patch this way 2022-06-10 23:44:51 -05:00
08bd23459f These go in 2022-06-10 23:28:30 -05:00
d6ac0443f0 First two patches 2022-06-10 22:56:23 -05:00
bd12abe800 > 2022-06-10 22:24:53 -05:00
38914f1604 Prepare for 1.19 2022-06-10 22:11:51 -05:00
46668157cb Update Paper 2022-06-07 14:47:06 -05:00
3c39f1892b Update Paper 2022-06-04 23:13:08 -05:00
59d76f7bea broh 2022-06-03 21:03:34 -05:00
aa10085c27 literally why 2022-06-03 19:32:08 -05:00
506b716f7b Update Paper 2022-06-03 19:31:43 -05:00
c054fc5086 Update Paper 2022-06-02 20:54:29 -05:00
6e849f20cd Update Paper 2022-06-01 20:34:17 -05:00
d3ac39a78f Update Paper 2022-06-01 02:15:24 -05:00
5722923db1 Update Paper 2022-05-29 20:36:12 -05:00
8fb90b1264 Update Paper 2022-05-28 23:29:36 -05:00
2c65ed7440 Update Paper 2022-05-25 23:38:58 -05:00
b36df60ff1 Update Paper 2022-05-24 22:11:28 -05:00
3f1d9c9ac8 Create 0032-Prevent-crash-paintings-and-similar-entity-OOB-explo.patch 2022-05-22 21:18:57 -05:00
420496e2e0 Update Paper 2022-05-21 20:02:40 -05:00
77839d1184 Merge pull request #18 from allinkdev/1.18.2
Port patch #33 to 1.18.2
2022-05-21 15:45:43 -05:00
Allink
4df9a3cb36 Port patch #33 2022-05-21 21:35:33 +01:00
7d85029867 Update Paper 2022-05-19 01:08:48 -05:00
54af1d2b70 Update Paper 2022-05-16 21:17:17 -05:00
b2fa32800c Backport patches from 1.17.1 2022-05-09 23:45:38 -05:00
8befd612e7 Update Paper and fix patches 2022-05-09 23:42:18 -05:00
6ee56d0f13 Update Paper 2022-05-09 00:29:52 -05:00
2b1cf2200e Update Paper 2022-05-07 21:47:17 -05:00
0d072fc182 Update Paper 2022-05-04 19:04:29 -05:00
04a1068b17 Backport latest patches from 1.17.1 2022-05-01 14:24:11 -05:00
1fa3f6a734 Update Paper 2022-05-01 14:13:14 -05:00
6931ebe3f3 Update Paper 2022-04-28 23:01:53 -05:00
107075987e Another day another Paper update 2022-04-25 19:09:27 -05:00
73b78dc339 Update Paper 2022-04-24 15:46:49 -05:00
261416de49 Update Gradle 2022-04-23 15:07:07 -05:00
ce0f198467 Update Paper 2022-04-23 13:48:20 -05:00
4930040ef9 *sigh* This time fix getting the branch automatically 2022-04-22 03:32:17 -05:00
1bd8ad23ab Update Jenkinsfile 2022-04-22 03:09:31 -05:00
da8e9e0497 I hate Jenkins sometimes 2022-04-22 03:04:10 -05:00
d495d26d78 the fact that i have to do this to get the branch name is ridiculous 2022-04-22 02:48:26 -05:00
e3c53a1f8e Try and set the branch name
I figured out that the updater wasn't working because Jenkins was always setting the branch name to HEAD
2022-04-22 02:42:28 -05:00
67d8415fb3 Add the tasks, this is useful 2022-04-22 02:07:24 -05:00
cd9edca0e9 Merge https://github.com/PaperMC/paperweight-examples into ver/1.18.2 2022-04-22 02:05:48 -05:00
823057089b This is it, all patches applied
Now to see if they all work
2022-04-22 02:03:09 -05:00
7081efe798 Delete 0020-block-server-side-chunkbans.patch 2022-04-22 01:35:55 -05:00
042c4d854f Pushing here 2022-04-22 01:31:04 -05:00
c32bbf0728 Update 0013-Even-more-resource-location-validation.patch 2022-04-22 01:20:00 -05:00
14d33a5998 Create 0012-Even-more-resource-location-validation.patch 2022-04-22 01:17:57 -05:00
6884a59cf4 Update 0008-Ignore-errors-thrown-when-trying-to-remove-minecart-.patch 2022-04-22 01:15:01 -05:00
d13728a72f Ok get this one in too 2022-04-22 01:07:51 -05:00
6cf04f68f9 Readd this 2022-04-22 01:07:06 -05:00
3780ab8142 Create 0004-Fixes-the-Blank-SkullOwner-exploit.patch 2022-04-22 00:59:19 -05:00
3c9f6d0e01 Update 0018-Fix-negative-death-times.patch 2022-04-22 00:50:33 -05:00
54c0013982 Update 0019-Update-for-1.18.2.patch 2022-04-22 00:30:55 -05:00
fba2ddfedc Consolidate more patches 2022-04-22 00:27:06 -05:00
7b1a66a44e Actually consolidate the build changes into the correct patch 2022-04-22 00:15:08 -05:00
53755af975 Update Paper 2022-04-22 00:09:47 -05:00
Jason Penilla
41be2256f0 Update README 2022-04-21 20:45:48 -07:00
Jason Penilla
aedd5067fd Update upstream 2022-04-21 20:36:03 -07:00
ef929a72a2 update paper 2022-04-20 17:19:33 -05:00
81609b1d4b Actually fix updater 2022-04-19 20:09:38 -05:00
65407daeae Delete 0023-Revert-and-fix-a-few-things.patch 2022-04-19 20:05:39 -05:00
719cce7443 Create 0023-Revert-and-fix-a-few-things.patch 2022-04-19 20:02:28 -05:00
1546e4ae5f Update Jenkinsfile 2022-04-19 19:38:51 -05:00
2671eeee6b Attempt to fix updater 2022-04-19 19:35:55 -05:00
a988bca4a6 try and fix it again 2022-04-19 19:22:46 -05:00
b76c7d1ccd Create 0021-Fix-versioning.patch 2022-04-19 19:15:50 -05:00
856ff4c719 It compiles, that's all I guarantee 2022-04-19 19:05:57 -05:00
4c0a4b8804 I'm committing this right now. I don't know if it works but it compiles 2022-04-19 18:49:48 -05:00
243ebd8d3b changes i think 2022-04-19 18:21:18 -05:00
99 changed files with 2349 additions and 2563 deletions

View File

@@ -1,5 +1,10 @@
name: Patch and Build name: Patch and Build
on: [ push, pull_request ]
on:
push:
branches: [ "**" ]
pull_request:
jobs: jobs:
build: build:
# Only run on PRs if the source branch is on someone else's repo # Only run on PRs if the source branch is on someone else's repo
@@ -7,26 +12,19 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout Git Repository - name: Checkout Git Repository
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Validate Gradle wrapper - name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1 uses: gradle/wrapper-validation-action@v1
- name: Cache Gradle - name: Setup Gradle
uses: actions/cache@v2 uses: gradle/gradle-build-action@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/gradle.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Set up JDK - name: Set up JDK
uses: actions/setup-java@v2.3.0 uses: actions/setup-java@v3
with: with:
distribution: 'temurin' distribution: 'temurin'
java-version: '17' java-version: '17'
- name: Configure Git User Details - name: Configure Git User Details
run: git config --global user.email "actions@github.com" && git config --global user.name "Github Actions" run: git config --global user.email "actions@github.com" && git config --global user.name "Github Actions"
- name: Apply Patches - name: Apply Patches
run: ./gradlew applyPatches --stacktrace run: ./gradlew applyPatches
- name: Build - name: Build
run: ./gradlew build --stacktrace run: ./gradlew build

7
Jenkinsfile vendored
View File

@@ -14,12 +14,13 @@ pipeline {
stage('paperclipJar') { stage('paperclipJar') {
steps { steps {
withGradle { withGradle {
sh './gradlew paperclipJar --no-daemon --refresh-dependencies' sh './gradlew createReobfPaperclipJar --no-daemon --refresh-dependencies'
} }
sh """ sh """
#!/bin/sh #!/bin/sh
BRANCH=\$(echo "\${BRANCH_NAME}" | sed 's/\\//_/g') BRANCH=\$(echo "\${BRANCH_NAME}" | sed 's/\\//_/g')
mv \${WORKSPACE}/build/libs/Scissors-*.jar \${WORKSPACE}/build/libs/scissors-\${BRANCH}-\${BUILD_NUMBER}.jar mv \${WORKSPACE}/build/libs/Scissors-paperclip-*.jar \${WORKSPACE}/build/libs/scissors-\${BRANCH}-\${BUILD_NUMBER}.jar
rm \${WORKSPACE}/build/libs/Scissors-bundler-*.jar
""" """
} }
} }
@@ -33,7 +34,7 @@ pipeline {
} }
post { post {
always { always {
archiveArtifacts artifacts: 'build/libs/*.jar', fingerprint: true archiveArtifacts artifacts: 'build/libs/scissors-*.jar', fingerprint: true
junit 'Scissors-Server/build/test-results/test/*.xml' junit 'Scissors-Server/build/test-results/test/*.xml'
junit 'Scissors-API/build/test-results/test/*.xml' junit 'Scissors-API/build/test-results/test/*.xml'
cleanWs() cleanWs()

View File

@@ -16,5 +16,6 @@ should submit a pull request to this project to add their name.
```text ```text
Allink (allinkdev) <arclicious@vivaldi.net> Allink (allinkdev) <arclicious@vivaldi.net>
Luna (LunaWasFlaggedAgain) <lunahatesgogle@gmail.com>
Telesphoreo <me@telesphoreo.me> Telesphoreo <me@telesphoreo.me>
``` ```

View File

@@ -1,8 +1,32 @@
# Scissors [![Build Status](https://ci.scissors.gg/job/Scissors/job/1.17.1/badge/icon)](https://ci.scissors.gg/job/Scissors/job/1.17.1/) # Scissors [![Build Status](https://ci.scissors.gg/job/Scissors/job/1.20.1/badge/icon)](https://ci.scissors.gg/job/Scissors/job/1.20.1/)
Scissors is a fork of Paper that aims to fix exploits possible in Creative Mode. Many of these exploits are ones that Paper's own team has either refused to fix or would have.
Scissors is a fork of Paper that aims to fix exploits possible in Creative Mode. Many of these exploits are ones that
Paper's own team has either refused to fix or would have.
## Links ## Links
### [Scissors Download](https://ci.plex.us.org/job/Scissors) ### [Scissors Download](https://ci.plex.us.org/job/Scissors)
### [Scissors Javadoc](https://javadoc.scissors.gg/1.17.1) ### [Scissors Javadoc](https://javadoc.scissors.gg/1.20.1)
### [Scissors Announcements](https://totalfreedom.me/forum/board/139) ### [Scissors Announcements](https://totalfreedom.me/forum/board/139)
### [Scissors General Discussion](https://totalfreedom.me/forum/board/140) ### [Scissors General Discussion](https://totalfreedom.me/forum/board/140)
## Tasks
```
Paperweight tasks
-----------------
applyApiPatches
applyPatches
applyServerPatches
cleanCache - Delete the project setup cache and task outputs.
createMojmapBundlerJar - Build a runnable bundler jar
createMojmapPaperclipJar - Build a runnable paperclip jar
createReobfBundlerJar - Build a runnable bundler jar
createReobfPaperclipJar - Build a runnable paperclip jar
generateDevelopmentBundle
rebuildApiPatches
rebuildPatches
rebuildServerPatches
reobfJar - Re-obfuscate the built jar to obf mappings
runDev - Spin up a non-relocated Mojang-mapped test server
runReobf - Spin up a test server from the reobfJar output jar
runShadow - Spin up a test server from the shadowJar archiveFile
```

View File

@@ -8,4 +8,9 @@
# To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: # To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId:
# minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter # minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter
# minecraft net/minecraft/world/level/entity/LevelEntityGetter.java # minecraft net/minecraft/world/level/entity/LevelEntityGetter.java
minecraft net/minecraft/nbt/TagParser.java
## Used in Scissors 1.19
#minecraft net/minecraft/world/ContainerHelper
#minecraft net/minecraft/network/chat/contents/NbtContents
#minecraft net/minecraft/network/chat/ComponentUtils
#minecraft net/minecraft/network/chat/contents/EntityDataSource

View File

@@ -1,31 +1,23 @@
import io.papermc.paperweight.util.constants.*
plugins { plugins {
java java
`maven-publish` `maven-publish`
id("com.github.johnrengelman.shadow") version "7.1.2" apply false id("com.github.johnrengelman.shadow") version "8.1.1" apply false
id("io.papermc.paperweight.patcher") version "1.2.0" id("io.papermc.paperweight.patcher") version "1.5.7-SNAPSHOT"
} }
val spigotDecompiler: Configuration by configurations.creating val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/"
repositories { repositories {
mavenCentral() mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/") { maven(paperMavenPublicUrl) {
content { content { onlyForConfigurations(configurations.paperclip.name) }
onlyForConfigurations(
configurations.paperclip.name,
spigotDecompiler.name,
)
}
} }
} }
dependencies { dependencies {
remapper("net.fabricmc:tiny-remapper:0.8.1:fat") remapper("net.fabricmc:tiny-remapper:0.8.9:fat")
decompiler("net.minecraftforge:forgeflower:1.5.498.22") decompiler("net.minecraftforge:forgeflower:2.0.629.1")
spigotDecompiler("io.papermc:patched-spigot-fernflower:0.1+build.4") paperclip("io.papermc:paperclip:3.0.4-SNAPSHOT")
paperclip("io.papermc:paperclip:2.0.1")
} }
allprojects { allprojects {
@@ -50,18 +42,21 @@ subprojects {
tasks.withType<ProcessResources> { tasks.withType<ProcessResources> {
filteringCharset = Charsets.UTF_8.name() filteringCharset = Charsets.UTF_8.name()
} }
tasks.withType<Test> {
minHeapSize = "2g"
maxHeapSize = "4g"
}
repositories { repositories {
mavenCentral() mavenCentral()
maven("https://repo.papermc.io/repository/maven-public/") maven(paperMavenPublicUrl)
} }
} }
paperweight { paperweight {
serverProject.set(project(":Scissors-Server")) serverProject.set(project(":Scissors-Server"))
remapRepo.set("https://maven.fabricmc.net/") remapRepo.set(paperMavenPublicUrl)
decompileRepo.set("https://files.minecraftforge.net/maven/") decompileRepo.set(paperMavenPublicUrl)
usePaperUpstream(providers.gradleProperty("paperRef")) { usePaperUpstream(providers.gradleProperty("paperRef")) {
withPaperPatcher { withPaperPatcher {
@@ -80,7 +75,7 @@ tasks.generateDevelopmentBundle {
libraryRepositories.set( libraryRepositories.set(
listOf( listOf(
"https://repo.maven.apache.org/maven2/", "https://repo.maven.apache.org/maven2/",
"https://repo.papermc.io/repository/maven-public/", paperMavenPublicUrl,
"https://repo.scissors.gg/repository/scissors-snapshot/", "https://repo.scissors.gg/repository/scissors-snapshot/",
) )
) )

View File

@@ -1,9 +1,10 @@
group=me.totalfreedom.scissors group=me.totalfreedom.scissors
version=1.17.1-R0.1-SNAPSHOT version=1.20.1-R0.1-SNAPSHOT
mcVersion=1.17.1 mcVersion=1.20.1
paperRef=6625db387ea9fe5296a6c6f984975b387c3089f0 paperRef=773dd724469bae89d0c2075edc3d1ddc8d5b0b18
org.gradle.caching=true org.gradle.caching=true
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.vfs.watch=false org.gradle.vfs.watch=false
org.gradle.jvmargs=-Xmx4096m

Binary file not shown.

View File

@@ -1,5 +1,7 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

30
gradlew vendored
View File

@@ -55,7 +55,7 @@
# Darwin, MinGW, and NonStop. # Darwin, MinGW, and NonStop.
# #
# (3) This script is generated from the Groovy template # (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project. # within the Gradle project.
# #
# You can find Gradle at https://github.com/gradle/gradle/. # You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +80,10 @@ do
esac esac
done done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # This is normally unused
# shellcheck disable=SC2034
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/} APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD=maximum
@@ -133,22 +130,29 @@ location of your Java installation."
fi fi
else else
JAVACMD=java JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi fi
fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #( case $MAX_FD in #(
max*) max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
MAX_FD=$( ulimit -H -n ) || MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit" warn "Could not query maximum file descriptor limit"
esac esac
case $MAX_FD in #( case $MAX_FD in #(
'' | soft) :;; #( '' | soft) :;; #(
*) *)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
ulimit -n "$MAX_FD" || ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD" warn "Could not set maximum file descriptor limit to $MAX_FD"
esac esac
@@ -193,6 +197,10 @@ if "$cygwin" || "$msys" ; then
done done
fi fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command; # Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in # shell script including quotes and variable substitutions, so put them in
@@ -205,6 +213,12 @@ set -- \
org.gradle.wrapper.GradleWrapperMain \ org.gradle.wrapper.GradleWrapperMain \
"$@" "$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args. # Use "xargs" to parse quoted args.
# #
# With -n1 it outputs one arg per line, with the quotes and backslashes removed. # With -n1 it outputs one arg per line, with the quotes and backslashes removed.

11
gradlew.bat vendored
View File

@@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@@ -40,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if %ERRORLEVEL% equ 0 goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -75,13 +76,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd if %ERRORLEVEL% equ 0 goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 set EXIT_CODE=%ERRORLEVEL%
exit /b 1 if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal

View File

@@ -4,13 +4,13 @@ Date: Mon, 4 Jul 2022 16:44:35 +0100
Subject: [PATCH] Add MasterBlockFireEvent Subject: [PATCH] Add MasterBlockFireEvent
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/event/block/MasterBlockFireEvent.java b/src/main/java/com/github/atlasmediagroup/scissors/event/block/MasterBlockFireEvent.java diff --git a/src/main/java/me/totalfreedom/scissors/event/block/MasterBlockFireEvent.java b/src/main/java/me/totalfreedom/scissors/event/block/MasterBlockFireEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..a24cb52a5af62012c5d5acc29e4c3558e92ae572 index 0000000000000000000000000000000000000000..a24cb52a5af62012c5d5acc29e4c3558e92ae572
--- /dev/null --- /dev/null
+++ b/src/main/java/com/github/atlasmediagroup/scissors/event/block/MasterBlockFireEvent.java +++ b/src/main/java/me/totalfreedom/scissors/event/block/MasterBlockFireEvent.java
@@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
+package com.github.atlasmediagroup.scissors.event.block; +package me.totalfreedom.scissors.event.block;
+ +
+import org.bukkit.Location; +import org.bukkit.Location;
+import org.bukkit.event.Cancellable; +import org.bukkit.event.Cancellable;

View File

@@ -1,16 +1,16 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Tue, 5 Jul 2022 03:28:49 +0100 Date: Tue, 5 Jul 2022 04:10:29 +0100
Subject: [PATCH] Add spectator teleport event Subject: [PATCH] Add spectator teleport event
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/event/player/SpectatorTeleportEvent.java b/src/main/java/com/github/atlasmediagroup/scissors/event/player/SpectatorTeleportEvent.java diff --git a/src/main/java/me/totalfreedom/scissors/event/player/SpectatorTeleportEvent.java b/src/main/java/me/totalfreedom/scissors/event/player/SpectatorTeleportEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..504f02ac89ea0ed3569cbc4ff67292041c9f408e index 0000000000000000000000000000000000000000..d7efa63c316ed99c3eccfeadc1b0873b2ccb5d8a
--- /dev/null --- /dev/null
+++ b/src/main/java/com/github/atlasmediagroup/scissors/event/player/SpectatorTeleportEvent.java +++ b/src/main/java/me/totalfreedom/scissors/event/player/SpectatorTeleportEvent.java
@@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
+package com.github.atlasmediagroup.scissors.event.player; +package me.totalfreedom.scissors.event.player;
+ +
+import org.bukkit.entity.Entity; +import org.bukkit.entity.Entity;
+import org.bukkit.entity.Player; +import org.bukkit.entity.Player;

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 07:27:37 +0100 Date: Sun, 10 Jul 2022 10:12:04 +0100
Subject: [PATCH] Add Scissors configuration file Subject: [PATCH] Add Scissors configuration file
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index c34cfba8f9ed7e9dbd0b6b8ffef9fba46abff046..416bdfccc6cae51a584f29949a32172fb10f78a6 100644 index 8d8fe04e6b09d2a5b1cc05002073df5c58cdcb96..9fd0d55bac867322e8c72dcf4a17bd18f7aa423c 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -1715,6 +1715,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2121,6 +2121,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
} }
// Paper end // Paper end

View File

@@ -1,16 +1,16 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Fri, 2 Jun 2023 23:40:13 +0100 Date: Fri, 2 Jun 2023 20:42:02 +0100
Subject: [PATCH] Add command block player edit event Subject: [PATCH] Add command block player edit event
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/event/block/CommandBlockPlayerEditEvent.java b/src/main/java/com/github/atlasmediagroup/scissors/event/block/CommandBlockPlayerEditEvent.java diff --git a/src/main/java/me/totalfreedom/scissors/event/block/CommandBlockPlayerEditEvent.java b/src/main/java/me/totalfreedom/scissors/event/block/CommandBlockPlayerEditEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..983dd3b25800d5f1fcc61415051bf7c28d0147bd index 0000000000000000000000000000000000000000..722f5839600954998cbbf799e68477d499d104c4
--- /dev/null --- /dev/null
+++ b/src/main/java/com/github/atlasmediagroup/scissors/event/block/CommandBlockPlayerEditEvent.java +++ b/src/main/java/me/totalfreedom/scissors/event/block/CommandBlockPlayerEditEvent.java
@@ -0,0 +1,77 @@ @@ -0,0 +1,77 @@
+package com.github.atlasmediagroup.scissors.event.block; +package me.totalfreedom.scissors.event.block;
+ +
+import org.bukkit.block.CommandBlock; +import org.bukkit.block.CommandBlock;
+import org.bukkit.entity.Player; +import org.bukkit.entity.Player;
@@ -87,13 +87,13 @@ index 0000000000000000000000000000000000000000..983dd3b25800d5f1fcc61415051bf7c2
+ return handlers; + return handlers;
+ } + }
+} +}
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/event/block/CommandMinecartPlayerEditEvent.java b/src/main/java/com/github/atlasmediagroup/scissors/event/block/CommandMinecartPlayerEditEvent.java diff --git a/src/main/java/me/totalfreedom/scissors/event/block/CommandMinecartPlayerEditEvent.java b/src/main/java/me/totalfreedom/scissors/event/block/CommandMinecartPlayerEditEvent.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..2ecaad3d67d3a028a50e998d791de3a829197117 index 0000000000000000000000000000000000000000..4282f24deb87e52ee19a13b172ec80c6a6017e28
--- /dev/null --- /dev/null
+++ b/src/main/java/com/github/atlasmediagroup/scissors/event/block/CommandMinecartPlayerEditEvent.java +++ b/src/main/java/me/totalfreedom/scissors/event/block/CommandMinecartPlayerEditEvent.java
@@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
+package com.github.atlasmediagroup.scissors.event.block; +package me.totalfreedom.scissors.event.block;
+ +
+import org.bukkit.block.CommandBlock; +import org.bukkit.block.CommandBlock;
+import org.bukkit.entity.Player; +import org.bukkit.entity.Player;

View File

@@ -5,25 +5,30 @@ Subject: [PATCH] Build changes
diff --git a/build.gradle.kts b/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts
index c236fe5dc388f8bc0a929f1de04af94c63514208..722e2aefa279e02bfef23cda8d98210072b0ed3d 100644 index fb98936bb8a5488db75d676c5bcb4060597fbbf8..904bf48288e0865db9bbe8d2ca183b8385f73407 100644
--- a/build.gradle.kts --- a/build.gradle.kts
+++ b/build.gradle.kts +++ b/build.gradle.kts
@@ -13,8 +13,8 @@ plugins { @@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) {
} val alsoShade: Configuration by configurations.creating
dependencies { dependencies {
- implementation(project(":Paper-API")) - implementation(project(":paper-api"))
- implementation(project(":Paper-MojangAPI")) - implementation(project(":paper-mojangapi"))
+ implementation(project(":Scissors-API")) // Scissors + // Scissors start
+ implementation("io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT") // Scissors + implementation(project(":Scissors-API"))
+ implementation("io.papermc.paper:paper-mojangapi:1.20.1-R0.1-SNAPSHOT") {
+ exclude("io.papermc.paper", "paper-api")
+ }
+ // Scissors end
// Paper start // Paper start
implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("org.jline:jline-terminal-jansi:3.21.0")
implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("net.minecrell:terminalconsoleappender:1.3.0")
@@ -62,11 +62,17 @@ tasks.jar { @@ -68,11 +72,19 @@ tasks.jar {
val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim() val gitHash = git("rev-parse", "--short=7", "HEAD").getText().trim()
val implementationVersion = System.getenv("BUILD_NUMBER") ?: "\"$gitHash\"" val implementationVersion = System.getenv("BUILD_NUMBER") ?: "\"$gitHash\""
val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper val date = git("show", "-s", "--format=%ci", gitHash).getText().trim() // Paper
- val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper - val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper
+ // Scissors start
+ var gitBranch: String; + var gitBranch: String;
+ if (System.getenv("JENKINS_URL") == null) + if (System.getenv("JENKINS_URL") == null)
+ { + {
@@ -31,6 +36,7 @@ index c236fe5dc388f8bc0a929f1de04af94c63514208..722e2aefa279e02bfef23cda8d982100
+ } else { + } else {
+ gitBranch = System.getenv("GITHUB_BRANCH") + gitBranch = System.getenv("GITHUB_BRANCH")
+ } + }
+ // Scissors end
attributes( attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main", "Main-Class" to "org.bukkit.craftbukkit.Main",
"Implementation-Title" to "CraftBukkit", "Implementation-Title" to "CraftBukkit",
@@ -39,17 +45,17 @@ index c236fe5dc388f8bc0a929f1de04af94c63514208..722e2aefa279e02bfef23cda8d982100
"Implementation-Vendor" to date, // Paper "Implementation-Vendor" to date, // Paper
"Specification-Title" to "Bukkit", "Specification-Title" to "Bukkit",
"Specification-Version" to project.version, "Specification-Version" to project.version,
@@ -193,7 +199,7 @@ tasks.test { @@ -149,7 +161,7 @@ fun TaskContainer.registerRunTask(
fun TaskContainer.registerRunTask( name: String,
name: String, block: JavaExec.() -> Unit block: JavaExec.() -> Unit
): TaskProvider<JavaExec> = register<JavaExec>(name) { ): TaskProvider<JavaExec> = register<JavaExec>(name) {
- group = "paper" - group = "paper"
+ group = "paperweight" + group = "paperweight" // Scissors
mainClass.set("org.bukkit.craftbukkit.Main")
standardInput = System.`in` standardInput = System.`in`
workingDir = rootProject.layout.projectDirectory.dir( workingDir = rootProject.layout.projectDirectory
providers.gradleProperty("runWorkDir").forUseAtConfigurationTime().orElse("run")
diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java
index 218f5bafeed8551b55b91c7fccaf6935c8b631ca..1434060d64bca5931749278d72c3eca6b0cd5189 100644 index 4b002e8b75d117b726b0de274a76d3596fce015b..a46d3f40642bbf249c2d24e689f474d07175ca09 100644
--- a/src/main/java/com/destroystokyo/paper/Metrics.java --- a/src/main/java/com/destroystokyo/paper/Metrics.java
+++ b/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java
@@ -593,7 +593,7 @@ public class Metrics { @@ -593,7 +593,7 @@ public class Metrics {
@@ -57,21 +63,26 @@ index 218f5bafeed8551b55b91c7fccaf6935c8b631ca..1434060d64bca5931749278d72c3eca6
// Only start Metrics, if it's enabled in the config // Only start Metrics, if it's enabled in the config
if (config.getBoolean("enabled", true)) { if (config.getBoolean("enabled", true)) {
- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); - Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger());
+ Metrics metrics = new Metrics("Scissors", serverUUID, logFailedRequests, Bukkit.getLogger()); + Metrics metrics = new Metrics("Scissors", serverUUID, logFailedRequests, Bukkit.getLogger()); // Scissors
metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> {
String minecraftVersion = Bukkit.getVersion(); String minecraftVersion = Bukkit.getVersion();
@@ -603,7 +603,7 @@ public class Metrics { @@ -607,11 +607,11 @@ public class Metrics {
final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion();
metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); if (implVersion != null) {
metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1);
- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); - paperVersion = "git-Paper-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash);
+ metrics.addCustomChart(new Metrics.SimplePie("scissors_version", () -> (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown")); + paperVersion = "git-Scissors-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Scissors
} else {
paperVersion = "unknown";
}
- metrics.addCustomChart(new Metrics.SimplePie("paper_version", () -> paperVersion));
+ metrics.addCustomChart(new Metrics.SimplePie("scissors_version", () -> paperVersion)); // Scissors
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
Map<String, Map<String, Integer>> map = new HashMap<>(); Map<String, Map<String, Integer>> map = new HashMap<>();
diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
index e0b1f0671d16ddddcb6725acd25a1d1d69e42701..3a3d1d22e105ec2c68a06512434540a81c889685 100644 index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..21ded7c14c56a40feaa7741131be5166947f7169 100644
--- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
+++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java
@@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole {
@@ -79,15 +90,15 @@ index e0b1f0671d16ddddcb6725acd25a1d1d69e42701..3a3d1d22e105ec2c68a06512434540a8
protected LineReader buildReader(LineReaderBuilder builder) { protected LineReader buildReader(LineReaderBuilder builder) {
builder builder
- .appName("Paper") - .appName("Paper")
+ .appName("Scissors") + .appName("Scissors") // Scissors
.variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history"))
.completer(new ConsoleCommandCompleter(this.server)) .completer(new ConsoleCommandCompleter(this.server))
.option(LineReader.Option.COMPLETE_IN_WORD, true); .option(LineReader.Option.COMPLETE_IN_WORD, true);
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 8091a901106a1085da9dfd8627dadcbe50f00872..e6da0f7e755e6b0225afbced2c7a14e9df83b09d 100644 index 67ee3a4ca8a6cdeb275653d492a1fea8037c51fb..318f6534cfb11f7fd05b2dcd6da4e0ca9f69f731 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -1729,7 +1729,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1692,7 +1692,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate @DontObfuscate
public String getServerModName() { public String getServerModName() {
@@ -97,10 +108,10 @@ index 8091a901106a1085da9dfd8627dadcbe50f00872..e6da0f7e755e6b0225afbced2c7a14e9
public SystemReport fillSystemReport(SystemReport details) { public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 99a94898316b0601f55b333c15a9926eae24f8a2..cc797b45674163b5913e20031d110796d78b928b 100644 index ec4b73321205b472f19fa5bd4ad95893020d1340..45f43dc72647f2f3fa91dad767b949d851f7dd46 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -251,7 +251,7 @@ import javax.annotation.Nullable; // Paper @@ -265,7 +265,7 @@ import javax.annotation.Nullable; // Paper
import javax.annotation.Nonnull; // Paper import javax.annotation.Nonnull; // Paper
public final class CraftServer implements Server { public final class CraftServer implements Server {
@@ -110,7 +121,7 @@ index 99a94898316b0601f55b333c15a9926eae24f8a2..cc797b45674163b5913e20031d110796
private final String bukkitVersion = Versioning.getBukkitVersion(); private final String bukkitVersion = Versioning.getBukkitVersion();
private final Logger logger = Logger.getLogger("Minecraft"); private final Logger logger = Logger.getLogger("Minecraft");
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
index 774556a62eb240da42e84db4502e2ed43495be17..becf61c0adde1c27f3e462a1b8248544ab181797 100644 index 774556a62eb240da42e84db4502e2ed43495be17..741c76c4dfa0bb34cc23bd795c194bdea10418cc 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
@@ -11,7 +11,7 @@ public final class Versioning { @@ -11,7 +11,7 @@ public final class Versioning {
@@ -118,7 +129,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..becf61c0adde1c27f3e462a1b8248544
String result = "Unknown-Version"; String result = "Unknown-Version";
- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); - InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties");
+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/me.totalfreedom.scissors/scissors-api/pom.properties"); + InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/me.totalfreedom.scissors/Scissors-API/pom.properties"); // Scissors
Properties properties = new Properties(); Properties properties = new Properties();
if (stream != null) { if (stream != null) {

View File

@@ -1,17 +1,34 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com> From: Video <videogamesm12@gmail.com>
Date: Sat, 12 Mar 2022 19:34:59 -0700 Date: Sat, 12 Mar 2022 19:34:59 -0700
Subject: [PATCH] Return null when a show_entity hover event's UUID isn't valid Subject: [PATCH] UUID validation
diff --git a/src/main/java/net/minecraft/nbt/NbtUtils.java b/src/main/java/net/minecraft/nbt/NbtUtils.java
index 6dac24354192bea79a4b9eb721543110826790b2..a9c3c55eb622b18c74d8a9bd472e4e871d11b2aa 100644
--- a/src/main/java/net/minecraft/nbt/NbtUtils.java
+++ b/src/main/java/net/minecraft/nbt/NbtUtils.java
@@ -78,7 +78,11 @@ public final class NbtUtils {
}
// Paper start - support string UUID's
if (nbt.contains("Id", 8)) {
- uUID = UUID.fromString(nbt.getString("Id"));
+ // Scissors start - Validate String UUIDs in game profiles
+ try {
+ uUID = UUID.fromString(nbt.getString("Id"));
+ } catch (Exception ignored) {}
+ // Scissors end
}
// Paper end
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index fda8aad4a394cf331f3421ec07ffe0d605c8da4e..c5711b3d120699ec78f81e9b6ee80d0764552e94 100644 index 3ad05bbab726c59e7b67d9614af4b208d4520cb3..c0633f9553fb5aa52e8ffc863159521d09cb3bd5 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java --- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java +++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -175,7 +175,14 @@ public class HoverEvent { @@ -174,7 +174,14 @@ public class HoverEvent {
} else { } else {
JsonObject jsonObject = json.getAsJsonObject(); JsonObject jsonObject = json.getAsJsonObject();
EntityType<?> entityType = Registry.ENTITY_TYPE.get(new ResourceLocation(GsonHelper.getAsString(jsonObject, "type"))); EntityType<?> entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(GsonHelper.getAsString(jsonObject, "type")));
- UUID uUID = UUID.fromString(GsonHelper.getAsString(jsonObject, "id")); - UUID uUID = UUID.fromString(GsonHelper.getAsString(jsonObject, "id"));
+ // Scissors start + // Scissors start
+ UUID uUID; + UUID uUID;
@@ -24,10 +41,10 @@ index fda8aad4a394cf331f3421ec07ffe0d605c8da4e..c5711b3d120699ec78f81e9b6ee80d07
Component component = Component.Serializer.fromJson(jsonObject.get("name")); Component component = Component.Serializer.fromJson(jsonObject.get("name"));
return new HoverEvent.EntityTooltipInfo(entityType, uUID, component); return new HoverEvent.EntityTooltipInfo(entityType, uUID, component);
} }
@@ -187,7 +194,14 @@ public class HoverEvent { @@ -186,7 +193,14 @@ public class HoverEvent {
CompoundTag compoundTag = TagParser.parseTag(text.getString()); CompoundTag compoundTag = TagParser.parseTag(text.getString());
Component component = Component.Serializer.fromJson(compoundTag.getString("name")); Component component = Component.Serializer.fromJson(compoundTag.getString("name"));
EntityType<?> entityType = Registry.ENTITY_TYPE.get(new ResourceLocation(compoundTag.getString("type"))); EntityType<?> entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(compoundTag.getString("type")));
- UUID uUID = UUID.fromString(compoundTag.getString("id")); - UUID uUID = UUID.fromString(compoundTag.getString("id"));
+ // Scissors start + // Scissors start
+ UUID uUID; + UUID uUID;
@@ -38,5 +55,5 @@ index fda8aad4a394cf331f3421ec07ffe0d605c8da4e..c5711b3d120699ec78f81e9b6ee80d07
+ } + }
+ // Scissors end + // Scissors end
return new HoverEvent.EntityTooltipInfo(entityType, uUID, component); return new HoverEvent.EntityTooltipInfo(entityType, uUID, component);
} catch (CommandSyntaxException | JsonSyntaxException var5) { } catch (Exception var5) {
return null; return null;

View File

@@ -0,0 +1,200 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 13 Mar 2022 07:39:26 -0600
Subject: [PATCH] ResourceLocation validation
diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java
index 15173e715fa36546820d930a46e0f0c493d07cfc..356cc6f468975faa676db87db8fc0fa2df32f020 100644
--- a/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java
+++ b/src/main/java/com/destroystokyo/paper/loottable/PaperContainerEntityLootableInventory.java
@@ -17,7 +17,7 @@ public class PaperContainerEntityLootableInventory implements PaperLootableEntit
@Override
public org.bukkit.loot.LootTable getLootTable() {
- return entity.getLootTable() != null && !entity.getLootTable().getPath().isEmpty() ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(entity.getLootTable())) : null;
+ return entity.getLootTable() != null && !entity.getLootTable().getPath().isEmpty() && entity.getLootTable().toString().length() < 256 ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(entity.getLootTable())) : null; // Scissors - Validate length of loot tables before even trying
}
@Override
diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
index 2ee4ee14ab3345486dad6b24fd9a4fcc6c746b99..c5ac6cda91a81d3075f5c763e30dc009b6be7936 100644
--- a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
+++ b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
@@ -15,7 +15,7 @@ public class PaperTileEntityLootableInventory implements PaperLootableBlockInven
@Override
public org.bukkit.loot.LootTable getLootTable() {
- return tileEntityLootable.lootTable != null && !tileEntityLootable.lootTable.getPath().isEmpty() ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(tileEntityLootable.lootTable)) : null;
+ return tileEntityLootable.lootTable != null && !tileEntityLootable.lootTable.getPath().isEmpty() && tileEntityLootable.lootTable.toString().length() < 256 ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(tileEntityLootable.lootTable)) : null; // Scissors - Validate length of loot tables before even trying
}
@Override
diff --git a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
index 8e4cb2fa787feca47dd4ba2fbb44e6193bac2431..000aa76e3f4dce8129dbd1868cfc244515997c0c 100644
--- a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
+++ b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
@@ -408,7 +408,7 @@ public class AreaEffectCloud extends Entity implements TraceableEntity {
try {
this.setParticle(ParticleArgument.readParticle(new StringReader(nbt.getString("Particle")), (HolderLookup) BuiltInRegistries.PARTICLE_TYPE.asLookup()));
} catch (CommandSyntaxException commandsyntaxexception) {
- AreaEffectCloud.LOGGER.warn("Couldn't load custom particle {}", nbt.getString("Particle"), commandsyntaxexception);
+ // Scissors - Don't log custom particle errors
}
}
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index 9afc81ccb237c3655d64cdbe8a0db9a4d7791043..7b0aed8ed3a150b7c10fa246bb0b519232424737 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -588,7 +588,7 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
}), (entity) -> {
entity.load(nbt);
}, () -> {
- EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
+ // Scissors - Don't log invalid entities
});
}
@@ -607,7 +607,7 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
}
public static Optional<EntityType<?>> by(CompoundTag nbt) {
- return BuiltInRegistries.ENTITY_TYPE.getOptional(new ResourceLocation(nbt.getString("id")));
+ return BuiltInRegistries.ENTITY_TYPE.getOptional(ResourceLocation.tryParse(nbt.getString("id"))); // Scissors
}
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index e2a25c29ec74147b3e66aa0b3deb85a8f6ee53a5..0bb87ca2556ca41e0b14503d3ae62e0fc133a209 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -618,7 +618,7 @@ public abstract class Mob extends LivingEntity implements Targeting {
this.setLeftHanded(nbt.getBoolean("LeftHanded"));
if (nbt.contains("DeathLootTable", 8)) {
- this.lootTable = new ResourceLocation(nbt.getString("DeathLootTable"));
+ this.lootTable = ResourceLocation.tryParse(nbt.getString("DeathLootTable")); // Scissors
this.lootTableSeed = nbt.getLong("DeathLootTableSeed");
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 448fa4f4f200430d6ce3051763c7ceb697696146..40e59b8db83aec1143e3c394427e916beea7c01f 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -289,7 +289,12 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
while (iterator.hasNext()) {
String s = (String) iterator.next();
- this.recipesUsed.put(new ResourceLocation(s), nbttagcompound1.getInt(s));
+ // Scissors start
+ final ResourceLocation rl = ResourceLocation.tryParse(s);
+ if (rl != null) {
+ this.recipesUsed.put(rl, nbttagcompound1.getInt(s));
+ }
+ // Scissors end
}
// Paper start - cook speed API
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
index 0425151e688966442340ea1cf892aff34ffe0791..244b04e0020b1bd1e7be34a1b6266a8ac75d29fc 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BrushableBlockEntity.java
@@ -199,7 +199,7 @@ public class BrushableBlockEntity extends BlockEntity {
private boolean tryLoadLootTable(CompoundTag nbt) {
if (nbt.contains("LootTable", 8)) {
- this.lootTable = new ResourceLocation(nbt.getString("LootTable"));
+ this.lootTable = ResourceLocation.tryParse(nbt.getString("LootTable")); // Scissors
this.lootTableSeed = nbt.getLong("LootTableSeed");
return true;
} else {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/DecoratedPotBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/DecoratedPotBlockEntity.java
index 6f9286db4e5786464fb0b49dc125e1228ab7ae93..8d91accb0d5e8afa3957d816bd71681b4198ee6e 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/DecoratedPotBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/DecoratedPotBlockEntity.java
@@ -90,7 +90,7 @@ public class DecoratedPotBlockEntity extends BlockEntity {
return Items.BRICK;
} else {
Tag tag = list.get(index);
- return BuiltInRegistries.ITEM.get(new ResourceLocation(tag.getAsString()));
+ return BuiltInRegistries.ITEM.get(ResourceLocation.tryParse(tag.getAsString())); // Scissors
}
}
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java
index 081691f9710ff1115e4308f79ed49fbc38941193..c29dfd15e147d5c4d9c9584ff7803c2a52009f0d 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java
@@ -46,7 +46,7 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc
protected boolean tryLoadLootTable(CompoundTag nbt) {
this.lootableData.loadNbt(nbt); // Paper
if (nbt.contains("LootTable", 8)) {
- this.lootTable = new ResourceLocation(nbt.getString("LootTable"));
+ this.lootTable = ResourceLocation.tryParse(nbt.getString("LootTable")); // Scissors - Validate loot tables
try { org.bukkit.craftbukkit.util.CraftNamespacedKey.fromMinecraft(this.lootTable); } catch (IllegalArgumentException ex) { this.lootTable = null; } // Paper - validate
this.lootTableSeed = nbt.getLong("LootTableSeed");
return false; // Paper - always load the items, table may still remain
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java b/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
index e49eece9bff3a53469673d03a7bbf8f9cf8776b8..a49f32e9649155b6af4b1f236e4e8142d730e7e8 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
@@ -30,8 +30,14 @@ public abstract class CraftLootable<T extends RandomizableContainerBlockEntity>
return null;
}
- ResourceLocation key = getSnapshot().lootTable;
- return Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(key));
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try {
+ ResourceLocation key = getSnapshot().lootTable;
+ return Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(key));
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
index 0dd0ce9a9b3253e87eda12354249ec2fd2a33cf2..b6920f9432ca1736afbe775186fbbcf11cf046fb 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
@@ -33,8 +33,14 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements Lo
return null; // return empty loot table?
}
- NamespacedKey key = CraftNamespacedKey.fromMinecraft(nmsTable);
- return Bukkit.getLootTable(key);
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try {
+ NamespacedKey key = CraftNamespacedKey.fromMinecraft(nmsTable);
+ return Bukkit.getLootTable(key);
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
index 18b9b0dc70f6872a9d71c120bcd2edca531b0ac4..4732fff6d1198e5fc4875b4d4523aa2d152817ea 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
@@ -80,8 +80,14 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob {
@Override
public LootTable getLootTable() {
- NamespacedKey key = CraftNamespacedKey.fromMinecraft(this.getHandle().getLootTable());
- return Bukkit.getLootTable(key);
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try {
+ NamespacedKey key = CraftNamespacedKey.fromMinecraft(this.getHandle().getLootTable());
+ return Bukkit.getLootTable(key);
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override

View File

@@ -5,27 +5,23 @@ Subject: [PATCH] Fixes the Blank SkullOwner exploit
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
index 7cacc61fed0c610845c67894d1cc68e44f5e46fe..4186b9558cbf6799e8491443b9ed5a2c9063ab7c 100644 index 47c8148e6413c51ffdd30082bfb37a7fb8a73a71..48fce864be2a92c9665b9eeb85e3193eaed4133d 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaSkull.java
@@ -6,6 +6,9 @@ import java.util.Map; @@ -11,6 +11,7 @@ import net.minecraft.nbt.CompoundTag;
import java.util.UUID; import net.minecraft.nbt.NbtUtils;
import com.destroystokyo.paper.profile.CraftPlayerProfile; import net.minecraft.resources.ResourceLocation;
import com.destroystokyo.paper.profile.PlayerProfile; import net.minecraft.world.level.block.entity.SkullBlockEntity;
+// Scissors start +import org.apache.commons.lang3.StringUtils; // Scissors
+import org.apache.commons.lang3.StringUtils;
+// Scissors end
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.OfflinePlayer; import org.bukkit.NamespacedKey;
@@ -47,7 +50,9 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta { @@ -74,7 +75,7 @@ class CraftMetaSkull extends CraftMetaItem implements SkullMeta {
try { // Paper - Ignore invalid game profiles
if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_COMPOUND)) { if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_COMPOUND)) {
this.setProfile(NbtUtils.readGameProfile(tag.getCompound(SKULL_OWNER.NBT))); this.setProfile(NbtUtils.readGameProfile(tag.getCompound(SKULL_OWNER.NBT)));
- } else if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_STRING) && !tag.getString(SKULL_OWNER.NBT).isEmpty()) { - } else if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_STRING) && !tag.getString(SKULL_OWNER.NBT).isEmpty()) {
+ // Scissors start + } else if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_STRING) && !StringUtils.isBlank(tag.getString(SKULL_OWNER.NBT))) { // Scissors
+ } else if (tag.contains(SKULL_OWNER.NBT, CraftMagicNumbers.NBT.TAG_STRING) && !StringUtils.isBlank(tag.getString(SKULL_OWNER.NBT))) {
+ // Scissors end
this.setProfile(new GameProfile(null, tag.getString(SKULL_OWNER.NBT))); this.setProfile(new GameProfile(null, tag.getString(SKULL_OWNER.NBT)));
} }
} } catch (Exception ignored) {} // Paper

View File

@@ -1,46 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 13 Mar 2022 07:39:26 -0600
Subject: [PATCH] Fixes invalid LootTables causing problems when applied to
Minecart entities
diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperMinecartLootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/PaperMinecartLootableInventory.java
index 83dd3c254fd10e4596e454cc75c8e5e976b73ac0..1b2533bbbc62bcb0d00789312ba72a49f8f49f42 100644
--- a/src/main/java/com/destroystokyo/paper/loottable/PaperMinecartLootableInventory.java
+++ b/src/main/java/com/destroystokyo/paper/loottable/PaperMinecartLootableInventory.java
@@ -16,7 +16,7 @@ public class PaperMinecartLootableInventory implements PaperLootableEntityInvent
@Override
public org.bukkit.loot.LootTable getLootTable() {
- return entity.lootTable != null && !entity.lootTable.getPath().isEmpty() ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(entity.lootTable)) : null;
+ return entity.lootTable != null && !entity.lootTable.getPath().isEmpty() && entity.lootTable.toString().length() < 256 ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(entity.lootTable)) : null; // Scissors - Validate length of loot tables before even trying
}
@Override
diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
index 94dc68182ec5f6dc1294ad15523427836228086a..07075cea760562c901d4469a7f88271c3ffa30bb 100644
--- a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
+++ b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java
@@ -15,7 +15,7 @@ public class PaperTileEntityLootableInventory implements PaperLootableBlockInven
@Override
public org.bukkit.loot.LootTable getLootTable() {
- return tileEntityLootable.lootTable != null && !tileEntityLootable.lootTable.getPath().isEmpty() ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(tileEntityLootable.lootTable)) : null;
+ return tileEntityLootable.lootTable != null && !tileEntityLootable.lootTable.getPath().isEmpty() && tileEntityLootable.lootTable.toString().length() < 256 ? Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(tileEntityLootable.lootTable)) : null; // Scissors - Validate length of loot tables before even trying
}
@Override
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
index f57864ce919ef4721cfb5913c636fe8903ce4cc1..d80c7be5b153db4046d0b11c0116c6aa860ea48c 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
@@ -219,7 +219,7 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme
this.lootableData.loadNbt(nbt); // Paper
this.itemStacks = NonNullList.withSize(this.getContainerSize(), ItemStack.EMPTY);
if (nbt.contains("LootTable", 8)) {
- this.lootTable = new ResourceLocation(nbt.getString("LootTable"));
+ this.lootTable = ResourceLocation.tryParse(nbt.getString("LootTable")); // Scissors - Validate loot tables
this.lootTableSeed = nbt.getLong("LootTableSeed");
} if (true) { // Paper - always load the items, table may still remain
ContainerHelper.loadAllItems(nbt, this.itemStacks);

View File

@@ -5,18 +5,18 @@ Subject: [PATCH] Fixes log spam caused by invalid entities in beehives
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
index 8484e80a70129fb0358d56efab6fd54798b54e6e..90fce5d2178672608f3ae97277cafe740a9ebead 100644 index 41c9f074203915c31c1ae7a160ce509c13383f84..8b4989593da43fc2fd661ac66bfe5ae1eb5e2780 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
@@ -11,6 +11,7 @@ import net.minecraft.nbt.CompoundTag; @@ -11,6 +11,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.NbtUtils;
import net.minecraft.network.protocol.game.DebugPackets; import net.minecraft.network.protocol.game.DebugPackets;
+import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.ResourceLocation; // Scissors
import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource; import net.minecraft.sounds.SoundSource;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
@@ -351,6 +352,13 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -370,6 +371,13 @@ public class BeehiveBlockEntity extends BlockEntity {
for (int i = 0; i < nbttaglist.size(); ++i) { for (int i = 0; i < nbttaglist.size(); ++i) {
CompoundTag nbttagcompound1 = nbttaglist.getCompound(i); CompoundTag nbttagcompound1 = nbttaglist.getCompound(i);
@@ -25,7 +25,7 @@ index 8484e80a70129fb0358d56efab6fd54798b54e6e..90fce5d2178672608f3ae97277cafe74
+ if (!nbttagcompound1.contains("id") || !ResourceLocation.isValidResourceLocation(nbttagcompound1.getString("id")) || EntityType.byString(nbttagcompound1.getString("id")).isEmpty()) { + if (!nbttagcompound1.contains("id") || !ResourceLocation.isValidResourceLocation(nbttagcompound1.getString("id")) || EntityType.byString(nbttagcompound1.getString("id")).isEmpty()) {
+ continue; + continue;
+ } + }
+ // Scissor end + // Scissors end
+ +
BeehiveBlockEntity.BeeData tileentitybeehive_hivebee = new BeehiveBlockEntity.BeeData(nbttagcompound1.getCompound("EntityData"), nbttagcompound1.getInt("TicksInHive"), nbttagcompound1.getInt("MinOccupationTicks")); BeehiveBlockEntity.BeeData tileentitybeehive_hivebee = new BeehiveBlockEntity.BeeData(nbttagcompound1.getCompound("EntityData"), nbttagcompound1.getInt("TicksInHive"), nbttagcompound1.getInt("MinOccupationTicks"));

View File

@@ -5,19 +5,10 @@ Subject: [PATCH] Removes useless spammy error logging
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index c88ab49f60857d5687facc8523f9edc4d652c81b..2e3220cbbea5f6cb9acb7f8fbaf2ff8f91b09234 100644 index 3df1822b55358a9bdf41bcacd5b7fecfd8f05dfa..f9741039dada19391e80d9623f2d8cabc1089506 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -1758,7 +1758,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { @@ -1813,8 +1813,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
try {
blockParser = blockParser.parse(false);
} catch (com.mojang.brigadier.exceptions.CommandSyntaxException e) {
- e.printStackTrace();
+ // Scissors - Don't log errors thrown by Brigadier when an error is thrown
return null;
}
@@ -1782,8 +1782,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
resource = CraftNamespacedKey.fromMinecraft(key); resource = CraftNamespacedKey.fromMinecraft(key);
} }
} catch (IllegalArgumentException ex) { } catch (IllegalArgumentException ex) {

View File

@@ -6,19 +6,18 @@ Subject: [PATCH] Ignore errors thrown when trying to remove minecart entities
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
index d80c7be5b153db4046d0b11c0116c6aa860ea48c..dfbae9ca58722c0aeb6cb9888643016d4cb36f63 100644 index 272095d7a09ab41227d741172735f66fd2798ce1..757ae1773ba35c2348483dddbb231060afafc602 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecartContainer.java
@@ -192,7 +192,12 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme @@ -139,7 +139,11 @@ public abstract class AbstractMinecartContainer extends AbstractMinecart impleme
@Override @Override
public void remove(Entity.RemovalReason reason) { public void remove(Entity.RemovalReason reason) {
if (!this.level.isClientSide && reason.shouldDestroy()) { if (!this.level().isClientSide && reason.shouldDestroy()) {
- Containers.dropContents(this.level, this, this); - Containers.dropContents(this.level(), (Entity) this, (Container) this);
+ // Scissors start - Ignore errors thrown when trying to remove minecart entities with content in them + // Scissors start - Ignore errors thrown when trying to remove minecart entities with content in them
+ try { + try {
+ Containers.dropContents(this.level, this, this); + Containers.dropContents(this.level(), (Entity) this, (Container) this);
+ } catch (Exception ignored) { + } catch (Exception ignored) {}
+ }
+ // Scissors end + // Scissors end
} }

View File

@@ -1,23 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Sun, 13 Mar 2022 11:07:34 -0300
Subject: [PATCH] Ignore null/air bundle items in CraftMetaBundle
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java
index 8fd1e392258eba9dbe2194c024ad7e0ca3e43cf8..28be42594857f2d8320a035c1f8b95cdc300ddd5 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaBundle.java
@@ -49,7 +49,11 @@ public class CraftMetaBundle extends CraftMetaItem implements BundleMeta {
for (int i = 0; i < list.size(); i++) {
CompoundTag nbttagcompound1 = list.getCompound(i);
- this.addItem(CraftItemStack.asCraftMirror(net.minecraft.world.item.ItemStack.of(nbttagcompound1)));
+ // Scissors start
+ CraftItemStack item = CraftItemStack.asCraftMirror(net.minecraft.world.item.ItemStack.of(nbttagcompound1));
+ if(item == null || item.getType().isAir()) continue;
+ this.addItem(item);
+ // Scissors end
}
}
}

View File

@@ -5,21 +5,23 @@ Subject: [PATCH] ItemEntity - Check if items are air before calling setItem
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index 063f3e4c67e6716c9a03dbe4b72eafd32e4f0d53..03b8cc0ae12f17cf3a1c57958cf10ca23750b92a 100644 index 52196431a6538872755344859a0454a0e50c3b6e..2312881cdd925ec538fff3df7cdc7e04770453eb 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -377,11 +377,14 @@ public class ItemEntity extends Entity { @@ -425,11 +425,15 @@ public class ItemEntity extends Entity implements TraceableEntity {
CompoundTag nbttagcompound1 = nbt.getCompound("Item"); CompoundTag nbttagcompound1 = nbt.getCompound("Item");
- this.setItem(ItemStack.of(nbttagcompound1)); - this.setItem(ItemStack.of(nbttagcompound1));
- if (this.getItem().isEmpty()) {
+ // Scissors start + // Scissors start
if (this.getItem().isEmpty()) { + ItemStack item = ItemStack.of(nbttagcompound1);
+ if (item.isEmpty()) {
this.discard(); this.discard();
+ return; + return;
} }
+ this.setItem(ItemStack.of(nbttagcompound1)); + this.setItem(item);
+ // Scissors end + // Scissors end
} }

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Fixes Knowledge Books causing log spam when invalid data is
diff --git a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java diff --git a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
index bb5319afd112f1013445e29e9fcad137d4c581f9..1cd62752e675b91fdcc21733509c95d5bd97625a 100644 index b79f4ce38a42e4dba8ebdfc97dadc531b7245c7a..9c49be7c53a1f2a8c203341b8ded9cd222d0c178 100644
--- a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java --- a/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
+++ b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java +++ b/src/main/java/net/minecraft/world/item/KnowledgeBookItem.java
@@ -40,9 +40,9 @@ public class KnowledgeBookItem extends Item { @@ -40,9 +40,9 @@ public class KnowledgeBookItem extends Item {
@@ -31,10 +31,10 @@ index bb5319afd112f1013445e29e9fcad137d4c581f9..1cd62752e675b91fdcc21733509c95d5
} }
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
index e816e505cd292d6c5138dff0aeae0e9592c09de0..0f6438dfe0a6620eb87233b9eefbe2340dfc347b 100644 index 50fdb086ffec84edc5138737c95f08ed4757a6f3..da312b4670fc0ac07e4ab798d4793025e362783e 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaKnowledgeBook.java
@@ -42,7 +42,12 @@ public class CraftMetaKnowledgeBook extends CraftMetaItem implements KnowledgeBo @@ -41,7 +41,11 @@ public class CraftMetaKnowledgeBook extends CraftMetaItem implements KnowledgeBo
for (int i = 0; i < pages.size(); i++) { for (int i = 0; i < pages.size(); i++) {
String recipe = pages.getString(i); String recipe = pages.getString(i);
@@ -42,8 +42,7 @@ index e816e505cd292d6c5138dff0aeae0e9592c09de0..0f6438dfe0a6620eb87233b9eefbe234
+ // Scissors start - Don't add recipes with invalid namespaces + // Scissors start - Don't add recipes with invalid namespaces
+ try { + try {
+ this.addRecipe(CraftNamespacedKey.fromString(recipe)); + this.addRecipe(CraftNamespacedKey.fromString(recipe));
+ } catch (Exception ignored) { + } catch (Exception ignored) {}
+ }
+ // Scissors end + // Scissors end
} }
} }

View File

@@ -0,0 +1,32 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 13 Mar 2022 21:56:29 -0600
Subject: [PATCH] Validate BlockState and SoundEvent values
diff --git a/src/main/java/net/minecraft/nbt/NbtUtils.java b/src/main/java/net/minecraft/nbt/NbtUtils.java
index efa800402413202d190926610d8264dfbf5019e7..1b3229128771adb85a7d007989891ef073a80278 100644
--- a/src/main/java/net/minecraft/nbt/NbtUtils.java
+++ b/src/main/java/net/minecraft/nbt/NbtUtils.java
@@ -234,7 +234,7 @@ public final class NbtUtils {
if (!nbt.contains("Name", 8)) {
return Blocks.AIR.defaultBlockState();
} else {
- ResourceLocation resourceLocation = new ResourceLocation(nbt.getString("Name"));
+ ResourceLocation resourceLocation = ResourceLocation.tryParse(nbt.getString("Name")); // Scissors - Validate BlockState
Optional<? extends Holder<Block>> optional = blockLookup.get(ResourceKey.create(Registries.BLOCK, resourceLocation));
if (optional.isEmpty()) {
return Blocks.AIR.defaultBlockState();
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
index fa885337085348308604e50049ecc5bb52023884..366f70bfe6559e4d43844473a2c080c3ec52a4fc 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -541,7 +541,7 @@ public abstract class AbstractArrow extends Projectile {
this.setCritArrow(nbt.getBoolean("crit"));
this.setPierceLevel(nbt.getByte("PierceLevel"));
if (nbt.contains("SoundEvent", 8)) {
- this.soundEvent = (SoundEvent) BuiltInRegistries.SOUND_EVENT.getOptional(new ResourceLocation(nbt.getString("SoundEvent"))).orElse(this.getDefaultHitGroundSoundEvent());
+ this.soundEvent = (SoundEvent) BuiltInRegistries.SOUND_EVENT.getOptional(ResourceLocation.tryParse(nbt.getString("SoundEvent"))).orElse(this.getDefaultHitGroundSoundEvent()); // Scissors - Validate SoundEvents before trying to play them
}
this.setShotFromCrossbow(nbt.getBoolean("ShotFromCrossbow"));

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Do not log invalid items in HoverEvent and ItemFrame
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index c5711b3d120699ec78f81e9b6ee80d0764552e94..9c1341803cf892f7f3af11381bd56bc95f31fad0 100644 index c0633f9553fb5aa52e8ffc863159521d09cb3bd5..7449a024265c42f28a6c9a1ed8d8f4b9e3096aac 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java --- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java +++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -315,7 +315,7 @@ public class HoverEvent { @@ -314,7 +314,7 @@ public class HoverEvent {
CompoundTag compoundTag = TagParser.parseTag(string); CompoundTag compoundTag = TagParser.parseTag(string);
return new HoverEvent.ItemStackInfo(item, i, compoundTag); return new HoverEvent.ItemStackInfo(item, i, compoundTag);
} catch (CommandSyntaxException var6) { } catch (CommandSyntaxException var6) {
@@ -17,7 +17,7 @@ index c5711b3d120699ec78f81e9b6ee80d0764552e94..9c1341803cf892f7f3af11381bd56bc9
} }
} }
@@ -329,7 +329,7 @@ public class HoverEvent { @@ -328,7 +328,7 @@ public class HoverEvent {
CompoundTag compoundTag = TagParser.parseTag(text.getString()); CompoundTag compoundTag = TagParser.parseTag(text.getString());
return new HoverEvent.ItemStackInfo(ItemStack.of(compoundTag)); return new HoverEvent.ItemStackInfo(ItemStack.of(compoundTag));
} catch (CommandSyntaxException var2) { } catch (CommandSyntaxException var2) {
@@ -27,10 +27,10 @@ index c5711b3d120699ec78f81e9b6ee80d0764552e94..9c1341803cf892f7f3af11381bd56bc9
} }
} }
diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
index b829efdb40051a41b3bf1cabb8bf7d7c952797b5..a0f20bd54f713afe17c9b5fea9fdee6c59b6e219 100644 index 759ecd79534a7706f7d4a63eb9dacbefcfe54674..9afda54ad70d446672749506822c6abd729b8f1b 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java
@@ -388,7 +388,7 @@ public class ItemFrame extends HangingEntity { @@ -441,7 +441,7 @@ public class ItemFrame extends HangingEntity {
ItemStack itemstack = ItemStack.of(nbttagcompound1); ItemStack itemstack = ItemStack.of(nbttagcompound1);
if (itemstack.isEmpty()) { if (itemstack.isEmpty()) {

View File

@@ -1,32 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 13 Mar 2022 21:56:29 -0600
Subject: [PATCH] Validate BlockState and SoundEvent values
diff --git a/src/main/java/net/minecraft/nbt/NbtUtils.java b/src/main/java/net/minecraft/nbt/NbtUtils.java
index dca8853944832e8fc5a291aa6b46d84b24181ea7..24f009fa3b84323b4c43e0ed15c224d16a7ede81 100644
--- a/src/main/java/net/minecraft/nbt/NbtUtils.java
+++ b/src/main/java/net/minecraft/nbt/NbtUtils.java
@@ -230,7 +230,7 @@ public final class NbtUtils {
if (!compound.contains("Name", 8)) {
return Blocks.AIR.defaultBlockState();
} else {
- Block block = Registry.BLOCK.get(new ResourceLocation(compound.getString("Name")));
+ Block block = Registry.BLOCK.get(ResourceLocation.tryParse(compound.getString("Name"))); // Scissors - Validate BlockState
BlockState blockState = block.defaultBlockState();
if (compound.contains("Properties", 10)) {
CompoundTag compoundTag = compound.getCompound("Properties");
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
index 52e4948fd1657fa1776ac6b0142e8c21e7567976..a811b97021e2eed6efc592bc33602a270feb75a0 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java
@@ -536,7 +536,7 @@ public abstract class AbstractArrow extends Projectile {
this.setCritArrow(nbt.getBoolean("crit"));
this.setPierceLevel(nbt.getByte("PierceLevel"));
if (nbt.contains("SoundEvent", 8)) {
- this.soundEvent = (SoundEvent) Registry.SOUND_EVENT.getOptional(new ResourceLocation(nbt.getString("SoundEvent"))).orElse(this.getDefaultHitGroundSoundEvent());
+ this.soundEvent = (SoundEvent) Registry.SOUND_EVENT.getOptional(ResourceLocation.tryParse(nbt.getString("SoundEvent"))).orElse(this.getDefaultHitGroundSoundEvent()); // Scissors - Validate SoundEvents before trying to play them
}
this.setShotFromCrossbow(nbt.getBoolean("ShotFromCrossbow"));

View File

@@ -5,26 +5,31 @@ Subject: [PATCH] Change version fetcher to AMG
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
index ece77f5ea4b14bbed7c070131b3251ea86764538..74e5c5194580c6b65f3b4e657237fef7ef005ec2 100644 index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..bc5ed619e05f24f3ad50a6a81306d120869f57a1 100644
--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
@@ -4,6 +4,8 @@ import com.destroystokyo.paper.util.VersionFetcher; @@ -4,11 +4,13 @@ import com.destroystokyo.paper.util.VersionFetcher;
import com.google.common.base.Charsets; import com.google.common.base.Charsets;
import com.google.common.io.Resources; import com.google.common.io.Resources;
import com.google.gson.*; import com.google.gson.*;
+import io.papermc.paper.util.JarManifests; +import io.papermc.paper.util.JarManifests; // Scissors
+import java.util.Map;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import net.kyori.adventure.text.TextComponent;
+import org.bukkit.Bukkit; // Scissors
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -19,8 +21,8 @@ import java.util.stream.StreamSupport; @@ -19,8 +21,8 @@ import java.util.stream.StreamSupport;
public class PaperVersionFetcher implements VersionFetcher { public class PaperVersionFetcher implements VersionFetcher {
private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end
- private static final String GITHUB_BRANCH_NAME = "master"; - private static final String GITHUB_BRANCH_NAME = "master";
- private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads"; - private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads/paper";
+ private static final String GITHUB_BRANCH_NAME = getBranch(); + private static final String GITHUB_BRANCH_NAME = getBranch(); // Scissors
+ private static final String DOWNLOAD_PAGE = "https://ci.scissors.gg/job/Scissors/job/" + GITHUB_BRANCH_NAME; + private static final String DOWNLOAD_PAGE = "https://ci.scissors.gg/job/Scissors/job/" + GITHUB_BRANCH_NAME; // Scissors
private static @Nullable String mcVer; private static @Nullable String mcVer;
@Override @Override
@@ -34,8 +39,8 @@ index ece77f5ea4b14bbed7c070131b3251ea86764538..74e5c5194580c6b65f3b4e657237fef7
public Component getVersionMessage(@Nonnull String serverVersion) { public Component getVersionMessage(@Nonnull String serverVersion) {
- String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]"); - String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]");
- final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]); - final Component updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]);
+ String[] parts = serverVersion.substring("git-Scissors-".length()).split("[-\\s]"); + String[] parts = serverVersion.substring("git-Scissors-".length()).split("[-\\s]"); // Scissors
+ final Component updateMessage = getUpdateStatusMessage("AtlasMediaGroup/Scissors", GITHUB_BRANCH_NAME, parts[0]); + final Component updateMessage = getUpdateStatusMessage("AtlasMediaGroup/Scissors", GITHUB_BRANCH_NAME, parts[0]); // Scissors
final Component history = getHistory(); final Component history = getHistory();
return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage;
@@ -45,13 +50,13 @@ index ece77f5ea4b14bbed7c070131b3251ea86764538..74e5c5194580c6b65f3b4e657237fef7
+ // Scissors start - Allow getting git information + // Scissors start - Allow getting git information
+ public static String getCommit() { + public static String getCommit() {
+ Map<String, String> attributes = JarManifests.MANIFEST_MAP; + final var manifest = JarManifests.manifest(Bukkit.getServer().getClass());
+ return attributes.get("Git-Commit"); + return manifest == null ? null : manifest.getMainAttributes().getValue("Git-Commit");
+ } + }
+ +
+ public static String getBranch() { + public static String getBranch() {
+ Map<String, String> attributes = JarManifests.MANIFEST_MAP; + final var manifest = JarManifests.manifest(Bukkit.getServer().getClass());
+ return attributes.get("Git-Branch"); + return manifest == null ? null : manifest.getMainAttributes().getValue("Git-Branch");
+ } + }
+ // Scissors end + // Scissors end
+ +
@@ -72,14 +77,14 @@ index ece77f5ea4b14bbed7c070131b3251ea86764538..74e5c5194580c6b65f3b4e657237fef7
switch (distance) { switch (distance) {
case -1: case -1:
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 22e9dd17f62103c5061435099ce96a3d70d54808..d033caf5dabbd2a240286c5623b3d287ae5cbdd9 100644 index 7c29d92362a82330440dff151bcf421f15c68f71..d1c8671ba5ca95c425e4c679445d55c4bbba217e 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java --- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -269,7 +269,7 @@ public class Main { @@ -300,7 +300,7 @@ public class Main {
if (buildDate.before(deadline.getTime())) { if (buildDate.before(deadline.getTime())) {
// Paper start - This is some stupid bullshit // Paper start - This is some stupid bullshit
System.err.println("*** Warning, you've not updated in a while! ***"); System.err.println("*** Warning, you've not updated in a while! ***");
- System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads ***"); // Paper - System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads/paper ***"); // Paper
+ System.err.println("*** Please download a new build from https://ci.scissors.gg/job/Scissors ***"); // Scissors > // Paper + System.err.println("*** Please download a new build from https://ci.scissors.gg/job/Scissors ***"); // Scissors > // Paper
//System.err.println("*** Server will start in 20 seconds ***"); //System.err.println("*** Server will start in 20 seconds ***");
//Thread.sleep(TimeUnit.SECONDS.toMillis(20)); //Thread.sleep(TimeUnit.SECONDS.toMillis(20));

View File

@@ -1,54 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Mon, 14 Mar 2022 00:49:35 -0600
Subject: [PATCH] Even more resource location validation
diff --git a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
index 4733f74ff028c03a60b73280caf9e4d1e2f0ca30..02172fdcf587904258387d309938fb379a300524 100644
--- a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
+++ b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
@@ -143,7 +143,7 @@ public class AreaEffectCloud extends Entity {
}
public void setType(String string) {
- this.setPotion(Registry.POTION.get(new ResourceLocation(string)));
+ this.setPotion(Registry.POTION.get(ResourceLocation.tryParse(string))); // Scissors - Validate resource locations
}
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index 1c446dba5de89698397041ee38a2e1a00bec8a56..93799eda06c7b699580251f80b641c47643f3615 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -513,7 +513,7 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
}), (entity) -> {
entity.load(nbt);
}, () -> {
- EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id"));
+ // Scissors - Don't log invalid entities
});
}
@@ -537,7 +537,7 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T> {
}
public static Optional<EntityType<?>> by(CompoundTag nbt) {
- return Registry.ENTITY_TYPE.getOptional(new ResourceLocation(nbt.getString("id")));
+ return Registry.ENTITY_TYPE.getOptional(ResourceLocation.tryParse(nbt.getString("id"))); // Scissors - Validate resource locations
}
@Nullable
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 8837fc04a67a656d0e780965ac113d3b28e2369f..11427668a0af28cf638df3574357f696f49af13d 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -570,7 +570,7 @@ public abstract class Mob extends LivingEntity {
this.setLeftHanded(nbt.getBoolean("LeftHanded"));
if (nbt.contains("DeathLootTable", 8)) {
- this.lootTable = new ResourceLocation(nbt.getString("DeathLootTable"));
+ this.lootTable = ResourceLocation.tryParse(nbt.getString("DeathLootTable")); // Scissors - Validate resource locations
this.lootTableSeed = nbt.getLong("DeathLootTableSeed");
}

View File

@@ -4,21 +4,39 @@ Date: Mon, 28 Mar 2022 13:19:43 -0600
Subject: [PATCH] Better handling of invalid JSON components Subject: [PATCH] Better handling of invalid JSON components
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
index c69088a2ec374b2d236fec61e267f42afa2967b1..7ca1ece926b0ef4598d4fa913b96d1e7a0e5bba4 100644
--- a/src/main/java/io/papermc/paper/util/MCUtil.java
+++ b/src/main/java/io/papermc/paper/util/MCUtil.java
@@ -559,13 +559,7 @@ public final class MCUtil {
return null;
}
String string = compound.getString(key);
- try {
- return Component.Serializer.fromJson(string);
- } catch (com.google.gson.JsonParseException e) {
- org.bukkit.Bukkit.getLogger().warning("Unable to parse " + key + " from " + compound +": " + e.getMessage());
- }
-
- return null;
+ return Component.Serializer.fromJsonSafe(string);
}
public static ChunkStatus getChunkStatus(ChunkHolder chunk) {
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index 5ba1636bbb938373e43c1f3ac561368fc9cffd43..6978d14c6bd90ffb640e39e8666430d95d5ef45c 100644 index 37fc353c3e59dd5af2fd6c58ac084fb0e6e155d7..2873ed7c443ed8c8c57a8b1d3e444d229f10f07b 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java --- a/src/main/java/net/minecraft/network/chat/Component.java
+++ b/src/main/java/net/minecraft/network/chat/Component.java +++ b/src/main/java/net/minecraft/network/chat/Component.java
@@ -24,6 +24,8 @@ import java.util.List; @@ -26,6 +26,7 @@ import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Optional; import java.util.Optional;
import javax.annotation.Nullable; import javax.annotation.Nullable;
+ +import net.minecraft.ChatFormatting; // Scissors
+import net.minecraft.ChatFormatting;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.resources.ResourceLocation; import net.minecraft.network.chat.contents.BlockDataSource;
import net.minecraft.util.FormattedCharSequence; import net.minecraft.network.chat.contents.DataSource;
@@ -427,6 +429,26 @@ public interface Component extends Message, FormattedText, Iterable<Component> { @@ -522,6 +523,26 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
return Component.Serializer.GSON.toJsonTree(text); return GsonHelper.toStableString(Serializer.toJsonTree(text));
} }
+ // Scissors start + // Scissors start
@@ -27,7 +45,7 @@ index 5ba1636bbb938373e43c1f3ac561368fc9cffd43..6978d14c6bd90ffb640e39e8666430d9
+ try { + try {
+ return fromJson(json); + return fromJson(json);
+ } catch (Exception ex) { + } catch (Exception ex) {
+ return new TextComponent("** Invalid JSON Component **").withStyle(ChatFormatting.RED); + return Component.empty().append("** Invalid JSON Component **").withStyle(ChatFormatting.RED);
+ } + }
+ } + }
+ +
@@ -36,19 +54,19 @@ index 5ba1636bbb938373e43c1f3ac561368fc9cffd43..6978d14c6bd90ffb640e39e8666430d9
+ try { + try {
+ return fromJson(json); + return fromJson(json);
+ } catch (Exception ex) { + } catch (Exception ex) {
+ return new TextComponent("** Invalid JSON Component **").withStyle(ChatFormatting.RED); + return Component.empty().append("** Invalid JSON Component **").withStyle(ChatFormatting.RED);
+ } + }
+ } + }
+ // Scissors end + // Scissors end
+ +
@Nullable public static JsonElement toJsonTree(Component text) {
public static MutableComponent fromJson(String json) { return Component.Serializer.GSON.toJsonTree(text);
return (MutableComponent) GsonHelper.fromJson(Component.Serializer.GSON, json, MutableComponent.class, false); }
diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java diff --git a/src/main/java/net/minecraft/network/chat/HoverEvent.java b/src/main/java/net/minecraft/network/chat/HoverEvent.java
index 9c1341803cf892f7f3af11381bd56bc95f31fad0..c4394812326bccd70d64b4bd45eb1bb7b53b0905 100644 index 7449a024265c42f28a6c9a1ed8d8f4b9e3096aac..487c68abc3eb5c18dc7fee762b2164001283cab7 100644
--- a/src/main/java/net/minecraft/network/chat/HoverEvent.java --- a/src/main/java/net/minecraft/network/chat/HoverEvent.java
+++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java +++ b/src/main/java/net/minecraft/network/chat/HoverEvent.java
@@ -80,7 +80,7 @@ public class HoverEvent { @@ -79,7 +79,7 @@ public class HoverEvent {
if (jsonElement != null) { if (jsonElement != null) {
return action.deserialize(jsonElement); return action.deserialize(jsonElement);
} else { } else {
@@ -57,7 +75,7 @@ index 9c1341803cf892f7f3af11381bd56bc95f31fad0..c4394812326bccd70d64b4bd45eb1bb7
return component != null ? action.deserializeFromLegacy(component) : null; return component != null ? action.deserializeFromLegacy(component) : null;
} }
} }
@@ -95,7 +95,7 @@ public class HoverEvent { @@ -94,7 +94,7 @@ public class HoverEvent {
} }
public static class Action<T> { public static class Action<T> {
@@ -66,7 +84,7 @@ index 9c1341803cf892f7f3af11381bd56bc95f31fad0..c4394812326bccd70d64b4bd45eb1bb7
public static final HoverEvent.Action<HoverEvent.ItemStackInfo> SHOW_ITEM = new HoverEvent.Action<>("show_item", true, HoverEvent.ItemStackInfo::create, HoverEvent.ItemStackInfo::serialize, HoverEvent.ItemStackInfo::create); public static final HoverEvent.Action<HoverEvent.ItemStackInfo> SHOW_ITEM = new HoverEvent.Action<>("show_item", true, HoverEvent.ItemStackInfo::create, HoverEvent.ItemStackInfo::serialize, HoverEvent.ItemStackInfo::create);
public static final HoverEvent.Action<HoverEvent.EntityTooltipInfo> SHOW_ENTITY = new HoverEvent.Action<>("show_entity", true, HoverEvent.EntityTooltipInfo::create, HoverEvent.EntityTooltipInfo::serialize, HoverEvent.EntityTooltipInfo::create); public static final HoverEvent.Action<HoverEvent.EntityTooltipInfo> SHOW_ENTITY = new HoverEvent.Action<>("show_entity", true, HoverEvent.EntityTooltipInfo::create, HoverEvent.EntityTooltipInfo::serialize, HoverEvent.EntityTooltipInfo::create);
private static final Map<String, HoverEvent.Action<?>> LOOKUP = Stream.of(SHOW_TEXT, SHOW_ITEM, SHOW_ENTITY).collect(ImmutableMap.toImmutableMap(HoverEvent.Action::getName, (action) -> { private static final Map<String, HoverEvent.Action<?>> LOOKUP = Stream.of(SHOW_TEXT, SHOW_ITEM, SHOW_ENTITY).collect(ImmutableMap.toImmutableMap(HoverEvent.Action::getName, (action) -> {
@@ -183,7 +183,7 @@ public class HoverEvent { @@ -182,7 +182,7 @@ public class HoverEvent {
return null; return null;
} }
// Scissors end // Scissors end
@@ -75,50 +93,45 @@ index 9c1341803cf892f7f3af11381bd56bc95f31fad0..c4394812326bccd70d64b4bd45eb1bb7
return new HoverEvent.EntityTooltipInfo(entityType, uUID, component); return new HoverEvent.EntityTooltipInfo(entityType, uUID, component);
} }
} }
@@ -192,7 +192,7 @@ public class HoverEvent { @@ -191,7 +191,7 @@ public class HoverEvent {
public static HoverEvent.EntityTooltipInfo create(Component text) { public static HoverEvent.EntityTooltipInfo create(Component text) {
try { try {
CompoundTag compoundTag = TagParser.parseTag(text.getString()); CompoundTag compoundTag = TagParser.parseTag(text.getString());
- Component component = Component.Serializer.fromJson(compoundTag.getString("name")); - Component component = Component.Serializer.fromJson(compoundTag.getString("name"));
+ Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("name")); // Scissors - Use safer method for getting Components from JSON + Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("name")); // Scissors - Use safer method for getting Components from JSON
EntityType<?> entityType = Registry.ENTITY_TYPE.get(new ResourceLocation(compoundTag.getString("type"))); EntityType<?> entityType = BuiltInRegistries.ENTITY_TYPE.get(new ResourceLocation(compoundTag.getString("type")));
// Scissors start // Scissors start
UUID uUID; UUID uUID;
diff --git a/src/main/java/net/minecraft/network/chat/NbtComponent.java b/src/main/java/net/minecraft/network/chat/NbtComponent.java diff --git a/src/main/java/net/minecraft/network/chat/contents/NbtContents.java b/src/main/java/net/minecraft/network/chat/contents/NbtContents.java
index ae9fef071388bc6b10d34a0126c9dd1ac77eb9e7..f5f2ec1192303bc55a64dce3e0457e4531a35ba7 100644 index 97a2657bc98d41c3c1e376b266d2c85f685acc88..9d20f3f1af8e663a8c13714c8928d4a91653daa4 100644
--- a/src/main/java/net/minecraft/network/chat/NbtComponent.java --- a/src/main/java/net/minecraft/network/chat/contents/NbtContents.java
+++ b/src/main/java/net/minecraft/network/chat/NbtComponent.java +++ b/src/main/java/net/minecraft/network/chat/contents/NbtContents.java
@@ -77,13 +77,14 @@ public abstract class NbtComponent extends BaseComponent implements ContextAware @@ -8,6 +8,7 @@ import java.util.Optional;
if (this.interpreting) { import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import net.kyori.adventure.text.TextComponent; // Scissors
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.arguments.NbtPathArgument;
import net.minecraft.nbt.Tag;
@@ -107,10 +108,10 @@ public class NbtContents implements ComponentContents {
Component component = DataFixUtils.orElse(ComponentUtils.updateForEntity(source, this.separator, sender, depth), ComponentUtils.DEFAULT_NO_STYLE_SEPARATOR); Component component = DataFixUtils.orElse(ComponentUtils.updateForEntity(source, this.separator, sender, depth), ComponentUtils.DEFAULT_NO_STYLE_SEPARATOR);
return stream.flatMap((text) -> { return stream.flatMap((text) -> {
+ // Scissors start - Use safer method for getting Components from JSON
try { try {
- MutableComponent mutableComponent = Component.Serializer.fromJson(text); - MutableComponent mutableComponent = Component.Serializer.fromJson(text);
+ MutableComponent mutableComponent = Component.Serializer.fromJsonSafe(text); + MutableComponent mutableComponent = Component.Serializer.fromJsonSafe(text); // Scissors
return Stream.of(ComponentUtils.updateForEntity(source, mutableComponent, sender, depth)); return Stream.of(ComponentUtils.updateForEntity(source, mutableComponent, sender, depth));
} catch (Exception var5) { } catch (Exception var5) {
- LOGGER.warn("Failed to parse component: {}", text, var5); - LOGGER.warn("Failed to parse component: {}", text, var5);
+ // Scissors - don't log
return Stream.of(); return Stream.of();
} }
+ // Scissors end
}).reduce((accumulator, current) -> { }).reduce((accumulator, current) -> {
return accumulator.append(component).append(current);
}).orElseGet(() -> {
@@ -94,7 +95,7 @@ public abstract class NbtComponent extends BaseComponent implements ContextAware
return stream.map((string) -> {
return new TextComponent(string);
}).reduce((accumulator, current) -> {
- return accumulator.append(text).append(current);
+ return (TextComponent) accumulator.append(text).append(current);
}).orElseGet(() -> {
return new TextComponent("");
});
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index b7c4700fd5db14c77e7ee78311dd77a754d9d41c..07f04c1708b118ace3ed73ae2bf88c29b1c80ad2 100644 index e8485fb900b25e911a858678a833852731cb2ace..842f8af14b2bd694a48ee6573d98e6cfcf910e16 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -2202,12 +2202,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, n @@ -2487,12 +2487,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
this.setRot(this.getYRot(), this.getXRot()); this.setRot(this.getYRot(), this.getXRot());
if (nbt.contains("CustomName", 8)) { if (nbt.contains("CustomName", 8)) {
String s = nbt.getString("CustomName"); String s = nbt.getString("CustomName");
@@ -132,46 +145,20 @@ index b7c4700fd5db14c77e7ee78311dd77a754d9d41c..07f04c1708b118ace3ed73ae2bf88c29
} }
this.setCustomNameVisible(nbt.getBoolean("CustomNameVisible")); this.setCustomNameVisible(nbt.getBoolean("CustomNameVisible"));
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
index 3281448bf37da8a1b4b7b44f10f4b2438b4a4f29..8038e3a10b563321df1e8cedd26b256078ce745a 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
@@ -405,7 +405,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider {
this.levels = nbt.getInt("Levels"); // SPIGOT-5053, use where available
// CraftBukkit end
if (nbt.contains("CustomName", 8)) {
- this.name = Component.Serializer.fromJson(nbt.getString("CustomName"));
+ this.name = Component.Serializer.fromJsonSafe(nbt.getString("CustomName")); // Scissors - Use safer method for getting Components from JSON
}
this.lockKey = LockCode.fromTag(nbt);
diff --git a/src/main/java/net/minecraft/world/level/block/entity/EnchantmentTableBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/EnchantmentTableBlockEntity.java
index 40ac65501a0213b43964fd68eb155d4358fb7fd4..9cfc44472e841e1a2cd7de2a1284afdde05a7989 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/EnchantmentTableBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/EnchantmentTableBlockEntity.java
@@ -44,7 +44,7 @@ public class EnchantmentTableBlockEntity extends BlockEntity implements Nameable
public void load(CompoundTag nbt) {
super.load(nbt);
if (nbt.contains("CustomName", 8)) {
- this.name = Component.Serializer.fromJson(nbt.getString("CustomName"));
+ this.name = Component.Serializer.fromJsonSafe(nbt.getString("CustomName")); // Scissors - Use safer method for getting Components from JSON
}
}
diff --git a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java diff --git a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java
index 2153e7035535990b5307b85d8bc3dab50c0a3ae8..5f11f9b77684bd91b4cfe77cd415ed42bd9bc21a 100644 index 2be7a697f08045b974579e6942b38571e744efac..84ec21c38bb44db1e9ff26c01d5c8af1a2417616 100644
--- a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java --- a/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java
+++ b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java +++ b/src/main/java/net/minecraft/world/scores/ScoreboardSaveData.java
@@ -39,7 +39,7 @@ public class ScoreboardSaveData extends SavedData { @@ -35,7 +35,7 @@ public class ScoreboardSaveData extends SavedData {
} CompoundTag compoundTag = nbt.getCompound(i);
String string = compoundTag.getString("Name");
PlayerTeam playerTeam = this.scoreboard.addPlayerTeam(string); PlayerTeam playerTeam = this.scoreboard.addPlayerTeam(string);
- Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName")); - Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName"));
+ Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName")); // Scissors - Use safer method for getting Components from JSON + Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName")); // Scissors - Use safer method for getting Components from JSON
if (component != null) { if (component != null) {
playerTeam.setDisplayName(component); playerTeam.setDisplayName(component);
} }
@@ -57,14 +57,14 @@ public class ScoreboardSaveData extends SavedData { @@ -53,14 +53,14 @@ public class ScoreboardSaveData extends SavedData {
} }
if (compoundTag.contains("MemberNamePrefix", 8)) { if (compoundTag.contains("MemberNamePrefix", 8)) {
@@ -188,12 +175,12 @@ index 2153e7035535990b5307b85d8bc3dab50c0a3ae8..5f11f9b77684bd91b4cfe77cd415ed42
if (component3 != null) { if (component3 != null) {
playerTeam.setPlayerSuffix(component3); playerTeam.setPlayerSuffix(component3);
} }
@@ -123,7 +123,7 @@ public class ScoreboardSaveData extends SavedData { @@ -115,7 +115,7 @@ public class ScoreboardSaveData extends SavedData {
string = string.substring(0, 16); CompoundTag compoundTag = nbt.getCompound(i);
} ObjectiveCriteria.byName(compoundTag.getString("CriteriaName")).ifPresent((criterion) -> {
String string = compoundTag.getString("Name");
- Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName")); - Component component = Component.Serializer.fromJson(compoundTag.getString("DisplayName"));
+ Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName")); // Scissors - Use safer method for getting Components from JSON + Component component = Component.Serializer.fromJsonSafe(compoundTag.getString("DisplayName")); // Scissors - Use safer method for getting Components from JSON
ObjectiveCriteria.RenderType renderType = ObjectiveCriteria.RenderType.byId(compoundTag.getString("RenderType")); ObjectiveCriteria.RenderType renderType = ObjectiveCriteria.RenderType.byId(compoundTag.getString("RenderType"));
this.scoreboard.addObjective(string, objectiveCriteria, component, renderType); this.scoreboard.addObjective(string, criterion, component, renderType);
}); });

View File

@@ -1,82 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 20 Mar 2022 03:04:33 -0600
Subject: [PATCH] Even more ResourceLocation validation and log spam fixes
diff --git a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
index 02172fdcf587904258387d309938fb379a300524..3c60094119a2b51d5fbab6c559c43293913f6204 100644
--- a/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
+++ b/src/main/java/net/minecraft/world/entity/AreaEffectCloud.java
@@ -420,7 +420,7 @@ public class AreaEffectCloud extends Entity {
try {
this.setParticle(ParticleArgument.readParticle(new StringReader(nbt.getString("Particle"))));
} catch (CommandSyntaxException commandsyntaxexception) {
- AreaEffectCloud.LOGGER.warn("Couldn't load custom particle {}", nbt.getString("Particle"), commandsyntaxexception);
+ // Scissors - Don't log custom particle errors
}
}
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java b/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
index e49eece9bff3a53469673d03a7bbf8f9cf8776b8..a49f32e9649155b6af4b1f236e4e8142d730e7e8 100644
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftLootable.java
@@ -30,8 +30,14 @@ public abstract class CraftLootable<T extends RandomizableContainerBlockEntity>
return null;
}
- ResourceLocation key = getSnapshot().lootTable;
- return Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(key));
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try {
+ ResourceLocation key = getSnapshot().lootTable;
+ return Bukkit.getLootTable(CraftNamespacedKey.fromMinecraft(key));
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
index 0dd0ce9a9b3253e87eda12354249ec2fd2a33cf2..b6920f9432ca1736afbe775186fbbcf11cf046fb 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
@@ -33,8 +33,14 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements Lo
return null; // return empty loot table?
}
- NamespacedKey key = CraftNamespacedKey.fromMinecraft(nmsTable);
- return Bukkit.getLootTable(key);
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try {
+ NamespacedKey key = CraftNamespacedKey.fromMinecraft(nmsTable);
+ return Bukkit.getLootTable(key);
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
index 5a43e420f14fa52d71d41ff3694a179e7a1a5be3..488ccdeb867dcd3aaae4bce77da8b7a11d07eddc 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
@@ -67,8 +67,14 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob {
this.getHandle().lootTable = this.getHandle().getDefaultLootTable();
}
- NamespacedKey key = CraftNamespacedKey.fromMinecraft(this.getHandle().lootTable);
- return Bukkit.getLootTable(key);
+ // Scissors start - Return a null loot table if the specified loot table is not valid
+ try {
+ NamespacedKey key = CraftNamespacedKey.fromMinecraft(this.getHandle().lootTable);
+ return Bukkit.getLootTable(key);
+ } catch (Exception ex) {
+ return null;
+ }
+ // Scissors end
}
@Override

View File

@@ -0,0 +1,173 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: ayunami2000 <spwilliamsiam@gmail.com>
Date: Mon, 28 Mar 2022 17:02:21 -0400
Subject: [PATCH] Block server-side chunkbans
diff --git a/src/main/java/net/minecraft/network/PacketEncoder.java b/src/main/java/net/minecraft/network/PacketEncoder.java
index fbfadeb83719b81f42724e79c59e92ed88fdece7..7de21c9bcc1f3c556790da62f96cc44995e877b2 100644
--- a/src/main/java/net/minecraft/network/PacketEncoder.java
+++ b/src/main/java/net/minecraft/network/PacketEncoder.java
@@ -6,9 +6,17 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import io.papermc.paper.adventure.PaperAdventure; // Paper
import java.io.IOException;
+import java.util.Collections; // Scissors
+import net.minecraft.ChatFormatting; // Scissors
+import net.minecraft.core.NonNullList; // Scissors
+import net.minecraft.nbt.CompoundTag; // Scissors
+import net.minecraft.network.chat.Component; // Scissors
+import net.minecraft.network.chat.SignedMessageBody; // Scissors
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow;
+import net.minecraft.network.protocol.game.*; // Scissors
import net.minecraft.util.profiling.jfr.JvmProfiler;
+import net.minecraft.world.item.ItemStack; // Scissors
import org.slf4j.Logger;
public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
@@ -19,6 +27,23 @@ public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
this.flow = side;
}
+ // Scissors start
+ private static int tryWrite(Packet packet, FriendlyByteBuf friendlyByteBuf, ChannelHandlerContext channelHandlerContext, int i) {
+ friendlyByteBuf.writeVarInt(i);
+ friendlyByteBuf.adventure$locale = channelHandlerContext.channel().attr(PaperAdventure.LOCALE_ATTRIBUTE).get();
+
+ int j = friendlyByteBuf.writerIndex();
+ packet.write(friendlyByteBuf);
+ int k = friendlyByteBuf.writerIndex() - j;
+ int packetLength = friendlyByteBuf.readableBytes();
+ if (k > 8388608 || packetLength > MAX_PACKET_SIZE) {
+ throw new SkipPacketException(new IllegalArgumentException("Packet too big (is " + k + "): " + packet));
+ }
+
+ return k;
+ }
+ // Scissors end
+
protected void encode(ChannelHandlerContext channelHandlerContext, Packet<?> packet, ByteBuf byteBuf) throws Exception {
ConnectionProtocol connectionProtocol = channelHandlerContext.channel().attr(Connection.ATTRIBUTE_PROTOCOL).get();
if (connectionProtocol == null) {
@@ -33,38 +58,59 @@ public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
throw new IOException("Can't serialize unregistered packet");
} else {
FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(byteBuf);
- friendlyByteBuf.writeVarInt(i);
- friendlyByteBuf.adventure$locale = channelHandlerContext.channel().attr(PaperAdventure.LOCALE_ATTRIBUTE).get(); // Paper
+ // Scissors start
+ int k;
try {
- int j = friendlyByteBuf.writerIndex();
- packet.write(friendlyByteBuf);
- int k = friendlyByteBuf.writerIndex() - j;
- if (false && k > 8388608) { // Paper - disable
- throw new IllegalArgumentException("Packet too big (is " + k + ", should be less than 8388608): " + packet);
- } else {
- int l = channelHandlerContext.channel().attr(Connection.ATTRIBUTE_PROTOCOL).get().getId();
- JvmProfiler.INSTANCE.onPacketSent(l, i, channelHandlerContext.channel().remoteAddress(), k);
- }
+ k = tryWrite(packet, friendlyByteBuf, channelHandlerContext, i);
} catch (Throwable var10) {
- LOGGER.error("Packet encoding of packet ID {} threw (skippable? {})", i, packet.isSkippable(), var10); // Paper - Give proper error message
- if (packet.isSkippable()) {
- throw new SkipPacketException(var10);
- } else {
- throw var10;
+ packet = capPacket(packet, i);
+ if (packet == null) {
+ throw new SkipPacketException(new IllegalArgumentException("Packet too big: " + packet));
}
+ friendlyByteBuf.clear();
+ k = tryWrite(packet, friendlyByteBuf, channelHandlerContext, i);
}
- // Paper start
- int packetLength = friendlyByteBuf.readableBytes();
- if (packetLength > MAX_PACKET_SIZE) {
- throw new PacketTooLargeException(packet, packetLength);
- }
- // Paper end
+ int l = channelHandlerContext.channel().attr(Connection.ATTRIBUTE_PROTOCOL).get().getId();
+ JvmProfiler.INSTANCE.onPacketSent(l, i, channelHandlerContext.channel().remoteAddress(), k);
+ // Scissors end
}
}
}
+ // Scissors start
+ private static Packet capPacket(Packet packet, int i) {
+ if (packet instanceof ClientboundBlockEntityDataPacket blockEntityDataPacket) {
+ packet = new ClientboundBlockEntityDataPacket(blockEntityDataPacket.getPos(), blockEntityDataPacket.getType(), new CompoundTag());
+ } else if (packet instanceof ClientboundLevelChunkPacketData chunkPacket) {
+ chunkPacket.clearNBT();
+ } else if (packet instanceof ClientboundContainerSetContentPacket containerSetContentPacket) {
+ packet = new ClientboundContainerSetContentPacket(containerSetContentPacket.getContainerId(), containerSetContentPacket.getStateId(), NonNullList.create(), ItemStack.EMPTY);
+ } else if (packet instanceof ClientboundSetEquipmentPacket setEquipmentPacket) {
+ packet = new ClientboundSetEquipmentPacket(setEquipmentPacket.getEntity(), Collections.emptyList());
+ } else if (packet instanceof ClientboundContainerSetSlotPacket containerSetSlotPacket) {
+ packet = new ClientboundContainerSetSlotPacket(containerSetSlotPacket.getContainerId(), containerSetSlotPacket.getStateId(), containerSetSlotPacket.getSlot(), ItemStack.EMPTY);
+ } else if (packet instanceof ClientboundMapItemDataPacket mapItemDataPacket) {
+ packet = new ClientboundMapItemDataPacket(mapItemDataPacket.getMapId(), mapItemDataPacket.getScale(), mapItemDataPacket.isLocked(), null, null);
+ } else if (packet instanceof ClientboundPlayerChatPacket playerChatPacket) {
+ final SignedMessageBody.Packed body = playerChatPacket.body();
+ packet = new ClientboundPlayerChatPacket(playerChatPacket.sender(), // Not sending this packet results in a kick when someone says something.
+ playerChatPacket.index(),
+ playerChatPacket.signature(),
+ playerChatPacket.body(),
+ Component.empty().append("** Message too large **").withStyle(ChatFormatting.RED),
+ playerChatPacket.filterMask(),
+ playerChatPacket.chatType()
+ );
+ } else {
+ return null;
+ }
+
+ return packet;
+ }
+ // Scissors end
+
// Paper start
private static int MAX_PACKET_SIZE = 8388608;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
index 3944852921335c78a04a9dc301882ab5b152b1ed..96ee53c7cc862e059328c5cdf5e07f309df6a79e 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundBlockEntityDataPacket.java
@@ -24,7 +24,7 @@ public class ClientboundBlockEntityDataPacket implements Packet<ClientGamePacket
return create(blockEntity, BlockEntity::getUpdateTag);
}
- private ClientboundBlockEntityDataPacket(BlockPos pos, BlockEntityType<?> blockEntityType, CompoundTag nbt) {
+ public ClientboundBlockEntityDataPacket(BlockPos pos, BlockEntityType<?> blockEntityType, CompoundTag nbt) { // Scissors - private -> public
this.pos = pos;
this.type = blockEntityType;
this.tag = nbt.isEmpty() ? null : nbt;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
index 39b879f21f958dbd91ab0f74e5d4f3c74928fc33..688287c637a0d4b28d630b7304a3c2cf339bdf54 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java
@@ -33,6 +33,13 @@ public class ClientboundLevelChunkPacketData {
}
// Paper end
+ // Scissors start
+ public void clearNBT() {
+ this.blockEntitiesData.clear();
+ this.extraPackets.clear();
+ }
+ // Scissors end
+
// Paper start - Anti-Xray - Add chunk packet info
@Deprecated @io.papermc.paper.annotation.DoNotUse public ClientboundLevelChunkPacketData(LevelChunk chunk) { this(chunk, null); }
public ClientboundLevelChunkPacketData(LevelChunk chunk, com.destroystokyo.paper.antixray.ChunkPacketInfo<net.minecraft.world.level.block.state.BlockState> chunkPacketInfo) {
@@ -58,6 +65,7 @@ public class ClientboundLevelChunkPacketData {
int totalTileEntities = 0; // Paper
for(Map.Entry<BlockPos, BlockEntity> entry2 : chunk.getBlockEntities().entrySet()) {
+ if (this.extraPackets.size() > 50) break; // Scissors - Limit extraPackets size
// Paper start
if (++totalTileEntities > TE_LIMIT) {
var packet = entry2.getValue().getUpdatePacket();

View File

@@ -1,28 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 20 Mar 2022 04:39:09 -0600
Subject: [PATCH] Fixes crash exploit related to out of bounds Axolotl variants
diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
index 2b8725087fd3bfeca7162bda2783fdacd13a8390..802c9c87df190dce09f9e703cedcb06874c58389 100644
--- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
+++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java
@@ -118,7 +118,7 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
@Override
public void readAdditionalSaveData(CompoundTag nbt) {
super.readAdditionalSaveData(nbt);
- this.setVariant(Axolotl.Variant.BY_ID[nbt.getInt("Variant")]);
+ this.setVariant(Axolotl.Variant.BY_ID[Math.min(Math.abs(nbt.getInt("Variant")), 4)]); // Scissors - Fixes out of bounds Axolotl variant exploit
this.setFromBucket(nbt.getBoolean("FromBucket"));
}
@@ -361,7 +361,7 @@ public class Axolotl extends Animal implements LerpingModel, Bucketable {
@Override
public void loadFromBucketTag(CompoundTag nbt) {
Bucketable.loadDefaultDataFromBucketTag(this, nbt);
- this.setVariant(Axolotl.Variant.BY_ID[nbt.getInt("Variant")]);
+ this.setVariant(Axolotl.Variant.BY_ID[Math.min(Math.abs(nbt.getInt("Variant")), 4)]); // Scissors - Fix out-of-bounds Axolotl variant exploit
if (nbt.contains("Age")) {
this.setAge(nbt.getInt("Age"));
}

View File

@@ -5,33 +5,28 @@ Subject: [PATCH] Reject oversized components from updating
diff --git a/src/main/java/net/minecraft/network/chat/ComponentUtils.java b/src/main/java/net/minecraft/network/chat/ComponentUtils.java diff --git a/src/main/java/net/minecraft/network/chat/ComponentUtils.java b/src/main/java/net/minecraft/network/chat/ComponentUtils.java
index 8f4c83837d0b01a3dbca2607ea718c371db48ef4..fe2717679f84fbef1b8ff1f9a3c3bf0fba8965f1 100644 index 584a58659fae6ba3d8b53858890bc6ec509ffb0e..54a7dae26854d320d9e53f63eb411a85a2d78159 100644
--- a/src/main/java/net/minecraft/network/chat/ComponentUtils.java --- a/src/main/java/net/minecraft/network/chat/ComponentUtils.java
+++ b/src/main/java/net/minecraft/network/chat/ComponentUtils.java +++ b/src/main/java/net/minecraft/network/chat/ComponentUtils.java
@@ -37,8 +37,11 @@ public class ComponentUtils { @@ -39,8 +39,9 @@ public class ComponentUtils {
} }
public static MutableComponent updateForEntity(@Nullable CommandSourceStack source, Component text, @Nullable Entity sender, int depth) throws CommandSyntaxException { public static MutableComponent updateForEntity(@Nullable CommandSourceStack source, Component text, @Nullable Entity sender, int depth) throws CommandSyntaxException {
+ // Scissors start - Reject oversized components + MutableComponent result; // Scissors
+ MutableComponent result;
+
if (depth > 100) { if (depth > 100) {
- return text.copy(); - return text.copy();
+ result = text.copy(); + result = text.copy(); // Scissors
} else { } else {
MutableComponent mutableComponent = text instanceof ContextAwareComponent ? ((ContextAwareComponent)text).resolve(source, sender, depth + 1) : text.plainCopy(); // Paper start
if (text instanceof io.papermc.paper.adventure.AdventureComponent adventureComponent) {
@@ -46,8 +49,12 @@ public class ComponentUtils { @@ -53,8 +54,9 @@ public class ComponentUtils {
mutableComponent.append(updateForEntity(source, component, sender, depth + 1)); mutableComponent.append(updateForEntity(source, component, sender, depth + 1));
} }
- return mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth)); - return mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth));
+ result = mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth)); + result = mutableComponent.withStyle(resolveStyle(source, text.getStyle(), sender, depth)); // Scissors
} }
+ + return Component.Serializer.toJson(result).length() > 65535 ? Component.empty() : result; // Scissors
+ // Would the resulting component exceed 65535 bytes when encoded as a string?
+ return Component.Serializer.toJson(result).length() > 65535 ? new TextComponent("") : result;
+ // Scissors end
} }
private static Style resolveStyle(@Nullable CommandSourceStack source, Style style, @Nullable Entity sender, int depth) throws CommandSyntaxException { private static Style resolveStyle(@Nullable CommandSourceStack source, Style style, @Nullable Entity sender, int depth) throws CommandSyntaxException {

View File

@@ -1,44 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sun, 20 Mar 2022 07:46:37 -0600
Subject: [PATCH] Validate coordinates before attempting to get block entities
when handling Creative Inventory packets
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 621ec8e8a197323da6b423fee57c816ac9d7c875..83333ae9c8e8c1edc6e7f02468bd8dc7e44bb66e 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2933,20 +2933,24 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
if (this.player.gameMode.isCreative()) {
boolean flag = packet.getSlotNum() < 0;
ItemStack itemstack = packet.getItem();
- CompoundTag nbttagcompound = itemstack.getTagElement("BlockEntityTag");
+ CompoundTag nbttagcompound = itemstack.getTagElement("BlockEntityTag");
if (!itemstack.isEmpty() && nbttagcompound != null && nbttagcompound.contains("x") && nbttagcompound.contains("y") && nbttagcompound.contains("z") && this.player.getBukkitEntity().hasPermission("minecraft.nbt.copy")) { // Spigot
BlockPos blockposition = new BlockPos(nbttagcompound.getInt("x"), nbttagcompound.getInt("y"), nbttagcompound.getInt("z"));
- BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);
+ // Scissors start - Validate coordinates and whether or not the player can reach them
+ if (Level.isInSpawnableBounds(blockposition) && !isOutsideOfReach(blockposition.getX(), blockposition.getY(), blockposition.getZ())) {
+ BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);
- if (tileentity != null) {
- CompoundTag nbttagcompound1 = tileentity.save(new CompoundTag());
+ if (tileentity != null) {
+ CompoundTag nbttagcompound1 = tileentity.save(new CompoundTag());
- nbttagcompound1.remove("x");
- nbttagcompound1.remove("y");
- nbttagcompound1.remove("z");
- itemstack.addTagElement("BlockEntityTag", (Tag) nbttagcompound1);
+ nbttagcompound1.remove("x");
+ nbttagcompound1.remove("y");
+ nbttagcompound1.remove("z");
+ itemstack.addTagElement("BlockEntityTag", (Tag) nbttagcompound1);
+ }
}
+ // Scissors end
}
boolean flag1 = packet.getSlotNum() >= 1 && packet.getSlotNum() <= 45;

View File

@@ -1,22 +1,22 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 07:53:59 +0100 Date: Sun, 10 Jul 2022 10:12:04 +0100
Subject: [PATCH] Add Scissors config & command Subject: [PATCH] Add Scissors configuration file & command
diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java
index e29b0a90019b12bd6586ad0f7b5314f307e527ba..c6f19e178f8c5a03f9fb8b011f329ef81e4e35d8 100644 index a2f71a6d1a9e98133dff6cd0f625da9435a8af14..f83b2c4298bd1a5f65487f64bd6a11fb190a622d 100644
--- a/src/main/java/co/aikar/timings/TimingsExport.java --- a/src/main/java/co/aikar/timings/TimingsExport.java
+++ b/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java
@@ -23,6 +23,7 @@ @@ -25,6 +25,7 @@ package co.aikar.timings;
*/
package co.aikar.timings;
+import com.github.atlasmediagroup.scissors.ScissorsConfig;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import net.minecraft.server.MinecraftServer; import io.papermc.paper.adventure.PaperAdventure;
import org.apache.commons.lang.StringUtils; +import me.totalfreedom.scissors.ScissorsConfig;
@@ -228,7 +229,8 @@ public class TimingsExport extends Thread { import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
@@ -242,7 +243,8 @@ public class TimingsExport extends Thread {
parent.put("config", createObject( parent.put("config", createObject(
pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)),
pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)),
@@ -26,13 +26,13 @@ index e29b0a90019b12bd6586ad0f7b5314f307e527ba..c6f19e178f8c5a03f9fb8b011f329ef8
)); ));
new TimingsExport(listeners, parent, history).start(); new TimingsExport(listeners, parent, history).start();
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsCommand.java b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsCommand.java diff --git a/src/main/java/me/totalfreedom/scissors/ScissorsCommand.java b/src/main/java/me/totalfreedom/scissors/ScissorsCommand.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..f5202deac5b3a715a22d0d482f1302b6074b26ac index 0000000000000000000000000000000000000000..797677d892d83cf54d9a60af1e277b67ed3d6e95
--- /dev/null --- /dev/null
+++ b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsCommand.java +++ b/src/main/java/me/totalfreedom/scissors/ScissorsCommand.java
@@ -0,0 +1,150 @@ @@ -0,0 +1,150 @@
+package com.github.atlasmediagroup.scissors; +package me.totalfreedom.scissors;
+ +
+import com.google.common.base.Functions; +import com.google.common.base.Functions;
+import com.google.common.base.Joiner; +import com.google.common.base.Joiner;
@@ -182,16 +182,18 @@ index 0000000000000000000000000000000000000000..f5202deac5b3a715a22d0d482f1302b6
+ Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Scissors config reload complete."); + Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Scissors config reload complete.");
+ } + }
+} +}
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java diff --git a/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java b/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..076379a0e61d74ecaf651b341821e1e30999b3b8 index 0000000000000000000000000000000000000000..8cd2848aa6b06c5efbe797ed2d75ff4b025b3c52
--- /dev/null --- /dev/null
+++ b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java +++ b/src/main/java/me/totalfreedom/scissors/ScissorsConfig.java
@@ -0,0 +1,170 @@ @@ -0,0 +1,225 @@
+package com.github.atlasmediagroup.scissors; +package me.totalfreedom.scissors;
+
+ +
+import com.google.common.base.Throwables; +import com.google.common.base.Throwables;
+import net.minecraft.server.MinecraftServer; +import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.dedicated.DedicatedServer;
+import org.bukkit.Bukkit; +import org.bukkit.Bukkit;
+import org.bukkit.command.Command; +import org.bukkit.command.Command;
+import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.InvalidConfigurationException;
@@ -202,12 +204,15 @@ index 0000000000000000000000000000000000000000..076379a0e61d74ecaf651b341821e1e3
+import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method; +import java.lang.reflect.Method;
+import java.lang.reflect.Modifier; +import java.lang.reflect.Modifier;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap; +import java.util.HashMap;
+import java.util.List; +import java.util.List;
+import java.util.Map; +import java.util.Map;
+import java.util.logging.Level; +import java.util.logging.Level;
+import java.util.regex.Pattern; +import java.util.regex.Pattern;
+ +
+// TODO - Migrate to new format
+public class ScissorsConfig +public class ScissorsConfig
+{ +{
+ +
@@ -221,7 +226,7 @@ index 0000000000000000000000000000000000000000..076379a0e61d74ecaf651b341821e1e3
+ +
+ Discord: https://discord.com/invite/mtVQcHn58h + Discord: https://discord.com/invite/mtVQcHn58h
+ Website: https://scissors.gg/\s + Website: https://scissors.gg/\s
+ Docs: https://javadoc.scissors.gg/1.17.1/\s + Docs: https://javadoc.scissors.gg/1.20.1/\s
+ """; + """;
+ private static final Pattern SPACE = Pattern.compile(" "); + private static final Pattern SPACE = Pattern.compile(" ");
+ private static final Pattern NOT_NUMERIC = Pattern.compile("[^-\\d.]"); + private static final Pattern NOT_NUMERIC = Pattern.compile("[^-\\d.]");
@@ -234,7 +239,24 @@ index 0000000000000000000000000000000000000000..076379a0e61d74ecaf651b341821e1e3
+ +
+ public static void init(File configFile) + public static void init(File configFile)
+ { + {
+ CONFIG_FILE = configFile; + final File configFolder = (File) DedicatedServer.getServer().options.valueOf("scissors-settings" + "-directory");
+ final Path configFolderPath = configFolder.toPath();
+ final Path oldConfigFilePath = configFile.toPath();
+ final Path newConfigFilePath = configFolderPath.resolve(configFile.toPath());
+
+ if (configFile.exists())
+ {
+ try
+ {
+ Files.move(oldConfigFilePath, newConfigFilePath);
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException("Error migrating configuration file to new directory!", e);
+ }
+ }
+
+ CONFIG_FILE = newConfigFilePath.toFile();
+ config = new YamlConfiguration(); + config = new YamlConfiguration();
+ try + try
+ { + {
@@ -255,8 +277,8 @@ index 0000000000000000000000000000000000000000..076379a0e61d74ecaf651b341821e1e3
+ config.options().header(HEADER); + config.options().header(HEADER);
+ config.options().copyDefaults(true); + config.options().copyDefaults(true);
+ +
+ version = getInt("config-version", 1); + version = getInt("config-version", 5);
+ set("config-version", 1); + set("config-version", 5);
+ readConfig(ScissorsConfig.class, null); + readConfig(ScissorsConfig.class, null);
+ } + }
+ +
@@ -317,6 +339,38 @@ index 0000000000000000000000000000000000000000..076379a0e61d74ecaf651b341821e1e3
+ } + }
+ } + }
+ +
+ public static boolean runCommandsInBooks = false;
+
+ private static void runCommandsInBooks()
+ {
+ runCommandsInBooks = getBoolean("runCommandsInBooks", false);
+ }
+
+ // people still may want them to bypass permissions for warps
+ public static boolean commandSignsBypassPermissions = false;
+ private static void commandSignsBypassPermissions()
+ {
+ commandSignsBypassPermissions = getBoolean("commandSignsBypassPermissions", false);
+ }
+
+ public static boolean chatSignaturesEnabled = true;
+ private static void chatSignaturesEnabled()
+ {
+ chatSignaturesEnabled = getBoolean("chatSignaturesEnabled", true);
+ }
+
+ public static boolean excludePlayersFromNbtComponents = false;
+ private static void excludePlayersFromNbtComponents()
+ {
+ excludePlayersFromNbtComponents = getBoolean("excludePlayersFromNbtComponents", false);
+ }
+ public static int componentDepthLimit = 128;
+ private static void componentDepthLimit()
+ {
+ componentDepthLimit = getInt("componentDepthLimit", 128);
+ }
+
+
+ private static void set(String path, Object val) + private static void set(String path, Object val)
+ { + {
+ config.set(path, val); + config.set(path, val);
@@ -358,87 +412,96 @@ index 0000000000000000000000000000000000000000..076379a0e61d74ecaf651b341821e1e3
+ return config.getString(path, config.getString(path)); + return config.getString(path, config.getString(path));
+ } + }
+} +}
+
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
index 6a00ee7f69bf44c5a9a329df26ac5640b368283b..3fed82a0b271234065767ec37c9ddd0a9f39da27 100644 index a7ebf851a65231074c89a24f30de4ac2fb5b63e4..641fe69cb2131413654c39a32a73c62e2bc092f6 100644
--- a/src/main/java/net/minecraft/server/Main.java --- a/src/main/java/net/minecraft/server/Main.java
+++ b/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java
@@ -106,6 +106,7 @@ public class Main { @@ -147,6 +147,7 @@ public class Main {
org.bukkit.configuration.file.YamlConfiguration bukkitConfiguration = loadConfigFile((File) optionset.valueOf("bukkit-settings")); // Paper start - load config files for access below if needed
org.bukkit.configuration.file.YamlConfiguration spigotConfiguration = loadConfigFile((File) optionset.valueOf("spigot-settings")); org.bukkit.configuration.file.YamlConfiguration bukkitConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("bukkit-settings"));
org.bukkit.configuration.file.YamlConfiguration paperConfiguration = loadConfigFile((File) optionset.valueOf("paper-settings")); org.bukkit.configuration.file.YamlConfiguration spigotConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("spigot-settings"));
+ org.bukkit.configuration.file.YamlConfiguration scissorsConfiguration = loadConfigFile((File) optionset.valueOf("scissors-settings")); // Scissors + org.bukkit.configuration.file.YamlConfiguration scissorsConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("scissors-settings")); // Scissors - TODO Change this
// Paper end // Paper end
Path path1 = Paths.get("eula.txt"); if (optionset.has("initSettings")) { // CraftBukkit
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
index b6ee0e709b0f0529b99567bc9b8fb6bfd99bcd8e..4cd18a681dedea26b98002902a3c3b1f47966887 100644 index c49802c936ae8e3f4dc1badd98414d96714ecd60..c9725f2df7a66eba3d5994a2b4b16b07ff0f696d 100644
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
@@ -234,7 +234,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -222,6 +222,16 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
io.papermc.paper.util.ObfHelper.INSTANCE.getClass(); // load mappings for stacktrace deobf and etc.
io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider
// Paper end // Paper end
-
+ // Scissors start + // Scissors start
+ try { + try {
+ com.github.atlasmediagroup.scissors.ScissorsConfig.init((java.io.File) options.valueOf("scissors-settings")); + me.totalfreedom.scissors.ScissorsConfig.init((java.io.File) options.valueOf("scissors-settings"));
+ } catch (Exception e) { + } catch (Exception e) {
+ DedicatedServer.LOGGER.error("Unable to load server configuration", e); + DedicatedServer.LOGGER.error("Unable to load server configuration", e);
+ return false; + return false;
+ } + }
+ com.github.atlasmediagroup.scissors.ScissorsConfig.registerCommands(); + me.totalfreedom.scissors.ScissorsConfig.registerCommands();
+ // Scissors end + // Scissors end
+
this.setPvpAllowed(dedicatedserverproperties.pvp); this.setPvpAllowed(dedicatedserverproperties.pvp);
this.setFlightAllowed(dedicatedserverproperties.allowFlight); this.setFlightAllowed(dedicatedserverproperties.allowFlight);
this.setResourcePack(dedicatedserverproperties.resourcePack, this.getPackHash()); this.setMotd(dedicatedserverproperties.motd);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index cc797b45674163b5913e20031d110796d78b928b..bb5d6e5405c1781404bfd3d2af9c93026f9c86f0 100644 index 26937b8dd0411b0c96e461c57eeee6ae8595211e..bf8ade78a771b0295811f48cba96aeb05a39524e 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -924,6 +924,7 @@ public final class CraftServer implements Server { @@ -1036,6 +1036,7 @@ public final class CraftServer implements Server {
}
org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot
com.destroystokyo.paper.PaperConfig.init((File) console.options.valueOf("paper-settings")); // Paper + me.totalfreedom.scissors.ScissorsConfig.init(((File) console.options.valueOf("scissors-settings"))); // Scissors
+ com.github.atlasmediagroup.scissors.ScissorsConfig.init(((File) console.options.valueOf("scissors-settings"))); // Scissors this.console.paperConfigurations.reloadConfigs(this.console);
for (ServerLevel world : this.console.getAllLevels()) { for (ServerLevel world : this.console.getAllLevels()) {
// world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty
world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) @@ -1067,6 +1068,7 @@ public final class CraftServer implements Server {
@@ -979,6 +980,7 @@ public final class CraftServer implements Server {
this.reloadData(); this.reloadData();
org.spigotmc.SpigotConfig.registerCommands(); // Spigot org.spigotmc.SpigotConfig.registerCommands(); // Spigot
com.destroystokyo.paper.PaperConfig.registerCommands(); // Paper io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper
+ com.github.atlasmediagroup.scissors.ScissorsConfig.registerCommands(); // Scissors + me.totalfreedom.scissors.ScissorsConfig.registerCommands(); // Scissors
this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*");
this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions");
@@ -2566,6 +2568,12 @@ public final class CraftServer implements Server { @@ -2912,6 +2914,14 @@ public final class CraftServer implements Server {
return com.destroystokyo.paper.PaperConfig.config; return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console);
} }
+ // Scissors start
+ @Override + @Override
+ public YamlConfiguration getScissorsConfig() + public YamlConfiguration getScissorsConfig()
+ { + {
+ return com.github.atlasmediagroup.scissors.ScissorsConfig.config; + return me.totalfreedom.scissors.ScissorsConfig.config;
+ } + }
+ // Scissors end
+ +
@Override @Override
public void restart() { public void restart() {
org.spigotmc.RestartCommand.restart(); org.spigotmc.RestartCommand.restart();
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index d033caf5dabbd2a240286c5623b3d287ae5cbdd9..facfcc3f478a21240fa2938c94de7dc599eeafd3 100644 index d1c8671ba5ca95c425e4c679445d55c4bbba217e..3be40632c70f5a7994ada3e61616dca632cef2da 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java --- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -160,6 +160,14 @@ public class Main { @@ -180,6 +180,20 @@ public class Main {
.defaultsTo(new File[] {}) .defaultsTo("Unknown Server")
.describedAs("Jar file"); .describedAs("Name");
// Paper end // Paper end
+ +
+ // Scissors start + // Scissors start
+ acceptsAll(asList("scissors", "scissors-settings"), "File for scissors settings") + acceptsAll(asList("scissors-dir", "scissors-settings-directory"), "Directory for Scissors settings")
+ .withRequiredArg()
+ .ofType(File.class)
+ .defaultsTo(new File(io.papermc.paper.configuration.PaperConfigurations.CONFIG_DIR))
+ .describedAs("Config directory");
+
+ acceptsAll(asList("scissors", "scissors-settings"), "File for Scissors settings")
+ .withRequiredArg() + .withRequiredArg()
+ .ofType(File.class) + .ofType(File.class)
+ .defaultsTo(new File("scissors.yml")) + .defaultsTo(new File("scissors.yml"))
+ .describedAs("Yml file"); + .describedAs("YAML file");
+ // Scissors end + // Scissors end
} }
}; };

View File

@@ -6,18 +6,18 @@ Subject: [PATCH] Prevent attributes with invalid namespaces from being applied
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
index 2e3220cbbea5f6cb9acb7f8fbaf2ff8f91b09234..3ea83a093f698a055566f45a7927c289ff9a6955 100644 index f9741039dada19391e80d9623f2d8cabc1089506..38238d9e6d464990caf10557997c6ca88ee100c0 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaItem.java
@@ -45,6 +45,7 @@ import net.minecraft.nbt.NbtIo; @@ -46,6 +46,7 @@ import net.minecraft.nbt.NbtIo;
import net.minecraft.nbt.StringTag; import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.TextComponent; import net.minecraft.network.chat.Component;
+import net.minecraft.resources.ResourceLocation; // Scissors +import net.minecraft.resources.ResourceLocation; // Scissors
import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.BlockItem;
import org.apache.commons.codec.binary.Base64; import net.minecraft.world.level.block.state.BlockState;
import org.apache.commons.lang.Validate; import org.apache.commons.lang3.EnumUtils;
@@ -481,7 +482,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta { @@ -486,7 +487,7 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
AttributeModifier attribMod = CraftAttributeInstance.convert(nmsModifier); AttributeModifier attribMod = CraftAttributeInstance.convert(nmsModifier);
String attributeName = CraftAttributeMap.convertIfNeeded(entry.getString(ATTRIBUTES_IDENTIFIER.NBT)); // Paper String attributeName = CraftAttributeMap.convertIfNeeded(entry.getString(ATTRIBUTES_IDENTIFIER.NBT)); // Paper

View File

@@ -0,0 +1,38 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sat, 9 Apr 2022 13:00:27 -0600
Subject: [PATCH] Don't query player data in the `nbt` component
diff --git a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
index 8a6799b50062c1b7b141ee1568dc523f9ee7ecfd..80e7b0889235288b60d813a569daecb7e08e108e 100644
--- a/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
+++ b/src/main/java/net/minecraft/network/chat/contents/EntityDataSource.java
@@ -1,5 +1,6 @@
package net.minecraft.network.chat.contents;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import java.util.List;
@@ -11,6 +12,7 @@ import net.minecraft.commands.arguments.selector.EntitySelector;
import net.minecraft.commands.arguments.selector.EntitySelectorParser;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.entity.player.Player; // Scissors
public record EntityDataSource(String selectorPattern, @Nullable EntitySelector compiledSelector) implements DataSource {
public EntityDataSource(String rawPath) {
@@ -31,7 +33,11 @@ public record EntityDataSource(String selectorPattern, @Nullable EntitySelector
public Stream<CompoundTag> getData(CommandSourceStack source) throws CommandSyntaxException {
if (this.compiledSelector != null) {
List<? extends Entity> list = this.compiledSelector.findEntities(source);
- return list.stream().map(NbtPredicate::getEntityTagToCompare);
+ // Scissors start
+ Stream<? extends Entity> stream = list.stream();
+ if (ScissorsConfig.excludePlayersFromNbtComponents) stream = stream.filter((entity) -> !(entity instanceof Player));
+ return stream.map(NbtPredicate::getEntityTagToCompare);
+ // Scissors end
} else {
return Stream.empty();
}

View File

@@ -1,165 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: ayunami2000 <spwilliamsiam@gmail.com>
Date: Mon, 28 Mar 2022 17:02:21 -0400
Subject: [PATCH] Block server-side chunkbans
diff --git a/src/main/java/net/minecraft/network/PacketEncoder.java b/src/main/java/net/minecraft/network/PacketEncoder.java
index b039a32b805fc02033fa862a1c40c4a51639e69a..b2227f01bc90351a4a3f73fa835dd89bde15632e 100644
--- a/src/main/java/net/minecraft/network/PacketEncoder.java
+++ b/src/main/java/net/minecraft/network/PacketEncoder.java
@@ -5,8 +5,22 @@ import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
import io.papermc.paper.adventure.PaperAdventure; // Paper
import java.io.IOException;
+import java.util.Collections;
+import net.minecraft.ChatFormatting;
+import net.minecraft.core.NonNullList;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.network.chat.Component;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow;
+import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.network.protocol.game.ClientboundChatPacket;
+import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket;
+import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
+import net.minecraft.network.protocol.game.ClientboundLevelChunkPacket;
+import net.minecraft.network.protocol.game.ClientboundMapItemDataPacket;
+import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
+import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
+import net.minecraft.world.item.ItemStack;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
@@ -21,6 +35,23 @@ public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
this.flow = side;
}
+ // Scissors start
+ private static int tryWrite(Packet packet, FriendlyByteBuf friendlyByteBuf, ChannelHandlerContext channelHandlerContext, int i) {
+ friendlyByteBuf.writeVarInt(i);
+ friendlyByteBuf.adventure$locale = channelHandlerContext.channel().attr(PaperAdventure.LOCALE_ATTRIBUTE).get();
+
+ int j = friendlyByteBuf.writerIndex();
+ packet.write(friendlyByteBuf);
+ int k = friendlyByteBuf.writerIndex() - j;
+ int packetLength = friendlyByteBuf.readableBytes();
+ if (k > 8388608 || packetLength > MAX_PACKET_SIZE) {
+ throw new SkipPacketException(new IllegalArgumentException("Packet too big (is " + k + "): " + packet));
+ }
+
+ return k;
+ }
+ // Scissors end
+
@Override
protected void encode(ChannelHandlerContext channelHandlerContext, Packet<?> packet, ByteBuf byteBuf) throws Exception {
ConnectionProtocol connectionProtocol = channelHandlerContext.channel().attr(Connection.ATTRIBUTE_PROTOCOL).get();
@@ -36,35 +67,68 @@ public class PacketEncoder extends MessageToByteEncoder<Packet<?>> {
throw new IOException("Can't serialize unregistered packet");
} else {
FriendlyByteBuf friendlyByteBuf = new FriendlyByteBuf(byteBuf);
- friendlyByteBuf.writeVarInt(integer);
- friendlyByteBuf.adventure$locale = channelHandlerContext.channel().attr(PaperAdventure.LOCALE_ATTRIBUTE).get(); // Paper
-
+ // Scissors start
+ int k;
try {
- int i = friendlyByteBuf.writerIndex();
- packet.write(friendlyByteBuf);
- int j = friendlyByteBuf.writerIndex() - i;
- if (j > 8388608) {
- throw new IllegalArgumentException("Packet too big (is " + j + ", should be less than 8388608): " + packet);
- }
+ k = tryWrite(packet, friendlyByteBuf, channelHandlerContext, integer);
} catch (Throwable var9) {
- LOGGER.error("Packet encoding of packet ID {} threw (skippable? {})", integer, packet.isSkippable(), var9); // Paper - WHAT WAS IT? WHO DID THIS TO YOU? WHAT DID YOU SEE?
- if (packet.isSkippable()) {
- throw new SkipPacketException(var9);
- } else {
- throw var9;
+ packet = capPacket(packet, integer);
+ if (packet == null) {
+ throw new SkipPacketException(new IllegalArgumentException("Packet too big: " + packet));
}
+ friendlyByteBuf.clear();
+ k = tryWrite(packet, friendlyByteBuf, channelHandlerContext, integer);
}
-
- // Paper start
- int packetLength = friendlyByteBuf.readableBytes();
- if (packetLength > MAX_PACKET_SIZE) {
- throw new PacketTooLargeException(packet, packetLength);
- }
- // Paper end
+ // Scissors end
}
}
}
+ // Scissors start
+ private static Packet capPacket(Packet packet, int i)
+ {
+ if (packet instanceof ClientboundBlockEntityDataPacket blockEntityDataPacket)
+ {
+ packet = new ClientboundBlockEntityDataPacket(blockEntityDataPacket.getPos(), blockEntityDataPacket.getType(), new CompoundTag());
+ }
+ else if (packet instanceof ClientboundLevelChunkPacket chunkPacket)
+ {
+ chunkPacket.clearNBT();
+ }
+ else if (packet instanceof ClientboundSetEntityDataPacket)
+ {
+ return null; // Skip
+ }
+ else if (packet instanceof ClientboundContainerSetContentPacket containerSetContentPacket)
+ {
+ packet = new ClientboundContainerSetContentPacket(containerSetContentPacket.getContainerId(), containerSetContentPacket.getStateId(), NonNullList.create(), ItemStack.EMPTY);
+ }
+ else if (packet instanceof ClientboundSetEquipmentPacket setEquipmentPacket)
+ {
+ packet = new ClientboundSetEquipmentPacket(setEquipmentPacket.getEntity(), Collections.emptyList());
+ }
+ else if (packet instanceof ClientboundContainerSetSlotPacket containerSetSlotPacket)
+ {
+ packet = new ClientboundContainerSetSlotPacket(containerSetSlotPacket.getContainerId(), containerSetSlotPacket.getStateId(), containerSetSlotPacket.getSlot(), ItemStack.EMPTY);
+ }
+ else if (packet instanceof ClientboundMapItemDataPacket mapItemDataPacket)
+ {
+ packet = new ClientboundMapItemDataPacket(mapItemDataPacket.getMapId(), mapItemDataPacket.getScale(), mapItemDataPacket.isLocked(), null, null);
+ }
+ else if (packet instanceof ClientboundChatPacket chatPacket)
+ {
+ return null;
+ }
+ else
+ {
+ LOGGER.error("Packet with ID {} was too large and was not caught. Please report this to the Scissors developers.", i);
+ return null;
+ }
+
+ return packet;
+ }
+ // Scissors end
+
// Paper start
private static int MAX_PACKET_SIZE = 2097152;
diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java
index 60d72e488bc77cd913328be400ca374a873b4561..1af2260e7bab81fca24784172dd31e06e9adb1e1 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacket.java
@@ -50,6 +50,13 @@ public class ClientboundLevelChunkPacket implements Packet<ClientGamePacketListe
}
// Paper end
+ // Scissors start
+ public void clearNBT() {
+ this.blockEntitiesTags.clear();
+ this.extraPackets.clear();
+ }
+ // Scissors end
+
// Paper start - Anti-Xray - Add chunk packet info
@Deprecated public ClientboundLevelChunkPacket(LevelChunk chunk) { this(chunk, true); } // Notice for updates: Please make sure this constructor isn't used anywhere
public ClientboundLevelChunkPacket(LevelChunk chunk, boolean modifyBlocks) {

View File

@@ -0,0 +1,142 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 8 Apr 2022 23:38:12 -0300
Subject: [PATCH] Limit string tag visitors to 1024 elements
diff --git a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
index e07cc7970955ce240754cfe424d768c2bba0241a..a4f41bb4ec6cb20f782668c714229b61415cfdfb 100644
--- a/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
+++ b/src/main/java/net/minecraft/nbt/SnbtPrinterTagVisitor.java
@@ -89,6 +89,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
public void visitByteArray(ByteArrayTag element) {
StringBuilder stringBuilder = (new StringBuilder("[")).append("B").append(";");
byte[] bs = element.getAsByteArray();
+ if (bs.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
for(int i = 0; i < bs.length; ++i) {
stringBuilder.append(" ").append((int)bs[i]).append("B");
@@ -105,6 +106,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
public void visitIntArray(IntArrayTag element) {
StringBuilder stringBuilder = (new StringBuilder("[")).append("I").append(";");
int[] is = element.getAsIntArray();
+ if (is.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
for(int i = 0; i < is.length; ++i) {
stringBuilder.append(" ").append(is[i]);
@@ -122,6 +124,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
String string = "L";
StringBuilder stringBuilder = (new StringBuilder("[")).append("L").append(";");
long[] ls = element.getAsLongArray();
+ if (ls.length > 1024) { this.result = stringBuilder.append("]").toString(); return; } // Scissors
for(int i = 0; i < ls.length; ++i) {
stringBuilder.append(" ").append(ls[i]).append("L");
@@ -136,7 +139,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
@Override
public void visitList(ListTag element) {
- if (element.isEmpty()) {
+ if (element.isEmpty() || element.size() > 1024) { // Scissors
this.result = "[]";
} else {
StringBuilder stringBuilder = new StringBuilder("[");
@@ -166,7 +169,7 @@ public class SnbtPrinterTagVisitor implements TagVisitor {
@Override
public void visitCompound(CompoundTag compound) {
- if (compound.isEmpty()) {
+ if (compound.isEmpty() || compound.size() > 1024) { // Scissors
this.result = "{}";
} else {
StringBuilder stringBuilder = new StringBuilder("{");
diff --git a/src/main/java/net/minecraft/nbt/StringTagVisitor.java b/src/main/java/net/minecraft/nbt/StringTagVisitor.java
index a687a0f17df30126d53a1e3a669dc6d157c23ed5..2c50f41dd8034af16fcceca75eeb6c7a9940e327 100644
--- a/src/main/java/net/minecraft/nbt/StringTagVisitor.java
+++ b/src/main/java/net/minecraft/nbt/StringTagVisitor.java
@@ -53,6 +53,7 @@ public class StringTagVisitor implements TagVisitor {
public void visitByteArray(ByteArrayTag element) {
this.builder.append("[B;");
byte[] bs = element.getAsByteArray();
+ if (bs.length > 1024) { this.builder.append(']'); return; } // Scissors
for(int i = 0; i < bs.length; ++i) {
if (i != 0) {
@@ -69,6 +70,7 @@ public class StringTagVisitor implements TagVisitor {
public void visitIntArray(IntArrayTag element) {
this.builder.append("[I;");
int[] is = element.getAsIntArray();
+ if (is.length > 1024) { this.builder.append(']'); return; } // Scissors
for(int i = 0; i < is.length; ++i) {
if (i != 0) {
@@ -85,6 +87,7 @@ public class StringTagVisitor implements TagVisitor {
public void visitLongArray(LongArrayTag element) {
this.builder.append("[L;");
long[] ls = element.getAsLongArray();
+ if (ls.length > 1024) { this.builder.append(']'); return; } // Scissors
for(int i = 0; i < ls.length; ++i) {
if (i != 0) {
@@ -100,6 +103,7 @@ public class StringTagVisitor implements TagVisitor {
@Override
public void visitList(ListTag element) {
this.builder.append('[');
+ if (element.size() > 1024) { this.builder.append(']'); return; } // Scissors
for(int i = 0; i < element.size(); ++i) {
if (i != 0) {
@@ -116,6 +120,7 @@ public class StringTagVisitor implements TagVisitor {
public void visitCompound(CompoundTag compound) {
this.builder.append('{');
List<String> list = Lists.newArrayList(compound.getAllKeys());
+ if (list.size() > 1024) { this.builder.append('}'); return; } // Scissors
Collections.sort(list);
for(String string : list) {
diff --git a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
index 149def3da0b92f64e4fc04630965dce44884f938..c9d753f37bd65e35f8a4e2eb5c6fe8f74d5d1606 100644
--- a/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
+++ b/src/main/java/net/minecraft/nbt/TextComponentTagVisitor.java
@@ -97,6 +97,7 @@ public class TextComponentTagVisitor implements TagVisitor {
Component component = Component.literal("B").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
byte[] bs = element.getAsByteArray();
+ if (bs.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
for(int i = 0; i < bs.length; ++i) {
MutableComponent mutableComponent2 = Component.literal(String.valueOf((int)bs[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER);
@@ -115,6 +116,7 @@ public class TextComponentTagVisitor implements TagVisitor {
Component component = Component.literal("I").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
int[] is = element.getAsIntArray();
+ if (is.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
for(int i = 0; i < is.length; ++i) {
mutableComponent.append(" ").append(Component.literal(String.valueOf(is[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER));
@@ -132,6 +134,7 @@ public class TextComponentTagVisitor implements TagVisitor {
Component component = Component.literal("L").withStyle(SYNTAX_HIGHLIGHTING_NUMBER_TYPE);
MutableComponent mutableComponent = Component.literal("[").append(component).append(";");
long[] ls = element.getAsLongArray();
+ if (ls.length > 1024) { this.result = mutableComponent.append("]"); return; } // Scissors
for(int i = 0; i < ls.length; ++i) {
Component component2 = Component.literal(String.valueOf(ls[i])).withStyle(SYNTAX_HIGHLIGHTING_NUMBER);
@@ -147,7 +150,7 @@ public class TextComponentTagVisitor implements TagVisitor {
@Override
public void visitList(ListTag element) {
- if (element.isEmpty()) {
+ if (element.isEmpty() || element.size() > 1024) { // Scissors
this.result = Component.literal("[]");
} else if (INLINE_ELEMENT_TYPES.contains(element.getElementType()) && element.size() <= 8) {
String string = ELEMENT_SEPARATOR + " ";
@@ -190,7 +193,7 @@ public class TextComponentTagVisitor implements TagVisitor {
@Override
public void visitCompound(CompoundTag compound) {
- if (compound.isEmpty()) {
+ if (compound.isEmpty() || compound.size() > 1024) { // Scissors
this.result = Component.literal("{}");
} else {
MutableComponent mutableComponent = Component.literal("{");

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Fixes creative-killing potion effects and certain potion
diff --git a/src/main/java/net/minecraft/world/effect/MobEffect.java b/src/main/java/net/minecraft/world/effect/MobEffect.java diff --git a/src/main/java/net/minecraft/world/effect/MobEffect.java b/src/main/java/net/minecraft/world/effect/MobEffect.java
index 79e036d79dec2ec4404baf02c23ba5ccad20cdce..506be74453c6ecc52f05a48b1d95f82175fa6159 100644 index 53cc6befb752affcfec65e18365f6d369448d407..181f5aa262689617ff3ad766dae485c36b88c9aa 100644
--- a/src/main/java/net/minecraft/world/effect/MobEffect.java --- a/src/main/java/net/minecraft/world/effect/MobEffect.java
+++ b/src/main/java/net/minecraft/world/effect/MobEffect.java +++ b/src/main/java/net/minecraft/world/effect/MobEffect.java
@@ -47,6 +47,7 @@ public class MobEffect { @@ -57,6 +57,7 @@ public class MobEffect {
} }
public void applyEffectTick(LivingEntity entity, int amplifier) { public void applyEffectTick(LivingEntity entity, int amplifier) {
@@ -17,7 +17,7 @@ index 79e036d79dec2ec4404baf02c23ba5ccad20cdce..506be74453c6ecc52f05a48b1d95f821
if (this == MobEffects.REGENERATION) { if (this == MobEffects.REGENERATION) {
if (entity.getHealth() < entity.getMaxHealth()) { if (entity.getHealth() < entity.getMaxHealth()) {
entity.heal(1.0F, RegainReason.MAGIC_REGEN); // CraftBukkit entity.heal(1.0F, RegainReason.MAGIC_REGEN); // CraftBukkit
@@ -75,17 +76,31 @@ public class MobEffect { @@ -83,17 +84,31 @@ public class MobEffect {
// CraftBukkit end // CraftBukkit end
} }
} else if ((this != MobEffects.HEAL || entity.isInvertedHealAndHarm()) && (this != MobEffects.HARM || !entity.isInvertedHealAndHarm())) { } else if ((this != MobEffects.HEAL || entity.isInvertedHealAndHarm()) && (this != MobEffects.HARM || !entity.isInvertedHealAndHarm())) {
@@ -25,9 +25,9 @@ index 79e036d79dec2ec4404baf02c23ba5ccad20cdce..506be74453c6ecc52f05a48b1d95f821
+ // Scissors start + // Scissors start
+ amplifier = Math.min(Math.abs(amplifier), 124); + amplifier = Math.min(Math.abs(amplifier), 124);
+ if (!god && (this == MobEffects.HARM && !entity.isInvertedHealAndHarm() || this == MobEffects.HEAL && entity.isInvertedHealAndHarm())) { + if (!god && (this == MobEffects.HARM && !entity.isInvertedHealAndHarm() || this == MobEffects.HEAL && entity.isInvertedHealAndHarm())) {
entity.hurt(DamageSource.MAGIC, (float) (6 << amplifier));
}
+ // Scissors end + // Scissors end
entity.hurt(entity.damageSources().magic(), (float) (6 << amplifier));
}
} else { } else {
- entity.heal((float) Math.max(4 << amplifier, 0), RegainReason.MAGIC); // CraftBukkit - entity.heal((float) Math.max(4 << amplifier, 0), RegainReason.MAGIC); // CraftBukkit
+ // Scissors start + // Scissors start

View File

@@ -1,19 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Business Goose <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Mon, 18 Apr 2022 16:55:19 +0100 Date: Mon, 18 Apr 2022 16:55:19 +0100
Subject: [PATCH] Fix negative death times Subject: [PATCH] Fix negative death times
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 99a5074adbe2a254ae6115b3548f1fcd30ba2489..68ae4dfe3f4a77605b19607b5f04a2a6d07d6fc8 100644 index e11d7283662834047b2ff81a2fd25a4263792deb..4bd7eea49a0720063db2a8ed10f53bd19e9499ad 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -623,7 +623,7 @@ public abstract class LivingEntity extends Entity { @@ -629,7 +629,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
protected void tickDeath() { protected void tickDeath() {
++this.deathTime; ++this.deathTime;
- if (this.deathTime >= 20 && !this.isRemoved() && !this.level.isClientSide()) { // CraftBukkit - (this.deathTicks == 20) -> (this.deathTicks >= 20 && !this.dead) - if (this.deathTime >= 20 && !this.level().isClientSide() && !this.isRemoved()) {
+ if ((this.deathTime >= 20 || this.deathTime <= 0) && !this.isRemoved() && !this.level.isClientSide()) { // CraftBukkit - (this.deathTicks == 20) -> (this.deathTicks >= 20 && !this.dead) + if ((this.deathTime >= 20 || this.deathTime <= 0) && !this.level().isClientSide() && !this.isRemoved()) { // Scissors
this.level.broadcastEntityEvent(this, (byte) 60); this.level().broadcastEntityEvent(this, (byte) 60);
this.remove(Entity.RemovalReason.KILLED); this.remove(Entity.RemovalReason.KILLED);
} }

View File

@@ -1,25 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Wed, 30 Mar 2022 02:01:55 -0600
Subject: [PATCH] Validate String UUIDs during the CompoundTag -> GameProfile
conversion process
diff --git a/src/main/java/net/minecraft/nbt/NbtUtils.java b/src/main/java/net/minecraft/nbt/NbtUtils.java
index 24f009fa3b84323b4c43e0ed15c224d16a7ede81..1d1876c78f82ce36d45320e4575c79fdc284ce0e 100644
--- a/src/main/java/net/minecraft/nbt/NbtUtils.java
+++ b/src/main/java/net/minecraft/nbt/NbtUtils.java
@@ -78,7 +78,12 @@ public final class NbtUtils {
// Paper start - support string UUID's
if (compound.contains("Id", 8)) {
- uUID = UUID.fromString(compound.getString("Id"));
+ // Scissors start - Validate String UUIDs in game profiles
+ try {
+ uUID = UUID.fromString(compound.getString("Id"));
+ } catch (Exception ignored) {
+ }
+ // Scissors end
}
// Paper end
if (compound.hasUUID("Id")) {

View File

@@ -1,23 +1,23 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Business Goose <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Thu, 21 Apr 2022 13:52:32 +0100 Date: Thu, 21 Apr 2022 13:52:32 +0100
Subject: [PATCH] Limit amount of vehicle collision checks to 3 and discard Subject: [PATCH] Limit amount of vehicle collision checks to 3 and discard
vehicles if they collide with more than 15 other entities vehicles if they collide with more than 15 other entities
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
index 309bafd257d4932cfd69c2c212b32306938cd234..17c6aef70089730d9ca3d20d242f6755851b9494 100644 index 9948a28dae4edba877c13ef0156be5ff58df3fa2..9e25d4a3384d0157b99f7bd4d5f7edce032ece6b 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
@@ -8,6 +8,7 @@ import com.mojang.datafixers.util.Pair; @@ -8,6 +8,7 @@ import com.mojang.datafixers.util.Pair;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
+import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeUnit; // Scissors
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.BlockUtil; import net.minecraft.BlockUtil;
import net.minecraft.Util; import net.minecraft.Util;
@@ -109,6 +110,7 @@ public abstract class AbstractMinecart extends Entity { @@ -107,6 +108,7 @@ public abstract class AbstractMinecart extends Entity {
private double flyingX = 0.949999988079071D; // Paper - restore vanilla precision private double flyingX = 0.949999988079071D; // Paper - restore vanilla precision
private double flyingY = 0.949999988079071D; // Paper - restore vanilla precision private double flyingY = 0.949999988079071D; // Paper - restore vanilla precision
private double flyingZ = 0.949999988079071D; // Paper - restore vanilla precision private double flyingZ = 0.949999988079071D; // Paper - restore vanilla precision
@@ -25,49 +25,47 @@ index 309bafd257d4932cfd69c2c212b32306938cd234..17c6aef70089730d9ca3d20d242f6755
public double maxSpeed = 0.4D; public double maxSpeed = 0.4D;
// CraftBukkit end // CraftBukkit end
@@ -425,8 +427,10 @@ public abstract class AbstractMinecart extends Entity { @@ -434,8 +436,10 @@ public abstract class AbstractMinecart extends Entity {
if (this.getMinecartType() == AbstractMinecart.Type.RIDEABLE && this.getDeltaMovement().horizontalDistanceSqr() > 0.01D) { if (this.getMinecartType() == AbstractMinecart.Type.RIDEABLE && this.getDeltaMovement().horizontalDistanceSqr() > 0.01D) {
List<Entity> list = this.level.getEntities(this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D), EntitySelector.pushableBy(this)); List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D), EntitySelector.pushableBy(this));
- if (!list.isEmpty()) { - if (!list.isEmpty()) {
- for (int l = 0; l < list.size(); ++l) { - for (int l = 0; l < list.size(); ++l) {
+ // Scissors - Add a collision debounce + // Scissors start
+ if (!list.isEmpty() && (System.currentTimeMillis() - lastLargeCollision) >= TimeUnit.SECONDS.toMillis(5)) { // Using TimeUnit for better code readability + if (!list.isEmpty() && (System.currentTimeMillis() - lastLargeCollision) >= TimeUnit.SECONDS.toMillis(5)) { // Using TimeUnit for better code readability
+ // Scissors - Limit amount of vehicle collision checks to 3 maximum
+ for (int l = 0; l < Math.min(3, list.size()); ++l) { + for (int l = 0; l < Math.min(3, list.size()); ++l) {
+ // Scissors end
Entity entity = (Entity) list.get(l); Entity entity = (Entity) list.get(l);
if (!(entity instanceof Player) && !(entity instanceof IronGolem) && !(entity instanceof AbstractMinecart) && !this.isVehicle() && !entity.isPassenger()) { if (!(entity instanceof Player) && !(entity instanceof IronGolem) && !(entity instanceof AbstractMinecart) && !this.isVehicle() && !entity.isPassenger()) {
@@ -453,6 +457,16 @@ public abstract class AbstractMinecart extends Entity { @@ -462,6 +466,14 @@ public abstract class AbstractMinecart extends Entity {
entity.push(this); entity.push(this);
} }
} }
+ +
+ // Scissors - Add a collision debounce + // Scissors start - Add a collision debounce
+ if (list.size() > 3) {
+ lastLargeCollision = System.currentTimeMillis();
+ }
+
+ // Scissors - Delete entity if the collision amount is over 15
+ if (list.size() > 15) { + if (list.size() > 15) {
+ this.discard(); + this.discard();
+ } else if (list.size() > 3) {
+ lastLargeCollision = System.currentTimeMillis();
+ } + }
+ // Scissors end
} }
} else { } else {
Iterator iterator = this.level.getEntities(this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D)).iterator(); Iterator iterator = this.level().getEntities(this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D)).iterator();
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
index 391454a58d18d7373b974e094fd62514ca0d0b6b..52b75015c89be054ef2bfe1f4780a69540b0f032 100644 index 35aeba4e8430e6419caa9db4a0b931a994228618..289eb39b15a283b0d9dbc33823f3a73f87202907 100644
--- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java
@@ -4,6 +4,7 @@ import com.google.common.collect.Lists; @@ -5,6 +5,7 @@ import com.google.common.collect.UnmodifiableIterator;
import com.google.common.collect.UnmodifiableIterator;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
+import java.util.concurrent.TimeUnit; import java.util.function.IntFunction;
+import java.util.concurrent.TimeUnit; // Scissors
import javax.annotation.Nullable; import javax.annotation.Nullable;
import net.minecraft.BlockUtil; import net.minecraft.BlockUtil;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@@ -108,6 +109,7 @@ public class Boat extends Entity { @@ -109,6 +110,7 @@ public class Boat extends Entity implements VariantHolder<Boat.Type> {
public double unoccupiedDeceleration = -1; public double unoccupiedDeceleration = -1;
public boolean landBoats = false; public boolean landBoats = false;
// CraftBukkit end // CraftBukkit end
@@ -75,35 +73,31 @@ index 391454a58d18d7373b974e094fd62514ca0d0b6b..52b75015c89be054ef2bfe1f4780a695
public Boat(EntityType<? extends Boat> type, Level world) { public Boat(EntityType<? extends Boat> type, Level world) {
super(type, world); super(type, world);
@@ -400,10 +402,12 @@ public class Boat extends Entity { @@ -421,10 +423,10 @@ public class Boat extends Entity implements VariantHolder<Boat.Type> {
this.checkInsideBlocks(); this.checkInsideBlocks();
List<Entity> list = this.level.getEntities(this, this.getBoundingBox().inflate(0.20000000298023224D, -0.009999999776482582D, 0.20000000298023224D), EntitySelector.pushableBy(this)); List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox().inflate(0.20000000298023224D, -0.009999999776482582D, 0.20000000298023224D), EntitySelector.pushableBy(this));
- if (!list.isEmpty()) { - if (!list.isEmpty()) {
+ // Scissors - Add collision debounce + if (!list.isEmpty() && (System.currentTimeMillis() - lastLargeCollision) >= TimeUnit.SECONDS.toMillis(5)) { // Scissors - add collision debounce, using TimeUnit for better code readability
+ if (!list.isEmpty() && (System.currentTimeMillis() - lastLargeCollision) >= TimeUnit.SECONDS.toMillis(5)) { // Using TimeUnit for better code readability boolean flag = !this.level().isClientSide && !(this.getControllingPassenger() instanceof Player);
boolean flag = !this.level.isClientSide && !(this.getControllingPassenger() instanceof Player);
- for (int j = 0; j < list.size(); ++j) { - for (int j = 0; j < list.size(); ++j) {
+ // Scissors - Limit amount of vehicle collision checks to 3 maximum + for (int j = 0; j < Math.min(3, list.size()); ++j) { // Scissors - Limit amount of vehicle collision checks to 3 maximum
+ for (int j = 0; j < Math.min(3, list.size()); ++j) {
Entity entity = (Entity) list.get(j); Entity entity = (Entity) list.get(j);
if (!entity.hasPassenger(this)) { if (!entity.hasPassenger((Entity) this)) {
@@ -414,6 +418,16 @@ public class Boat extends Entity { @@ -435,6 +437,14 @@ public class Boat extends Entity implements VariantHolder<Boat.Type> {
} }
} }
} }
+ +
+ // Scissors - Add collision debounce + // Scissors start - Add collision debounce
+ if (list.size() > 3) {
+ lastLargeCollision = System.currentTimeMillis();
+ }
+
+ // Scissors - Delete entity if the collision amount is over 15
+ if (list.size() > 15) { + if (list.size() > 15) {
+ this.discard(); + this.discard();
+ } else if (list.size() > 3) {
+ lastLargeCollision = System.currentTimeMillis();
+ } + }
+ // Scissors end
} }
} }

View File

@@ -0,0 +1,181 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Telesphoreo <me@telesphoreo.me>
Date: Sat, 11 Jun 2022 22:56:59 -0500
Subject: [PATCH] Add custom classes used by Scissors
diff --git a/src/main/java/me/totalfreedom/scissors/MathUtility.java b/src/main/java/me/totalfreedom/scissors/MathUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..754b578b575137a9c48cb20dee965a9388fedb3c
--- /dev/null
+++ b/src/main/java/me/totalfreedom/scissors/MathUtility.java
@@ -0,0 +1,29 @@
+package me.totalfreedom.scissors;
+
+public class MathUtility
+{
+ public static int clampInt(int number, int minimum, int maximum)
+ {
+ return Math.min(Math.max(number, minimum), maximum);
+ }
+
+ public static long clampLong(long number, long minimum, long maximum)
+ {
+ return Math.min(Math.max(number, minimum), maximum);
+ }
+
+ public static double clampDouble(double number, double minimum, double maximum)
+ {
+ return Math.min(Math.max(number, minimum), maximum);
+ }
+
+ public static int safeDoubleToInt(double number)
+ {
+ return (int) clampDouble(number, Integer.MIN_VALUE, Integer.MAX_VALUE);
+ }
+
+ public static int safeLongToInt(long number)
+ {
+ return (int) clampLong(number, Integer.MIN_VALUE, Integer.MAX_VALUE);
+ }
+}
diff --git a/src/main/java/me/totalfreedom/scissors/NbtUtility.java b/src/main/java/me/totalfreedom/scissors/NbtUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3efac47ee700d5a7ff26452d6bcbf2f687a32cf
--- /dev/null
+++ b/src/main/java/me/totalfreedom/scissors/NbtUtility.java
@@ -0,0 +1,75 @@
+package me.totalfreedom.scissors;
+
+import java.nio.charset.StandardCharsets;
+import javax.annotation.Nullable;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag;
+import net.minecraft.nbt.Tag;
+
+public class NbtUtility
+{
+ public static final long MAXIMUM_SIZE = (256 * 1024);
+
+ public static long getTagSize(@Nullable Tag tag, int depth)
+ {
+ if (depth > 512)
+ {
+ return 0;
+ }
+ if (tag == null)
+ {
+ return 0;
+ }
+
+ long size = 0;
+
+ if (tag.getType() == CompoundTag.TYPE)
+ {
+ CompoundTag compoundTag = (CompoundTag) tag;
+ for (String key : compoundTag.getAllKeys())
+ {
+ size += key.getBytes(StandardCharsets.UTF_8).length;
+ size += getTagSize(compoundTag.get(key), depth + 1);
+ }
+ }
+ else if (tag.getType() == ListTag.TYPE)
+ {
+ ListTag listTag = (ListTag) tag;
+ for (Tag tag1 : listTag)
+ {
+ size += getTagSize(tag1, depth + 1);
+ }
+ }
+ else
+ {
+ size += tag.getAsString().getBytes(StandardCharsets.UTF_8).length;
+ }
+
+ return size;
+ }
+
+ public static long getTagSize(@Nullable CompoundTag tag)
+ {
+ return getTagSize(tag, 0);
+ }
+
+ public static boolean isTooLarge(@Nullable CompoundTag tag)
+ {
+ if (tag == null)
+ {
+ return false;
+ }
+ return getTagSize(tag) > MAXIMUM_SIZE;
+ }
+
+ public static class Item
+ {
+ public static CompoundTag removeItemData(CompoundTag tag)
+ {
+ CompoundTag cleaned = new CompoundTag();
+ cleaned.putString("id", tag.getString("id"));
+ cleaned.putByte("Count", tag.getByte("Count"));
+ return cleaned;
+ }
+ }
+}
diff --git a/src/main/java/me/totalfreedom/scissors/PositionUtility.java b/src/main/java/me/totalfreedom/scissors/PositionUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5dcc833d6f2c0daa1d0c2a7ab81430f25e0b2f3
--- /dev/null
+++ b/src/main/java/me/totalfreedom/scissors/PositionUtility.java
@@ -0,0 +1,53 @@
+package me.totalfreedom.scissors;
+
+import net.minecraft.core.BlockPos;
+import net.minecraft.world.entity.Entity;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.border.WorldBorder;
+import net.minecraft.world.phys.Vec3;
+
+public class PositionUtility
+{
+
+ public static Vec3 getValidVec3FromBlockPos(BlockPos blockPos, Entity entity)
+ {
+ final BlockPos validBlockPos = getValidBlockPos(blockPos, entity);
+
+ return new Vec3(validBlockPos.getX(), validBlockPos.getY(), validBlockPos.getZ());
+ }
+
+ public static BlockPos getValidBlockPos(BlockPos blockPos, Entity entity)
+ {
+ final Level level = entity.level();
+
+ try
+ {
+ if (level.isInWorldBounds(blockPos))
+ {
+ return blockPos;
+ }
+ else
+ {
+ final int x = blockPos.getX();
+ final int y = blockPos.getY();
+ final int z = blockPos.getZ();
+
+ final WorldBorder worldBorder = level.getWorldBorder();
+
+ final int maxX = MathUtility.safeDoubleToInt(worldBorder.getMaxX());
+ final int maxY = level.getMaxBuildHeight();
+ final int maxZ = MathUtility.safeDoubleToInt(worldBorder.getMaxZ());
+
+ final int minX = MathUtility.safeDoubleToInt(worldBorder.getMinX());
+ final int minY = level.getMinBuildHeight();
+ final int minZ = MathUtility.safeDoubleToInt(worldBorder.getMinZ());
+
+ return new BlockPos(MathUtility.clampInt(x, minX, maxX), MathUtility.clampInt(y, minY, maxY), MathUtility.clampInt(z, minZ, maxZ));
+ }
+ }
+ catch (Exception e)
+ { // If we throw some sort of exception due to the position being crazy, catch it
+ return new BlockPos(0, 0, 0);
+ }
+ }
+}

View File

@@ -1,95 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Business Goose <arclicious@vivaldi.net>
Date: Mon, 4 Apr 2022 00:16:54 +0100
Subject: [PATCH] Prevent abusable entities from being spawned by spawners
diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java
index 569cef8fcb1e3e1e8b66dad4fa9b956b44542bf1..f844e0b1e44f0b45b1febadf02d7b37d3099fbdb 100644
--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
+++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java
@@ -19,7 +19,9 @@ import net.minecraft.util.StringUtil;
import net.minecraft.util.random.WeightedRandomList;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
+import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.Mob;
+import net.minecraft.world.entity.MobCategory;
import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.entity.SpawnGroupData;
import net.minecraft.world.entity.SpawnPlacements;
@@ -31,6 +33,7 @@ public abstract class BaseSpawner {
private static final Logger LOGGER = LogManager.getLogger();
private static final int EVENT_SPAWN = 1;
+ public static List<MobCategory> whitelistedCategories = List.of(MobCategory.CREATURE, MobCategory.MONSTER, MobCategory.WATER_CREATURE, MobCategory.UNDERGROUND_WATER_CREATURE, MobCategory.AMBIENT); // Scissors
public static WeightedRandomList<SpawnData> EMPTY_POTENTIALS = WeightedRandomList.create(); // Paper - private->public
public int spawnDelay = 20;
public WeightedRandomList<SpawnData> spawnPotentials;
@@ -64,6 +67,13 @@ public abstract class BaseSpawner {
public ResourceLocation getEntityId(@Nullable Level world, BlockPos pos) {
String s = this.nextSpawnData.getTag().getString("id");
+ // Scissors start
+ Optional<EntityType<?>> entityType = EntityType.byString(s);
+ if (entityType.isPresent() && !whitelistedCategories.contains(entityType.get().getCategory())) {
+ return null;
+ }
+ // Scissors end
+
try {
return StringUtil.isNullOrEmpty(s) ? null : new ResourceLocation(s);
} catch (ResourceLocationException resourcekeyinvalidexception) {
@@ -73,6 +83,12 @@ public abstract class BaseSpawner {
}
public void setEntityId(EntityType<?> type) {
+ // Scissors start - Don't allow unnatural entities to be added to spawners
+ if (!whitelistedCategories.contains(type.getCategory())) {
+ return;
+ }
+ // Scissors end
+
this.nextSpawnData.getTag().putString("id", Registry.ENTITY_TYPE.getKey(type).toString());
this.spawnPotentials = BaseSpawner.EMPTY_POTENTIALS; // CraftBukkit - SPIGOT-3496, MC-92282
}
@@ -121,7 +137,7 @@ public abstract class BaseSpawner {
CompoundTag nbttagcompound = this.nextSpawnData.getTag();
Optional<EntityType<?>> optional = EntityType.by(nbttagcompound);
- if (!optional.isPresent()) {
+ if (!(optional.isPresent() && whitelistedCategories.contains(optional.get().getCategory()))) { // Scissors - Don't try spawning in entites that aren't whitelisted
this.delay(world, pos);
return;
}
@@ -254,12 +270,16 @@ public abstract class BaseSpawner {
ListTag nbttaglist = nbt.getList("SpawnPotentials", 10);
for (int i = 0; i < nbttaglist.size(); ++i) {
- list.add(new SpawnData(nbttaglist.getCompound(i)));
+ // Scissors start - Filter unnatural entity types from being added
+ if (isValid(nbttaglist.getCompound(i))) {
+ list.add(new SpawnData(nbttaglist.getCompound(i)));
+ }
+ // Scissors end
}
}
this.spawnPotentials = WeightedRandomList.create((List) list);
- if (nbt.contains("SpawnData", 10)) {
+ if (nbt.contains("SpawnData", 10) && isValid(nbt.getCompound("SpawnData"))) { // Scissors - Filter unnatural entity types from being added
this.setNextSpawnData(world, pos, new SpawnData(1, nbt.getCompound("SpawnData")));
} else if (!list.isEmpty()) {
this.spawnPotentials.getRandom(this.random).ifPresent((mobspawnerdata) -> {
@@ -371,4 +391,11 @@ public abstract class BaseSpawner {
public double getoSpin() {
return this.oSpin;
}
+
+ // Scissors start
+ public boolean isValid(CompoundTag tag) {
+ Optional<EntityType<?>> type = EntityType.by(tag);
+ return type.isPresent() && whitelistedCategories.contains(type.get().getCategory());
+ }
+ // Scissors end
}

View File

@@ -1,27 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Video <videogamesm12@gmail.com>
Date: Sat, 9 Apr 2022 13:00:27 -0600
Subject: [PATCH] Don't query player data in the `nbt` component
diff --git a/src/main/java/net/minecraft/network/chat/NbtComponent.java b/src/main/java/net/minecraft/network/chat/NbtComponent.java
index f5f2ec1192303bc55a64dce3e0457e4531a35ba7..62613d9fccd74fe16512fe1fe703dc6db0166b28 100644
--- a/src/main/java/net/minecraft/network/chat/NbtComponent.java
+++ b/src/main/java/net/minecraft/network/chat/NbtComponent.java
@@ -22,6 +22,7 @@ import net.minecraft.nbt.Tag;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
+import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.block.entity.BlockEntity;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -218,7 +219,7 @@ public abstract class NbtComponent extends BaseComponent implements ContextAware
protected Stream<CompoundTag> getData(CommandSourceStack source) throws CommandSyntaxException {
if (this.compiledSelector != null) {
List<? extends Entity> list = this.compiledSelector.findEntities(source);
- return list.stream().map(NbtPredicate::getEntityTagToCompare);
+ return list.stream().filter((entity) -> !(entity instanceof Player)).map(NbtPredicate::getEntityTagToCompare); // Scissors - Don't query NBT from players
} else {
return Stream.empty();
}

View File

@@ -1,79 +1,126 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Business Goose <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Sun, 1 May 2022 01:20:13 +0100 Date: Mon, 18 Apr 2022 03:56:09 +0100
Subject: [PATCH] Account for items inside containers Subject: [PATCH] Reset large tags
diff --git a/src/main/java/net/minecraft/world/ContainerHelper.java b/src/main/java/net/minecraft/world/ContainerHelper.java diff --git a/src/main/java/net/minecraft/world/ContainerHelper.java b/src/main/java/net/minecraft/world/ContainerHelper.java
index 4092c7a8c2b0d9d26e6f4d97386735236300d132..ad3af6d90b68bc55c29243da8814516575299bf0 100644 index 4092c7a8c2b0d9d26e6f4d97386735236300d132..04c47cf1a920ae6c356449df801227ee14f6dfb7 100644
--- a/src/main/java/net/minecraft/world/ContainerHelper.java --- a/src/main/java/net/minecraft/world/ContainerHelper.java
+++ b/src/main/java/net/minecraft/world/ContainerHelper.java +++ b/src/main/java/net/minecraft/world/ContainerHelper.java
@@ -1,5 +1,6 @@ @@ -2,6 +2,7 @@ package net.minecraft.world;
package net.minecraft.world;
+import com.github.atlasmediagroup.scissors.NbtUtility;
import java.util.List; import java.util.List;
import java.util.function.Predicate; import java.util.function.Predicate;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
@@ -22,10 +23,14 @@ public class ContainerHelper { import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
@@ -22,10 +23,12 @@ public class ContainerHelper {
public static CompoundTag saveAllItems(CompoundTag nbt, NonNullList<ItemStack> stacks, boolean setIfEmpty) { public static CompoundTag saveAllItems(CompoundTag nbt, NonNullList<ItemStack> stacks, boolean setIfEmpty) {
ListTag listTag = new ListTag(); ListTag listTag = new ListTag();
+ // Scissors - Account for items inside containers + long total = 0; // Scissors
+ long total = 0;
for(int i = 0; i < stacks.size(); ++i) { for(int i = 0; i < stacks.size(); ++i) {
ItemStack itemStack = stacks.get(i); ItemStack itemStack = stacks.get(i);
+
if (!itemStack.isEmpty()) { if (!itemStack.isEmpty()) {
+ total += NbtUtility.getTagSize(itemStack.getTag()); + total += NbtUtility.getTagSize(itemStack.getTag()); // Scissors
CompoundTag compoundTag = new CompoundTag(); CompoundTag compoundTag = new CompoundTag();
compoundTag.putByte("Slot", (byte)i); compoundTag.putByte("Slot", (byte)i);
itemStack.save(compoundTag); itemStack.save(compoundTag);
@@ -33,7 +38,7 @@ public class ContainerHelper { @@ -33,7 +36,7 @@ public class ContainerHelper {
} }
} }
- if (!listTag.isEmpty() || setIfEmpty) { - if (!listTag.isEmpty() || setIfEmpty) {
+ if ((!listTag.isEmpty() || setIfEmpty) && !(total > NbtUtility.MAXIMUM_SIZE)) { + if ((!listTag.isEmpty() || setIfEmpty) && !(total > NbtUtility.MAXIMUM_SIZE)) { // Scissors
nbt.put("Items", listTag); nbt.put("Items", listTag);
} }
@@ -42,11 +47,18 @@ public class ContainerHelper { @@ -42,11 +45,19 @@ public class ContainerHelper {
public static void loadAllItems(CompoundTag nbt, NonNullList<ItemStack> stacks) { public static void loadAllItems(CompoundTag nbt, NonNullList<ItemStack> stacks) {
ListTag listTag = nbt.getList("Items", 10); ListTag listTag = nbt.getList("Items", 10);
+ // Scissors - Account for items inside containers + long total = 0; // Scissors - Account for items inside containers
+ long total = 0;
for(int i = 0; i < listTag.size(); ++i) { for(int i = 0; i < listTag.size(); ++i) {
CompoundTag compoundTag = listTag.getCompound(i); CompoundTag compoundTag = listTag.getCompound(i);
int j = compoundTag.getByte("Slot") & 255; int j = compoundTag.getByte("Slot") & 255;
if (j >= 0 && j < stacks.size()) { if (j >= 0 && j < stacks.size()) {
+ // Scissors start
+ total += NbtUtility.getTagSize(compoundTag); + total += NbtUtility.getTagSize(compoundTag);
+ if (total >= NbtUtility.MAXIMUM_SIZE) { + if (total >= NbtUtility.MAXIMUM_SIZE) {
+ stacks.clear(); + stacks.clear();
+ break; + break;
+ } + }
+ // Scissors end
stacks.set(j, ItemStack.of(compoundTag)); stacks.set(j, ItemStack.of(compoundTag));
} }
} }
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index d138660e459b2d09ba9dd7ae2bf3da499d9ae25c..8c5fe0166a5442a2fa4f212d7c53343c937f53f1 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -21,6 +21,7 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.ChatFormatting;
import net.minecraft.Util;
import net.minecraft.advancements.CriteriaTriggers;
@@ -253,6 +254,12 @@ public final class ItemStack {
// CraftBukkit - break into own method
private void load(CompoundTag nbttagcompound) {
+ // Scissors start - Reset large tags
+ if (NbtUtility.isTooLarge(nbttagcompound)) {
+ // Reset tag without destroying item
+ nbttagcompound = NbtUtility.Item.removeItemData(nbttagcompound);
+ }
+ // Scissors end
this.item = (Item) BuiltInRegistries.ITEM.get(new ResourceLocation(nbttagcompound.getString("id")));
this.count = nbttagcompound.getByte("Count");
if (nbttagcompound.contains("tag", 10)) {
@@ -556,7 +563,11 @@ public final class ItemStack {
nbt.putString("id", minecraftkey == null ? "minecraft:air" : minecraftkey.toString());
nbt.putByte("Count", (byte) this.count);
if (this.tag != null) {
- nbt.put("tag", this.tag.copy());
+ // Scissors start - Don't save large tags
+ if (!NbtUtility.isTooLarge(this.tag)) {
+ nbt.put("tag", this.tag.copy());
+ }
+ // Scissors end
}
return nbt;
@@ -886,6 +897,7 @@ public final class ItemStack {
// Paper end
public void setTag(@Nullable CompoundTag nbt) {
+ if (NbtUtility.isTooLarge(nbt)) return; // Scissors - Ignore large tags
this.tag = nbt;
this.processEnchantOrder(this.tag); // Paper
if (this.getItem().canBeDepleted()) {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 1bb79768fe3be8a44a00e1f8686f95eed0dc2cf2..73e95e631ac622de897775399d205de66c4d8ff8 100644 index 40e59b8db83aec1143e3c394427e916beea7c01f..f292aa0016e6f741b36ddc1417f6f63d248f987f 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -1,5 +1,6 @@ @@ -9,6 +9,7 @@ import java.util.Iterator;
package net.minecraft.world.level.block.entity; import java.util.List;
import java.util.Map;
+import com.github.atlasmediagroup.scissors.NbtUtility; import javax.annotation.Nullable;
import com.google.common.collect.Lists; +import me.totalfreedom.scissors.NbtUtility; // Scissors
import com.google.common.collect.Maps; import net.minecraft.SharedConstants;
import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; import net.minecraft.Util;
@@ -209,6 +210,17 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit import net.minecraft.core.BlockPos;
@@ -212,6 +213,17 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>(); public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>();
public List<ItemStack> getContents() { public List<ItemStack> getContents() {
+ // Scissors - Account for items inside containers + // Scissors start - Account for items inside containers
+ long total = 0; + long total = 0;
+ +
+ for (ItemStack item : this.items) { + for (ItemStack item : this.items) {
@@ -83,26 +130,26 @@ index 1bb79768fe3be8a44a00e1f8686f95eed0dc2cf2..73e95e631ac622de897775399d205de6
+ if (total > NbtUtility.MAXIMUM_SIZE) { + if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear(); + this.items.clear();
+ } + }
+ + // Scissors end
return this.items; return this.items;
} }
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
index f494063ead9c6303fb3ca880aba2a877ae8d83ab..7ec2f7f9ea8e75d5a04c700fce783a21a9b560f8 100644 index 416aa989ebb18a8741cc9d605a1180ab830f6643..a9a8c9e68e5b767dec2c26495685da88e0caa627 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BarrelBlockEntity.java
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package net.minecraft.world.level.block.entity; package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.NbtUtility; +import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
@@ -35,6 +36,17 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity { @@ -34,6 +35,17 @@ public class BarrelBlockEntity extends RandomizableContainerBlockEntity {
@Override @Override
public List<ItemStack> getContents() { public List<ItemStack> getContents() {
+ // Scissors - Account for items inside containers + // Scissors start - Account for items inside containers
+ long total = 0; + long total = 0;
+ +
+ for (ItemStack item : this.items) { + for (ItemStack item : this.items) {
@@ -112,26 +159,27 @@ index f494063ead9c6303fb3ca880aba2a877ae8d83ab..7ec2f7f9ea8e75d5a04c700fce783a21
+ if (total > NbtUtility.MAXIMUM_SIZE) { + if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear(); + this.items.clear();
+ } + }
+ + // Scissors end
return this.items; return this.items;
} }
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
index 3e71a16ae77601f589f4283a72ef8b68aae60db3..27fb605dbaefbb3a8eed25a519af4062e67aee26 100644 index c57efcb9a79337ec791e4e8f6671612f0a82b441..2cbb8170953cb555411db8c171a3d1d91eb799bb 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BrewingStandBlockEntity.java
@@ -1,5 +1,6 @@ @@ -3,6 +3,7 @@ package net.minecraft.world.level.block.entity;
package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.NbtUtility;
import java.util.Arrays; import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -72,6 +73,17 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements +import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
@@ -73,6 +74,17 @@ public class BrewingStandBlockEntity extends BaseContainerBlockEntity implements
} }
public List<ItemStack> getContents() { public List<ItemStack> getContents() {
+ // Scissors - Account for items inside containers + // Scissors start - Account for items inside containers
+ long total = 0; + long total = 0;
+ +
+ for (ItemStack item : this.items) { + for (ItemStack item : this.items) {
@@ -141,26 +189,26 @@ index 3e71a16ae77601f589f4283a72ef8b68aae60db3..27fb605dbaefbb3a8eed25a519af4062
+ if (total > NbtUtility.MAXIMUM_SIZE) { + if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear(); + this.items.clear();
+ } + }
+ + // Scissors end
return this.items; return this.items;
} }
diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java
index 52de9852f87d346714a950b60a0004d386ac10f0..14854956a81c5f6da4d3f3ff2e910f37f32c21f7 100644 index a71414397bd45ee7bcacfeef0041d80dfa25f114..f51abf1722e98d7ce9e616d84472d847e597eafb 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package net.minecraft.world.level.block.entity; package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.NbtUtility; +import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
@@ -41,6 +42,17 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement @@ -40,6 +41,17 @@ public class ChestBlockEntity extends RandomizableContainerBlockEntity implement
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public List<ItemStack> getContents() { public List<ItemStack> getContents() {
+ // Scissors - Account for items inside containers + // Scissors start - Account for items inside containers
+ long total = 0; + long total = 0;
+ +
+ for (ItemStack item : this.items) { + for (ItemStack item : this.items) {
@@ -170,26 +218,26 @@ index 52de9852f87d346714a950b60a0004d386ac10f0..14854956a81c5f6da4d3f3ff2e910f37
+ if (total > NbtUtility.MAXIMUM_SIZE) { + if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear(); + this.items.clear();
+ } + }
+ + // Scissors end
return this.items; return this.items;
} }
diff --git a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
index cfec89db4300bdb96a220540ee87892d22215e9d..ea14263bc11a80657b099342c1d6bb239ea1c80e 100644 index 881379681c39230a00b3a1f11cd87498984396c7..d0513b72cdaec3b67b9341d251367b193bafa40c 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/DispenserBlockEntity.java
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package net.minecraft.world.level.block.entity; package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.NbtUtility; +import me.totalfreedom.scissors.NbtUtility; // Scissors
import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList; import net.minecraft.core.NonNullList;
@@ -31,6 +32,17 @@ public class DispenserBlockEntity extends RandomizableContainerBlockEntity { import net.minecraft.nbt.CompoundTag;
@@ -28,6 +29,17 @@ public class DispenserBlockEntity extends RandomizableContainerBlockEntity {
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public List<ItemStack> getContents() { public List<ItemStack> getContents() {
+ // Scissors - Account for items inside containers + // Scissors start - Account for items inside containers
+ long total = 0; + long total = 0;
+ +
+ for (ItemStack item : this.items) { + for (ItemStack item : this.items) {
@@ -199,26 +247,27 @@ index cfec89db4300bdb96a220540ee87892d22215e9d..ea14263bc11a80657b099342c1d6bb23
+ if (total > NbtUtility.MAXIMUM_SIZE) { + if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear(); + this.items.clear();
+ } + }
+ + // Scissors end
return this.items; return this.items;
} }
diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index 06ffdf7301c8c9a02b4aa3693c69984064c8e085..ed28d8a30f9238a94ff6aff00740b77d12bfb8d6 100644 index b11f51762ca289d99eaa49e66e31e58595bcea4e..06adfdc61f1064c1ec0db34632a8740fc09a1782 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -1,5 +1,6 @@ @@ -6,6 +6,7 @@ import java.util.function.BooleanSupplier;
package net.minecraft.world.level.block.entity; import java.util.stream.Collectors;
import java.util.stream.IntStream;
+import com.github.atlasmediagroup.scissors.NbtUtility; import javax.annotation.Nullable;
import java.util.Iterator; +import me.totalfreedom.scissors.NbtUtility; // Scissors
import java.util.List; import net.minecraft.core.BlockPos;
import java.util.function.BooleanSupplier; import net.minecraft.core.Direction;
@@ -53,7 +54,19 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen import net.minecraft.core.NonNullList;
@@ -56,6 +57,17 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
private int maxStack = MAX_STACK; private int maxStack = MAX_STACK;
public List<ItemStack> getContents() { public List<ItemStack> getContents() {
+ // Scissors - Account for items inside containers + // Scissors start - Account for items inside containers
+ long total = 0; + long total = 0;
+ +
+ for (ItemStack item : this.items) { + for (ItemStack item : this.items) {
@@ -228,28 +277,27 @@ index 06ffdf7301c8c9a02b4aa3693c69984064c8e085..ed28d8a30f9238a94ff6aff00740b77d
+ if (total > NbtUtility.MAXIMUM_SIZE) { + if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.items.clear(); + this.items.clear();
+ } + }
+ + // Scissors end
return this.items; return this.items;
+
} }
public void onOpen(CraftHumanEntity who) {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
index 01d77f800a1497418f08b8d52b0b7995bfbb5f4e..281d5f875de4bfaca1efc281e595cfa0dc492ede 100644 index b7686fd63b7c5d88c3a12ec4ee9bc01a17f997e0..db3a4a8cd19da9775bb0884c33494f1e8591b1fa 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/ShulkerBoxBlockEntity.java
@@ -1,5 +1,6 @@ @@ -3,6 +3,7 @@ package net.minecraft.world.level.block.entity;
package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.NbtUtility;
import java.util.List; import java.util.List;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -257,7 +258,19 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl +import me.totalfreedom.scissors.NbtUtility; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.NonNullList;
@@ -60,6 +61,17 @@ public class ShulkerBoxBlockEntity extends RandomizableContainerBlockEntity impl
public boolean opened;
@Override public List<ItemStack> getContents() {
protected NonNullList<ItemStack> getItems() { + // Scissors start - Account for items inside containers
+ // Scissors - Account for items inside containers
+ long total = 0; + long total = 0;
+ +
+ for (ItemStack item : this.itemStacks) { + for (ItemStack item : this.itemStacks) {
@@ -259,9 +307,7 @@ index 01d77f800a1497418f08b8d52b0b7995bfbb5f4e..281d5f875de4bfaca1efc281e595cfa0
+ if (total > NbtUtility.MAXIMUM_SIZE) { + if (total > NbtUtility.MAXIMUM_SIZE) {
+ this.itemStacks.clear(); + this.itemStacks.clear();
+ } + }
+ + // Scissors end
return this.itemStacks; return this.itemStacks;
+
} }
@Override

View File

@@ -5,17 +5,15 @@ Subject: [PATCH] Don't log invalid teams to console
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 68ae4dfe3f4a77605b19607b5f04a2a6d07d6fc8..b7efb87767570992e9bb14510e510f2b37ec2226 100644 index 4bd7eea49a0720063db2a8ed10f53bd19e9499ad..953c2702880b358c0da4b8117c77b76bae849271 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -816,7 +816,9 @@ public abstract class LivingEntity extends Entity { @@ -861,7 +861,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
boolean flag = scoreboardteam != null && this.level.getScoreboard().addPlayerToTeam(this.getStringUUID(), scoreboardteam); boolean flag = scoreboardteam != null && this.level().getScoreboard().addPlayerToTeam(this.getStringUUID(), scoreboardteam);
if (!flag) { if (!flag) {
- LivingEntity.LOGGER.warn("Unable to add mob to team \"{}\" (that team probably doesn't exist)", s); - LivingEntity.LOGGER.warn("Unable to add mob to team \"{}\" (that team probably doesn't exist)", s);
+ // Scissors start - Prevent log spam possible with this error message, easily provokable by players in creative. + // Scissors - Prevent log spam possible with this error message, easily provokable by players in creative.
+ // LivingEntity.LOGGER.warn("Unable to add mob to team \"{}\" (that team probably doesn't exist)", s);
+ // Scissors end
} }
} }

View File

@@ -1,18 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 8 Apr 2022 23:38:12 -0300
Subject: [PATCH] Limit ListTags to 1024 elements
diff --git a/src/main/java/net/minecraft/nbt/ListTag.java b/src/main/java/net/minecraft/nbt/ListTag.java
index 88bac72edf19c578902f49d20353989ed4d96f8f..6963f2720fcc9888f62f5a1382dd96d82f598ac8 100644
--- a/src/main/java/net/minecraft/nbt/ListTag.java
+++ b/src/main/java/net/minecraft/nbt/ListTag.java
@@ -34,6 +34,7 @@ public class ListTag extends CollectionTag<Tag> {
list.add(tagType.load(dataInput, i + 1, nbtAccounter));
}
+ if(j > 1024) return new ListTag(Lists.newArrayListWithCapacity(0), b);
return new ListTag(list, b);
}
}

View File

@@ -1,24 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Kevin Raneri <kevin.raneri@gmail.com>
Date: Sat, 2 Apr 2022 02:12:13 -0400
Subject: [PATCH] Fix lectern quick move
diff --git a/src/main/java/net/minecraft/world/inventory/LecternMenu.java b/src/main/java/net/minecraft/world/inventory/LecternMenu.java
index ff79925bc6437222f9ceb133e21bbc0600cc74ed..e5498a5703f282160b8171a0b81711cfc24d323a 100644
--- a/src/main/java/net/minecraft/world/inventory/LecternMenu.java
+++ b/src/main/java/net/minecraft/world/inventory/LecternMenu.java
@@ -120,6 +120,13 @@ public class LecternMenu extends AbstractContainerMenu {
}
}
+ // Paper start
+ @Override
+ public ItemStack quickMoveStack(net.minecraft.world.entity.player.Player player, int index) {
+ return ItemStack.EMPTY;
+ }
+ // Paper end
+
@Override
public void setData(int id, int value) {
super.setData(id, value);

View File

@@ -5,19 +5,20 @@ Subject: [PATCH] Fixes out of bounds HangingEntity crash exploit
diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java
index ca9decf85dd1af0baf0d34a48aa67cbb9f4eb586..50cbd324b87300d6b872581571fa97ad9fa54396 100644 index 66cf0a6cd1525ecf2615809210a26d55f445d07d..74fb79d4ea11f88f2c0de65b492a5fecc49684f1 100644
--- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java --- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java
@@ -265,7 +265,11 @@ public abstract class HangingEntity extends Entity { @@ -270,6 +270,13 @@ public abstract class HangingEntity extends Entity {
@Override
public void readAdditionalSaveData(CompoundTag nbt) { public void readAdditionalSaveData(CompoundTag nbt) {
- this.pos = new BlockPos(nbt.getInt("TileX"), nbt.getInt("TileY"), nbt.getInt("TileZ")); BlockPos blockposition = new BlockPos(nbt.getInt("TileX"), nbt.getInt("TileY"), nbt.getInt("TileZ"));
+ // Scissors start - Fixes exploit where bad TileX, TileY, and TileZ coordinates can crash servers
+ BlockPos pos = new BlockPos(nbt.getInt("TileX"), nbt.getInt("TileY"), nbt.getInt("TileZ"));
+ if (level.isLoadedAndInBounds(pos))
+ this.pos = pos;
+ // Scissors end
}
public abstract int getWidth(); + // Scissors start - Fixes exploit where bad TileX, TileY, and TileZ coordinates can crash servers
+ if (level().isLoadedAndInBounds(blockposition))
+ {
+ this.pos = blockposition;
+ }
+ // Scissors end
+
if (!blockposition.closerThan(this.blockPosition(), 16.0D)) {
HangingEntity.LOGGER.error("Hanging entity at invalid position: {}", blockposition);
} else {

View File

@@ -1,38 +1,33 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Mon, 4 Jul 2022 17:02:52 +0100 Date: Mon, 4 Jul 2022 22:12:19 +0100
Subject: [PATCH] Add MasterBlockFireEvent Subject: [PATCH] Add MasterBlockFireEvent
diff --git a/src/main/java/net/minecraft/world/level/block/CommandBlock.java b/src/main/java/net/minecraft/world/level/block/CommandBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/CommandBlock.java b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
index fd73e9100feac8c7bf9a5fee21a0ab2d502dc3e0..4912d24683f5094b0b93798c3ad378516eed4746 100644 index 2e7c03b00bc941b86df6a7f1b2b188c9f0aede22..0ae03d3934ad7b2b38afa45a65c7753dcbe796d2 100644
--- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java --- a/src/main/java/net/minecraft/world/level/block/CommandBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CommandBlock.java
@@ -1,6 +1,6 @@ @@ -1,5 +1,6 @@
package net.minecraft.world.level.block; package net.minecraft.world.level.block;
-import java.util.Random; +import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; // Scissors
+import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent; import com.mojang.logging.LogUtils;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel; @@ -25,6 +26,7 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties;
@@ -25,8 +25,10 @@ import net.minecraft.world.level.block.state.properties.DirectionProperty; import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.block.state.properties.DirectionProperty;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import org.apache.logging.log4j.LogManager; +import org.bukkit.Location; // Scissors
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
+import org.bukkit.Location;
+import org.bukkit.event.block.BlockRedstoneEvent;
-import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit
+import java.util.Random; @@ -117,6 +119,15 @@ public class CommandBlock extends BaseEntityBlock implements GameMasterBlock {
public class CommandBlock extends BaseEntityBlock implements GameMasterBlock {
@@ -116,6 +118,15 @@ public class CommandBlock extends BaseEntityBlock implements GameMasterBlock {
} }
private void execute(BlockState state, Level world, BlockPos pos, BaseCommandBlock executor, boolean hasCommand) { private void execute(BlockState state, Level world, BlockPos pos, BaseCommandBlock executor, boolean hasCommand) {
+ // Scissors - Add master block fire event + // Scissors start - Add master block fire event
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()));
+ +
+ if (!event.callEvent()) + if (!event.callEvent())
@@ -44,45 +39,33 @@ index fd73e9100feac8c7bf9a5fee21a0ab2d502dc3e0..4912d24683f5094b0b93798c3ad37851
if (hasCommand) { if (hasCommand) {
executor.performCommand(world); executor.performCommand(world);
} else { } else {
diff --git a/src/main/java/net/minecraft/world/level/block/StructureBlock.java b/src/main/java/net/minecraft/world/level/block/StructureBlock.java
index 4142687c6bb08ac8a156fcaee39ce26308924615..fd9b338117f5cb4575b60bb5bc5664c548132265 100644
--- a/src/main/java/net/minecraft/world/level/block/StructureBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/StructureBlock.java
@@ -1,6 +1,8 @@
package net.minecraft.world.level.block;
import javax.annotation.Nullable;
+
+import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
diff --git a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
index c391db3b6cbe3140a92aec44fb52e90455209217..c93d21142c5f7b2799eeac7a8314ffdb7360162e 100644 index 182e16c1d968707a11329150d71b7d01df6c6e52..8582a9369cffe0eebeb82a81fc413d0bf4ad28ed 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
@@ -1,5 +1,6 @@ @@ -2,6 +2,7 @@ package net.minecraft.world.level.block.entity;
package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent;
import com.google.common.collect.Lists;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.Optional;
@@ -28,6 +29,7 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox; +import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; // Scissors
import net.minecraft.world.level.levelgen.structure.PoolElementStructurePiece; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import net.minecraft.core.Holder;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.core.Registry;
+import org.bukkit.Location; @@ -17,6 +18,7 @@ import net.minecraft.world.level.block.JigsawBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.levelgen.structure.pools.JigsawPlacement;
import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool;
+import org.bukkit.Location; // Scissors
public class JigsawBlockEntity extends BlockEntity { public class JigsawBlockEntity extends BlockEntity {
public static final String TARGET = "target"; public static final String TARGET = "target";
@@ -120,11 +122,21 @@ public class JigsawBlockEntity extends BlockEntity { @@ -107,6 +109,16 @@ public class JigsawBlockEntity extends BlockEntity {
} }
public void generate(ServerLevel world, int maxDepth, boolean keepJigsaws) { public void generate(ServerLevel world, int maxDepth, boolean keepJigsaws) {
+ // Scissors - Add master block fire event + // Scissors start - Add master block fire event
+ final BlockPos blockPos = this.getBlockPos(); + final BlockPos pos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ()));
+ +
+ if (!event.callEvent()) + if (!event.callEvent())
+ { + {
@@ -90,49 +73,43 @@ index c391db3b6cbe3140a92aec44fb52e90455209217..c93d21142c5f7b2799eeac7a8314ffdb
+ } + }
+ // Scissors end + // Scissors end
+ +
ChunkGenerator chunkGenerator = world.getChunkSource().getGenerator(); BlockPos blockPos = this.getBlockPos().relative(this.getBlockState().getValue(JigsawBlock.ORIENTATION).front());
StructureManager structureManager = world.getStructureManager(); Registry<StructureTemplatePool> registry = world.registryAccess().registryOrThrow(Registries.TEMPLATE_POOL);
StructureFeatureManager structureFeatureManager = world.structureFeatureManager(); // Paper start - Replace getHolderOrThrow with a null check
Random random = world.getRandom();
- BlockPos blockPos = this.getBlockPos();
+ // BlockPos blockPos = this.getBlockPos(); // Scissors - We've already defined this in the scope
List<PoolElementStructurePiece> list = Lists.newArrayList();
StructureTemplate structureTemplate = new StructureTemplate();
structureTemplate.fillFromWorld(world, blockPos, new Vec3i(1, 1, 1), false, (Block)null);
diff --git a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
index a9b186e5a60838443d2ad2ee82ed3f4803a4899a..9134c8fc0b9363eadf6da288029b7a33c6d5d405 100644 index 9792bf3ee083f571f1f4089d30beb586839f5f6b..fa6592cdc916d3578fccc6c0075eb616fd3f73eb 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
@@ -6,6 +6,8 @@ import java.util.Optional; @@ -5,6 +5,7 @@ import java.util.Objects;
import java.util.Random; import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import javax.annotation.Nullable; import javax.annotation.Nullable;
+ +import me.totalfreedom.scissors.event.block.MasterBlockFireEvent; // Scissors
+import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent;
import net.minecraft.ResourceLocationException; import net.minecraft.ResourceLocationException;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@@ -29,6 +31,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.BlockRotProce @@ -29,6 +30,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.BlockRotProce
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
+import org.bukkit.Location; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
+import org.bukkit.Location; // Scissors
public class StructureBlockEntity extends BlockEntity { public class StructureBlockEntity extends BlockEntity {
private static final int SCAN_CORNER_BLOCKS_RANGE = 5; private static final int SCAN_CORNER_BLOCKS_RANGE = 5;
@@ -266,7 +269,6 @@ public class StructureBlockEntity extends BlockEntity { @@ -264,7 +266,7 @@ public class StructureBlockEntity extends BlockEntity {
return false; return false;
} else { } else {
BlockPos blockPos = this.getBlockPos(); BlockPos blockPos = this.getBlockPos();
- int i = 80; - int i = 80;
+ // Scissors - Obfuscation fixes
BlockPos blockPos2 = new BlockPos(blockPos.getX() - 80, this.level.getMinBuildHeight(), blockPos.getZ() - 80); BlockPos blockPos2 = new BlockPos(blockPos.getX() - 80, this.level.getMinBuildHeight(), blockPos.getZ() - 80);
BlockPos blockPos3 = new BlockPos(blockPos.getX() + 80, this.level.getMaxBuildHeight() - 1, blockPos.getZ() + 80); BlockPos blockPos3 = new BlockPos(blockPos.getX() + 80, this.level.getMaxBuildHeight() - 1, blockPos.getZ() + 80);
Stream<BlockPos> stream = this.getRelatedCorners(blockPos2, blockPos3); Stream<BlockPos> stream = this.getRelatedCorners(blockPos2, blockPos3);
@@ -323,6 +325,16 @@ public class StructureBlockEntity extends BlockEntity { @@ -321,6 +323,16 @@ public class StructureBlockEntity extends BlockEntity {
public boolean saveStructure(boolean bl) { public boolean saveStructure(boolean bl) {
if (this.mode == StructureMode.SAVE && !this.level.isClientSide && this.structureName != null) { if (this.mode == StructureMode.SAVE && !this.level.isClientSide && this.structureName != null) {
+ // Scissors - Add master block fire event + // Scissors start - Add master block fire event
+ final BlockPos pos = this.getBlockPos(); + final BlockPos pos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ()));
+ +
@@ -144,12 +121,12 @@ index a9b186e5a60838443d2ad2ee82ed3f4803a4899a..9134c8fc0b9363eadf6da288029b7a33
+ +
BlockPos blockPos = this.getBlockPos().offset(this.structurePos); BlockPos blockPos = this.getBlockPos().offset(this.structurePos);
ServerLevel serverLevel = (ServerLevel)this.level; ServerLevel serverLevel = (ServerLevel)this.level;
StructureManager structureManager = serverLevel.getStructureManager(); StructureTemplateManager structureTemplateManager = serverLevel.getStructureManager();
@@ -360,6 +372,16 @@ public class StructureBlockEntity extends BlockEntity { @@ -358,6 +370,16 @@ public class StructureBlockEntity extends BlockEntity {
public boolean loadStructure(ServerLevel world, boolean bl) { public boolean loadStructure(ServerLevel world, boolean bl) {
if (this.mode == StructureMode.LOAD && this.structureName != null) { if (this.mode == StructureMode.LOAD && this.structureName != null) {
+ // Scissors - Add master block fire event + // Scissors start - Add master block fire event
+ final BlockPos blockPos = this.getBlockPos(); + final BlockPos blockPos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
+ +
@@ -159,32 +136,14 @@ index a9b186e5a60838443d2ad2ee82ed3f4803a4899a..9134c8fc0b9363eadf6da288029b7a33
+ } + }
+ // Scissors end + // Scissors end
+ +
StructureManager structureManager = world.getStructureManager(); StructureTemplateManager structureTemplateManager = world.getStructureManager();
Optional<StructureTemplate> optional; Optional<StructureTemplate> optional;
@@ -376,7 +398,16 @@ public class StructureBlockEntity extends BlockEntity { @@ -403,6 +425,16 @@ public class StructureBlockEntity extends BlockEntity {
}
public boolean loadStructure(ServerLevel world, boolean bl, StructureTemplate structureTemplate) {
- BlockPos blockPos = this.getBlockPos();
+ // Scissors - Add master block fire event
+ final BlockPos blockPos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
+
+ if (!event.callEvent())
+ {
+ return false;
+ }
+ // Scissors end
+
if (!StringUtil.isNullOrEmpty(structureTemplate.getAuthor())) {
this.author = structureTemplate.getAuthor();
}
@@ -405,6 +436,16 @@ public class StructureBlockEntity extends BlockEntity {
} }
public void unloadStructure() { public void unloadStructure() {
+ // Scissors - Add master block fire event + // Scissors start - Add master block fire event
+ final BlockPos blockPos = this.getBlockPos(); + final BlockPos blockPos = this.getBlockPos();
+ final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ())); + final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
+ +
@@ -196,4 +155,4 @@ index a9b186e5a60838443d2ad2ee82ed3f4803a4899a..9134c8fc0b9363eadf6da288029b7a33
+ +
if (this.structureName != null) { if (this.structureName != null) {
ServerLevel serverLevel = (ServerLevel)this.level; ServerLevel serverLevel = (ServerLevel)this.level;
StructureManager structureManager = serverLevel.getStructureManager(); StructureTemplateManager structureTemplateManager = serverLevel.getStructureManager();

View File

@@ -1,21 +1,21 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Tue, 5 Jul 2022 03:34:36 +0100 Date: Tue, 5 Jul 2022 04:12:31 +0100
Subject: [PATCH] Add spectator teleport event Subject: [PATCH] Add spectator teleport event
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 83333ae9c8e8c1edc6e7f02468bd8dc7e44bb66e..ca595abe940463a62da033c7082c868c4c4b28d8 100644 index 3c0651fa5a5db880202c9a3805a6455269c5f16d..d7ddd44fb9b571850515edc6ee2e6801092f6446 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package net.minecraft.server.network; package net.minecraft.server.network;
+import com.github.atlasmediagroup.scissors.event.player.SpectatorTeleportEvent; +import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.primitives.Floats; import com.google.common.primitives.Floats;
import com.mojang.brigadier.ParseResults; import com.mojang.brigadier.ParseResults;
@@ -1905,6 +1906,14 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser @@ -2113,6 +2114,14 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
Entity entity = packet.getEntity(worldserver); Entity entity = packet.getEntity(worldserver);
if (entity != null) { if (entity != null) {

View File

@@ -1,249 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Business Goose <arclicious@vivaldi.net>
Date: Mon, 18 Apr 2022 03:56:09 +0100
Subject: [PATCH] Reset large tags
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java b/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
new file mode 100644
index 0000000000000000000000000000000000000000..058203440fd071ce5edbe18391ea60f0a5fbee3a
--- /dev/null
+++ b/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
@@ -0,0 +1,28 @@
+package com.github.atlasmediagroup.scissors;
+
+import net.minecraft.nbt.CompoundTag;
+
+import javax.annotation.Nullable;
+import java.nio.charset.StandardCharsets;
+
+public class NbtUtility
+{
+
+ public static boolean isTooLarge(@Nullable CompoundTag tag)
+ {
+ if (tag == null) return false;
+ return tag.toString().getBytes(StandardCharsets.UTF_8).length > (256 * 1024);
+ }
+
+ public static class Item
+ {
+
+ public static CompoundTag removeItemData(CompoundTag tag)
+ {
+ CompoundTag cleaned = new CompoundTag();
+ cleaned.putString("id", tag.getString("id"));
+ cleaned.putByte("Count", tag.getByte("Count"));
+ return cleaned;
+ }
+ }
+}
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index d02339a07e1da56fd5dc171a5e32b00d63fa555c..fe6cb52573ee50a2c02d7add38b5e8411d7177f4 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -1,5 +1,6 @@
package net.minecraft.world.item;
+import com.github.atlasmediagroup.scissors.NbtUtility;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
@@ -7,23 +8,28 @@ import com.google.gson.JsonParseException;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.serialization.Codec;
+import com.mojang.serialization.Dynamic;
import com.mojang.serialization.codecs.RecordCodecBuilder;
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Locale;
-import java.util.Map.Entry;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Random;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import javax.annotation.Nullable;
+import net.minecraft.ChatFormatting;
+import net.minecraft.Util;
+import net.minecraft.advancements.CriteriaTriggers;
+import net.minecraft.commands.arguments.blocks.BlockPredicateArgument;
+import net.minecraft.commands.arguments.blocks.BlockStateParser;
+import net.minecraft.core.BlockPos;
+import net.minecraft.core.Direction;
+import net.minecraft.core.Registry;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.ListTag;
+import net.minecraft.nbt.NbtOps;
+import net.minecraft.network.chat.*;
+import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
+import net.minecraft.resources.ResourceLocation;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.level.ServerLevel;
+import net.minecraft.server.level.ServerPlayer;
+import net.minecraft.sounds.SoundEvent;
+import net.minecraft.sounds.SoundSource;
+import net.minecraft.stats.Stats;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.Tag;
import net.minecraft.tags.TagContainer;
@@ -31,11 +37,7 @@ import net.minecraft.util.datafix.fixes.References;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
-import net.minecraft.world.entity.Entity;
-import net.minecraft.world.entity.EquipmentSlot;
-import net.minecraft.world.entity.LivingEntity;
-import net.minecraft.world.entity.MobType;
-import net.minecraft.world.entity.SlotAccess;
+import net.minecraft.world.entity.*;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes;
@@ -51,50 +53,13 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.Level;
-import net.minecraft.world.level.block.BaseEntityBlock;
-import net.minecraft.world.level.block.Block;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-// CraftBukkit start
-import com.mojang.serialization.Dynamic;
-import java.util.List;
-import java.util.Map;
-import net.minecraft.ChatFormatting;
-import net.minecraft.Util;
-import net.minecraft.advancements.CriteriaTriggers;
-import net.minecraft.commands.arguments.blocks.BlockPredicateArgument;
-import net.minecraft.commands.arguments.blocks.BlockStateParser;
-import net.minecraft.core.BlockPos;
-import net.minecraft.core.Direction;
-import net.minecraft.core.Registry;
-import net.minecraft.nbt.CompoundTag;
-import net.minecraft.nbt.ListTag;
-import net.minecraft.nbt.NbtOps;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.ComponentUtils;
-import net.minecraft.network.chat.HoverEvent;
-import net.minecraft.network.chat.MutableComponent;
-import net.minecraft.network.chat.Style;
-import net.minecraft.network.chat.TextComponent;
-import net.minecraft.network.chat.TranslatableComponent;
-import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
-import net.minecraft.resources.ResourceLocation;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.server.level.ServerLevel;
-import net.minecraft.server.level.ServerPlayer;
-import net.minecraft.sounds.SoundEvent;
-import net.minecraft.sounds.SoundSource;
-import net.minecraft.stats.Stats;
-import net.minecraft.world.level.block.Blocks;
-import net.minecraft.world.level.block.JukeboxBlock;
-import net.minecraft.world.level.block.SaplingBlock;
-import net.minecraft.world.level.block.SoundType;
-import net.minecraft.world.level.block.WitherSkullBlock;
+import net.minecraft.world.level.block.*;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.SignBlockEntity;
import net.minecraft.world.level.block.entity.SkullBlockEntity;
import net.minecraft.world.level.block.state.pattern.BlockInWorld;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.bukkit.Location;
import org.bukkit.TreeType;
import org.bukkit.block.BlockState;
@@ -106,6 +71,15 @@ import org.bukkit.entity.Player;
import org.bukkit.event.block.BlockFertilizeEvent;
import org.bukkit.event.player.PlayerItemDamageEvent;
import org.bukkit.event.world.StructureGrowEvent;
+
+import javax.annotation.Nullable;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
// CraftBukkit end
public final class ItemStack {
@@ -245,6 +219,13 @@ public final class ItemStack {
// CraftBukkit - break into own method
private void load(CompoundTag nbttagcompound) {
+ // Scissors start - Reset large tags
+ if (NbtUtility.isTooLarge(nbttagcompound)) {
+ // Reset tag without destroying item
+ nbttagcompound = NbtUtility.Item.removeItemData(nbttagcompound);
+ }
+ // Scissors end
+
this.item = (Item) Registry.ITEM.get(new ResourceLocation(nbttagcompound.getString("id")));
this.count = nbttagcompound.getByte("Count");
if (nbttagcompound.contains("tag", 10)) {
@@ -485,7 +466,11 @@ public final class ItemStack {
nbt.putString("id", minecraftkey == null ? "minecraft:air" : minecraftkey.toString());
nbt.putByte("Count", (byte) this.count);
if (this.tag != null) {
- nbt.put("tag", this.tag.copy());
+ // Scissors start - Don't save large tags
+ if (!NbtUtility.isTooLarge(this.tag)) {
+ nbt.put("tag", this.tag.copy());
+ }
+ // Scissors end
}
return nbt;
@@ -815,6 +800,9 @@ public final class ItemStack {
}
// Paper end
public void setTag(@Nullable CompoundTag nbt) {
+ // Scissors start - Ignore large tags
+ if (NbtUtility.isTooLarge(nbt)) return;
+ // Scissors end
this.tag = nbt;
processEnchantOrder(this.tag); // Paper
if (this.getItem().canBeDepleted()) {
diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
index 14da2997b5fff4434b1fe8d5a1b3109dde143740..a4385cea2d472611cfc7ef43662367bb1d780333 100644
--- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
+++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemStack.java
@@ -1,16 +1,12 @@
package org.bukkit.craftbukkit.inventory;
-import static org.bukkit.craftbukkit.inventory.CraftMetaItem.*;
import com.google.common.collect.ImmutableMap;
-import java.util.Map;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.world.item.Item;
import org.apache.commons.lang.Validate;
import org.bukkit.Material;
-import org.bukkit.NamespacedKey;
import org.bukkit.configuration.serialization.DelegateDeserialization;
-import org.bukkit.craftbukkit.enchantments.CraftEnchantment;
import org.bukkit.craftbukkit.util.CraftLegacy;
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.craftbukkit.util.CraftNamespacedKey;
@@ -19,6 +15,11 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.material.MaterialData;
+import java.util.Map;
+
+import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS_ID;
+import static org.bukkit.craftbukkit.inventory.CraftMetaItem.ENCHANTMENTS_LVL;
+
@DelegateDeserialization(ItemStack.class)
public final class CraftItemStack extends ItemStack {

View File

@@ -0,0 +1,37 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 02:55:01 +0100
Subject: [PATCH] Prevent invalid container events
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index bf7cf2108c0273552a41a9734dfd66b6a68a24d4..1c102fa91711ed595626633e127c89a83ed6b6c5 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -30,6 +30,7 @@ import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import net.kyori.adventure.text.format.NamedTextColor; // Scissors
import net.minecraft.ChatFormatting;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
@@ -3037,6 +3038,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
return;
}
+ // Scissors start - Do not call events when the slot/button number is invalid
+ final int sentSlotNum = packet.getSlotNum();
+ if((Mth.clamp(sentSlotNum, -1, this.player.containerMenu.slots.size() - 1) != sentSlotNum) && sentSlotNum != -999)
+ {
+ this.getCraftPlayer().kick(
+ net.kyori.adventure.text.Component.text("Invalid container click slot (Hacking?)")
+ .color(NamedTextColor.RED)
+ );
+ return;
+ }
+ // Scissors end
+
InventoryView inventory = this.player.containerMenu.getBukkitView();
SlotType type = inventory.getSlotType(packet.getSlotNum());

View File

@@ -0,0 +1,73 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 10:29:03 +0100
Subject: [PATCH] Disable running commands in books by default
diff --git a/src/main/java/net/minecraft/world/item/WrittenBookItem.java b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
index 31911c09fe15753ae32fa39417bdc9e9de552a88..b810a5afcb2343174e37efb7dd8a36b968b07c3a 100644
--- a/src/main/java/net/minecraft/world/item/WrittenBookItem.java
+++ b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
@@ -2,6 +2,7 @@ package net.minecraft.world.item;
import java.util.List;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.BlockPos;
@@ -9,8 +10,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.ComponentUtils;
+import net.minecraft.network.chat.*; // Scissors
import net.minecraft.stats.Stats;
import net.minecraft.util.StringUtil;
import net.minecraft.world.InteractionHand;
@@ -161,9 +161,43 @@ public class WrittenBookItem extends Item {
component2 = Component.literal(text);
}
- return Component.Serializer.toJson(component2);
+ return Component.Serializer.toJson(!ScissorsConfig.runCommandsInBooks ? sanitize(component2, 0) : component2); // Scissors - Allow server owners to disable run command in books
}
+ // Scissors start - Allow server owners to disable run command in books
+ public static Component sanitize(Component component, int depth)
+ {
+ if (depth > 128)
+ {
+ return Component.nullToEmpty("Sanitization function depth limit exceeded");
+ }
+
+ MutableComponent component2 = component.copy();
+
+ final Style style = component2.getStyle();
+ final ClickEvent clickEvent = style.getClickEvent();
+
+ if (clickEvent != null && clickEvent.getAction().equals(ClickEvent.Action.RUN_COMMAND))
+ {
+ final String clickEventValue = clickEvent.getValue();
+
+ component2 = component2.copy().setStyle(style
+ .withClickEvent(null)
+ .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.nullToEmpty("Would've " + (clickEventValue.startsWith("/") ? "ran" : "said") + ": " + clickEvent.getValue())))
+ );
+ }
+
+ final List<Component> processedExtra = component2.getSiblings()
+ .stream()
+ .map(comp -> sanitize(comp, depth + 1))
+ .toList();
+ component2.getSiblings().clear();
+ component2.getSiblings().addAll(processedExtra);
+
+ return component2;
+ }
+ // Scissors end
+
@Override
public boolean isFoil(ItemStack stack) {
return true;

View File

@@ -1,63 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Business Goose <arclicious@vivaldi.net>
Date: Sun, 1 May 2022 01:19:36 +0100
Subject: [PATCH] Make the maximum tag size a constant & add a method for
getting tag size
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java b/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
index 058203440fd071ce5edbe18391ea60f0a5fbee3a..978cb98c81195640fb3704d2077148f2be0dca36 100644
--- a/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
+++ b/src/main/java/com/github/atlasmediagroup/scissors/NbtUtility.java
@@ -1,17 +1,49 @@
package com.github.atlasmediagroup.scissors;
-import net.minecraft.nbt.CompoundTag;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import net.minecraft.nbt.*;
import javax.annotation.Nullable;
import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.List;
public class NbtUtility
{
+ public static final long MAXIMUM_SIZE = (256 * 1024);
+
+ public static long getTagSize(@Nullable Tag tag, int depth) {
+ if(depth > 512) return 0;
+ if(tag == null) return 0;
+
+ long size = 0;
+
+ if(tag.getType() == CompoundTag.TYPE) {
+ CompoundTag compoundTag = (CompoundTag) tag;
+ for(String key : compoundTag.getAllKeys()) {
+ size += getTagSize(compoundTag.get(key), depth + 1);
+ }
+ } else if(tag.getType() == ListTag.TYPE) {
+ ListTag listTag = (ListTag) tag;
+ for (Tag tag1 : listTag) {
+ size += getTagSize(tag1, depth + 1);
+ }
+ } else {
+ size += tag.getAsString().getBytes(StandardCharsets.UTF_8).length;
+ }
+
+ return size;
+ }
+
+ public static long getTagSize(@Nullable CompoundTag tag) {
+ return getTagSize(tag, 0);
+ }
public static boolean isTooLarge(@Nullable CompoundTag tag)
{
if (tag == null) return false;
- return tag.toString().getBytes(StandardCharsets.UTF_8).length > (256 * 1024);
+ return getTagSize(tag) > MAXIMUM_SIZE;
}
public static class Item

View File

@@ -0,0 +1,31 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Mon, 11 Jul 2022 17:29:12 -0300
Subject: [PATCH] Validate block entity/entity tag query positions
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 3c4825e295eefc7fcd628ba804fcc7dd5f160f28..280ebeee9bfae3059b6681873fa5633a9e929161 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1376,7 +1376,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (this.player.hasPermissions(2)) {
Entity entity = this.player.level().getEntity(packet.getEntityId());
- if (entity != null) {
+ if (entity != null && this.player.distanceToSqr(entity.position().x, entity.position().y, entity.position().z) < 32 * 32) { // Scissors - Validate entity tag query positions
CompoundTag nbttagcompound = entity.saveWithoutId(new CompoundTag());
this.player.connection.send(new ClientboundTagQueryPacket(packet.getTransactionId(), nbttagcompound));
@@ -1388,7 +1388,10 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleBlockEntityTagQuery(ServerboundBlockEntityTagQuery packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.hasPermissions(2)) {
+ // Scissors start - Validate block entity tag query positions
+ if (this.player.hasPermissions(2) && this.player.level().isLoadedAndInBounds(packet.getPos())
+ && this.player.distanceToSqr(packet.getPos().getX(), packet.getPos().getY(), packet.getPos().getZ()) < 32 * 32) {
+ // Scissors end
BlockEntity tileentity = this.player.level().getBlockEntity(packet.getPos());
CompoundTag nbttagcompound = tileentity != null ? tileentity.saveWithoutMetadata() : null;

View File

@@ -0,0 +1,67 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Wed, 13 Jul 2022 12:13:22 +0100
Subject: [PATCH] Fix ClickEvents on Signs bypassing permissions
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
index f356196aaeb498a6d2c9ad2112329cef5a3103d6..a8d8445be1cfb67de1adcaf64847d0bfaf8c503d 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
@@ -8,8 +8,10 @@ import java.util.Objects;
import java.util.UUID;
import java.util.function.UnaryOperator;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack;
+import net.minecraft.commands.Commands; // Scissors
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtOps;
@@ -19,6 +21,7 @@ import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.ComponentUtils;
import net.minecraft.network.chat.Style;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.server.MinecraftServer; // Scissors
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.FilteredText;
@@ -30,6 +33,7 @@ import net.minecraft.world.level.block.SignBlock;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec2;
import net.minecraft.world.phys.Vec3;
+import org.bukkit.craftbukkit.entity.CraftHumanEntity; // Scissors
import org.slf4j.Logger;
import org.bukkit.block.sign.Side;
import org.bukkit.craftbukkit.block.CraftBlock;
@@ -37,6 +41,7 @@ import org.bukkit.craftbukkit.util.CraftChatMessage;
import org.bukkit.entity.Player;
import org.bukkit.event.block.SignChangeEvent;
// CraftBukkit end
+import org.bukkit.craftbukkit.CraftServer; // Scissors
public class SignBlockEntity extends BlockEntity implements CommandSource { // CraftBukkit - implements
@@ -291,6 +296,21 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
}
player.getServer().getCommands().performPrefixedCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle(), world, pos), event.getMessage());
// Paper end
+ // Scissors start - Add optional permissions to command signs
+ final MinecraftServer vanillaServer = player.getServer();
+ final CraftServer craftServer = vanillaServer.server;
+ final CraftHumanEntity craftPlayer = player.getBukkitEntity();
+ final Commands commands = vanillaServer.getCommands();
+
+ if (ScissorsConfig.commandSignsBypassPermissions)
+ {
+ commands.performPrefixedCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle(), world, pos), event.getMessage());
+ }
+ else
+ {
+ craftServer.dispatchCommand(craftPlayer, command.substring(1));
+ }
+ // Scissors end
flag1 = true;
}
}

View File

@@ -1,22 +1,18 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Tue, 16 Aug 2022 18:14:16 +0100 Date: Tue, 16 Aug 2022 17:13:02 +0100
Subject: [PATCH] Refuse to convert legacy messages over 1k characters Subject: [PATCH] Refuse to convert legacy messages over 1k characters
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
index 26d43c229caf9f8504af7071c3a61ec6da7e27ec..ecceb3fc7f822d826b4a789fe72a8cd08e90d60e 100644 index 0f70be614f8f5350ad558d0ae645cdf0027e1e76..c006ac8531cf2c029fd2fac449f96736a4afed0d 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java --- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java
@@ -198,6 +198,11 @@ public final class CraftChatMessage { @@ -199,6 +199,7 @@ public final class CraftChatMessage {
} }
public static Component[] fromString(String message, boolean keepNewlines, boolean plain) { public static Component[] fromString(String message, boolean keepNewlines, boolean plain) {
+ // Scissors start - Refuse to convert legacy messages over 1k characters + if (message.length() > 1_000) return new Component[]{Component.empty()}; // Scissors - Refuse to convert legacy messages over 1k characters
+ if (message.length() > 1_000) {
+ return new Component[]{TextComponent.EMPTY};
+ }
+ // Scissors end
return new StringMessage(message, keepNewlines, plain).getOutput(); return new StringMessage(message, keepNewlines, plain).getOutput();
} }

View File

@@ -1,14 +1,21 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Sun, 27 Nov 2022 04:04:14 +0000 Date: Sun, 27 Nov 2022 05:14:18 +0000
Subject: [PATCH] Prevent velocity freeze Subject: [PATCH] Prevent velocity freeze
diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java
index 3a088afd8269606543ebc9fb2074eb70431fcd39..561e68806b50c417f08a20bcf87c44d117b9f41c 100644 index 6c9a8f062f989db022154155e8a05b334a0510da..978fad27ad17de03d108ade2c2bfa464b7d83491 100644
--- a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java
+++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractHurtingProjectile.java
@@ -41,9 +41,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { @@ -1,5 +1,6 @@
package net.minecraft.world.entity.projectile;
+import me.totalfreedom.scissors.MathUtility; // Scissors
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
@@ -41,9 +42,13 @@ public abstract class AbstractHurtingProjectile extends Projectile {
double d6 = Math.sqrt(d3 * d3 + d4 * d4 + d5 * d5); double d6 = Math.sqrt(d3 * d3 + d4 * d4 + d5 * d5);
if (d6 != 0.0D) { if (d6 != 0.0D) {
@@ -19,13 +26,13 @@ index 3a088afd8269606543ebc9fb2074eb70431fcd39..561e68806b50c417f08a20bcf87c44d1
+ //this.xPower = d3 / d6 * 0.1D; + //this.xPower = d3 / d6 * 0.1D;
+ //this.yPower = d4 / d6 * 0.1D; + //this.yPower = d4 / d6 * 0.1D;
+ //this.zPower = d5 / d6 * 0.1D; + //this.zPower = d5 / d6 * 0.1D;
+ // Scissors end
+ +
+ setPower(d3 / d6 * .1d, d4 / d6 * .1d, d5 / d6 * .1d); + setPower(d3 / d6 * .1d, d4 / d6 * .1d, d5 / d6 * .1d);
+ // Scissors end
} }
} }
@@ -150,6 +154,25 @@ public abstract class AbstractHurtingProjectile extends Projectile { @@ -141,6 +146,25 @@ public abstract class AbstractHurtingProjectile extends Projectile {
nbt.put("power", this.newDoubleList(new double[]{this.xPower, this.yPower, this.zPower})); nbt.put("power", this.newDoubleList(new double[]{this.xPower, this.yPower, this.zPower}));
} }
@@ -42,16 +49,16 @@ index 3a088afd8269606543ebc9fb2074eb70431fcd39..561e68806b50c417f08a20bcf87c44d1
+ return; + return;
+ } + }
+ +
+ this.xPower = Math.min(Math.max(xPower, -1024), 1024); + this.xPower = MathUtility.clampDouble(xPower, -1024, 1024);
+ this.yPower = Math.min(Math.max(yPower, -1024), 1024); + this.yPower = MathUtility.clampDouble(yPower, -1024, 1024);
+ this.zPower = Math.min(Math.max(zPower, -1024), 1024); + this.zPower = MathUtility.clampDouble(zPower, -1024, 1024);
+ } + }
+ // Scissors end + // Scissors end
+ +
@Override @Override
public void readAdditionalSaveData(CompoundTag nbt) { public void readAdditionalSaveData(CompoundTag nbt) {
super.readAdditionalSaveData(nbt); super.readAdditionalSaveData(nbt);
@@ -157,9 +180,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { @@ -148,9 +172,13 @@ public abstract class AbstractHurtingProjectile extends Projectile {
ListTag nbttaglist = nbt.getList("power", 6); ListTag nbttaglist = nbt.getList("power", 6);
if (nbttaglist.size() == 3) { if (nbttaglist.size() == 3) {
@@ -62,13 +69,13 @@ index 3a088afd8269606543ebc9fb2074eb70431fcd39..561e68806b50c417f08a20bcf87c44d1
+ //this.xPower = nbttaglist.getDouble(0); + //this.xPower = nbttaglist.getDouble(0);
+ //this.yPower = nbttaglist.getDouble(1); + //this.yPower = nbttaglist.getDouble(1);
+ //this.zPower = nbttaglist.getDouble(2); + //this.zPower = nbttaglist.getDouble(2);
+ // Scissors end
+ +
+ setPower(nbttaglist.getDouble(0), nbttaglist.getDouble(1), nbttaglist.getDouble(2)); + setPower(nbttaglist.getDouble(0), nbttaglist.getDouble(1), nbttaglist.getDouble(2));
+ // Scissors end
} }
} }
@@ -192,9 +219,13 @@ public abstract class AbstractHurtingProjectile extends Projectile { @@ -184,9 +212,13 @@ public abstract class AbstractHurtingProjectile extends Projectile {
Vec3 vec3d = entity.getLookAngle(); Vec3 vec3d = entity.getLookAngle();
this.setDeltaMovement(vec3d); this.setDeltaMovement(vec3d);
@@ -83,5 +90,5 @@ index 3a088afd8269606543ebc9fb2074eb70431fcd39..561e68806b50c417f08a20bcf87c44d1
+ setPower(vec3d.x * 0.1D, vec3d.y * 0.1D, vec3d.z * 0.1D); + setPower(vec3d.x * 0.1D, vec3d.y * 0.1D, vec3d.z * 0.1D);
+ // Scissors end + // Scissors end
this.setOwner(entity); this.setOwner(entity);
return true; }
} else {

View File

@@ -0,0 +1,105 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Tue, 31 Jan 2023 23:16:52 +0000
Subject: [PATCH] Add configuration option to disable chat signatures
diff --git a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java
index 74cf1c043beef03cfd5adf481414a5ee78bef2a6..516c61cbb8299828b2f28d4564d08ae1829649b5 100644
--- a/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java
+++ b/src/main/java/net/minecraft/network/chat/OutgoingChatMessage.java
@@ -1,5 +1,6 @@
package net.minecraft.network.chat;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import net.minecraft.server.level.ServerPlayer;
public interface OutgoingChatMessage {
@@ -44,10 +45,21 @@ public interface OutgoingChatMessage {
// Paper end
PlayerChatMessage playerChatMessage = this.message.filter(filterMaskEnabled);
playerChatMessage = unsigned != null ? playerChatMessage.withUnsignedContent(unsigned) : playerChatMessage; // Paper
- if (!playerChatMessage.isFullyFiltered()) {
+ // Scissors start
+ if (!playerChatMessage.isFullyFiltered() && ScissorsConfig.chatSignaturesEnabled) {
sender.connection.sendPlayerChatMessage(playerChatMessage, params);
+ return;
}
+ sender.connection.sendPlayerChatMessage(new PlayerChatMessage(
+ SignedMessageLink.unsigned(playerChatMessage.sender()),
+ null,
+ SignedMessageBody.unsigned(playerChatMessage.signedContent()),
+ unsigned,
+ playerChatMessage.filterMask(),
+ playerChatMessage.result()
+ ), params);
+ // Scissors end
}
}
}
diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
index c0a80824a0307ea673805015119cc834b268f0dc..9f28f86b1b56ea55ab39f6ac988c1f47c5312c6c 100644
--- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
+++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java
@@ -4,6 +4,7 @@ import com.mojang.logging.LogUtils;
import java.time.Instant;
import java.util.UUID;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import net.minecraft.util.SignatureUpdater;
import net.minecraft.util.SignatureValidator;
import net.minecraft.util.Signer;
@@ -41,7 +42,7 @@ public class SignedMessageChain {
if (!playerChatMessage.verify(signatureValidator)) {
throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.unsigned_chat"), true, org.bukkit.event.player.PlayerKickEvent.Cause.UNSIGNED_CHAT); // Paper - kick event causes
} else {
- if (playerChatMessage.hasExpiredServer(Instant.now())) {
+ if (playerChatMessage.hasExpiredServer(Instant.now()) && ScissorsConfig.chatSignaturesEnabled) { // Scissors
LOGGER.warn("Received expired chat: '{}'. Is the client/server system time unsynchronized?", (Object)body.content());
}
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 562289bbe08b8d8e75436ad94cfc02e7c0e95d2e..a98134b3b59e194c03bb8110652a9208263c420d 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1,5 +1,6 @@
package net.minecraft.server.network;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors
import com.google.common.collect.Lists;
import com.google.common.primitives.Floats;
@@ -2368,7 +2369,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
}
private void handleMessageDecodeFailure(SignedMessageChain.DecodeException exception) {
- if (exception.shouldDisconnect()) {
+ if (exception.shouldDisconnect() && ScissorsConfig.chatSignaturesEnabled) { // Scissors - Do not kick when chat signatures are disabled
this.disconnect(exception.getComponent(), exception.kickCause); // Paper - kick event causes
} else {
this.player.sendSystemMessage(exception.getComponent().copy().withStyle(ChatFormatting.RED));
@@ -2424,6 +2425,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
Optional<LastSeenMessages> optional = this.lastSeenMessages.applyUpdate(acknowledgment);
if (optional.isEmpty()) {
+ if (!ScissorsConfig.chatSignaturesEnabled) return optional; // Scissors
ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString());
this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes
}
@@ -2632,6 +2634,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
synchronized (this.lastSeenMessages) {
if (!this.lastSeenMessages.applyOffset(packet.offset())) {
+ if (!ScissorsConfig.chatSignaturesEnabled) return; // Scissors
ServerGamePacketListenerImpl.LOGGER.warn("Failed to validate message acknowledgements from {}", this.player.getName().getString());
this.disconnect(ServerGamePacketListenerImpl.CHAT_VALIDATION_FAILED, org.bukkit.event.player.PlayerKickEvent.Cause.CHAT_VALIDATION_FAILED); // Paper - kick event causes
}
@@ -3673,6 +3676,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleChatSessionUpdate(ServerboundChatSessionUpdatePacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
+ if (!ScissorsConfig.chatSignaturesEnabled) return; // Scissors
RemoteChatSession.Data remotechatsession_a = packet.chatSession();
ProfilePublicKey.Data profilepublickey_a = this.chatSession != null ? this.chatSession.profilePublicKey().data() : null;
ProfilePublicKey.Data profilepublickey_a1 = remotechatsession_a.profilePublicKey();

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Mon, 20 Mar 2023 07:04:50 +0000
Subject: [PATCH] Patch invalid entity rotation log spam
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 842f8af14b2bd694a48ee6573d98e6cfcf910e16..e9e98f09e13d7f21333450d892cdc80b0667c915 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -4617,7 +4617,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
public void setXRot(float pitch) {
if (!Float.isFinite(pitch)) {
- Util.logAndPauseIfInIde("Invalid entity rotation: " + pitch + ", discarding.");
+ // Scissors - Patch invalid entity rotation log spam
} else {
this.xRot = pitch;
}

View File

@@ -5,11 +5,11 @@ Subject: [PATCH] Patch large selector distance crash
diff --git a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java diff --git a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java
index a890f52e2214242f6e31353bb912813d00e41045..bc0e1938d6e1faca64bb041442bad9e501708fe4 100644 index 60d32afe2eecdfebdc91531ca3672f8f130ac30e..73b0f516f80ef810379860ea74697a3429c646e5 100644
--- a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java --- a/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java
+++ b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java +++ b/src/main/java/net/minecraft/advancements/critereon/MinMaxBounds.java
@@ -173,7 +173,7 @@ public abstract class MinMaxBounds<T extends Number> { @@ -177,7 +177,7 @@ public abstract class MinMaxBounds<T extends Number> {
return double_ == null ? null : double_ * double_; return value == null ? null : value * value;
} }
- private Doubles(@Nullable Double min, @Nullable Double max) { - private Doubles(@Nullable Double min, @Nullable Double max) {
@@ -18,10 +18,18 @@ index a890f52e2214242f6e31353bb912813d00e41045..bc0e1938d6e1faca64bb041442bad9e5
this.minSq = squareOpt(min); this.minSq = squareOpt(min);
this.maxSq = squareOpt(max); this.maxSq = squareOpt(max);
diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
index 0fb8f32427843f4bfd90ab88ecb3ab3e4a4fda31..c9b5f7715d4a866d477c65adb39f11cc46e5623a 100644 index f25b9330e068c7d9e12cb57a7761cfef9ebaf7bc..e8cf963f0190438bbf65f827d144775ab0b02b63 100644
--- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java --- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
+++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java
@@ -58,9 +58,27 @@ public class EntitySelector { @@ -10,6 +10,7 @@ import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Predicate;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.MathUtility; // Scissors
import net.minecraft.advancements.critereon.MinMaxBounds;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.arguments.EntityArgument;
@@ -60,9 +61,27 @@ public class EntitySelector {
this.includesEntities = includesNonPlayers; this.includesEntities = includesNonPlayers;
this.worldLimited = localWorldOnly; this.worldLimited = localWorldOnly;
this.predicate = basePredicate; this.predicate = basePredicate;
@@ -36,12 +44,12 @@ index 0fb8f32427843f4bfd90ab88ecb3ab3e4a4fda31..c9b5f7715d4a866d477c65adb39f11cc
- this.aabb = box; - this.aabb = box;
+ if (box != null) { + if (box != null) {
+ this.aabb = new AABB( + this.aabb = new AABB(
+ Math.min(Math.max(box.minX, -1024), 1025), + MathUtility.clampDouble(box.minX, -1024, 1025),
+ Math.min(Math.max(box.minY, -1024), 1025), + MathUtility.clampDouble(box.minY, -1024, 1025),
+ Math.min(Math.max(box.minZ, -1024), 1025), + MathUtility.clampDouble(box.minZ, -1024, 1025),
+ Math.min(Math.max(box.maxX, -1024), 1025), + MathUtility.clampDouble(box.maxX, -1024, 1025),
+ Math.min(Math.max(box.maxY, -1024), 1025), + MathUtility.clampDouble(box.maxY, -1024, 1025),
+ Math.min(Math.max(box.maxZ, -1024), 1025), + MathUtility.clampDouble(box.maxZ, -1024, 1025),
+ false + false
+ ); + );
+ } else { + } else {

View File

@@ -1,52 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 02:20:16 +0100
Subject: [PATCH] Prevent invalid container events
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index ca595abe940463a62da033c7082c868c4c4b28d8..a102586b42ac408a3f655f7c0d069ab0990ec7fc 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -24,6 +24,8 @@ import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+
+import net.kyori.adventure.text.format.NamedTextColor;
import net.minecraft.ChatFormatting;
import net.minecraft.CrashReport;
import net.minecraft.CrashReportCategory;
@@ -2593,6 +2595,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
public void handleContainerClick(ServerboundContainerClickPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
if (this.player.isImmobile()) return; // CraftBukkit
+
this.player.resetLastActionTime();
if (this.player.containerMenu.containerId == packet.getContainerId() && this.player.containerMenu.stillValid(this.player)) { // CraftBukkit
boolean cancelled = this.player.isSpectator(); // CraftBukkit - see below if
@@ -2602,11 +2605,24 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
boolean flag = packet.getStateId() != this.player.containerMenu.getStateId();
this.player.containerMenu.suppressRemoteUpdates();
+
// CraftBukkit start - Call InventoryClickEvent
if (packet.getSlotNum() < -1 && packet.getSlotNum() != -999) {
return;
}
+ // Scissors start - Do not call events when the slot/button number is invalid
+ final int sentSlotNum = packet.getSlotNum();
+ if((Mth.clamp(sentSlotNum, -1, this.player.containerMenu.slots.size() - 1) != sentSlotNum) && sentSlotNum != -999)
+ {
+ this.getCraftPlayer().kick(
+ net.kyori.adventure.text.Component.text("Invalid container click slot (Hacking?)")
+ .color(NamedTextColor.RED)
+ );
+ return;
+ }
+ // Scissors end
+
InventoryView inventory = this.player.containerMenu.getBukkitView();
SlotType type = inventory.getSlotType(packet.getSlotNum());

View File

@@ -1,24 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 02:25:28 +0100
Subject: [PATCH] Do not attempt to cast items to recipes
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 73e95e631ac622de897775399d205de66c4d8ff8..c3fd536cebb2f8664f9bf86d322f88094677d2b5 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -629,6 +629,13 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
Entry<ResourceLocation> entry = (Entry) objectiterator.next();
worldserver.getRecipeManager().byKey((ResourceLocation) entry.getKey()).ifPresent((irecipe) -> {
+ // Scissors start - Do not attempt to cast items to recipes
+ if (!(irecipe instanceof AbstractCookingRecipe))
+ {
+ return;
+ }
+ // Scissors end
+
list.add(irecipe);
AbstractFurnaceBlockEntity.createExperience(worldserver, vec3d, entry.getIntValue(), ((AbstractCookingRecipe) irecipe).getExperience(), blockposition, entityplayer, itemstack, amount); // CraftBukkit
});

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Mon, 10 Apr 2023 13:56:18 -0300
Subject: [PATCH] Limit sculk catalyst cursor positions
diff --git a/src/main/java/net/minecraft/world/level/block/SculkSpreader.java b/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
index de90a216321f7d82310a0d1c915fefe64360534c..7e52f6c26234cf6fa092151d51c0c6b70dc22ca8 100644
--- a/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
+++ b/src/main/java/net/minecraft/world/level/block/SculkSpreader.java
@@ -181,7 +181,7 @@ public class SculkSpreader {
while (iterator.hasNext()) {
SculkSpreader.ChargeCursor sculkspreader_a = (SculkSpreader.ChargeCursor) iterator.next();
-
+ if (!world.getMinecraftWorld().isLoadedAndInBounds(sculkspreader_a.getPos())) continue; // Scissors
sculkspreader_a.update(world, pos, random, this, shouldConvertToBlock);
if (sculkspreader_a.charge <= 0) {
world.levelEvent(3006, sculkspreader_a.getPos(), 0);

View File

@@ -0,0 +1,46 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Apr 2023 16:29:23 -0300
Subject: [PATCH] Limit map decorations
diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java
index 347d2914f9560a3ee8cea59444bc0dfbb7cf3456..b6a38b1458957bd444fea439fa81d2976ffb86e0 100644
--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java
+++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java
@@ -2,6 +2,7 @@ package net.minecraft.world.level.saveddata.maps;
import java.util.Objects;
import javax.annotation.Nullable;
+import net.minecraft.ChatFormatting; // Scissors
import net.minecraft.network.chat.Component;
import net.minecraft.util.Mth;
@@ -14,6 +15,11 @@ public class MapDecoration {
private final Component name;
public MapDecoration(MapDecoration.Type type, byte x, byte z, byte rotation, @Nullable Component text) {
+ // Scissors start - Limit decoration text length
+ if (text != null && text.getString().length() > 32) {
+ text = null;
+ }
+ // Scissors end
this.type = type;
this.x = x;
this.y = z;
diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
index 3b12030b49b1c539684d75ca3896eb498400ef99..0d55d73bd31747ad9579aebbb77f315aa3dc2bc8 100644
--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
+++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
@@ -354,6 +354,11 @@ public class MapItemSavedData extends SavedData {
}
private void addDecoration(MapDecoration.Type type, @Nullable LevelAccessor world, String key, double x, double z, double rotation, @Nullable Component text) {
+ // Scissors start - Limit decoration count
+ if (this.decorations.size() > 32) {
+ return;
+ }
+ // Scissors end
int i = 1 << this.scale;
float f = (float) (x - (double) this.centerX) / (float) i;
float f1 = (float) (z - (double) this.centerZ) / (float) i;

View File

@@ -1,103 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Sun, 10 Jul 2022 09:46:20 +0100
Subject: [PATCH] Disable running commands in books by default
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
index d0e2bcf4671d723d5893e0a9bc8c6e30a9b83be6..6fcbd02c02d70617e4533b450747c918ec3339d5 100644
--- a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
+++ b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
@@ -127,6 +127,12 @@ public class ScissorsConfig
}
}
+ public static boolean runCommandsInBooks = false;
+
+ private static void runCommandsInBooks() {
+ runCommandsInBooks = getBoolean("runCommandsInBooks", false);
+ }
+
private static void set(String path, Object val)
{
config.set(path, val);
diff --git a/src/main/java/net/minecraft/world/item/WrittenBookItem.java b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
index de11f8b4a783e7aa6029693f6812c950649fe88c..526206f11bdfc2aa7cb88649c47d707678753007 100644
--- a/src/main/java/net/minecraft/world/item/WrittenBookItem.java
+++ b/src/main/java/net/minecraft/world/item/WrittenBookItem.java
@@ -1,7 +1,10 @@
package net.minecraft.world.item;
import java.util.List;
+import java.util.stream.Collectors;
import javax.annotation.Nullable;
+
+import com.github.atlasmediagroup.scissors.ScissorsConfig;
import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.core.BlockPos;
@@ -9,10 +12,7 @@ import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag;
-import net.minecraft.network.chat.Component;
-import net.minecraft.network.chat.ComponentUtils;
-import net.minecraft.network.chat.TextComponent;
-import net.minecraft.network.chat.TranslatableComponent;
+import net.minecraft.network.chat.*;
import net.minecraft.stats.Stats;
import net.minecraft.util.StringUtil;
import net.minecraft.world.InteractionHand;
@@ -113,8 +113,7 @@ public class WrittenBookItem extends Item {
public static boolean resolveBookComponents(ItemStack book, @Nullable CommandSourceStack commandSource, @Nullable Player player) {
CompoundTag compoundTag = book.getTag();
- if (compoundTag != null && !compoundTag.getBoolean("resolved")) {
- compoundTag.putBoolean("resolved", true);
+ if (compoundTag != null) {
if (!makeSureTagIsValid(compoundTag)) {
return false;
} else {
@@ -148,8 +147,41 @@ public class WrittenBookItem extends Item {
component2 = new TextComponent(string);
}
- return Component.Serializer.toJson(component2);
+ return Component.Serializer.toJson(!ScissorsConfig.runCommandsInBooks ? sanitize(component2, 0) : component2); // Scissors - Allow server owners to disable run command in books
+ }
+
+ // Scissors start - Allow server owners to disable run command in books
+ public static Component sanitize(Component component, int depth) {
+ if (depth > 128) {
+ return Component.nullToEmpty("Sanitization function depth limit exceeded");
+ }
+
+ MutableComponent component2 = component.copy();
+
+ final Style style = component2.getStyle();
+ final ClickEvent clickEvent = style.getClickEvent();
+
+ if(clickEvent != null && clickEvent.getAction().equals(ClickEvent.Action.RUN_COMMAND))
+ {
+ final String clickEventValue = clickEvent.getValue();
+
+ component2 = component2.copy().setStyle(style
+ .withClickEvent(null)
+ .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Component.nullToEmpty("Would've " + (clickEventValue.startsWith("/") ? "ran": "said") + ": " + clickEvent.getValue())))
+ );
+ }
+
+ final List<Component> processedExtra = component2.getSiblings()
+ .stream()
+ .map(comp -> sanitize(comp, depth + 1))
+ .toList();
+
+ component2.getSiblings().clear();
+ component2.getSiblings().addAll(processedExtra);
+
+ return component2;
}
+ // Scissors end
@Override
public boolean isFoil(ItemStack stack) {

View File

@@ -1,19 +1,18 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com> From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Apr 2023 18:25:56 -0300 Date: Fri, 28 Apr 2023 16:44:50 -0300
Subject: [PATCH] Prevent player banning using duplicate UUIDs Subject: [PATCH] Prevent player banning using duplicate UUIDs
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index a002713686e66faf0d18662586a7a236c27ca7d2..795d72084ff196c5f4a0ff4bafd3ac88257fc379 100644 index 18aac3da3c88f33b1a71a5920a8daa27e9723913..b1bfb12f10d6fec9ca905498b4a6768997867311 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1354,7 +1354,14 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1610,7 +1610,13 @@ public class ServerLevel extends Level implements WorldGenLevel {
if (entity != null) { if (entity != null) {
ServerLevel.LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID().toString()); ServerLevel.LOGGER.warn("Force-added player with duplicate UUID {}", player.getUUID().toString());
entity.unRide(); entity.unRide();
- this.removePlayerImmediately((ServerPlayer) entity, Entity.RemovalReason.DISCARDED); - this.removePlayerImmediately((ServerPlayer) entity, Entity.RemovalReason.DISCARDED);
+
+ // Scissors start - Prevent player banning using duplicate UUIDs + // Scissors start - Prevent player banning using duplicate UUIDs
+ if (entity instanceof ServerPlayer serverPlayer) { + if (entity instanceof ServerPlayer serverPlayer) {
+ this.removePlayerImmediately(serverPlayer, Entity.RemovalReason.DISCARDED); + this.removePlayerImmediately(serverPlayer, Entity.RemovalReason.DISCARDED);
@@ -23,4 +22,4 @@ index a002713686e66faf0d18662586a7a236c27ca7d2..795d72084ff196c5f4a0ff4bafd3ac88
+ // Scissors end + // Scissors end
} }
this.entityManager.addNewEntity(player); // CraftBukkit - decompile error this.entityLookup.addNewEntity(player); // Paper - rewite chunk system

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Apr 2023 16:46:00 -0300
Subject: [PATCH] Don't warn on duplicate entity UUIDs
diff --git a/src/main/java/io/papermc/paper/chunk/system/entity/EntityLookup.java b/src/main/java/io/papermc/paper/chunk/system/entity/EntityLookup.java
index 41791c7331c80d496cde4e3d1846a178bef0bbe3..d04181bda85dbaa77d3b55b04b25519496bec4ff 100644
--- a/src/main/java/io/papermc/paper/chunk/system/entity/EntityLookup.java
+++ b/src/main/java/io/papermc/paper/chunk/system/entity/EntityLookup.java
@@ -372,7 +372,7 @@ public final class EntityLookup implements LevelEntityGetter<Entity> {
return false;
}
if (this.entityByUUID.containsKey(entity.getUUID())) {
- LOGGER.warn("Entity uuid already exists: " + entity.getUUID() + ", mapped to " + this.entityByUUID.get(entity.getUUID()) + ", can't add " + entity);
+ // Scissors - Don't warn on duplicate entity UUIDs
return false;
}
this.entityById.put(entity.getId(), entity);

View File

@@ -1,93 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Wed, 13 Jul 2022 10:16:57 +0100
Subject: [PATCH] Fix ClickEvents on Signs bypassing permissions
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
index 6fcbd02c02d70617e4533b450747c918ec3339d5..52b0161711634f9ad8cecf58668737a726278f72 100644
--- a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
+++ b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
@@ -65,8 +65,8 @@ public class ScissorsConfig
config.options().header(HEADER);
config.options().copyDefaults(true);
- version = getInt("config-version", 1);
- set("config-version", 1);
+ version = getInt("config-version", 2);
+ set("config-version", 2);
readConfig(ScissorsConfig.class, null);
}
@@ -133,6 +133,13 @@ public class ScissorsConfig
runCommandsInBooks = getBoolean("runCommandsInBooks", false);
}
+ // people still may want them to bypass permissions for warps
+ public static boolean commandSignsBypassPermissions = false;
+ public static void commandSignsBypassPermissions()
+ {
+ commandSignsBypassPermissions = getBoolean("commandSignsBypassPermissions", false);
+ }
+
private static void set(String path, Object val)
{
config.set(path, val);
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
index 344d3a8c1162f1a4ab5fc2b7676680ddace46649..5e526ba120b9e4ba77fa4474730aa180dba5eb56 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java
@@ -1,11 +1,13 @@
package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.ScissorsConfig;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import java.util.UUID;
import java.util.function.Function;
import javax.annotation.Nullable;
import net.minecraft.commands.CommandSource;
import net.minecraft.commands.CommandSourceStack;
+import net.minecraft.commands.Commands;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Vec3i;
import net.minecraft.nbt.CompoundTag;
@@ -16,6 +18,7 @@ import net.minecraft.network.chat.MutableComponent;
import net.minecraft.network.chat.Style;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
+import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.util.FormattedCharSequence;
@@ -24,6 +27,8 @@ import net.minecraft.world.item.DyeColor;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec2;
import net.minecraft.world.phys.Vec3;
+import org.bukkit.craftbukkit.CraftServer;
+import org.bukkit.craftbukkit.entity.CraftPlayer;
public class SignBlockEntity extends BlockEntity implements CommandSource { // CraftBukkit - implements
private static final boolean CONVERT_LEGACY_SIGNS = Boolean.getBoolean("convertLegacySigns"); // Paper
@@ -237,7 +242,21 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C
if (!event.callEvent()) {
return false;
}
- player.getServer().getCommands().performCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle()), event.getMessage());
+
+ // Scissors start - Add optional permissions to command signs
+ final MinecraftServer vanillaServer = player.getServer();
+ final CraftServer craftServer = vanillaServer.server;
+ final CraftPlayer craftPlayer = player.getBukkitEntity();
+ final Commands commands = vanillaServer.getCommands();
+
+ if (ScissorsConfig.commandSignsBypassPermissions)
+ {
+ commands.performCommand(this.createCommandSourceStack(((org.bukkit.craftbukkit.entity.CraftPlayer) event.getPlayer()).getHandle()), event.getMessage());
+ } else
+ {
+ craftServer.dispatchCommand(craftPlayer, command.substring(1));
+ }
+ // Scissors end
// Paper end
}
}

View File

@@ -0,0 +1,18 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Mon, 29 May 2023 19:34:50 -0300
Subject: [PATCH] Fix component extra empty array exploit
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index 2873ed7c443ed8c8c57a8b1d3e444d229f10f07b..a2149452ee461002ea74189c5aa49cddd943d0cf 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java
+++ b/src/main/java/net/minecraft/network/chat/Component.java
@@ -266,6 +266,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
if (!jsonelement.isJsonObject()) {
if (jsonelement.isJsonArray()) {
JsonArray jsonarray = jsonelement.getAsJsonArray();
+ if (jsonarray.size() <= 0) throw new JsonParseException("Unexpected empty array of components"); // Scissors
ichatmutablecomponent = null;
Iterator iterator = jsonarray.iterator();

View File

@@ -1,33 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Mon, 11 Jul 2022 17:10:17 -0300
Subject: [PATCH] Validate block entity tag query positions
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index a102586b42ac408a3f655f7c0d069ab0990ec7fc..1c56ca1f7ed3064bfd3352cf46741fc64bbee4eb 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1240,7 +1240,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
if (this.player.hasPermissions(2)) {
Entity entity = this.player.getLevel().getEntity(packet.getEntityId());
- if (entity != null) {
+ if (entity != null && !isOutsideOfReach(entity.position().x, entity.position().y, entity.position().z)) { // Scissors - Prevent querying of entities out of reach
CompoundTag nbttagcompound = entity.saveWithoutId(new CompoundTag());
this.player.connection.send(new ClientboundTagQueryPacket(packet.getTransactionId(), nbttagcompound));
@@ -1252,8 +1252,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleBlockEntityTagQuery(ServerboundBlockEntityTagQuery packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
- if (this.player.hasPermissions(2)) {
- BlockEntity tileentity = this.player.getLevel().getBlockEntity(packet.getPos());
+ // Scissors start - Validate block entity tag query positions, prevent querying block entities out of reach
+ final BlockPos pos = packet.getPos();
+ if (this.player.hasPermissions(2) && Level.isInSpawnableBounds(pos) && !isOutsideOfReach(pos.getX(), pos.getY(), pos.getZ())) {
+ BlockEntity tileentity = this.player.getLevel().isLoaded(pos) ? this.player.getLevel().getBlockEntity(pos) : null;
+ // Scissors end
CompoundTag nbttagcompound = tileentity != null ? tileentity.save(new CompoundTag()) : null;
this.player.connection.send(new ClientboundTagQueryPacket(packet.getTransactionId(), nbttagcompound));

View File

@@ -0,0 +1,125 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Wed, 31 May 2023 18:14:00 -0300
Subject: [PATCH] Add depth limit to Component deserializer
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index a2149452ee461002ea74189c5aa49cddd943d0cf..f1d1501211a923c0ccab6b5982887c3a9262889b 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java
+++ b/src/main/java/net/minecraft/network/chat/Component.java
@@ -26,6 +26,7 @@ import java.util.List;
import java.util.Map.Entry;
import java.util.Optional;
import javax.annotation.Nullable;
+import me.totalfreedom.scissors.ScissorsConfig; // Scissors
import net.minecraft.ChatFormatting; // Scissors
import net.minecraft.Util;
import net.minecraft.network.chat.contents.BlockDataSource;
@@ -44,6 +45,7 @@ import net.minecraft.util.GsonHelper;
import net.minecraft.util.LowerCaseEnumTypeAdapterFactory;
// CraftBukkit start
import com.google.common.collect.Streams;
+import java.util.regex.Pattern; // Scissors
import java.util.stream.Stream;
// CraftBukkit end
@@ -254,10 +256,16 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
throw new IllegalStateException("Couldn't get field 'lineStart' for JsonReader", nosuchfieldexception);
}
});
+ private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("%[0-9]+\\$s"); // Scissors
public Serializer() {}
- public MutableComponent deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+ // Scissors start
+ private MutableComponent deserialize(JsonElement jsonelement, JsonDeserializationContext jsondeserializationcontext, int depth) throws JsonParseException {
+ if (depth > ScissorsConfig.componentDepthLimit) {
+ throw new JsonParseException("Depth limit exceeded");
+ }
+ // Scissors end
if (jsonelement.isJsonPrimitive()) {
return Component.literal(jsonelement.getAsString());
} else {
@@ -273,7 +281,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
while (iterator.hasNext()) {
JsonElement jsonelement1 = (JsonElement) iterator.next();
- MutableComponent ichatmutablecomponent1 = this.deserialize(jsonelement1, jsonelement1.getClass(), jsondeserializationcontext);
+ MutableComponent ichatmutablecomponent1 = this.deserialize(jsonelement1, jsondeserializationcontext, depth + 1); // Scissors
if (ichatmutablecomponent == null) {
ichatmutablecomponent = ichatmutablecomponent1;
@@ -297,12 +305,17 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
s = GsonHelper.getAsString(jsonobject, "translate");
String s1 = GsonHelper.getAsString(jsonobject, "fallback", (String) null);
+ // Scissors start - Penalize depth for placeholders in translate & fallback
+ long translate_placeholders = PLACEHOLDER_PATTERN.matcher(s).results().count();
+ long fallback_placeholders = s1 != null ? PLACEHOLDER_PATTERN.matcher(s1).results().count() : 0;
+ int penalty = (int)Math.max(translate_placeholders, fallback_placeholders) * 12;
+ // Scissors end
if (jsonobject.has("with")) {
JsonArray jsonarray1 = GsonHelper.getAsJsonArray(jsonobject, "with");
Object[] aobject = new Object[jsonarray1.size()];
for (int i = 0; i < aobject.length; ++i) {
- aobject[i] = Serializer.unwrapTextArgument(this.deserialize(jsonarray1.get(i), type, jsondeserializationcontext));
+ aobject[i] = Serializer.unwrapTextArgument(this.deserialize(jsonarray1.get(i), jsondeserializationcontext, depth + 1 + penalty)); // Scissors
}
ichatmutablecomponent = Component.translatableWithFallback(s, s1, aobject);
@@ -318,7 +331,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
ichatmutablecomponent = Component.score(GsonHelper.getAsString(jsonobject1, "name"), GsonHelper.getAsString(jsonobject1, "objective"));
} else if (jsonobject.has("selector")) {
- Optional<Component> optional = this.parseSeparator(type, jsondeserializationcontext, jsonobject);
+ Optional<Component> optional = this.parseSeparator(jsondeserializationcontext, jsonobject, depth + 1); // Scissors
ichatmutablecomponent = Component.selector(GsonHelper.getAsString(jsonobject, "selector"), optional);
} else if (jsonobject.has("keybind")) {
@@ -329,7 +342,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
}
s = GsonHelper.getAsString(jsonobject, "nbt");
- Optional<Component> optional1 = this.parseSeparator(type, jsondeserializationcontext, jsonobject);
+ Optional<Component> optional1 = this.parseSeparator(jsondeserializationcontext, jsonobject, depth + 1); // Scissors
boolean flag = GsonHelper.getAsBoolean(jsonobject, "interpret", false);
Object object;
@@ -356,7 +369,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
}
for (int j = 0; j < jsonarray2.size(); ++j) {
- ichatmutablecomponent.append((Component) this.deserialize(jsonarray2.get(j), type, jsondeserializationcontext));
+ ichatmutablecomponent.append((Component) this.deserialize(jsonarray2.get(j), jsondeserializationcontext, depth + 1)); // Scissors
}
}
@@ -366,6 +379,12 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
}
}
+ // Scissors start
+ public MutableComponent deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+ return this.deserialize(jsonelement, jsondeserializationcontext, 1);
+ }
+ // Scissors end
+
private static Object unwrapTextArgument(Object text) {
if (text instanceof Component) {
Component ichatbasecomponent = (Component) text;
@@ -384,8 +403,10 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
return text;
}
- private Optional<Component> parseSeparator(Type type, JsonDeserializationContext context, JsonObject json) {
- return json.has("separator") ? Optional.of(this.deserialize(json.get("separator"), type, context)) : Optional.empty();
+ // Scissors start
+ private Optional<Component> parseSeparator(JsonDeserializationContext context, JsonObject json, int depth) {
+ return json.has("separator") ? Optional.of(this.deserialize(json.get("separator"), context, depth + 1)) : Optional.empty();
+ // Scissors end
}
private void serializeStyle(Style style, JsonObject json, JsonSerializationContext context) {

View File

@@ -1,22 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Mon, 25 Jul 2022 09:43:20 +0100
Subject: [PATCH] Fix out of bound chunks crashing server
diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
index cf1cb0996bb06ae7cf56e0ecf0c01f03da7fdd83..57154a7dd88f00ac7cd78f51ead718853e0d2101 100644
--- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java
+++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java
@@ -157,7 +157,10 @@ public class WorldGenRegion implements WorldGenLevel {
if (ichunkaccess != null) {
throw (RuntimeException) Util.pauseInIde((Throwable) (new RuntimeException(String.format("Chunk is not of correct status. Expecting %s, got %s | %s %s", leastStatus, ichunkaccess.getStatus(), chunkX, chunkZ))));
} else {
- throw (RuntimeException) Util.pauseInIde((Throwable) (new RuntimeException(String.format("We are asking a region for a chunk out of bound | %s %s", chunkX, chunkZ))));
+ // Scissors start - Fix out of bound chunks crashing server
+ // throw (RuntimeException) Util.pauseInIde((Throwable) (new RuntimeException(String.format("We are asking a region for a chunk out of bound | %s %s", chunkX, chunkZ))));
+ return null;
+ // Scissors end
}
}
}

View File

@@ -0,0 +1,86 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Fri, 2 Jun 2023 20:55:18 +0100
Subject: [PATCH] Implement command block events
diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java
index c99fc118013cb3d4043638e2001a8297e79ddf9c..cdaa81e1f2167b29ec01cc25e51a8400deb533d2 100644
--- a/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java
+++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundSetCommandMinecartPacket.java
@@ -9,7 +9,7 @@ import net.minecraft.world.level.BaseCommandBlock;
import net.minecraft.world.level.Level;
public class ServerboundSetCommandMinecartPacket implements Packet<ServerGamePacketListener> {
- private final int entity;
+ public final int entity; // Scissors - private -> public
private final String command;
private final boolean trackOutput;
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 08390409bbaf9f3ae8260ab36ea5e0580e93b3e3..e2f7cef0edf2775083eb87b1cb5984ec8b25c76f 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1,6 +1,8 @@
package net.minecraft.server.network;
import me.totalfreedom.scissors.ScissorsConfig; // Scissors
+import me.totalfreedom.scissors.event.block.CommandBlockPlayerEditEvent; // Scissors
+import me.totalfreedom.scissors.event.block.CommandMinecartPlayerEditEvent; // Scissors
import me.totalfreedom.scissors.event.player.SpectatorTeleportEvent; // Scissors
import com.google.common.collect.Lists;
import com.google.common.primitives.Floats;
@@ -159,6 +161,7 @@ import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.ProfilePublicKey;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.entity.vehicle.Boat;
+import net.minecraft.world.entity.vehicle.MinecartCommandBlock; // Scissors
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.Item;
@@ -187,6 +190,8 @@ import net.minecraft.world.phys.Vec3;
import net.minecraft.world.phys.shapes.BooleanOp;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
+import org.bukkit.craftbukkit.block.CraftCommandBlock; // Scissors
+import org.bukkit.craftbukkit.entity.CraftMinecartCommand; // Scissors
import org.slf4j.Logger;
// CraftBukkit start
@@ -1007,6 +1012,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.player.level().getChunkAt(blockposition).setBlockEntity(tileentity);
}
+ // Scissors start
+ CommandBlockPlayerEditEvent event = new CommandBlockPlayerEditEvent(this.getCraftPlayer(), commandblocklistenerabstract.getCommand(), s, new CraftCommandBlock(this.player.level().getWorld(), tileentitycommand));
+
+ if (!event.callEvent()) {
+ return;
+ }
+
+ s = event.getNewCommand();
+ // Scissors end
+
commandblocklistenerabstract.setCommand(s);
commandblocklistenerabstract.setTrackOutput(flag);
if (!flag) {
@@ -1038,7 +1053,18 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
BaseCommandBlock commandblocklistenerabstract = packet.getCommandBlock(this.player.level());
if (commandblocklistenerabstract != null) {
- commandblocklistenerabstract.setCommand(packet.getCommand());
+ // Scissors start - Implement command block events
+ String command = packet.getCommand();
+ CommandMinecartPlayerEditEvent event = new CommandMinecartPlayerEditEvent(this.getCraftPlayer(), commandblocklistenerabstract.getCommand(), command, new CraftMinecartCommand(this.cserver, (MinecartCommandBlock) this.player.level().getEntity(packet.entity)));
+
+ if (!event.callEvent()) {
+ return;
+ }
+
+ command = event.getNewCommand();
+ commandblocklistenerabstract.setCommand(command);
+
+ // Scissors end
commandblocklistenerabstract.setTrackOutput(packet.isTrackOutput());
if (!packet.isTrackOutput()) {
commandblocklistenerabstract.setLastOutput((Component) null);

View File

@@ -1,24 +1,21 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net> From: Allink <arclicious@vivaldi.net>
Date: Fri, 2 Jun 2023 23:30:40 +0100 Date: Fri, 2 Jun 2023 22:13:54 +0100
Subject: [PATCH] Add depth limit to SNBT Subject: [PATCH] Add depth limit to SNBT
diff --git a/src/main/java/net/minecraft/nbt/TagParser.java b/src/main/java/net/minecraft/nbt/TagParser.java diff --git a/src/main/java/net/minecraft/nbt/TagParser.java b/src/main/java/net/minecraft/nbt/TagParser.java
index 28a13331ac7713cde725bf7c7ce6be959227d506..4f5573d1cc5630519122010d44f0a82e2948e767 100644 index fbfe810e8be6cb159742f7fd85e7491b9cefa4dc..b70bafe2766efcbcce00287e6511a588560564a6 100644
--- a/src/main/java/net/minecraft/nbt/TagParser.java --- a/src/main/java/net/minecraft/nbt/TagParser.java
+++ b/src/main/java/net/minecraft/nbt/TagParser.java +++ b/src/main/java/net/minecraft/nbt/TagParser.java
@@ -169,8 +169,58 @@ public class TagParser { @@ -169,9 +169,56 @@ public class TagParser {
} }
this.expect('}'); this.expect('}');
- return compoundTag; - return compoundTag;
+ + return exceedsDepthLimit(compoundTag) ? new CompoundTag() : compoundTag; // Scissors - Add depth limit to SNBT
+ // Scissors start - Add depth limit to SNBT }
+ return exceedsDepthLimit(compoundTag) ? new CompoundTag() : compoundTag;
+ // Scissors end
+ }
+
+ // Scissors start - Add depth limit to SNBT + // Scissors start - Add depth limit to SNBT
+ private boolean exceedsDepthLimit(Tag tag) { + private boolean exceedsDepthLimit(Tag tag) {
+ return this.exceedsDepthLimit(0, tag); + return this.exceedsDepthLimit(0, tag);
@@ -63,25 +60,22 @@ index 28a13331ac7713cde725bf7c7ce6be959227d506..4f5573d1cc5630519122010d44f0a82e
+ } + }
+ +
+ return false; + return false;
} + }
+ // Scissors end + // Scissors end
+
private Tag readListTag() throws CommandSyntaxException { private Tag readListTag() throws CommandSyntaxException {
this.expect('['); this.expect('[');
@@ -203,7 +253,11 @@ public class TagParser { this.reader.skipWhitespace();
@@ -203,7 +250,7 @@ public class TagParser {
} }
this.expect(']'); this.expect(']');
- return listTag; - return listTag;
+ + return exceedsDepthLimit(listTag) ? new ListTag() : listTag; // Scissors - Add depth limit to SNBT
+ // Scissors start - Add depth limit to SNBT
+ return exceedsDepthLimit(listTag) ? new ListTag() : listTag;
+ // return listTag;
+ // Scissors end
} }
} }
@@ -228,7 +282,7 @@ public class TagParser { @@ -228,7 +275,7 @@ public class TagParser {
} }
private <T extends Number> List<T> readArray(TagType<?> arrayTypeReader, TagType<?> typeReader) throws CommandSyntaxException { private <T extends Number> List<T> readArray(TagType<?> arrayTypeReader, TagType<?> typeReader) throws CommandSyntaxException {
@@ -90,7 +84,7 @@ index 28a13331ac7713cde725bf7c7ce6be959227d506..4f5573d1cc5630519122010d44f0a82e
while(true) { while(true) {
if (this.reader.peek() != ']') { if (this.reader.peek() != ']') {
@@ -241,11 +295,11 @@ public class TagParser { @@ -241,11 +288,11 @@ public class TagParser {
} }
if (typeReader == ByteTag.TYPE) { if (typeReader == ByteTag.TYPE) {
@@ -105,7 +99,7 @@ index 28a13331ac7713cde725bf7c7ce6be959227d506..4f5573d1cc5630519122010d44f0a82e
} }
if (this.hasElementSeparator()) { if (this.hasElementSeparator()) {
@@ -257,7 +311,7 @@ public class TagParser { @@ -257,7 +304,7 @@ public class TagParser {
} }
this.expect(']'); this.expect(']');

View File

@@ -1,227 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: VideoGameSmash12 <videogamesm12@gmail.com>
Date: Sun, 2 Oct 2022 19:43:40 -0600
Subject: [PATCH] Adds configuration option to outright disable Game Master
Blocks and fixes some configuration bugs
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
index 52b0161711634f9ad8cecf58668737a726278f72..bb58d90e9d676761a43a12cbc1c3b687d00654b1 100644
--- a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
+++ b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
@@ -65,8 +65,8 @@ public class ScissorsConfig
config.options().header(HEADER);
config.options().copyDefaults(true);
- version = getInt("config-version", 2);
- set("config-version", 2);
+ version = getInt("config-version", 3);
+ set("config-version", 3);
readConfig(ScissorsConfig.class, null);
}
@@ -135,11 +135,17 @@ public class ScissorsConfig
// people still may want them to bypass permissions for warps
public static boolean commandSignsBypassPermissions = false;
- public static void commandSignsBypassPermissions()
+ private static void commandSignsBypassPermissions()
{
commandSignsBypassPermissions = getBoolean("commandSignsBypassPermissions", false);
}
+ public static boolean disableGameMasterBlocks = false;
+ private static void disableGameMasterBlocks()
+ {
+ disableGameMasterBlocks = getBoolean("disableGameMasterBlocks", false);
+ }
+
private static void set(String path, Object val)
{
config.set(path, val);
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index dbf982c85ff361184a34b462bec331ac5b1a472c..8ec188a09dd1d5150a25fdf18f49deac1593fb4d 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1,5 +1,6 @@
package net.minecraft.server.network;
+import com.github.atlasmediagroup.scissors.ScissorsConfig;
import com.github.atlasmediagroup.scissors.event.player.SpectatorTeleportEvent;
import com.google.common.collect.Lists;
import com.google.common.primitives.Floats;
@@ -987,7 +988,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleSetStructureBlock(ServerboundSetStructureBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks()) { // Scissors - Add configuration option to completely disable game master blocks
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level.getBlockState(blockposition);
BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);
@@ -1045,7 +1046,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleSetJigsawBlock(ServerboundSetJigsawBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks()) { // Scissors - Add configuration option to completely disable game master blocks
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level.getBlockState(blockposition);
BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);
@@ -1068,7 +1069,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleJigsawGenerate(ServerboundJigsawGeneratePacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks()) { // Scissors - Add configuration option to completely disable game master blocks
BlockPos blockposition = packet.getPos();
BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);
diff --git a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
index c93d21142c5f7b2799eeac7a8314ffdb7360162e..2279b7958c837a9616e8de2c2de53950d2f19a59 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/JigsawBlockEntity.java
@@ -1,5 +1,6 @@
package net.minecraft.world.level.block.entity;
+import com.github.atlasmediagroup.scissors.ScissorsConfig; // Scissors
import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent;
import com.google.common.collect.Lists;
import java.util.Arrays;
@@ -122,6 +123,12 @@ public class JigsawBlockEntity extends BlockEntity {
}
public void generate(ServerLevel world, int maxDepth, boolean keepJigsaws) {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return;
+ }
+ // Scissors end
+
// Scissors - Add master block fire event
final BlockPos blockPos = this.getBlockPos();
final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
diff --git a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
index ed297126ebc05c1eb81e32b7644552d5627b3697..896afd5ce022a4f4d83f2985112bcf0e3fc5f37d 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/StructureBlockEntity.java
@@ -7,6 +7,7 @@ import java.util.Random;
import java.util.stream.Stream;
import javax.annotation.Nullable;
+import com.github.atlasmediagroup.scissors.ScissorsConfig;
import com.github.atlasmediagroup.scissors.event.block.MasterBlockFireEvent;
import net.minecraft.ResourceLocationException;
import net.minecraft.Util;
@@ -130,6 +131,12 @@ public class StructureBlockEntity extends BlockEntity {
}
private void updateBlockState() {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return;
+ }
+ // Scissors end
+
if (this.level != null) {
BlockPos blockPos = this.getBlockPos();
BlockState blockState = this.level.getBlockState(blockPos);
@@ -152,6 +159,12 @@ public class StructureBlockEntity extends BlockEntity {
}
public boolean usedBy(Player player) {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return false;
+ }
+ // Scissors end
+
if (!player.canUseGameMasterBlocks()) {
return false;
} else {
@@ -265,6 +278,12 @@ public class StructureBlockEntity extends BlockEntity {
}
public boolean detectSize() {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return false;
+ }
+ // Scissors end
+
if (this.mode != StructureMode.SAVE) {
return false;
} else {
@@ -324,13 +343,18 @@ public class StructureBlockEntity extends BlockEntity {
}
public boolean saveStructure(boolean bl) {
+ // Scissors - Add option to completely disable structure and jigsaw blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return false;
+ }
+ // Scissors end
+
if (this.mode == StructureMode.SAVE && !this.level.isClientSide && this.structureName != null) {
// Scissors - Add master block fire event
final BlockPos pos = this.getBlockPos();
final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), pos.getX(), pos.getY(), pos.getZ()));
- if (!event.callEvent())
- {
+ if (!event.callEvent()) {
return false;
}
// Scissors end
@@ -371,6 +395,12 @@ public class StructureBlockEntity extends BlockEntity {
}
public boolean loadStructure(ServerLevel world, boolean bl) {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return false;
+ }
+ // Scissors end
+
if (this.mode == StructureMode.LOAD && this.structureName != null) {
// Scissors - Add master block fire event
final BlockPos blockPos = this.getBlockPos();
@@ -398,6 +428,12 @@ public class StructureBlockEntity extends BlockEntity {
}
public boolean loadStructure(ServerLevel world, boolean bl, StructureTemplate structureTemplate) {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return false;
+ }
+ // Scissors end
+
// Scissors - Add master block fire event
final BlockPos blockPos = this.getBlockPos();
final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
@@ -436,6 +472,12 @@ public class StructureBlockEntity extends BlockEntity {
}
public void unloadStructure() {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return;
+ }
+ // Scissors end
+
// Scissors - Add master block fire event
final BlockPos blockPos = this.getBlockPos();
final MasterBlockFireEvent event = new MasterBlockFireEvent(new Location(this.getLevel().getWorld(), blockPos.getX(), blockPos.getY(), blockPos.getZ()));
@@ -454,6 +496,12 @@ public class StructureBlockEntity extends BlockEntity {
}
public boolean isStructureLoadable() {
+ // Scissors start - Add configuration option to completely disable jigsaw and structure blocks
+ if (ScissorsConfig.disableGameMasterBlocks) {
+ return false;
+ }
+ // Scissors end
+
if (this.mode == StructureMode.LOAD && !this.level.isClientSide && this.structureName != null) {
ServerLevel serverLevel = (ServerLevel)this.level;
StructureManager structureManager = serverLevel.getStructureManager();

View File

@@ -1,14 +1,14 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com> From: Luna <lunahatesgogle@gmail.com>
Date: Wed, 7 Jun 2023 17:02:00 -0300 Date: Wed, 7 Jun 2023 16:50:35 -0300
Subject: [PATCH] Limit beacon effectRange Subject: [PATCH] Limit beacon effectRange
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
index 8038e3a10b563321df1e8cedd26b256078ce745a..7fb177779fa2bf30e4d190a277691eeab375120e 100644 index 5c951ef93fe4cf4f085df86b0cefc02bc2610ab9..1d08e3a9493154e075a289d2eb9a8772289534af 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java
@@ -84,7 +84,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider { @@ -83,7 +83,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
private double effectRange = -1; private double effectRange = -1;
public double getEffectRange() { public double getEffectRange() {
@@ -17,7 +17,7 @@ index 8038e3a10b563321df1e8cedd26b256078ce745a..7fb177779fa2bf30e4d190a277691eea
return this.levels * 10 + 10; return this.levels * 10 + 10;
} else { } else {
return effectRange; return effectRange;
@@ -410,6 +410,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider { @@ -428,6 +428,7 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name
this.lockKey = LockCode.fromTag(nbt); this.lockKey = LockCode.fromTag(nbt);
this.effectRange = nbt.contains(PAPER_RANGE_TAG, 6) ? nbt.getDouble(PAPER_RANGE_TAG) : -1; // Paper this.effectRange = nbt.contains(PAPER_RANGE_TAG, 6) ? nbt.getDouble(PAPER_RANGE_TAG) : -1; // Paper

View File

@@ -0,0 +1,18 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Tue, 13 Jun 2023 18:29:18 -0300
Subject: [PATCH] Improve validation of ResourceLocations
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftNamespacedKey.java b/src/main/java/org/bukkit/craftbukkit/util/CraftNamespacedKey.java
index 5014192edb9616ce725fc1592832034789527b6f..64da1b0afd51720803aba0d9e86d0b1743bdb0da 100644
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftNamespacedKey.java
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftNamespacedKey.java
@@ -21,6 +21,7 @@ public final class CraftNamespacedKey {
}
public static NamespacedKey fromMinecraft(ResourceLocation minecraft) {
+ if (minecraft == null) throw new IllegalArgumentException("Null ResourceLocation provided"); // Scissors
return new NamespacedKey(minecraft.getNamespace(), minecraft.getPath());
}

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Sat, 1 Jul 2023 21:22:29 -0300
Subject: [PATCH] Don't log on too many chained updates
diff --git a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
index ec81be70cd6f92bbf9011395cb361f0ce54c5ad0..97da1db83dca24759b52fc2d0a360187dbef86f1 100644
--- a/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
+++ b/src/main/java/net/minecraft/world/level/redstone/CollectingNeighborUpdater.java
@@ -56,7 +56,7 @@ public class CollectingNeighborUpdater implements NeighborUpdater {
this.stack.push(entry);
}
} else if (this.count - 1 == this.maxChainedNeighborUpdates) {
- LOGGER.error("Too many chained neighbor updates. Skipping the rest. First skipped position: " + pos.toShortString());
+ // Scissors - don't log
}
if (!bl) {

View File

@@ -1,23 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Apr 2023 18:24:09 -0300
Subject: [PATCH] Limit map decoration text length
diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java
index 3d9c3e3ec56bc1bf5719e31d169015eaf598bde3..1233c8904f6a4f91931b42a08c514d783267a4c8 100644
--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java
+++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapDecoration.java
@@ -14,6 +14,12 @@ public class MapDecoration {
private final Component name;
public MapDecoration(MapDecoration.Type type, byte x, byte z, byte rotation, @Nullable Component text) {
+ // Scissors start - Limit decoration text length
+ if (text != null && text.getString().length() > 32) {
+ text = null;
+ }
+ // Scissors end
+
this.type = type;
this.x = x;
this.y = z;

View File

@@ -0,0 +1,46 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Tue, 4 Jul 2023 18:49:34 -0300
Subject: [PATCH] Fix packet-related lag exploits
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index e2f7cef0edf2775083eb87b1cb5984ec8b25c76f..c645e05ec6c309448460c7e983931b9dc79a7f7e 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -972,7 +972,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.player.sendSystemMessage(Component.translatable("advMode.notEnabled"));
} else if (!this.player.canUseGameMasterBlocks() && (!this.player.isCreative() || !this.player.getBukkitEntity().hasPermission("minecraft.commandblock"))) { // Paper - command block permission
this.player.sendSystemMessage(Component.translatable("advMode.notAllowed"));
- } else {
+ } else if (this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BaseCommandBlock commandblocklistenerabstract = null;
CommandBlockEntity tileentitycommand = null;
BlockPos blockposition = packet.getPos();
@@ -1139,7 +1139,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleSetStructureBlock(ServerboundSetStructureBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (this.player.canUseGameMasterBlocks() && this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level().getBlockState(blockposition);
BlockEntity tileentity = this.player.level().getBlockEntity(blockposition);
@@ -1197,7 +1197,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleSetJigsawBlock(ServerboundSetJigsawBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (this.player.canUseGameMasterBlocks() && this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level().getBlockState(blockposition);
BlockEntity tileentity = this.player.level().getBlockEntity(blockposition);
@@ -1220,7 +1220,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override
public void handleJigsawGenerate(ServerboundJigsawGeneratePacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel());
- if (this.player.canUseGameMasterBlocks()) {
+ if (this.player.canUseGameMasterBlocks() && this.player.level().isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockEntity tileentity = this.player.level().getBlockEntity(blockposition);

View File

@@ -1,23 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Apr 2023 18:24:55 -0300
Subject: [PATCH] Limit map decoration count
diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
index 6f64d1ce0f5b20e1579f8af64c08ef8fc4e4444b..d78036b62bb36539d3d3e1a8299af2fa60ebd379 100644
--- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
+++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java
@@ -357,6 +357,12 @@ public class MapItemSavedData extends SavedData {
}
private void addDecoration(MapDecoration.Type type, @Nullable LevelAccessor world, String key, double x, double z, double rotation, @Nullable Component text) {
+ // Scissors start - Limit decoration count
+ if (this.decorations.size() > 32) {
+ return;
+ }
+ // Scissors end
+
int i = 1 << this.scale;
float f = (float) (x - (double) this.x) / (float) i;
float f1 = (float) (z - (double) this.z) / (float) i;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Limit save data for Bees and Vexes
diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java
index 083640b7e4aee75db9b884aebd640c9410e669ca..76a2d683c7a32a8af2683cb2d7a3e33111064b27 100644 index 55026e1731e41b4e3e4c6a8fef5d96a32051a556..4a8383d48da4fcf39ec528a00cd09417f8d08c57 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Bee.java --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java
@@ -223,8 +223,12 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -227,8 +227,12 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal {
@Override @Override
public void readAdditionalSaveData(CompoundTag nbt) { public void readAdditionalSaveData(CompoundTag nbt) {
this.hivePos = null; this.hivePos = null;
@@ -18,16 +18,16 @@ index 083640b7e4aee75db9b884aebd640c9410e669ca..76a2d683c7a32a8af2683cb2d7a3e331
+ { + {
+ // Scissors start - Limit HivePos + // Scissors start - Limit HivePos
+ final BlockPos savedHivePos = NbtUtils.readBlockPos(nbt.getCompound("HivePos")); + final BlockPos savedHivePos = NbtUtils.readBlockPos(nbt.getCompound("HivePos"));
+ this.hivePos = this.level.isLoadedAndInBounds(savedHivePos) ? savedHivePos : null; + this.hivePos = this.level().isLoadedAndInBounds(savedHivePos) ? savedHivePos : null;
+ // Scissors end - Limit HivePos + // Scissors end - Limit HivePos
} }
this.savedFlowerPos = null; this.savedFlowerPos = null;
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..a4c4c7cd5a4325916836728f11d2164ad211143b 100644 index 65cb385ab294e362d666a6d03c4496cdc3b64890..42c3e946e51f6dcb100078969a4fb46c77f42b2d 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
@@ -107,8 +107,12 @@ public class Vex extends Monster { @@ -118,8 +118,12 @@ public class Vex extends Monster implements TraceableEntity {
@Override @Override
public void readAdditionalSaveData(CompoundTag nbt) { public void readAdditionalSaveData(CompoundTag nbt) {
super.readAdditionalSaveData(nbt); super.readAdditionalSaveData(nbt);
@@ -37,7 +37,7 @@ index f78f3f2d740f7b4800e17d9bc64b7b4fedda49b9..a4c4c7cd5a4325916836728f11d2164a
+ { + {
+ // Scissors start - Limit Vex bound origin + // Scissors start - Limit Vex bound origin
+ final BlockPos savedBoundOrigin = new BlockPos(nbt.getInt("BoundX"), nbt.getInt("BoundY"), nbt.getInt("BoundZ")); + final BlockPos savedBoundOrigin = new BlockPos(nbt.getInt("BoundX"), nbt.getInt("BoundY"), nbt.getInt("BoundZ"));
+ this.boundOrigin = this.level.isLoadedAndInBounds(savedBoundOrigin) ? savedBoundOrigin : null; + this.boundOrigin = this.level().isLoadedAndInBounds(savedBoundOrigin) ? savedBoundOrigin : null;
+ // Scissors end - Limit Vex bound origin + // Scissors end - Limit Vex bound origin
} }

View File

@@ -1,19 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Apr 2023 18:32:03 -0300
Subject: [PATCH] Don't warn on duplicate entity UUIDs
diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
index 8cb246863e06c5b95ba1442e2ec47095026c4f39..48990a8192465e11b27c072fc7d4351a6c5fb7a0 100644
--- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
+++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java
@@ -147,7 +147,7 @@ public class PersistentEntitySectionManager<T extends EntityAccess> implements A
return true;
}
// Paper end
- PersistentEntitySectionManager.LOGGER.warn("UUID of added entity already exists: {}", entity);
+ // Scissors - Don't warn on duplicate entity UUIDs
// Paper start
if (net.minecraft.world.level.Level.DEBUG_ENTITIES && ((Entity) entity).level.paperConfig.duplicateUUIDMode != com.destroystokyo.paper.PaperWorldConfig.DuplicateUUIDMode.NOTHING) {
if (((Entity) entity).addedToWorldStack != null) {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Mute invalid attributes
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
index 9cbfda029782385d1a7987f5be46d450bd8a758e..2421573bbc738ce5c2ac0e5a3013a4813d807dc5 100644 index dd1102d5291ef6f18e82400a6d8a0a376cc071e9..d304612325d6c70a4100582d6c0fbfeecd8716d1 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java
@@ -127,7 +127,7 @@ public class AttributeMap { @@ -145,7 +145,7 @@ public class AttributeMap {
} }
}, () -> { }, () -> {
@@ -18,7 +18,7 @@ index 9cbfda029782385d1a7987f5be46d450bd8a758e..2421573bbc738ce5c2ac0e5a3013a481
} }
diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java
index 5f94be8e8793f0b5b99e630882f53199d688eadf..7da1c212ff15940c849ac27061d47c5d9ffb1a30 100644 index 8de09eea46c27db9d8c472e84f768976769d1b0b..c8d05d35368e0cf593bcc3589b6c108a901bdc22 100644
--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java
+++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeModifier.java
@@ -90,7 +90,7 @@ public class AttributeModifier { @@ -90,7 +90,7 @@ public class AttributeModifier {

View File

@@ -1,23 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Mon, 29 May 2023 19:47:48 -0300
Subject: [PATCH] Fix component extra empty array exploit
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index 6978d14c6bd90ffb640e39e8666430d95d5ef45c..474ed00c09d58a7796cd543c9bcf8752e2f9f742 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java
+++ b/src/main/java/net/minecraft/network/chat/Component.java
@@ -201,6 +201,12 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
} else if (!jsonelement.isJsonObject()) {
if (jsonelement.isJsonArray()) {
JsonArray jsonarray = jsonelement.getAsJsonArray();
+ // Scissors start
+ if (jsonarray.size() <= 0) {
+ throw new JsonParseException("Unexpected empty array of components");
+ }
+ // Scissors end
+
MutableComponent ichatmutablecomponent = null;
Iterator iterator = jsonarray.iterator();

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Mute invalid Enderdragon phases
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java
index 235b1548ccd1ff6a7ff05fc6a903d8b053aea5ce..92b4bd06c53e1f2c5c4c05ec7dd10e15889f4ebb 100644 index bca131e9c428e2cb073ae2ef517dda12f73a5dcd..b9d603c82b12299e94c31928b36c9517834cff62 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonChargePlayerPhase.java
@@ -19,7 +19,7 @@ public class DragonChargePlayerPhase extends AbstractDragonPhaseInstance { @@ -20,7 +20,7 @@ public class DragonChargePlayerPhase extends AbstractDragonPhaseInstance {
@Override @Override
public void doServerTick() { public void doServerTick() {
if (this.targetLocation == null) { if (this.targetLocation == null) {
@@ -18,10 +18,10 @@ index 235b1548ccd1ff6a7ff05fc6a903d8b053aea5ce..92b4bd06c53e1f2c5c4c05ec7dd10e15
} else if (this.timeSinceCharge > 0 && this.timeSinceCharge++ >= 10) { } else if (this.timeSinceCharge > 0 && this.timeSinceCharge++ >= 10) {
this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN); this.dragon.getPhaseManager().setPhase(EnderDragonPhase.HOLDING_PATTERN);
diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
index 318a288a9170254b682955d96a150e99ca89b345..bcdd44cc2927791eae8492d316f26b52b58a2a06 100644 index a3456b35db4e938f91d6bc32d4d202a011bf13c4..aad0b066e4fd63195aa117c5a03f64846bf46fbd 100644
--- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
+++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/phases/DragonStrafePlayerPhase.java
@@ -29,7 +29,7 @@ public class DragonStrafePlayerPhase extends AbstractDragonPhaseInstance { @@ -32,7 +32,7 @@ public class DragonStrafePlayerPhase extends AbstractDragonPhaseInstance {
@Override @Override
public void doServerTick() { public void doServerTick() {
if (this.attackTarget == null) { if (this.attackTarget == null) {

View File

@@ -1,151 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Wed, 31 May 2023 20:44:20 -0300
Subject: [PATCH] Add depth limit to Component deserializer
diff --git a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
index bb58d90e9d676761a43a12cbc1c3b687d00654b1..74f33cba7d713eddca5a58a2b33cad357792145e 100644
--- a/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
+++ b/src/main/java/com/github/atlasmediagroup/scissors/ScissorsConfig.java
@@ -65,8 +65,8 @@ public class ScissorsConfig
config.options().header(HEADER);
config.options().copyDefaults(true);
- version = getInt("config-version", 3);
- set("config-version", 3);
+ version = getInt("config-version", 4);
+ set("config-version", 4);
readConfig(ScissorsConfig.class, null);
}
@@ -146,6 +146,12 @@ public class ScissorsConfig
disableGameMasterBlocks = getBoolean("disableGameMasterBlocks", false);
}
+ public static int componentDepthLimit = 128;
+ private static void componentDepthLimit()
+ {
+ componentDepthLimit = getInt("componentDepthLimit", 128);
+ }
+
private static void set(String path, Object val)
{
config.set(path, val);
diff --git a/src/main/java/net/minecraft/network/chat/Component.java b/src/main/java/net/minecraft/network/chat/Component.java
index 474ed00c09d58a7796cd543c9bcf8752e2f9f742..68e99223b0b084bdfdb9990780150bbc7d8ad8ea 100644
--- a/src/main/java/net/minecraft/network/chat/Component.java
+++ b/src/main/java/net/minecraft/network/chat/Component.java
@@ -1,5 +1,6 @@
package net.minecraft.network.chat;
+import com.github.atlasmediagroup.scissors.ScissorsConfig; // Scissors
import com.google.common.collect.Lists;
import io.papermc.paper.adventure.AdventureComponent; // Paper
import com.google.gson.Gson;
@@ -33,6 +34,7 @@ import net.minecraft.util.GsonHelper;
import net.minecraft.util.LowerCaseEnumTypeAdapterFactory;
// CraftBukkit start
import com.google.common.collect.Streams;
+import java.util.regex.Pattern; // Scissors
import java.util.stream.Stream;
// CraftBukkit end
@@ -192,27 +194,31 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
throw new IllegalStateException("Couldn't get field 'lineStart' for JsonReader", nosuchfieldexception);
}
});
+ private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("%[0-9]+\\$s"); // Scissors
public Serializer() {}
- public MutableComponent deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+ // Scissors start
+ private MutableComponent deserialize(JsonElement jsonelement, JsonDeserializationContext jsondeserializationcontext, int depth) throws JsonParseException {
+ if (depth > ScissorsConfig.componentDepthLimit) {
+ throw new JsonParseException("Depth limit exceeded");
+ }
+
if (jsonelement.isJsonPrimitive()) {
return new TextComponent(jsonelement.getAsString());
} else if (!jsonelement.isJsonObject()) {
if (jsonelement.isJsonArray()) {
JsonArray jsonarray = jsonelement.getAsJsonArray();
- // Scissors start
if (jsonarray.size() <= 0) {
throw new JsonParseException("Unexpected empty array of components");
}
- // Scissors end
MutableComponent ichatmutablecomponent = null;
Iterator iterator = jsonarray.iterator();
while (iterator.hasNext()) {
JsonElement jsonelement1 = (JsonElement) iterator.next();
- MutableComponent ichatmutablecomponent1 = this.deserialize(jsonelement1, jsonelement1.getClass(), jsondeserializationcontext);
+ MutableComponent ichatmutablecomponent1 = this.deserialize(jsonelement1, jsondeserializationcontext, depth + 1);
if (ichatmutablecomponent == null) {
ichatmutablecomponent = ichatmutablecomponent1;
@@ -236,12 +242,17 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
if (jsonobject.has("translate")) {
s = GsonHelper.getAsString(jsonobject, "translate");
+
+ // Penalize depth for placeholders in translate & fallback
+ long translate_placeholders = PLACEHOLDER_PATTERN.matcher(s).results().count();
+ int penalty = (int)translate_placeholders * 12;
+
if (jsonobject.has("with")) {
JsonArray jsonarray1 = GsonHelper.getAsJsonArray(jsonobject, "with");
Object[] aobject = new Object[jsonarray1.size()];
for (int i = 0; i < aobject.length; ++i) {
- aobject[i] = this.deserialize(jsonarray1.get(i), type, jsondeserializationcontext);
+ aobject[i] = this.deserialize(jsonarray1.get(i), jsondeserializationcontext, depth + 1 + penalty);
if (aobject[i] instanceof TextComponent) {
TextComponent chatcomponenttext = (TextComponent) aobject[i];
@@ -264,7 +275,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
object = new ScoreComponent(GsonHelper.getAsString(jsonobject1, "name"), GsonHelper.getAsString(jsonobject1, "objective"));
} else if (jsonobject.has("selector")) {
- Optional<Component> optional = this.parseSeparator(type, jsondeserializationcontext, jsonobject);
+ Optional<Component> optional = this.parseSeparator(jsondeserializationcontext, jsonobject, depth + 1);
object = new SelectorComponent(GsonHelper.getAsString(jsonobject, "selector"), optional);
} else if (jsonobject.has("keybind")) {
@@ -275,7 +286,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
}
s = GsonHelper.getAsString(jsonobject, "nbt");
- Optional<Component> optional1 = this.parseSeparator(type, jsondeserializationcontext, jsonobject);
+ Optional<Component> optional1 = this.parseSeparator(jsondeserializationcontext, jsonobject, depth + 1);
boolean flag = GsonHelper.getAsBoolean(jsonobject, "interpret", false);
if (jsonobject.has("block")) {
@@ -300,7 +311,7 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
}
for (int j = 0; j < jsonarray2.size(); ++j) {
- ((MutableComponent) object).append(this.deserialize(jsonarray2.get(j), type, jsondeserializationcontext));
+ ((MutableComponent) object).append(this.deserialize(jsonarray2.get(j), jsondeserializationcontext, depth + 1));
}
}
@@ -309,8 +320,13 @@ public interface Component extends Message, FormattedText, Iterable<Component> {
}
}
- private Optional<Component> parseSeparator(Type type, JsonDeserializationContext context, JsonObject json) {
- return json.has("separator") ? Optional.of(this.deserialize(json.get("separator"), type, context)) : Optional.empty();
+ public MutableComponent deserialize(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
+ return this.deserialize(jsonelement, jsondeserializationcontext, 1);
+ }
+
+ private Optional<Component> parseSeparator(JsonDeserializationContext context, JsonObject json, int depth) {
+ return json.has("separator") ? Optional.of(this.deserialize(json.get("separator"), context, depth + 1)) : Optional.empty();
+ // Scissors end
}
private void serializeStyle(Style style, JsonObject json, JsonSerializationContext context) {

View File

@@ -0,0 +1,62 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Fri, 28 Jul 2023 19:33:23 -0300
Subject: [PATCH] Don't return null Components in the Component codec
Found by Sk8kman
diff --git a/src/main/java/net/minecraft/util/ExtraCodecs.java b/src/main/java/net/minecraft/util/ExtraCodecs.java
index 066d423dc908080157586555ba01053a2477d570..aa6e5de37ce69c9bc6b8e1e0b5ab0ee918fc27e2 100644
--- a/src/main/java/net/minecraft/util/ExtraCodecs.java
+++ b/src/main/java/net/minecraft/util/ExtraCodecs.java
@@ -62,7 +62,10 @@ public class ExtraCodecs {
});
public static final Codec<Component> COMPONENT = JSON.flatXmap((element) -> {
try {
- return DataResult.success(Component.Serializer.fromJson(element));
+ // Scissors start
+ final Component component = Component.Serializer.fromJson(element);
+ return DataResult.success(component != null ? component : Component.empty());
+ // Scissors end
} catch (JsonParseException var2) {
return DataResult.error(var2::getMessage);
}
@@ -75,7 +78,10 @@ public class ExtraCodecs {
});
public static final Codec<Component> FLAT_COMPONENT = Codec.STRING.flatXmap((json) -> {
try {
- return DataResult.success(Component.Serializer.fromJson(json));
+ // Scissors start
+ final Component component = Component.Serializer.fromJson(json);
+ return DataResult.success(component != null ? component : Component.empty());
+ // Scissors end
} catch (JsonParseException var2) {
return DataResult.error(var2::getMessage);
}
@@ -246,7 +252,7 @@ public class ExtraCodecs {
}, (pair) -> {
return ImmutableList.of(leftFunction.apply(pair), rightFunction.apply(pair));
});
- Codec<I> codec3 = RecordCodecBuilder.<Pair>create((instance) -> {
+ Codec<I> codec3 = RecordCodecBuilder.<Pair<P,P>>create((instance) -> { // Scissors - Decompile error
return instance.group(codec.fieldOf(leftFieldName).forGetter(Pair::getFirst), codec.fieldOf(rightFieldName).forGetter(Pair::getSecond)).apply(instance, Pair::of);
}).comapFlatMap((pair) -> {
return combineFunction.apply((P)pair.getFirst(), (P)pair.getSecond());
@@ -278,7 +284,7 @@ public class ExtraCodecs {
Optional<Pair<A, T>> optional = dataResult.resultOrPartial(mutableObject::setValue);
return optional.isPresent() ? dataResult : DataResult.error(() -> {
return "(" + (String)mutableObject.getValue() + " -> using default)";
- }, Pair.of(object, object));
+ }, (Pair<A, T>) Pair.of(object, object)); // Scissors - Decompile error
}
public <T> DataResult<T> coApply(DynamicOps<T> dynamicOps, A objectx, DataResult<T> dataResult) {
@@ -565,7 +571,7 @@ public class ExtraCodecs {
static record LazyInitializedCodec<A>(Supplier<Codec<A>> delegate) implements Codec<A> {
LazyInitializedCodec {
- supplier = Suppliers.memoize(supplier::get);
+ delegate = Suppliers.memoize(delegate::get); // Scissors - Decompile error
}
public <T> DataResult<Pair<A, T>> decode(DynamicOps<T> dynamicOps, T object) {

View File

@@ -0,0 +1,19 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Fri, 25 Aug 2023 11:51:47 +0100
Subject: [PATCH] Add length limit to note block sound
diff --git a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
index a2fc2c0437999dd09f080eafe8ea466b16cdf57b..0dcf1d7e041477fe31dce4b4ee707399520d30f2 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/SkullBlockEntity.java
@@ -80,7 +80,7 @@ public class SkullBlockEntity extends BlockEntity {
}
if (nbt.contains("note_block_sound", 8)) {
- this.noteBlockSound = ResourceLocation.tryParse(nbt.getString("note_block_sound"));
+ this.noteBlockSound = ResourceLocation.tryParse(StringUtil.truncateStringIfNecessary(nbt.getString("note_block_sound"), 32767, false)); // Scissors - Add length limit to note block sound
}
}

View File

@@ -1,86 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Allink <arclicious@vivaldi.net>
Date: Fri, 2 Jun 2023 23:42:46 +0100
Subject: [PATCH] Implement command block events
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 8ec188a09dd1d5150a25fdf18f49deac1593fb4d..0eb54b2b36df7870724e33d75d1d3f6d5492ffab 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1,6 +1,8 @@
package net.minecraft.server.network;
import com.github.atlasmediagroup.scissors.ScissorsConfig;
+import com.github.atlasmediagroup.scissors.event.block.CommandBlockPlayerEditEvent;
+import com.github.atlasmediagroup.scissors.event.block.CommandMinecartPlayerEditEvent;
import com.github.atlasmediagroup.scissors.event.player.SpectatorTeleportEvent;
import com.google.common.collect.Lists;
import com.google.common.primitives.Floats;
@@ -134,6 +136,7 @@ import net.minecraft.world.entity.player.ChatVisiblity;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.entity.vehicle.Boat;
+import net.minecraft.world.entity.vehicle.MinecartCommandBlock;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.BucketItem;
import net.minecraft.world.item.Item;
@@ -186,6 +189,7 @@ import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.craftbukkit.util.LazyPlayerSet;
import org.bukkit.craftbukkit.util.Waitable;
import org.bukkit.entity.Player;
+import org.bukkit.entity.minecart.CommandMinecart;
import org.bukkit.event.Event;
import org.bukkit.event.block.Action;
import org.bukkit.event.block.SignChangeEvent;
@@ -902,6 +906,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
this.player.level.getChunkAt(blockposition).setBlockEntity(tileentity);
}
+ // Scissors start - Implement command block events
+ if (commandblocklistenerabstract instanceof org.bukkit.block.CommandBlock commandBlock)
+ {
+ CommandBlockPlayerEditEvent event = new CommandBlockPlayerEditEvent(this.getCraftPlayer(), Objects.requireNonNullElse(commandblocklistenerabstract.getCommand(), ""), s, commandBlock);
+ event.callEvent();
+
+ if (event.isCancelled()) {
+ return;
+ }
+
+ s = event.getNewCommand();
+ }
+
+ // Scissors end
+
commandblocklistenerabstract.setCommand(s);
commandblocklistenerabstract.setTrackOutput(flag);
if (!flag) {
@@ -933,7 +952,27 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
BaseCommandBlock commandblocklistenerabstract = packet.getCommandBlock(this.player.level);
if (commandblocklistenerabstract != null) {
- commandblocklistenerabstract.setCommand(packet.getCommand());
+ // Scissors start - Implement command block events
+ String command = packet.getCommand();
+
+ if (commandblocklistenerabstract instanceof CommandMinecart commandMinecart)
+ {
+ CommandMinecartPlayerEditEvent event = new CommandMinecartPlayerEditEvent(this.getCraftPlayer(), Objects.requireNonNullElse(commandblocklistenerabstract.getCommand(), ""), command, commandMinecart);
+ event.callEvent();
+
+ if (event.isCancelled()) {
+ return;
+ }
+
+ command = event.getNewCommand();
+ }
+
+ commandblocklistenerabstract.setCommand(command);
+
+ // commandblocklistenerabstract.setCommand(packet.getCommand());
+
+ // Scissors end
+
commandblocklistenerabstract.setTrackOutput(packet.isTrackOutput());
if (!packet.isTrackOutput()) {
commandblocklistenerabstract.setLastOutput((Component) null);

View File

@@ -1,46 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Luna <lunahatesgogle@gmail.com>
Date: Tue, 4 Jul 2023 18:49:34 -0300
Subject: [PATCH] Fix packet-related lag exploits
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index d3fd35a33da5ce40667781f7ee35e89531b4ea96..f92385c4f72fce6ceec40e21ea081eeb1bd8fc25 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -866,7 +866,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
this.player.sendMessage(new TranslatableComponent("advMode.notEnabled"), Util.NIL_UUID);
} else if (!this.player.canUseGameMasterBlocks() && (!this.player.isCreative() || !this.player.getBukkitEntity().hasPermission("minecraft.commandblock"))) { // Paper - command block permission
this.player.sendMessage(new TranslatableComponent("advMode.notAllowed"), Util.NIL_UUID);
- } else {
+ } else if (this.player.level.isLoadedAndInBounds(packet.getPos())) { // Scissors
BaseCommandBlock commandblocklistenerabstract = null;
CommandBlockEntity tileentitycommand = null;
BlockPos blockposition = packet.getPos();
@@ -1027,7 +1027,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleSetStructureBlock(ServerboundSetStructureBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
- if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks()) { // Scissors - Add configuration option to completely disable game master blocks
+ if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks() && this.player.level.isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level.getBlockState(blockposition);
BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);
@@ -1085,7 +1085,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleSetJigsawBlock(ServerboundSetJigsawBlockPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
- if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks()) { // Scissors - Add configuration option to completely disable game master blocks
+ if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks() && this.player.level.isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockState iblockdata = this.player.level.getBlockState(blockposition);
BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);
@@ -1108,7 +1108,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser
@Override
public void handleJigsawGenerate(ServerboundJigsawGeneratePacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
- if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks()) { // Scissors - Add configuration option to completely disable game master blocks
+ if (!ScissorsConfig.disableGameMasterBlocks && this.player.canUseGameMasterBlocks() && this.player.level.isLoadedAndInBounds(packet.getPos())) { // Scissors
BlockPos blockposition = packet.getPos();
BlockEntity tileentity = this.player.level.getBlockEntity(blockposition);

View File

@@ -1,7 +1,7 @@
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
maven("https://papermc.io/repo/repository/maven-public/") maven("https://repo.papermc.io/repository/maven-public/")
} }
} }