mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-11-03 23:22:59 +00:00 
			
		
		
		
	Compare commits
	
		
			549 Commits
		
	
	
		
			v1.12.2-1.
			...
			v1.15.2-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					1f385f5b35 | ||
| 
						 | 
					34baa09b6c | ||
| 
						 | 
					b21866fbff | ||
| 
						 | 
					e0a288bcb9 | ||
| 
						 | 
					4592534a18 | ||
| 
						 | 
					28165bfcd6 | ||
| 
						 | 
					953b94fd08 | ||
| 
						 | 
					e10e30f82b | ||
| 
						 | 
					aeb1fa0e7e | ||
| 
						 | 
					349a7543b0 | ||
| 
						 | 
					3d589eda4a | ||
| 
						 | 
					de646b66b6 | ||
| 
						 | 
					4f0d311df7 | ||
| 
						 | 
					d6e3c9a7fa | ||
| 
						 | 
					a7a724f134 | ||
| 
						 | 
					b0e30fdce1 | ||
| 
						 | 
					4e15afa254 | ||
| 
						 | 
					84bac06178 | ||
| 
						 | 
					1fecb995c9 | ||
| 
						 | 
					99b719299c | ||
| 
						 | 
					fb9590467d | ||
| 
						 | 
					bc8e090873 | ||
| 
						 | 
					cf0f67265f | ||
| 
						 | 
					53dd15a213 | ||
| 
						 | 
					eb2d617ed8 | ||
| 
						 | 
					74dae4ec17 | ||
| 
						 | 
					abbc46877b | ||
| 
						 | 
					3cb25b3525 | ||
| 
						 | 
					92b45b1868 | ||
| 
						 | 
					003c7ec2e8 | ||
| 
						 | 
					c45221a2d0 | ||
| 
						 | 
					8494ba8ce2 | ||
| 
						 | 
					058d63e77f | ||
| 
						 | 
					17b5bca443 | ||
| 
						 | 
					c3f5700494 | ||
| 
						 | 
					b17ff6daf0 | ||
| 
						 | 
					e8f5531a8c | ||
| 
						 | 
					51d3b091da | ||
| 
						 | 
					9708dd6786 | ||
| 
						 | 
					e48427dbbc | ||
| 
						 | 
					669b6d2d56 | ||
| 
						 | 
					32d956bbe7 | ||
| 
						 | 
					3a147c78a8 | ||
| 
						 | 
					66e42e0817 | ||
| 
						 | 
					0ee3d10fda | ||
| 
						 | 
					ed0afc4068 | ||
| 
						 | 
					1f70ed6985 | ||
| 
						 | 
					8f3ea60c74 | ||
| 
						 | 
					eb722a74cd | ||
| 
						 | 
					1825f67eee | ||
| 
						 | 
					975a994581 | ||
| 
						 | 
					061514549d | ||
| 
						 | 
					5e52429c23 | ||
| 
						 | 
					396cf15a1f | ||
| 
						 | 
					1316d6a3c9 | ||
| 
						 | 
					e1cbbe3628 | ||
| 
						 | 
					6d367e08a3 | ||
| 
						 | 
					eaa7359c8c | ||
| 
						 | 
					657ceda3af | ||
| 
						 | 
					a934e42219 | ||
| 
						 | 
					1544749282 | ||
| 
						 | 
					763bab80fa | ||
| 
						 | 
					444830cf2d | ||
| 
						 | 
					ee27d8f081 | ||
| 
						 | 
					1381325813 | ||
| 
						 | 
					52b112fae6 | ||
| 
						 | 
					c83eeb16a8 | ||
| 
						 | 
					9d1ee6f61d | ||
| 
						 | 
					b90611b4b4 | ||
| 
						 | 
					e1e7ef59c6 | ||
| 
						 | 
					9ae0f4a993 | ||
| 
						 | 
					fd262a7995 | ||
| 
						 | 
					58054ad2d1 | ||
| 
						 | 
					1255bd00fd | ||
| 
						 | 
					1f84480a80 | ||
| 
						 | 
					b838efedd2 | ||
| 
						 | 
					f78e24f9a0 | ||
| 
						 | 
					88f5b20353 | ||
| 
						 | 
					331031be45 | ||
| 
						 | 
					34b5ede326 | ||
| 
						 | 
					c864576619 | ||
| 
						 | 
					247c05305d | ||
| 
						 | 
					2232f025b8 | ||
| 
						 | 
					b2e5401486 | ||
| 
						 | 
					41226371f3 | ||
| 
						 | 
					cc5e972cfc | ||
| 
						 | 
					92be0126df | ||
| 
						 | 
					dd6f97622e | ||
| 
						 | 
					2c9f51db89 | ||
| 
						 | 
					72340defe4 | ||
| 
						 | 
					542b66c79a | ||
| 
						 | 
					e4b0a5b3ce | ||
| 
						 | 
					f7e3e72a6e | ||
| 
						 | 
					8b17ec76a8 | ||
| 
						 | 
					b8d5a89446 | ||
| 
						 | 
					7f9a707f75 | ||
| 
						 | 
					ed3913c1f4 | ||
| 
						 | 
					16d74dd2e8 | ||
| 
						 | 
					24bb92007a | ||
| 
						 | 
					2f0cae0bc1 | ||
| 
						 | 
					e3a672099c | ||
| 
						 | 
					abf425dfb5 | ||
| 
						 | 
					663859d2e5 | ||
| 
						 | 
					f5eb6ce03e | ||
| 
						 | 
					4ae370b9db | ||
| 
						 | 
					b97e950d86 | ||
| 
						 | 
					5865e9c41a | ||
| 
						 | 
					85cf2d5ff1 | ||
| 
						 | 
					05c3c8ad32 | ||
| 
						 | 
					bb8f4c624b | ||
| 
						 | 
					ea3a160367 | ||
| 
						 | 
					737b3cb576 | ||
| 
						 | 
					d83a68f3ff | ||
| 
						 | 
					24d3777722 | ||
| 
						 | 
					826797cbd5 | ||
| 
						 | 
					511eea39a1 | ||
| 
						 | 
					24af36743d | ||
| 
						 | 
					e2761bb315 | ||
| 
						 | 
					6734a0e112 | ||
| 
						 | 
					d4199064ae | ||
| 
						 | 
					04f9644ae7 | ||
| 
						 | 
					486f41f082 | ||
| 
						 | 
					fff8353451 | ||
| 
						 | 
					9a749642d2 | ||
| 
						 | 
					c35707725f | ||
| 
						 | 
					b0651082f4 | ||
| 
						 | 
					aab0cd34cd | ||
| 
						 | 
					d2a1a00dc4 | ||
| 
						 | 
					f194f4fa3a | ||
| 
						 | 
					7f90f2f7ca | ||
| 
						 | 
					9f57e77ed3 | ||
| 
						 | 
					ab39cb849d | ||
| 
						 | 
					a4c9e89370 | ||
| 
						 | 
					c8aeddedd4 | ||
| 
						 | 
					74ac5bb3d1 | ||
| 
						 | 
					d13bd2cce8 | ||
| 
						 | 
					cc96e41d3e | ||
| 
						 | 
					741adfa7bb | ||
| 
						 | 
					666e83cf4f | ||
| 
						 | 
					e2a635b6e5 | ||
| 
						 | 
					c58441b29c | ||
| 
						 | 
					a6fcfb6af2 | ||
| 
						 | 
					17a9329207 | ||
| 
						 | 
					f6160bdc57 | ||
| 
						 | 
					6aae4e5766 | ||
| 
						 | 
					84a6bb1cf3 | ||
| 
						 | 
					c334423d42 | ||
| 
						 | 
					113b560a20 | ||
| 
						 | 
					61fb4caaad | ||
| 
						 | 
					6734af6e4a | ||
| 
						 | 
					bf6053906d | ||
| 
						 | 
					01d81cb91d | ||
| 
						 | 
					93068402a2 | ||
| 
						 | 
					34a2c835d4 | ||
| 
						 | 
					30d35883b8 | ||
| 
						 | 
					334ca65482 | ||
| 
						 | 
					8472112fc1 | ||
| 
						 | 
					84036d97d9 | ||
| 
						 | 
					0832974725 | ||
| 
						 | 
					6cee4efcd3 | ||
| 
						 | 
					6f868849ab | ||
| 
						 | 
					275ca58a82 | ||
| 
						 | 
					87393e8aef | ||
| 
						 | 
					86bf57e3cd | ||
| 
						 | 
					748ebbe66b | ||
| 
						 | 
					59de21eae2 | ||
| 
						 | 
					50473afea8 | ||
| 
						 | 
					37f925de0a | ||
| 
						 | 
					cefde3f003 | ||
| 
						 | 
					ae6124d1f4 | ||
| 
						 | 
					7e121ff72f | ||
| 
						 | 
					5155e18de2 | ||
| 
						 | 
					7365741088 | ||
| 
						 | 
					d5368d0719 | ||
| 
						 | 
					04509cefec | ||
| 
						 | 
					74b9f5dcb0 | ||
| 
						 | 
					183b342071 | ||
| 
						 | 
					0bb5515055 | ||
| 
						 | 
					9acfc0316f | ||
| 
						 | 
					29fb0baa09 | ||
| 
						 | 
					d5de39ebd4 | ||
| 
						 | 
					0faf76e4bd | ||
| 
						 | 
					e8e2ed9fe5 | ||
| 
						 | 
					9f72448ecd | ||
| 
						 | 
					3da3f16deb | ||
| 
						 | 
					0e2ce3c634 | ||
| 
						 | 
					fe00e00537 | ||
| 
						 | 
					cd879b067f | ||
| 
						 | 
					053cb1b53c | ||
| 
						 | 
					ac7979fb46 | ||
| 
						 | 
					d51851e763 | ||
| 
						 | 
					fb70a1a998 | ||
| 
						 | 
					2f323f23d7 | ||
| 
						 | 
					95554a53d1 | ||
| 
						 | 
					89c1b2771d | ||
| 
						 | 
					8f069a9b72 | ||
| 
						 | 
					2e9d6603e3 | ||
| 
						 | 
					a6a1b9b8e5 | ||
| 
						 | 
					3f277a7a7b | ||
| 
						 | 
					90c5d3f1e8 | ||
| 
						 | 
					a5f7cf8334 | ||
| 
						 | 
					3075f89797 | ||
| 
						 | 
					45297665c6 | ||
| 
						 | 
					ddbf3fc111 | ||
| 
						 | 
					da82b89676 | ||
| 
						 | 
					d5f1a2c817 | ||
| 
						 | 
					6020adef6b | ||
| 
						 | 
					d2a52a8b5d | ||
| 
						 | 
					9f8774960f | ||
| 
						 | 
					36bb8b67c9 | ||
| 
						 | 
					8f3a56dd32 | ||
| 
						 | 
					113d5d982f | ||
| 
						 | 
					37a447e745 | ||
| 
						 | 
					9e2232d240 | ||
| 
						 | 
					514db30fb1 | ||
| 
						 | 
					08181f72d4 | ||
| 
						 | 
					613a28a5af | ||
| 
						 | 
					e4c422d6f9 | ||
| 
						 | 
					478f992dea | ||
| 
						 | 
					b54519d0e6 | ||
| 
						 | 
					9499654757 | ||
| 
						 | 
					c5138c535c | ||
| 
						 | 
					5bd8d84d14 | ||
| 
						 | 
					ab0310e27c | ||
| 
						 | 
					607751da40 | ||
| 
						 | 
					1efabccd14 | ||
| 
						 | 
					029374e9aa | ||
| 
						 | 
					2a8efb3fd5 | ||
| 
						 | 
					48edcde4ef | ||
| 
						 | 
					58a2995bbc | ||
| 
						 | 
					a35dcb28ef | ||
| 
						 | 
					7b2d482387 | ||
| 
						 | 
					2b077554f7 | ||
| 
						 | 
					9134f243c1 | ||
| 
						 | 
					c0f3ca81fb | ||
| 
						 | 
					190ed4fd20 | ||
| 
						 | 
					b9ff9b7f90 | ||
| 
						 | 
					b9b8121be9 | ||
| 
						 | 
					014bf55cd4 | ||
| 
						 | 
					085ae2e74a | ||
| 
						 | 
					4ff33f165d | ||
| 
						 | 
					d929c02d2a | ||
| 
						 | 
					d50a08a549 | ||
| 
						 | 
					c493d668c8 | ||
| 
						 | 
					53477fd3a1 | ||
| 
						 | 
					87aa839b60 | ||
| 
						 | 
					e02ccdcb1a | ||
| 
						 | 
					f36f532c63 | ||
| 
						 | 
					5a816917d5 | ||
| 
						 | 
					7af63d052d | ||
| 
						 | 
					4f8217d1ab | ||
| 
						 | 
					5409d441b5 | ||
| 
						 | 
					d5f82fa458 | ||
| 
						 | 
					d0deab3519 | ||
| 
						 | 
					d5a8df753a | ||
| 
						 | 
					13de2c4dd0 | ||
| 
						 | 
					906280225e | ||
| 
						 | 
					161a5b4707 | ||
| 
						 | 
					c6b6b4479c | ||
| 
						 | 
					96e7b60285 | ||
| 
						 | 
					086fccd997 | ||
| 
						 | 
					5dfaf6eee9 | ||
| 
						 | 
					e251dd066c | ||
| 
						 | 
					9abcfe56ea | ||
| 
						 | 
					abbc641fd4 | ||
| 
						 | 
					c60dcb4f5a | ||
| 
						 | 
					4be0b15afa | ||
| 
						 | 
					a4ae36b6b3 | ||
| 
						 | 
					ac075d9f53 | ||
| 
						 | 
					05d7be0362 | ||
| 
						 | 
					9a71dc1a26 | ||
| 
						 | 
					156023b154 | ||
| 
						 | 
					6b3773a862 | ||
| 
						 | 
					376d628cf0 | ||
| 
						 | 
					44062ebd52 | ||
| 
						 | 
					5739285fc2 | ||
| 
						 | 
					70b457ed18 | ||
| 
						 | 
					ca2995ed38 | ||
| 
						 | 
					6816931659 | ||
| 
						 | 
					1547ecbeb3 | ||
| 
						 | 
					e918f55b58 | ||
| 
						 | 
					c28b468844 | ||
| 
						 | 
					052cf8ee7d | ||
| 
						 | 
					550ada2f9e | ||
| 
						 | 
					17b7727262 | ||
| 
						 | 
					4553e404b2 | ||
| 
						 | 
					a565a571f9 | ||
| 
						 | 
					fb64b6017b | ||
| 
						 | 
					ed4229ab70 | ||
| 
						 | 
					3fb906ef6c | ||
| 
						 | 
					e1663f3df0 | ||
| 
						 | 
					52c6584c81 | ||
| 
						 | 
					9f87eda5de | ||
| 
						 | 
					697e9449cf | ||
| 
						 | 
					76c3e4c155 | ||
| 
						 | 
					358289b5f9 | ||
| 
						 | 
					5eec24676f | ||
| 
						 | 
					f52b8fa2de | ||
| 
						 | 
					447c3ab125 | ||
| 
						 | 
					8fac68386e | ||
| 
						 | 
					a3021c4697 | ||
| 
						 | 
					b7c61f9c6d | ||
| 
						 | 
					08a0342618 | ||
| 
						 | 
					3d7a81696d | ||
| 
						 | 
					48cb032ddf | ||
| 
						 | 
					33260a7747 | ||
| 
						 | 
					a049502d12 | ||
| 
						 | 
					ae7ef66dfa | ||
| 
						 | 
					9748679484 | ||
| 
						 | 
					da419b24e7 | ||
| 
						 | 
					7f57a977a1 | ||
| 
						 | 
					2f42a4e85b | ||
| 
						 | 
					af40f5ae5c | ||
| 
						 | 
					759d02a249 | ||
| 
						 | 
					d7729337ac | ||
| 
						 | 
					ee391ae9ea | ||
| 
						 | 
					4ed4a6409b | ||
| 
						 | 
					e5cc345f49 | ||
| 
						 | 
					d847a4d9e0 | ||
| 
						 | 
					f106733d71 | ||
| 
						 | 
					f3de97d67f | ||
| 
						 | 
					544f276ff0 | ||
| 
						 | 
					463635a459 | ||
| 
						 | 
					3b7b845930 | ||
| 
						 | 
					1fc0214857 | ||
| 
						 | 
					11bf601db9 | ||
| 
						 | 
					7c1154ddfc | ||
| 
						 | 
					df557e03fa | ||
| 
						 | 
					524b6f1d8a | ||
| 
						 | 
					cea8be7efa | ||
| 
						 | 
					c5f918ad95 | ||
| 
						 | 
					b14c7842fc | ||
| 
						 | 
					eead8b5755 | ||
| 
						 | 
					10a27a7a25 | ||
| 
						 | 
					865fc239a0 | ||
| 
						 | 
					f9f94b8304 | ||
| 
						 | 
					cb8135a0d1 | ||
| 
						 | 
					ef4b0a5632 | ||
| 
						 | 
					6a6a87489c | ||
| 
						 | 
					2360a6e951 | ||
| 
						 | 
					f4f71185ae | ||
| 
						 | 
					062977336a | ||
| 
						 | 
					e52d98ad8b | ||
| 
						 | 
					ef8da8054f | ||
| 
						 | 
					1ccd687c00 | ||
| 
						 | 
					a8ce5a5b20 | ||
| 
						 | 
					68e6bc464b | ||
| 
						 | 
					68762fe84c | ||
| 
						 | 
					419f29321a | ||
| 
						 | 
					00b41d29c1 | ||
| 
						 | 
					0ffd5fcf85 | ||
| 
						 | 
					95fee95006 | ||
| 
						 | 
					239bd769df | ||
| 
						 | 
					b4e0e9984f | ||
| 
						 | 
					79f42e35ce | ||
| 
						 | 
					be89fc25f9 | ||
| 
						 | 
					8eae02c037 | ||
| 
						 | 
					930fd59298 | ||
| 
						 | 
					bf13bac152 | ||
| 
						 | 
					649acbae1c | ||
| 
						 | 
					05eada427b | ||
| 
						 | 
					03caf9d805 | ||
| 
						 | 
					d6ea3aab1c | ||
| 
						 | 
					f3a330e330 | ||
| 
						 | 
					044d2b2b06 | ||
| 
						 | 
					fb440b0d2e | ||
| 
						 | 
					0de5969ec1 | ||
| 
						 | 
					3f98b2785e | ||
| 
						 | 
					798868427e | ||
| 
						 | 
					c79f643ba7 | ||
| 
						 | 
					1db3a14c54 | ||
| 
						 | 
					bf6d017ad1 | ||
| 
						 | 
					8b1773dd60 | ||
| 
						 | 
					a706300598 | ||
| 
						 | 
					2541c3c5e6 | ||
| 
						 | 
					41a1b99f7d | ||
| 
						 | 
					1862a439e2 | ||
| 
						 | 
					018ecfbaa0 | ||
| 
						 | 
					4c8fd4fc35 | ||
| 
						 | 
					35c1b10224 | ||
| 
						 | 
					c1c01bef7c | ||
| 
						 | 
					a48c3d0ba8 | ||
| 
						 | 
					93a9ebc4f6 | ||
| 
						 | 
					7cc2bd43c6 | ||
| 
						 | 
					393e628721 | ||
| 
						 | 
					0bcd28e58c | ||
| 
						 | 
					42f5389fb8 | ||
| 
						 | 
					041cfe91b4 | ||
| 
						 | 
					0f82a4589b | ||
| 
						 | 
					4320a4f851 | ||
| 
						 | 
					037cbabb32 | ||
| 
						 | 
					0dde859582 | ||
| 
						 | 
					e59c043fb6 | ||
| 
						 | 
					ae928c4397 | ||
| 
						 | 
					da41c65128 | ||
| 
						 | 
					4d18234714 | ||
| 
						 | 
					d254c6464b | ||
| 
						 | 
					3a5d50e572 | ||
| 
						 | 
					03b6d2f1ab | ||
| 
						 | 
					b0397ed3c5 | ||
| 
						 | 
					fa70ebcac2 | ||
| 
						 | 
					86e0330100 | ||
| 
						 | 
					92567b4d7e | ||
| 
						 | 
					0ae70fed13 | ||
| 
						 | 
					3b7300543a | ||
| 
						 | 
					642351af1a | ||
| 
						 | 
					121802a683 | ||
| 
						 | 
					08cf55e55f | ||
| 
						 | 
					3c8c0d78ef | ||
| 
						 | 
					c4d18aa9ca | ||
| 
						 | 
					2d4a87adc9 | ||
| 
						 | 
					bedac71e3d | ||
| 
						 | 
					ee4e42e730 | ||
| 
						 | 
					0de75f05dd | ||
| 
						 | 
					be6dd21e54 | ||
| 
						 | 
					927ddb0bde | ||
| 
						 | 
					a8fadabaf1 | ||
| 
						 | 
					44d0f78c1b | ||
| 
						 | 
					38f9a015ca | ||
| 
						 | 
					c311cdc6f5 | ||
| 
						 | 
					a93e0f3284 | ||
| 
						 | 
					14b3065ba4 | ||
| 
						 | 
					3ea2d6a0a8 | ||
| 
						 | 
					c802290437 | ||
| 
						 | 
					f7781defe5 | ||
| 
						 | 
					418420523a | ||
| 
						 | 
					d342a1f368 | ||
| 
						 | 
					81f85361d5 | ||
| 
						 | 
					f1621b30ec | ||
| 
						 | 
					d4f6a594b6 | ||
| 
						 | 
					ff5ba5c131 | ||
| 
						 | 
					4243f30308 | ||
| 
						 | 
					813e91073d | ||
| 
						 | 
					7250f22ff6 | ||
| 
						 | 
					db31a53bba | ||
| 
						 | 
					3023f235a4 | ||
| 
						 | 
					79cd8b4da5 | ||
| 
						 | 
					8e4d311cd9 | ||
