mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-11-03 23:22:59 +00:00 
			
		
		
		
	Compare commits
	
		
			418 Commits
		
	
	
		
			v1.17.1-1.
			...
			V1.97.1-be
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					bc2358489b | ||
| 
						 | 
					6e5e682e3a | ||
| 
						 | 
					02c63ce7e8 | ||
| 
						 | 
					fd24d89f89 | ||
| 
						 | 
					685d33a2dd | ||
| 
						 | 
					ca40c9cf19 | ||
| 
						 | 
					8985ea9560 | ||
| 
						 | 
					1832028dfd | ||
| 
						 | 
					316889dab7 | ||
| 
						 | 
					96c80a6549 | ||
| 
						 | 
					fb274e2ed6 | ||
| 
						 | 
					ebe847c04b | ||
| 
						 | 
					fdbf41b3c4 | ||
| 
						 | 
					9dcb9f9537 | ||
| 
						 | 
					1395c877af | ||
| 
						 | 
					969451f18c | ||
| 
						 | 
					259c8d57f5 | ||
| 
						 | 
					2ee07283fa | ||
| 
						 | 
					c85a80617a | ||
| 
						 | 
					5aa8611e43 | ||
| 
						 | 
					86aecd945e | ||
| 
						 | 
					a7a9f4fa13 | ||
| 
						 | 
					22e4c0603b | ||
| 
						 | 
					f3b731460e | ||
| 
						 | 
					d787c6e6c1 | ||
| 
						 | 
					11272b8d00 | ||
| 
						 | 
					1c254e3bb0 | ||
| 
						 | 
					7ade380fad | ||
| 
						 | 
					2a377a37ee | ||
| 
						 | 
					861a9e199d | ||
| 
						 | 
					d4f1e34023 | ||
| 
						 | 
					6d25278a5c | ||
| 
						 | 
					abfb05f04c | ||
| 
						 | 
					9d8e76c5b4 | ||
| 
						 | 
					89662bf54a | ||
| 
						 | 
					520635dfec | ||
| 
						 | 
					ee82a8d75f | ||
| 
						 | 
					967f00cd1b | ||
| 
						 | 
					dda5236d84 | ||
| 
						 | 
					427ca2f108 | ||
| 
						 | 
					e30f2a86f0 | ||
| 
						 | 
					121ef6e976 | ||
| 
						 | 
					e4271ff6f7 | ||
| 
						 | 
					8d3b94734d | ||
| 
						 | 
					9e57150384 | ||
| 
						 | 
					0dc34a7dbe | ||
| 
						 | 
					fbe28dc51a | ||
| 
						 | 
					14e013d075 | ||
| 
						 | 
					9bc4e9530c | ||
| 
						 | 
					cbff505297 | ||
| 
						 | 
					c4aef2d4c7 | ||
| 
						 | 
					2ed6692f76 | ||
| 
						 | 
					f075eabc32 | ||
| 
						 | 
					3d1c9d1667 | ||
| 
						 | 
					0028ad8f54 | ||
| 
						 | 
					4c805f1c27 | ||
| 
						 | 
					505543ad94 | ||
| 
						 | 
					644471c6bf | ||
| 
						 | 
					bf87d7faa1 | ||
| 
						 | 
					be95b65488 | ||
| 
						 | 
					7e9f3bd61a | ||
| 
						 | 
					4a74aa8166 | ||
| 
						 | 
					b4ce4361ce | ||
| 
						 | 
					42a3dd24ad | ||
| 
						 | 
					9129da2e3d | ||
| 
						 | 
					668cdcdd39 | ||
| 
						 | 
					2543ebee10 | ||
| 
						 | 
					104a317163 | ||
| 
						 | 
					921802e6c9 | ||
| 
						 | 
					56cfc1a452 | ||
| 
						 | 
					a14b98be22 | ||
| 
						 | 
					76b5c05acc | ||
| 
						 | 
					8b3f1a448f | ||
| 
						 | 
					3de515c617 | ||
| 
						 | 
					ab199cd9b0 | ||
| 
						 | 
					fc4bc9aa05 | ||
| 
						 | 
					9662a106f0 | ||
| 
						 | 
					06b0538b76 | ||
| 
						 | 
					fb128152a5 | ||
| 
						 | 
					f596af059d | ||
| 
						 | 
					52bb06d250 | ||
| 
						 | 
					f3d22444d3 | ||
| 
						 | 
					84a1f63445 | ||
| 
						 | 
					dbe98ac270 | ||
| 
						 | 
					a00775dcbb | ||
| 
						 | 
					2279f5044d | ||
| 
						 | 
					e8d90b94ec | ||
| 
						 | 
					0bf7f3de89 | ||
| 
						 | 
					59266fe6e9 | ||
| 
						 | 
					a198a5241d | ||
| 
						 | 
					b429095f88 | ||
| 
						 | 
					a6c7236fa0 | ||
| 
						 | 
					69deb0c947 | ||
| 
						 | 
					b0d7f690eb | ||
| 
						 | 
					62f93f1b4b | ||
| 
						 | 
					7fe322a93a | ||
| 
						 | 
					de97fa35a8 | ||
| 
						 | 
					25ce9b9bea | ||
| 
						 | 
					59048b3f30 | ||
| 
						 | 
					a960db7ced | ||
| 
						 | 
					6a4f09e7b1 | ||
| 
						 | 
					19d1cc0320 | ||
| 
						 | 
					1a52275dcb | ||
| 
						 | 
					2fc2cf2e29 | ||
| 
						 | 
					80c2fc68aa | ||
| 
						 | 
					7c0664b9f2 | ||
| 
						 | 
					4d1a950fbf | ||
| 
						 | 
					135a3f56a5 | ||
| 
						 | 
					1f117b7c47 | ||
| 
						 | 
					c820e051b3 | ||
| 
						 | 
					01d7aaf062 | ||
| 
						 | 
					1e75e4ff6e | ||
| 
						 | 
					f967a70121 | ||
| 
						 | 
					ac5150a664 | ||
| 
						 | 
					0318e62524 | ||
| 
						 | 
					ca69d755e6 | ||
| 
						 | 
					3ba7acc414 | ||
| 
						 | 
					4c27eea73b | ||
| 
						 | 
					225a64dd6b | ||
| 
						 | 
					1831e81dd4 | ||
| 
						 | 
					a4dd6c24e5 | ||
| 
						 | 
					936742895b | ||
| 
						 | 
					b5d1e618b9 | ||
| 
						 | 
					10aa6c5297 | ||
| 
						 | 
					010ebacd1a | ||
| 
						 | 
					9e002beed7 | ||
| 
						 | 
					6029defb20 | ||
| 
						 | 
					c16aa5f247 | ||
| 
						 | 
					8d27bdca7b | ||
| 
						 | 
					41aa8fa163 | ||
| 
						 | 
					e40fb67b50 | ||
| 
						 | 
					96d46ffd2c | ||
| 
						 | 
					652b7ebba6 | ||
| 
						 | 
					f0d7a1165d | ||
| 
						 | 
					4a20eea852 | ||
| 
						 | 
					ccdd2bf477 | ||
| 
						 | 
					8d8f41a50b | ||
| 
						 | 
					72c78db28b | ||
| 
						 | 
					bf8a992273 | ||
| 
						 | 
					9c214fcd8a | ||
| 
						 | 
					082cc9d2d8 | ||
| 
						 | 
					bff2e81713 | ||
| 
						 | 
					63aa3d8877 | ||
| 
						 | 
					74c5d7e719 | ||
| 
						 | 
					78a685c2cb | ||
| 
						 | 
					a475f55b9c | ||
| 
						 | 
					9353ded2d5 | ||
| 
						 | 
					d197268e53 | ||
| 
						 | 
					9648265056 | ||
| 
						 | 
					264dbc570f | ||
| 
						 | 
					e4ad8bc117 | ||
| 
						 | 
					1b31972092 | ||
| 
						 | 
					6cd9fa9fb2 | ||
| 
						 | 
					d10f297ca0 | ||
| 
						 | 
					9ae5636d41 | ||
| 
						 | 
					a60daf78cf | ||
| 
						 | 
					76e0507c3b | ||
| 
						 | 
					d8e2fab2b1 | ||
| 
						 | 
					5c5e510075 | ||
| 
						 | 
					5a309258af | ||
| 
						 | 
					b0782ec38b | ||
| 
						 | 
					46846a4fde | ||
| 
						 | 
					d955443b21 | ||
| 
						 | 
					57e6c49844 | ||
| 
						 | 
					66dbab7a6b | ||
| 
						 | 
					558976e4ca | ||
| 
						 | 
					3a7470a108 | ||
| 
						 | 
					cf2b332c3c | ||
| 
						 | 
					8984ebcf80 | ||
| 
						 | 
					a28e7e2db3 | ||
| 
						 | 
					3860e2466c | ||
| 
						 | 
					5b31c2536a | ||
| 
						 | 
					98dc7a6e58 | ||
| 
						 | 
					5e0ceda7ce | ||
| 
						 | 
					7fe3ac9222 | ||
| 
						 | 
					a65b8ed04c | ||
| 
						 | 
					3e14b84c23 | ||
| 
						 | 
					1710ad9861 | ||
| 
						 | 
					9c48c99be7 | ||
| 
						 | 
					d10d1b45fe | ||
| 
						 | 
					70a1cf5c5a | ||
| 
						 | 
					b546a10bd6 | ||
| 
						 | 
					2f35bbb538 | ||
| 
						 | 
					891dde43a9 | ||
| 
						 | 
					094e0d4f33 | ||
| 
						 | 
					df40adce20 | ||
| 
						 | 
					e12ce95b2d | ||
| 
						 | 
					bcc0effd00 | ||
| 
						 | 
					64f3aa2dba | ||
| 
						 | 
					515ccfebd3 | ||
| 
						 | 
					0b6dbe7778 | ||
| 
						 | 
					19054684c6 | ||
| 
						 | 
					a72a5e6deb | ||
| 
						 | 
					eb2d9482a2 | ||
| 
						 | 
					95794fdaf3 | ||
| 
						 | 
					af477a401a | ||
| 
						 | 
					27531c161d | ||
| 
						 | 
					a8f208c394 | ||
| 
						 | 
					148d9e9dda | ||
| 
						 | 
					67fc21271b | ||
| 
						 | 
					ce28e2659a | ||
| 
						 | 
					47e4826f2b | ||
| 
						 | 
					9bde2d8d13 | ||
| 
						 | 
					46acb6866e | ||
| 
						 | 
					c0506108f9 | ||
| 
						 | 
					0dd7c3695f | ||
| 
						 | 
					2a290be248 | ||
| 
						 | 
					c4a6c16330 | ||
| 
						 | 
					f8b3b544d1 | ||
| 
						 | 
					53ae689468 | ||
| 
						 | 
					73e460e533 | ||
| 
						 | 
					a4e68d637a | ||
| 
						 | 
					1f1b20c81e | ||
| 
						 | 
					20a9ff7a3f | ||
| 
						 | 
					58cd5e3df7 | ||
| 
						 | 
					5922d7548c | ||
| 
						 | 
					386e01364e | ||
| 
						 | 
					70eff6aa63 | ||
| 
						 | 
					45ac601946 | ||
| 
						 | 
					d6c5a5bd27 | ||
| 
						 | 
					02c7903cb7 | ||
| 
						 | 
					37e856efdc | ||
| 
						 | 
					8a38097887 | ||
| 
						 | 
					884b417ec2 | ||
| 
						 | 
					1d1d6227eb | ||
| 
						 | 
					d5eb82db60 | ||
| 
						 | 
					3575654d02 | ||
| 
						 | 
					79fcc7241b | ||
| 
						 | 
					b203d3aa0a | ||
| 
						 | 
					f1176af9d1 | ||
| 
						 | 
					717686d855 | ||
| 
						 | 
					92811ca0bc | ||
| 
						 | 
					f8a58dbcb1 | ||
| 
						 | 
					98aabe2cfb | ||
| 
						 | 
					f938ed9779 | ||
| 
						 | 
					03c9274b27 | ||
| 
						 | 
					92c94ac039 | ||
| 
						 | 
					5c6fd80b0c | ||
| 
						 | 
					f1ec59df15 | ||
| 
						 | 
					624b23c7ac | ||
| 
						 | 
					9b77a4aaee | ||
| 
						 | 
					d8b0037cfa | ||
| 
						 | 
					91a9e7fdf7 | ||
| 
						 | 
					2c3573719b | ||
| 
						 | 
					46bc42d5a7 | ||
| 
						 | 
					1b9e93a80f | ||
| 
						 | 
					7b93f91ffa | ||
| 
						 | 
					31a1027401 | ||
| 
						 | 
					e0fc994819 | ||
| 
						 | 
					43408bf085 | ||
| 
						 | 
					d28f42e8b7 | ||
| 
						 | 
					ac452582c1 | ||
| 
						 | 
					7e65c6b25c | ||
| 
						 | 
					457a863842 | ||
| 
						 | 
					eef36e1358 | ||
| 
						 | 
					feda08b915 | ||
| 
						 | 
					0240ce50ce | ||
| 
						 | 
					592b83e784 | ||
| 
						 | 
					5d91491ec7 | ||
| 
						 | 
					7326d1110d | ||
| 
						 | 
					0aa6ac05a0 | ||
| 
						 | 
					27a2c063b9 | ||
| 
						 | 
					89a195ec06 | ||
| 
						 | 
					0e5fd4e8e0 | ||
| 
						 | 
					aa4ec53bb6 | ||
| 
						 | 
					6b49327462 | ||
| 
						 | 
					74ad934889 | ||
| 
						 | 
					08b3dbbad5 | ||
| 
						 | 
					54eac0a2f8 | ||
| 
						 | 
					51ca5e620c | ||
| 
						 | 
					076d572831 | ||
| 
						 | 
					75f2b91fef | ||
| 
						 | 
					79534e5630 | ||
| 
						 | 
					d483a91459 | ||
| 
						 | 
					71d764f122 | ||
| 
						 | 
					2e527eb11e | ||
| 
						 | 
					19273b3696 | ||
| 
						 | 
					4643641d51 | ||
| 
						 | 
					63cd9c5bc7 | ||
| 
						 | 
					e9c11ff325 | ||
| 
						 | 
					452464aa01 | ||
| 
						 | 
					8885462175 | ||
| 
						 | 
					b8bd64913b | ||
| 
						 | 
					00b458c39a | ||
| 
						 | 
					88722d484f | ||
| 
						 | 
					6d103e2114 | ||
| 
						 | 
					42f23d56ae | ||
| 
						 | 
					89d5211bd7 | ||
| 
						 | 
					83e70377f7 | ||
| 
						 | 
					f6a26f75c3 | ||
| 
						 | 
					664df62d5d | ||
| 
						 | 
					1348ee0588 | ||
| 
						 | 
					145dce7653 | ||
| 
						 | 
					7f2651c23e | ||
| 
						 | 
					05464107a8 | ||
| 
						 | 
					86705787f0 | ||
| 
						 | 
					b34d8387d9 | ||
| 
						 | 
					4d00969ef0 | ||
| 
						 | 
					01d3d12992 | ||
| 
						 | 
					5e31dcde83 | ||
| 
						 | 
					5184883af1 | ||
| 
						 | 
					0c45112262 | ||
| 
						 | 
					0bf1672f45 | ||
| 
						 | 
					e1b8ac1f84 | ||
| 
						 | 
					deea552d99 | ||
| 
						 | 
					54229c2ce1 | ||
| 
						 | 
					1346a26179 | ||
| 
						 | 
					14df44f09d | ||
| 
						 | 
					1a21529499 | ||
| 
						 | 
					2546990f41 | ||
| 
						 | 
					b39ca02464 | ||
| 
						 | 
					628618105c | ||
| 
						 | 
					075ba03f5d | ||
| 
						 | 
					10bf84b631 | ||
| 
						 | 
					c346e22a45 | ||
| 
						 | 
					418e1335b1 | ||
| 
						 | 
					d52372df31 | ||
| 
						 | 
					cc72e1c2bd | ||
| 
						 | 
					d28afcc6a9 | ||
| 
						 | 
					220ed21e6e | ||
| 
						 | 
					09d465774d | ||
| 
						 | 
					dfc8f48f12 | ||
| 
						 | 
					abe2ec4686 | ||
| 
						 | 
					5333cda44e | ||
| 
						 | 
					dc88fbeb12 | ||
| 
						 | 
					c5eb7a9501 | ||
| 
						 | 
					bc969db2be | ||
| 
						 | 
					50b7646178 | ||
| 
						 | 
					3fa6b5bc9d | ||
| 
						 | 
					33e65e39e3 | ||
| 
						 | 
					0380e60590 | ||
| 
						 | 
					2918892ee2 | ||
| 
						 | 
					e43dd9f7c6 | ||
| 
						 | 
					244fd95034 | ||
| 
						 | 
					14e98e2fcb | ||
| 
						 | 
					dcf5d59109 | ||
| 
						 | 
					b95083c77e | ||
| 
						 | 
					c54c8c3ea6 | ||
| 
						 | 
					f79c67e243 | ||
| 
						 | 
					6ec7ebe439 | ||
| 
						 | 
					76fe33760d | ||
| 
						 | 
					cb549d8f43 | ||
| 
						 | 
					7b400fdcdd | ||
| 
						 | 
					ab70d918b5 | ||
| 
						 | 
					c64644b9ec | ||
| 
						 | 
					afb12eb342 | ||
| 
						 | 
					64f5ca02b3 | ||
| 
						 | 
					84bca21b0c | ||
| 
						 | 
					b6757c416f | ||
| 
						 | 
					dc9d3f2d15 | ||
| 
						 | 
					807825d74e | ||
| 
						 | 
					14c17676c6 | ||
| 
						 | 
					324519575c | ||
| 
						 | 
					fbcf26bdc9 | ||
| 
						 | 
					30ab6bd045 | ||
| 
						 | 
					2ea816b78b | ||
| 
						 | 
					56dcc57755 | ||
| 
						 | 
					a4830aff86 | ||
| 
						 | 
					621bc526be | ||
| 
						 | 
					605e1f6b9b | ||
| 
						 | 
					cb66ef7e30 | ||
| 
						 | 
					fd2f6a38c1 | ||
| 
						 | 
					229821d398 | ||
| 
						 | 
					1f2e0c444d | ||
| 
						 | 
					429baa350c | ||