| 
						 | 
					9bd8c86a94 | ||
| 
						 | 
					cbc0c1d0b6 | ||
| 
						 | 
					49c37857d4 | ||
| 
						 | 
					b1139a4bf6 | ||
| 
						 | 
					7e8559278e | ||
| 
						 | 
					1e7f1c98fc | ||
| 
						 | 
					a802f25dd6 | ||
| 
						 | 
					f1d6d21d6d | ||
| 
						 | 
					a80302c513 | ||
| 
						 | 
					1c46949da7 | ||
| 
						 | 
					07a56454a0 | ||
| 
						 | 
					a0e72d02c8 | ||
| 
						 | 
					455a59ca85 | ||
| 
						 | 
					46d78af068 | ||
| 
						 | 
					08d22fd3df | ||
| 
						 | 
					e6c691a8f8 | ||
| 
						 | 
					4b0e5c445c | ||
| 
						 | 
					eb5cff1045 | ||
| 
						 | 
					35c7792aa2 | ||
| 
						 | 
					521688d630 | ||
| 
						 | 
					75e2845c01 | ||
| 
						 | 
					2f96283286 | ||
| 
						 | 
					cbe6e9b5f5 | ||
| 
						 | 
					2ab79cf474 | ||
| 
						 | 
					6ce34aba79 | ||
| 
						 | 
					5eeb320b60 | ||
| 
						 | 
					93310850d2 | ||
| 
						 | 
					a2880b12ca | ||
| 
						 | 
					cef2657048 | ||
| 
						 | 
					ccd85eb055 | ||
| 
						 | 
					303b57779a | ||
| 
						 | 
					6279816ecc | ||
| 
						 | 
					4ae77261fa | ||
| 
						 | 
					4b7d843b78 | ||
| 
						 | 
					1c28df65c3 | ||
| 
						 | 
					85b740f484 | ||
| 
						 | 
					f9929cb27d | ||
| 
						 | 
					bafab1ac07 | ||
| 
						 | 
					e05c262468 | ||
| 
						 | 
					acfb72246c | ||
| 
						 | 
					9d51c4c340 | ||
| 
						 | 
					18068effec | ||
| 
						 | 
					7a3f7d3bba | ||
| 
						 | 
					95aa48c456 | ||
| 
						 | 
					6ea8ca991b | ||
| 
						 | 
					f1e551b960 | ||
| 
						 | 
					772c54ec74 | ||
| 
						 | 
					13cb789c18 | ||
| 
						 | 
					42220c4268 | ||
| 
						 | 
					3052506e2e | ||
| 
						 | 
					0741daa7eb | ||
| 
						 | 
					b4aa554279 | ||
| 
						 | 
					8fe2abe0ae | ||
| 
						 | 
					5af789ae11 | ||
| 
						 | 
					904a168d5c | ||
| 
						 | 
					724441eddc | ||
| 
						 | 
					f68ab3edd1 | ||
| 
						 | 
					68542aca3a | ||
| 
						 | 
					594bc4203c | ||
| 
						 | 
					57318b022d | ||
| 
						 | 
					761159aa93 | ||
| 
						 | 
					29dce26bf6 | ||
| 
						 | 
					717ab69093 | ||
| 
						 | 
					138a2cf08f | ||
| 
						 | 
					81daf82647 | ||
| 
						 | 
					f3798bfb63 | ||
| 
						 | 
					bc07dfad2e | ||
| 
						 | 
					8dd1c2a6cc | ||
| 
						 | 
					d10b657a54 | ||
| 
						 | 
					f90da739eb | ||
| 
						 | 
					d9cadf64e8 | ||
| 
						 | 
					15d4a55cd8 | ||
| 
						 | 
					309cbdb8be | ||
| 
						 | 
					39a9ad0ce7 | ||
| 
						 | 
					0f3c44c926 | ||
| 
						 | 
					a0e7c4a74c | ||
| 
						 | 
					7d428030df | ||
| 
						 | 
					00c395f689 | ||
| 
						 | 
					d8e1c73d26 | ||
| 
						 | 
					ffa4cc241b | ||
| 
						 | 
					6f1b740c8f | ||
| 
						 | 
					3406ba3ebf | ||
| 
						 | 
					b6715bd812 | ||
| 
						 | 
					18aee02221 | ||
| 
						 | 
					401bbf2e6a | ||
| 
						 | 
					7467b7f88a | ||
| 
						 | 
					c82d8a7c2a | ||
| 
						 | 
					6b81bcf334 | ||
| 
						 | 
					3d67421d98 | ||
| 
						 | 
					acac70675d | ||
| 
						 | 
					56434259c1 | ||
| 
						 | 
					da7e4b9016 | ||
| 
						 | 
					d4b8650d21 | ||
| 
						 | 
					17645a79f0 | ||
| 
						 | 
					ce1f14a010 | ||
| 
						 | 
					bb138326df | ||
| 
						 | 
					e0660b1dab | ||
| 
						 | 
					2182cfbeb7 | ||
| 
						 | 
					2c027adb68 | ||
| 
						 | 
					4a25e7a178 | ||
| 
						 | 
					55d54fec63 | ||
| 
						 | 
					220e4bd660 | ||
| 
						 | 
					362dbd97ac | ||
| 
						 | 
					aa0e1883d1 | ||
| 
						 | 
					9cdbcb4332 | ||
| 
						 | 
					23ddd4feb5 | ||
| 
						 | 
					fcaa777c95 | ||
| 
						 | 
					7afc3e5260 | ||
| 
						 | 
					f9e13ca67a | ||
| 
						 | 
					810258e9b8 | ||
| 
						 | 
					5e462adc5c | 
@@ -11,5 +11,8 @@ insert_final_newline = true
 | 
			
		||||
[*.md]
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
 | 
			
		||||
[*.properties]
 | 
			
		||||
insert_final_newline = false
 | 
			
		||||
[*.sexp]
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.yml]
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
# Ignore changes in generated files
 | 
			
		||||
src/generated/resources/data/** linguist-generated
 | 
			
		||||
src/test/server-files/structures linguist-generated
 | 
			
		||||
							
								
								
									
										1
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							@@ -12,4 +12,5 @@ labels: bug
 | 
			
		||||
## Useful information to include:
 | 
			
		||||
 - Minecraft version
 | 
			
		||||
 - CC: Tweaked version
 | 
			
		||||
 - Logs: These will be located in the `logs/` directory of your Minecraft instance. Please upload them as a gist or directly into this editor.
 | 
			
		||||
 - Detailed reproduction steps: sometimes I can spot a bug pretty easily, but often it's much more obscure. The more information I have to help reproduce it, the quicker it'll get fixed.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										17
									
								
								.github/matchers/checkstyle.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.github/matchers/checkstyle.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
{
 | 
			
		||||
    "problemMatcher": [
 | 
			
		||||
        {
 | 
			
		||||
            "owner": "checkstyle",
 | 
			
		||||
            "pattern": [
 | 
			
		||||
                {
 | 
			
		||||
                    "regexp": "^([a-z]+) ([\\w./-]+):(\\d+):(\\d+): (.*)$",
 | 
			
		||||
                    "severity": 1,
 | 
			
		||||
                    "file": 2,
 | 
			
		||||
                    "line": 3,
 | 
			
		||||
                    "column": 4,
 | 
			
		||||
                    "message": 5
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								.github/matchers/illuaminate.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.github/matchers/illuaminate.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
    "problemMatcher": [
 | 
			
		||||
        {
 | 
			
		||||
            "owner": "illuaminate",
 | 
			
		||||
            "severity": "warning",
 | 
			
		||||
            "pattern": [
 | 
			
		||||
                {
 | 
			
		||||
                    "regexp": "^([\\w./-]+):\\[(\\d+):(\\d+)\\-(?:\\d+):(?:\\d+)\\]: (.*) \\[([a-z:-]+)\\]$",
 | 
			
		||||
                    "file": 1,
 | 
			
		||||
                    "line": 2,
 | 
			
		||||
                    "column": 3,
 | 
			
		||||
                    "message": 4,
 | 
			
		||||
                    "code": 5
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								.github/matchers/junit.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.github/matchers/junit.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
{
 | 
			
		||||
    "problemMatcher": [
 | 
			
		||||
        {
 | 
			
		||||
            "owner": "junit",
 | 
			
		||||
            "pattern": [
 | 
			
		||||
                {
 | 
			
		||||
                    "regexp": "^## ([\\w./-]+):(\\d+): (.*)$",
 | 
			
		||||
                    "file": 1,
 | 
			
		||||
                    "line": 2,
 | 
			
		||||
                    "message": 3
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								.github/workflows/main-ci.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								.github/workflows/main-ci.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
name: Build
 | 
			
		||||
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  build:
 | 
			
		||||
    name: Build
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
    - name: Set up Java 8
 | 
			
		||||
      uses: actions/setup-java@v1
 | 
			
		||||
      with:
 | 
			
		||||
        java-version: 8
 | 
			
		||||
 | 
			
		||||
    - name: Cache gradle dependencies
 | 
			
		||||
      uses: actions/cache@v2
 | 
			
		||||
      with:
 | 
			
		||||
        path: ~/.gradle/caches
 | 
			
		||||
        key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
 | 
			
		||||
        restore-keys: |
 | 
			
		||||
          ${{ runner.os }}-gradle-
 | 
			
		||||
 | 
			
		||||
    - name: Disable Gradle daemon
 | 
			
		||||
      run: |
 | 
			
		||||
        mkdir -p ~/.gradle
 | 
			
		||||
        echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties
 | 
			
		||||
 | 
			
		||||
    - name: Build with Gradle
 | 
			
		||||
      run: |
 | 
			
		||||
        ./gradlew assemble || ./gradlew assemble
 | 
			
		||||
        ./gradlew downloadAssets || ./gradlew downloadAssets
 | 
			
		||||
        ./gradlew build
 | 
			
		||||
 | 
			
		||||
    - name: Upload Jar
 | 
			
		||||
      uses: actions/upload-artifact@v2
 | 
			
		||||
      with:
 | 
			
		||||
        name: CC-Tweaked
 | 
			
		||||
        path: build/libs
 | 
			
		||||
 | 
			
		||||
    - name: Upload Coverage
 | 
			
		||||
      uses: codecov/codecov-action@v1
 | 
			
		||||
 | 
			
		||||
    - name: Parse test reports
 | 
			
		||||
      run: ./tools/parse-reports.py
 | 
			
		||||
      if: ${{ failure() }}
 | 
			
		||||
 | 
			
		||||
    - name: Cache pre-commit
 | 
			
		||||
      uses: actions/cache@v2
 | 
			
		||||
      with:
 | 
			
		||||
        path: ~/.cache/pre-commit
 | 
			
		||||
        key: ${{ runner.os }}-pre-commit-${{ hashFiles('config/pre-commit/config.yml') }}
 | 
			
		||||
        restore-keys: |
 | 
			
		||||
          ${{ runner.os }}-pre-commit-
 | 
			
		||||
 | 
			
		||||
    - name: Run linters
 | 
			
		||||
      run: |
 | 
			
		||||
        pip install pre-commit
 | 
			
		||||
        pre-commit run --config config/pre-commit/config.yml --show-diff-on-failure --all --color=always
 | 
			
		||||
							
								
								
									
										19
									
								
								.github/workflows/make-doc.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/make-doc.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -eu
 | 
			
		||||
 | 
			
		||||
DEST="${GITHUB_REF#refs/*/}"
 | 
			
		||||
echo "Uploading docs to https://tweaked.cc/$DEST"
 | 
			
		||||
 | 
			
		||||
# Setup ssh key
 | 
			
		||||
mkdir -p "$HOME/.ssh/"
 | 
			
		||||
echo "$SSH_KEY" > "$HOME/.ssh/key"
 | 
			
		||||
chmod 600 "$HOME/.ssh/key"
 | 
			
		||||
 | 
			
		||||
# And upload
 | 
			
		||||
rsync -avc -e "ssh -i $HOME/.ssh/key -o StrictHostKeyChecking=no -p $SSH_PORT" \
 | 
			
		||||
      "$GITHUB_WORKSPACE/build/docs/lua/" \
 | 
			
		||||
      "$SSH_USER@$SSH_HOST:/var/www/tweaked.cc/$DEST"
 | 
			
		||||
rsync -avc -e "ssh -i $HOME/.ssh/key -o StrictHostKeyChecking=no -p $SSH_PORT" \
 | 
			
		||||
      "$GITHUB_WORKSPACE/build/docs/javadoc/" \
 | 
			
		||||
      "$SSH_USER@$SSH_HOST:/var/www/tweaked.cc/$DEST/javadoc"
 | 
			
		||||
							
								
								
									
										50
									
								
								.github/workflows/make-doc.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								.github/workflows/make-doc.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
name: Build documentation
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - mc-1.15.x
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  make_doc:
 | 
			
		||||
    name: Build
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v2
 | 
			
		||||
 | 
			
		||||
    - name: Set up Java 8
 | 
			
		||||
      uses: actions/setup-java@v1
 | 
			
		||||
      with:
 | 
			
		||||
        java-version: 8
 | 
			
		||||
 | 
			
		||||
    - name: Cache gradle dependencies
 | 
			
		||||
      uses: actions/cache@v2
 | 
			
		||||
      with:
 | 
			
		||||
        path: ~/.gradle/caches
 | 
			
		||||
        key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
 | 
			
		||||
        restore-keys: |
 | 
			
		||||
          ${{ runner.os }}-gradle-
 | 
			
		||||
 | 
			
		||||
    - name: Setup illuaminate
 | 
			
		||||
      run: |
 | 
			
		||||
        test -d bin || mkdir bin
 | 
			
		||||
        test -f bin/illuaminate || wget -q -Obin/illuaminate https://squiddev.cc/illuaminate/linux-x86-64/illuaminate
 | 
			
		||||
        chmod +x bin/illuaminate
 | 
			
		||||
 | 
			
		||||
    - name: Setup node
 | 
			
		||||
      run: npm ci
 | 
			
		||||
 | 
			
		||||
    - name: Build with Gradle
 | 
			
		||||
      run: ./gradlew compileJava --no-daemon || ./gradlew compileJava --no-daemon
 | 
			
		||||
 | 
			
		||||
    - name: Generate documentation
 | 
			
		||||
      run: ./gradlew docWebsite javadoc --no-daemon
 | 
			
		||||
 | 
			
		||||
    - name: Upload documentation
 | 
			
		||||
      run: .github/workflows/make-doc.sh 2> /dev/null
 | 
			
		||||
      env:
 | 
			
		||||
        SSH_KEY:  ${{ secrets.SSH_KEY  }}
 | 
			
		||||
        SSH_USER: ${{ secrets.SSH_USER }}
 | 
			
		||||
        SSH_HOST: ${{ secrets.SSH_HOST }}
 | 
			
		||||
        SSH_PORT: ${{ secrets.SSH_PORT }}
 | 
			
		||||
							
								
								
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,6 +3,8 @@
 | 
			
		||||
/logs
 | 
			
		||||
/build
 | 
			
		||||
/out
 | 
			
		||||
/doc/out/
 | 
			
		||||
/node_modules
 | 
			
		||||
 | 
			
		||||
# Runtime directories
 | 
			
		||||
/run
 | 
			
		||||
@@ -15,3 +17,13 @@
 | 
			
		||||
.idea
 | 
			
		||||
.gradle
 | 
			
		||||
*.DS_Store
 | 
			
		||||
 | 
			
		||||
/.classpath
 | 
			
		||||
/.project
 | 
			
		||||
/.settings
 | 
			
		||||
/.vscode
 | 
			
		||||
bin/
 | 
			
		||||
*.launch
 | 
			
		||||
 | 
			
		||||
/src/generated/resources/.cache
 | 
			
		||||
/src/web/mount/*.d.ts
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								.luacheckrc
									
									
									
									
									
								
							@@ -1,34 +0,0 @@
 | 
			
		||||
std = "max"
 | 
			
		||||
 | 
			
		||||
ignore = {
 | 
			
		||||
    -- Allow access to undefined globals or their fields. In the future we'll
 | 
			
		||||
    -- define all of CC's globals within this file
 | 
			
		||||
    '113', '143',
 | 
			
		||||
 | 
			
		||||
    -- FIXME: Ignore unused arguments and loop variables
 | 
			
		||||
    '212', '213',
 | 
			
		||||
 | 
			
		||||
    -- Disable line is too long for now. It would be possible to clean
 | 
			
		||||
    -- this up in the future.
 | 
			
		||||
    '631',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Only run the linter on ROM and bios for now, as the treasure disks
 | 
			
		||||
-- are largely unsupported.
 | 
			
		||||
include_files = {
 | 
			
		||||
    'src/main/resources/assets/computercraft/lua/rom',
 | 
			
		||||
    'src/main/resources/assets/computercraft/lua/bios.lua'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
files['src/main/resources/assets/computercraft/lua/bios.lua'] = {
 | 
			
		||||
    -- Allow declaring and mutating globals
 | 
			
		||||
    allow_defined_top = true,
 | 
			
		||||
    ignore = { '112', '121', '122', '131', '142' },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
files['src/main/resources/assets/computercraft/lua/rom/apis'] = {
 | 
			
		||||
    -- APIs may define globals on the top level. We'll ignore unused globals,
 | 
			
		||||
    -- as obviously they may be used outside that API.
 | 
			
		||||
    allow_defined_top = true,
 | 
			
		||||
    ignore = { '131' },
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								.travis.yml
									
									
									
									
									
								
							@@ -1,14 +0,0 @@
 | 
			
		||||
language: java
 | 
			
		||||
 | 
			
		||||
script: ./gradlew build --no-daemon
 | 
			
		||||
 | 
			
		||||
before_cache:
 | 
			
		||||
  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
 | 
			
		||||
  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
 | 
			
		||||
cache:
 | 
			
		||||
  directories:
 | 
			
		||||
    - $HOME/.gradle/caches/
 | 
			
		||||
    - $HOME/.gradle/wrapper/s
 | 
			
		||||
 | 
			
		||||
jdk:
 | 
			
		||||
    - oraclejdk8
 | 
			
		||||
							
								
								
									
										110
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,110 @@
 | 
			
		||||
# Contributing to CC: Tweaked
 | 
			
		||||
As with many open source projects, CC: Tweaked thrives on contributions from other people! This document (hopefully)
 | 
			
		||||
provides an introduction as to how to get started in helping out.
 | 
			
		||||
 | 
			
		||||
If you've any other questions, [just ask the community][community] or [open an issue][new-issue].
 | 
			
		||||
 | 
			
		||||
## Reporting issues
 | 
			
		||||
If you have a bug, suggestion, or other feedback, the best thing to do is [file an issue][new-issue]. When doing so,
 | 
			
		||||
do use the issue templates - they provide a useful hint on what information to provide.
 | 
			
		||||
 | 
			
		||||
## Translations
 | 
			
		||||
Translations are managed through [Weblate], an online interface for managing language strings. This is synced
 | 
			
		||||
automatically with GitHub, so please don't submit PRs adding/changing translations!
 | 
			
		||||
 | 
			
		||||
## Developing
 | 
			
		||||
In order to develop CC: Tweaked, you'll need to download the source code and then run it. This is a pretty simple
 | 
			
		||||
process. When building on Windows, Use `gradlew.bat` instead of `./gradlew`.
 | 
			
		||||
 | 
			
		||||
 - **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
 | 
			
		||||
 - **Setup Forge:** `./gradlew build`
 | 
			
		||||
 - **Run Minecraft:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
 | 
			
		||||
 | 
			
		||||
If you want to run CC:T in a normal Minecraft instance, run `./gradlew build` and copy the `.jar` from `build/libs`.
 | 
			
		||||
These commands may take a few minutes to run the first time, as the environment is set up, but should be much faster
 | 
			
		||||
afterwards.
 | 
			
		||||
 | 
			
		||||
The following sections describe the more niche sections of CC: Tweaked's build system. Some bits of these are
 | 
			
		||||
quite-complex, and (dare I say) over-engineered, so you may wish to ignore them. Well tested/documented PRs are always
 | 
			
		||||
preferred (and I'd definitely recommend setting up the tooling if you're doing serious development work), but for
 | 
			
		||||
small changes it can be a lot.
 | 
			
		||||
 | 
			
		||||
### Code linters
 | 
			
		||||
CC: Tweaked uses a couple of "linters" on its source code, to enforce a consistent style across the project. While these
 | 
			
		||||
are run whenever you submit a PR, it's often useful to run this before committing.
 | 
			
		||||
 | 
			
		||||
 - **[Checkstyle]:** Checks Java code to ensure it is consistently formatted. This can be run with `./gradlew build` or
 | 
			
		||||
   `./gradle check`.
 | 
			
		||||
 - **[illuaminate]:** Checks Lua code for semantic and styleistic issues. See [the usage section][illuaminate-usage] for
 | 
			
		||||
   how to download and run it. You may need to generate the Java documentation stubs (see "Documentation" below) for all
 | 
			
		||||
   lints to pass.
 | 
			
		||||
 | 
			
		||||
### Documentation
 | 
			
		||||
When writing documentation for [CC: Tweaked's documentation website][docs], it may be useful to build the documentation
 | 
			
		||||
and preview it yourself before submitting a PR.
 | 
			
		||||
 | 
			
		||||
Building all documentation is, sadly, a multi-stage process (though this is largely hidden by Gradle). First we need to
 | 
			
		||||
convert Java doc-comments into Lua ones, we also generate some Javascript to embed. All of this is then finally fed into
 | 
			
		||||
illuaminate, which spits out our HTML.
 | 
			
		||||
 | 
			
		||||
#### Setting up the tooling
 | 
			
		||||
For various reasons, getting the environment set up to build documentation can be pretty complex. I'd quite like to
 | 
			
		||||
automate this via Docker and/or nix in the future, but this needs to be done manually for now.
 | 
			
		||||
 | 
			
		||||
This tooling is only needed if you need to build the whole website. If you just want to generate the Lua stubs, you can
 | 
			
		||||
skp this section.
 | 
			
		||||
 - Install Node/npm and install our Node packages with `npm ci`.
 | 
			
		||||
 - Install [illuaminate][illuaminate-usage] as described above.
 | 
			
		||||
 | 
			
		||||
#### Building documentation
 | 
			
		||||
Gradle should be your entrypoint to building most documentation. There's two tasks which are of interest:
 | 
			
		||||
 | 
			
		||||
 - `./gradlew luaJavadoc` - Generate documentation stubs for Java methods.
 | 
			
		||||
 - `./gradlew docWebsite` - Generate the whole website (including Javascript pages). The resulting HTML is stored at
 | 
			
		||||
   `./build/docs/lua/`.
 | 
			
		||||
 | 
			
		||||
#### Writing documentation
 | 
			
		||||
illuaminate's documentation system is not currently documented (somewhat ironic), but is _largely_ the same as
 | 
			
		||||
[ldoc][ldoc]. Documentation comments are written in Markdown,
 | 
			
		||||
 | 
			
		||||
Our markdown engine does _not_ support GitHub flavoured markdown, and so does not support all the features one might
 | 
			
		||||
expect (such as tables). It is very much recommended that you build and preview the docs locally first.
 | 
			
		||||
 | 
			
		||||
### Testing
 | 
			
		||||
Thankfully running tests is much simpler than running the documentation generator! `./gradlew check` will run the
 | 
			
		||||
entire test suite (and some additional bits of verification).
 | 
			
		||||
 | 
			
		||||
Before we get into writing tests, it's worth mentioning the various test suites that CC: Tweaked has:
 | 
			
		||||
 - "Core" Java (`./src/test/java`): These test core bits of the mod which don't require any Minecraft interaction.
 | 
			
		||||
   This includes the `@LuaFunction` system, file system code, etc...
 | 
			
		||||
 | 
			
		||||
   These tests are run by `./gradlew test`.
 | 
			
		||||
 | 
			
		||||
 - CraftOS (`./src/test/resources/test-rom/`): These tests are written in Lua, and ensure the Lua environment, libraries
 | 
			
		||||
   and programs work as expected. These are (generally) written to be able to be run on emulators too, to provide some
 | 
			
		||||
   sort of compliance test.
 | 
			
		||||
 | 
			
		||||
   These tests are run by the '"Core" Java' test suite, and so are also run with `./gradlew test`.
 | 
			
		||||
 | 
			
		||||
 - In-game (`./src/test/java/dan200/computercraft/ingame/`): These tests are run on an actual Minecraft server, using
 | 
			
		||||
   [the same system Mojang do][mc-test]. The aim of these is to test in-game behaviour of blocks and peripherals.
 | 
			
		||||
 | 
			
		||||
   These are run by `./gradlew testInGame`.
 | 
			
		||||
 | 
			
		||||
## CraftOS tests
 | 
			
		||||
CraftOS's tests are written using a test system called "mcfly", heavily inspired by [busted] (and thus RSpec). Groups of
 | 
			
		||||
tests go inside `describe` blocks, and a single test goes inside `it`.
 | 
			
		||||
 | 
			
		||||
Assertions are generally written using `expect` (inspired by Hamcrest and the like). For instance, `expect(foo):eq("bar")`
 | 
			
		||||
asserts that your variable `foo` is equal to the expected value `"bar"`.
 | 
			
		||||
 | 
			
		||||
[new-issue]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose "Create a new issue"
 | 
			
		||||
[community]: README.md#Community "Get in touch with the community."
 | 
			
		||||
[checkstyle]: https://checkstyle.org/
 | 
			
		||||
[illuaminate]: https://github.com/SquidDev/illuaminate/ "Illuaminate on GitHub"
 | 
			
		||||
[illuaminate-usage]: https://github.com/SquidDev/illuaminate/blob/master/README.md#usage "Installing Illuaminate"
 | 
			
		||||
[weblate]: https://i18n.tweaked.cc/projects/cc-tweaked/minecraft/ "CC: Tweaked weblate instance"
 | 
			
		||||
[docs]: https://tweaked.cc/ "CC: Tweaked documentation"
 | 
			
		||||
[ldoc]: http://stevedonovan.github.io/ldoc/ "ldoc, a Lua documentation generator."
 | 
			
		||||
[mc-test]: https://www.youtube.com/watch?v=vXaWOJTCYNg
 | 
			
		||||
[busted]: https://github.com/Olivine-Labs/busted "busted: Elegant Lua unit testing."
 | 
			
		||||
							
								
								
									
										14
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								LICENSE
									
									
									
									
									
								
							@@ -19,14 +19,14 @@ Mod: The mod code designated by the present license, in source form, binary
 | 
			
		||||
form, as obtained standalone, as part of a wider distribution or resulting from
 | 
			
		||||
the compilation of the original or modified sources.
 | 
			
		||||
 | 
			
		||||
Dependency: Code required for the mod to work properly. This includes 
 | 
			
		||||
Dependency: Code required for the mod to work properly. This includes
 | 
			
		||||
dependencies required to compile the code as well as any file or modification
 | 
			
		||||
that is explicitly or implicitly required for the mod to be working.
 | 
			
		||||
 | 
			
		||||
1. Scope
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
The present license is granted to any user of the mod. As a prerequisite, 
 | 
			
		||||
The present license is granted to any user of the mod. As a prerequisite,
 | 
			
		||||
a user must own a legally acquired copy of Minecraft
 | 
			
		||||
 | 
			
		||||
2. Liability
 | 
			
		||||
@@ -41,13 +41,13 @@ or misuse of this mod fall on the user.
 | 
			
		||||
3. Play rights
 | 
			
		||||
--------------
 | 
			
		||||
 | 
			
		||||
The user is allowed to install this mod on a Minecraft client or server and to play 
 | 
			
		||||
The user is allowed to install this mod on a Minecraft client or server and to play
 | 
			
		||||
without restriction.
 | 
			
		||||
 | 
			
		||||
4. Modification rights
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
The user has the right to decompile the source code, look at either the 
 | 
			
		||||
The user has the right to decompile the source code, look at either the
 | 
			
		||||
decompiled version or the original source code, and to modify it.
 | 
			
		||||
 | 
			
		||||
5. Distribution of original or modified copy rights
 | 
			
		||||
@@ -61,10 +61,10 @@ include:
 | 
			
		||||
   - patch to its source or binary files
 | 
			
		||||
   - any copy of a portion of its binary source files
 | 
			
		||||
 | 
			
		||||
The user is allowed to redistribute this mod partially, in totality, or 
 | 
			
		||||
The user is allowed to redistribute this mod partially, in totality, or
 | 
			
		||||
included in a distribution.
 | 
			
		||||
 | 
			
		||||
When distributing binary files, the user must provide means to obtain its 
 | 
			
		||||
When distributing binary files, the user must provide means to obtain its
 | 
			
		||||
entire set of sources or modified sources at no cost.
 | 
			
		||||
 | 
			
		||||
All distributions of this mod must remain licensed under the CCPL.
 | 
			
		||||
@@ -92,7 +92,7 @@ must be made available at no cost and remain licensed under the CCPL.
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
If you choose to contribute code or assets to be included in this mod, you
 | 
			
		||||
agree that, if added to to the main repository at 
 | 
			
		||||
agree that, if added to to the main repository at
 | 
			
		||||
https://github.com/dan200/ComputerCraft, your contributions will be covered by
 | 
			
		||||
this license, and that Daniel Ratcliffe will retain the right to re-license the
 | 
			
		||||
mod, including your contributions, in part or in whole, under other licenses.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										33
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								README.md
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
# 
 | 
			
		||||
[](https://travis-ci.org/SquidDev-CC/CC-Tweaked)
 | 
			
		||||
# 
 | 
			
		||||
[](https://github.com/SquidDev-CC/CC-Tweaked/actions "Current build status") [](https://minecraft.curseforge.com/projects/cc-tweaked "Download CC: Tweaked on CurseForge")
 | 
			
		||||
 | 
			
		||||
CC: Tweaked is a fork of [ComputerCraft](https://github.com/dan200/ComputerCraft), adding programmable computers,
 | 
			
		||||
turtles and more to Minecraft.
 | 
			
		||||
@@ -37,39 +37,36 @@ several features have been included, such as full block modems, the Cobalt runti
 | 
			
		||||
computers.
 | 
			
		||||
 | 
			
		||||
## Contributing
 | 
			
		||||
Any contribution is welcome, be that using the mod, reporting bugs or contributing code. In order to start helping
 | 
			
		||||
develop CC:T, you'll need to follow these steps:
 | 
			
		||||
 | 
			
		||||
 - **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
 | 
			
		||||
 - **Setup Forge:** `./gradlew setupDecompWorkspace`
 | 
			
		||||
 - **Test your changes:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
 | 
			
		||||
 | 
			
		||||
If you want to run CC:T in a normal Minecraft instance, run `./gradlew build` and copy the `.jar` from `build/libs`.
 | 
			
		||||
Any contribution is welcome, be that using the mod, reporting bugs or contributing code. If you want to get started
 | 
			
		||||
developing the mod, [check out the instructions here](CONTRIBUTING.md#developing).
 | 
			
		||||
 | 
			
		||||
## Community
 | 
			
		||||
If you need help getting started with CC: Tweaked, want to show off your latest project, or just want to chat about
 | 
			
		||||
ComputerCraft we have a [forum](https://forums.computercraft.cc/) and [Discord guild](https://discord.gg/H2UyJXe)!
 | 
			
		||||
There's also a fairly populated, albeit quiet [IRC channel](http://webchat.esper.net/?channels=#computercraft), if
 | 
			
		||||
that's more your cup of tea.
 | 
			
		||||
ComputerCraft we have a [forum](https://forums.computercraft.cc/) and [Discord guild](https://discord.computercraft.cc)!
 | 
			
		||||
There's also a fairly populated, albeit quiet [IRC channel](http://webchat.esper.net/?channels=computercraft), if that's
 | 
			
		||||
more your cup of tea.
 | 
			
		||||
 | 
			
		||||
I'd generally recommend you don't contact me directly (email, DM, etc...) unless absolutely necessary (i.e. in order to
 | 
			
		||||
report exploits). You'll get a far quicker response if you ask the whole community!
 | 
			
		||||
 | 
			
		||||
## Using
 | 
			
		||||
If you want to depend on CC: Tweaked, we have a maven repo. However, you should be wary that some functionality is only
 | 
			
		||||
exposed by CC:T's API and not vanilla ComputerCraft. If you wish to support all variations of ComputerCraft, I recommend
 | 
			
		||||
using [cc.crzd.me's maven](https://cc.crzd.me/maven/) instead.
 | 
			
		||||
CC: Tweaked is hosted on my maven repo, and so is relatively simple to depend on. You may wish to add a soft (or hard)
 | 
			
		||||
dependency in your `mods.toml` file, with the appropriate version bounds, to ensure that API functionality you depend
 | 
			
		||||
on is present.
 | 
			
		||||
 | 
			
		||||
```groovy
 | 
			
		||||
dependencies {
 | 
			
		||||
repositories {
 | 
			
		||||
  maven { url 'https://squiddev.cc/maven/' }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
  implementation "org.squiddev:cc-tweaked-${mc_version}:${cct_version}"
 | 
			
		||||
  implementation fg.deobf("org.squiddev:cc-tweaked-${mc_version}:${cct_version}")
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You should also be careful to only use classes within the `dan200.computercraft.api` package. Non-API classes are
 | 
			
		||||
subject to change at any point. If you depend on functionality outside the API, file an issue, and we can look into
 | 
			
		||||
exposing more features.
 | 
			
		||||
 | 
			
		||||
We bundle the API sources with the jar, so documentation should be easily viewable within your editor. Alternatively,
 | 
			
		||||
the generated documentation [can be browsed online](https://tweaked.cc/javadoc/).
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										504
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										504
									
								
								build.gradle
									
									
									
									
									
								
							@@ -1,110 +1,196 @@
 | 
			
		||||
 | 
			
		||||
// For those who want the bleeding edge
 | 
			
		||||
buildscript {
 | 
			
		||||
    repositories {
 | 
			
		||||
        jcenter()
 | 
			
		||||
        mavenCentral()
 | 
			
		||||
        maven {
 | 
			
		||||
            name = "forge"
 | 
			
		||||
            url = "http://files.minecraftforge.net/maven"
 | 
			
		||||
            url = "https://maven.minecraftforge.net"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    dependencies {
 | 
			
		||||
        classpath 'com.google.code.gson:gson:2.8.1'
 | 
			
		||||
        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
 | 
			
		||||
        classpath 'net.sf.proguard:proguard-gradle:6.1.0beta1'
 | 
			
		||||
        classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
 | 
			
		||||
        classpath 'net.minecraftforge.gradle:ForgeGradle:4.1.9'
 | 
			
		||||
        classpath 'net.sf.proguard:proguard-gradle:6.1.0beta2'
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
plugins {
 | 
			
		||||
    id 'com.matthewprenger.cursegradle' version '1.2.0'
 | 
			
		||||
    id "com.github.breadmoirai.github-release" version "2.2.4"
 | 
			
		||||
    id "checkstyle"
 | 
			
		||||
    id "jacoco"
 | 
			
		||||
    id "maven-publish"
 | 
			
		||||
    id "com.github.hierynomus.license" version "0.15.0"
 | 
			
		||||
    id "com.matthewprenger.cursegradle" version "1.4.0"
 | 
			
		||||
    id "com.github.breadmoirai.github-release" version "2.2.12"
 | 
			
		||||
    id "org.jetbrains.kotlin.jvm" version "1.3.72"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
apply plugin: 'net.minecraftforge.gradle.forge'
 | 
			
		||||
apply plugin: 'org.ajoberstar.grgit'
 | 
			
		||||
apply plugin: 'maven-publish'
 | 
			
		||||
apply plugin: 'maven'
 | 
			
		||||
apply plugin: 'net.minecraftforge.gradle'
 | 
			
		||||
 | 
			
		||||
version = mod_version
 | 
			
		||||
 | 
			
		||||
group = "org.squiddev"
 | 
			
		||||
archivesBaseName = "cc-tweaked-${mc_version}"
 | 
			
		||||
 | 
			
		||||
minecraft {
 | 
			
		||||
    version = "${mc_version}-${forge_version}"
 | 
			
		||||
    runDir = "run"
 | 
			
		||||
    replace '${version}', mod_version
 | 
			
		||||
java {
 | 
			
		||||
    toolchain {
 | 
			
		||||
        languageVersion = JavaLanguageVersion.of(8)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mappings = mappings_version
 | 
			
		||||
    makeObfSourceJar = false
 | 
			
		||||
    withSourcesJar()
 | 
			
		||||
    withJavadocJar()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minecraft {
 | 
			
		||||
    runs {
 | 
			
		||||
        client {
 | 
			
		||||
            workingDirectory project.file('run')
 | 
			
		||||
            property 'forge.logging.markers', 'REGISTRIES'
 | 
			
		||||
            property 'forge.logging.console.level', 'debug'
 | 
			
		||||
 | 
			
		||||
            mods {
 | 
			
		||||
                computercraft {
 | 
			
		||||
                    source sourceSets.main
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        server {
 | 
			
		||||
            workingDirectory project.file("run/server")
 | 
			
		||||
            property 'forge.logging.markers', 'REGISTRIES'
 | 
			
		||||
            property 'forge.logging.console.level', 'debug'
 | 
			
		||||
            arg "--nogui"
 | 
			
		||||
 | 
			
		||||
            mods {
 | 
			
		||||
                computercraft {
 | 
			
		||||
                    source sourceSets.main
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data {
 | 
			
		||||
            workingDirectory project.file('run')
 | 
			
		||||
            property 'forge.logging.markers', 'REGISTRIES'
 | 
			
		||||
            property 'forge.logging.console.level', 'debug'
 | 
			
		||||
 | 
			
		||||
            args '--mod', 'computercraft', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
 | 
			
		||||
            mods {
 | 
			
		||||
                computercraft {
 | 
			
		||||
                    source sourceSets.main
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        testServer {
 | 
			
		||||
            workingDirectory project.file('test-files/server')
 | 
			
		||||
            parent runs.server
 | 
			
		||||
 | 
			
		||||
            mods {
 | 
			
		||||
                cctest {
 | 
			
		||||
                    source sourceSets.test
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mappings channel: 'official', version: project.mc_version
 | 
			
		||||
 | 
			
		||||
    accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sourceSets {
 | 
			
		||||
    main.resources {
 | 
			
		||||
        srcDir 'src/generated/resources'
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
repositories {
 | 
			
		||||
    maven {
 | 
			
		||||
        name "JEI"
 | 
			
		||||
        url "http://dvs1.progwml6.com/files/maven"
 | 
			
		||||
    }
 | 
			
		||||
    mavenCentral()
 | 
			
		||||
    maven {
 | 
			
		||||
        name "SquidDev"
 | 
			
		||||
        url "https://squiddev.cc/maven"
 | 
			
		||||
    }
 | 
			
		||||
    ivy {
 | 
			
		||||
        name "Charset"
 | 
			
		||||
        artifactPattern "https://asie.pl/files/mods/Charset/LibOnly/[module]-[revision](-[classifier]).[ext]"
 | 
			
		||||
    }
 | 
			
		||||
    maven {
 | 
			
		||||
        name "Amadornes"
 | 
			
		||||
        url "http://maven.amadornes.com/"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
configurations {
 | 
			
		||||
    shade
 | 
			
		||||
    compile.extendsFrom shade
 | 
			
		||||
    deployerJars
 | 
			
		||||
    cctJavadoc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    deobfProvided "mezz.jei:jei_1.12.2:4.15.0.269:api"
 | 
			
		||||
    deobfProvided "pl.asie:Charset-Lib:0.5.4.6"
 | 
			
		||||
    deobfProvided "MCMultiPart2:MCMultiPart:2.5.3"
 | 
			
		||||
    checkstyle "com.puppycrawl.tools:checkstyle:8.25"
 | 
			
		||||
 | 
			
		||||
    runtime "mezz.jei:jei_1.12.2:4.15.0.269"
 | 
			
		||||
    minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
 | 
			
		||||
 | 
			
		||||
    shade 'org.squiddev:Cobalt:0.5.0-SNAPSHOT'
 | 
			
		||||
    compileOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.3:api")
 | 
			
		||||
    compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.15.2:6.0.0.9")
 | 
			
		||||
 | 
			
		||||
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
 | 
			
		||||
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
 | 
			
		||||
    runtimeOnly fg.deobf("mezz.jei:jei-1.15.2:6.0.0.3")
 | 
			
		||||
 | 
			
		||||
    deployerJars "org.apache.maven.wagon:wagon-ssh:3.0.0"
 | 
			
		||||
    shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'
 | 
			
		||||
 | 
			
		||||
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
 | 
			
		||||
    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
 | 
			
		||||
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
 | 
			
		||||
    testImplementation 'org.hamcrest:hamcrest:2.2'
 | 
			
		||||
    testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72'
 | 
			
		||||
    testImplementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.72'
 | 
			
		||||
    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
 | 
			
		||||
 | 
			
		||||
    cctJavadoc 'cc.tweaked:cct-javadoc:1.4.0'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Compile tasks
 | 
			
		||||
 | 
			
		||||
javadoc {
 | 
			
		||||
    include "dan200/computercraft/api/**/*.java"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jar {
 | 
			
		||||
    dependsOn javadoc
 | 
			
		||||