| 
						 | 
					7fe62485fa | ||
| 
						 | 
					fe10c68099 | ||
| 
						 | 
					06092cfddd | ||
| 
						 | 
					9967dc5740 | ||
| 
						 | 
					b920e04c59 | ||
| 
						 | 
					baa1b5a5c9 | ||
| 
						 | 
					e84663a5c5 | ||
| 
						 | 
					1c46220c42 | ||
| 
						 | 
					889b445855 | ||
| 
						 | 
					19553a981e | ||
| 
						 | 
					15f4dbd061 | ||
| 
						 | 
					98e12c7c3e | ||
| 
						 | 
					dfad319864 | ||
| 
						 | 
					111b58f533 | ||
| 
						 | 
					9345652808 | ||
| 
						 | 
					d40163b409 | ||
| 
						 | 
					96400966d7 | ||
| 
						 | 
					db83bd4f64 | ||
| 
						 | 
					579a38d366 | ||
| 
						 | 
					0e6797c7da | ||
| 
						 | 
					c935577768 | ||
| 
						 | 
					c2b4077aa1 | ||
| 
						 | 
					ac020859f3 | ||
| 
						 | 
					238be8955b | ||
| 
						 | 
					f997b02b8f | ||
| 
						 | 
					799bb77847 | ||
| 
						 | 
					2f66792a0d | ||
| 
						 | 
					6cae8e211e | ||
| 
						 | 
					48b1b2f01d | ||
| 
						 | 
					8c45fd362a | ||
| 
						 | 
					07b13dd2b4 | ||
| 
						 | 
					45e84e1ede | ||
| 
						 | 
					725dfa764f | ||
| 
						 | 
					c221502ec9 | ||
| 
						 | 
					234f18c228 | ||
| 
						 | 
					006ad109cb | ||
| 
						 | 
					0db080154c | ||
| 
						 | 
					200311033f | ||
| 
						 | 
					3192dc81ac | ||
| 
						 | 
					b11d4bb209 | ||
| 
						 | 
					2a716244e9 | ||
| 
						 | 
					19b7ed538a | ||
| 
						 | 
					b0d9dc0b88 | ||
| 
						 | 
					e6094a59fa | ||
| 
						 | 
					e8d7e6a562 | ||
| 
						 | 
					536c2d9b2d | ||
| 
						 | 
					f15a278f3b | ||
| 
						 | 
					26b73c2ff3 | ||
| 
						 | 
					c1e08fc3c7 | ||
| 
						 | 
					b9ec6f236d | ||
| 
						 | 
					b1fff97bff | ||
| 
						 | 
					c81bc70475 | ||
| 
						 | 
					55a7ee4acf | 
@@ -10,9 +10,3 @@ insert_final_newline = true
 | 
			
		||||
 | 
			
		||||
[*.md]
 | 
			
		||||
trim_trailing_whitespace = false
 | 
			
		||||
 | 
			
		||||
[*.sexp]
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.yml]
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@@ -1,15 +0,0 @@
 | 
			
		||||
# Ignore changes in generated files
 | 
			
		||||
src/generated/resources/data/** linguist-generated
 | 
			
		||||
src/testMod/server-files/structures linguist-generated
 | 
			
		||||
 | 
			
		||||
* text=auto
 | 
			
		||||
 | 
			
		||||
*.gradle eol=lf diff=java
 | 
			
		||||
*.java   eol=lf diff=java
 | 
			
		||||
*.kt     eol=lf diff=java
 | 
			
		||||
*.lua    eol=lf
 | 
			
		||||
*.md     eol=lf diff=markdown
 | 
			
		||||
*.txt    eol=lf
 | 
			
		||||
 | 
			
		||||
*.png binary
 | 
			
		||||
*.jar binary
 | 
			
		||||
							
								
								
									
										16
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
---
 | 
			
		||||
name: Bug report
 | 
			
		||||
about: Report some misbehaviour in the mod
 | 
			
		||||
labels: bug
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<!--
 | 
			
		||||
## Before reporting
 | 
			
		||||
 - Search for the bug on the issue tracker. Make sure to look at closed issues too!
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
## Useful information to include:
 | 
			
		||||
 - Minecraft version
 | 
			
		||||
 - CC: Restitched 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.
 | 
			
		||||
							
								
								
									
										34
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
									
									
									
										vendored
									
									
								
							@@ -1,34 +0,0 @@
 | 
			
		||||
name: Bug report
 | 
			
		||||
description: Report some misbehaviour in the mod
 | 
			
		||||
labels: [ bug ]
 | 
			
		||||
body:
 | 
			
		||||
- type: dropdown
 | 
			
		||||
  id: mc-version
 | 
			
		||||
  attributes:
 | 
			
		||||
    label: Minecraft Version
 | 
			
		||||
    description: What version of Minecraft are you using?
 | 
			
		||||
    options:
 | 
			
		||||
      - 1.16.x
 | 
			
		||||
      - 1.17.x
 | 
			
		||||
      - 1.18.x
 | 
			
		||||
  validations:
 | 
			
		||||
    required: true
 | 
			
		||||
- type: input
 | 
			
		||||
  id: version
 | 
			
		||||
  attributes:
 | 
			
		||||
    label: Version
 | 
			
		||||
    description: "What version of CC: Tweaked are you using?"
 | 
			
		||||
    placeholder: "e.g. 1.96.0"
 | 
			
		||||
  validations:
 | 
			
		||||
    required: true
 | 
			
		||||
- type: textarea
 | 
			
		||||
  id: details
 | 
			
		||||
  attributes:
 | 
			
		||||
    label: Details
 | 
			
		||||
    description: |
 | 
			
		||||
      Description of the bug. Please include the following:
 | 
			
		||||
      - 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.
 | 
			
		||||
							
								
								
									
										8
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,8 +0,0 @@
 | 
			
		||||
blank_issues_enabled: false
 | 
			
		||||
contact_links:
 | 
			
		||||
- name: ComputerCraft Discord
 | 
			
		||||
  url: https://discord.computercraft.cc
 | 
			
		||||
  about: Get help on the ComputerCraft Discord.
 | 
			
		||||
- name: GitHub Discussions
 | 
			
		||||
  url: https://github.com/cc-tweaked/CC-Tweaked/discussions
 | 
			
		||||
  about: Or ask questions on GitHub Discussions.
 | 
			
		||||
							
								
								
									
										12
									
								
								.github/ISSUE_TEMPLATE/peripheral_shoutout.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								.github/ISSUE_TEMPLATE/peripheral_shoutout.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
---
 | 
			
		||||
name: Peripheral Shoutout
 | 
			
		||||
about: Made a Peripheral mod for CC:R? Let us know so we can give it a shoutout
 | 
			
		||||
labels: peripheralShoutout
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
## What to include?
 | 
			
		||||
 - Link to the mod's Icon
 | 
			
		||||
 - Link to the mod
 | 
			
		||||
 - Mod Name
 | 
			
		||||
 - Basic description of the mod
 | 
			
		||||
 - Link to CC:R Peripheral Documentation for the mod
 | 
			
		||||
							
								
								
									
										4
									
								
								.github/ISSUE_TEMPLATE/something_else.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/ISSUE_TEMPLATE/something_else.md
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
name: Something else
 | 
			
		||||
about: An issue about something else.
 | 
			
		||||
---
 | 
			
		||||
							
								
								
									
										23
									
								
								.github/workflows/main-ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								.github/workflows/main-ci.yml
									
									
									
									
										vendored
									
									
								
							@@ -9,11 +9,13 @@ jobs:
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
    - uses: actions/checkout@v2
 | 
			
		||||
    - name: Checkout submodules
 | 
			
		||||
      run: git submodule update --init --recursive
 | 
			
		||||
 | 
			
		||||
    - name: Set up Java 8
 | 
			
		||||
    - name: Set up Java 16
 | 
			
		||||
      uses: actions/setup-java@v1
 | 
			
		||||
      with:
 | 
			
		||||
        java-version: 8
 | 
			
		||||
        java-version: 16
 | 
			
		||||
 | 
			
		||||
    - name: Cache gradle dependencies
 | 
			
		||||
      uses: actions/cache@v2
 | 
			
		||||
@@ -31,27 +33,14 @@ jobs:
 | 
			
		||||
    - name: Build with Gradle
 | 
			
		||||
      run: |
 | 
			
		||||
        ./gradlew assemble || ./gradlew assemble
 | 
			
		||||
        ./gradlew downloadAssets || ./gradlew downloadAssets
 | 
			
		||||
        xvfb-run ./gradlew build
 | 
			
		||||
        ./gradlew build
 | 
			
		||||
 | 
			
		||||
    - name: Upload Jar
 | 
			
		||||
      uses: actions/upload-artifact@v2
 | 
			
		||||
      with:
 | 
			
		||||
        name: CC-Tweaked
 | 
			
		||||
        name: cc-restitched
 | 
			
		||||
        path: build/libs
 | 
			
		||||
 | 
			
		||||
    - name: Upload Screnshots
 | 
			
		||||
      uses: actions/upload-artifact@v2
 | 
			
		||||
      with:
 | 
			
		||||
        name: Screenshots
 | 
			
		||||
        path: test-files/client/screenshots
 | 
			
		||||
        if-no-files-found: ignore
 | 
			
		||||
        retention-days: 5
 | 
			
		||||
      if: failure()
 | 
			
		||||
 | 
			
		||||
    - name: Upload Coverage
 | 
			
		||||
      uses: codecov/codecov-action@v2
 | 
			
		||||
 | 
			
		||||
    - name: Parse test reports
 | 
			
		||||
      run: ./tools/parse-reports.py
 | 
			
		||||
      if: ${{ failure() }}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								.github/workflows/make-doc.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								.github/workflows/make-doc.sh
									
									
									
									
										vendored
									
									
								
							@@ -1,19 +0,0 @@
 | 
			
		||||
#!/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:/$DEST"
 | 
			
		||||
rsync -avc -e "ssh -i $HOME/.ssh/key -o StrictHostKeyChecking=no -p $SSH_PORT" \
 | 
			
		||||
      "$GITHUB_WORKSPACE/build/docs/javadoc/" \
 | 
			
		||||
      "$SSH_USER@$SSH_HOST:/$DEST/javadoc"
 | 
			
		||||
							
								
								
									
										50
									
								
								.github/workflows/make-doc.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								.github/workflows/make-doc.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,50 +0,0 @@
 | 
			
		||||
name: Build documentation
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  push:
 | 
			
		||||
    branches:
 | 
			
		||||
    - mc-1.16.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 }}
 | 
			
		||||
							
								
								
									
										17
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,27 +3,22 @@
 | 
			
		||||
/logs
 | 
			
		||||
/build
 | 
			
		||||
/out
 | 
			
		||||
/doc/out/
 | 
			
		||||
/node_modules
 | 
			
		||||
 | 
			
		||||
# Runtime directories
 | 
			
		||||
/run
 | 
			
		||||
/run-*
 | 
			
		||||
/test-files
 | 
			
		||||
 | 
			
		||||
# Autogenerated by IDE
 | 
			
		||||
/bin
 | 
			
		||||
/.settings
 | 
			
		||||
.classpath
 | 
			
		||||
 | 
			
		||||
*.ipr
 | 
			
		||||
*.iws
 | 
			
		||||
*.iml
 | 
			
		||||
.idea
 | 
			
		||||
.gradle
 | 
			
		||||
*.DS_Store
 | 
			
		||||
 | 
			
		||||
/.classpath
 | 
			
		||||
/.project
 | 
			
		||||
/.settings
 | 
			
		||||
/.vscode
 | 
			
		||||
bin/
 | 
			
		||||
.project
 | 
			
		||||
*.launch
 | 
			
		||||
 | 
			
		||||
/src/generated/resources/.cache
 | 
			
		||||
/src/web/mount/*.d.ts
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
[submodule "src/main/resources/resourcepacks/overhaul"]
 | 
			
		||||
	path = src/main/resources/resourcepacks/overhaul
 | 
			
		||||
	url = https://github.com/3prm3/cc-pack
 | 
			
		||||
							
								
								
									
										19
									
								
								.gitpod.Dockerfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.gitpod.Dockerfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
FROM gitpod/workspace-base
 | 
			
		||||
 | 
			
		||||
USER gitpod
 | 
			
		||||
 | 
			
		||||
# Install custom tools, runtime, etc. using apt-get
 | 
			
		||||
# For example, the command below would install "bastet" - a command line tetris clone:
 | 
			
		||||
#
 | 
			
		||||
# RUN sudo apt-get -q update && \
 | 
			
		||||
#     sudo apt-get install -yq bastet && \
 | 
			
		||||
#     sudo rm -rf /var/lib/apt/lists/*
 | 
			
		||||
#
 | 
			
		||||
# More information: https://www.gitpod.io/docs/config-docker/
 | 
			
		||||
 | 
			
		||||
# Install Java 8 and 16
 | 
			
		||||
RUN sudo apt-get -q update && \
 | 
			
		||||
    sudo apt install -yq openjdk-8-jdk openjdk-16-jdk
 | 
			
		||||
 | 
			
		||||
# This is so that you can use java 8 until such a time as you switch to java 16
 | 
			
		||||
RUN sudo update-java-alternatives --set java-1.16.0-openjdk-amd64
 | 
			
		||||
							
								
								
									
										10
									
								
								.gitpod.yml
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								.gitpod.yml
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
			
		||||
image:
 | 
			
		||||
  file: config/gitpod/Dockerfile
 | 
			
		||||
  file: .gitpod.Dockerfile
 | 
			
		||||
 | 
			
		||||
ports:
 | 
			
		||||
  - port: 25565
 | 
			
		||||
@@ -7,16 +7,12 @@ ports:
 | 
			
		||||
 | 
			
		||||
vscode:
 | 
			
		||||
  extensions:
 | 
			
		||||
    - eamodio.gitlens
 | 
			
		||||
    - github.vscode-pull-request-github
 | 
			
		||||
    - ms-azuretools.vscode-docker
 | 
			
		||||
    - redhat.java
 | 
			
		||||
    - richardwillis.vscode-gradle
 | 
			
		||||
    - vscjava.vscode-java-debug
 | 
			
		||||
    - vscode.github
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
tasks:
 | 
			
		||||
  - name: Setup pre-commit hool
 | 
			
		||||
    init: pre-commit install --config config/pre-commit/config.yml --allow-missing-config
 | 
			
		||||
  - name: Install npm packages
 | 
			
		||||
    init: npm ci
 | 
			
		||||
  - init: ./gradlew
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								.luacheckrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								.luacheckrc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
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' },
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
{
 | 
			
		||||
	"files.exclude": {
 | 
			
		||||
		// Default Java Dev
 | 
			
		||||
        "**/.classpath": true,
 | 
			
		||||
        "**/.project": true,
 | 
			
		||||
        "**/.settings": true,
 | 
			
		||||
        "**/.factorypath": true,
 | 
			
		||||
 | 
			
		||||
		// Custom Hidden Files
 | 
			
		||||
		"**/.bin": true,
 | 
			
		||||
		"**/.editorconfig": true,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
	"java.configuration.updateBuildConfiguration": "automatic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										115
									
								
								CONTRIBUTING.md
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								CONTRIBUTING.md
									
									
									
									
									
								
							@@ -1,115 +0,0 @@
 | 
			
		||||
# 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/cc-tweaked/CC-Tweaked.git && cd CC-Tweaked`
 | 
			
		||||
 - **Setup Forge:** `./gradlew build`
 | 
			
		||||
 - **Run Minecraft:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
 | 
			
		||||
 - **Optionally:** For small PRs (especially those only touching Lua code), it may be easier to use GitPod, which
 | 
			
		||||
   provides a pre-configured environment: [](https://gitpod.io/#https://github.com/cc-tweaked/CC-Tweaked/)
 | 
			
		||||
 | 
			
		||||
   Do note you will need to download the mod after compiling to test.
 | 
			
		||||
 | 
			
		||||
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/testMod/java/dan200/computercraft/ingame/`): These tests are run on an actual Minecraft server and client,
 | 
			
		||||
   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 testClient` and `./gradlew testServer`. You may want to run the client under `xvfb-run`
 | 
			
		||||
   or similar when running in a headless environment.
 | 
			
		||||
 | 
			
		||||
## 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/cc-tweaked/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."
 | 
			
		||||
							
								
								
									
										104
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								README.md
									
									
									
									
									
								
							@@ -1,53 +1,71 @@
 | 
			
		||||
# 
 | 
			
		||||
[](https://github.com/cc-tweaked/CC-Tweaked/actions "Current build status") [][CurseForge]
 | 
			
		||||
<img src="logo.png" alt="CC: Restitched" width="100%"/>
 | 
			
		||||
 | 
			
		||||
CC: Tweaked is a mod for Minecraft which adds programmable computers, turtles and more to the game. A fork of the
 | 
			
		||||
much-beloved [ComputerCraft], it continues its legacy with better performance, stability, and a wealth of new features.
 | 
			
		||||
[](https://github.com/Merith-TK/cc-restitched/actions "Current build status")
 | 
			
		||||
[](https://www.curseforge.com/minecraft/mc-mods/cc-restitched "Download CC:  Restitched on CurseForge")
 | 
			
		||||
[](https://gitpod.io/#https://github.com/Merith-TK/cc-restitched/tree/1.17-alpha)
 | 
			
		||||
 | 
			
		||||
CC: Tweaked can be installed from [CurseForge] or [Modrinth]. It requires the [Minecraft Forge][forge] mod loader, but
 | 
			
		||||
[versions are available for Fabric][ccrestitched].
 | 
			
		||||
# CC: R Version VS CC: T Version
 | 
			
		||||
CC: R Strives to maintain perfect pairity with CC: T, however in some cases this is not possible, so CC: R might have a "newer" version than what CC: T has, these newer versions will be primarily bugfixes and the like because fabric is "weird" when porting a forge mod.
 | 
			
		||||
 | 
			
		||||
## What is CC: Restiched
 | 
			
		||||
This is an fork of [Zundrel/cc-tweaked-fabric](https://github.com/Zundrel/cc-tweaked-fabric) who's goal was to port [SquidDev-CC/CC-Tweaked](https://github.com/SquidDev-CC/CC-Tweaked) to the [Fabric](https://fabricmc.net/) modloader. I picked up maintaining the mod because the team working on Zundrel's fork can no longer mantain it so I picked it up to make it as equal as possible with CC: T.
 | 
			
		||||
 | 
			
		||||
## Resource Packs
 | 
			
		||||
This mod includes textures that are more in-line with the style of Mojang's new texture-artist, Jappa. If you prefer the original textures, enable the "Classic" resource pack.
 | 
			
		||||
 | 
			
		||||
<img src="https://raw.githubusercontent.com/3prm3/cc-pack/main/pack.png" alt="CC: Restitched" width="16"  height="16"/> [3prm3/cc-pack](https://github.com/3prm3/cc-pack/)
 | 
			
		||||
We also have a second resourcepack made by [3prm3](https://github.com/3prm3), it features a complete overhaul and can be enabled by enabling the `overhaul` resource pack, go check out his resource pack over here!
 | 
			
		||||
 | 
			
		||||
# Conflicts
 | 
			
		||||
Currently Iris and Canvas Shaders are Incompatible with this mod,
 | 
			
		||||
 - Iris has transparent monitors, and when a computer displays something on the monitor, the face becomes black.
 | 
			
		||||
 - Canvas... uhm...
 | 
			
		||||
	- Computer Terminals are 100% unusable and scuffed
 | 
			
		||||
		<img src="https://user-images.githubusercontent.com/16393543/120464345-ab619b00-c351-11eb-9dfb-e68ddc93de5e.png">
 | 
			
		||||
	- Monitors break with either rendering option.
 | 
			
		||||
		- TBO
 | 
			
		||||
			- Just crashes on world load.
 | 
			
		||||
		- VBO
 | 
			
		||||
			<img src="https://user-images.githubusercontent.com/16393543/120475933-d999a780-c35e-11eb-9d94-ef4e5988ad5f.png">
 | 
			
		||||
## Contributing
 | 
			
		||||
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).
 | 
			
		||||
Any contribution is welcome, be that using the mod, reporting bugs or contributing code. In order to start helping develop CC: R there are a few rules;
 | 
			
		||||
1) Any updates that port commits from CC: T, ***MUST*** follow the format defined in [patchwork.md](patchwork.md) otherwise they will not be accepted,
 | 
			
		||||
	* Commit Message must be the same as it is in CC: T ,
 | 
			
		||||
	* patchwork.md must be updated in the following format.
 | 
			
		||||
	> Comments, optional but useful if you had to do something 	differently than in CC: T outside of [Fabric](https://fabricmc.net/)/[Forge](https://mcforge.readthedocs.io/en/1.16.x/) differences.
 | 
			
		||||
	>
 | 
			
		||||
	> \`\`\`
 | 
			
		||||
	>
 | 
			
		||||
	>commitID
 | 
			
		||||
	>
 | 
			
		||||
	> commit title
 | 
			
		||||
	>
 | 
			
		||||
	> commit desc
 | 
			
		||||
	>
 | 
			
		||||
	> \`\`\`
 | 
			
		||||
2) Follow the [Fabric](https://fabricmc.net/) programming guidelines as close as possible. This means you have to use [`loom`](https://fabricmc.net/wiki/tutorial:mappings) mappings,
 | 
			
		||||
3) You cannot intentionally implement bugs and security vulnerabilities.
 | 
			
		||||
4) Unless the commit is a ["patchwork"](https://github.com/Merith-TK/cc-restitched/blob/fabric/patchwork.md) compliant commit, (IE: taken from CC: T), the lua code is off limits.
 | 
			
		||||
## Bleeding Edge Builds
 | 
			
		||||
Bleeding edge builds can be found [here](https://github.com/Merith-TK/cc-restitched/actions) at Github Actions.
 | 
			
		||||
 | 
			
		||||
## 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.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.
 | 
			
		||||
If you need help getting started with CC: Restitched, want to show off your latest project, or just want to chat about ComputerCraft, here is the [Forum](https://forums.computercraft.cc/) and the [Discord](https://discord.gg/H2UyJXe).
 | 
			
		||||
 | 
			
		||||
We also host fairly comprehensive documentation at [tweaked.cc](https://tweaked.cc/ "The CC: Tweaked website").
 | 
			
		||||
## Known Issues
 | 
			
		||||
Main Known issue
 | 
			
		||||
* Mods that add blocks that can be used as peripherals for CC: T on forge, don't work with CC: R.
 | 
			
		||||
	* This is because of the differences between forge and fabric, and that mod devs, to my knowledge have not agreed upon a standard method in which to implement cross compatibility between mods,
 | 
			
		||||
* [Fixed (d10f297c): please report if bug persists]</br> ~~Storage Peripherals throw a java "StackOverflowError" when using `pushItems()`,~~
 | 
			
		||||
    * ~~Work around, you are probably using `pushItems(chest, 1)` or similar. please use `pushItems(chest, 1, nil, 1)`.~~
 | 
			
		||||
* Computers will not run built in commands, saying "File not found".
 | 
			
		||||
    * This is a know bug, dont know what causes it, but just restart the computer (`ctrl+r` for one second) and it will work again.
 | 
			
		||||
    * Occurs when server runs `/reload` or a datapack is updated.
 | 
			
		||||
 | 
			
		||||
## Using
 | 
			
		||||
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.
 | 
			
		||||
## Perpherals
 | 
			
		||||
Unfortunately, unlike the original CC: Tweaked project, CC: Restitched, does not have any actual peripheral mods, currently the only one we have is an example for mod devs to get started with making/adding the peripheral API to their mods!
 | 
			
		||||
 | 
			
		||||
```groovy
 | 
			
		||||
repositories {
 | 
			
		||||
  maven {
 | 
			
		||||
    url 'https://squiddev.cc/maven/'
 | 
			
		||||
    content {
 | 
			
		||||
      includeGroup 'org.squiddev'
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
If your a mod dev made a mod with CC: R peripheral support, OR if your a player who found a mod with CC: R support, please open an [issue here](https://github.com/Merith-TK/cc-restitched/issues/new?assignees=&labels=peripheralShoutout&template=peripheral_shoutout.md) to let us know so we can add it to the list!
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
  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/).
 | 
			
		||||
 | 
			
		||||
[computercraft]: https://github.com/dan200/ComputerCraft "ComputerCraft on GitHub"
 | 
			
		||||
[curseforge]: https://minecraft.curseforge.com/projects/cc-tweaked "Download CC: Tweaked from CurseForge"
 | 
			
		||||
[modrinth]: https://modrinth.com/mod/gu7yAYhd "Download CC: Tweaked from Modrinth"
 | 
			
		||||
[forge]: https://files.minecraftforge.net/ "Download Minecraft Forge."
 | 
			
		||||
[ccrestitched]: https://www.curseforge.com/minecraft/mc-mods/cc-restitched "Download CC: Restitched from CurseForge"
 | 
			
		||||
*  [CC Peripheral Test](https://github.com/Toad-Dev/cc-peripheral-test)
 | 
			
		||||
	* This is an example mod for how to make peripherals that work as a block, or as a turtle upgrade!
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										569
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										569
									
								
								build.gradle
									
									
									
									
									
								
							@@ -1,336 +1,102 @@
 | 
			
		||||
buildscript {
 | 
			
		||||
    repositories {
 | 
			
		||||
        mavenCentral()
 | 
			
		||||
        maven { url = "https://maven.minecraftforge.net" }
 | 
			
		||||
        maven { url = 'https://maven.parchmentmc.org' }
 | 
			
		||||
    }
 | 
			
		||||
    dependencies {
 | 
			
		||||
        classpath 'net.minecraftforge.gradle:ForgeGradle:5.1.24'
 | 
			
		||||
        classpath 'org.parchmentmc:librarian:1.+'
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
plugins {
 | 
			
		||||
    id 'fabric-loom' version '0.9-SNAPSHOT'
 | 
			
		||||
    id 'maven-publish'
 | 
			
		||||
    id "checkstyle"
 | 
			
		||||
    id "jacoco"
 | 
			
		||||
    id "maven-publish"
 | 
			
		||||
    id "com.github.hierynomus.license" version "0.16.1"
 | 
			
		||||
    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.6.0"
 | 
			
		||||
    id "com.modrinth.minotaur" version "1.2.1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
apply plugin: 'net.minecraftforge.gradle'
 | 
			
		||||
apply plugin: 'org.parchmentmc.librarian.forgegradle'
 | 
			
		||||
java {
 | 
			
		||||
    toolchain {
 | 
			
		||||
        languageVersion = JavaLanguageVersion.of(16)
 | 
			
		||||
        vendor = JvmVendorSpec.ADOPTOPENJDK
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
version = mod_version
 | 
			
		||||
 | 
			
		||||
group = "org.squiddev"
 | 
			
		||||
archivesBaseName = "cc-tweaked-${mc_version}"
 | 
			
		||||
group = "dan200.computercraft"
 | 
			
		||||
archivesBaseName = "cc-restiched"
 | 
			
		||||
 | 
			
		||||
def javaVersion = JavaLanguageVersion.of(16)
 | 
			
		||||
java {
 | 
			
		||||
    toolchain {
 | 
			
		||||
        languageVersion = javaVersion
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    withSourcesJar()
 | 
			
		||||
    withJavadocJar()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks.withType(JavaExec).configureEach {
 | 
			
		||||
    javaLauncher = javaToolchains.launcherFor {
 | 
			
		||||
        languageVersion = javaVersion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sourceSets {
 | 
			
		||||
    main.java {
 | 
			
		||||
        exclude 'dan200/computercraft/shared/integration/morered/**'
 | 
			
		||||
    }
 | 
			
		||||
    main.resources {
 | 
			
		||||
        srcDir 'src/generated/resources'
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    testMod {}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minecraft {
 | 
			
		||||
    runs {
 | 
			
		||||
        all {
 | 
			
		||||
            lazyToken('minecraft_classpath') {
 | 
			
		||||
                configurations.shade.copyRecursive().resolve().collect { it.absolutePath }.join(File.pathSeparator)
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            property 'forge.logging.markers', 'REGISTRIES'
 | 
			
		||||
            property 'forge.logging.console.level', 'debug'
 | 
			
		||||
 | 
			
		||||
            mods {
 | 
			
		||||
                computercraft {
 | 
			
		||||
                    source sourceSets.main
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        client {
 | 
			
		||||
            workingDirectory project.file('run')
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        server {
 | 
			
		||||
            workingDirectory project.file("run/server")
 | 
			
		||||
            arg "--nogui"
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        data {
 | 
			
		||||
            workingDirectory project.file('run')
 | 
			
		||||
            args '--mod', 'computercraft', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        testClient {
 | 
			
		||||
            workingDirectory project.file('test-files/client')
 | 
			
		||||
            parent runs.client
 | 
			
		||||
 | 
			
		||||
            mods {
 | 
			
		||||
                cctest {
 | 
			
		||||
                    source sourceSets.testMod
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            lazyToken('minecraft_classpath') {
 | 
			
		||||
                (configurations.shade.copyRecursive().resolve() + configurations.testModExtra.copyRecursive().resolve())
 | 
			
		||||
                    .collect { it.absolutePath }
 | 
			
		||||
                    .join(File.pathSeparator)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        testServer {
 | 
			
		||||
            workingDirectory project.file('test-files/server')
 | 
			
		||||
            parent runs.server
 | 
			
		||||
 | 
			
		||||
            mods {
 | 
			
		||||
                cctest {
 | 
			
		||||
                    source sourceSets.testMod
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            lazyToken('minecraft_classpath') {
 | 
			
		||||
                (configurations.shade.copyRecursive().resolve() + configurations.testModExtra.copyRecursive().resolve())
 | 
			
		||||
                    .collect { it.absolutePath }
 | 
			
		||||
                    .join(File.pathSeparator)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mappings channel: 'parchment', version: "${mapping_version}-${mc_version}"
 | 
			
		||||
 | 
			
		||||
    accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
 | 
			
		||||
    accessTransformer file('src/testMod/resources/META-INF/accesstransformer.cfg')
 | 
			
		||||
}
 | 
			
		||||
repositories {
 | 
			
		||||
    mavenCentral()
 | 
			
		||||
    maven { url 'https://jitpack.io' }
 | 
			
		||||
    maven { url 'https://api.modrinth.com/maven'}
 | 
			
		||||
    maven { url "https://maven.shedaniel.me/" }
 | 
			
		||||
    maven { url "https://maven.terraformersmc.com/" }
 | 
			
		||||
    maven {
 | 
			
		||||
        name "SquidDev"
 | 
			
		||||
        url "https://squiddev.cc/maven"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
loom {
 | 
			
		||||
    accessWidenerPath = file("src/main/resources/cc.accesswidener")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
configurations {
 | 
			
		||||
    shade
 | 
			
		||||
    implementation.extendsFrom shade
 | 
			
		||||
 | 
			
		||||
    cctJavadoc
 | 
			
		||||
 | 
			
		||||
    testModExtra
 | 
			
		||||
    testModImplementation.extendsFrom(testModExtra)
 | 
			
		||||
    testModImplementation.extendsFrom(implementation)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dependencies {
 | 
			
		||||
    checkstyle "com.puppycrawl.tools:checkstyle:8.45"
 | 
			
		||||
    checkstyle 'com.puppycrawl.tools:checkstyle:8.45.1'
 | 
			
		||||
 | 
			
		||||
    minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
 | 
			
		||||
    minecraft "com.mojang:minecraft:${mc_version}"
 | 
			
		||||
    mappings "net.fabricmc:yarn:${mc_version}+build.${mappings_version}:v2"
 | 
			
		||||
    modImplementation "net.fabricmc:fabric-loader:${fabric_loader_version}"
 | 
			
		||||
    modImplementation "net.fabricmc.fabric-api:fabric-api:${fabric_api_version}"
 | 
			
		||||
 | 
			
		||||
    compileOnly fg.deobf("mezz.jei:jei-1.17.1:8.0.0.14:api")
 | 
			
		||||
    // compileOnly fg.deobf("commoble.morered:morered-1.16.5:2.1.1.0")
 | 
			
		||||
    modApi("me.shedaniel.cloth:cloth-config-fabric:${cloth_config_version}") {
 | 
			
		||||
        exclude(group: "net.fabricmc.fabric-api")
 | 
			
		||||
    }
 | 
			
		||||
    modImplementation "com.terraformersmc:modmenu:${modmenu_version}"
 | 
			
		||||
    modImplementation "me.shedaniel.cloth.api:cloth-utils-v1:${cloth_api_version}"
 | 
			
		||||
 | 
			
		||||
    runtimeOnly fg.deobf("mezz.jei:jei-1.17.1:8.0.0.14")
 | 
			
		||||
    implementation 'com.electronwill.night-config:toml:3.6.3'
 | 
			
		||||
    implementation 'com.google.code.findbugs:jsr305:3.0.2'
 | 
			
		||||
 | 
			
		||||
    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.6.0'
 | 
			
		||||
    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2'
 | 
			
		||||
    include "me.shedaniel.cloth.api:cloth-utils-v1:${cloth_api_version}"
 | 
			
		||||
    include 'com.electronwill.night-config:core:3.6.3'
 | 
			
		||||
    include 'com.electronwill.night-config:toml:3.6.3'
 | 
			
		||||
    include "me.shedaniel.cloth:cloth-config-fabric:${cloth_config_version}"
 | 
			
		||||
 | 
			
		||||
    testModImplementation sourceSets.main.output
 | 
			
		||||
    testModExtra 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21'
 | 
			
		||||
 | 
			
		||||
    cctJavadoc 'cc.tweaked:cct-javadoc:1.4.2'
 | 
			
		||||
    modRuntime "me.shedaniel:RoughlyEnoughItems-api-fabric:6.0.254-alpha"
 | 
			
		||||
    modRuntime "me.shedaniel:RoughlyEnoughItems-fabric:6.0.254-alpha"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Compile tasks
 | 
			
		||||
processResources {
 | 
			
		||||
    inputs.property "version", project.version
 | 
			
		||||
 | 
			
		||||
compileTestModJava {
 | 
			
		||||
    dependsOn(compileJava)
 | 
			
		||||
	filesMatching("fabric.mod.json") {
 | 
			
		||||
		expand "version": project.version
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
javadoc {
 | 
			
		||||
    include "dan200/computercraft/api/**/*.java"
 | 
			
		||||
// ensure that the encoding is set to UTF-8, no matter what the system default is
 | 
			
		||||
// this fixes some edge cases with special characters not displaying correctly
 | 
			
		||||
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
 | 
			
		||||
tasks.withType(JavaCompile) {
 | 
			
		||||
    options.encoding = "UTF-8"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task luaJavadoc(type: Javadoc) {
 | 
			
		||||
    description "Generates documentation for Java-side Lua functions."
 | 
			
		||||
    group "documentation"
 | 
			
		||||
 | 
			
		||||
    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 = javaVersion
 | 
			
		||||
    }
 | 
			
		||||
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
 | 
			
		||||
// if it is present.
 | 
			
		||||
// If you remove this task, sources will not be generated.
 | 
			
		||||
task sourcesJar(type: Jar, dependsOn: classes) {
 | 
			
		||||
    classifier = "sources"
 | 
			
		||||
    from sourceSets.main.allSource
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 "LICENSE"
 | 
			
		||||
 | 
			
		||||
    from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jar.finalizedBy('reobfJar')
 | 
			
		||||
 | 
			
		||||
[compileJava, compileTestJava, compileTestModJava].forEach {
 | 
			
		||||
    it.configure {
 | 
			
		||||
        options.compilerArgs << "-Xlint" << "-Xlint:-processing"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
processResources {
 | 
			
		||||
    def hash = 'none'
 | 
			
		||||
    Set<String> contributors = []
 | 
			
		||||
    try {
 | 
			
		||||
        hash = ["git", "-C", projectDir, "rev-parse", "HEAD"].execute().text.trim()
 | 
			
		||||
 | 
			
		||||
        def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
 | 
			
		||||
        ["git", "-C", projectDir, "log", "--format=tformat:%an%n%cn"].execute().text.split('\n').each {
 | 
			
		||||
            if (!blacklist.contains(it)) contributors.add(it)
 | 
			
		||||
        }
 | 
			
		||||
    } catch (Exception e) {
 | 
			
		||||
        e.printStackTrace()
 | 
			
		||||
    }
 | 
			
		||||
    inputs.property "commithash", hash
 | 
			
		||||
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
 | 
			
		||||
 | 
			
		||||
    from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
        include 'data/computercraft/lua/rom/help/credits.txt'
 | 
			
		||||
 | 
			
		||||
        expand(
 | 
			
		||||
            'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n')
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    from(sourceSets.main.resources.srcDirs) {
 | 
			
		||||
        exclude 'data/computercraft/lua/rom/help/credits.txt'
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sourcesJar {
 | 
			
		||||
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Web tasks
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import com.hierynomus.gradle.license.tasks.LicenseCheck
 | 
			
		||||
import com.hierynomus.gradle.license.tasks.LicenseFormat
 | 
			
		||||
import com.modrinth.minotaur.TaskModrinthUpload
 | 
			
		||||
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'
 | 
			
		||||
    include 'logo.png'
 | 
			
		||||
    include 'images/**'
 | 
			
		||||
    into "${project.docsDir}/lua"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Check tasks
 | 
			
		||||
 | 
			
		||||
test {
 | 
			
		||||
    useJUnitPlatform()
 | 
			
		||||
    testLogging {
 | 
			
		||||
        events "skipped", "failed"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
jacocoTestReport {
 | 
			
		||||
    dependsOn('test')
 | 
			
		||||
    reports {
 | 
			
		||||
        xml.required = true
 | 
			
		||||
        html.required = true
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
check.dependsOn jacocoTestReport
 | 
			
		||||
 | 
			
		||||
license {
 | 
			
		||||
    mapping("java", "SLASHSTAR_STYLE")
 | 
			
		||||
@@ -347,7 +113,7 @@ license {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[licenseTest, licenseFormatTest, licenseTestMod, licenseFormatTestMod].forEach {
 | 
			
		||||
[licenseTest, licenseFormatTest].forEach {
 | 
			
		||||
    it.configure {
 | 
			
		||||
        include("**/*.java")
 | 
			
		||||
        header file('config/license/main.txt')
 | 
			
		||||
@@ -361,8 +127,8 @@ gradle.projectsEvaluated {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
task licenseAPI(type: LicenseCheck)
 | 
			
		||||
task licenseFormatAPI(type: LicenseFormat)
 | 
			
		||||
task licenseAPI(type: LicenseCheck);
 | 
			
		||||
task licenseFormatAPI(type: LicenseFormat);
 | 
			
		||||
[licenseAPI, licenseFormatAPI].forEach {
 | 
			
		||||
    it.configure {
 | 
			
		||||
        source = sourceSets.main.java
 | 
			
		||||
@@ -371,224 +137,23 @@ task licenseFormatAPI(type: LicenseFormat)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
task setupServer(type: Copy) {
 | 
			
		||||
    group "test server"
 | 
			
		||||
    description "Sets up the environment for the test server."
 | 
			
		||||
 | 
			
		||||
    from("src/testMod/server-files") {
 | 
			
		||||
        include "eula.txt"
 | 
			
		||||
        include "server.properties"
 | 
			
		||||
    }
 | 
			
		||||
    into "test-files/server"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
["Client", "Server"].forEach { name ->
 | 
			
		||||
    tasks.register("test$name", JavaExec.class).configure {
 | 
			
		||||
        it.group('In-game tests')
 | 
			
		||||
        it.description("Runs tests on a temporary Minecraft instance.")
 | 
			
		||||
        it.dependsOn(setupServer, "prepareRunTest$name", "cleanTest$name", 'compileTestModJava')
 | 
			
		||||
 | 
			
		||||
        // 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("runTest$name")
 | 
			
		||||
        exec.copyTo(it)
 | 
			
		||||
        it.setClasspath(exec.getClasspath())
 | 
			
		||||
        it.mainClass = exec.mainClass
 | 
			
		||||
        it.setArgs(exec.getArgs())
 | 
			
		||||
 | 
			
		||||
        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/test$name")
 | 
			
		||||
        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("jacocoTest${name}Report", JacocoReport.class).configure {
 | 
			
		||||
        it.group('In-game')
 | 
			
		||||
        it.description("Generate coverage reports for test$name")
 | 
			
		||||
        it.dependsOn("test$name")
 | 
			
		||||
 | 
			
		||||
        it.executionData(new File(buildDir, "jacoco/test${name}.exec"))
 | 
			
		||||
        it.sourceDirectories.from(sourceSets.main.allJava.srcDirs)
 | 
			
		||||
        it.classDirectories.from(new File(buildDir, "jacocoClassDump/test$name"))
 | 
			
		||||
 | 
			
		||||
        it.reports {
 | 
			
		||||
            xml.enabled true
 | 
			
		||||
            html.enabled true
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (name != "Client" || project.findProperty('cc.tweaked.clientTests') == 'true') {
 | 
			
		||||
        // Don't run client tests unless explicitly opted into them. They're a bit of a faff
 | 
			
		||||
        // to run and pretty flakey.
 | 
			
		||||
        check.dependsOn("jacocoTest${name}Report")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// 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/data/computercraft/lua/rom/help/changelog.md")
 | 
			
		||||
    inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
 | 
			
		||||
 | 
			
		||||
    doLast {
 | 
			
		||||
        def ok = true
 | 
			
		||||
 | 
			
		||||
        // Check we're targetting the current version
 | 
			
		||||
        def whatsnew = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md").readLines()
 | 
			
		||||
        if (whatsnew[0] != "New features in CC: Tweaked $mod_version") {
 | 
			
		||||
            ok = false
 | 
			
		||||
            project.logger.error("Expected `whatsnew.md' to target $mod_version.")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Check "read more" exists and trim it
 | 
			
		||||
        def idx = whatsnew.findIndexOf { it == 'Type "help changelog" to see the full version history.' }
 | 
			
		||||
        if (idx == -1) {
 | 
			
		||||
            ok = false
 | 
			
		||||
            project.logger.error("Must mention the changelog in whatsnew.md")
 | 
			
		||||
        } else {
 | 
			
		||||
            whatsnew = whatsnew.getAt(0..<idx)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Check whatsnew and changelog match.
 | 
			
		||||
        def versionChangelog = "# " + whatsnew.join("\n")
 | 
			
		||||
        def changelog = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/changelog.md").getText()
 | 
			
		||||
        if (!changelog.startsWith(versionChangelog)) {
 | 
			
		||||
            ok = false
 | 
			
		||||
            project.logger.error("whatsnew and changelog are not in sync")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!ok) throw new IllegalStateException("Could not check release")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
check.dependsOn checkRelease
 | 
			
		||||
 | 
			
		||||
def isStable = false
 | 
			
		||||
 | 
			
		||||
curseforge {
 | 
			
		||||
    apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
 | 
			
		||||
    project {
 | 
			
		||||
        id = '282001'
 | 
			
		||||
        releaseType = isStable ? 'release' : 'alpha'
 | 
			
		||||
        changelog = "Release notes can be found on the GitHub repository (https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
 | 
			
		||||
 | 
			
		||||
        addGameVersion "${mc_version}"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks.register('publishModrinth', TaskModrinthUpload.class).configure {
 | 
			
		||||
    dependsOn('assemble', 'reobfJar')
 | 
			
		||||
    onlyIf {
 | 
			
		||||
        project.hasProperty('modrinthApiKey')
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    token = project.hasProperty('modrinthApiKey') ? project.getProperty('modrinthApiKey') : ''
 | 
			
		||||
    projectId = 'gu7yAYhd'
 | 
			
		||||
    versionNumber = "${project.mc_version}-${project.mod_version}"
 | 
			
		||||
    uploadFile = jar
 | 
			
		||||
    versionType = isStable ? 'RELEASE' : 'ALPHA'
 | 
			
		||||
    addGameVersion(project.mc_version)
 | 
			
		||||
    changelog = "Release notes can be found on the [GitHub repository](https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
 | 
			
		||||
    addLoader('forge')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
tasks.withType(GenerateModuleMetadata) {
 | 
			
		||||
    // We can't generate metadata as that includes Forge as a dependency.
 | 
			
		||||
    enabled = false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// configure the maven publication
 | 
			
		||||
publishing {
 | 
			
		||||
    publications {
 | 
			
		||||
        maven(MavenPublication) {
 | 
			
		||||
            from components.java
 | 
			
		||||
 | 
			
		||||
            pom {
 | 
			
		||||
                name = 'CC: Tweaked'
 | 
			
		||||
                description = 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
 | 
			
		||||
                url = 'https://github.com/cc-tweaked/CC-Tweaked'
 | 
			
		||||
 | 
			
		||||
                scm {
 | 
			
		||||
                    url = 'https://github.com/cc-tweaked/CC-Tweaked.git'
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                issueManagement {
 | 
			
		||||
                    system = 'github'
 | 
			
		||||
                    url = 'https://github.com/cc-tweaked/CC-Tweaked/issues'
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                licenses {
 | 
			
		||||
                    license {
 | 
			
		||||
                        name = 'ComputerCraft Public License, Version 1.0'
 | 
			
		||||
                        url = 'https://github.com/cc-tweaked/CC-Tweaked/blob/mc-1.15.x/LICENSE'
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                withXml { asNode().remove(asNode().get("dependencies")) }
 | 
			
		||||
        mavenJava(MavenPublication) {
 | 
			
		||||
            // add all the jars that should be included when publishing to maven
 | 
			
		||||
            artifact(remapJar) {
 | 
			
		||||
                builtBy remapJar
 | 
			
		||||
            }
 | 
			
		||||
            artifact(sourcesJar) {
 | 
			
		||||
                builtBy remapSourcesJar
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // select the repositories you want to publish to
 | 
			
		||||
    repositories {
 | 
			
		||||
        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
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // uncomment to publish to the local maven
 | 
			
		||||
        // mavenLocal()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
githubRelease {
 | 
			
		||||
    token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
 | 
			
		||||
    owner 'cc-tweaked'
 | 
			
		||||
    repo 'CC-Tweaked'
 | 
			
		||||
    targetCommitish.set(project.provider({
 | 
			
		||||
        def cmd = ["git", "rev-parse", "--abbrev-ref", "HEAD"]
 | 
			
		||||
        println(cmd)
 | 
			
		||||
        def proc = cmd.execute([], projectDir)
 | 
			
		||||
        if (proc.waitFor() != 0) {
 | 
			
		||||
            println(proc.err.text.trim())
 | 
			
		||||
            throw new IllegalStateException("Executed with a non-0 exit code (${proc.exitValue()}).")
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        def branch = proc.text.trim()
 | 
			
		||||
        if (branch == "") throw new IllegalStateException("Cannot determine branch")
 | 
			
		||||
        return branch
 | 
			
		||||
    }))
 | 
			
		||||
 | 
			
		||||
    tagName "v${mc_version}-${mod_version}"
 | 
			
		||||
    releaseName "[${mc_version}] ${mod_version}"
 | 
			
		||||
    body.set(project.provider({
 | 
			
		||||
        "## " + new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
 | 
			
		||||
            .readLines()
 | 
			
		||||
            .takeWhile { it != 'Type "help changelog" to see the full version history.' }
 | 
			
		||||
            .join("\n").trim()
 | 
			
		||||
    }))
 | 
			
		||||
    prerelease isStable
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
def uploadTasks = ["publish", "curseforge", "publishModrinth", "githubRelease"]
 | 
			
		||||
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
 | 
			
		||||
 | 
			
		||||
task uploadAll(dependsOn: uploadTasks) {
 | 
			
		||||
    group "upload"
 | 
			
		||||
    description "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2491
									
								
								codeInspectionSettings.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2491
									
								
								codeInspectionSettings.xml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										61
									
								
								codeStyleSettings.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								codeStyleSettings.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
<code_scheme name="Project" version="173">
 | 
			
		||||
  <JSON>
 | 
			
		||||
    <option name="OBJECT_WRAPPING" value="1" />
 | 
			
		||||
    <option name="ARRAY_WRAPPING" value="1" />
 | 
			
		||||
  </JSON>
 | 
			
		||||
  <JavaCodeStyleSettings>
 | 
			
		||||
    <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND">
 | 
			
		||||
      <value />
 | 
			
		||||
    </option>
 | 
			
		||||
    <option name="JD_P_AT_EMPTY_LINES" value="false" />
 | 
			
		||||
    <option name="JD_PRESERVE_LINE_FEEDS" value="true" />
 | 
			
		||||
  </JavaCodeStyleSettings>
 | 
			
		||||
  <codeStyleSettings language="JAVA">
 | 
			
		||||
    <option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
 | 
			
		||||
    <option name="BRACE_STYLE" value="2" />
 | 
			
		||||
    <option name="CLASS_BRACE_STYLE" value="2" />
 | 
			
		||||
    <option name="METHOD_BRACE_STYLE" value="2" />
 | 
			
		||||
    <option name="LAMBDA_BRACE_STYLE" value="5" />
 | 
			
		||||
    <option name="ELSE_ON_NEW_LINE" value="true" />
 | 
			
		||||
    <option name="CATCH_ON_NEW_LINE" value="true" />
 | 
			
		||||
    <option name="FINALLY_ON_NEW_LINE" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_METHOD_CALL_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_METHOD_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_IF_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_WHILE_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_FOR_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_TRY_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_CATCH_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_SWITCH_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_SYNCHRONIZED_PARENTHESES" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
 | 
			
		||||
    <option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
 | 
			
		||||
    <option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
 | 
			
		||||
    <option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
 | 
			
		||||
    <option name="SPACE_BEFORE_TRY_PARENTHESES" value="false" />
 | 
			
		||||
    <option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
 | 
			
		||||
    <option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
 | 
			
		||||
    <option name="SPACE_BEFORE_SYNCHRONIZED_PARENTHESES" value="false" />
 | 
			
		||||
    <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="true" />
 | 
			
		||||
    <option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="true" />
 | 
			
		||||
    <option name="KEEP_SIMPLE_LAMBDAS_IN_ONE_LINE" value="true" />
 | 
			
		||||
    <option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="true" />
 | 
			
		||||
    <option name="IF_BRACE_FORCE" value="1" />
 | 
			
		||||
    <option name="DOWHILE_BRACE_FORCE" value="1" />
 | 
			
		||||
    <option name="WHILE_BRACE_FORCE" value="1" />
 | 
			
		||||
    <option name="FOR_BRACE_FORCE" value="1" />
 | 
			
		||||
    <option name="SPACE_WITHIN_ANNOTATION_PARENTHESES" value="true" />
 | 
			
		||||
    <indentOptions>
 | 
			
		||||
      <option name="CONTINUATION_INDENT_SIZE" value="4" />
 | 
			
		||||
    </indentOptions>
 | 
			
		||||
  </codeStyleSettings>
 | 
			
		||||
  <codeStyleSettings language="JSON">
 | 
			
		||||
    <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
 | 
			
		||||
    <option name="SPACE_WITHIN_BRACKETS" value="true" />
 | 
			
		||||
    <option name="SPACE_WITHIN_BRACES" value="true" />
 | 
			
		||||
    <indentOptions>
 | 
			
		||||
      <option name="INDENT_SIZE" value="4" />
 | 
			
		||||
      <option name="CONTINUATION_INDENT_SIZE" value="4" />
 | 
			
		||||
    </indentOptions>
 | 
			
		||||
  </codeStyleSettings>
 | 
			
		||||
</code_scheme>
 | 
			
		||||
@@ -58,20 +58,13 @@
 | 
			
		||||
        <module name="SimplifyBooleanExpression" />
 | 
			
		||||
        <module name="SimplifyBooleanReturn" />
 | 
			
		||||
        <module name="StringLiteralEquality" />
 | 
			
		||||
        <module name="UnnecessaryParentheses">
 | 
			
		||||
            <!-- Default minus LAND. -->
 | 
			
		||||
            <property name="tokens" value="EXPR,IDENT,NUM_DOUBLE,NUM_FLOAT,NUM_INT,NUM_LONG,STRING_LITERAL,LITERAL_NULL,LITERAL_FALSE,LITERAL_TRUE,ASSIGN,BAND_ASSIGN,BOR_ASSIGN,BSR_ASSIGN,BXOR_ASSIGN,DIV_ASSIGN,MINUS_ASSIGN,MOD_ASSIGN,PLUS_ASSIGN,SL_ASSIGN,SR_ASSIGN,STAR_ASSIGN,LAMBDA,TEXT_BLOCK_LITERAL_BEGIN,LITERAL_INSTANCEOF,GT,LT,GE,LE,EQUAL,NOT_EQUAL,UNARY_MINUS,UNARY_PLUS,INC,DEC,LNOT,BNOT,POST_INC,POST_DEC" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <!-- <module name="UnnecessaryParentheses" /> -->
 | 
			
		||||
        <module name="UnnecessarySemicolonAfterTypeMemberDeclaration" />
 | 
			
		||||
        <module name="UnnecessarySemicolonInTryWithResources" />
 | 
			
		||||
        <module name="UnnecessarySemicolonInEnumeration" />
 | 
			
		||||
 | 
			
		||||
        <!-- Imports -->
 | 
			
		||||
        <module name="CustomImportOrder">
 | 
			
		||||
            <property name="customImportOrderRules"
 | 
			
		||||
                value="THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE###STATIC"
 | 
			
		||||
            />
 | 
			
		||||
        </module>
 | 
			
		||||
        <!--<module name="CustomImportOrder" />-->
 | 
			
		||||
        <module name="IllegalImport" />
 | 
			
		||||
        <module name="RedundantImport" />
 | 
			
		||||
        <module name="UnusedImports" />
 | 
			
		||||
@@ -156,13 +149,8 @@
 | 
			
		||||
            <property name="tokens" value="COMMA" />
 | 
			
		||||
        </module>
 | 
			
		||||
        <module name="WhitespaceAround">
 | 
			
		||||
            <property name="ignoreEnhancedForColon" value="false" />
 | 
			
		||||
            <!-- Allow empty functions -->
 | 
			
		||||
            <property name="allowEmptyLambdas" value="true" />
 | 
			
		||||
            <property name="allowEmptyMethods" value="true" />
 | 
			
		||||
            <property name="allowEmptyConstructors" value="true" />
 | 
			
		||||
            <property name="allowEmptyTypes" 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>
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,9 @@
 | 
			
		||||
    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraft.java" />
 | 
			
		||||
    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraftAPI.java" />
 | 
			
		||||
 | 
			
		||||
    <!-- Some shadowed fields in mixins can't be renamed -->
 | 
			
		||||
    <suppress checks="StaticVariableName" files=".*[\\/]mixin[\\/].*" />
 | 
			
		||||
 | 
			
		||||
    <!-- The commands API is documented in Lua. -->
 | 
			
		||||
    <suppress checks="SummaryJavadocCheck" files=".*[\\/]CommandAPI.java" />
 | 
			
		||||
</suppressions>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
FROM gitpod/workspace-base
 | 
			
		||||
 | 
			
		||||
USER gitpod
 | 
			
		||||
 | 
			
		||||
RUN sudo apt-get -q update \
 | 
			
		||||
 && sudo apt-get install -yq openjdk-16-jdk python3-pip npm \
 | 
			
		||||
 && sudo pip3 install pre-commit \
 | 
			
		||||
 && sudo update-java-alternatives --set java-1.16.0-openjdk-amd64
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
# See https://pre-commit.com/hooks.html for more hooks
 | 
			
		||||
repos:
 | 
			
		||||
- repo: https://github.com/pre-commit/pre-commit-hooks
 | 
			
		||||
  rev: v4.0.1
 | 
			
		||||
  rev: v3.2.0
 | 
			
		||||
  hooks:
 | 
			
		||||
  - id: trailing-whitespace
 | 
			
		||||
  - id: end-of-file-fixer
 | 
			
		||||
@@ -16,7 +16,7 @@ repos:
 | 
			
		||||
    exclude: "tsconfig\\.json$"
 | 
			
		||||
 | 
			
		||||
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
 | 
			
		||||
  rev: 2.3.54
 | 
			
		||||
  rev: 2.3.5
 | 
			
		||||
  hooks:
 | 
			
		||||
  - id: editorconfig-checker
 | 
			
		||||
    args: ['-disable-indentation']
 | 
			
		||||
@@ -38,18 +38,12 @@ repos:
 | 
			
		||||
    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/testMod/server-files/|
 | 
			
		||||
    config/idea/
 | 
			
		||||
    src/test/server-files/|
 | 
			
		||||
    config/idea/|
 | 
			
		||||
    .vscode/
 | 
			
		||||
  )
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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")
 | 
			
		||||
```
 | 
			
		||||
@@ -1,24 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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.
 | 
			
		||||
@@ -1,39 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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()
 | 
			
		||||
```
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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()
 | 
			
		||||
```
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,24 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,22 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,22 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
module: [kind=event] redstone
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
The @{event!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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,28 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,15 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,25 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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")
 | 
			
		||||
```
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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
 | 
			
		||||
```
 | 
			
		||||
@@ -1,21 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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.")
 | 
			
		||||
```
 | 
			
		||||
@@ -1,25 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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)
 | 
			
		||||
```
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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.
 | 
			
		||||
4. @{boolean}: Whether this is a binary 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()
 | 
			
		||||
```
 | 
			
		||||
@@ -1,28 +0,0 @@
 | 
			
		||||
---
 | 
			
		||||
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 +0,0 @@
 | 
			
		||||
<meta name="theme-color" content="#c8d87c">
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 53 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 194 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 163 KiB  | 
							
								
								
									
										55
									
								
								doc/index.md
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								doc/index.md
									
									
									
									
									
								
							@@ -1,55 +0,0 @@
 | 
			
		||||
# 
 | 
			
		||||
CC: Tweaked is a mod for Minecraft which adds programmable computers, turtles and more to the game. A fork of the
 | 
			
		||||
much-beloved [ComputerCraft], it continues its legacy with better performance, stability, and a wealth of new features.
 | 
			
		||||
 | 
			
		||||
CC: Tweaked can be installed from [CurseForge] or [Modrinth]. It requires the [Minecraft Forge][forge] mod loader, but
 | 
			
		||||
[versions are available for Fabric][ccrestitched].
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
Controlled using the [Lua programming language][lua], CC: Tweaked's computers provides all the tools you need to start
 | 
			
		||||
writing code and automating your Minecraft world.
 | 
			
		||||
 | 
			
		||||
{.big-image}
 | 
			
		||||
 | 
			
		||||
While computers are incredibly powerful, they're rather limited by their inability to move about. *Turtles* are the
 | 
			
		||||
solution here. They can move about the world, placing and breaking blocks, swinging a sword to protect you from zombies,
 | 
			
		||||
or whatever else you program them to!
 | 
			
		||||
 | 
			
		||||
{.big-image}
 | 
			
		||||
 | 
			
		||||
Not all problems can be solved with a pickaxe though, and so CC: Tweaked also provides a bunch of additional peripherals
 | 
			
		||||
for your computers. You can play a tune with speakers, display text or images on a monitor, connect all your
 | 
			
		||||
computers together with modems, and much more.
 | 
			
		||||
 | 
			
		||||
Computers can now also interact with inventories such as chests, allowing you to build complex inventory and item
 | 
			
		||||
management systems.
 | 
			
		||||
 | 
			
		||||
{.big-image}
 | 
			
		||||
 | 
			
		||||
## Getting Started
 | 
			
		||||
While ComputerCraft is lovely for both experienced programmers and for people who have never coded before, it can be a
 | 
			
		||||
little daunting getting started. Thankfully, there's several fantastic tutorials out there:
 | 
			
		||||
 | 
			
		||||
 - [Direwolf20's ComputerCraft tutorials](https://www.youtube.com/watch?v=wrUHUhfCY5A "ComputerCraft Tutorial Episode 1 - HELP! and Hello World")
 | 
			
		||||
 - [Sethbling's ComputerCraft series](https://www.youtube.com/watch?v=DSsx4VSe-Uk "Programming Tutorial with Minecraft Turtles -- Ep. 1: Intro to Turtles and If-Then-Else_End")
 | 
			
		||||
 - [Lyqyd's Computer Basics 1](http://www.computercraft.info/forums2/index.php?/topic/15033-computer-basics-i/ "Computer Basics I")
 | 
			
		||||
 | 
			
		||||
Once you're a little more familiar with the mod, the sidebar and links below provide more detailed documentation on the
 | 
			
		||||
various APIs and peripherals provided by the mod.
 | 
			
		||||
 | 
			
		||||
If you get stuck, do pop in to the [Minecraft Computer Mod Discord guild][discord] or ComputerCraft's
 | 
			
		||||
[IRC channel][irc].
 | 
			
		||||
 | 
			
		||||
## Get Involved
 | 
			
		||||
CC: Tweaked lives on [GitHub]. If you've got any ideas, feedback or bugs please do [create an issue][bug].
 | 
			
		||||
 | 
			
		||||
[github]: https://github.com/cc-tweaked/CC-Tweaked/ "CC: Tweaked on GitHub"
 | 
			
		||||
[bug]: https://github.com/cc-tweaked/CC-Tweaked/issues/new/choose
 | 
			
		||||
[computercraft]: https://github.com/dan200/ComputerCraft "ComputerCraft on GitHub"
 | 
			
		||||
[curseforge]: https://minecraft.curseforge.com/projects/cc-tweaked "Download CC: Tweaked from CurseForge"
 | 
			
		||||
[modrinth]: https://modrinth.com/mod/gu7yAYhd "Download CC: Tweaked from Modrinth"
 | 
			
		||||
[forge]: https://files.minecraftforge.net/ "Download Minecraft Forge."
 | 
			
		||||
[ccrestitched]: https://www.curseforge.com/minecraft/mc-mods/cc-restitched "Download CC: Restitched from CurseForge"
 | 
			
		||||
[lua]: https://www.lua.org/ "Lua's main website"
 | 
			
		||||
[discord]: https://discord.computercraft.cc "The Minecraft Computer Mods Discord"
 | 
			
		||||
[irc]: http://webchat.esper.net/?channels=computercraft "IRC webchat on EsperNet"
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								doc/logo.png
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/logo.png
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
@@ -1,36 +0,0 @@
 | 
			
		||||
---  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
 | 
			
		||||
-- @since 1.87.0
 | 
			
		||||
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.
 | 
			
		||||
@since 1.74
 | 
			
		||||
]]
 | 
			
		||||
function complete(path, location, include_files, include_dirs) end
 | 
			
		||||
@@ -1,130 +0,0 @@
 | 
			
		||||
--[[-
 | 
			
		||||
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 a 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)
 | 
			
		||||
 | 
			
		||||
@changed 1.74 Added `completeFn` parameter.
 | 
			
		||||
@changed 1.80pr1 Added `default` parameter.
 | 
			
		||||
]]
 | 
			
		||||
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
 | 
			
		||||
-- @since 1.76
 | 
			
		||||
_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
 | 
			
		||||
@since 1.77
 | 
			
		||||
]]
 | 
			
		||||
_CC_DEFAULT_SETTINGS = _CC_DEFAULT_SETTINGS
 | 
			
		||||
@@ -1,181 +0,0 @@
 | 
			
		||||
--- The http library allows communicating with web servers, sending and
 | 
			
		||||
-- receiving data from them.
 | 
			
		||||
--
 | 
			
		||||
-- @module http
 | 
			
		||||
-- @since 1.1
 | 
			
		||||
 | 
			
		||||
--- 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.
 | 
			
		||||
--
 | 
			
		||||
-- @changed 1.63 Added argument for headers.
 | 
			
		||||
-- @changed 1.80pr1 Added argument for binary handles.
 | 
			
		||||
-- @changed 1.80pr1.6 Added support for table argument.
 | 
			
		||||
-- @changed 1.86.0 Added PATCH and TRACE methods.
 | 
			
		||||
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.
 | 
			
		||||
--
 | 
			
		||||
-- @changed 1.63 Added argument for headers.
 | 
			
		||||
-- @changed 1.80pr1 Response handles are now returned on error if available.
 | 
			
		||||
-- @changed 1.80pr1 Added argument for binary handles.
 | 
			
		||||
-- @changed 1.80pr1.6 Added support for table argument.
 | 
			
		||||
-- @changed 1.86.0 Added PATCH and TRACE methods.
 | 
			
		||||
--
 | 
			
		||||
-- @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.
 | 
			
		||||
--
 | 
			
		||||
-- @since 1.31
 | 
			
		||||
-- @changed 1.63 Added argument for headers.
 | 
			
		||||
-- @changed 1.80pr1 Response handles are now returned on error if available.
 | 
			
		||||
-- @changed 1.80pr1 Added argument for binary handles.
 | 
			
		||||
-- @changed 1.80pr1.6 Added support for table argument.
 | 
			
		||||
-- @changed 1.86.0 Added PATCH and TRACE methods.
 | 
			
		||||
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.
 | 
			
		||||
-- @since 1.80pr1.1
 | 
			
		||||
-- @changed 1.80pr1.3 No longer asynchronous.
 | 
			
		||||
-- @changed 1.95.3 Added User-Agent to default headers.
 | 
			
		||||
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.
 | 
			
		||||
-- @since 1.80pr1.3
 | 
			
		||||
-- @changed 1.95.3 Added User-Agent to default headers.
 | 
			
		||||
function websocketAsync(url, headers) end
 | 
			
		||||
							
								
								
									
										128
									
								
								doc/stub/os.lua
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								doc/stub/os.lua
									
									
									
									
									
								
							@@ -1,128 +0,0 @@
 | 
			
		||||
-- Defined in bios.lua
 | 
			
		||||
 | 
			
		||||
--[[- Loads the given API into the global environment.
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
@since 1.2
 | 
			
		||||
 | 
			
		||||
@deprecated When possible it's best to avoid using this function. It pollutes
 | 
			
		||||
the global table and can mask errors.
 | 
			
		||||
 | 
			
		||||
@{require} should be used to load libraries instead.
 | 
			
		||||
]]
 | 
			
		||||
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.
 | 
			
		||||
-- @since 1.2
 | 
			
		||||
-- @deprecated See @{os.loadAPI} for why.
 | 
			
		||||
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.
 | 
			
		||||
@changed 1.3 Added filter argument.
 | 
			
		||||
]]
 | 
			
		||||
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
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
--[[- 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 planks. _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.
 | 
			
		||||
@since 1.4
 | 
			
		||||
]]
 | 
			
		||||
function craft(limit) end
 | 
			
		||||
@@ -1,10 +1,17 @@
 | 
			
		||||
org.gradle.jvmargs=-Xmx3G
 | 
			
		||||
# Done to increase the memory available to gradle.
 | 
			
		||||
org.gradle.jvmargs=-Xmx1G
 | 
			
		||||
 | 
			
		||||
# Mod properties
 | 
			
		||||
mod_version=1.99.1
 | 
			
		||||
mod_version=1.97.1-beta
 | 
			
		||||
 | 
			
		||||
# Minecraft properties (update mods.toml when changing)
 | 
			
		||||
# Minecraft properties
 | 
			
		||||
mc_version=1.17.1
 | 
			
		||||
mapping_version=2021.09.05
 | 
			
		||||
forge_version=37.0.85
 | 
			
		||||
# NO SERIOUSLY, UPDATE mods.toml WHEN CHANGING
 | 
			
		||||
mappings_version=61
 | 
			
		||||
 | 
			
		||||
# Dependencies
 | 
			
		||||
cloth_config_version=5.0.34
 | 
			
		||||
fabric_loader_version=0.11.7
 | 
			
		||||
fabric_api_version=0.40.1+1.17
 | 
			
		||||
jankson_version=1.2.0
 | 
			
		||||
modmenu_version=2.0.2
 | 
			
		||||
cloth_api_version=2.0.54
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										
											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-7.3-bin.zip
 | 
			
		||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
zipStorePath=wrapper/dists
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										257
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										257
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Copyright © 2015-2021 the original authors.
 | 
			
		||||
# 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.
 | 
			
		||||
@@ -17,101 +17,67 @@
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
#
 | 
			
		||||
#   Gradle start up script for POSIX generated by Gradle.
 | 
			
		||||
#
 | 
			
		||||
#   Important for running:
 | 
			
		||||
#
 | 
			
		||||
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
 | 
			
		||||
#       noncompliant, but you have some other compliant shell such as ksh or
 | 
			
		||||
#       bash, then to run this script, type that shell name before the whole
 | 
			
		||||
#       command line, like:
 | 
			
		||||
#
 | 
			
		||||
#           ksh Gradle
 | 
			
		||||
#
 | 
			
		||||
#       Busybox and similar reduced shells will NOT work, because this script
 | 
			
		||||
#       requires all of these POSIX shell features:
 | 
			
		||||
#         * functions;
 | 
			
		||||
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
 | 
			
		||||
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
 | 
			
		||||
#         * compound commands having a testable exit status, especially «case»;
 | 
			
		||||
#         * various built-in commands including «command», «set», and «ulimit».
 | 
			
		||||
#
 | 
			
		||||
#   Important for patching:
 | 
			
		||||
#
 | 
			
		||||
#   (2) This script targets any POSIX shell, so it avoids extensions provided
 | 
			
		||||
#       by Bash, Ksh, etc; in particular arrays are avoided.
 | 
			
		||||
#
 | 
			
		||||
#       The "traditional" practice of packing multiple parameters into a
 | 
			
		||||
#       space-separated string is a well documented source of bugs and security
 | 
			
		||||
#       problems, so this is (mostly) avoided, by progressively accumulating
 | 
			
		||||
#       options in "$@", and eventually passing that to Java.
 | 
			
		||||
#
 | 
			
		||||
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
 | 
			
		||||
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
 | 
			
		||||
#       see the in-line comments for details.
 | 
			
		||||
#
 | 
			
		||||
#       There are tweaks for specific operating systems such as AIX, CygWin,
 | 
			
		||||
#       Darwin, MinGW, and NonStop.
 | 
			
		||||
#
 | 
			
		||||
#   (3) This script is generated from the Groovy template
 | 
			
		||||
#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 | 
			
		||||
#       within the Gradle project.
 | 
			
		||||
#
 | 
			
		||||
#       You can find Gradle at https://github.com/gradle/gradle/.
 | 
			
		||||
#
 | 
			
		||||
##
 | 
			
		||||
##  Gradle start up script for UN*X
 | 
			
		||||
##
 | 
			
		||||
##############################################################################
 | 
			
		||||
 | 
			
		||||
# Attempt to set APP_HOME
 | 
			
		||||
 | 
			
		||||
# Resolve links: $0 may be a link
 | 
			
		||||
app_path=$0
 | 
			
		||||
 | 
			
		||||
# Need this for daisy-chained symlinks.
 | 
			
		||||
while
 | 
			
		||||
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
 | 
			
		||||
    [ -h "$app_path" ]
 | 
			
		||||
do
 | 
			
		||||
    ls=$( ls -ld "$app_path" )
 | 
			
		||||
    link=${ls#*' -> '}
 | 
			
		||||
    case $link in             #(
 | 
			
		||||
      /*)   app_path=$link ;; #(
 | 
			
		||||
      *)    app_path=$APP_HOME$link ;;
 | 
			
		||||
    esac
 | 
			
		||||
PRG="$0"
 | 
			
		||||
# Need this for relative symlinks.
 | 
			
		||||
while [ -h "$PRG" ] ; do
 | 
			
		||||
    ls=`ls -ld "$PRG"`
 | 
			
		||||
    link=`expr "$ls" : '.*-> \(.*\)$'`
 | 
			
		||||
    if expr "$link" : '/.*' > /dev/null; then
 | 
			
		||||
        PRG="$link"
 | 
			
		||||
    else
 | 
			
		||||
        PRG=`dirname "$PRG"`"/$link"
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
 | 
			
		||||
SAVED="`pwd`"
 | 
			
		||||
cd "`dirname \"$PRG\"`/" >/dev/null
 | 
			
		||||
APP_HOME="`pwd -P`"
 | 
			
		||||
cd "$SAVED" >/dev/null
 | 
			
		||||
 | 
			
		||||
APP_NAME="Gradle"
 | 
			
		||||
APP_BASE_NAME=${0##*/}
 | 
			
		||||
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='"-Xmx64m" "-Xms64m"'
 | 
			
		||||
 | 
			
		||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
 | 
			
		||||
MAX_FD=maximum
 | 
			
		||||
MAX_FD="maximum"
 | 
			
		||||
 | 
			
		||||
warn () {
 | 
			
		||||
    echo "$*"
 | 
			
		||||
} >&2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
die () {
 | 
			
		||||
    echo
 | 
			
		||||
    echo "$*"
 | 
			
		||||
    echo
 | 
			
		||||
    exit 1
 | 
			
		||||
} >&2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# OS specific support (must be 'true' or 'false').
 | 
			
		||||
cygwin=false
 | 
			
		||||
msys=false
 | 
			
		||||
darwin=false
 | 
			
		||||
nonstop=false
 | 
			
		||||
case "$( uname )" in                #(
 | 
			
		||||
  CYGWIN* )         cygwin=true  ;; #(
 | 
			
		||||
  Darwin* )         darwin=true  ;; #(
 | 
			
		||||
  MSYS* | MINGW* )  msys=true    ;; #(
 | 
			
		||||
  NONSTOP* )        nonstop=true ;;
 | 
			
		||||
case "`uname`" in
 | 
			
		||||
  CYGWIN* )
 | 
			
		||||
    cygwin=true
 | 
			
		||||
    ;;
 | 
			
		||||
  Darwin* )
 | 
			
		||||
    darwin=true
 | 
			
		||||
    ;;
 | 
			
		||||
  MINGW* )
 | 
			
		||||
    msys=true
 | 
			
		||||
    ;;
 | 
			
		||||
  NONSTOP* )
 | 
			
		||||
    nonstop=true
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 | 
			
		||||
@@ -121,9 +87,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 | 
			
		||||
if [ -n "$JAVA_HOME" ] ; then
 | 
			
		||||
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
 | 
			
		||||
        # IBM's JDK on AIX uses strange locations for the executables
 | 
			
		||||
        JAVACMD=$JAVA_HOME/jre/sh/java
 | 
			
		||||
        JAVACMD="$JAVA_HOME/jre/sh/java"
 | 
			
		||||
    else
 | 
			
		||||
        JAVACMD=$JAVA_HOME/bin/java
 | 
			
		||||
        JAVACMD="$JAVA_HOME/bin/java"
 | 
			
		||||
    fi
 | 
			
		||||
    if [ ! -x "$JAVACMD" ] ; then
 | 
			
		||||
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
 | 
			
		||||
@@ -132,7 +98,7 @@ Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
location of your Java installation."
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    JAVACMD=java
 | 
			
		||||
    JAVACMD="java"
 | 
			
		||||
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
			
		||||
 | 
			
		||||
Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
@@ -140,95 +106,80 @@ location of your Java installation."
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Increase the maximum file descriptors if we can.
 | 
			
		||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
 | 
			
		||||
    case $MAX_FD in #(
 | 
			
		||||
      max*)
 | 
			
		||||
        MAX_FD=$( ulimit -H -n ) ||
 | 
			
		||||
            warn "Could not query maximum file descriptor limit"
 | 
			
		||||
    esac
 | 
			
		||||
    case $MAX_FD in  #(
 | 
			
		||||
      '' | soft) :;; #(
 | 
			
		||||
      *)
 | 
			
		||||
        ulimit -n "$MAX_FD" ||
 | 
			
		||||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
 | 
			
		||||
    esac
 | 
			
		||||
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
 | 
			
		||||
    MAX_FD_LIMIT=`ulimit -H -n`
 | 
			
		||||
    if [ $? -eq 0 ] ; then
 | 
			
		||||
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
 | 
			
		||||
            MAX_FD="$MAX_FD_LIMIT"
 | 
			
		||||
        fi
 | 
			
		||||
        ulimit -n $MAX_FD
 | 
			
		||||
        if [ $? -ne 0 ] ; then
 | 
			
		||||
            warn "Could not set maximum file descriptor limit: $MAX_FD"
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Collect all arguments for the java command, stacking in reverse order:
 | 
			
		||||
#   * args from the command line
 | 
			
		||||
#   * the main class name
 | 
			
		||||
#   * -classpath
 | 
			
		||||
#   * -D...appname settings
 | 
			
		||||
#   * --module-path (only if needed)
 | 
			
		||||
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
 | 
			
		||||
# For Darwin, add options to specify how the application appears in the dock
 | 
			
		||||
if $darwin; then
 | 
			
		||||
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Cygwin or MSYS, switch paths to Windows format before running java
 | 
			
		||||
if "$cygwin" || "$msys" ; then
 | 
			
		||||
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
 | 
			
		||||
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
 | 
			
		||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
 | 
			
		||||
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
 | 
			
		||||
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
 | 
			
		||||
 | 
			
		||||
    JAVACMD=$( cygpath --unix "$JAVACMD" )
 | 
			
		||||
    JAVACMD=`cygpath --unix "$JAVACMD"`
 | 
			
		||||
 | 
			
		||||
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
 | 
			
		||||
    for arg do
 | 
			
		||||
        if
 | 
			
		||||
            case $arg in                                #(
 | 
			
		||||
              -*)   false ;;                            # don't mess with options #(
 | 
			
		||||
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
 | 
			
		||||
                    [ -e "$t" ] ;;                      #(
 | 
			
		||||
              *)    false ;;
 | 
			
		||||
            esac
 | 
			
		||||
        then
 | 
			
		||||
            arg=$( cygpath --path --ignore --mixed "$arg" )
 | 
			
		||||
        fi
 | 
			
		||||
        # Roll the args list around exactly as many times as the number of
 | 
			
		||||
        # args, so each arg winds up back in the position where it started, but
 | 
			
		||||
        # possibly modified.
 | 
			
		||||
        #
 | 
			
		||||
        # NB: a `for` loop captures its iteration list before it begins, so
 | 
			
		||||
        # changing the positional parameters here affects neither the number of
 | 
			
		||||
        # iterations, nor the values presented in `arg`.
 | 
			
		||||
        shift                   # remove old arg
 | 
			
		||||
        set -- "$@" "$arg"      # push replacement arg
 | 
			
		||||
    # We build the pattern for arguments to be converted via cygpath
 | 
			
		||||
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
 | 
			
		||||
    SEP=""
 | 
			
		||||
    for dir in $ROOTDIRSRAW ; do
 | 
			
		||||
        ROOTDIRS="$ROOTDIRS$SEP$dir"
 | 
			
		||||
        SEP="|"
 | 
			
		||||
    done
 | 
			
		||||
    OURCYGPATTERN="(^($ROOTDIRS))"
 | 
			
		||||
    # Add a user-defined pattern to the cygpath arguments
 | 
			
		||||
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
 | 
			
		||||
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
 | 
			
		||||
    fi
 | 
			
		||||
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
 | 
			
		||||
    i=0
 | 
			
		||||
    for arg in "$@" ; do
 | 
			
		||||
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
 | 
			
		||||
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
 | 
			
		||||
 | 
			
		||||
        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
 | 
			
		||||
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
 | 
			
		||||
        else
 | 
			
		||||
            eval `echo args$i`="\"$arg\""
 | 
			
		||||
        fi
 | 
			
		||||
        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" ;;
 | 
			
		||||
    esac
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Collect all arguments for the java command;
 | 
			
		||||
#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
 | 
			
		||||
#     shell script including quotes and variable substitutions, so put them in
 | 
			
		||||
#     double quotes to make sure that they get re-expanded; and
 | 
			
		||||
#   * put everything else in single quotes, so that it's not re-expanded.
 | 
			
		||||
# Escape application args
 | 
			
		||||
save () {
 | 
			
		||||
    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
 | 
			
		||||
    echo " "
 | 
			
		||||
}
 | 
			
		||||
APP_ARGS=`save "$@"`
 | 
			
		||||
 | 
			
		||||
set -- \
 | 
			
		||||
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
 | 
			
		||||
        -classpath "$CLASSPATH" \
 | 
			
		||||
        org.gradle.wrapper.GradleWrapperMain \
 | 
			
		||||
        "$@"
 | 
			
		||||
 | 
			
		||||
# Use "xargs" to parse quoted args.
 | 
			
		||||
#
 | 
			
		||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
 | 
			
		||||
#
 | 
			
		||||
# In Bash we could simply go:
 | 
			
		||||
#
 | 
			
		||||
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
 | 
			
		||||
#   set -- "${ARGS[@]}" "$@"
 | 
			
		||||
#
 | 
			
		||||
# but POSIX shell has neither arrays nor command substitution, so instead we
 | 
			
		||||
# post-process each arg (as a line of input to sed) to backslash-escape any
 | 
			
		||||
# character that might be a shell metacharacter, then use eval to reverse
 | 
			
		||||
# that process (while maintaining the separation between arguments), and wrap
 | 
			
		||||
# the whole thing up as a single "set" statement.
 | 
			
		||||
#
 | 
			
		||||
# This will of course break if any of these variables contains a newline or
 | 
			
		||||
# an unmatched quote.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
eval "set -- $(
 | 
			
		||||
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
 | 
			
		||||
        xargs -n1 |
 | 
			
		||||
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
 | 
			
		||||
        tr '\n' ' '
 | 
			
		||||
    )" '"$@"'
 | 
			
		||||
# 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"
 | 
			
		||||
 | 
			
		||||
exec "$JAVACMD" "$@"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										178
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										178
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							@@ -1,89 +1,89 @@
 | 
			
		||||
@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
 | 
			
		||||
@rem  Gradle startup script for Windows
 | 
			
		||||
@rem
 | 
			
		||||
@rem ##########################################################################
 | 
			
		||||
 | 
			
		||||
@rem Set local scope for the variables with windows NT shell
 | 
			
		||||
if "%OS%"=="Windows_NT" setlocal
 | 
			
		||||
 | 
			
		||||
set DIRNAME=%~dp0
 | 
			
		||||
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="-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 execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
			
		||||
echo.
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
echo location of your Java installation.
 | 
			
		||||
 | 
			
		||||
goto fail
 | 
			
		||||
 | 
			
		||||
:findJavaFromJavaHome
 | 
			
		||||
set JAVA_HOME=%JAVA_HOME:"=%
 | 
			
		||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 | 
			
		||||
 | 
			
		||||
if exist "%JAVA_EXE%" goto execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
 | 
			
		||||
echo.
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
echo location of your Java installation.
 | 
			
		||||
 | 
			
		||||
goto fail
 | 
			
		||||
 | 
			
		||||
: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 %*
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
@rem End local scope for the variables with windows NT shell
 | 
			
		||||
if "%ERRORLEVEL%"=="0" goto mainEnd
 | 
			
		||||
 | 
			
		||||
:fail
 | 
			
		||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
 | 
			
		||||
rem the _cmd.exe /c_ return code!
 | 
			
		||||
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
 | 
			
		||||
exit /b 1
 | 
			
		||||
 | 
			
		||||
:mainEnd
 | 
			
		||||
if "%OS%"=="Windows_NT" endlocal
 | 
			
		||||
 | 
			
		||||
:omega
 | 
			
		||||
@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
 | 
			
		||||
@rem  Gradle startup script for Windows
 | 
			
		||||
@rem
 | 
			
		||||
@rem ##########################################################################
 | 
			
		||||
 | 
			
		||||
@rem Set local scope for the variables with windows NT shell
 | 
			
		||||
if "%OS%"=="Windows_NT" setlocal
 | 
			
		||||
 | 
			
		||||
set DIRNAME=%~dp0
 | 
			
		||||
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="-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 execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
			
		||||
echo.
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
echo location of your Java installation.
 | 
			
		||||
 | 
			
		||||
goto fail
 | 
			
		||||
 | 
			
		||||
:findJavaFromJavaHome
 | 
			
		||||
set JAVA_HOME=%JAVA_HOME:"=%
 | 
			
		||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 | 
			
		||||
 | 
			
		||||
if exist "%JAVA_EXE%" goto execute
 | 
			
		||||
 | 
			
		||||
echo.
 | 
			
		||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
 | 
			
		||||
echo.
 | 
			
		||||
echo Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
echo location of your Java installation.
 | 
			
		||||
 | 
			
		||||
goto fail
 | 
			
		||||
 | 
			
		||||
: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 %*
 | 
			
		||||
 | 
			
		||||
:end
 | 
			
		||||
@rem End local scope for the variables with windows NT shell
 | 
			
		||||
if "%ERRORLEVEL%"=="0" goto mainEnd
 | 
			
		||||
 | 
			
		||||
:fail
 | 
			
		||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
 | 
			
		||||
rem the _cmd.exe /c_ return code!
 | 
			
		||||
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
 | 
			
		||||
exit /b 1
 | 
			
		||||
 | 
			
		||||
:mainEnd
 | 
			
		||||
if "%OS%"=="Windows_NT" endlocal
 | 
			
		||||
 | 
			
		||||
:omega
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										115
									
								
								illuaminate.sexp
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								illuaminate.sexp
									
									
									
									
									
								
							@@ -1,115 +0,0 @@
 | 
			
		||||
; -*- 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/cc-tweaked/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))
 | 
			
		||||
 | 
			
		||||
    (allow-clarifying-parens true)
 | 
			
		||||
 | 
			
		||||
    ;; 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
 | 
			
		||||
      _HOST
 | 
			
		||||
      ;; 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__)))
 | 
			
		||||
							
								
								
									
										808
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										808
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,808 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "tweaked.cc",
 | 
			
		||||
  "version": "1.0.0",
 | 
			
		||||
  "lockfileVersion": 2,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "tweaked.cc",
 | 
			
		||||
      "version": "1.0.0",
 | 
			
		||||
      "license": "BSD-3-Clause",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "preact": "^10.5.5",
 | 
			
		||||
        "tslib": "^2.0.3"
 | 
			
		||||
      },
 | 
			
		||||
      "devDependencies": {
 | 
			
		||||
        "@rollup/plugin-typescript": "^8.2.5",
 | 
			
		||||
        "requirejs": "^2.3.6",
 | 
			
		||||
        "rollup": "^2.33.1",
 | 
			
		||||
        "rollup-plugin-terser": "^7.0.2",
 | 
			
		||||
        "typescript": "^4.0.5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@babel/code-frame": {
 | 
			
		||||
      "version": "7.16.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
 | 
			
		||||
      "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@babel/highlight": "^7.16.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6.9.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@babel/helper-validator-identifier": {
 | 
			
		||||
      "version": "7.15.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
 | 
			
		||||
      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6.9.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@babel/highlight": {
 | 
			
		||||
      "version": "7.16.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz",
 | 
			
		||||
      "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@babel/helper-validator-identifier": "^7.15.7",
 | 
			
		||||
        "chalk": "^2.0.0",
 | 
			
		||||
        "js-tokens": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=6.9.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@rollup/plugin-typescript": {
 | 
			
		||||
      "version": "8.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@rollup/pluginutils": "^3.1.0",
 | 
			
		||||
        "resolve": "^1.17.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "rollup": "^2.14.0",
 | 
			
		||||
        "tslib": "*",
 | 
			
		||||
        "typescript": ">=3.7.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@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,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/estree": "0.0.39",
 | 
			
		||||
        "estree-walker": "^1.0.1",
 | 
			
		||||
        "picomatch": "^2.2.2"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "rollup": "^1.20.0||^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@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
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@types/node": {
 | 
			
		||||
      "version": "16.11.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz",
 | 
			
		||||
      "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ansi-styles": {
 | 
			
		||||
      "version": "3.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-convert": "^1.9.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/buffer-from": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/chalk": {
 | 
			
		||||
      "version": "2.4.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
 | 
			
		||||
      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-styles": "^3.2.1",
 | 
			
		||||
        "escape-string-regexp": "^1.0.5",
 | 
			
		||||
        "supports-color": "^5.3.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/color-convert": {
 | 
			
		||||
      "version": "1.9.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
 | 
			
		||||
      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-name": "1.1.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/color-name": {
 | 
			
		||||
      "version": "1.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
 | 
			
		||||
      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/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
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/escape-string-regexp": {
 | 
			
		||||
      "version": "1.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
 | 
			
		||||
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.8.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/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
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/fsevents": {
 | 
			
		||||
      "version": "2.3.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
 | 
			
		||||
      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "hasInstallScript": true,
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/function-bind": {
 | 
			
		||||
      "version": "1.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/has": {
 | 
			
		||||
      "version": "1.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "function-bind": "^1.1.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/has-flag": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/is-core-module": {
 | 
			
		||||
      "version": "2.8.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
 | 
			
		||||
      "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "has": "^1.0.3"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jest-worker": {
 | 
			
		||||
      "version": "26.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
 | 
			
		||||
      "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@types/node": "*",
 | 
			
		||||
        "merge-stream": "^2.0.0",
 | 
			
		||||
        "supports-color": "^7.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.13.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jest-worker/node_modules/has-flag": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/jest-worker/node_modules/supports-color": {
 | 
			
		||||
      "version": "7.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "has-flag": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/js-tokens": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/merge-stream": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/path-parse": {
 | 
			
		||||
      "version": "1.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
 | 
			
		||||
      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/picomatch": {
 | 
			
		||||
      "version": "2.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8.6"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/jonschlinkert"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/preact": {
 | 
			
		||||
      "version": "10.6.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.1.tgz",
 | 
			
		||||
      "integrity": "sha512-ydCg+ISIq70vqiThvNWStZWLRjR9U2awP/JAmGdWUKm9+Tyuy+MqVdAIyEByeIspAVtD4GWC/SJtxO8XD4knVA==",
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/preact"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/randombytes": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "safe-buffer": "^5.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/requirejs": {
 | 
			
		||||
      "version": "2.3.6",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
 | 
			
		||||
      "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "r_js": "bin/r.js",
 | 
			
		||||
        "r.js": "bin/r.js"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.4.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/resolve": {
 | 
			
		||||
      "version": "1.20.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
 | 
			
		||||
      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-core-module": "^2.2.0",
 | 
			
		||||
        "path-parse": "^1.0.6"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/sponsors/ljharb"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/rollup": {
 | 
			
		||||
      "version": "2.60.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.1.tgz",
 | 
			
		||||
      "integrity": "sha512-akwfnpjY0rXEDSn1UTVfKXJhPsEBu+imi1gqBA1ZkHGydUnkV/fWCC90P7rDaLEW8KTwBcS1G3N4893Ndz+jwg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "rollup": "dist/bin/rollup"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/rollup-plugin-terser": {
 | 
			
		||||
      "version": "7.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@babel/code-frame": "^7.10.4",
 | 
			
		||||
        "jest-worker": "^26.2.1",
 | 
			
		||||
        "serialize-javascript": "^4.0.0",
 | 
			
		||||
        "terser": "^5.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "rollup": "^2.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/safe-buffer": {
 | 
			
		||||
      "version": "5.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "funding": [
 | 
			
		||||
        {
 | 
			
		||||
          "type": "github",
 | 
			
		||||
          "url": "https://github.com/sponsors/feross"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "patreon",
 | 
			
		||||
          "url": "https://www.patreon.com/feross"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          "type": "consulting",
 | 
			
		||||
          "url": "https://feross.org/support"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/serialize-javascript": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "randombytes": "^2.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/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,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/source-map-support": {
 | 
			
		||||
      "version": "0.5.21",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
 | 
			
		||||
      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "buffer-from": "^1.0.0",
 | 
			
		||||
        "source-map": "^0.6.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/source-map-support/node_modules/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,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/supports-color": {
 | 
			
		||||
      "version": "5.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "has-flag": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/terser": {
 | 
			
		||||
      "version": "5.10.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
 | 
			
		||||
      "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "commander": "^2.20.0",
 | 
			
		||||
        "source-map": "~0.7.2",
 | 
			
		||||
        "source-map-support": "~0.5.20"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "terser": "bin/terser"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "acorn": "^8.5.0"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependenciesMeta": {
 | 
			
		||||
        "acorn": {
 | 
			
		||||
          "optional": true
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/tslib": {
 | 
			
		||||
      "version": "2.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/typescript": {
 | 
			
		||||
      "version": "4.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "tsc": "bin/tsc",
 | 
			
		||||
        "tsserver": "bin/tsserver"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4.2.0"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@babel/code-frame": {
 | 
			
		||||
      "version": "7.16.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
 | 
			
		||||
      "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@babel/highlight": "^7.16.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@babel/helper-validator-identifier": {
 | 
			
		||||
      "version": "7.15.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
 | 
			
		||||
      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "@babel/highlight": {
 | 
			
		||||
      "version": "7.16.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz",
 | 
			
		||||
      "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@babel/helper-validator-identifier": "^7.15.7",
 | 
			
		||||
        "chalk": "^2.0.0",
 | 
			
		||||
        "js-tokens": "^4.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@rollup/plugin-typescript": {
 | 
			
		||||
      "version": "8.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==",
 | 
			
		||||
      "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
 | 
			
		||||
    },
 | 
			
		||||
    "@types/node": {
 | 
			
		||||
      "version": "16.11.10",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.10.tgz",
 | 
			
		||||
      "integrity": "sha512-3aRnHa1KlOEEhJ6+CvyHKK5vE9BcLGjtUpwvqYLRvYNQKMfabu3BwfJaA/SLW8dxe28LsNDjtHwePTuzn3gmOA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "ansi-styles": {
 | 
			
		||||
      "version": "3.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "color-convert": "^1.9.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "buffer-from": {
 | 
			
		||||
      "version": "1.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "chalk": {
 | 
			
		||||
      "version": "2.4.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
 | 
			
		||||
      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "ansi-styles": "^3.2.1",
 | 
			
		||||
        "escape-string-regexp": "^1.0.5",
 | 
			
		||||
        "supports-color": "^5.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "color-convert": {
 | 
			
		||||
      "version": "1.9.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
 | 
			
		||||
      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "color-name": "1.1.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "color-name": {
 | 
			
		||||
      "version": "1.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
 | 
			
		||||
      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
 | 
			
		||||
      "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
 | 
			
		||||
    },
 | 
			
		||||
    "escape-string-regexp": {
 | 
			
		||||
      "version": "1.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
 | 
			
		||||
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
 | 
			
		||||
      "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.3.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
 | 
			
		||||
      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
 | 
			
		||||
      "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"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "has-flag": {
 | 
			
		||||
      "version": "3.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
 | 
			
		||||
      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "is-core-module": {
 | 
			
		||||
      "version": "2.8.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
 | 
			
		||||
      "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "has": "^1.0.3"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "jest-worker": {
 | 
			
		||||
      "version": "26.6.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
 | 
			
		||||
      "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@types/node": "*",
 | 
			
		||||
        "merge-stream": "^2.0.0",
 | 
			
		||||
        "supports-color": "^7.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "has-flag": {
 | 
			
		||||
          "version": "4.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "supports-color": {
 | 
			
		||||
          "version": "7.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "has-flag": "^4.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "js-tokens": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "merge-stream": {
 | 
			
		||||
      "version": "2.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "path-parse": {
 | 
			
		||||
      "version": "1.0.7",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
 | 
			
		||||
      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "picomatch": {
 | 
			
		||||
      "version": "2.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "preact": {
 | 
			
		||||
      "version": "10.6.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/preact/-/preact-10.6.1.tgz",
 | 
			
		||||
      "integrity": "sha512-ydCg+ISIq70vqiThvNWStZWLRjR9U2awP/JAmGdWUKm9+Tyuy+MqVdAIyEByeIspAVtD4GWC/SJtxO8XD4knVA=="
 | 
			
		||||
    },
 | 
			
		||||
    "randombytes": {
 | 
			
		||||
      "version": "2.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "safe-buffer": "^5.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "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.20.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
 | 
			
		||||
      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "is-core-module": "^2.2.0",
 | 
			
		||||
        "path-parse": "^1.0.6"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "rollup": {
 | 
			
		||||
      "version": "2.60.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.60.1.tgz",
 | 
			
		||||
      "integrity": "sha512-akwfnpjY0rXEDSn1UTVfKXJhPsEBu+imi1gqBA1ZkHGydUnkV/fWCC90P7rDaLEW8KTwBcS1G3N4893Ndz+jwg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "fsevents": "~2.3.2"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "rollup-plugin-terser": {
 | 
			
		||||
      "version": "7.0.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@babel/code-frame": "^7.10.4",
 | 
			
		||||
        "jest-worker": "^26.2.1",
 | 
			
		||||
        "serialize-javascript": "^4.0.0",
 | 
			
		||||
        "terser": "^5.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "safe-buffer": {
 | 
			
		||||
      "version": "5.2.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "serialize-javascript": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "randombytes": "^2.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "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.21",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
 | 
			
		||||
      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
 | 
			
		||||
      "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
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "supports-color": {
 | 
			
		||||
      "version": "5.5.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
 | 
			
		||||
      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "has-flag": "^3.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "terser": {
 | 
			
		||||
      "version": "5.10.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
 | 
			
		||||
      "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "commander": "^2.20.0",
 | 
			
		||||
        "source-map": "~0.7.2",
 | 
			
		||||
        "source-map-support": "~0.5.20"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "tslib": {
 | 
			
		||||
      "version": "2.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
 | 
			
		||||
    },
 | 
			
		||||
    "typescript": {
 | 
			
		||||
      "version": "4.5.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
 | 
			
		||||
      "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								package.json
									
									
									
									
									
								
							@@ -1,18 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "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": "^8.2.5",
 | 
			
		||||
    "requirejs": "^2.3.6",
 | 
			
		||||
    "rollup": "^2.33.1",
 | 
			
		||||
    "rollup-plugin-terser": "^7.0.2",
 | 
			
		||||
    "typescript": "^4.0.5"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										627
									
								
								patchwork.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										627
									
								
								patchwork.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,627 @@
 | 
			
		||||
# Just my list of things I have ported over
 | 
			
		||||
 | 
			
		||||
Format for the changelog of ported stuff
 | 
			
		||||
```
 | 
			
		||||
commit    // Shows commit from CC:T
 | 
			
		||||
commit2   // Shows a commit that is the same thing, just a clean up, only if right after
 | 
			
		||||
Title     // Commit Title
 | 
			
		||||
SubScript // Desc of commit
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
If a edit that is present in CC:T is not needed, I will skip over it.
 | 
			
		||||
Any and all references to an issue number, are to be found on CC:T's repo.
 | 
			
		||||
 | 
			
		||||
Any commit that starts with `[Patchwork]` are purely edits made by my hand, and not based on other commits from CC:T, this is to help differentiate my changes from the official changes
 | 
			
		||||
 | 
			
		||||
Lines that are found above a commit in this log like this one, (excluding this one) are comments about how i had to implement things that are not a simple 1:1 (excluding fabric/forge differences) conversion
 | 
			
		||||
 | 
			
		||||
```md
 | 
			
		||||
5155e18de279a193c558aa029963486fd1294769
 | 
			
		||||
Added translation for Vietnamese
 | 
			
		||||
Co-authored-by: Boom <boom@flyingpackets.net>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
7e121ff72f2b1504cd6af47b57500876682bac45
 | 
			
		||||
ae6124d1f477487abab1858abde8c4ec49dfee3c
 | 
			
		||||
Translations for Vienamese
 | 
			
		||||
Co-authored-by: Boom <boom@flyingpackets.net>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
59de21eae29849988e77fad6bc335f5ce78dfec7
 | 
			
		||||
Handle tabs when parsing JSON
 | 
			
		||||
Fixes #539
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
748ebbe66bf0a4239bde34f557e4b4b75d61d990
 | 
			
		||||
Bump to 1.92.0
 | 
			
		||||
A tiny release, but there's new features so it's technically a minor
 | 
			
		||||
bump.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Cherry Picked because this update was partially related to forge updates rather than mod updates
 | 
			
		||||
```
 | 
			
		||||
8b4a01df27ff7f6fa9ffd9c2188c6e3166edd515
 | 
			
		||||
Update to Minecraft 1.16.3
 | 
			
		||||
 | 
			
		||||
I hope the Fabric folks now realise this is gonna be a race of who can
 | 
			
		||||
update first :p. Either way, this was a very easy update - only changes
 | 
			
		||||
were due to unrelated Forge changes.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
87393e8aef9ddfaca465d626ee7cff5ff499a7e8
 | 
			
		||||
Fix additional `-` in docs
 | 
			
		||||
 | 
			
		||||
Why isn't this automatically stripped! Bad squid.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
275ca58a82c627128a145a8754cbe32568536bd9
 | 
			
		||||
HTTP rules now allow filtering by port
 | 
			
		||||
 | 
			
		||||
The HTTP filtering system becomes even more complex! Though in this
 | 
			
		||||
case, it's pretty minimal, and definitely worth doing.
 | 
			
		||||
 | 
			
		||||
For instance, the following rule will allow connecting to localhost on
 | 
			
		||||
port :8080.
 | 
			
		||||
 | 
			
		||||
    [[http.rules]]
 | 
			
		||||
    host = "127.0.0.1"
 | 
			
		||||
    port = 8080
 | 
			
		||||
    action = "allow"
 | 
			
		||||
 | 
			
		||||
    # Other rules as before.
 | 
			
		||||
 | 
			
		||||
Closes #540
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
The alterations in ColourUtils.java were not needed so they were not ported over
 | 
			
		||||
```
 | 
			
		||||
6f868849ab2f264508e12c184cc56f2632aaf5bc
 | 
			
		||||
Use tags to check if something is a dye
 | 
			
		||||
 | 
			
		||||
We half did this already, just needed to change a couple of checks.
 | 
			
		||||
Closes #541.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
6cee4efcd3610536ee74330cd728f7371011e5a8
 | 
			
		||||
Fix incorrect open container check
 | 
			
		||||
 | 
			
		||||
Was this always broken, or did it happen in a Minecraft update? Don't
 | 
			
		||||
know, but it's a very silly mistake either way. Fixes #544
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
0832974725b2478c5227b81f82c35bbf03cf6aba
 | 
			
		||||
Translations for Swedish
 | 
			
		||||
 | 
			
		||||
Co-authored-by: David Isaksson <davidisaksson93@gmail.com>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
84036d97d99efd8762e0170002060ae3471508bf
 | 
			
		||||
Fix io.open documentation
 | 
			
		||||
 | 
			
		||||
Well, that was silly.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
I set the default properties for computers as `Block.GLASS` and then set their strength to `2F` and their soundgroup to stone
 | 
			
		||||
```
 | 
			
		||||
8472112fc1eaad18ed6ed2c6c62b040fe421e81a
 | 
			
		||||
Don't propagate adjacent redstone signals for computers (#549)
 | 
			
		||||
 | 
			
		||||
Minecraft propagates "strong" redstone signals (such as those directly
 | 
			
		||||
from comparators or repeaters) through solid blocks. This includes
 | 
			
		||||
computers, which is a little annoying as it means one cannot feed
 | 
			
		||||
redstone wire from one side and a repeater from another.
 | 
			
		||||
 | 
			
		||||
This changes computers to not propagate strong redstone signals, in the
 | 
			
		||||
same way transparent blocks like glass do.
 | 
			
		||||
 | 
			
		||||
Closes #548.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
30d35883b83831900b34040f0131c7e06f5c3e52
 | 
			
		||||
Fix my docs
 | 
			
		||||
 | 
			
		||||
Thanks @plt-hokusai. Kinda embarrassing this slipped through - I
 | 
			
		||||
evidently need to lint examples too.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
34a2c835d412c0d9e1fb20a42b7f2cd2738289c7
 | 
			
		||||
Add color table to docs (#553)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
All API Documentation updates,
 | 
			
		||||
`Not Needed` for this repo.
 | 
			
		||||
```
 | 
			
		||||
93068402a2ffec00eedb8fe2d859ebdc005a1989
 | 
			
		||||
Document remaining OS functions (#554)
 | 
			
		||||
 | 
			
		||||
01d81cb91da938836f953b290ad6b8fc87cb7e35
 | 
			
		||||
Update illuaminate CSS for deprecation (#556)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Not Needed
 | 
			
		||||
4766833cf2d041ed179529eecb9402ad09b2b79b
 | 
			
		||||
Bump JEI/crafttweaker versions
 | 
			
		||||
 | 
			
		||||
In my defence, they weren't out when I started the 1.15 update.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
bf6053906dc6a3c7b0d40d5b097e745dce1f33bc
 | 
			
		||||
Fix TBO norm issues on old GPUs
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Not Needed
 | 
			
		||||
113b560a201dbdea9de2a2ef536bcce1d6e51978
 | 
			
		||||
Update configuration to match latest illuaminate
 | 
			
		||||
 | 
			
		||||
Ooooooh, it's all fancy now. Well, that or horrifically broken.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
c334423d42ba3b653ac3a8c27bce7970457f8f96
 | 
			
		||||
Add function to get window visibility
 | 
			
		||||
 | 
			
		||||
Closes #562
 | 
			
		||||
 | 
			
		||||
Co-authored-by: devomaa <lmao@distruzione.org>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[WARN] Could not implement changes to the following files
 | 
			
		||||
* `src/main/java/dan200/computercraft/ComputerCraft.java` < Structure too different, cannot find equivalent to alter
 | 
			
		||||
* `src/main/java/dan200/computercraft/shared/Config.java` < Files Does not exist in this repo
 | 
			
		||||
```
 | 
			
		||||
84a6bb1cf3b0668ddc7d8c409a2477a42390e3f7
 | 
			
		||||
Make generic peripherals on by default
 | 
			
		||||
 | 
			
		||||
This is a long way away from "feature complete" as it were. However,
 | 
			
		||||
it's definitely at a point where it's suitable for general usage - I'm
 | 
			
		||||
happy with the API, and don't think I'm going to be breaking things any
 | 
			
		||||
time soon.
 | 
			
		||||
 | 
			
		||||
That said, things aren't exposed yet for Java-side public consumption. I
 | 
			
		||||
was kinda waiting until working on Plethora to actually do that, but not
 | 
			
		||||
sure if/when that'll happen.
 | 
			
		||||
 | 
			
		||||
If someone else wants to work on an integration mod (or just adding
 | 
			
		||||
integrations for their own mod), do get in touch and I can work out how
 | 
			
		||||
to expose this.
 | 
			
		||||
 | 
			
		||||
Closes #452
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Not Needed
 | 
			
		||||
6aae4e576621090840724e094aa25e51696530fc
 | 
			
		||||
Remove superfluous imports
 | 
			
		||||
 | 
			
		||||
Hah, this is embarassing
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[TODO] [M3R1-01] Code has been applied, players still dont get achievments
 | 
			
		||||
```
 | 
			
		||||
f6160bdc57b3d9850607c2c7c2ce9734b4963478
 | 
			
		||||
Fix players not getting advancements when they own turtles
 | 
			
		||||
 | 
			
		||||
When we construct a new ServerPlayerEntity (and thus TurtlePlayer), we
 | 
			
		||||
get the current (global) advancement state and call .setPlayer() on it.
 | 
			
		||||
 | 
			
		||||
As grantCriterion blocks FakePlayers from getting advancements, this
 | 
			
		||||
means a player will no longer receive any advancements, as the "wrong"
 | 
			
		||||
player object is being consulted.
 | 
			
		||||
 | 
			
		||||
As a temporary work around, we attempt to restore the previous player to
 | 
			
		||||
the advancement store. I'll try to upstream something into Forge to
 | 
			
		||||
resolve this properly.
 | 
			
		||||
 | 
			
		||||
Fixes #564
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
17a932920711a5c0361a5048c9e0a5e7a58e6364
 | 
			
		||||
Bump cct-javadoc version
 | 
			
		||||
 | 
			
		||||
Documentation will now be sorted (somewhat) correctly!
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
a6fcfb6af2fc1bef8ca3a19122c9267549202424
 | 
			
		||||
Draw in-hand pocket computers with blending
 | 
			
		||||
 | 
			
		||||
It might be worth switching to RenderTypes here, rather than a pure
 | 
			
		||||
Tesselator, but this'll do for now.
 | 
			
		||||
 | 
			
		||||
Fixes Zundrel/cc-tweaked-fabric#20.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
c58441b29c3715f092e7f3747bb3ec65ae5a3d29
 | 
			
		||||
Various SNBT parsing improvements
 | 
			
		||||
 | 
			
		||||
Correctly handle:
 | 
			
		||||
 - Typed arrays ([I; 1, 2, 3])
 | 
			
		||||
 - All suffixed numbers (1.2d)
 | 
			
		||||
 - Single-quoted strings
 | 
			
		||||
 | 
			
		||||
Fixes #559
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
e2a635b6e5f5942f999213434054e06833c5cb06
 | 
			
		||||
Dont fail when codecov is being finicky
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
666e83cf4fd0eb327f465d5b919a708790f99b00
 | 
			
		||||
Fix JSON objects failing to pass
 | 
			
		||||
 | 
			
		||||
Maybe I should run the whole test suite, not just the things I think
 | 
			
		||||
matter? Nah....
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
741adfa7bb2b950d2851c3f0072d6a4769f22773
 | 
			
		||||
 | 
			
		||||
Use blit to draw boxes, add colors.toBlit (#570)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
d13bd2cce8d102ad7f61f557e707d6fe3731bc37
 | 
			
		||||
 | 
			
		||||
use arg[0] in all usage printouts (#571)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
74ac5bb3d17e5bee30643a5d6702696600c06229
 | 
			
		||||
 | 
			
		||||
Bump to 1.94.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
[TODO] [M3R1-02] Zero Clue how to reimplement this in fabric.
 | 
			
		||||
```
 | 
			
		||||
c8aeddedd4ed430f9cb6428676ebb4fa39834182
 | 
			
		||||
 | 
			
		||||
Auto-generate monitor models
 | 
			
		||||
 | 
			
		||||
I didn't think it was worth it, and then I found myself needing to
 | 
			
		||||
update a dozen of them. The code isn't especially pretty, but it works,
 | 
			
		||||
so that's fine.
 | 
			
		||||
 | 
			
		||||
Also fixes several issues with us using the wrong texture (closes #572).
 | 
			
		||||
I've put together a wiki page[1] which describes each texture in a
 | 
			
		||||
little more detail.
 | 
			
		||||
 | 
			
		||||
[1] https://github.com/SquidDev-CC/CC-Tweaked/wiki/Monitor-texture-reference
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
7f90f2f7cadce0d5b9177b16626979591bce8137
 | 
			
		||||
 | 
			
		||||
Clean up some examples a little bit
 | 
			
		||||
 | 
			
		||||
Would be good if they didn't crash and burn on entry :).
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
f194f4fa3a17c48ff1a9088d50063f4a675a23b6
 | 
			
		||||
 | 
			
		||||
Fix epoch documentation to use milliseconds (#580)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
d2a1a00dc43e5b65f6b64111ce76dd3db16c919f
 | 
			
		||||
 | 
			
		||||
Clear gets an option to reset the palette (#582)
 | 
			
		||||
 | 
			
		||||
Fixes #555.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
aab0cd34cd64fdf837ff1c3b91a957a25c2cf7f9
 | 
			
		||||
 | 
			
		||||
Use term.blit on original paint render
 | 
			
		||||
 | 
			
		||||
This makes it super speedy, meaning an initial refresh doesn't take ages
 | 
			
		||||
to load.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
b0651082f472baee8f0fa8ec7ba95f433e2637bb
 | 
			
		||||
 | 
			
		||||
Cleanup examples for the various modules
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Ignored Documentation Changes, these are locate
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
9a749642d294506095e697a3a4345dfe260bd68c
 | 
			
		||||
 | 
			
		||||
Strict Globals (#583)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
fff8353451451be5ae31e0f63d8e529b127fd186
 | 
			
		||||
 | 
			
		||||
Remove extra space (#586)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
486f41f08286ddcfad91d72b83a9361bd9c215cb
 | 
			
		||||
 | 
			
		||||
Fixed length check on function name in `expect` (#589)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
04f9644ae75dafc72da4c4790f334d2e90b03e6f
 | 
			
		||||
 | 
			
		||||
Allow strings or numbers in textutils.*tabulate
 | 
			
		||||
 | 
			
		||||
A little dubious, but apparently CC used to support it. This means we're
 | 
			
		||||
consistent with methods like io.write or string.len which accept strings
 | 
			
		||||
or numbers.
 | 
			
		||||
 | 
			
		||||
Fixes #591
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
d4199064ae5ae8023c589f80f12d94e1c6bbc2b5
 | 
			
		||||
 | 
			
		||||
Make fs.combine accept multiple arguments
 | 
			
		||||
 | 
			
		||||
Means we can now do fs.combine("a", "b", "c"). Of course, one may just
 | 
			
		||||
write "a/b/c" in this case, but it's definitely useful elsewhere.
 | 
			
		||||
 | 
			
		||||
This is /technically/ a breaking change as fs.combine(a, b:gsub(...))
 | 
			
		||||
will no longer function (as gsub returns multiple arguments). However,
 | 
			
		||||
I've done a quick search through GH and my Pastebin archives and can't
 | 
			
		||||
find any programs which would break. Fingers crossed.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
24af36743d08fcdb58439c52bf587b33ed828263
 | 
			
		||||
 | 
			
		||||
Try to handle a turtle being broken while ticked
 | 
			
		||||
 | 
			
		||||
Hopefully fixes #585. Hopefully.
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
511eea39a11956c82e2c11a47b2e7cad27f9887e
 | 
			
		||||
 | 
			
		||||
Remove <!-- -->s in usages
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
826797cbd579e867f0f35f0be44b6a28c8c094a9
 | 
			
		||||
 | 
			
		||||
Added documentation for global functions (#592)
 | 
			
		||||
```
 | 
			
		||||
Didn't port the docs over.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
d83a68f3ff6e3833278a38798d06215293656e85
 | 
			
		||||
 | 
			
		||||
Allow $private HTTP rule to block any private IP
 | 
			
		||||
```
 | 
			
		||||
The config still uses a `blacklist` and `whitelist` array.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
24d3777722812f975d2bc4594437fbbb0431d910
 | 
			
		||||
 | 
			
		||||
Added improved help viewer (#595)
 | 
			
		||||
```
 | 
			
		||||
Didn't port the lua tests over.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
737b3cb57696fb5517252e7db38bc88ce960b4d8
 | 
			
		||||
 | 
			
		||||
Don't use capabilities for generic peripherals
 | 
			
		||||
```
 | 
			
		||||
Not ported, related to forges capability system which is not used in the port.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
ea3a16036794357c3a44edffc90fdb652e03881e
 | 
			
		||||
 | 
			
		||||
Remove a couple of todos
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
bb8f4c624bf87169b73fb631d8250cfc38181e15
 | 
			
		||||
 | 
			
		||||
Some sanity checks for get{Direction,Orientation}
 | 
			
		||||
```
 | 
			
		||||
Use `getCachedState` instead of forge's `getBlockState` and `contains` instead of `has`.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
05c3c8ad3269c9025757f9261e7f609889fb6bdc
 | 
			
		||||
 | 
			
		||||
Generate docs for generic peripherals
 | 
			
		||||
```
 | 
			
		||||
Skipped everything except some removed whitespace.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
85cf2d5ff1b63010de4661301801aa504e5b9015
 | 
			
		||||
 | 
			
		||||
Docs for energy and inventory methods
 | 
			
		||||
```
 | 
			
		||||
and
 | 
			
		||||
```
 | 
			
		||||
5865e9c41a0140b9f1acdd2fb095353c467fbb45
 | 
			
		||||
 | 
			
		||||
Not sure what irritates me more
 | 
			
		||||
```
 | 
			
		||||
both skipped because the changes where already ported.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
4ae370b9dbaf1de0ed32a5f32340b1448136c9cc
 | 
			
		||||
 | 
			
		||||
Merge pull request #606 from TheWireLord/numpadenter-support
 | 
			
		||||
```
 | 
			
		||||
Just lua changes.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
f5eb6ce03e0d9bbbf77130452afd4b49e758f7bd
 | 
			
		||||
 | 
			
		||||
Fix copy-paste error in inventory docs
 | 
			
		||||
```
 | 
			
		||||
Skipped because it was already ported.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
663859d2e5a97edefebf9ac36206903d7dd33a3e
 | 
			
		||||
Fix double URL decode
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
abf425dfb5553483cdc51c50a6b7d8b5e44814f4
 | 
			
		||||
 | 
			
		||||
Fix overflow in os.epoch
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
e3a672099c1b5d2c06f9fe4d8ccd024fef0873a2
 | 
			
		||||
 | 
			
		||||
Fix JEI integration with turtle/pocket upgrades
 | 
			
		||||
```
 | 
			
		||||
Skipped because there seems to be no REI integration.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
2f0cae0bc1b038ac092bafa7f65a317537203cd8
 | 
			
		||||
 | 
			
		||||
Make upgrade recipe requirements a little more lax
 | 
			
		||||
```
 | 
			
		||||
[TODO] [JUMT-01] Crafting is still messed up, but this port didn't change the behavior.
 | 
			
		||||
[TODO] [JUMT-02] Tag comparison code doesn't need to be that verbose, a simple `isEqual` check would suffice.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
7f9a707f75636d5816f752dc93d7b6b998c61a03
 | 
			
		||||
 | 
			
		||||
Bump version to 1.95.0
 | 
			
		||||
```
 | 
			
		||||
Changed the name from CC: Tweaked to CC: Restitched in the changelog and whatsnew files. New version is 1.95.0-beta.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
4af5bcc0b0ff464e7e7428c389d47140580ea7a7
 | 
			
		||||
 | 
			
		||||
Fix serveral 1.15 -> 1.16 issues
 | 
			
		||||
```
 | 
			
		||||
Skipped, changes where already made.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
b8d5a89446ac02fc5b38cc5c0b4805de9d11a7d5
 | 
			
		||||
 | 
			
		||||
Add explicit @module annotation
 | 
			
		||||
```
 | 
			
		||||
Tiny lua change.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
8b17ec76a8e94251803e6f4ba4e65970c6a70b7f
 | 
			
		||||
 | 
			
		||||
Fixed missing argument names in file handle docs (#632)
 | 
			
		||||
```
 | 
			
		||||
A java doc change.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
e4b0a5b3ce035eb23feb4191432fc49af5772c5b
 | 
			
		||||
 | 
			
		||||
2020 -> 2021
 | 
			
		||||
```
 | 
			
		||||
A huge amount of changes.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
542b66c79a9b08e080c39c9a73d74ffe71c0106a
 | 
			
		||||
 | 
			
		||||
Add back command computer block drops
 | 
			
		||||
```
 | 
			
		||||
Didn't port some forge-related changes, but it works.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
dd6f97622e6c18ce0d8988da6a5bede45c94ca5d
 | 
			
		||||
 | 
			
		||||
Prevent reflection errors crashing the game
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
92be0126df63927d07fc695945f8b98e328f945a
 | 
			
		||||
 | 
			
		||||
Fix disk recipes
 | 
			
		||||
```
 | 
			
		||||
Dye recipes actually work now.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
1edb7288b974aec3764b0a820edce7e9eee38e66
 | 
			
		||||
 | 
			
		||||
Merge branch 'mc-1.15.x' into mc-1.16.x
 | 
			
		||||
```
 | 
			
		||||
New version: 1.95.1.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
41226371f3b5fd35f48b6d39c2e8e0c277125b21
 | 
			
		||||
 | 
			
		||||
Add isReadOnly to fs.attributes (#639)
 | 
			
		||||
```
 | 
			
		||||
Also changed some lua test files, but made the changes anyway.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
b2e54014869fac4b819b01b6c24e550ca113ce8a
 | 
			
		||||
 | 
			
		||||
Added Numpad Enter Support in rom lua programs. (#657)
 | 
			
		||||
```
 | 
			
		||||
Just lua changes.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
247c05305d106af430fcdaee41371a152bf7c38c
 | 
			
		||||
 | 
			
		||||
Fix problem with RepeatArgumentType
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
c864576619751077a0d8ac1a18123e14b095ec03
 | 
			
		||||
 | 
			
		||||
Fix impostor recipes for disks
 | 
			
		||||
```
 | 
			
		||||
[TODO] [JUMT-03] REI still shows white disks, probably because it doesn' show nbt items.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
c5694ea9661c7a40021ebd280c378bd7bdc56988
 | 
			
		||||
 | 
			
		||||
Merge branch 'mc-1.15.x' into mc-1.16.x
 | 
			
		||||
```
 | 
			
		||||
Update to 1.16.4.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
1f84480a80677cfaaf19d319290f5b44635eba47
 | 
			
		||||
 | 
			
		||||
Make rightAlt only close menu, never open it. (#672)
 | 
			
		||||
```
 | 
			
		||||
Lua changes.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
1255bd00fd21247a50046020d7d9a396f66bc6bd
 | 
			
		||||
 | 
			
		||||
Fix mounts being usable after a disk is ejected
 | 
			
		||||
```
 | 
			
		||||
Reverted a lot of code style changes made by Zundrel, so the diffs are huge.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
b90611b4b4c176ec1c80df002cc4ac36aa0c4dc8
 | 
			
		||||
 | 
			
		||||
Preserve registration order of upgrades
 | 
			
		||||
```
 | 
			
		||||
Again, a huge diff because of code style changes.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
8494ba8ce29cd8d7b9105eef497fe3fe3f89d350
 | 
			
		||||
 | 
			
		||||
Improve UX when a resource mount cannot be found
 | 
			
		||||
```
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
import { readFileSync    } from "fs";
 | 
			
		||||
import path from "path";
 | 
			
		||||
 | 
			
		||||
import typescript from "@rollup/plugin-typescript";
 | 
			
		||||
import { terser } from "rollup-plugin-terser";
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
        // Also suffix a ?v=${date} onto the end in the event we need to require a specific copy-cat version.
 | 
			
		||||
        banner: `
 | 
			
		||||
            ${requirejs}
 | 
			
		||||
            require.config({
 | 
			
		||||
                paths: { copycat: "https://copy-cat.squiddev.cc" },
 | 
			
		||||
                urlArgs: function(id) { return id == "copycat/embed" ? "?v=20211127" : ""; }
 | 
			
		||||
            });
 | 
			
		||||
        `,
 | 
			
		||||
        format: "amd",
 | 
			
		||||
        preferConst: true,
 | 
			
		||||
        amd: {
 | 
			
		||||
            define: "require",
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    context: "window",
 | 
			
		||||
    external: ["copycat/embed"],
 | 
			
		||||
 | 
			
		||||
    plugins: [
 | 
			
		||||
        typescript(),
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            name: "cc-tweaked",
 | 
			
		||||
            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;
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        terser(),
 | 
			
		||||
    ],
 | 
			
		||||
};
 | 
			
		||||
@@ -1 +1,11 @@
 | 
			
		||||
rootProject.name = "cc-tweaked-${mc_version}"
 | 
			
		||||
pluginManagement {
 | 
			
		||||
    repositories {
 | 
			
		||||
        maven {
 | 
			
		||||
            name = 'Fabric'
 | 
			
		||||
            url = 'https://maven.fabricmc.net/'
 | 
			
		||||
        }
 | 
			
		||||
        gradlePluginPortal()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
rootProject.name = "cc-restiched"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "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
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "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
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,49 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "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
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,852 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "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
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,852 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "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
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north": {
 | 
			
		||||
      "model": "computercraft:block/speaker"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south": {
 | 
			
		||||
      "model": "computercraft:block/speaker",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west": {
 | 
			
		||||
      "model": "computercraft:block/speaker",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east": {
 | 
			
		||||
      "model": "computercraft:block/speaker",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north": {
 | 
			
		||||
      "model": "computercraft:block/turtle_advanced"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south": {
 | 
			
		||||
      "model": "computercraft:block/turtle_advanced",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west": {
 | 
			
		||||
      "model": "computercraft:block/turtle_advanced",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east": {
 | 
			
		||||
      "model": "computercraft:block/turtle_advanced",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,19 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=north": {
 | 
			
		||||
      "model": "computercraft:block/turtle_normal"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south": {
 | 
			
		||||
      "model": "computercraft:block/turtle_normal",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west": {
 | 
			
		||||
      "model": "computercraft:block/turtle_normal",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east": {
 | 
			
		||||
      "model": "computercraft:block/turtle_normal",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,16 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "modem=false,peripheral=false": {
 | 
			
		||||
      "model": "computercraft:block/wired_modem_full_off"
 | 
			
		||||
    },
 | 
			
		||||
    "modem=true,peripheral=false": {
 | 
			
		||||
      "model": "computercraft:block/wired_modem_full_on"
 | 
			
		||||
    },
 | 
			
		||||
    "modem=false,peripheral=true": {
 | 
			
		||||
      "model": "computercraft:block/wired_modem_full_off_peripheral"
 | 
			
		||||
    },
 | 
			
		||||
    "modem=true,peripheral=true": {
 | 
			
		||||
      "model": "computercraft:block/wired_modem_full_on_peripheral"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,54 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=down,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_off",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=up,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_off",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_off"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_off",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_off",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_off",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=down,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_on",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=up,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_on",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_on"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_on",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_on",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_advanced_on",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,54 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "variants": {
 | 
			
		||||
    "facing=down,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_off",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=up,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_off",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_off"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_off",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_off",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,on=false": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_off",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=down,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_on",
 | 
			
		||||
      "x": 90,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=up,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_on",
 | 
			
		||||
      "x": 270,
 | 
			
		||||
      "y": 90
 | 
			
		||||
    },
 | 
			
		||||
    "facing=north,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_on"
 | 
			
		||||
    },
 | 
			
		||||
    "facing=south,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_on",
 | 
			
		||||
      "y": 180
 | 
			
		||||
    },
 | 
			
		||||
    "facing=west,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_on",
 | 
			
		||||
      "y": 270
 | 
			
		||||
    },
 | 
			
		||||
    "facing=east,on=true": {
 | 
			
		||||
      "model": "computercraft:block/wireless_modem_normal_on",
 | 
			
		||||
      "y": 90
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_advanced_side",
 | 
			
		||||
    "front": "computercraft:block/computer_advanced_front_blink",
 | 
			
		||||
    "top": "computercraft:block/computer_advanced_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_advanced_side",
 | 
			
		||||
    "front": "computercraft:block/computer_advanced_front",
 | 
			
		||||
    "top": "computercraft:block/computer_advanced_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_advanced_side",
 | 
			
		||||
    "front": "computercraft:block/computer_advanced_front_on",
 | 
			
		||||
    "top": "computercraft:block/computer_advanced_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_command_side",
 | 
			
		||||
    "front": "computercraft:block/computer_command_front_blink",
 | 
			
		||||
    "top": "computercraft:block/computer_command_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_command_side",
 | 
			
		||||
    "front": "computercraft:block/computer_command_front",
 | 
			
		||||
    "top": "computercraft:block/computer_command_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_command_side",
 | 
			
		||||
    "front": "computercraft:block/computer_command_front_on",
 | 
			
		||||
    "top": "computercraft:block/computer_command_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_normal_side",
 | 
			
		||||
    "front": "computercraft:block/computer_normal_front_blink",
 | 
			
		||||
    "top": "computercraft:block/computer_normal_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_normal_side",
 | 
			
		||||
    "front": "computercraft:block/computer_normal_front",
 | 
			
		||||
    "top": "computercraft:block/computer_normal_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "parent": "minecraft:block/orientable",
 | 
			
		||||
  "textures": {
 | 
			
		||||
    "side": "computercraft:block/computer_normal_side",
 | 
			
		||||
    "front": "computercraft:block/computer_normal_front_on",
 | 
			
		||||
    "top": "computercraft:block/computer_normal_top"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +0,0 @@
 | 
			
		||||
{
 | 
			
		||||
  "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"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user