task luaJavadoc(type: Javadoc) {
 | 
			
		||||
    description "Generates documentation for Java-side Lua functions."
 | 
			
		||||
    group "documentation"
 | 
			
		||||
 | 
			
		||||
    manifest {
 | 
			
		||||
        attributes('FMLAT': 'computercraft_at.cfg')
 | 
			
		||||
    source = sourceSets.main.allJava
 | 
			
		||||
    destinationDir = file("${project.docsDir}/luaJavadoc")
 | 
			
		||||
    classpath = sourceSets.main.compileClasspath
 | 
			
		||||
 | 
			
		||||
    options.docletpath = configurations.cctJavadoc.files as List
 | 
			
		||||
    options.doclet = "cc.tweaked.javadoc.LuaDoclet"
 | 
			
		||||
    options.noTimestamp = false
 | 
			
		||||
 | 
			
		||||
    javadocTool = javaToolchains.javadocToolFor {
 | 
			
		||||
        languageVersion = JavaLanguageVersion.of(11)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    from (sourceSets.main.allSource) {
 | 
			
		||||
        include "dan200/computercraft/api/**/*.java"
 | 
			
		||||
jar {
 | 
			
		||||
    manifest {
 | 
			
		||||
        attributes(["Specification-Title": "computercraft",
 | 
			
		||||
                    "Specification-Vendor": "SquidDev",
 | 
			
		||||
                    "Specification-Version": "1",
 | 
			
		||||
                    "Implementation-Title": "CC: Tweaked",
 | 
			
		||||
                    "Implementation-Version": "${mod_version}",
 | 
			
		||||
                    "Implementation-Vendor" :"SquidDev",
 | 
			
		||||
                    "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[compileJava, compileTestJava].forEach {
 | 
			
		||||
    it.configure {
 | 
			
		||||
        options.compilerArgs << "-Xlint" << "-Xlint:-processing"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
import java.nio.charset.StandardCharsets
 | 
			
		||||
import java.nio.file.*
 | 
			
		||||
import java.util.zip.*
 | 
			
		||||
 | 
			
		||||
import com.google.gson.GsonBuilder
 | 
			
		||||
import com.google.gson.JsonElement
 | 
			
		||||
import org.ajoberstar.grgit.Grgit
 | 
			
		||||
import com.hierynomus.gradle.license.tasks.LicenseCheck
 | 
			
		||||
import com.hierynomus.gradle.license.tasks.LicenseFormat
 | 
			
		||||
import proguard.gradle.ProGuardTask
 | 
			
		||||
 | 
			
		||||
task proguard(type: ProGuardTask, dependsOn: jar) {
 | 
			
		||||
@@ -116,6 +202,7 @@ task proguard(type: ProGuardTask, dependsOn: jar) {
 | 
			
		||||
 | 
			
		||||
    // Add the main runtime jar and all non-shadowed dependencies
 | 
			
		||||
    libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
 | 
			
		||||
    libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
 | 
			
		||||
    doFirst {
 | 
			
		||||
        sourceSets.main.compileClasspath
 | 
			
		||||
            .filter { !it.name.contains("Cobalt") }
 | 
			
		||||
@@ -126,13 +213,14 @@ task proguard(type: ProGuardTask, dependsOn: jar) {
 | 
			
		||||
    dontobfuscate; dontoptimize; keepattributes; keepparameternames
 | 
			
		||||
 | 
			
		||||
    // Proguard will remove directories by default, but that breaks JarMount.
 | 
			
		||||
    keepdirectories 'assets/computercraft/lua**'
 | 
			
		||||
    keepdirectories 'data/computercraft/lua**'
 | 
			
		||||
 | 
			
		||||
    // Preserve ComputerCraft classes - we only want to strip shadowed files.
 | 
			
		||||
    keep 'class dan200.computercraft.** { *; }'
 | 
			
		||||
 | 
			
		||||
    // Preserve the constructors in Cobalt library class, as we init them via reflection
 | 
			
		||||
    keepclassmembers 'class org.squiddev.cobalt.lib.** { <init>(...); }'
 | 
			
		||||
    // LWJGL and Apache bundle Java 9 versions, which is great, but rather breaks Proguard
 | 
			
		||||
    dontwarn 'module-info'
 | 
			
		||||
    dontwarn 'org.apache.**,org.lwjgl.**'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task proguardMove(dependsOn: proguard) {
 | 
			
		||||
@@ -148,8 +236,6 @@ task proguardMove(dependsOn: proguard) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
reobfJar.dependsOn proguardMove
 | 
			
		||||
 | 
			
		||||
processResources {
 | 
			
		||||
    inputs.property "version", mod_version
 | 
			
		||||
    inputs.property "mcversion", mc_version
 | 
			
		||||
@@ -157,21 +243,20 @@ processResources {
 | 
			
		||||
    def hash = 'none'
 | 
			
		||||
    Set<String> contributors = []
 | 
			
		||||
    try {
 | 
			
		||||
        def grgit = Grgit.open(dir: '.')
 | 
			
		||||
        hash = grgit.head().id
 | 
			
		||||
        hash = ["git", "-C", projectDir, "rev-parse", "HEAD"].execute().text.trim()
 | 
			
		||||
 | 
			
		||||
        def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
 | 
			
		||||
        grgit.log().each {
 | 
			
		||||
            if (!blacklist.contains(it.author.name)) contributors.add(it.author.name)
 | 
			
		||||
            if (!blacklist.contains(it.committer.name)) contributors.add(it.committer.name)
 | 
			
		||||
        ["git", "-C", projectDir, "log", "--format=tformat:%an%n%cn"].execute().text.split('\n').each {
 | 
			
		||||
            if (!blacklist.contains(it)) contributors.add(it)
 | 
			
		||||
        }
 | 
			
		||||
    } catch(Exception ignored) { }
 | 
			
		||||
 | 
			
		||||
    } catch(Exception e) {
 | 
			
		||||
        e.printStackTrace()
 | 
			
		||||
    }
 | 
			
		||||
    inputs.property "commithash", hash
 | 
			
		||||
 | 
			
		||||
    from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
        include 'mcmod.info'
 | 
			
		||||
        include 'assets/computercraft/lua/rom/help/credits.txt'
 | 
			
		||||
        include 'META-INF/mods.toml'
 | 
			
		||||
        include 'data/computercraft/lua/rom/help/credits.txt'
 | 
			
		||||
 | 
			
		||||
        expand 'version': mod_version,
 | 
			
		||||
               'mcversion': mc_version,
 | 
			
		||||
@@ -179,12 +264,12 @@ processResources {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
        exclude 'mcmod.info'
 | 
			
		||||
        exclude 'assets/computercraft/lua/rom/help/credits.txt'
 | 
			
		||||
        exclude 'META-INF/mods.toml'
 | 
			
		||||
        exclude 'data/computercraft/lua/rom/help/credits.txt'
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task compressJson(dependsOn: extractAnnotationsJar) {
 | 
			
		||||
task compressJson(dependsOn: jar) {
 | 
			
		||||
    group "compact"
 | 
			
		||||
    description "Minifies all JSON files, stripping whitespace"
 | 
			
		||||
 | 
			
		||||
@@ -199,6 +284,7 @@ task compressJson(dependsOn: extractAnnotationsJar) {
 | 
			
		||||
        // Copy over all files in the current jar to the new one, running json files from GSON. As pretty printing
 | 
			
		||||
        // is turned off, they should be minified.
 | 
			
		||||
        new ZipFile(jarPath).withCloseable { inJar ->
 | 
			
		||||
            tempPath.getParentFile().mkdirs()
 | 
			
		||||
            new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(tempPath))).withCloseable { outJar ->
 | 
			
		||||
                inJar.entries().each { entry ->
 | 
			
		||||
                    if(entry.directory) {
 | 
			
		||||
@@ -226,19 +312,192 @@ task compressJson(dependsOn: extractAnnotationsJar) {
 | 
			
		||||
 | 
			
		||||
assemble.dependsOn compressJson
 | 
			
		||||
 | 
			
		||||
task checkRelease(dependsOn: extractAnnotationsJar) {
 | 
			
		||||
// Web tasks
 | 
			
		||||
 | 
			
		||||
import org.apache.tools.ant.taskdefs.condition.Os
 | 
			
		||||
 | 
			
		||||
List<String> mkCommand(String command) {
 | 
			
		||||
    return Os.isFamily(Os.FAMILY_WINDOWS) ? ["cmd", "/c", command] : ["sh", "-c", command]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task rollup(type: Exec) {
 | 
			
		||||
    group = "build"
 | 
			
		||||
    description = "Bundles JS into rollup"
 | 
			
		||||
 | 
			
		||||
    inputs.files(fileTree("src/web")).withPropertyName("sources")
 | 
			
		||||
    inputs.file("package-lock.json").withPropertyName("package-lock.json")
 | 
			
		||||
    inputs.file("tsconfig.json").withPropertyName("Typescript config")
 | 
			
		||||
    inputs.file("rollup.config.js").withPropertyName("Rollup config")
 | 
			
		||||
    outputs.file("$buildDir/rollup/index.js").withPropertyName("output")
 | 
			
		||||
 | 
			
		||||
    commandLine mkCommand('"node_modules/.bin/rollup" --config rollup.config.js')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task minifyWeb(type: Exec, dependsOn: rollup) {
 | 
			
		||||
    group = "build"
 | 
			
		||||
    description = "Bundles JS into rollup"
 | 
			
		||||
 | 
			
		||||
    inputs.file("$buildDir/rollup/index.js").withPropertyName("sources")
 | 
			
		||||
    inputs.file("package-lock.json").withPropertyName("package-lock.json")
 | 
			
		||||
    outputs.file("$buildDir/rollup/index.min.js").withPropertyName("output")
 | 
			
		||||
 | 
			
		||||
    commandLine mkCommand('"node_modules/.bin/terser"' + " -o '$buildDir/rollup/index.min.js' '$buildDir/rollup/index.js'")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
 | 
			
		||||
    group = "build"
 | 
			
		||||
    description = "Bundles JS into rollup"
 | 
			
		||||
 | 
			
		||||
    inputs.files(fileTree("doc")).withPropertyName("docs")
 | 
			
		||||
    inputs.files(fileTree("src/main/resources/data/computercraft/lua/rom")).withPropertyName("lua rom")
 | 
			
		||||
    inputs.file("illuaminate.sexp").withPropertyName("illuaminate.sexp")
 | 
			
		||||
    inputs.dir("$buildDir/docs/luaJavadoc")
 | 
			
		||||
    inputs.file("$buildDir/rollup/index.min.js").withPropertyName("scripts")
 | 
			
		||||
    inputs.file("src/web/styles.css").withPropertyName("styles")
 | 
			
		||||
    outputs.dir("$buildDir/docs/lua")
 | 
			
		||||
 | 
			
		||||
    commandLine mkCommand('"bin/illuaminate" doc-gen')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task docWebsite(type: Copy, dependsOn: [illuaminateDocs]) {
 | 
			
		||||
    from 'doc/logo.png'
 | 
			
		||||
    into "${project.docsDir}/lua"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Check tasks
 | 
			
		||||
 | 
			
		||||
test {
 | 
			
		||||
    useJUnitPlatform()
 | 
			
		||||
    testLogging {
 | 
			
		||||
        events "skipped", "failed"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jacocoTestReport {
 | 
			
		||||
    dependsOn('test')
 | 
			
		||||
    reports {
 | 
			
		||||
        xml.enabled true
 | 
			
		||||
        html.enabled true
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check.dependsOn jacocoTestReport
 | 
			
		||||
 | 
			
		||||
license {
 | 
			
		||||
    mapping("java", "SLASHSTAR_STYLE")
 | 
			
		||||
    strictCheck true
 | 
			
		||||
 | 
			
		||||
    ext.year = Calendar.getInstance().get(Calendar.YEAR)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[licenseMain, licenseFormatMain].forEach {
 | 
			
		||||
    it.configure {
 | 
			
		||||
        include("**/*.java")
 | 
			
		||||
        exclude("dan200/computercraft/api/**")
 | 
			
		||||
        header file('config/license/main.txt')
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[licenseTest, licenseFormatTest].forEach {
 | 
			
		||||
    it.configure {
 | 
			
		||||
        include("**/*.java")
 | 
			
		||||
        header file('config/license/main.txt')
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gradle.projectsEvaluated {
 | 
			
		||||
    tasks.withType(LicenseFormat) {
 | 
			
		||||
        outputs.upToDateWhen { false }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
task licenseAPI(type: LicenseCheck);
 | 
			
		||||
task licenseFormatAPI(type: LicenseFormat);
 | 
			
		||||
[licenseAPI, licenseFormatAPI].forEach {
 | 
			
		||||
    it.configure {
 | 
			
		||||
        source = sourceSets.main.java
 | 
			
		||||
        include("dan200/computercraft/api/**")
 | 
			
		||||
        header file('config/license/api.txt')
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task setupServer(type: Copy) {
 | 
			
		||||
    group "test server"
 | 
			
		||||
    description "Sets up the environment for the test server."
 | 
			
		||||
 | 
			
		||||
    from("src/test/server-files") {
 | 
			
		||||
        include "eula.txt"
 | 
			
		||||
        include "server.properties"
 | 
			
		||||
    }
 | 
			
		||||
    into "test-files/server"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks.register('testInGame', JavaExec.class).configure {
 | 
			
		||||
    it.group('test server')
 | 
			
		||||
    it.description("Runs tests on a temporary Minecraft server.")
 | 
			
		||||
    it.dependsOn(setupServer, 'prepareRunTestServer')
 | 
			
		||||
 | 
			
		||||
    // Copy from runTestServer. We do it in this slightly odd way as runTestServer
 | 
			
		||||
    // isn't created until the task is configured (which is no good for us).
 | 
			
		||||
    JavaExec exec = tasks.getByName('runTestServer')
 | 
			
		||||
    it.setWorkingDir(exec.getWorkingDir())
 | 
			
		||||
    it.setSystemProperties(exec.getSystemProperties())
 | 
			
		||||
    it.setBootstrapClasspath(exec.getBootstrapClasspath())
 | 
			
		||||
    it.setClasspath(exec.getClasspath())
 | 
			
		||||
    it.setMain(exec.getMain())
 | 
			
		||||
    it.setEnvironment(exec.getEnvironment())
 | 
			
		||||
    it.setArgs(exec.getArgs())
 | 
			
		||||
    it.setJvmArgs(exec.getJvmArgs())
 | 
			
		||||
 | 
			
		||||
    it.systemProperty('forge.logging.console.level', 'info')
 | 
			
		||||
    it.systemProperty('cctest.run', 'true')
 | 
			
		||||
 | 
			
		||||
    // Jacoco and modlauncher don't play well together as the classes loaded in-game don't
 | 
			
		||||
    // match up with those written to disk. We get Jacoco to dump all classes to disk, and
 | 
			
		||||
    // use that when generating the report.
 | 
			
		||||
    def coverageOut = new File(buildDir, 'jacocoClassDump/testInGame')
 | 
			
		||||
    jacoco.applyTo(it)
 | 
			
		||||
    it.jacoco.setIncludes(["dan200.computercraft.*"])
 | 
			
		||||
    it.jacoco.setClassDumpDir(coverageOut)
 | 
			
		||||
    it.outputs.dir(coverageOut)
 | 
			
		||||
    // Older versions of modlauncher don't include a protection domain (and thus no code
 | 
			
		||||
    // source). Jacoco skips such classes by default, so we need to explicitly include them.
 | 
			
		||||
    it.jacoco.setIncludeNoLocationClasses(true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks.register('jacocoTestInGameReport', JacocoReport.class).configure {
 | 
			
		||||
    it.group('test server')
 | 
			
		||||
    it.description('Generate coverage reports for in-game tests (testInGame)')
 | 
			
		||||
    it.dependsOn('testInGame')
 | 
			
		||||
 | 
			
		||||
    it.executionData(new File(buildDir, 'jacoco/testInGame.exec'))
 | 
			
		||||
    it.sourceDirectories.from(sourceSets.main.allJava.srcDirs)
 | 
			
		||||
    it.classDirectories.from(new File(buildDir, 'jacocoClassDump/testInGame'))
 | 
			
		||||
 | 
			
		||||
    it.reports {
 | 
			
		||||
        xml.enabled true
 | 
			
		||||
        html.enabled true
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
check.dependsOn('jacocoTestInGameReport')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Upload tasks
 | 
			
		||||
 | 
			
		||||
task checkRelease {
 | 
			
		||||
    group "upload"
 | 
			
		||||
    description "Verifies that everything is ready for a release"
 | 
			
		||||
 | 
			
		||||
    inputs.property "version", mod_version
 | 
			
		||||
    inputs.file("src/main/resources/assets/computercraft/lua/rom/help/changelog.txt")
 | 
			
		||||
    inputs.file("src/main/resources/assets/computercraft/lua/rom/help/whatsnew.txt")
 | 
			
		||||
    inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.txt")
 | 
			
		||||
    inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
 | 
			
		||||
 | 
			
		||||
    doLast {
 | 
			
		||||
        def ok = true
 | 
			
		||||
 | 
			
		||||
        // Check we're targetting the current version
 | 
			
		||||
        def whatsnew = new File("src/main/resources/assets/computercraft/lua/rom/help/whatsnew.txt").readLines()
 | 
			
		||||
        def whatsnew = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt").readLines()
 | 
			
		||||
        if (whatsnew[0] != "New features in CC: Tweaked $mod_version") {
 | 
			
		||||
            ok = false
 | 
			
		||||
            project.logger.error("Expected `whatsnew.txt' to target $mod_version.")
 | 
			
		||||
@@ -255,7 +514,7 @@ task checkRelease(dependsOn: extractAnnotationsJar) {
 | 
			
		||||
 | 
			
		||||
        // Check whatsnew and changelog match.
 | 
			
		||||
        def versionChangelog = "# " + whatsnew.join("\n")
 | 
			
		||||
        def changelog = new File("src/main/resources/assets/computercraft/lua/rom/help/changelog.txt").getText()
 | 
			
		||||
        def changelog = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/changelog.txt").getText()
 | 
			
		||||
        if (!changelog.startsWith(versionChangelog)) {
 | 
			
		||||
            ok = false
 | 
			
		||||
            project.logger.error("whatsnew and changelog are not in sync")
 | 
			
		||||
@@ -264,7 +523,7 @@ task checkRelease(dependsOn: extractAnnotationsJar) {
 | 
			
		||||
        if (!ok) throw new IllegalStateException("Could not check release")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check.dependsOn checkRelease
 | 
			
		||||
 | 
			
		||||
curseforge {
 | 
			
		||||
    apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
 | 
			
		||||
@@ -281,51 +540,41 @@ curseforge {
 | 
			
		||||
 | 
			
		||||
publishing {
 | 
			
		||||
    publications {
 | 
			
		||||
        mavenJava(MavenPublication) {
 | 
			
		||||
        maven(MavenPublication) {
 | 
			
		||||
            from components.java
 | 
			
		||||
            artifact sourceJar
 | 
			
		||||
 | 
			
		||||
            pom {
 | 
			
		||||
                name = 'CC: Tweaked'
 | 
			
		||||
                description = 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
 | 
			
		||||
                url = 'https://github.com/SquidDev-CC/CC-Tweaked'
 | 
			
		||||
 | 
			
		||||
                scm {
 | 
			
		||||
                    url = 'https://github.com/SquidDev-CC/CC-Tweaked.git'
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                issueManagement {
 | 
			
		||||
                    system = 'github'
 | 
			
		||||
                    url = 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                licenses {
 | 
			
		||||
                    license {
 | 
			
		||||
                        name = 'ComputerCraft Public License, Version 1.0'
 | 
			
		||||
                        url = 'https://github.com/SquidDev-CC/CC-Tweaked/blob/mc-1.15.x/LICENSE'
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uploadArchives {
 | 
			
		||||
    repositories {
 | 
			
		||||
        if(project.hasProperty('mavenUploadUrl')) {
 | 
			
		||||
            mavenDeployer {
 | 
			
		||||
                configuration = configurations.deployerJars
 | 
			
		||||
 | 
			
		||||
                repository(url: project.property('mavenUploadUrl')) {
 | 
			
		||||
                    authentication(
 | 
			
		||||
                        userName: project.property('mavenUploadUser'),
 | 
			
		||||
                        privateKey: project.property('mavenUploadKey'))
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                pom.project {
 | 
			
		||||
                    name 'CC: Tweaked'
 | 
			
		||||
                    packaging 'jar'
 | 
			
		||||
                    description 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
 | 
			
		||||
                    url 'https://github.com/SquidDev-CC/CC-Tweaked'
 | 
			
		||||
 | 
			
		||||
                    scm {
 | 
			
		||||
                        url 'https://github.com/SquidDev-CC/CC-Tweaked.git'
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    issueManagement {
 | 
			
		||||
                        system 'github'
 | 
			
		||||
                        url 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    licenses {
 | 
			
		||||
                        license {
 | 
			
		||||
                            name 'ComputerCraft Public License, Version 1.0'
 | 
			
		||||
                            url 'https://github.com/SquidDev-CC/CC-Tweaked/blob/master/LICENSE'
 | 
			
		||||
                            distribution 'repo'
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                pom.whenConfigured { pom ->
 | 
			
		||||
                    pom.dependencies.clear()
 | 
			
		||||
        if (project.hasProperty("mavenUser")) {
 | 
			
		||||
            maven {
 | 
			
		||||
                name = "SquidDev"
 | 
			
		||||
                url = "https://squiddev.cc/maven"
 | 
			
		||||
                credentials {
 | 
			
		||||
                    username = project.property("mavenUser") as String
 | 
			
		||||
                    password = project.property("mavenPass") as String
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
@@ -336,37 +585,30 @@ githubRelease {
 | 
			
		||||
    token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
 | 
			
		||||
    owner 'SquidDev-CC'
 | 
			
		||||
    repo 'CC-Tweaked'
 | 
			
		||||
    targetCommitish { Grgit.open(dir: '.').branch.current() }
 | 
			
		||||
    targetCommitish.set(project.provider({
 | 
			
		||||
        try {
 | 
			
		||||
            return ["git", "-C", projectDir, "rev-parse", "--abbrev-ref", "HEAD"].execute().text.trim()
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            e.printStackTrace()
 | 
			
		||||
        }
 | 
			
		||||
        return "master"
 | 
			
		||||
    }))
 | 
			
		||||
 | 
			
		||||
    tagName "v${mc_version}-${mod_version}"
 | 
			
		||||
    releaseName "[${mc_version}] ${mod_version}"
 | 
			
		||||
    body {
 | 
			
		||||
        "##" + new File("src/main/resources/assets/computercraft/lua/rom/help/whatsnew.txt")
 | 
			
		||||
    body.set(project.provider({
 | 
			
		||||
        "## " + new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
 | 
			
		||||
            .readLines()
 | 
			
		||||
            .takeWhile { it != 'Type "help changelog" to see the full version history.' }
 | 
			
		||||
            .join("\n").trim()
 | 
			
		||||
    }
 | 
			
		||||
    }))
 | 
			
		||||
    prerelease false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task uploadAll(dependsOn: [uploadArchives, "curseforge", "githubRelease"]) {
 | 
			
		||||
def uploadTasks = ["publish", "curseforge", "githubRelease"]
 | 
			
		||||
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
 | 
			
		||||
 | 
			
		||||
task uploadAll(dependsOn: uploadTasks) {
 | 
			
		||||
    group "upload"
 | 
			
		||||
    description "Uploads to all repositories (Maven, Curse, GitHub release)"
 | 
			
		||||
    dependsOn checkRelease
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
test {
 | 
			
		||||
    useJUnitPlatform()
 | 
			
		||||
    testLogging {
 | 
			
		||||
        events "passed", "skipped", "failed"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gradle.projectsEvaluated {
 | 
			
		||||
    tasks.withType(JavaCompile) {
 | 
			
		||||
        options.compilerArgs << "-Xlint" << "-Xlint:-processing" << "-Werror"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
runClient.outputs.upToDateWhen { false }
 | 
			
		||||
runServer.outputs.upToDateWhen { false }
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										164
									
								
								config/checkstyle/checkstyle.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								config/checkstyle/checkstyle.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE module PUBLIC
 | 
			
		||||
    "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
 | 
			
		||||
    "https://checkstyle.org/dtds/configuration_1_3.dtd">
 | 
			
		||||
<module name="Checker">
 | 
			
		||||
    <property name="tabWidth" value="4"/>
 | 
			
		||||
    <property name="charset" value="UTF-8" />
 | 
			
		||||
 | 
			
		||||
    <module name="SuppressionFilter">
 | 
			
		||||
	<property name="file" value="${config_loc}/suppressions.xml" />
 | 
			
		||||
    </module>
 | 
			
		||||
 | 
			
		||||
    <module name="BeforeExecutionExclusionFileFilter">
 | 
			
		||||
        <property name="fileNamePattern" value="render_old"/>
 | 
			
		||||
    </module>
 | 
			
		||||
 | 
			
		||||
    <module name="TreeWalker">
 | 
			
		||||
        <!-- Annotations -->
 | 
			
		||||
        <module name="AnnotationLocation" />
 | 
			
		||||
        <module name="AnnotationUseStyle" />
 | 
			
		||||
        <module name="MissingDeprecated" />
 | 
			
		||||
        <module name="MissingOverride" />
 | 
			
		||||
 | 
			
		||||
        <!-- Blocks -->
 | 
			
		||||
        <module name="EmptyBlock" />
 | 
			
		||||
        <module name="EmptyCatchBlock">
 | 
			
		||||
            <property name="exceptionVariableName" value="ignored" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="LeftCurly">
 | 
			
		||||
            <property name="option" value="nl" />
 | 
			
		||||
            <!-- The defaults, minus lambdas. -->
 | 
			
		||||
            <property name="tokens" value="ANNOTATION_DEF,CLASS_DEF,CTOR_DEF,ENUM_CONSTANT_DEF,ENUM_DEF,INTERFACE_DEF,LITERAL_CASE,LITERAL_CATCH,LITERAL_DEFAULT,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,METHOD_DEF,OBJBLOCK,STATIC_INIT" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="NeedBraces">
 | 
			
		||||
            <property name="allowSingleLineStatement" value="true"/>
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="RightCurly">
 | 
			
		||||
            <property name="option" value="alone" />
 | 
			
		||||
        </module>
 | 
			
		||||
 | 
			
		||||
        <!-- Class design. As if we've ever followed good practice here. -->
 | 
			
		||||
        <module name="FinalClass" />
 | 
			
		||||
        <module name="InterfaceIsType" />
 | 
			
		||||
        <module name="MutableException" />
 | 
			
		||||
        <module name="OneTopLevelClass" />
 | 
			
		||||
 | 
			
		||||
        <!-- Coding -->
 | 
			
		||||
        <module name="ArrayTrailingComma" />
 | 
			
		||||
        <module name="EqualsHashCode" />
 | 
			
		||||
        <!-- FallThrough does not handle unreachable code well -->
 | 
			
		||||
        <module name="IllegalInstantiation" />
 | 
			
		||||
        <module name="IllegalThrows" />
 | 
			
		||||
        <module name="ModifiedControlVariable" />
 | 
			
		||||
        <module name="NoClone" />
 | 
			
		||||
        <module name="NoFinalizer" />
 | 
			
		||||
        <module name="OneStatementPerLine" />
 | 
			
		||||
        <module name="PackageDeclaration" />
 | 
			
		||||
        <module name="SimplifyBooleanExpression" />
 | 
			
		||||
        <module name="SimplifyBooleanReturn" />
 | 
			
		||||
        <module name="StringLiteralEquality" />
 | 
			
		||||
        <module name="UnnecessaryParentheses" />
 | 
			
		||||
        <module name="UnnecessarySemicolonAfterTypeMemberDeclaration" />
 | 
			
		||||
        <module name="UnnecessarySemicolonInTryWithResources" />
 | 
			
		||||
        <module name="UnnecessarySemicolonInEnumeration" />
 | 
			
		||||
 | 
			
		||||
        <!-- Imports -->
 | 
			
		||||
        <module name="CustomImportOrder" />
 | 
			
		||||
        <module name="IllegalImport" />
 | 
			
		||||
        <module name="RedundantImport" />
 | 
			
		||||
        <module name="UnusedImports" />
 | 
			
		||||
 | 
			
		||||
        <!-- Javadoc -->
 | 
			
		||||
        <!-- TODO: Missing* checks for the dan200.computercraft.api package? -->
 | 
			
		||||
        <module name="AtclauseOrder" />
 | 
			
		||||
        <module name="InvalidJavadocPosition" />
 | 
			
		||||
        <module name="JavadocBlockTagLocation" />
 | 
			
		||||
        <module name="JavadocMethod"/>
 | 
			
		||||
        <module name="JavadocType"/>
 | 
			
		||||
        <module name="JavadocStyle" />
 | 
			
		||||
        <module name="NonEmptyAtclauseDescription" />
 | 
			
		||||
        <module name="SingleLineJavadoc" />
 | 
			
		||||
        <module name="SummaryJavadocCheck"/>
 | 
			
		||||
 | 
			
		||||
        <!-- Misc -->
 | 
			
		||||
        <module name="ArrayTypeStyle" />
 | 
			
		||||
        <module name="CommentsIndentation" />
 | 
			
		||||
        <module name="Indentation" />
 | 
			
		||||
        <module name="OuterTypeFilename" />
 | 
			
		||||
 | 
			
		||||
        <!-- Modifiers -->
 | 
			
		||||
        <module name="ModifierOrder" />
 | 
			
		||||
        <module name="RedundantModifier" />
 | 
			
		||||
 | 
			
		||||
        <!-- Naming -->
 | 
			
		||||
        <module name="ClassTypeParameterName" />
 | 
			
		||||
        <module name="InterfaceTypeParameterName" />
 | 
			
		||||
        <module name="LambdaParameterName" />
 | 
			
		||||
        <module name="LocalFinalVariableName" />
 | 
			
		||||
        <module name="LocalVariableName" />
 | 
			
		||||
        <module name="MemberName" />
 | 
			
		||||
        <module name="MethodName" />
 | 
			
		||||
        <module name="MethodTypeParameterName" />
 | 
			
		||||
        <module name="PackageName">
 | 
			
		||||
            <property name="format" value="^dan200\.computercraft(\.[a-z][a-z0-9]*)*" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="ParameterName" />
 | 
			
		||||
        <module name="StaticVariableName">
 | 
			
		||||
            <property name="format" value="^[a-z][a-zA-Z0-9]*|CAPABILITY(_[A-Z_]+)?$" />
 | 
			
		||||
            <property name="applyToPrivate" value="false" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="StaticVariableName">
 | 
			
		||||
            <property name="format" value="^(s_)?[a-z][a-zA-Z0-9]*|CAPABILITY(_[A-Z_]+)?$" />
 | 
			
		||||
            <property name="applyToPrivate" value="true" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="TypeName" />
 | 
			
		||||
 | 
			
		||||
        <!-- Whitespace -->
 | 
			
		||||
        <module name="EmptyForInitializerPad"/>
 | 
			
		||||
        <module name="EmptyForIteratorPad">
 | 
			
		||||
            <property name="option" value="space"/>
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="GenericWhitespace" />
 | 
			
		||||
        <module name="MethodParamPad" />
 | 
			
		||||
        <module name="NoLineWrap" />
 | 
			
		||||
        <module name="NoWhitespaceAfter">
 | 
			
		||||
            <property name="tokens" value="AT,INC,DEC,UNARY_MINUS,UNARY_PLUS,BNOT,LNOT,DOT,ARRAY_DECLARATOR,INDEX_OP" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="NoWhitespaceBefore" />
 | 
			
		||||
        <!-- TODO: Decide on an OperatorWrap style. -->
 | 
			
		||||
        <module name="ParenPad">
 | 
			
		||||
            <property name="option" value="space" />
 | 
			
		||||
            <property name="tokens" value="ANNOTATION,ANNOTATION_FIELD_DEF,CTOR_CALL,CTOR_DEF,ENUM_CONSTANT_DEF,LITERAL_CATCH,LITERAL_DO,LITERAL_FOR,LITERAL_IF,LITERAL_NEW,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_WHILE,METHOD_CALL,METHOD_DEF,RESOURCE_SPECIFICATION,SUPER_CTOR_CALL,LAMBDA" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="ParenPad">
 | 
			
		||||
            <property name="option" value="nospace" />
 | 
			
		||||
            <property name="tokens" value="DOT,EXPR,QUESTION" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="SeparatorWrap">
 | 
			
		||||
            <property name="option" value="eol" />
 | 
			
		||||
            <property name="tokens" value="COMMA,SEMI,ELLIPSIS,ARRAY_DECLARATOR,RBRACK,METHOD_REF" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="SeparatorWrap">
 | 
			
		||||
            <property name="option" value="nl" />
 | 
			
		||||
            <property name="tokens" value="DOT,AT" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="SingleSpaceSeparator" />
 | 
			
		||||
        <module name="TypecastParenPad" />
 | 
			
		||||
        <module name="WhitespaceAfter">
 | 
			
		||||
            <property name="tokens" value="COMMA" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="WhitespaceAround">
 | 
			
		||||
            <property name="allowEmptyConstructors" value="true" />
 | 
			
		||||
            <property name="ignoreEnhancedForColon" value="false" />
 | 
			
		||||
            <property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAMBDA,LAND,LCURLY,LE,LITERAL_RETURN,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND" />
 | 
			
		||||
        </module>
 | 
			
		||||
    </module>
 | 
			
		||||
 | 
			
		||||
    <module name="FileTabCharacter" />
 | 
			
		||||
    <module name="NewlineAtEndOfFile" />
 | 
			
		||||
    <module name="RegexpSingleline">
 | 
			
		||||
        <property name="format" value="\s+$"/>
 | 
			
		||||
        <property name="message" value="Trailing whitespace"/>
 | 
			
		||||
    </module>
 | 
			
		||||
</module>
 | 
			
		||||
							
								
								
									
										15
									
								
								config/checkstyle/suppressions.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								config/checkstyle/suppressions.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!DOCTYPE suppressions PUBLIC
 | 
			
		||||
    "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
 | 
			
		||||
    "https://checkstyle.org/dtds/suppressions_1_2.dtd">
 | 
			
		||||
<suppressions>
 | 
			
		||||
    <!-- All the config options and method fields. -->
 | 
			
		||||
    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraft.java" />
 | 
			
		||||
    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraftAPI.java" />
 | 
			
		||||
 | 
			
		||||
    <!-- Do not check for missing package Javadoc. -->
 | 
			
		||||
    <suppress checks="JavadocStyle" files=".*[\\/]package-info.java" />
 | 
			
		||||
 | 
			
		||||
    <!-- The commands API is documented in Lua. -->
 | 
			
		||||
    <suppress checks="SummaryJavadocCheck" files=".*[\\/]CommandAPI.java" />
 | 
			
		||||
</suppressions>
 | 
			
		||||
@@ -2488,4 +2488,4 @@
 | 
			
		||||
      </option>
 | 
			
		||||
    </inspection_tool>
 | 
			
		||||
  </profile>
 | 
			
		||||
</component>
 | 
			
		||||
</component>
 | 
			
		||||
@@ -58,4 +58,4 @@
 | 
			
		||||
      <option name="CONTINUATION_INDENT_SIZE" value="4" />
 | 
			
		||||
    </indentOptions>
 | 
			
		||||
  </codeStyleSettings>
 | 
			
		||||
</code_scheme>
 | 
			
		||||
</code_scheme>
 | 
			
		||||
							
								
								
									
										3
									
								
								config/license/api.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/license/api.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
This file is part of the public ComputerCraft API - http://www.computercraft.info
 | 
			
		||||
Copyright Daniel Ratcliffe, 2011-${year}. This API may be redistributed unmodified and in full only.
 | 
			
		||||
For help using the API, and posting your mods, visit the forums at computercraft.info.
 | 
			
		||||
							
								
								
									
										3
									
								
								config/license/main.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/license/main.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
This file is part of ComputerCraft - http://www.computercraft.info
 | 
			
		||||
Copyright Daniel Ratcliffe, 2011-${year}. Do not distribute without permission.
 | 
			
		||||
Send enquiries to dratcliffe@gmail.com
 | 
			
		||||
							
								
								
									
										55
									
								
								config/pre-commit/config.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								config/pre-commit/config.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
# See https://pre-commit.com for more information
 | 
			
		||||
# See https://pre-commit.com/hooks.html for more hooks
 | 
			
		||||
repos:
 | 
			
		||||
- repo: https://github.com/pre-commit/pre-commit-hooks
 | 
			
		||||
  rev: v3.2.0
 | 
			
		||||
  hooks:
 | 
			
		||||
  - id: trailing-whitespace
 | 
			
		||||
  - id: end-of-file-fixer
 | 
			
		||||
  - id: check-merge-conflict
 | 
			
		||||
 | 
			
		||||
  # Quick syntax checkers
 | 
			
		||||
  - id: check-xml
 | 
			
		||||
  - id: check-yaml
 | 
			
		||||
  - id: check-toml
 | 
			
		||||
  - id: check-json
 | 
			
		||||
    exclude: "tsconfig\\.json$"
 | 
			
		||||
 | 
			
		||||
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
 | 
			
		||||
  rev: 2.3.5
 | 
			
		||||
  hooks:
 | 
			
		||||
  - id: editorconfig-checker
 | 
			
		||||
    args: ['-disable-indentation']
 | 
			
		||||
    exclude: "^(.*\\.(bat)|LICENSE)$"
 | 
			
		||||
 | 
			
		||||
- repo: local
 | 
			
		||||
  hooks:
 | 
			
		||||
  - id: checkstyle
 | 
			
		||||
    name: Check Java codestyle
 | 
			
		||||
    files: ".*\\.java$"
 | 
			
		||||
    language: system
 | 
			
		||||
    entry: ./gradlew checkstyleMain checkstyleTest
 | 
			
		||||
    pass_filenames: false
 | 
			
		||||
    require_serial: true
 | 
			
		||||
  - id: license
 | 
			
		||||
    name: Check Java license headers
 | 
			
		||||
    files: ".*\\.java$"
 | 
			
		||||
    language: system
 | 
			
		||||
    entry: ./gradlew licenseFormat
 | 
			
		||||
    pass_filenames: false
 | 
			
		||||
    require_serial: true
 | 
			
		||||
  - id: illuaminate
 | 
			
		||||
    name: Check Lua code
 | 
			
		||||
    files: ".*\\.(lua|java|md)"
 | 
			
		||||
    language: script
 | 
			
		||||
    entry: config/pre-commit/illuaminate-lint.sh
 | 
			
		||||
    pass_filenames: false
 | 
			
		||||
    require_serial: true
 | 
			
		||||
 | 
			
		||||
exclude: |
 | 
			
		||||
  (?x)^(
 | 
			
		||||
    src/generated|
 | 
			
		||||
    src/test/resources/test-rom/data/json-parsing/|
 | 
			
		||||
    src/test/server-files/|
 | 
			
		||||
    config/idea/
 | 
			
		||||
  )
 | 
			
		||||
							
								
								
									
										16
									
								
								config/pre-commit/illuaminate-lint.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								config/pre-commit/illuaminate-lint.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
test -d bin || mkdir bin
 | 
			
		||||
test -f bin/illuaminate || curl -s -obin/illuaminate https://squiddev.cc/illuaminate/linux-x86-64/illuaminate
 | 
			
		||||
chmod +x bin/illuaminate
 | 
			
		||||
 | 
			
		||||
if [ -n ${GITHUB_ACTIONS+x} ]; then
 | 
			
		||||
    # Register a problem matcher (see https://github.com/actions/toolkit/blob/master/docs/problem-matchers.md)
 | 
			
		||||
    # for illuaminate.
 | 
			
		||||
    echo "::add-matcher::.github/matchers/illuaminate.json"
 | 
			
		||||
    trap 'echo "::remove-matcher owner=illuaminate::"' EXIT
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
./gradlew luaJavadoc
 | 
			
		||||
bin/illuaminate lint
 | 
			
		||||
							
								
								
									
										21
									
								
								doc/events/alarm.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/alarm.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] alarm
 | 
			
		||||
see: os.setAlarm To start an alarm.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{timer} event is fired when an alarm started with @{os.setAlarm} completes.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The ID of the alarm that finished.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Starts a timer and then prints its ID:
 | 
			
		||||
```lua
 | 
			
		||||
local alarmID = os.setAlarm(os.time() + 0.05)
 | 
			
		||||
local event, id
 | 
			
		||||
repeat
 | 
			
		||||
    event, id = os.pullEvent("alarm")
 | 
			
		||||
until id == alarmID
 | 
			
		||||
print("Alarm with ID " .. id .. " was fired")
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										24
									
								
								doc/events/char.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								doc/events/char.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] char
 | 
			
		||||
see: key To listen to any key press.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{char} event is fired when a character is _typed_ on the keyboard.
 | 
			
		||||
 | 
			
		||||
The @{char} event is different to a key press. Sometimes multiple key presses may result in one character being
 | 
			
		||||
typed (for instance, on some European keyboards). Similarly, some keys (e.g. <kbd>Ctrl</kbd>) do not have any
 | 
			
		||||
corresponding character. The @{key} should be used if you want to listen to key presses themselves.
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The string representing the character that was pressed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints each character the user presses:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, character = os.pullEvent("char")
 | 
			
		||||
  print(character .. " was pressed.")
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										18
									
								
								doc/events/computer_command.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/events/computer_command.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] computer_command
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{computer_command} event is fired when the `/computercraft queue` command is run for the current computer.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
... @{string}: The arguments passed to the command.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints the contents of messages sent:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event = {os.pullEvent("computer_command")}
 | 
			
		||||
  print("Received message:", table.unpack(event, 2))
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										19
									
								
								doc/events/disk.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/disk.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] disk
 | 
			
		||||
see: disk_eject For the event sent when a disk is removed.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{disk} event is fired when a disk is inserted into an adjacent or networked disk drive.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The side of the disk drive that had a disk inserted.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a disk is inserted:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, side = os.pullEvent("disk")
 | 
			
		||||
  print("Inserted a disk on side " .. side)
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										19
									
								
								doc/events/disk_eject.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/disk_eject.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] disk_eject
 | 
			
		||||
see: disk For the event sent when a disk is inserted.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{disk_eject} event is fired when a disk is removed from an adjacent or networked disk drive.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The side of the disk drive that had a disk removed.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a disk is removed:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, side = os.pullEvent("disk_eject")
 | 
			
		||||
  print("Removed a disk on side " .. side)
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										14
									
								
								doc/events/http_check.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								doc/events/http_check.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] http_check
 | 
			
		||||
see: http.checkURLAsync To check a URL asynchronously.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{http_check} event is fired when a URL check finishes.
 | 
			
		||||
 | 
			
		||||
This event is normally handled inside @{http.checkURL}, but it can still be seen when using @{http.checkURLAsync}.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The URL requested to be checked.
 | 
			
		||||
3. @{boolean}: Whether the check succeeded.
 | 
			
		||||
4. @{string|nil}: If the check failed, a reason explaining why the check failed.
 | 
			
		||||
							
								
								
									
										39
									
								
								doc/events/http_failure.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								doc/events/http_failure.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] http_failure
 | 
			
		||||
see: http.request To send an HTTP request.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{http_failure} event is fired when an HTTP request fails.
 | 
			
		||||
 | 
			
		||||
This event is normally handled inside @{http.get} and @{http.post}, but it can still be seen when using @{http.request}.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The URL of the site requested.
 | 
			
		||||
3. @{string}: An error describing the failure.
 | 
			
		||||
4. @{http.Response|nil}: A response handle if the connection succeeded, but the server's response indicated failure.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints an error why the website cannot be contacted:
 | 
			
		||||
```lua
 | 
			
		||||
local myURL = "https://does.not.exist.tweaked.cc"
 | 
			
		||||
http.request(myURL)
 | 
			
		||||
local event, url, err
 | 
			
		||||
repeat
 | 
			
		||||
    event, url, err = os.pullEvent("http_failure")
 | 
			
		||||
until url == myURL
 | 
			
		||||
print("The URL " .. url .. " could not be reached: " .. err)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Prints the contents of a webpage that does not exist:
 | 
			
		||||
```lua
 | 
			
		||||
local myURL = "https://tweaked.cc/this/does/not/exist"
 | 
			
		||||
http.request(myURL)
 | 
			
		||||
local event, url, err, handle
 | 
			
		||||
repeat
 | 
			
		||||
    event, url, err, handle = os.pullEvent("http_failure")
 | 
			
		||||
until url == myURL
 | 
			
		||||
print("The URL " .. url .. " could not be reached: " .. err)
 | 
			
		||||
print(handle.getResponseCode())
 | 
			
		||||
handle.close()
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										27
									
								
								doc/events/http_success.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								doc/events/http_success.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] http_success
 | 
			
		||||
see: http.request To make an HTTP request.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{http_success} event is fired when an HTTP request returns successfully.
 | 
			
		||||
 | 
			
		||||
This event is normally handled inside @{http.get} and @{http.post}, but it can still be seen when using @{http.request}.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The URL of the site requested.
 | 
			
		||||
3. @{http.Response}: The handle for the response text.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints the content of a website (this may fail if the request fails):
 | 
			
		||||
```lua
 | 
			
		||||
local myURL = "https://tweaked.cc/"
 | 
			
		||||
http.request(myURL)
 | 
			
		||||
local event, url, handle
 | 
			
		||||
repeat
 | 
			
		||||
    event, url, handle = os.pullEvent("http_success")
 | 
			
		||||
until url == myURL
 | 
			
		||||
print("Contents of " .. url .. ":")
 | 
			
		||||
print(handle.readAll())
 | 
			
		||||
handle.close()
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										26
									
								
								doc/events/key.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								doc/events/key.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] key
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
This event is fired when any key is pressed while the terminal is focused.
 | 
			
		||||
 | 
			
		||||
This event returns a numerical "key code" (for instance, <kbd>F1</kbd> is 290). This value may vary between versions and
 | 
			
		||||
so it is recommended to use the constants in the @{keys} API rather than hard coding numeric values.
 | 
			
		||||
 | 
			
		||||
If the button pressed represented a printable character, then the @{key} event will be followed immediately by a @{char}
 | 
			
		||||
event. If you are consuming text input, use a @{char} event instead!
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The numerical key value of the key pressed.
 | 
			
		||||
3. @{boolean}: Whether the key event was generated while holding the key (@{true}), rather than pressing it the first time (@{false}).
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints each key when the user presses it, and if the key is being held.
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, key, is_held = os.pullEvent("key")
 | 
			
		||||
  print(("%s held=%s"):format(keys.getName(key), is_held))
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										24
									
								
								doc/events/key_up.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								doc/events/key_up.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] key_up
 | 
			
		||||
see: keys For a lookup table of the given keys.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
Fired whenever a key is released (or the terminal is closed while a key was being pressed).
 | 
			
		||||
 | 
			
		||||
This event returns a numerical "key code" (for instance, <kbd>F1</kbd> is 290). This value may vary between versions and
 | 
			
		||||
so it is recommended to use the constants in the @{keys} API rather than hard coding numeric values.
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The numerical key value of the key pressed.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints each key released on the keyboard whenever a @{key_up} event is fired.
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, key = os.pullEvent("key_up")
 | 
			
		||||
  local name = keys.getName(key) or "unknown key"
 | 
			
		||||
  print(name .. " was released.")
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										22
									
								
								doc/events/modem_message.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								doc/events/modem_message.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] modem_message
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{modem_message} event is fired when a message is received on an open channel on any modem.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The side of the modem that received the message.
 | 
			
		||||
3. @{number}: The channel that the message was sent on.
 | 
			
		||||
4. @{number}: The reply channel set by the sender.
 | 
			
		||||
5. @{any}: The message as sent by the sender.
 | 
			
		||||
6. @{number}: The distance between the sender and the receiver, in blocks (decimal).
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when one is sent:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message")
 | 
			
		||||
  print(("Message received on side %s on channel %d (reply to %d) from %f blocks away with message %s"):format(side, channel, replyChannel, distance, tostring(message)))
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										18
									
								
								doc/events/monitor_resize.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/events/monitor_resize.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] monitor_resize
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{monitor_resize} event is fired when an adjacent or networked monitor's size is changed.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The side or network ID of the monitor that resized.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a monitor is resized:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, side = os.pullEvent("monitor_resize")
 | 
			
		||||
  print("The monitor on side " .. side .. " was resized.")
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										20
									
								
								doc/events/monitor_touch.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								doc/events/monitor_touch.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] monitor_touch
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{monitor_touch} event is fired when an adjacent or networked Advanced Monitor is right-clicked.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The side or network ID of the monitor that was touched.
 | 
			
		||||
3. @{number}: The X coordinate of the touch, in characters.
 | 
			
		||||
4. @{number}: The Y coordinate of the touch, in characters.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a monitor is touched:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, side, x, y = os.pullEvent("monitor_touch")
 | 
			
		||||
  print("The monitor on side " .. side .. " was touched at (" .. x .. ", " .. y .. ")")
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										34
									
								
								doc/events/mouse_click.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								doc/events/mouse_click.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] mouse_click
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
This event is fired when the terminal is clicked with a mouse. This event is only fired on advanced computers (including
 | 
			
		||||
advanced turtles and pocket computers).
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The mouse button that was clicked.
 | 
			
		||||
3. @{number}: The X-coordinate of the click.
 | 
			
		||||
4. @{number}: The Y-coordinate of the click.
 | 
			
		||||
 | 
			
		||||
## Mouse buttons
 | 
			
		||||
Several mouse events (@{mouse_click}, @{mouse_up}, @{mouse_scroll}) contain a "mouse button" code. This takes a
 | 
			
		||||
numerical value depending on which button on your mouse was last pressed when this event occurred.
 | 
			
		||||
 | 
			
		||||
<table class="pretty-table">
 | 
			
		||||
    <!-- Our markdown parser doesn't work on tables!? Guess I'll have to roll my own soonish :/. -->
 | 
			
		||||
    <tr><th>Button code</th><th>Mouse button</th></tr>
 | 
			
		||||
    <tr><td align="right">1</td><td>Left button</td></tr>
 | 
			
		||||
    <tr><td align="right">2</td><td>Middle button</td></tr>
 | 
			
		||||
    <tr><td align="right">3</td><td>Right button</td></tr>
 | 
			
		||||
</table>
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Print the button and the coordinates whenever the mouse is clicked.
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, button, x, y = os.pullEvent("mouse_click")
 | 
			
		||||
  print(("The mouse button %s was pressed at %d, %d"):format(button, x, y))
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										22
									
								
								doc/events/mouse_drag.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								doc/events/mouse_drag.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] mouse_drag
 | 
			
		||||
see: mouse_click For when a mouse button is initially pressed.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
This event is fired every time the mouse is moved while a mouse button is being held.
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The [mouse button](mouse_click.html#Mouse_buttons) that is being pressed.
 | 
			
		||||
3. @{number}: The X-coordinate of the mouse.
 | 
			
		||||
4. @{number}: The Y-coordinate of the mouse.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Print the button and the coordinates whenever the mouse is dragged.
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, button, x, y = os.pullEvent("mouse_drag")
 | 
			
		||||
  print(("The mouse button %s was dragged at %d, %d"):format(button, x, y))
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										21
									
								
								doc/events/mouse_scroll.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/mouse_scroll.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] mouse_scroll
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
This event is fired when a mouse wheel is scrolled in the terminal.
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The direction of the scroll. (-1 = up, 1 = down)
 | 
			
		||||
3. @{number}: The X-coordinate of the mouse when scrolling.
 | 
			
		||||
4. @{number}: The Y-coordinate of the mouse when scrolling.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints the direction of each scroll, and the position of the mouse at the time.
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, dir, x, y = os.pullEvent("mouse_scroll")
 | 
			
		||||
  print(("The mouse was scrolled in direction %s at %d, %d"):format(dir, x, y))
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										21
									
								
								doc/events/mouse_up.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/mouse_up.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] mouse_up
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
This event is fired when a mouse button is released or a held mouse leaves the computer's terminal.
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The [mouse button](mouse_click.html#Mouse_buttons) that was released.
 | 
			
		||||
3. @{number}: The X-coordinate of the mouse.
 | 
			
		||||
4. @{number}: The Y-coordinate of the mouse.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints the coordinates and button number whenever the mouse is released.
 | 
			
		||||
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, button, x, y = os.pullEvent("mouse_up")
 | 
			
		||||
  print(("The mouse button %s was released at %d, %d"):format(button, x, y))
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										18
									
								
								doc/events/paste.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/events/paste.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] paste
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{paste} event is fired when text is pasted into the computer through Ctrl-V (or ⌘V on Mac).
 | 
			
		||||
 | 
			
		||||
## Return values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string} The text that was pasted.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints pasted text:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, text = os.pullEvent("paste")
 | 
			
		||||
  print('"' .. text .. '" was pasted')
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										19
									
								
								doc/events/peripheral.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/peripheral.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] peripheral
 | 
			
		||||
see: peripheral_detach For the event fired when a peripheral is detached.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{peripheral} event is fired when a peripheral is attached on a side or to a modem.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The side the peripheral was attached to.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a peripheral is attached:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, side = os.pullEvent("peripheral")
 | 
			
		||||
  print("A peripheral was attached on side " .. side)
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										19
									
								
								doc/events/peripheral_detach.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/peripheral_detach.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] peripheral_detach
 | 
			
		||||
see: peripheral For the event fired when a peripheral is attached.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{peripheral_detach} event is fired when a peripheral is detached from a side or from a modem.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The side the peripheral was detached from.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a peripheral is detached:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, side = os.pullEvent("peripheral_detach")
 | 
			
		||||
  print("A peripheral was detached on side " .. side)
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										30
									
								
								doc/events/rednet_message.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								doc/events/rednet_message.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] rednet_message
 | 
			
		||||
see: modem_message For raw modem messages sent outside of Rednet.
 | 
			
		||||
see: rednet.receive To wait for a Rednet message with an optional timeout and protocol filter.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{rednet_message} event is fired when a message is sent over Rednet.
 | 
			
		||||
 | 
			
		||||
This event is usually handled by @{rednet.receive}, but it can also be pulled manually.
 | 
			
		||||
 | 
			
		||||
@{rednet_message} events are sent by @{rednet.run} in the top-level coroutine in response to @{modem_message} events. A @{rednet_message} event is always preceded by a @{modem_message} event. They are generated inside CraftOS rather than being sent by the ComputerCraft machine.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The ID of the sending computer.
 | 
			
		||||
3. @{any}: The message sent.
 | 
			
		||||
4. @{string|nil}: The protocol of the message, if provided.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when one is sent:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event, sender, message, protocol = os.pullEvent("rednet_message")
 | 
			
		||||
  if protocol ~= nil then
 | 
			
		||||
    print("Received message from " .. sender .. " with protocol " .. protocol .. " and message " .. tostring(message))
 | 
			
		||||
  else
 | 
			
		||||
    print("Received message from " .. sender .. " with message " .. tostring(message))
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										14
									
								
								doc/events/redstone.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								doc/events/redstone.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] redstone
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{redstone} event is fired whenever any redstone inputs on the computer change.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a redstone input changes:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  os.pullEvent("redstone")
 | 
			
		||||
  print("A redstone input has changed!")
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										28
									
								
								doc/events/task_complete.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								doc/events/task_complete.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] task_complete
 | 
			
		||||
see: commands.execAsync To run a command which fires a task_complete event.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{task_complete} event is fired when an asynchronous task completes. This is usually handled inside the function call that queued the task; however, functions such as @{commands.execAsync} return immediately so the user can wait for completion.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The ID of the task that completed.
 | 
			
		||||
3. @{boolean}: Whether the command succeeded.
 | 
			
		||||
4. @{string}: If the command failed, an error message explaining the failure. (This is not present if the command succeeded.)
 | 
			
		||||
...: Any parameters returned from the command.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints the results of an asynchronous command:
 | 
			
		||||
```lua
 | 
			
		||||
local taskID = commands.execAsync("say Hello")
 | 
			
		||||
local event
 | 
			
		||||
repeat
 | 
			
		||||
    event = {os.pullEvent("task_complete")}
 | 
			
		||||
until event[2] == taskID
 | 
			
		||||
if event[3] == true then
 | 
			
		||||
  print("Task " .. event[2] .. " succeeded:", table.unpack(event, 4))
 | 
			
		||||
else
 | 
			
		||||
  print("Task " .. event[2] .. " failed: " .. event[4])
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										15
									
								
								doc/events/term_resize.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								doc/events/term_resize.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] term_resize
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{term_resize} event is fired when the main terminal is resized, mainly when a new tab is opened or closed in @{multishell}.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints :
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  os.pullEvent("term_resize")
 | 
			
		||||
  local w, h = term.getSize()
 | 
			
		||||
  print("The term was resized to (" .. w .. ", " .. h .. ")")
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										25
									
								
								doc/events/terminate.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								doc/events/terminate.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] terminate
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{terminate} event is fired when <kbd>Ctrl-T</kbd> is held down.
 | 
			
		||||
 | 
			
		||||
This event is normally handled by @{os.pullEvent}, and will not be returned. However, @{os.pullEventRaw} will return this event when fired.
 | 
			
		||||
 | 
			
		||||
@{terminate} will be sent even when a filter is provided to @{os.pullEventRaw}. When using @{os.pullEventRaw} with a filter, make sure to check that the event is not @{terminate}.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when Ctrl-T is held:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  local event = os.pullEventRaw("terminate")
 | 
			
		||||
  if event == "terminate" then print("Terminate requested!") end
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Exits when Ctrl-T is held:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  os.pullEvent()
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										21
									
								
								doc/events/timer.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/timer.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] timer
 | 
			
		||||
see: os.startTimer To start a timer.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{timer} event is fired when a timer started with @{os.startTimer} completes.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{number}: The ID of the timer that finished.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Starts a timer and then prints its ID:
 | 
			
		||||
```lua
 | 
			
		||||
local timerID = os.startTimer(2)
 | 
			
		||||
local event, id
 | 
			
		||||
repeat
 | 
			
		||||
    event, id = os.pullEvent("timer")
 | 
			
		||||
until id == timerID
 | 
			
		||||
print("Timer with ID " .. id .. " was fired")
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										14
									
								
								doc/events/turtle_inventory.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								doc/events/turtle_inventory.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] turtle_inventory
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{turtle_inventory} event is fired when a turtle's inventory is changed.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when the inventory is changed:
 | 
			
		||||
```lua
 | 
			
		||||
while true do
 | 
			
		||||
  os.pullEvent("turtle_inventory")
 | 
			
		||||
  print("The inventory was changed.")
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										21
									
								
								doc/events/websocket_closed.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/websocket_closed.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] websocket_closed
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{websocket_closed} event is fired when an open WebSocket connection is closed.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The URL of the WebSocket that was closed.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message when a WebSocket is closed (this may take a minute):
 | 
			
		||||
```lua
 | 
			
		||||
local myURL = "wss://example.tweaked.cc/echo"
 | 
			
		||||
local ws = http.websocket(myURL)
 | 
			
		||||
local event, url
 | 
			
		||||
repeat
 | 
			
		||||
    event, url = os.pullEvent("websocket_closed")
 | 
			
		||||
until url == myURL
 | 
			
		||||
print("The WebSocket at " .. url .. " was closed.")
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										25
									
								
								doc/events/websocket_failure.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								doc/events/websocket_failure.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] websocket_failure
 | 
			
		||||
see: http.websocketAsync To send an HTTP request.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{websocket_failure} event is fired when a WebSocket connection request fails.
 | 
			
		||||
 | 
			
		||||
This event is normally handled inside @{http.websocket}, but it can still be seen when using @{http.websocketAsync}.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The URL of the site requested.
 | 
			
		||||
3. @{string}: An error describing the failure.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints an error why the website cannot be contacted:
 | 
			
		||||
```lua
 | 
			
		||||
local myURL = "wss://example.tweaked.cc/not-a-websocket"
 | 
			
		||||
http.websocketAsync(myURL)
 | 
			
		||||
local event, url, err
 | 
			
		||||
repeat
 | 
			
		||||
    event, url, err = os.pullEvent("websocket_failure")
 | 
			
		||||
until url == myURL
 | 
			
		||||
print("The URL " .. url .. " could not be reached: " .. err)
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										26
									
								
								doc/events/websocket_message.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								doc/events/websocket_message.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] websocket_message
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{websocket_message} event is fired when a message is received on an open WebSocket connection.
 | 
			
		||||
 | 
			
		||||
This event is normally handled by @{http.Websocket.receive}, but it can also be pulled manually.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The URL of the WebSocket.
 | 
			
		||||
3. @{string}: The contents of the message.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints a message sent by a WebSocket:
 | 
			
		||||
```lua
 | 
			
		||||
local myURL = "wss://example.tweaked.cc/echo"
 | 
			
		||||
local ws = http.websocket(myURL)
 | 
			
		||||
ws.send("Hello!")
 | 
			
		||||
local event, url, message
 | 
			
		||||
repeat
 | 
			
		||||
    event, url, message = os.pullEvent("websocket_message")
 | 
			
		||||
until url == myURL
 | 
			
		||||
print("Received message from " .. url .. " with contents " .. message)
 | 
			
		||||
ws.close()
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										28
									
								
								doc/events/websocket_success.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								doc/events/websocket_success.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] websocket_success
 | 
			
		||||
see: http.websocketAsync To open a WebSocket asynchronously.
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{websocket_success} event is fired when a WebSocket connection request returns successfully.
 | 
			
		||||
 | 
			
		||||
This event is normally handled inside @{http.websocket}, but it can still be seen when using @{http.websocketAsync}.
 | 
			
		||||
 | 
			
		||||
## Return Values
 | 
			
		||||
1. @{string}: The event name.
 | 
			
		||||
2. @{string}: The URL of the site.
 | 
			
		||||
3. @{http.Websocket}: The handle for the WebSocket.
 | 
			
		||||
 | 
			
		||||
## Example
 | 
			
		||||
Prints the content of a website (this may fail if the request fails):
 | 
			
		||||
```lua
 | 
			
		||||
local myURL = "wss://example.tweaked.cc/echo"
 | 
			
		||||
http.websocketAsync(myURL)
 | 
			
		||||
local event, url, handle
 | 
			
		||||
repeat
 | 
			
		||||
    event, url, handle = os.pullEvent("websocket_success")
 | 
			
		||||
until url == myURL
 | 
			
		||||
print("Connected to " .. url)
 | 
			
		||||
handle.send("Hello!")
 | 
			
		||||
print(handle.receive())
 | 
			
		||||
handle.close()
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										1
									
								
								doc/head.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/head.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
<meta name="theme-color" content="#c8d87c">
 | 
			
		||||
							
								
								
									
										11
									
								
								doc/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								doc/index.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
#  [](https://minecraft.curseforge.com/projects/cc-tweaked "Download CC: Tweaked on CurseForge")
 | 
			
		||||
 | 
			
		||||
CC: Tweaked is a fork of [ComputerCraft], adding programmable computers, turtles and more to Minecraft.
 | 
			
		||||
 | 
			
		||||
This website contains documentation for all Lua libraries and APIs from the latest version of CC: Tweaked. This
 | 
			
		||||
documentation is still in development, so will most likely be incomplete. If you've found something you think is wrong,
 | 
			
		||||
or would like to help out [please get in touch on GitHub][gh].
 | 
			
		||||
 | 
			
		||||
[bug]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose
 | 
			
		||||
[computercraft]: https://github.com/dan200/ComputerCraft "ComputerCraft on GitHub"
 | 
			
		||||
[gh]: https://github.com/SquidDev-CC/CC-Tweaked "CC:Tweaked on GitHub"
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB  | 
							
								
								
									
										34
									
								
								doc/stub/fs.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								doc/stub/fs.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
---  The FS API allows you to manipulate files and the filesystem.
 | 
			
		||||
--
 | 
			
		||||
-- @module fs
 | 
			
		||||
 | 
			
		||||
--- Returns true if a path is mounted to the parent filesystem.
 | 
			
		||||
--
 | 
			
		||||
-- The root filesystem "/" is considered a mount, along with disk folders and
 | 
			
		||||
-- the rom folder. Other programs (such as network shares) can exstend this to
 | 
			
		||||
-- make other mount types by correctly assigning their return value for getDrive.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string path The path to check.
 | 
			
		||||
-- @treturn boolean If the path is mounted, rather than a normal file/folder.
 | 
			
		||||
-- @throws If the path does not exist.
 | 
			
		||||
-- @see getDrive
 | 
			
		||||
function isDriveRoot(path) end
 | 
			
		||||
 | 
			
		||||
--[[- Provides completion for a file or directory name, suitable for use with
 | 
			
		||||
@{_G.read}.
 | 
			
		||||
 | 
			
		||||
When a directory is a possible candidate for completion, two entries are
 | 
			
		||||
included - one with a trailing slash (indicating that entries within this
 | 
			
		||||
directory exist) and one without it (meaning this entry is an immediate
 | 
			
		||||
completion candidate). `include_dirs` can be set to @{false} to only include
 | 
			
		||||
those with a trailing slash.
 | 
			
		||||
 | 
			
		||||
@tparam string path The path to complete.
 | 
			
		||||
@tparam string location The location where paths are resolved from.
 | 
			
		||||
@tparam[opt] boolean include_files When @{false}, only directories will be
 | 
			
		||||
included in the returned list.
 | 
			
		||||
@tparam[opt] boolean include_dirs When @{false}, "raw" directories will not be
 | 
			
		||||
included in the returned list.
 | 
			
		||||
@treturn { string... } A list of possible completion candidates.
 | 
			
		||||
]]
 | 
			
		||||
function complete(path, location, include_files, include_dirs) end
 | 
			
		||||
							
								
								
									
										125
									
								
								doc/stub/global.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								doc/stub/global.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,125 @@
 | 
			
		||||
--[[-
 | 
			
		||||
Functions in the global environment, defined in `bios.lua`. This does not
 | 
			
		||||
include standard Lua functions.
 | 
			
		||||
 | 
			
		||||
@module _G
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
--[[- Pauses execution for the specified number of seconds.
 | 
			
		||||
 | 
			
		||||
As it waits for a fixed amount of world ticks, `time` will automatically be
 | 
			
		||||
rounded up to the nearest multiple of 0.05 seconds. If you are using coroutines
 | 
			
		||||
or the @{parallel|parallel API}, it will only pause execution of the current
 | 
			
		||||
thread, not the whole program.
 | 
			
		||||
 | 
			
		||||
**Note** Because sleep internally uses timers, it is a function that yields.
 | 
			
		||||
This means that you can use it to prevent "Too long without yielding" errors,
 | 
			
		||||
however, as the minimum sleep time is 0.05 seconds, it will slow your program
 | 
			
		||||
down.
 | 
			
		||||
 | 
			
		||||
**Warning** Internally, this function queues and waits for a timer event (using
 | 
			
		||||
@{os.startTimer}), however it does not listen for any other events. This means
 | 
			
		||||
that any event that occurs while sleeping will be entirely discarded. If you
 | 
			
		||||
need to receive events while sleeping, consider using @{os.startTimer|timers},
 | 
			
		||||
or the @{parallel|parallel API}.
 | 
			
		||||
 | 
			
		||||
@tparam number time The number of seconds to sleep for, rounded up to the
 | 
			
		||||
nearest multiple of 0.05.
 | 
			
		||||
 | 
			
		||||
@see os.startTimer
 | 
			
		||||
@usage Sleep for three seconds.
 | 
			
		||||
 | 
			
		||||
    print("Sleeping for three seconds")
 | 
			
		||||
    sleep(3)
 | 
			
		||||
    print("Done!")
 | 
			
		||||
]]
 | 
			
		||||
function sleep(time) end
 | 
			
		||||
 | 
			
		||||
--- Writes a line of text to the screen without a newline at the end, wrapping
 | 
			
		||||
-- text if necessary.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string text The text to write to the string
 | 
			
		||||
-- @treturn number The number of lines written
 | 
			
		||||
-- @see print A wrapper around write that adds a newline and accepts multiple arguments
 | 
			
		||||
-- @usage write("Hello, world")
 | 
			
		||||
function write(text) end
 | 
			
		||||
 | 
			
		||||
--- Prints the specified values to the screen separated by spaces, wrapping if
 | 
			
		||||
-- necessary. After printing, the cursor is moved to the next line.
 | 
			
		||||
--
 | 
			
		||||
-- @param ... The values to print on the screen
 | 
			
		||||
-- @treturn number The number of lines written
 | 
			
		||||
-- @usage print("Hello, world!")
 | 
			
		||||
function print(...) end
 | 
			
		||||
 | 
			
		||||
--- Prints the specified values to the screen in red, separated by spaces,
 | 
			
		||||
-- wrapping if necessary. After printing, the cursor is moved to the next line.
 | 
			
		||||
--
 | 
			
		||||
-- @param ... The values to print on the screen
 | 
			
		||||
-- @usage printError("Something went wrong!")
 | 
			
		||||
function printError(...) end
 | 
			
		||||
 | 
			
		||||
--[[- Reads user input from the terminal, automatically handling arrow keys,
 | 
			
		||||
pasting, character replacement, history scrollback, auto-completion, and
 | 
			
		||||
default values.
 | 
			
		||||
 | 
			
		||||
@tparam[opt] string replaceChar A character to replace each typed character with.
 | 
			
		||||
This can be used for hiding passwords, for example.
 | 
			
		||||
@tparam[opt] table history A table holding history items that can be scrolled
 | 
			
		||||
back to with the up/down arrow keys. The oldest item is at index 1, while the
 | 
			
		||||
newest item is at the highest index.
 | 
			
		||||
@tparam[opt] function(partial: string):({ string... }|nil) completeFn A function
 | 
			
		||||
to be used for completion. This function should take the partial text typed so
 | 
			
		||||
far, and returns a list of possible completion options.
 | 
			
		||||
@tparam[opt] string default Default text which should already be entered into
 | 
			
		||||
the prompt.
 | 
			
		||||
 | 
			
		||||
@treturn string The text typed in.
 | 
			
		||||
 | 
			
		||||
@see cc.completion For functions to help with completion.
 | 
			
		||||
@usage Read an string and echo it back to the user
 | 
			
		||||
 | 
			
		||||
    write("> ")
 | 
			
		||||
    local msg = read()
 | 
			
		||||
    print(msg)
 | 
			
		||||
 | 
			
		||||
@usage Prompt a user for a password.
 | 
			
		||||
 | 
			
		||||
    while true do
 | 
			
		||||
      write("Password> ")
 | 
			
		||||
      local pwd = read("*")
 | 
			
		||||
      if pwd == "let me in" then break end
 | 
			
		||||
      print("Incorrect password, try again.")
 | 
			
		||||
    end
 | 
			
		||||
    print("Logged in!")
 | 
			
		||||
 | 
			
		||||
@usage A complete example with completion, history and a default value.
 | 
			
		||||
 | 
			
		||||
    local completion = require "cc.completion"
 | 
			
		||||
    local history = { "potato", "orange", "apple" }
 | 
			
		||||
    local choices = { "apple", "orange", "banana", "strawberry" }
 | 
			
		||||
    write("> ")
 | 
			
		||||
    local msg = read(nil, history, function(text) return completion.choice(text, choices) end, "app")
 | 
			
		||||
    print(msg)
 | 
			
		||||
]]
 | 
			
		||||
function read(replaceChar, history, completeFn, default) end
 | 
			
		||||
 | 
			
		||||
--- The ComputerCraft and Minecraft version of the current computer environment.
 | 
			
		||||
--
 | 
			
		||||
-- For example, `ComputerCraft 1.93.0 (Minecraft 1.15.2)`.
 | 
			
		||||
-- @usage _HOST
 | 
			
		||||
_HOST = _HOST
 | 
			
		||||
 | 
			
		||||
--[[- The default computer settings as defined in the ComputerCraft
 | 
			
		||||
configuration.
 | 
			
		||||
 | 
			
		||||
This is a comma-separated list of settings pairs defined by the mod
 | 
			
		||||
configuration or server owner. By default, it is empty.
 | 
			
		||||
 | 
			
		||||
An example value to disable autocompletion:
 | 
			
		||||
 | 
			
		||||
    shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false
 | 
			
		||||
 | 
			
		||||
@usage _CC_DEFAULT_SETTINGS
 | 
			
		||||
]]
 | 
			
		||||
_CC_DEFAULT_SETTINGS = _CC_DEFAULT_SETTINGS
 | 
			
		||||
							
								
								
									
										157
									
								
								doc/stub/http.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								doc/stub/http.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,157 @@
 | 
			
		||||
--- The http library allows communicating with web servers, sending and
 | 
			
		||||
-- receiving data from them.
 | 
			
		||||
--
 | 
			
		||||
-- @module http
 | 
			
		||||
 | 
			
		||||
--- Asynchronously make a HTTP request to the given url.
 | 
			
		||||
--
 | 
			
		||||
-- This returns immediately, a [`http_success`](#http-success-event) or
 | 
			
		||||
-- [`http_failure`](#http-failure-event) will be queued once the request has
 | 
			
		||||
-- completed.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam      string url   The url to request
 | 
			
		||||
-- @tparam[opt] string body  An optional string containing the body of the
 | 
			
		||||
-- request. If specified, a `POST` request will be made instead.
 | 
			
		||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
 | 
			
		||||
-- of this request.
 | 
			
		||||
-- @tparam[opt] boolean binary Whether to make a binary HTTP request. If true,
 | 
			
		||||
-- the body will not be UTF-8 encoded, and the received response will not be
 | 
			
		||||
-- decoded.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam[2] {
 | 
			
		||||
--   url = string, body? = string, headers? = { [string] = string },
 | 
			
		||||
--   binary? = boolean, method? = string, redirect? = boolean,
 | 
			
		||||
-- } request Options for the request.
 | 
			
		||||
--
 | 
			
		||||
-- This table form is an expanded version of the previous syntax. All arguments
 | 
			
		||||
-- from above are passed in as fields instead (for instance,
 | 
			
		||||
-- `http.request("https://example.com")` becomes `http.request { url =
 | 
			
		||||
-- "https://example.com" }`).
 | 
			
		||||
--
 | 
			
		||||
-- This table also accepts several additional options:
 | 
			
		||||
--
 | 
			
		||||
--  - `method`: Which HTTP method to use, for instance `"PATCH"` or `"DELETE"`.
 | 
			
		||||
--  - `redirect`: Whether to follow HTTP redirects. Defaults to true.
 | 
			
		||||
--
 | 
			
		||||
-- @see http.get  For a synchronous way to make GET requests.
 | 
			
		||||
-- @see http.post For a synchronous way to make POST requests.
 | 
			
		||||
function request(...) end
 | 
			
		||||
 | 
			
		||||
--- Make a HTTP GET request to the given url.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string url   The url to request
 | 
			
		||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
 | 
			
		||||
-- of this request.
 | 
			
		||||
-- @tparam[opt] boolean binary Whether to make a binary HTTP request. If true,
 | 
			
		||||
-- the body will not be UTF-8 encoded, and the received response will not be
 | 
			
		||||
-- decoded.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam[2] {
 | 
			
		||||
--   url = string, headers? = { [string] = string },
 | 
			
		||||
--   binary? = boolean, method? = string, redirect? = boolean,
 | 
			
		||||
-- } request Options for the request. See @{http.request} for details on how
 | 
			
		||||
-- these options behave.
 | 
			
		||||
--
 | 
			
		||||
-- @treturn Response The resulting http response, which can be read from.
 | 
			
		||||
-- @treturn[2] nil When the http request failed, such as in the event of a 404
 | 
			
		||||
-- error or connection timeout.
 | 
			
		||||
-- @treturn string A message detailing why the request failed.
 | 
			
		||||
-- @treturn Response|nil The failing http response, if available.
 | 
			
		||||
--
 | 
			
		||||
-- @usage Make a request to [example.tweaked.cc](https://example.tweaked.cc),
 | 
			
		||||
-- and print the returned page.
 | 
			
		||||
-- ```lua
 | 
			
		||||
-- local request = http.get("https://example.tweaked.cc")
 | 
			
		||||
-- print(request.readAll())
 | 
			
		||||
-- -- => HTTP is working!
 | 
			
		||||
-- request.close()
 | 
			
		||||
-- ```
 | 
			
		||||
function get(...) end
 | 
			
		||||
 | 
			
		||||
--- Make a HTTP POST request to the given url.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string url   The url to request
 | 
			
		||||
-- @tparam string body  The body of the POST request.
 | 
			
		||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
 | 
			
		||||
-- of this request.
 | 
			
		||||
-- @tparam[opt] boolean binary Whether to make a binary HTTP request. If true,
 | 
			
		||||
-- the body will not be UTF-8 encoded, and the received response will not be
 | 
			
		||||
-- decoded.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam[2] {
 | 
			
		||||
--   url = string, body? = string, headers? = { [string] = string },
 | 
			
		||||
--   binary? = boolean, method? = string, redirect? = boolean,
 | 
			
		||||
-- } request Options for the request. See @{http.request} for details on how
 | 
			
		||||
-- these options behave.
 | 
			
		||||
--
 | 
			
		||||
-- @treturn Response The resulting http response, which can be read from.
 | 
			
		||||
-- @treturn[2] nil When the http request failed, such as in the event of a 404
 | 
			
		||||
-- error or connection timeout.
 | 
			
		||||
-- @treturn string A message detailing why the request failed.
 | 
			
		||||
-- @treturn Response|nil The failing http response, if available.
 | 
			
		||||
function post(...) end
 | 
			
		||||
 | 
			
		||||
--- Asynchronously determine whether a URL can be requested.
 | 
			
		||||
--
 | 
			
		||||
-- If this returns `true`, one should also listen for [`http_check`
 | 
			
		||||
-- events](#http-check-event) which will container further information about
 | 
			
		||||
-- whether the URL is allowed or not.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string url The URL to check.
 | 
			
		||||
-- @treturn true When this url is not invalid. This does not imply that it is
 | 
			
		||||
-- allowed - see the comment above.
 | 
			
		||||
-- @treturn[2] false When this url is invalid.
 | 
			
		||||
-- @treturn string A reason why this URL is not valid (for instance, if it is
 | 
			
		||||
-- malformed, or blocked).
 | 
			
		||||
--
 | 
			
		||||
-- @see http.checkURL For a synchronous version.
 | 
			
		||||
function checkURLAsync(url) end
 | 
			
		||||
 | 
			
		||||
--- Determine whether a URL can be requested.
 | 
			
		||||
--
 | 
			
		||||
-- If this returns `true`, one should also listen for [`http_check`
 | 
			
		||||
-- events](#http-check-event) which will container further information about
 | 
			
		||||
-- whether the URL is allowed or not.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string url The URL to check.
 | 
			
		||||
-- @treturn true When this url is valid and can be requested via @{http.request}.
 | 
			
		||||
-- @treturn[2] false When this url is invalid.
 | 
			
		||||
-- @treturn string A reason why this URL is not valid (for instance, if it is
 | 
			
		||||
-- malformed, or blocked).
 | 
			
		||||
--
 | 
			
		||||
-- @see http.checkURLAsync For an asynchronous version.
 | 
			
		||||
--
 | 
			
		||||
-- @usage
 | 
			
		||||
-- ```lua
 | 
			
		||||
-- print(http.checkURL("https://example.tweaked.cc/"))
 | 
			
		||||
-- -- => true
 | 
			
		||||
-- print(http.checkURL("http://localhost/"))
 | 
			
		||||
-- -- => false Domain not permitted
 | 
			
		||||
-- print(http.checkURL("not a url"))
 | 
			
		||||
-- -- => false URL malformed
 | 
			
		||||
-- ```
 | 
			
		||||
function checkURL(url) end
 | 
			
		||||
 | 
			
		||||
--- Open a websocket.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string url The websocket url to connect to. This should have the
 | 
			
		||||
-- `ws://` or `wss://` protocol.
 | 
			
		||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
 | 
			
		||||
-- of the initial websocket connection.
 | 
			
		||||
--
 | 
			
		||||
-- @treturn Websocket The websocket connection.
 | 
			
		||||
-- @treturn[2] false If the websocket connection failed.
 | 
			
		||||
-- @treturn string An error message describing why the connection failed.
 | 
			
		||||
function websocket(url, headers) end
 | 
			
		||||
 | 
			
		||||
--- Asynchronously open a websocket.
 | 
			
		||||
--
 | 
			
		||||
-- This returns immediately, a [`websocket_success`](#websocket-success-event)
 | 
			
		||||
-- or [`websocket_failure`](#websocket-failure-event) will be queued once the
 | 
			
		||||
-- request has completed.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string url The websocket url to connect to. This should have the
 | 
			
		||||
-- `ws://` or `wss://` protocol.
 | 
			
		||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
 | 
			
		||||
-- of the initial websocket connection.
 | 
			
		||||
function websocketAsync(url, headers) end
 | 
			
		||||
							
								
								
									
										125
									
								
								doc/stub/os.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								doc/stub/os.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,125 @@
 | 
			
		||||
-- Defined in bios.lua
 | 
			
		||||
 | 
			
		||||
--[[- Loads the given API into the global environment.
 | 
			
		||||
 | 
			
		||||
**Warning** This function is deprecated. Use of this function will pollute the
 | 
			
		||||
global table, use @{require} instead.
 | 
			
		||||
 | 
			
		||||
This function loads and executes the file at the given path, and all global
 | 
			
		||||
variables and functions exported by it will by available through the use of
 | 
			
		||||
`myAPI.<function name>`, where `myAPI` is the base name of the API file.
 | 
			
		||||
 | 
			
		||||
@tparam string path The path of the API to load.
 | 
			
		||||
@treturn boolean Whether or not the API was successfully loaded.
 | 
			
		||||
 | 
			
		||||
@deprecated Use @{require}.
 | 
			
		||||
]]
 | 
			
		||||
function loadAPI(path) end
 | 
			
		||||
 | 
			
		||||
--- Unloads an API which was loaded by @{os.loadAPI}.
 | 
			
		||||
--
 | 
			
		||||
-- This effectively removes the specified table from `_G`.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam string name The name of the API to unload.
 | 
			
		||||
-- @deprecated Use @{require}.
 | 
			
		||||
function unloadAPI(name) end
 | 
			
		||||
 | 
			
		||||
--[[- Pause execution of the current thread and waits for any events matching
 | 
			
		||||
`filter`.
 | 
			
		||||
 | 
			
		||||
This function @{coroutine.yield|yields} the current process and waits for it
 | 
			
		||||
to be resumed with a vararg list where the first element matches `filter`.
 | 
			
		||||
If no `filter` is supplied, this will match all events.
 | 
			
		||||
 | 
			
		||||
Unlike @{os.pullEventRaw}, it will stop the application upon a "terminate"
 | 
			
		||||
event, printing the error "Terminated".
 | 
			
		||||
 | 
			
		||||
@tparam[opt] string filter Event to filter for.
 | 
			
		||||
@treturn string event The name of the event that fired.
 | 
			
		||||
@treturn any param... Optional additional parameters of the event.
 | 
			
		||||
@usage Listen for `mouse_click` events.
 | 
			
		||||
 | 
			
		||||
    while true do
 | 
			
		||||
        local event, button, x, y = os.pullEvent("mouse_click")
 | 
			
		||||
        print("Button", button, "was clicked at", x, ",", y)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@usage Listen for multiple events.
 | 
			
		||||
 | 
			
		||||
    while true do
 | 
			
		||||
        local eventData = {os.pullEvent()}
 | 
			
		||||
        local event = eventData[1]
 | 
			
		||||
 | 
			
		||||
        if event == "mouse_click" then
 | 
			
		||||
            print("Button", eventData[2], "was clicked at", eventData[3], ",", eventData[4])
 | 
			
		||||
        elseif event == "key" then
 | 
			
		||||
            print("Key code", eventData[2], "was pressed")
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@see os.pullEventRaw To pull the terminate event.
 | 
			
		||||
]]
 | 
			
		||||
function pullEvent(filter) end
 | 
			
		||||
 | 
			
		||||
--[[- Pause execution of the current thread and waits for events, including the
 | 
			
		||||
`terminate` event.
 | 
			
		||||
 | 
			
		||||
This behaves almost the same as @{os.pullEvent}, except it allows you to handle
 | 
			
		||||
the `terminate` event yourself - the program will not stop execution when
 | 
			
		||||
<kbd>Ctrl+T</kbd> is pressed.
 | 
			
		||||
 | 
			
		||||
@tparam[opt] string filter Event to filter for.
 | 
			
		||||
@treturn string event The name of the event that fired.
 | 
			
		||||
@treturn any param... Optional additional parameters of the event.
 | 
			
		||||
@usage Listen for `terminate` events.
 | 
			
		||||
 | 
			
		||||
    while true do
 | 
			
		||||
        local event = os.pullEventRaw()
 | 
			
		||||
        if event == "terminate" then
 | 
			
		||||
            print("Caught terminate event!")
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
@see os.pullEvent To pull events normally.
 | 
			
		||||
]]
 | 
			
		||||
function pullEventRaw(filter) end
 | 
			
		||||
 | 
			
		||||
--- Pauses execution for the specified number of seconds, alias of @{_G.sleep}.
 | 
			
		||||
--
 | 
			
		||||
-- @tparam number time The number of seconds to sleep for, rounded up to the
 | 
			
		||||
-- nearest multiple of 0.05.
 | 
			
		||||
function sleep(time) end
 | 
			
		||||
 | 
			
		||||
--- Get the current CraftOS version (for example, `CraftOS 1.8`).
 | 
			
		||||
--
 | 
			
		||||
-- This is defined by `bios.lua`. For the current version of CC:Tweaked, this
 | 
			
		||||
-- should return `CraftOS 1.8`.
 | 
			
		||||
--
 | 
			
		||||
-- @treturn string The current CraftOS version.
 | 
			
		||||
-- @usage os.version()
 | 
			
		||||
function version() end
 | 
			
		||||
 | 
			
		||||
--[[- Run the program at the given path with the specified environment and
 | 
			
		||||
arguments.
 | 
			
		||||
 | 
			
		||||
This function does not resolve program names like the shell does. This means
 | 
			
		||||
that, for example, `os.run("edit")` will not work. As well as this, it does not
 | 
			
		||||
provide access to the @{shell} API in the environment. For this behaviour, use
 | 
			
		||||
@{shell.run} instead.
 | 
			
		||||
 | 
			
		||||
If the program cannot be found, or failed to run, it will print the error and
 | 
			
		||||
return `false`. If you want to handle this more gracefully, use an alternative
 | 
			
		||||
such as @{loadfile}.
 | 
			
		||||
 | 
			
		||||
@tparam table env The environment to run the program with.
 | 
			
		||||
@tparam string path The exact path of the program to run.
 | 
			
		||||
@param ... The arguments to pass to the program.
 | 
			
		||||
@treturn boolean Whether or not the program ran successfully.
 | 
			
		||||
@usage Run the default shell from within your program:
 | 
			
		||||
 | 
			
		||||
    os.run({}, "/rom/programs/shell.lua")
 | 
			
		||||
 | 
			
		||||
@see shell.run
 | 
			
		||||
@see loadfile
 | 
			
		||||
]]
 | 
			
		||||
function run(env, path, ...) end
 | 
			
		||||
							
								
								
									
										13
									
								
								doc/stub/turtle.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								doc/stub/turtle.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
--[[- Craft a recipe based on the turtle's inventory.
 | 
			
		||||
 | 
			
		||||
The turtle's inventory should set up like a crafting grid. For instance, to
 | 
			
		||||
craft sticks, slots 1 and 5 should contain sticks. _All_ other slots should be
 | 
			
		||||
empty, including those outside the crafting "grid".
 | 
			
		||||
 | 
			
		||||
@tparam[opt=64] number limit The maximum number of crafting steps to run.
 | 
			
		||||
@throws When limit is less than 1 or greater than 64.
 | 
			
		||||
@treturn[1] true If crafting succeeds.
 | 
			
		||||
@treturn[2] false If crafting fails.
 | 
			
		||||
@treturn string A string describing why crafting failed.
 | 
			
		||||
]]
 | 
			
		||||
function craft(limit) end
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
# Mod properties
 | 
			
		||||
mod_version=1.83.0
 | 
			
		||||
mod_version=1.96.0
 | 
			
		||||
 | 
			
		||||
# Minecraft properties
 | 
			
		||||
mc_version=1.12.2
 | 
			
		||||
forge_version=14.23.4.2749
 | 
			
		||||
mappings_version=snapshot_20180724
 | 
			
		||||
# Minecraft properties (update mods.toml when changing)
 | 
			
		||||
mc_version=1.15.2
 | 
			
		||||
forge_version=31.1.41
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										53
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,21 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Copyright 2015 the original author or authors.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
##
 | 
			
		||||
##  Gradle start up script for UN*X
 | 
			
		||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
 | 
			
		||||
APP_BASE_NAME=`basename "$0"`
 | 
			
		||||
 | 
			
		||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 | 
			
		||||
DEFAULT_JVM_OPTS=""
 | 
			
		||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 | 
			
		||||
 | 
			
		||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
 | 
			
		||||
MAX_FD="maximum"
 | 
			
		||||
@@ -66,6 +82,7 @@ esac
 | 
			
		||||
 | 
			
		||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Determine the Java command to use to start the JVM.
 | 
			
		||||
if [ -n "$JAVA_HOME" ] ; then
 | 
			
		||||
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
 | 
			
		||||
@@ -109,10 +126,11 @@ if $darwin; then
 | 
			
		||||
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Cygwin, switch paths to Windows format before running java
 | 
			
		||||
if $cygwin ; then
 | 
			
		||||
# For Cygwin or MSYS, switch paths to Windows format before running java
 | 
			
		||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
 | 
			
		||||
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
 | 
			
		||||
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
 | 
			
		||||
 | 
			
		||||
    JAVACMD=`cygpath --unix "$JAVACMD"`
 | 
			
		||||
 | 
			
		||||
    # We build the pattern for arguments to be converted via cygpath
 | 
			
		||||
@@ -138,19 +156,19 @@ if $cygwin ; then
 | 
			
		||||
        else
 | 
			
		||||
            eval `echo args$i`="\"$arg\""
 | 
			
		||||
        fi
 | 
			
		||||
        i=$((i+1))
 | 
			
		||||
        i=`expr $i + 1`
 | 
			
		||||
    done
 | 
			
		||||
    case $i in
 | 
			
		||||
        (0) set -- ;;
 | 
			
		||||
        (1) set -- "$args0" ;;
 | 
			
		||||
        (2) set -- "$args0" "$args1" ;;
 | 
			
		||||
        (3) set -- "$args0" "$args1" "$args2" ;;
 | 
			
		||||
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
 | 
			
		||||
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
 | 
			
		||||
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
 | 
			
		||||
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
 | 
			
		||||
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
 | 
			
		||||
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
 | 
			
		||||
        0) set -- ;;
 | 
			
		||||
        1) set -- "$args0" ;;
 | 
			
		||||
        2) set -- "$args0" "$args1" ;;
 | 
			
		||||
        3) set -- "$args0" "$args1" "$args2" ;;
 | 
			
		||||
        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
 | 
			
		||||
        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
 | 
			
		||||
        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
 | 
			
		||||
        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
 | 
			
		||||
        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
 | 
			
		||||
        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
 | 
			
		||||
    esac
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
@@ -159,14 +177,9 @@ save () {
 | 
			
		||||
    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
 | 
			
		||||
    echo " "
 | 
			
		||||
}
 | 
			
		||||
APP_ARGS=$(save "$@")
 | 
			
		||||
APP_ARGS=`save "$@"`
 | 
			
		||||
 | 
			
		||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
 | 
			
		||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
 | 
			
		||||
 | 
			
		||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
 | 
			
		||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
 | 
			
		||||
  cd "$(dirname "$0")"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exec "$JAVACMD" "$@"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +1,19 @@
 | 
			
		||||
@rem
 | 
			
		||||
@rem Copyright 2015 the original author or authors.
 | 
			
		||||
@rem
 | 
			
		||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
@rem you may not use this file except in compliance with the License.
 | 
			
		||||
@rem You may obtain a copy of the License at
 | 
			
		||||
@rem
 | 
			
		||||
@rem      https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
@rem
 | 
			
		||||
@rem Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
@rem See the License for the specific language governing permissions and
 | 
			
		||||
@rem limitations under the License.
 | 
			
		||||
@rem
 | 
			
		||||
 | 
			
		||||
@if "%DEBUG%" == "" @echo off
 | 
			
		||||
@rem ##########################################################################
 | 
			
		||||
@rem
 | 
			
		||||
@@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
 | 
			
		||||
set APP_BASE_NAME=%~n0
 | 
			
		||||
set APP_HOME=%DIRNAME%
 | 
			
		||||
 | 
			
		||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
 | 
			
		||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
 | 
			
		||||
 | 
			
		||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 | 
			
		||||
set DEFAULT_JVM_OPTS=
 | 
			
		||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
 | 
			
		||||
 | 
			
		||||
@rem Find java.exe
 | 
			
		||||
if defined JAVA_HOME goto findJavaFromJavaHome
 | 
			
		||||
 | 
			
		||||
set JAVA_EXE=java.exe
 | 
			
		||||
%JAVA_EXE% -version >NUL 2>&1
 | 
			
		||||
if "%ERRORLEVEL%" == "0" goto init
 | 
			
		||||
if "%ERRORLEVEL%" == "0" goto execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
			
		||||
@@ -35,7 +54,7 @@ goto fail
 | 
			
		||||
set JAVA_HOME=%JAVA_HOME:"=%
 | 
			
		||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 | 
			
		||||
 | 
			
		||||
if exist "%JAVA_EXE%" goto init
 | 
			
		||||
if exist "%JAVA_EXE%" goto execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
 | 
			
		||||
@@ -45,28 +64,14 @@ echo location of your Java installation.
 | 
			
		||||
 | 
			
		||||
goto fail
 | 
			
		||||
 | 
			
		||||
:init
 | 
			
		||||
@rem Get command-line arguments, handling Windows variants
 | 
			
		||||
 | 
			
		||||
if not "%OS%" == "Windows_NT" goto win9xME_args
 | 
			
		||||
 | 
			
		||||
:win9xME_args
 | 
			
		||||
@rem Slurp the command line arguments.
 | 
			
		||||
set CMD_LINE_ARGS=
 | 
			
		||||
set _SKIP=2
 | 
			
		||||
 | 
			
		||||
:win9xME_args_slurp
 | 
			
		||||
if "x%~1" == "x" goto execute
 | 
			
		||||
 | 
			
		||||
set CMD_LINE_ARGS=%*
 | 
			
		||||
 | 
			
		||||
:execute
 | 
			
		||||
@rem Setup the command line
 | 
			
		||||
 | 
			
		||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@rem Execute Gradle
 | 
			
		||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
 | 
			
		||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
@rem End local scope for the variables with windows NT shell
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										112
									
								
								illuaminate.sexp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								illuaminate.sexp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,112 @@
 | 
			
		||||
; -*- mode: Lisp;-*-
 | 
			
		||||
 | 
			
		||||
(sources
 | 
			
		||||
  /doc/stub/
 | 
			
		||||
  /doc/events/
 | 
			
		||||
  /build/docs/luaJavadoc/
 | 
			
		||||
  /src/main/resources/*/computercraft/lua/bios.lua
 | 
			
		||||
  /src/main/resources/*/computercraft/lua/rom/
 | 
			
		||||
  /src/test/resources/test-rom
 | 
			
		||||
  /src/web/mount)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(doc
 | 
			
		||||
  (destination build/docs/lua)
 | 
			
		||||
  (index doc/index.md)
 | 
			
		||||
 | 
			
		||||
  (site
 | 
			
		||||
    (title "CC: Tweaked")
 | 
			
		||||
    (logo src/main/resources/pack.png)
 | 
			
		||||
    (url https://tweaked.cc/)
 | 
			
		||||
    (source-link https://github.com/SquidDev-CC/CC-Tweaked/blob/${commit}/${path}#L${line})
 | 
			
		||||
 | 
			
		||||
    (styles src/web/styles.css)
 | 
			
		||||
    (scripts build/rollup/index.js)
 | 
			
		||||
    (head doc/head.html))
 | 
			
		||||
 | 
			
		||||
  (module-kinds
 | 
			
		||||
    (peripheral Peripherals)
 | 
			
		||||
    (generic_peripheral "Generic Peripherals")
 | 
			
		||||
    (event Events))
 | 
			
		||||
 | 
			
		||||
  (library-path
 | 
			
		||||
    /doc/stub/
 | 
			
		||||
    /build/docs/luaJavadoc/
 | 
			
		||||
 | 
			
		||||
    /src/main/resources/*/computercraft/lua/rom/apis/
 | 
			
		||||
    /src/main/resources/*/computercraft/lua/rom/apis/command/
 | 
			
		||||
    /src/main/resources/*/computercraft/lua/rom/apis/turtle/
 | 
			
		||||
 | 
			
		||||
    /src/main/resources/*/computercraft/lua/rom/modules/main/
 | 
			
		||||
    /src/main/resources/*/computercraft/lua/rom/modules/command/
 | 
			
		||||
    /src/main/resources/*/computercraft/lua/rom/modules/turtle/))
 | 
			
		||||
 | 
			
		||||
(at /
 | 
			
		||||
  (linters
 | 
			
		||||
    syntax:string-index
 | 
			
		||||
 | 
			
		||||
    ;; It'd be nice to avoid this, but right now there's a lot of instances of
 | 
			
		||||
    ;; it.
 | 
			
		||||
    -var:set-loop
 | 
			
		||||
 | 
			
		||||
    ;; It's useful to name arguments for documentation, so we allow this. It'd
 | 
			
		||||
    ;; be good to find a compromise in the future, but this works for now.
 | 
			
		||||
    -var:unused-arg)
 | 
			
		||||
 | 
			
		||||
  (lint
 | 
			
		||||
    (bracket-spaces
 | 
			
		||||
      (call no-space)
 | 
			
		||||
      (function-args no-space)
 | 
			
		||||
      (parens no-space)
 | 
			
		||||
      (table space)
 | 
			
		||||
      (index no-space))
 | 
			
		||||
 | 
			
		||||
    ;; colours imports from colors, and we don't handle that right now.
 | 
			
		||||
    ;; keys is entirely dynamic, so we skip it.
 | 
			
		||||
    (dynamic-modules colours keys _G)
 | 
			
		||||
 | 
			
		||||
    (globals
 | 
			
		||||
      :max
 | 
			
		||||
      _CC_DEFAULT_SETTINGS
 | 
			
		||||
      _CC_DISABLE_LUA51_FEATURES
 | 
			
		||||
      ;; Ideally we'd pick these up from bios.lua, but illuaminate currently
 | 
			
		||||
      ;; isn't smart enough.
 | 
			
		||||
      sleep write printError read rs)))
 | 
			
		||||
 | 
			
		||||
;; We disable the unused global linter in bios.lua and the APIs. In the future
 | 
			
		||||
;; hopefully we'll get illuaminate to handle this.
 | 
			
		||||
(at
 | 
			
		||||
  (/src/main/resources/*/computercraft/lua/bios.lua
 | 
			
		||||
   /src/main/resources/*/computercraft/lua/rom/apis/)
 | 
			
		||||
  (linters -var:unused-global)
 | 
			
		||||
  (lint (allow-toplevel-global true)))
 | 
			
		||||
 | 
			
		||||
;; Silence some variable warnings in documentation stubs.
 | 
			
		||||
(at (/doc/stub/ /build/docs/luaJavadoc/)
 | 
			
		||||
  (linters -var:unused-global)
 | 
			
		||||
  (lint (allow-toplevel-global true)))
 | 
			
		||||
 | 
			
		||||
;; Suppress warnings for currently undocumented modules.
 | 
			
		||||
(at
 | 
			
		||||
  (; Lua APIs
 | 
			
		||||
   /src/main/resources/*/computercraft/lua/rom/apis/io.lua
 | 
			
		||||
   /src/main/resources/*/computercraft/lua/rom/apis/window.lua)
 | 
			
		||||
 | 
			
		||||
  (linters -doc:undocumented -doc:undocumented-arg -doc:undocumented-return))
 | 
			
		||||
 | 
			
		||||
;; Suppress warnings for various APIs using its own deprecated members.
 | 
			
		||||
(at
 | 
			
		||||
  (/src/main/resources/*/computercraft/lua/bios.lua
 | 
			
		||||
   /src/main/resources/*/computercraft/lua/rom/apis/turtle/turtle.lua)
 | 
			
		||||
  (linters -var:deprecated))
 | 
			
		||||
 | 
			
		||||
(at /src/test/resources/test-rom
 | 
			
		||||
  ; We should still be able to test deprecated members.
 | 
			
		||||
  (linters -var:deprecated)
 | 
			
		||||
 | 
			
		||||
  (lint
 | 
			
		||||
    (globals
 | 
			
		||||
      :max sleep write
 | 
			
		||||
      cct_test describe expect howlci fail it pending stub)))
 | 
			
		||||
 | 
			
		||||
(at /src/web/mount/expr_template.lua (lint (globals :max __expr__)))
 | 
			
		||||
							
								
								
									
										172
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,172 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "tweaked.cc",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "lockfileVersion": 1,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@rollup/plugin-typescript": {
 | 
			
		||||
      "version": "6.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-6.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-hJxaiE6WyNOsK+fZpbFh9CUijZYqPQuAOWO5khaGTUkM8DYNNyA2TDlgamecE+qLOG1G1+CwbWMAx3rbqpp6xQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@rollup/pluginutils": "^3.1.0",
 | 
			
		||||
        "resolve": "^1.17.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@rollup/pluginutils": {
 | 
			
		||||
      "version": "3.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@types/estree": "0.0.39",
 | 
			
		||||
        "estree-walker": "^1.0.1",
 | 
			
		||||
        "picomatch": "^2.2.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@types/estree": {
 | 
			
		||||
      "version": "0.0.39",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
 | 
			
		||||
      "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "buffer-from": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "commander": {
 | 
			
		||||
      "version": "2.20.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
 | 
			
		||||
      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "estree-walker": {
 | 
			
		||||
      "version": "1.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "fsevents": {
 | 
			
		||||
      "version": "2.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "optional": true
 | 
			
		||||
    },
 | 
			
		||||
    "function-bind": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "has": {
 | 
			
		||||
      "version": "1.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "function-bind": "^1.1.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "is-core-module": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "has": "^1.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "path-parse": {
 | 
			
		||||
      "version": "1.0.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
 | 
			
		||||
      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "picomatch": {
 | 
			
		||||
      "version": "2.2.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
 | 
			
		||||
      "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "preact": {
 | 
			
		||||
      "version": "10.5.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.5.tgz",
 | 
			
		||||
      "integrity": "sha512-5ONLNH1SXMzzbQoExZX4TELemNt+TEDb622xXFNfZngjjM9qtrzseJt+EfiUu4TZ6EJ95X5sE1ES4yqHFSIdhg=="
 | 
			
		||||
    },
 | 
			
		||||
    "requirejs": {
 | 
			
		||||
      "version": "2.3.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
 | 
			
		||||
      "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "resolve": {
 | 
			
		||||
      "version": "1.18.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
 | 
			
		||||
      "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "is-core-module": "^2.0.0",
 | 
			
		||||
        "path-parse": "^1.0.6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "rollup": {
 | 
			
		||||
      "version": "2.33.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz",
 | 
			
		||||
      "integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "fsevents": "~2.1.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "source-map": {
 | 
			
		||||
      "version": "0.7.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
 | 
			
		||||
      "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "source-map-support": {
 | 
			
		||||
      "version": "0.5.19",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
 | 
			
		||||
      "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "buffer-from": "^1.0.0",
 | 
			
		||||
        "source-map": "^0.6.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "source-map": {
 | 
			
		||||
          "version": "0.6.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
 | 
			
		||||
          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "terser": {
 | 
			
		||||
      "version": "5.3.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz",
 | 
			
		||||
      "integrity": "sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "commander": "^2.20.0",
 | 
			
		||||
        "source-map": "~0.7.2",
 | 
			
		||||
        "source-map-support": "~0.5.19"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "tslib": {
 | 
			
		||||
      "version": "2.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
 | 
			
		||||
    },
 | 
			
		||||
    "typescript": {
 | 
			
		||||
      "version": "4.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
 | 
			
		||||
      "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "tweaked.cc",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "description": "Website additions for tweaked.cc",
 | 
			
		||||
  "author": "SquidDev",
 | 
			
		||||
  "license": "BSD-3-Clause",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "preact": "^10.5.5",
 | 
			
		||||
    "tslib": "^2.0.3"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@rollup/plugin-typescript": "^6.1.0",
 | 
			
		||||
    "requirejs": "^2.3.6",
 | 
			
		||||
    "rollup": "^2.33.1",
 | 
			
		||||
    "terser": "^5.3.8",
 | 
			
		||||
    "typescript": "^4.0.5"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										55
									
								
								rollup.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								rollup.config.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
import { readFileSync, promises as fs } from "fs";
 | 
			
		||||
import path from "path";
 | 
			
		||||
 | 
			
		||||
import typescript from "@rollup/plugin-typescript";
 | 
			
		||||
 | 
			
		||||
const input = "src/web";
 | 
			
		||||
const requirejs = readFileSync("node_modules/requirejs/require.js");
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
    input: [`${input}/index.tsx`],
 | 
			
		||||
    output: {
 | 
			
		||||
        file: "build/rollup/index.js",
 | 
			
		||||
        // We bundle requirejs (and config) into the header. It's rather gross
 | 
			
		||||
        // but also works reasonably well.
 | 
			
		||||
        banner: `${requirejs}\nrequire.config({ paths: { copycat: "https://copy-cat.squiddev.cc" } });`,
 | 
			
		||||
        format: "amd",
 | 
			
		||||
        preferConst: true,
 | 
			
		||||
        amd: {
 | 
			
		||||
            define: "require",
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    context: "window",
 | 
			
		||||
    external: ["copycat/embed"],
 | 
			
		||||
 | 
			
		||||
    plugins: [
 | 
			
		||||
        typescript(),
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            name: "cc-tweaked",
 | 
			
		||||
            async options(options) {
 | 
			
		||||
                // Generate .d.ts files for all /mount files. This is the worst way to do it,
 | 
			
		||||
                // but we need to run before the TS pass.
 | 
			
		||||
                const template = "declare const contents : string;\nexport default contents;\n";
 | 
			
		||||
                const files = await fs.readdir(`${input}/mount`);
 | 
			
		||||
 | 
			
		||||
                await Promise.all(files
 | 
			
		||||
                    .filter(x => path.extname(x) !== ".ts")
 | 
			
		||||
                    .map(async file => {
 | 
			
		||||
                        const path = `${input}/mount/${file}.d.ts`;
 | 
			
		||||
                        const contents = await fs.readFile(path, { encoding: "utf-8" }).catch(() => "");
 | 
			
		||||
                        if (contents !== template) await fs.writeFile(path, template);
 | 
			
		||||
                    })
 | 
			
		||||
                );
 | 
			
		||||
                return options;
 | 
			
		||||
            },
 | 
			
		||||
            async transform(code, file) {
 | 
			
		||||
                // Allow loading files in /mount.
 | 
			
		||||
                const ext = path.extname(file);
 | 
			
		||||
                return ext != '.tsx' && ext != '.ts' && path.dirname(file) === path.resolve(`${input}/mount`)
 | 
			
		||||
                    ? `export default ${JSON.stringify(code)};\n`
 | 
			
		||||
                    : null;
 | 
			
		||||
            },
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
};
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_off"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_off",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_off",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_off",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_on"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_on",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_on",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_on",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_blinking"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_blinking",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_blinking",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_advanced_blinking",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_off"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_off",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_off",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_off",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_on"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_on",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_on",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_on",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_blinking"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_blinking",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_blinking",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_command_blinking",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,49 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_off"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_off",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_off",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=off": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_off",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_on"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_on",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_on",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=on": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_on",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_blinking"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_blinking",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_blinking",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,state=blinking": {
 | 
			
		||||
      "model": "computercraft:block/computer_normal_blinking",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,852 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_l",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_r",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lr",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_u",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_d",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rd",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ld",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_ru",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lu",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrd",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_rud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lru",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_advanced_lrud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,852 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=none": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=l": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_l",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=r": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_r",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lr": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lr",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=u": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_u",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=d": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_d",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=ud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=rd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rd",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=ld": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ld",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=ru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_ru",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lu": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lu",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lrd": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrd",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=rud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_rud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lru": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lru",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=down,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=up,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,orientation=north,state=lrud": {
 | 
			
		||||
      "model": "computercraft:block/monitor_normal_lrud",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_advanced_top",
 | 
			
		||||
    "side": "computercraft:block/computer_advanced_side",
 | 
			
		||||
    "front": "computercraft:block/computer_advanced_front_blink"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_advanced_top",
 | 
			
		||||
    "side": "computercraft:block/computer_advanced_side",
 | 
			
		||||
    "front": "computercraft:block/computer_advanced_front"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_advanced_top",
 | 
			
		||||
    "side": "computercraft:block/computer_advanced_side",
 | 
			
		||||
    "front": "computercraft:block/computer_advanced_front_on"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_command_top",
 | 
			
		||||
    "side": "computercraft:block/computer_command_side",
 | 
			
		||||
    "front": "computercraft:block/computer_command_front_blink"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_command_top",
 | 
			
		||||
    "side": "computercraft:block/computer_command_side",
 | 
			
		||||
    "front": "computercraft:block/computer_command_front"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_command_top",
 | 
			
		||||
    "side": "computercraft:block/computer_command_side",
 | 
			
		||||
    "front": "computercraft:block/computer_command_front_on"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_normal_top",
 | 
			
		||||
    "side": "computercraft:block/computer_normal_side",
 | 
			
		||||
    "front": "computercraft:block/computer_normal_front_blink"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_normal_top",
 | 
			
		||||
    "side": "computercraft:block/computer_normal_side",
 | 
			
		||||
    "front": "computercraft:block/computer_normal_front"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "top": "computercraft:block/computer_normal_top",
 | 
			
		||||
    "side": "computercraft:block/computer_normal_side",
 | 
			
		||||
    "front": "computercraft:block/computer_normal_front_on"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_16",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_4",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_0",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_32"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_20",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_7",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_0",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_36"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_19",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_4",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_1",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_33"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_31",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_7",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_1",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_45"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_18",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_4",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_2",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_34"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_30",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_7",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_2",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_46"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_24",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_5",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_2",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_40"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_27",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_6",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_2",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_43"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_25",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_5",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_1",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_39"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_28",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_6",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_1",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_42"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_17",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_4",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_3",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_35"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_29",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_7",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_3",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_47"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_23",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_5",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_3",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_41"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,9 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "computercraft:block/monitor_base",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "front": "computercraft:block/monitor_advanced_26",
 | 
			
		||||
    "side": "computercraft:block/monitor_advanced_6",
 | 
			
		||||
    "top": "computercraft:block/monitor_advanced_3",
 | 
			
		||||
    "back": "computercraft:block/monitor_advanced_44"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user