mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-11-04 07:32:59 +00:00 
			
		
		
		
	Compare commits
	
		
			259 Commits
		
	
	
		
			v1.16.4-1.
			...
			v1.17.1-1.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					bbf3e48763 | ||
| 
						 | 
					92fe1d4bc2 | ||
| 
						 | 
					9fbcbae5b3 | ||
| 
						 | 
					36a779dc18 | ||
| 
						 | 
					cd8b8bbc74 | ||
| 
						 | 
					d8319bb35c | ||
| 
						 | 
					afd6adbffa | ||
| 
						 | 
					4d591c600c | ||
| 
						 | 
					0a8e427c61 | ||
| 
						 | 
					d3a5d1e314 | ||
| 
						 | 
					56010382fb | ||
| 
						 | 
					0ff6b0ca70 | ||
| 
						 | 
					4b33306940 | ||
| 
						 | 
					4dea3dff36 | ||
| 
						 | 
					3e8c741170 | ||
| 
						 | 
					62baa72457 | ||
| 
						 | 
					5eb711da87 | ||
| 
						 | 
					79c5df1d92 | ||
| 
						 | 
					991ea6e829 | ||
| 
						 | 
					1d160641a4 | ||
| 
						 | 
					c2b3d914f7 | ||
| 
						 | 
					0a537eaeee | ||
| 
						 | 
					143b2bdbcd | ||
| 
						 | 
					8cb21ed4d1 | ||
| 
						 | 
					8aa7695fdd | ||
| 
						 | 
					fa78818069 | ||
| 
						 | 
					aa857c1be3 | ||
| 
						 | 
					e4ced551eb | ||
| 
						 | 
					6eec9ba1a3 | ||
| 
						 | 
					62172c6049 | ||
| 
						 | 
					39f3cf8cbe | ||
| 
						 | 
					5082947331 | ||
| 
						 | 
					a8f675c59d | ||
| 
						 | 
					bb1ebaee4f | ||
| 
						 | 
					bb1183d274 | ||
| 
						 | 
					01ddb2b4e4 | ||
| 
						 | 
					bdd38fb061 | ||
| 
						 | 
					06f35e4997 | ||
| 
						 | 
					2d95c32892 | ||
| 
						 | 
					6f4d4540b2 | ||
| 
						 | 
					96316cddaa | ||
| 
						 | 
					e84ddef877 | ||
| 
						 | 
					11b40bb6d5 | ||
| 
						 | 
					686c6a4c44 | ||
| 
						 | 
					a1821035d3 | ||
| 
						 | 
					7b8650bbc8 | ||
| 
						 | 
					0285260e97 | ||
| 
						 | 
					10a3a223a0 | ||
| 
						 | 
					2dc970a8bb | ||
| 
						 | 
					f74c4cc83c | ||
| 
						 | 
					7012ac7163 | ||
| 
						 | 
					227b444d81 | ||
| 
						 | 
					d50db8a6f3 | ||
| 
						 | 
					3a80b51a9f | ||
| 
						 | 
					03396cf07a | ||
| 
						 | 
					5b57f7509d | ||
| 
						 | 
					0568c86628 | ||
| 
						 | 
					b31e66686d | ||
| 
						 | 
					924b8ef30f | ||
| 
						 | 
					7bcc16bb40 | ||
| 
						 | 
					31e6746bdf | ||
| 
						 | 
					c39bf3eb4d | ||
| 
						 | 
					8b952e7e1e | ||
| 
						 | 
					04e97f7b86 | ||
| 
						 | 
					74752c561c | ||
| 
						 | 
					ee96458b56 | ||
| 
						 | 
					333410e4cd | ||
| 
						 | 
					999a39a3e6 | ||
| 
						 | 
					82ca19c296 | ||
| 
						 | 
					56d8a5d585 | ||
| 
						 | 
					aa5fbb2980 | ||
| 
						 | 
					db0bb071f5 | ||
| 
						 | 
					ab702e2ba1 | ||
| 
						 | 
					d4efacd40a | ||
| 
						 | 
					347affcc5c | ||
| 
						 | 
					8ebe34b8da | ||
| 
						 | 
					7086cb8a02 | ||
| 
						 | 
					8dbc930c2f | ||
| 
						 | 
					61eb67849d | ||
| 
						 | 
					c2316ef256 | ||
| 
						 | 
					0d22270f8b | ||
| 
						 | 
					abb9c14256 | ||
| 
						 | 
					815e534dc6 | ||
| 
						 | 
					51dde077fe | ||
| 
						 | 
					31d0b7afcd | ||
| 
						 | 
					95b0d950aa | ||
| 
						 | 
					efa2be2821 | ||
| 
						 | 
					670db97fc7 | ||
| 
						 | 
					1650b72edb | ||
| 
						 | 
					a5bca3f0df | ||
| 
						 | 
					88f41314c7 | ||
| 
						 | 
					5ef8d52c13 | ||
| 
						 | 
					0b65d56ab0 | ||
| 
						 | 
					a256b70685 | ||
| 
						 | 
					f16d1499fe | ||
| 
						 | 
					79ca851e4f | ||
| 
						 | 
					d5c54d64a6 | ||
| 
						 | 
					5cfdd2339f | ||
| 
						 | 
					3ab3213290 | ||
| 
						 | 
					46c9840d00 | ||
| 
						 | 
					b3f2f14e96 | ||
| 
						 | 
					3ace49d27f | ||
| 
						 | 
					9bd662d8dc | ||
| 
						 | 
					df7a40354e | ||
| 
						 | 
					c489d4bc4f | ||
| 
						 | 
					2b029bd506 | ||
| 
						 | 
					2227845658 | ||
| 
						 | 
					2d3e88ef59 | ||
| 
						 | 
					0bfe960cbd | ||
| 
						 | 
					a735f23e1f | ||
| 
						 | 
					de6f27ceaf | ||
| 
						 | 
					2fab1a3054 | ||
| 
						 | 
					d4745ae47e | ||
| 
						 | 
					dc21e2dbc9 | ||
| 
						 | 
					75dfa71275 | ||
| 
						 | 
					d71bf225cc | ||
| 
						 | 
					8644c4ebf6 | ||
| 
						 | 
					b323db30ee | ||
| 
						 | 
					53efd6b303 | ||
| 
						 | 
					97faa1b3bc | ||
| 
						 | 
					7404133d40 | ||
| 
						 | 
					e18e24407e | ||
| 
						 | 
					026afa7f73 | ||
| 
						 | 
					29cc5bb86b | ||
| 
						 | 
					aa9d3c8269 | ||
| 
						 | 
					f8074636bc | ||
| 
						 | 
					db2cde4a4c | ||
| 
						 | 
					5eec7d9172 | ||
| 
						 | 
					8b9735d72e | ||
| 
						 | 
					1866916cb8 | ||
| 
						 | 
					f38a6a9d43 | ||
| 
						 | 
					0f6db63020 | ||
| 
						 | 
					51fcd83b87 | ||
| 
						 | 
					c2190e1318 | ||
| 
						 | 
					c40a13558c | ||
| 
						 | 
					02695aea51 | ||
| 
						 | 
					d5be1aca0e | ||
| 
						 | 
					8ff8b78ed8 | ||
| 
						 | 
					7fc55aa9a0 | ||
| 
						 | 
					38335ca187 | ||
| 
						 | 
					e0e194099c | ||
| 
						 | 
					8063059764 | ||
| 
						 | 
					f96d923b2a | ||
| 
						 | 
					9142ccfc93 | ||
| 
						 | 
					9f7cc00fcb | ||
| 
						 | 
					b129ae627b | ||
| 
						 | 
					f9fb0619fa | ||
| 
						 | 
					7f9b86a78e | ||
| 
						 | 
					58ea7a275e | ||
| 
						 | 
					8487a13764 | ||
| 
						 | 
					f0ba1108d5 | ||
| 
						 | 
					5d0daf9b2d | ||
| 
						 | 
					8b8692ba53 | ||
| 
						 | 
					1f385f5b35 | ||
| 
						 | 
					34baa09b6c | ||
| 
						 | 
					b21866fbff | ||
| 
						 | 
					e0a288bcb9 | ||
| 
						 | 
					4592534a18 | ||
| 
						 | 
					28165bfcd6 | ||
| 
						 | 
					953b94fd08 | ||
| 
						 | 
					e10e30f82b | ||
| 
						 | 
					aeb1fa0e7e | ||
| 
						 | 
					349a7543b0 | ||
| 
						 | 
					3d589eda4a | ||
| 
						 | 
					de646b66b6 | ||
| 
						 | 
					4f0d311df7 | ||
| 
						 | 
					d6e3c9a7fa | ||
| 
						 | 
					a7a724f134 | ||
| 
						 | 
					b0e30fdce1 | ||
| 
						 | 
					4e15afa254 | ||
| 
						 | 
					84bac06178 | ||
| 
						 | 
					1fecb995c9 | ||
| 
						 | 
					99b719299c | ||
| 
						 | 
					fb9590467d | ||
| 
						 | 
					bc8e090873 | ||
| 
						 | 
					cf0f67265f | ||
| 
						 | 
					53dd15a213 | ||
| 
						 | 
					eb2d617ed8 | ||
| 
						 | 
					74dae4ec17 | ||
| 
						 | 
					abbc46877b | ||
| 
						 | 
					3cb25b3525 | ||
| 
						 | 
					f387730b88 | ||
| 
						 | 
					92b45b1868 | ||
| 
						 | 
					003c7ec2e8 | ||
| 
						 | 
					c45221a2d0 | ||
| 
						 | 
					8494ba8ce2 | ||
| 
						 | 
					058d63e77f | ||
| 
						 | 
					17b5bca443 | ||
| 
						 | 
					c3f5700494 | ||
| 
						 | 
					b17ff6daf0 | ||
| 
						 | 
					e8f5531a8c | ||
| 
						 | 
					51d3b091da | ||
| 
						 | 
					9708dd6786 | ||
| 
						 | 
					e48427dbbc | ||
| 
						 | 
					669b6d2d56 | ||
| 
						 | 
					32d956bbe7 | ||
| 
						 | 
					3a147c78a8 | ||
| 
						 | 
					8c56b6a7be | ||
| 
						 | 
					66e42e0817 | ||
| 
						 | 
					0ee3d10fda | ||
| 
						 | 
					ed0afc4068 | ||
| 
						 | 
					1f70ed6985 | ||
| 
						 | 
					8f3ea60c74 | ||
| 
						 | 
					eb722a74cd | ||
| 
						 | 
					1825f67eee | ||
| 
						 | 
					975a994581 | ||
| 
						 | 
					061514549d | ||
| 
						 | 
					5e52429c23 | ||
| 
						 | 
					396cf15a1f | ||
| 
						 | 
					7514cf7320 | ||
| 
						 | 
					1316d6a3c9 | ||
| 
						 | 
					e1cbbe3628 | ||
| 
						 | 
					6d367e08a3 | ||
| 
						 | 
					eaa7359c8c | ||
| 
						 | 
					657ceda3af | ||
| 
						 | 
					a934e42219 | ||
| 
						 | 
					1544749282 | ||
| 
						 | 
					763bab80fa | ||
| 
						 | 
					417fda3019 | ||
| 
						 | 
					444830cf2d | ||
| 
						 | 
					23bf33c454 | ||
| 
						 | 
					0be030c497 | ||
| 
						 | 
					ee27d8f081 | ||
| 
						 | 
					a3a9684505 | ||
| 
						 | 
					1381325813 | ||
| 
						 | 
					52b112fae6 | ||
| 
						 | 
					c83eeb16a8 | ||
| 
						 | 
					9d1ee6f61d | ||
| 
						 | 
					b90611b4b4 | ||
| 
						 | 
					e1e7ef59c6 | ||
| 
						 | 
					9ae0f4a993 | ||
| 
						 | 
					fd262a7995 | ||
| 
						 | 
					58054ad2d1 | ||
| 
						 | 
					1255bd00fd | ||
| 
						 | 
					1f84480a80 | ||
| 
						 | 
					b838efedd2 | ||
| 
						 | 
					f78e24f9a0 | ||
| 
						 | 
					88f5b20353 | ||
| 
						 | 
					331031be45 | ||
| 
						 | 
					c5694ea966 | ||
| 
						 | 
					34b5ede326 | ||
| 
						 | 
					7b476cb24b | ||
| 
						 | 
					7ca261d763 | ||
| 
						 | 
					c864576619 | ||
| 
						 | 
					247c05305d | ||
| 
						 | 
					2232f025b8 | ||
| 
						 | 
					b2e5401486 | ||
| 
						 | 
					41226371f3 | ||
| 
						 | 
					1edb7288b9 | ||
| 
						 | 
					cc5e972cfc | ||
| 
						 | 
					92be0126df | ||
| 
						 | 
					dd6f97622e | ||
| 
						 | 
					2c9f51db89 | ||
| 
						 | 
					72340defe4 | ||
| 
						 | 
					542b66c79a | ||
| 
						 | 
					e4b0a5b3ce | ||
| 
						 | 
					f7e3e72a6e | ||
| 
						 | 
					8b17ec76a8 | ||
| 
						 | 
					b8d5a89446 | 
@@ -16,6 +16,3 @@ indent_size = 2
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
[*.yml]
 | 
					[*.yml]
 | 
				
			||||||
indent_size = 2
 | 
					indent_size = 2
 | 
				
			||||||
 | 
					 | 
				
			||||||
[*.properties]
 | 
					 | 
				
			||||||
insert_final_newline = false
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@@ -1,2 +1,15 @@
 | 
				
			|||||||
# Ignore changes in generated files
 | 
					# Ignore changes in generated files
 | 
				
			||||||
src/generated/resources/data/** linguist-generated
 | 
					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
									
									
								
							
							
						
						
									
										16
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							@@ -1,16 +0,0 @@
 | 
				
			|||||||
---
 | 
					 | 
				
			||||||
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: Tweaked version
 | 
					 | 
				
			||||||
 - Logs: These will be located in the `logs/` directory of your Minecraft instance. Please upload them as a gist or directly into this editor.
 | 
					 | 
				
			||||||
 - Detailed reproduction steps: sometimes I can spot a bug pretty easily, but often it's much more obscure. The more information I have to help reproduce it, the quicker it'll get fixed.
 | 
					 | 
				
			||||||
							
								
								
									
										34
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					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.15.x
 | 
				
			||||||
 | 
					      - 1.16.x
 | 
				
			||||||
 | 
					      - 1.17.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
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					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/SquidDev-CC/CC-Tweaked/discussions
 | 
				
			||||||
 | 
					  about: Or ask questions on GitHub Discussions.
 | 
				
			||||||
							
								
								
									
										4
									
								
								.github/ISSUE_TEMPLATE/something_else.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.github/ISSUE_TEMPLATE/something_else.md
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					name: Something else
 | 
				
			||||||
 | 
					about: An issue about something else.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
							
								
								
									
										17
									
								
								.github/matchers/checkstyle.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								.github/matchers/checkstyle.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "problemMatcher": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "owner": "checkstyle",
 | 
				
			||||||
 | 
					            "pattern": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "regexp": "^([a-z]+) ([\\w./-]+):(\\d+):(\\d+): (.*)$",
 | 
				
			||||||
 | 
					                    "severity": 1,
 | 
				
			||||||
 | 
					                    "file": 2,
 | 
				
			||||||
 | 
					                    "line": 3,
 | 
				
			||||||
 | 
					                    "column": 4,
 | 
				
			||||||
 | 
					                    "message": 5
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								.github/matchers/illuaminate.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.github/matchers/illuaminate.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "problemMatcher": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "owner": "illuaminate",
 | 
				
			||||||
 | 
					            "severity": "warning",
 | 
				
			||||||
 | 
					            "pattern": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "regexp": "^([\\w./-]+):\\[(\\d+):(\\d+)\\-(?:\\d+):(?:\\d+)\\]: (.*) \\[([a-z:-]+)\\]$",
 | 
				
			||||||
 | 
					                    "file": 1,
 | 
				
			||||||
 | 
					                    "line": 2,
 | 
				
			||||||
 | 
					                    "column": 3,
 | 
				
			||||||
 | 
					                    "message": 4,
 | 
				
			||||||
 | 
					                    "code": 5
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										15
									
								
								.github/matchers/junit.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								.github/matchers/junit.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "problemMatcher": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "owner": "junit",
 | 
				
			||||||
 | 
					            "pattern": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "regexp": "^## ([\\w./-]+):(\\d+): (.*)$",
 | 
				
			||||||
 | 
					                    "file": 1,
 | 
				
			||||||
 | 
					                    "line": 2,
 | 
				
			||||||
 | 
					                    "message": 3
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										50
									
								
								.github/workflows/main-ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								.github/workflows/main-ci.yml
									
									
									
									
										vendored
									
									
								
							@@ -16,35 +16,55 @@ jobs:
 | 
				
			|||||||
        java-version: 8
 | 
					        java-version: 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Cache gradle dependencies
 | 
					    - name: Cache gradle dependencies
 | 
				
			||||||
      uses: actions/cache@v1
 | 
					      uses: actions/cache@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        path: ~/.gradle/caches
 | 
					        path: ~/.gradle/caches
 | 
				
			||||||
        key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
 | 
					        key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
 | 
				
			||||||
        restore-keys: |
 | 
					        restore-keys: |
 | 
				
			||||||
          ${{ runner.os }}-gradle-
 | 
					          ${{ runner.os }}-gradle-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Disable Gradle daemon
 | 
				
			||||||
 | 
					      run: |
 | 
				
			||||||
 | 
					        mkdir -p ~/.gradle
 | 
				
			||||||
 | 
					        echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Build with Gradle
 | 
					    - name: Build with Gradle
 | 
				
			||||||
      run: ./gradlew build --no-daemon || ./gradlew build --no-daemon
 | 
					      run: |
 | 
				
			||||||
 | 
					        ./gradlew assemble || ./gradlew assemble
 | 
				
			||||||
 | 
					        ./gradlew downloadAssets || ./gradlew downloadAssets
 | 
				
			||||||
 | 
					        xvfb-run ./gradlew build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Upload Jar
 | 
					    - name: Upload Jar
 | 
				
			||||||
      uses: actions/upload-artifact@v1
 | 
					      uses: actions/upload-artifact@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        name: CC-Tweaked
 | 
					        name: CC-Tweaked
 | 
				
			||||||
        path: build/libs
 | 
					        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
 | 
					    - name: Upload Coverage
 | 
				
			||||||
      run: bash <(curl -s https://codecov.io/bash)
 | 
					      uses: codecov/codecov-action@v2
 | 
				
			||||||
      continue-on-error: true
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Generate Java documentation stubs
 | 
					    - name: Parse test reports
 | 
				
			||||||
      run: ./gradlew luaJavadoc --no-daemon
 | 
					      run: ./tools/parse-reports.py
 | 
				
			||||||
 | 
					      if: ${{ failure() }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Lint Lua code
 | 
					    - name: Cache pre-commit
 | 
				
			||||||
 | 
					      uses: actions/cache@v2
 | 
				
			||||||
 | 
					      with:
 | 
				
			||||||
 | 
					        path: ~/.cache/pre-commit
 | 
				
			||||||
 | 
					        key: ${{ runner.os }}-pre-commit-${{ hashFiles('config/pre-commit/config.yml') }}
 | 
				
			||||||
 | 
					        restore-keys: |
 | 
				
			||||||
 | 
					          ${{ runner.os }}-pre-commit-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    - name: Run linters
 | 
				
			||||||
      run: |
 | 
					      run: |
 | 
				
			||||||
        test -d bin || mkdir bin
 | 
					        pip install pre-commit
 | 
				
			||||||
        test -f bin/illuaminate || wget -q -Obin/illuaminate https://squiddev.cc/illuaminate/linux-x86-64/illuaminate
 | 
					        pre-commit run --config config/pre-commit/config.yml --show-diff-on-failure --all --color=always
 | 
				
			||||||
        chmod +x bin/illuaminate
 | 
					 | 
				
			||||||
        bin/illuaminate lint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    - name: Check whitespace
 | 
					 | 
				
			||||||
      run: python3 tools/check-lines.py
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								.github/workflows/make-doc.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/make-doc.yml
									
									
									
									
										vendored
									
									
								
							@@ -3,7 +3,7 @@ name: Build documentation
 | 
				
			|||||||
on:
 | 
					on:
 | 
				
			||||||
  push:
 | 
					  push:
 | 
				
			||||||
    branches:
 | 
					    branches:
 | 
				
			||||||
    - mc-1.15.x
 | 
					    - mc-1.16.x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jobs:
 | 
					jobs:
 | 
				
			||||||
  make_doc:
 | 
					  make_doc:
 | 
				
			||||||
@@ -11,7 +11,7 @@ jobs:
 | 
				
			|||||||
    runs-on: ubuntu-latest
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
    - uses: actions/checkout@v1
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Set up Java 8
 | 
					    - name: Set up Java 8
 | 
				
			||||||
      uses: actions/setup-java@v1
 | 
					      uses: actions/setup-java@v1
 | 
				
			||||||
@@ -19,7 +19,7 @@ jobs:
 | 
				
			|||||||
        java-version: 8
 | 
					        java-version: 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - name: Cache gradle dependencies
 | 
					    - name: Cache gradle dependencies
 | 
				
			||||||
      uses: actions/cache@v1
 | 
					      uses: actions/cache@v2
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        path: ~/.gradle/caches
 | 
					        path: ~/.gradle/caches
 | 
				
			||||||
        key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
 | 
					        key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								.gitpod.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								.gitpod.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					image:
 | 
				
			||||||
 | 
					  file: config/gitpod/Dockerfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ports:
 | 
				
			||||||
 | 
					  - port: 25565
 | 
				
			||||||
 | 
					    onOpen: notify
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
@@ -8,6 +8,10 @@ If you've any other questions, [just ask the community][community] or [open an i
 | 
				
			|||||||
If you have a bug, suggestion, or other feedback, the best thing to do is [file an issue][new-issue]. When doing so,
 | 
					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.
 | 
					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
 | 
					## Developing
 | 
				
			||||||
In order to develop CC: Tweaked, you'll need to download the source code and then run it. This is a pretty simple
 | 
					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`.
 | 
					process. When building on Windows, Use `gradlew.bat` instead of `./gradlew`.
 | 
				
			||||||
@@ -15,11 +19,20 @@ process. When building on Windows, Use `gradlew.bat` instead of `./gradlew`.
 | 
				
			|||||||
 - **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
 | 
					 - **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
 | 
				
			||||||
 - **Setup Forge:** `./gradlew build`
 | 
					 - **Setup Forge:** `./gradlew build`
 | 
				
			||||||
 - **Run Minecraft:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
 | 
					 - **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/SquidDev-CC/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`.
 | 
					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
 | 
					These commands may take a few minutes to run the first time, as the environment is set up, but should be much faster
 | 
				
			||||||
afterwards.
 | 
					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
 | 
					### Code linters
 | 
				
			||||||
CC: Tweaked uses a couple of "linters" on its source code, to enforce a consistent style across the project. While these
 | 
					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.
 | 
					are run whenever you submit a PR, it's often useful to run this before committing.
 | 
				
			||||||
@@ -27,15 +40,76 @@ are run whenever you submit a PR, it's often useful to run this before committin
 | 
				
			|||||||
 - **[Checkstyle]:** Checks Java code to ensure it is consistently formatted. This can be run with `./gradlew build` or
 | 
					 - **[Checkstyle]:** Checks Java code to ensure it is consistently formatted. This can be run with `./gradlew build` or
 | 
				
			||||||
   `./gradle check`.
 | 
					   `./gradle check`.
 | 
				
			||||||
 - **[illuaminate]:** Checks Lua code for semantic and styleistic issues. See [the usage section][illuaminate-usage] for
 | 
					 - **[illuaminate]:** Checks Lua code for semantic and styleistic issues. See [the usage section][illuaminate-usage] for
 | 
				
			||||||
   how to download and run it.
 | 
					   how to download and run it. You may need to generate the Java documentation stubs (see "Documentation" below) for all
 | 
				
			||||||
 | 
					   lints to pass.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Translations
 | 
					### Documentation
 | 
				
			||||||
Translations are managed through [Weblate], an online interface for managing language strings. This is synced
 | 
					When writing documentation for [CC: Tweaked's documentation website][docs], it may be useful to build the documentation
 | 
				
			||||||
automatically with GitHub, so please don't submit PRs adding/changing translations!
 | 
					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/SquidDev-CC/CC-Tweaked/issues/new/choose "Create a new issue"
 | 
					[new-issue]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose "Create a new issue"
 | 
				
			||||||
[community]: README.md#Community "Get in touch with the community."
 | 
					[community]: README.md#Community "Get in touch with the community."
 | 
				
			||||||
[checkstyle]: https://checkstyle.org/
 | 
					[checkstyle]: https://checkstyle.org/
 | 
				
			||||||
[illuaminate]: https://github.com/SquidDev/illuaminate/
 | 
					[illuaminate]: https://github.com/SquidDev/illuaminate/ "Illuaminate on GitHub"
 | 
				
			||||||
[illuaminate-usage]: https://github.com/SquidDev/illuaminate/blob/master/README.md#usage
 | 
					[illuaminate-usage]: https://github.com/SquidDev/illuaminate/blob/master/README.md#usage "Installing Illuaminate"
 | 
				
			||||||
[weblate]: https://i18n.tweaked.cc/projects/cc-tweaked/minecraft/
 | 
					[weblate]: https://i18n.tweaked.cc/projects/cc-tweaked/minecraft/ "CC: Tweaked weblate instance"
 | 
				
			||||||
 | 
					[docs]: https://tweaked.cc/ "CC: Tweaked documentation"
 | 
				
			||||||
 | 
					[ldoc]: http://stevedonovan.github.io/ldoc/ "ldoc, a Lua documentation generator."
 | 
				
			||||||
 | 
					[mc-test]: https://www.youtube.com/watch?v=vXaWOJTCYNg
 | 
				
			||||||
 | 
					[busted]: https://github.com/Olivine-Labs/busted "busted: Elegant Lua unit testing."
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								LICENSE
									
									
									
									
									
								
							@@ -19,14 +19,14 @@ Mod: The mod code designated by the present license, in source form, binary
 | 
				
			|||||||
form, as obtained standalone, as part of a wider distribution or resulting from
 | 
					form, as obtained standalone, as part of a wider distribution or resulting from
 | 
				
			||||||
the compilation of the original or modified sources.
 | 
					the compilation of the original or modified sources.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Dependency: Code required for the mod to work properly. This includes 
 | 
					Dependency: Code required for the mod to work properly. This includes
 | 
				
			||||||
dependencies required to compile the code as well as any file or modification
 | 
					dependencies required to compile the code as well as any file or modification
 | 
				
			||||||
that is explicitly or implicitly required for the mod to be working.
 | 
					that is explicitly or implicitly required for the mod to be working.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Scope
 | 
					1. Scope
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The present license is granted to any user of the mod. As a prerequisite, 
 | 
					The present license is granted to any user of the mod. As a prerequisite,
 | 
				
			||||||
a user must own a legally acquired copy of Minecraft
 | 
					a user must own a legally acquired copy of Minecraft
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2. Liability
 | 
					2. Liability
 | 
				
			||||||
@@ -41,13 +41,13 @@ or misuse of this mod fall on the user.
 | 
				
			|||||||
3. Play rights
 | 
					3. Play rights
 | 
				
			||||||
--------------
 | 
					--------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The user is allowed to install this mod on a Minecraft client or server and to play 
 | 
					The user is allowed to install this mod on a Minecraft client or server and to play
 | 
				
			||||||
without restriction.
 | 
					without restriction.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
4. Modification rights
 | 
					4. Modification rights
 | 
				
			||||||
----------------------
 | 
					----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The user has the right to decompile the source code, look at either the 
 | 
					The user has the right to decompile the source code, look at either the
 | 
				
			||||||
decompiled version or the original source code, and to modify it.
 | 
					decompiled version or the original source code, and to modify it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
5. Distribution of original or modified copy rights
 | 
					5. Distribution of original or modified copy rights
 | 
				
			||||||
@@ -61,10 +61,10 @@ include:
 | 
				
			|||||||
   - patch to its source or binary files
 | 
					   - patch to its source or binary files
 | 
				
			||||||
   - any copy of a portion of its binary source files
 | 
					   - any copy of a portion of its binary source files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The user is allowed to redistribute this mod partially, in totality, or 
 | 
					The user is allowed to redistribute this mod partially, in totality, or
 | 
				
			||||||
included in a distribution.
 | 
					included in a distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When distributing binary files, the user must provide means to obtain its 
 | 
					When distributing binary files, the user must provide means to obtain its
 | 
				
			||||||
entire set of sources or modified sources at no cost.
 | 
					entire set of sources or modified sources at no cost.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
All distributions of this mod must remain licensed under the CCPL.
 | 
					All distributions of this mod must remain licensed under the CCPL.
 | 
				
			||||||
@@ -92,7 +92,7 @@ must be made available at no cost and remain licensed under the CCPL.
 | 
				
			|||||||
---------------
 | 
					---------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you choose to contribute code or assets to be included in this mod, you
 | 
					If you choose to contribute code or assets to be included in this mod, you
 | 
				
			||||||
agree that, if added to to the main repository at 
 | 
					agree that, if added to to the main repository at
 | 
				
			||||||
https://github.com/dan200/ComputerCraft, your contributions will be covered by
 | 
					https://github.com/dan200/ComputerCraft, your contributions will be covered by
 | 
				
			||||||
this license, and that Daniel Ratcliffe will retain the right to re-license the
 | 
					this license, and that Daniel Ratcliffe will retain the right to re-license the
 | 
				
			||||||
mod, including your contributions, in part or in whole, under other licenses.
 | 
					mod, including your contributions, in part or in whole, under other licenses.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										48
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								README.md
									
									
									
									
									
								
							@@ -1,40 +1,11 @@
 | 
				
			|||||||
# 
 | 
					# 
 | 
				
			||||||
[](https://github.com/SquidDev-CC/CC-Tweaked/actions "Current build status") [](https://minecraft.curseforge.com/projects/cc-tweaked "Download CC: Tweaked on CurseForge")
 | 
					[](https://github.com/SquidDev-CC/CC-Tweaked/actions "Current build status") [][CurseForge]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CC: Tweaked is a fork of [ComputerCraft](https://github.com/dan200/ComputerCraft), adding programmable computers,
 | 
					CC: Tweaked is a mod for Minecraft which adds programmable computers, turtles and more to the game. A fork of the
 | 
				
			||||||
turtles and more to Minecraft.
 | 
					much-beloved [ComputerCraft], it continues its legacy with better performance, stability, and a wealth of new features.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## What?
 | 
					CC: Tweaked can be installed from [CurseForge] or [Modrinth]. It requires the [Minecraft Forge][forge] mod loader, but
 | 
				
			||||||
ComputerCraft has always held a fond place in my heart: it's the mod which really got me into Minecraft, and it's the
 | 
					[versions are available for Fabric][ccrestitched].
 | 
				
			||||||
mod which has kept me playing it for many years. However, development of the original mod has slowed, as the original
 | 
					 | 
				
			||||||
developers have had less time to work on the mod, and moved onto other projects and commitments.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CC: Tweaked (or CC:T for short) is an attempt to continue ComputerCraft's legacy. It's not intended to be a competitor
 | 
					 | 
				
			||||||
to CC, nor do I want to take it in a vastly different direction to the original mod. Instead, CC:T focuses on making the
 | 
					 | 
				
			||||||
ComputerCraft experience as _solid_ as possible, ironing out any wrinkles that may have developed over time.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Features
 | 
					 | 
				
			||||||
CC: Tweaked contains all the features of the latest version of ComputerCraft, as well as numerous fixes, performance
 | 
					 | 
				
			||||||
improvements and several nifty additions. I'd recommend checking out [the releases page](https://github.com/SquidDev-CC/CC-Tweaked/releases)
 | 
					 | 
				
			||||||
to see the full set of changes, but here's a couple of the more interesting additions:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 - Improvements to the `http` library, including websockets, support for other HTTP methods (`PUT`, `DELETE`, etc...)
 | 
					 | 
				
			||||||
   and configurable limits on HTTP usage.
 | 
					 | 
				
			||||||
 - Full-block wired modems, allowing one to wrap non-solid peripherals (such as turtles, or chests if Plethora is
 | 
					 | 
				
			||||||
   installed).
 | 
					 | 
				
			||||||
 - Pocket computers can be held like maps, allowing you to view the screen without entering a GUI.
 | 
					 | 
				
			||||||
 - Printed pages and books can be placed in item frames and held like maps.
 | 
					 | 
				
			||||||
 - Several profiling and administration tools for server owners, via the `/computercraft` command. This allows operators
 | 
					 | 
				
			||||||
   to track which computers are hogging resources, turn on and shutdown multiple computers at once and interact with
 | 
					 | 
				
			||||||
   computers remotely.
 | 
					 | 
				
			||||||
 - Closer emulation of standard Lua, adding the `debug` and `io` libraries. This also enables seeking within binary
 | 
					 | 
				
			||||||
   files, meaning you don't need to read large files into memory.
 | 
					 | 
				
			||||||
 - Allow running multiple computers on multiple threads, reducing latency on worlds with many computers.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Relation to CCTweaks?
 | 
					 | 
				
			||||||
This mod has nothing to do with CCTweaks, though there is no denying the name is a throwback to it. That being said,
 | 
					 | 
				
			||||||
several features have been included, such as full block modems, the Cobalt runtime and map-like rendering for pocket
 | 
					 | 
				
			||||||
computers.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Contributing
 | 
					## Contributing
 | 
				
			||||||
Any contribution is welcome, be that using the mod, reporting bugs or contributing code. If you want to get started
 | 
					Any contribution is welcome, be that using the mod, reporting bugs or contributing code. If you want to get started
 | 
				
			||||||
@@ -46,8 +17,7 @@ ComputerCraft we have a [forum](https://forums.computercraft.cc/) and [Discord g
 | 
				
			|||||||
There's also a fairly populated, albeit quiet [IRC channel](http://webchat.esper.net/?channels=computercraft), if that's
 | 
					There's also a fairly populated, albeit quiet [IRC channel](http://webchat.esper.net/?channels=computercraft), if that's
 | 
				
			||||||
more your cup of tea.
 | 
					more your cup of tea.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
I'd generally recommend you don't contact me directly (email, DM, etc...) unless absolutely necessary (i.e. in order to
 | 
					We also host fairly comprehensive documentation at [tweaked.cc](https://tweaked.cc/ "The CC: Tweaked website").
 | 
				
			||||||
report exploits). You'll get a far quicker response if you ask the whole community!
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Using
 | 
					## 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)
 | 
					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)
 | 
				
			||||||
@@ -70,3 +40,9 @@ exposing more features.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
We bundle the API sources with the jar, so documentation should be easily viewable within your editor. Alternatively,
 | 
					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/).
 | 
					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"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										536
									
								
								build.gradle
									
									
									
									
									
								
							
							
						
						
									
										536
									
								
								build.gradle
									
									
									
									
									
								
							@@ -1,44 +1,68 @@
 | 
				
			|||||||
buildscript {
 | 
					buildscript {
 | 
				
			||||||
    repositories {
 | 
					    repositories {
 | 
				
			||||||
        jcenter()
 | 
					 | 
				
			||||||
        mavenCentral()
 | 
					        mavenCentral()
 | 
				
			||||||
        maven {
 | 
					        maven { url = "https://maven.minecraftforge.net" }
 | 
				
			||||||
            name = "forge"
 | 
					        maven { url = 'https://maven.parchmentmc.org' }
 | 
				
			||||||
            url = "https://files.minecraftforge.net/maven"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    dependencies {
 | 
					    dependencies {
 | 
				
			||||||
        classpath 'com.google.code.gson:gson:2.8.1'
 | 
					        classpath 'net.minecraftforge.gradle:ForgeGradle:5.1.+'
 | 
				
			||||||
        classpath 'net.minecraftforge.gradle:ForgeGradle:3.0.187'
 | 
					        classpath 'org.parchmentmc:librarian:1.+'
 | 
				
			||||||
        classpath 'net.sf.proguard:proguard-gradle:6.1.0beta2'
 | 
					 | 
				
			||||||
        classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
plugins {
 | 
					plugins {
 | 
				
			||||||
    id "checkstyle"
 | 
					    id "checkstyle"
 | 
				
			||||||
    id "jacoco"
 | 
					    id "jacoco"
 | 
				
			||||||
    id "com.github.hierynomus.license" version "0.15.0"
 | 
					    id "maven-publish"
 | 
				
			||||||
    id "com.matthewprenger.cursegradle" version "1.3.0"
 | 
					    id "com.github.hierynomus.license" version "0.16.1"
 | 
				
			||||||
    id "com.github.breadmoirai.github-release" version "2.2.4"
 | 
					    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.5.21"
 | 
				
			||||||
 | 
					    id "com.modrinth.minotaur" version "1.2.1"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
apply plugin: 'net.minecraftforge.gradle'
 | 
					apply plugin: 'net.minecraftforge.gradle'
 | 
				
			||||||
apply plugin: 'org.ajoberstar.grgit'
 | 
					apply plugin: 'org.parchmentmc.librarian.forgegradle'
 | 
				
			||||||
apply plugin: 'maven-publish'
 | 
					 | 
				
			||||||
apply plugin: 'maven'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
version = mod_version
 | 
					version = mod_version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group = "org.squiddev"
 | 
					group = "org.squiddev"
 | 
				
			||||||
archivesBaseName = "cc-tweaked-${mc_version}"
 | 
					archivesBaseName = "cc-tweaked-${mc_version}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8'
 | 
					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/**'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    main.resources {
 | 
				
			||||||
 | 
					        srcDir 'src/generated/resources'
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    testMod {}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minecraft {
 | 
					minecraft {
 | 
				
			||||||
    runs {
 | 
					    runs {
 | 
				
			||||||
        client {
 | 
					        all {
 | 
				
			||||||
            workingDirectory project.file('run')
 | 
					            lazyToken('minecraft_classpath') {
 | 
				
			||||||
 | 
					                configurations.shade.copyRecursive().resolve().collect { it.absolutePath }.join(File.pathSeparator)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            property 'forge.logging.markers', 'REGISTRIES'
 | 
					            property 'forge.logging.markers', 'REGISTRIES'
 | 
				
			||||||
            property 'forge.logging.console.level', 'debug'
 | 
					            property 'forge.logging.console.level', 'debug'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -49,43 +73,60 @@ minecraft {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        server {
 | 
					        client {
 | 
				
			||||||
            workingDirectory project.file("run/server-${mc_version}")
 | 
					            workingDirectory project.file('run')
 | 
				
			||||||
            property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP'
 | 
					        }
 | 
				
			||||||
            property 'forge.logging.console.level', 'debug'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            mods {
 | 
					        server {
 | 
				
			||||||
                computercraft {
 | 
					            workingDirectory project.file("run/server")
 | 
				
			||||||
                    source sourceSets.main
 | 
					            arg "--nogui"
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        data {
 | 
					        data {
 | 
				
			||||||
            workingDirectory project.file('run')
 | 
					            workingDirectory project.file('run')
 | 
				
			||||||
            property 'forge.logging.markers', 'REGISTRIES,REGISTRYDUMP'
 | 
					 | 
				
			||||||
            property 'forge.logging.console.level', 'debug'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            args '--mod', 'computercraft', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
 | 
					            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 {
 | 
					            mods {
 | 
				
			||||||
                computercraft {
 | 
					                cctest {
 | 
				
			||||||
                    source sourceSets.main
 | 
					                    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: 'snapshot', version: "${mappings_version}".toString()
 | 
					    mappings channel: 'parchment', version: "${mapping_version}-${mc_version}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
 | 
					    accessTransformer file('src/main/resources/META-INF/accesstransformer.cfg')
 | 
				
			||||||
 | 
					    accessTransformer file('src/testMod/resources/META-INF/accesstransformer.cfg')
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
sourceSets {
 | 
					 | 
				
			||||||
    main.resources {
 | 
					 | 
				
			||||||
        srcDir 'src/generated/resources'
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
repositories {
 | 
					repositories {
 | 
				
			||||||
    mavenCentral()
 | 
					    mavenCentral()
 | 
				
			||||||
    maven {
 | 
					    maven {
 | 
				
			||||||
@@ -96,38 +137,47 @@ repositories {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
configurations {
 | 
					configurations {
 | 
				
			||||||
    shade
 | 
					    shade
 | 
				
			||||||
    compile.extendsFrom shade
 | 
					    implementation.extendsFrom shade
 | 
				
			||||||
    deployerJars
 | 
					
 | 
				
			||||||
    cctJavadoc
 | 
					    cctJavadoc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    testModExtra
 | 
				
			||||||
 | 
					    testModImplementation.extendsFrom(testModExtra)
 | 
				
			||||||
 | 
					    testModImplementation.extendsFrom(implementation)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
    checkstyle "com.puppycrawl.tools:checkstyle:8.25"
 | 
					    checkstyle "com.puppycrawl.tools:checkstyle:8.45"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
 | 
					    minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    compileOnly fg.deobf("mezz.jei:jei-1.16.4:7.6.0.58:api")
 | 
					    compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.104:api")
 | 
				
			||||||
    compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.16.4:7.0.0.63")
 | 
					    // compileOnly fg.deobf("com.blamejared.crafttweaker:CraftTweaker-1.16.5:7.1.0.313")
 | 
				
			||||||
 | 
					    // compileOnly fg.deobf("commoble.morered:morered-1.16.5:2.1.1.0")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    runtimeOnly fg.deobf("mezz.jei:jei-1.16.4:7.6.0.58")
 | 
					    // runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.104")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    compileOnly 'com.google.auto.service:auto-service:1.0-rc7'
 | 
					    shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'
 | 
				
			||||||
    annotationProcessor 'com.google.auto.service:auto-service:1.0-rc7'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    shade 'org.squiddev:Cobalt:0.5.1-SNAPSHOT'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
 | 
					    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
 | 
				
			||||||
    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
 | 
					    testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
 | 
				
			||||||
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
 | 
					    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
 | 
				
			||||||
    testImplementation 'org.hamcrest:hamcrest:2.2'
 | 
					    testImplementation 'org.hamcrest:hamcrest:2.2'
 | 
				
			||||||
 | 
					    testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21'
 | 
				
			||||||
 | 
					    testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    deployerJars "org.apache.maven.wagon:wagon-ssh:3.0.0"
 | 
					    testModImplementation sourceSets.main.output
 | 
				
			||||||
 | 
					    testModExtra 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.21'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cctJavadoc 'cc.tweaked:cct-javadoc:1.3.0'
 | 
					    cctJavadoc 'cc.tweaked:cct-javadoc:1.4.1'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Compile tasks
 | 
					// Compile tasks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					compileTestModJava {
 | 
				
			||||||
 | 
					    dependsOn(compileJava)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
javadoc {
 | 
					javadoc {
 | 
				
			||||||
    include "dan200/computercraft/api/**/*.java"
 | 
					    include "dan200/computercraft/api/**/*.java"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -142,94 +192,37 @@ task luaJavadoc(type: Javadoc) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    options.docletpath = configurations.cctJavadoc.files as List
 | 
					    options.docletpath = configurations.cctJavadoc.files as List
 | 
				
			||||||
    options.doclet = "cc.tweaked.javadoc.LuaDoclet"
 | 
					    options.doclet = "cc.tweaked.javadoc.LuaDoclet"
 | 
				
			||||||
 | 
					    options.noTimestamp = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Attempt to run under Java 11 (any Java >= 9 will work though).
 | 
					    javadocTool = javaToolchains.javadocToolFor {
 | 
				
			||||||
    if(System.getProperty("java.version").startsWith("1.")
 | 
					        languageVersion = javaVersion
 | 
				
			||||||
        && (System.getenv("JAVA_HOME_11_X64") != null || project.hasProperty("java11Home"))) {
 | 
					 | 
				
			||||||
        executable = "${System.getenv("JAVA_HOME_11_X64") ?: project.property("java11Home")}/bin/javadoc"
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jar {
 | 
					jar {
 | 
				
			||||||
    dependsOn javadoc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    manifest {
 | 
					    manifest {
 | 
				
			||||||
        attributes(["Specification-Title": "computercraft",
 | 
					        attributes([
 | 
				
			||||||
                    "Specification-Vendor": "SquidDev",
 | 
					            "Specification-Title"     : "computercraft",
 | 
				
			||||||
                    "Specification-Version": "1",
 | 
					            "Specification-Vendor"    : "SquidDev",
 | 
				
			||||||
                    "Implementation-Title": "CC: Tweaked",
 | 
					            "Specification-Version"   : "1",
 | 
				
			||||||
                    "Implementation-Version": "${mod_version}",
 | 
					            "Implementation-Title"    : "CC: Tweaked",
 | 
				
			||||||
                    "Implementation-Vendor" :"SquidDev",
 | 
					            "Implementation-Version"  : "${mod_version}",
 | 
				
			||||||
                    "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
 | 
					            "Implementation-Vendor"   : "SquidDev",
 | 
				
			||||||
    }
 | 
					            "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
 | 
				
			||||||
 | 
					        ])
 | 
				
			||||||
    from (sourceSets.main.allSource) {
 | 
					 | 
				
			||||||
        include "dan200/computercraft/api/**/*.java"
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
 | 
					    from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[compileJava, compileTestJava].forEach {
 | 
					jar.finalizedBy('reobfJar')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[compileJava, compileTestJava, compileTestModJava].forEach {
 | 
				
			||||||
    it.configure {
 | 
					    it.configure {
 | 
				
			||||||
        options.compilerArgs << "-Xlint" << "-Xlint:-processing"
 | 
					        options.compilerArgs << "-Xlint" << "-Xlint:-processing"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.nio.charset.StandardCharsets
 | 
					 | 
				
			||||||
import java.nio.file.*
 | 
					 | 
				
			||||||
import java.util.zip.*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import com.google.gson.GsonBuilder
 | 
					 | 
				
			||||||
import com.google.gson.JsonElement
 | 
					 | 
				
			||||||
import com.hierynomus.gradle.license.tasks.LicenseCheck
 | 
					 | 
				
			||||||
import com.hierynomus.gradle.license.tasks.LicenseFormat
 | 
					 | 
				
			||||||
import org.ajoberstar.grgit.Grgit
 | 
					 | 
				
			||||||
import proguard.gradle.ProGuardTask
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
task proguard(type: ProGuardTask, dependsOn: jar) {
 | 
					 | 
				
			||||||
    description "Removes unused shadowed classes from the jar"
 | 
					 | 
				
			||||||
    group "compact"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    injars jar.archivePath
 | 
					 | 
				
			||||||
    outjars "${jar.archivePath.absolutePath.replace(".jar", "")}-min.jar"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Add the main runtime jar and all non-shadowed dependencies
 | 
					 | 
				
			||||||
    libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
 | 
					 | 
				
			||||||
    libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
 | 
					 | 
				
			||||||
    doFirst {
 | 
					 | 
				
			||||||
        sourceSets.main.compileClasspath
 | 
					 | 
				
			||||||
            .filter { !it.name.contains("Cobalt") }
 | 
					 | 
				
			||||||
            .each { libraryjars it }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // We want to avoid as much obfuscation as possible. We're only doing this to shrink code size.
 | 
					 | 
				
			||||||
    dontobfuscate; dontoptimize; keepattributes; keepparameternames
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Proguard will remove directories by default, but that breaks JarMount.
 | 
					 | 
				
			||||||
    keepdirectories 'data/computercraft/lua**'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Preserve ComputerCraft classes - we only want to strip shadowed files.
 | 
					 | 
				
			||||||
    keep 'class dan200.computercraft.** { *; }'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // LWJGL and Apache bundle Java 9 versions, which is great, but rather breaks Proguard
 | 
					 | 
				
			||||||
    dontwarn 'module-info'
 | 
					 | 
				
			||||||
    dontwarn 'org.apache.**,org.lwjgl.**'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
task proguardMove(dependsOn: proguard) {
 | 
					 | 
				
			||||||
    description "Replace the original jar with the minified version"
 | 
					 | 
				
			||||||
    group "compact"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    doLast {
 | 
					 | 
				
			||||||
        Files.move(
 | 
					 | 
				
			||||||
            file("${jar.archivePath.absolutePath.replace(".jar", "")}-min.jar").toPath(),
 | 
					 | 
				
			||||||
            file(jar.archivePath).toPath(),
 | 
					 | 
				
			||||||
            StandardCopyOption.REPLACE_EXISTING
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
processResources {
 | 
					processResources {
 | 
				
			||||||
    inputs.property "version", mod_version
 | 
					    inputs.property "version", mod_version
 | 
				
			||||||
    inputs.property "mcversion", mc_version
 | 
					    inputs.property "mcversion", mc_version
 | 
				
			||||||
@@ -237,25 +230,27 @@ processResources {
 | 
				
			|||||||
    def hash = 'none'
 | 
					    def hash = 'none'
 | 
				
			||||||
    Set<String> contributors = []
 | 
					    Set<String> contributors = []
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
        def grgit = Grgit.open(dir: '.')
 | 
					        hash = ["git", "-C", projectDir, "rev-parse", "HEAD"].execute().text.trim()
 | 
				
			||||||
        hash = grgit.head().id
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
 | 
					        def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
 | 
				
			||||||
        grgit.log().each {
 | 
					        ["git", "-C", projectDir, "log", "--format=tformat:%an%n%cn"].execute().text.split('\n').each {
 | 
				
			||||||
            if (!blacklist.contains(it.author.name)) contributors.add(it.author.name)
 | 
					            if (!blacklist.contains(it)) contributors.add(it)
 | 
				
			||||||
            if (!blacklist.contains(it.committer.name)) contributors.add(it.committer.name)
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    } catch(Exception ignored) { }
 | 
					    } catch (Exception e) {
 | 
				
			||||||
 | 
					        e.printStackTrace()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    inputs.property "commithash", hash
 | 
					    inputs.property "commithash", hash
 | 
				
			||||||
 | 
					    duplicatesStrategy = DuplicatesStrategy.INCLUDE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from(sourceSets.main.resources.srcDirs) {
 | 
					    from(sourceSets.main.resources.srcDirs) {
 | 
				
			||||||
        include 'META-INF/mods.toml'
 | 
					        include 'META-INF/mods.toml'
 | 
				
			||||||
        include 'data/computercraft/lua/rom/help/credits.txt'
 | 
					        include 'data/computercraft/lua/rom/help/credits.txt'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expand 'version': mod_version,
 | 
					        expand(
 | 
				
			||||||
               'mcversion': mc_version,
 | 
					            'version': mod_version,
 | 
				
			||||||
               'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n')
 | 
					            'mcversion': mc_version,
 | 
				
			||||||
 | 
					            'gitcontributors': contributors.sort(false, String.CASE_INSENSITIVE_ORDER).join('\n')
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from(sourceSets.main.resources.srcDirs) {
 | 
					    from(sourceSets.main.resources.srcDirs) {
 | 
				
			||||||
@@ -264,51 +259,16 @@ processResources {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task compressJson(dependsOn: jar) {
 | 
					sourcesJar {
 | 
				
			||||||
    group "compact"
 | 
					    duplicatesStrategy = DuplicatesStrategy.INCLUDE
 | 
				
			||||||
    description "Minifies all JSON files, stripping whitespace"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def jarPath = file(jar.archivePath)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def tempPath = File.createTempFile("input", ".jar", temporaryDir)
 | 
					 | 
				
			||||||
    tempPath.deleteOnExit()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def gson = new GsonBuilder().create()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    doLast {
 | 
					 | 
				
			||||||
        // Copy over all files in the current jar to the new one, running json files from GSON. As pretty printing
 | 
					 | 
				
			||||||
        // is turned off, they should be minified.
 | 
					 | 
				
			||||||
        new ZipFile(jarPath).withCloseable { inJar ->
 | 
					 | 
				
			||||||
            tempPath.getParentFile().mkdirs()
 | 
					 | 
				
			||||||
            new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(tempPath))).withCloseable { outJar ->
 | 
					 | 
				
			||||||
                inJar.entries().each { entry ->
 | 
					 | 
				
			||||||
                    if(entry.directory) {
 | 
					 | 
				
			||||||
                        outJar.putNextEntry(entry)
 | 
					 | 
				
			||||||
                    } else if(!entry.name.endsWith(".json")) {
 | 
					 | 
				
			||||||
                        outJar.putNextEntry(entry)
 | 
					 | 
				
			||||||
                        inJar.getInputStream(entry).withCloseable { outJar << it }
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        ZipEntry newEntry = new ZipEntry(entry.name)
 | 
					 | 
				
			||||||
                        newEntry.setTime(entry.time)
 | 
					 | 
				
			||||||
                        outJar.putNextEntry(newEntry)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        def element = inJar.getInputStream(entry).withCloseable { gson.fromJson(it.newReader("UTF8"), JsonElement.class) }
 | 
					 | 
				
			||||||
                        outJar.write(gson.toJson(element).getBytes(StandardCharsets.UTF_8))
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // And replace the original jar again
 | 
					 | 
				
			||||||
        Files.move(tempPath.toPath(), jarPath.toPath(), StandardCopyOption.REPLACE_EXISTING)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
assemble.dependsOn compressJson
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Web tasks
 | 
					// 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
 | 
					import org.apache.tools.ant.taskdefs.condition.Os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
List<String> mkCommand(String command) {
 | 
					List<String> mkCommand(String command) {
 | 
				
			||||||
@@ -336,7 +296,7 @@ task minifyWeb(type: Exec, dependsOn: rollup) {
 | 
				
			|||||||
    inputs.file("package-lock.json").withPropertyName("package-lock.json")
 | 
					    inputs.file("package-lock.json").withPropertyName("package-lock.json")
 | 
				
			||||||
    outputs.file("$buildDir/rollup/index.min.js").withPropertyName("output")
 | 
					    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")
 | 
					    commandLine mkCommand('"node_modules/.bin/terser"' + " -o '$buildDir/rollup/index.min.js' '$buildDir/rollup/index.js'")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
 | 
					task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
 | 
				
			||||||
@@ -355,7 +315,9 @@ task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task docWebsite(type: Copy, dependsOn: [illuaminateDocs]) {
 | 
					task docWebsite(type: Copy, dependsOn: [illuaminateDocs]) {
 | 
				
			||||||
    from 'doc/logo.png'
 | 
					    from 'doc'
 | 
				
			||||||
 | 
					    include 'logo.png'
 | 
				
			||||||
 | 
					    include 'images/**'
 | 
				
			||||||
    into "${project.docsDir}/lua"
 | 
					    into "${project.docsDir}/lua"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -369,9 +331,10 @@ test {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jacocoTestReport {
 | 
					jacocoTestReport {
 | 
				
			||||||
 | 
					    dependsOn('test')
 | 
				
			||||||
    reports {
 | 
					    reports {
 | 
				
			||||||
        xml.enabled true
 | 
					        xml.required = true
 | 
				
			||||||
        html.enabled true
 | 
					        html.required = true
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -388,14 +351,14 @@ license {
 | 
				
			|||||||
    it.configure {
 | 
					    it.configure {
 | 
				
			||||||
        include("**/*.java")
 | 
					        include("**/*.java")
 | 
				
			||||||
        exclude("dan200/computercraft/api/**")
 | 
					        exclude("dan200/computercraft/api/**")
 | 
				
			||||||
        header rootProject.file('config/license/main.txt')
 | 
					        header file('config/license/main.txt')
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[licenseTest, licenseFormatTest].forEach {
 | 
					[licenseTest, licenseFormatTest, licenseTestMod, licenseFormatTestMod].forEach {
 | 
				
			||||||
    it.configure {
 | 
					    it.configure {
 | 
				
			||||||
        include("**/*.java")
 | 
					        include("**/*.java")
 | 
				
			||||||
        header rootProject.file('config/license/main.txt')
 | 
					        header file('config/license/main.txt')
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -406,16 +369,76 @@ gradle.projectsEvaluated {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task licenseAPI(type: LicenseCheck);
 | 
					task licenseAPI(type: LicenseCheck)
 | 
				
			||||||
task licenseFormatAPI(type: LicenseFormat);
 | 
					task licenseFormatAPI(type: LicenseFormat)
 | 
				
			||||||
[licenseAPI, licenseFormatAPI].forEach {
 | 
					[licenseAPI, licenseFormatAPI].forEach {
 | 
				
			||||||
    it.configure {
 | 
					    it.configure {
 | 
				
			||||||
        source = sourceSets.main.java
 | 
					        source = sourceSets.main.java
 | 
				
			||||||
        include("dan200/computercraft/api/**")
 | 
					        include("dan200/computercraft/api/**")
 | 
				
			||||||
        header rootProject.file('config/license/api.txt')
 | 
					        header file('config/license/api.txt')
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    check.dependsOn("jacocoTest${name}Report")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Upload tasks
 | 
					// Upload tasks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task checkRelease {
 | 
					task checkRelease {
 | 
				
			||||||
@@ -423,31 +446,31 @@ task checkRelease {
 | 
				
			|||||||
    description "Verifies that everything is ready for a release"
 | 
					    description "Verifies that everything is ready for a release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    inputs.property "version", mod_version
 | 
					    inputs.property "version", mod_version
 | 
				
			||||||
    inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.txt")
 | 
					    inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.md")
 | 
				
			||||||
    inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
 | 
					    inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    doLast {
 | 
					    doLast {
 | 
				
			||||||
        def ok = true
 | 
					        def ok = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Check we're targetting the current version
 | 
					        // Check we're targetting the current version
 | 
				
			||||||
        def whatsnew = new File("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt").readLines()
 | 
					        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") {
 | 
					        if (whatsnew[0] != "New features in CC: Tweaked $mod_version") {
 | 
				
			||||||
            ok = false
 | 
					            ok = false
 | 
				
			||||||
            project.logger.error("Expected `whatsnew.txt' to target $mod_version.")
 | 
					            project.logger.error("Expected `whatsnew.md' to target $mod_version.")
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Check "read more" exists and trim it
 | 
					        // Check "read more" exists and trim it
 | 
				
			||||||
        def idx = whatsnew.findIndexOf { it == 'Type "help changelog" to see the full version history.' }
 | 
					        def idx = whatsnew.findIndexOf { it == 'Type "help changelog" to see the full version history.' }
 | 
				
			||||||
        if (idx == -1) {
 | 
					        if (idx == -1) {
 | 
				
			||||||
            ok = false
 | 
					            ok = false
 | 
				
			||||||
            project.logger.error("Must mention the changelog in whatsnew.txt")
 | 
					            project.logger.error("Must mention the changelog in whatsnew.md")
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            whatsnew = whatsnew.getAt(0 ..< idx)
 | 
					            whatsnew = whatsnew.getAt(0..<idx)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Check whatsnew and changelog match.
 | 
					        // Check whatsnew and changelog match.
 | 
				
			||||||
        def versionChangelog = "# " + whatsnew.join("\n")
 | 
					        def versionChangelog = "# " + whatsnew.join("\n")
 | 
				
			||||||
        def changelog = new File("src/main/resources/data/computercraft/lua/rom/help/changelog.txt").getText()
 | 
					        def changelog = new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/changelog.md").getText()
 | 
				
			||||||
        if (!changelog.startsWith(versionChangelog)) {
 | 
					        if (!changelog.startsWith(versionChangelog)) {
 | 
				
			||||||
            ok = false
 | 
					            ok = false
 | 
				
			||||||
            project.logger.error("whatsnew and changelog are not in sync")
 | 
					            project.logger.error("whatsnew and changelog are not in sync")
 | 
				
			||||||
@@ -458,66 +481,79 @@ task checkRelease {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
check.dependsOn checkRelease
 | 
					check.dependsOn checkRelease
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def isStable = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
curseforge {
 | 
					curseforge {
 | 
				
			||||||
    apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
 | 
					    apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
 | 
				
			||||||
    project {
 | 
					    project {
 | 
				
			||||||
        id = '282001'
 | 
					        id = '282001'
 | 
				
			||||||
        releaseType = 'release'
 | 
					        releaseType = isStable ? 'release' : 'alpha'
 | 
				
			||||||
        changelog = "Release notes can be found on the GitHub repository (https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
 | 
					        changelog = "Release notes can be found on the GitHub repository (https://github.com/SquidDev-CC/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        relations {
 | 
					        addGameVersion "${mc_version}"
 | 
				
			||||||
            incompatible "computercraft"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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/SquidDev-CC/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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
publishing {
 | 
					publishing {
 | 
				
			||||||
    publications {
 | 
					    publications {
 | 
				
			||||||
        mavenJava(MavenPublication) {
 | 
					        maven(MavenPublication) {
 | 
				
			||||||
            from components.java
 | 
					            from components.java
 | 
				
			||||||
            // artifact sourceJar
 | 
					
 | 
				
			||||||
 | 
					            pom {
 | 
				
			||||||
 | 
					                name = 'CC: Tweaked'
 | 
				
			||||||
 | 
					                description = 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
 | 
				
			||||||
 | 
					                url = 'https://github.com/SquidDev-CC/CC-Tweaked'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                scm {
 | 
				
			||||||
 | 
					                    url = 'https://github.com/SquidDev-CC/CC-Tweaked.git'
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                issueManagement {
 | 
				
			||||||
 | 
					                    system = 'github'
 | 
				
			||||||
 | 
					                    url = 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                licenses {
 | 
				
			||||||
 | 
					                    license {
 | 
				
			||||||
 | 
					                        name = 'ComputerCraft Public License, Version 1.0'
 | 
				
			||||||
 | 
					                        url = 'https://github.com/SquidDev-CC/CC-Tweaked/blob/mc-1.15.x/LICENSE'
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                withXml { asNode().remove(asNode().get("dependencies")) }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
uploadArchives {
 | 
					 | 
				
			||||||
    repositories {
 | 
					    repositories {
 | 
				
			||||||
        if(project.hasProperty('mavenUploadUrl')) {
 | 
					        if (project.hasProperty("mavenUser")) {
 | 
				
			||||||
            mavenDeployer {
 | 
					            maven {
 | 
				
			||||||
                configuration = configurations.deployerJars
 | 
					                name = "SquidDev"
 | 
				
			||||||
 | 
					                url = "https://squiddev.cc/maven"
 | 
				
			||||||
                repository(url: project.property('mavenUploadUrl')) {
 | 
					                credentials {
 | 
				
			||||||
                    authentication(
 | 
					                    username = project.property("mavenUser") as String
 | 
				
			||||||
                        userName: project.property('mavenUploadUser'),
 | 
					                    password = project.property("mavenPass") as String
 | 
				
			||||||
                        privateKey: project.property('mavenUploadKey'))
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                pom.project {
 | 
					 | 
				
			||||||
                    name 'CC: Tweaked'
 | 
					 | 
				
			||||||
                    packaging 'jar'
 | 
					 | 
				
			||||||
                    description 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
 | 
					 | 
				
			||||||
                    url 'https://github.com/SquidDev-CC/CC-Tweaked'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    scm {
 | 
					 | 
				
			||||||
                        url 'https://github.com/SquidDev-CC/CC-Tweaked.git'
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    issueManagement {
 | 
					 | 
				
			||||||
                        system 'github'
 | 
					 | 
				
			||||||
                        url 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    licenses {
 | 
					 | 
				
			||||||
                        license {
 | 
					 | 
				
			||||||
                            name 'ComputerCraft Public License, Version 1.0'
 | 
					 | 
				
			||||||
                            url 'https://github.com/SquidDev-CC/CC-Tweaked/blob/master/LICENSE'
 | 
					 | 
				
			||||||
                            distribution 'repo'
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                pom.whenConfigured { pom ->
 | 
					 | 
				
			||||||
                    pom.dependencies.clear()
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -528,25 +564,35 @@ githubRelease {
 | 
				
			|||||||
    token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
 | 
					    token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
 | 
				
			||||||
    owner 'SquidDev-CC'
 | 
					    owner 'SquidDev-CC'
 | 
				
			||||||
    repo 'CC-Tweaked'
 | 
					    repo 'CC-Tweaked'
 | 
				
			||||||
    try {
 | 
					    targetCommitish.set(project.provider({
 | 
				
			||||||
        targetCommitish = Grgit.open(dir: '.').branch.current().name
 | 
					        def cmd = ["git", "rev-parse", "--abbrev-ref", "HEAD"]
 | 
				
			||||||
    } catch(Exception ignored) { }
 | 
					        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}"
 | 
					    tagName "v${mc_version}-${mod_version}"
 | 
				
			||||||
    releaseName "[${mc_version}] ${mod_version}"
 | 
					    releaseName "[${mc_version}] ${mod_version}"
 | 
				
			||||||
    body {
 | 
					    body.set(project.provider({
 | 
				
			||||||
        "## " + new File("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
 | 
					        "## " + new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
 | 
				
			||||||
            .readLines()
 | 
					            .readLines()
 | 
				
			||||||
            .takeWhile { it != 'Type "help changelog" to see the full version history.' }
 | 
					            .takeWhile { it != 'Type "help changelog" to see the full version history.' }
 | 
				
			||||||
            .join("\n").trim()
 | 
					            .join("\n").trim()
 | 
				
			||||||
    }
 | 
					    }))
 | 
				
			||||||
    prerelease false
 | 
					    prerelease isStable
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def uploadTasks = ["uploadArchives", "curseforge", "githubRelease"]
 | 
					def uploadTasks = ["publish", "curseforge", "publishModrinth", "githubRelease"]
 | 
				
			||||||
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
 | 
					uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
task uploadAll(dependsOn: uploadTasks) {
 | 
					task uploadAll(dependsOn: uploadTasks) {
 | 
				
			||||||
    group "upload"
 | 
					    group "upload"
 | 
				
			||||||
    description "Uploads to all repositories (Maven, Curse, GitHub release)"
 | 
					    description "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@
 | 
				
			|||||||
    <property name="charset" value="UTF-8" />
 | 
					    <property name="charset" value="UTF-8" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <module name="SuppressionFilter">
 | 
					    <module name="SuppressionFilter">
 | 
				
			||||||
        <property name="file" value="config/checkstyle/suppressions.xml" />
 | 
						<property name="file" value="${config_loc}/suppressions.xml" />
 | 
				
			||||||
    </module>
 | 
					    </module>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <module name="BeforeExecutionExclusionFileFilter">
 | 
					    <module name="BeforeExecutionExclusionFileFilter">
 | 
				
			||||||
@@ -58,13 +58,20 @@
 | 
				
			|||||||
        <module name="SimplifyBooleanExpression" />
 | 
					        <module name="SimplifyBooleanExpression" />
 | 
				
			||||||
        <module name="SimplifyBooleanReturn" />
 | 
					        <module name="SimplifyBooleanReturn" />
 | 
				
			||||||
        <module name="StringLiteralEquality" />
 | 
					        <module name="StringLiteralEquality" />
 | 
				
			||||||
        <module name="UnnecessaryParentheses" />
 | 
					        <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="UnnecessarySemicolonAfterTypeMemberDeclaration" />
 | 
					        <module name="UnnecessarySemicolonAfterTypeMemberDeclaration" />
 | 
				
			||||||
        <module name="UnnecessarySemicolonInTryWithResources" />
 | 
					        <module name="UnnecessarySemicolonInTryWithResources" />
 | 
				
			||||||
        <module name="UnnecessarySemicolonInEnumeration" />
 | 
					        <module name="UnnecessarySemicolonInEnumeration" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Imports -->
 | 
					        <!-- Imports -->
 | 
				
			||||||
        <module name="CustomImportOrder" />
 | 
					        <module name="CustomImportOrder">
 | 
				
			||||||
 | 
					            <property name="customImportOrderRules"
 | 
				
			||||||
 | 
					                value="THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE###STATIC"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					        </module>
 | 
				
			||||||
        <module name="IllegalImport" />
 | 
					        <module name="IllegalImport" />
 | 
				
			||||||
        <module name="RedundantImport" />
 | 
					        <module name="RedundantImport" />
 | 
				
			||||||
        <module name="UnusedImports" />
 | 
					        <module name="UnusedImports" />
 | 
				
			||||||
@@ -97,20 +104,11 @@
 | 
				
			|||||||
        <module name="LambdaParameterName" />
 | 
					        <module name="LambdaParameterName" />
 | 
				
			||||||
        <module name="LocalFinalVariableName" />
 | 
					        <module name="LocalFinalVariableName" />
 | 
				
			||||||
        <module name="LocalVariableName" />
 | 
					        <module name="LocalVariableName" />
 | 
				
			||||||
        <!-- Allow an optional m_ on private members -->
 | 
					        <module name="MemberName" />
 | 
				
			||||||
        <module name="MemberName">
 | 
					 | 
				
			||||||
            <property name="applyToPrivate" value="false" />
 | 
					 | 
				
			||||||
            <property name="applyToPackage" value="false" />
 | 
					 | 
				
			||||||
        </module>
 | 
					 | 
				
			||||||
        <module name="MemberName">
 | 
					 | 
				
			||||||
            <property name="format" value="^(m_)?[a-z][a-zA-Z0-9]*$" />
 | 
					 | 
				
			||||||
            <property name="applyToPrivate" value="true" />
 | 
					 | 
				
			||||||
            <property name="applyToPackage" value="true" />
 | 
					 | 
				
			||||||
        </module>
 | 
					 | 
				
			||||||
        <module name="MethodName" />
 | 
					        <module name="MethodName" />
 | 
				
			||||||
        <module name="MethodTypeParameterName" />
 | 
					        <module name="MethodTypeParameterName" />
 | 
				
			||||||
        <module name="PackageName">
 | 
					        <module name="PackageName">
 | 
				
			||||||
            <property name="format" value="^dan200\.computercraf(\.[a-z][a-z0-9]*)*" />
 | 
					            <property name="format" value="^dan200\.computercraft(\.[a-z][a-z0-9]*)*" />
 | 
				
			||||||
        </module>
 | 
					        </module>
 | 
				
			||||||
        <module name="ParameterName" />
 | 
					        <module name="ParameterName" />
 | 
				
			||||||
        <module name="StaticVariableName">
 | 
					        <module name="StaticVariableName">
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,6 @@
 | 
				
			|||||||
    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraft.java" />
 | 
					    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraft.java" />
 | 
				
			||||||
    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraftAPI.java" />
 | 
					    <suppress checks="StaticVariableName" files=".*[\\/]ComputerCraftAPI.java" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- Do not check for missing package Javadoc. -->
 | 
					 | 
				
			||||||
    <suppress checks="JavadocStyle" files=".*[\\/]package-info.java" />
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <!-- The commands API is documented in Lua. -->
 | 
					    <!-- The commands API is documented in Lua. -->
 | 
				
			||||||
    <suppress checks="SummaryJavadocCheck" files=".*[\\/]CommandAPI.java" />
 | 
					    <suppress checks="SummaryJavadocCheck" files=".*[\\/]CommandAPI.java" />
 | 
				
			||||||
</suppressions>
 | 
					</suppressions>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								config/gitpod/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								config/gitpod/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					FROM gitpod/workspace-base
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					USER gitpod
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN sudo apt-get -q update \
 | 
				
			||||||
 | 
					 && sudo apt-get install -yq openjdk-8-jdk openjdk-16-jdk python3-pip npm \
 | 
				
			||||||
 | 
					 && sudo pip3 install pre-commit \
 | 
				
			||||||
 | 
					 && sudo update-java-alternatives --set java-1.8.0-openjdk-amd64
 | 
				
			||||||
@@ -2488,4 +2488,4 @@
 | 
				
			|||||||
      </option>
 | 
					      </option>
 | 
				
			||||||
    </inspection_tool>
 | 
					    </inspection_tool>
 | 
				
			||||||
  </profile>
 | 
					  </profile>
 | 
				
			||||||
</component>
 | 
					</component>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,4 +58,4 @@
 | 
				
			|||||||
      <option name="CONTINUATION_INDENT_SIZE" value="4" />
 | 
					      <option name="CONTINUATION_INDENT_SIZE" value="4" />
 | 
				
			||||||
    </indentOptions>
 | 
					    </indentOptions>
 | 
				
			||||||
  </codeStyleSettings>
 | 
					  </codeStyleSettings>
 | 
				
			||||||
</code_scheme>
 | 
					</code_scheme>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										55
									
								
								config/pre-commit/config.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								config/pre-commit/config.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					# See https://pre-commit.com for more information
 | 
				
			||||||
 | 
					# See https://pre-commit.com/hooks.html for more hooks
 | 
				
			||||||
 | 
					repos:
 | 
				
			||||||
 | 
					- repo: https://github.com/pre-commit/pre-commit-hooks
 | 
				
			||||||
 | 
					  rev: v3.2.0
 | 
				
			||||||
 | 
					  hooks:
 | 
				
			||||||
 | 
					  - id: trailing-whitespace
 | 
				
			||||||
 | 
					  - id: end-of-file-fixer
 | 
				
			||||||
 | 
					  - id: check-merge-conflict
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Quick syntax checkers
 | 
				
			||||||
 | 
					  - id: check-xml
 | 
				
			||||||
 | 
					  - id: check-yaml
 | 
				
			||||||
 | 
					  - id: check-toml
 | 
				
			||||||
 | 
					  - id: check-json
 | 
				
			||||||
 | 
					    exclude: "tsconfig\\.json$"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
 | 
				
			||||||
 | 
					  rev: 2.3.5
 | 
				
			||||||
 | 
					  hooks:
 | 
				
			||||||
 | 
					  - id: editorconfig-checker
 | 
				
			||||||
 | 
					    args: ['-disable-indentation']
 | 
				
			||||||
 | 
					    exclude: "^(.*\\.(bat)|LICENSE)$"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- repo: local
 | 
				
			||||||
 | 
					  hooks:
 | 
				
			||||||
 | 
					  - id: checkstyle
 | 
				
			||||||
 | 
					    name: Check Java codestyle
 | 
				
			||||||
 | 
					    files: ".*\\.java$"
 | 
				
			||||||
 | 
					    language: system
 | 
				
			||||||
 | 
					    entry: ./gradlew checkstyleMain checkstyleTest
 | 
				
			||||||
 | 
					    pass_filenames: false
 | 
				
			||||||
 | 
					    require_serial: true
 | 
				
			||||||
 | 
					  - id: license
 | 
				
			||||||
 | 
					    name: Check Java license headers
 | 
				
			||||||
 | 
					    files: ".*\\.java$"
 | 
				
			||||||
 | 
					    language: system
 | 
				
			||||||
 | 
					    entry: ./gradlew licenseFormat
 | 
				
			||||||
 | 
					    pass_filenames: false
 | 
				
			||||||
 | 
					    require_serial: true
 | 
				
			||||||
 | 
					  - id: illuaminate
 | 
				
			||||||
 | 
					    name: Check Lua code
 | 
				
			||||||
 | 
					    files: ".*\\.(lua|java|md)"
 | 
				
			||||||
 | 
					    language: script
 | 
				
			||||||
 | 
					    entry: config/pre-commit/illuaminate-lint.sh
 | 
				
			||||||
 | 
					    pass_filenames: false
 | 
				
			||||||
 | 
					    require_serial: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exclude: |
 | 
				
			||||||
 | 
					  (?x)^(
 | 
				
			||||||
 | 
					    src/generated|
 | 
				
			||||||
 | 
					    src/test/resources/test-rom/data/json-parsing/|
 | 
				
			||||||
 | 
					    src/testMod/server-files/|
 | 
				
			||||||
 | 
					    config/idea/
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
							
								
								
									
										16
									
								
								config/pre-commit/illuaminate-lint.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								config/pre-commit/illuaminate-lint.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env sh
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test -d bin || mkdir bin
 | 
				
			||||||
 | 
					test -f bin/illuaminate || curl -s -obin/illuaminate https://squiddev.cc/illuaminate/linux-x86-64/illuaminate
 | 
				
			||||||
 | 
					chmod +x bin/illuaminate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -n ${GITHUB_ACTIONS+x} ]; then
 | 
				
			||||||
 | 
					    # Register a problem matcher (see https://github.com/actions/toolkit/blob/master/docs/problem-matchers.md)
 | 
				
			||||||
 | 
					    # for illuaminate.
 | 
				
			||||||
 | 
					    echo "::add-matcher::.github/matchers/illuaminate.json"
 | 
				
			||||||
 | 
					    trap 'echo "::remove-matcher owner=illuaminate::"' EXIT
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					./gradlew luaJavadoc
 | 
				
			||||||
 | 
					bin/illuaminate lint
 | 
				
			||||||
							
								
								
									
										21
									
								
								doc/events/alarm.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/alarm.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] alarm
 | 
				
			||||||
 | 
					see: os.setAlarm To start an alarm.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{timer} event is fired when an alarm started with @{os.setAlarm} completes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The ID of the alarm that finished.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Starts a timer and then prints its ID:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local alarmID = os.setAlarm(os.time() + 0.05)
 | 
				
			||||||
 | 
					local event, id
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, id = os.pullEvent("alarm")
 | 
				
			||||||
 | 
					until id == alarmID
 | 
				
			||||||
 | 
					print("Alarm with ID " .. id .. " was fired")
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										24
									
								
								doc/events/char.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								doc/events/char.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] char
 | 
				
			||||||
 | 
					see: key To listen to any key press.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{char} event is fired when a character is _typed_ on the keyboard.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{char} event is different to a key press. Sometimes multiple key presses may result in one character being
 | 
				
			||||||
 | 
					typed (for instance, on some European keyboards). Similarly, some keys (e.g. <kbd>Ctrl</kbd>) do not have any
 | 
				
			||||||
 | 
					corresponding character. The @{key} should be used if you want to listen to key presses themselves.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The string representing the character that was pressed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints each character the user presses:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, character = os.pullEvent("char")
 | 
				
			||||||
 | 
					  print(character .. " was pressed.")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										18
									
								
								doc/events/computer_command.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/events/computer_command.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] computer_command
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{computer_command} event is fired when the `/computercraft queue` command is run for the current computer.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					... @{string}: The arguments passed to the command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints the contents of messages sent:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event = {os.pullEvent("computer_command")}
 | 
				
			||||||
 | 
					  print("Received message:", table.unpack(event, 2))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										19
									
								
								doc/events/disk.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/disk.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] disk
 | 
				
			||||||
 | 
					see: disk_eject For the event sent when a disk is removed.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{disk} event is fired when a disk is inserted into an adjacent or networked disk drive.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The side of the disk drive that had a disk inserted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a disk is inserted:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, side = os.pullEvent("disk")
 | 
				
			||||||
 | 
					  print("Inserted a disk on side " .. side)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										19
									
								
								doc/events/disk_eject.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/disk_eject.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] disk_eject
 | 
				
			||||||
 | 
					see: disk For the event sent when a disk is inserted.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{disk_eject} event is fired when a disk is removed from an adjacent or networked disk drive.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The side of the disk drive that had a disk removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a disk is removed:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, side = os.pullEvent("disk_eject")
 | 
				
			||||||
 | 
					  print("Removed a disk on side " .. side)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										14
									
								
								doc/events/http_check.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								doc/events/http_check.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] http_check
 | 
				
			||||||
 | 
					see: http.checkURLAsync To check a URL asynchronously.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{http_check} event is fired when a URL check finishes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is normally handled inside @{http.checkURL}, but it can still be seen when using @{http.checkURLAsync}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The URL requested to be checked.
 | 
				
			||||||
 | 
					3. @{boolean}: Whether the check succeeded.
 | 
				
			||||||
 | 
					4. @{string|nil}: If the check failed, a reason explaining why the check failed.
 | 
				
			||||||
							
								
								
									
										39
									
								
								doc/events/http_failure.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								doc/events/http_failure.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] http_failure
 | 
				
			||||||
 | 
					see: http.request To send an HTTP request.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{http_failure} event is fired when an HTTP request fails.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is normally handled inside @{http.get} and @{http.post}, but it can still be seen when using @{http.request}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The URL of the site requested.
 | 
				
			||||||
 | 
					3. @{string}: An error describing the failure.
 | 
				
			||||||
 | 
					4. @{http.Response|nil}: A response handle if the connection succeeded, but the server's response indicated failure.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints an error why the website cannot be contacted:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local myURL = "https://does.not.exist.tweaked.cc"
 | 
				
			||||||
 | 
					http.request(myURL)
 | 
				
			||||||
 | 
					local event, url, err
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, url, err = os.pullEvent("http_failure")
 | 
				
			||||||
 | 
					until url == myURL
 | 
				
			||||||
 | 
					print("The URL " .. url .. " could not be reached: " .. err)
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Prints the contents of a webpage that does not exist:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local myURL = "https://tweaked.cc/this/does/not/exist"
 | 
				
			||||||
 | 
					http.request(myURL)
 | 
				
			||||||
 | 
					local event, url, err, handle
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, url, err, handle = os.pullEvent("http_failure")
 | 
				
			||||||
 | 
					until url == myURL
 | 
				
			||||||
 | 
					print("The URL " .. url .. " could not be reached: " .. err)
 | 
				
			||||||
 | 
					print(handle.getResponseCode())
 | 
				
			||||||
 | 
					handle.close()
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										27
									
								
								doc/events/http_success.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								doc/events/http_success.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] http_success
 | 
				
			||||||
 | 
					see: http.request To make an HTTP request.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{http_success} event is fired when an HTTP request returns successfully.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is normally handled inside @{http.get} and @{http.post}, but it can still be seen when using @{http.request}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The URL of the site requested.
 | 
				
			||||||
 | 
					3. @{http.Response}: The handle for the response text.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints the content of a website (this may fail if the request fails):
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local myURL = "https://tweaked.cc/"
 | 
				
			||||||
 | 
					http.request(myURL)
 | 
				
			||||||
 | 
					local event, url, handle
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, url, handle = os.pullEvent("http_success")
 | 
				
			||||||
 | 
					until url == myURL
 | 
				
			||||||
 | 
					print("Contents of " .. url .. ":")
 | 
				
			||||||
 | 
					print(handle.readAll())
 | 
				
			||||||
 | 
					handle.close()
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										26
									
								
								doc/events/key.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								doc/events/key.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] key
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is fired when any key is pressed while the terminal is focused.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event returns a numerical "key code" (for instance, <kbd>F1</kbd> is 290). This value may vary between versions and
 | 
				
			||||||
 | 
					so it is recommended to use the constants in the @{keys} API rather than hard coding numeric values.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the button pressed represented a printable character, then the @{key} event will be followed immediately by a @{char}
 | 
				
			||||||
 | 
					event. If you are consuming text input, use a @{char} event instead!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The numerical key value of the key pressed.
 | 
				
			||||||
 | 
					3. @{boolean}: Whether the key event was generated while holding the key (@{true}), rather than pressing it the first time (@{false}).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints each key when the user presses it, and if the key is being held.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, key, is_held = os.pullEvent("key")
 | 
				
			||||||
 | 
					  print(("%s held=%s"):format(keys.getName(key), is_held))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										24
									
								
								doc/events/key_up.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								doc/events/key_up.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] key_up
 | 
				
			||||||
 | 
					see: keys For a lookup table of the given keys.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fired whenever a key is released (or the terminal is closed while a key was being pressed).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event returns a numerical "key code" (for instance, <kbd>F1</kbd> is 290). This value may vary between versions and
 | 
				
			||||||
 | 
					so it is recommended to use the constants in the @{keys} API rather than hard coding numeric values.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The numerical key value of the key pressed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints each key released on the keyboard whenever a @{key_up} event is fired.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, key = os.pullEvent("key_up")
 | 
				
			||||||
 | 
					  local name = keys.getName(key) or "unknown key"
 | 
				
			||||||
 | 
					  print(name .. " was released.")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										22
									
								
								doc/events/modem_message.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								doc/events/modem_message.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] modem_message
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{modem_message} event is fired when a message is received on an open channel on any modem.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The side of the modem that received the message.
 | 
				
			||||||
 | 
					3. @{number}: The channel that the message was sent on.
 | 
				
			||||||
 | 
					4. @{number}: The reply channel set by the sender.
 | 
				
			||||||
 | 
					5. @{any}: The message as sent by the sender.
 | 
				
			||||||
 | 
					6. @{number}: The distance between the sender and the receiver, in blocks (decimal).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when one is sent:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, side, channel, replyChannel, message, distance = os.pullEvent("modem_message")
 | 
				
			||||||
 | 
					  print(("Message received on side %s on channel %d (reply to %d) from %f blocks away with message %s"):format(side, channel, replyChannel, distance, tostring(message)))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										18
									
								
								doc/events/monitor_resize.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/events/monitor_resize.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] monitor_resize
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{monitor_resize} event is fired when an adjacent or networked monitor's size is changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The side or network ID of the monitor that resized.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a monitor is resized:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, side = os.pullEvent("monitor_resize")
 | 
				
			||||||
 | 
					  print("The monitor on side " .. side .. " was resized.")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										20
									
								
								doc/events/monitor_touch.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								doc/events/monitor_touch.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] monitor_touch
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{monitor_touch} event is fired when an adjacent or networked Advanced Monitor is right-clicked.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The side or network ID of the monitor that was touched.
 | 
				
			||||||
 | 
					3. @{number}: The X coordinate of the touch, in characters.
 | 
				
			||||||
 | 
					4. @{number}: The Y coordinate of the touch, in characters.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a monitor is touched:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, side, x, y = os.pullEvent("monitor_touch")
 | 
				
			||||||
 | 
					  print("The monitor on side " .. side .. " was touched at (" .. x .. ", " .. y .. ")")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										34
									
								
								doc/events/mouse_click.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								doc/events/mouse_click.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] mouse_click
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is fired when the terminal is clicked with a mouse. This event is only fired on advanced computers (including
 | 
				
			||||||
 | 
					advanced turtles and pocket computers).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The mouse button that was clicked.
 | 
				
			||||||
 | 
					3. @{number}: The X-coordinate of the click.
 | 
				
			||||||
 | 
					4. @{number}: The Y-coordinate of the click.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Mouse buttons
 | 
				
			||||||
 | 
					Several mouse events (@{mouse_click}, @{mouse_up}, @{mouse_scroll}) contain a "mouse button" code. This takes a
 | 
				
			||||||
 | 
					numerical value depending on which button on your mouse was last pressed when this event occurred.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<table class="pretty-table">
 | 
				
			||||||
 | 
					    <!-- Our markdown parser doesn't work on tables!? Guess I'll have to roll my own soonish :/. -->
 | 
				
			||||||
 | 
					    <tr><th>Button code</th><th>Mouse button</th></tr>
 | 
				
			||||||
 | 
					    <tr><td align="right">1</td><td>Left button</td></tr>
 | 
				
			||||||
 | 
					    <tr><td align="right">2</td><td>Middle button</td></tr>
 | 
				
			||||||
 | 
					    <tr><td align="right">3</td><td>Right button</td></tr>
 | 
				
			||||||
 | 
					</table>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Print the button and the coordinates whenever the mouse is clicked.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, button, x, y = os.pullEvent("mouse_click")
 | 
				
			||||||
 | 
					  print(("The mouse button %s was pressed at %d, %d"):format(button, x, y))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										22
									
								
								doc/events/mouse_drag.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								doc/events/mouse_drag.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] mouse_drag
 | 
				
			||||||
 | 
					see: mouse_click For when a mouse button is initially pressed.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is fired every time the mouse is moved while a mouse button is being held.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The [mouse button](mouse_click.html#Mouse_buttons) that is being pressed.
 | 
				
			||||||
 | 
					3. @{number}: The X-coordinate of the mouse.
 | 
				
			||||||
 | 
					4. @{number}: The Y-coordinate of the mouse.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Print the button and the coordinates whenever the mouse is dragged.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, button, x, y = os.pullEvent("mouse_drag")
 | 
				
			||||||
 | 
					  print(("The mouse button %s was dragged at %d, %d"):format(button, x, y))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										21
									
								
								doc/events/mouse_scroll.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/mouse_scroll.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] mouse_scroll
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is fired when a mouse wheel is scrolled in the terminal.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The direction of the scroll. (-1 = up, 1 = down)
 | 
				
			||||||
 | 
					3. @{number}: The X-coordinate of the mouse when scrolling.
 | 
				
			||||||
 | 
					4. @{number}: The Y-coordinate of the mouse when scrolling.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints the direction of each scroll, and the position of the mouse at the time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, dir, x, y = os.pullEvent("mouse_scroll")
 | 
				
			||||||
 | 
					  print(("The mouse was scrolled in direction %s at %d, %d"):format(dir, x, y))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										21
									
								
								doc/events/mouse_up.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/mouse_up.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] mouse_up
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is fired when a mouse button is released or a held mouse leaves the computer's terminal.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The [mouse button](mouse_click.html#Mouse_buttons) that was released.
 | 
				
			||||||
 | 
					3. @{number}: The X-coordinate of the mouse.
 | 
				
			||||||
 | 
					4. @{number}: The Y-coordinate of the mouse.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints the coordinates and button number whenever the mouse is released.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, button, x, y = os.pullEvent("mouse_up")
 | 
				
			||||||
 | 
					  print(("The mouse button %s was released at %d, %d"):format(button, x, y))
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										18
									
								
								doc/events/paste.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								doc/events/paste.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] paste
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{paste} event is fired when text is pasted into the computer through Ctrl-V (or ⌘V on Mac).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string} The text that was pasted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints pasted text:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, text = os.pullEvent("paste")
 | 
				
			||||||
 | 
					  print('"' .. text .. '" was pasted')
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										19
									
								
								doc/events/peripheral.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/peripheral.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] peripheral
 | 
				
			||||||
 | 
					see: peripheral_detach For the event fired when a peripheral is detached.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{peripheral} event is fired when a peripheral is attached on a side or to a modem.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The side the peripheral was attached to.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a peripheral is attached:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, side = os.pullEvent("peripheral")
 | 
				
			||||||
 | 
					  print("A peripheral was attached on side " .. side)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										19
									
								
								doc/events/peripheral_detach.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/events/peripheral_detach.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] peripheral_detach
 | 
				
			||||||
 | 
					see: peripheral For the event fired when a peripheral is attached.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{peripheral_detach} event is fired when a peripheral is detached from a side or from a modem.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The side the peripheral was detached from.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a peripheral is detached:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, side = os.pullEvent("peripheral_detach")
 | 
				
			||||||
 | 
					  print("A peripheral was detached on side " .. side)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										30
									
								
								doc/events/rednet_message.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								doc/events/rednet_message.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] rednet_message
 | 
				
			||||||
 | 
					see: modem_message For raw modem messages sent outside of Rednet.
 | 
				
			||||||
 | 
					see: rednet.receive To wait for a Rednet message with an optional timeout and protocol filter.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{rednet_message} event is fired when a message is sent over Rednet.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is usually handled by @{rednet.receive}, but it can also be pulled manually.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@{rednet_message} events are sent by @{rednet.run} in the top-level coroutine in response to @{modem_message} events. A @{rednet_message} event is always preceded by a @{modem_message} event. They are generated inside CraftOS rather than being sent by the ComputerCraft machine.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The ID of the sending computer.
 | 
				
			||||||
 | 
					3. @{any}: The message sent.
 | 
				
			||||||
 | 
					4. @{string|nil}: The protocol of the message, if provided.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when one is sent:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event, sender, message, protocol = os.pullEvent("rednet_message")
 | 
				
			||||||
 | 
					  if protocol ~= nil then
 | 
				
			||||||
 | 
					    print("Received message from " .. sender .. " with protocol " .. protocol .. " and message " .. tostring(message))
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    print("Received message from " .. sender .. " with message " .. tostring(message))
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										14
									
								
								doc/events/redstone.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								doc/events/redstone.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] redstone
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{redstone} event is fired whenever any redstone inputs on the computer change.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a redstone input changes:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  os.pullEvent("redstone")
 | 
				
			||||||
 | 
					  print("A redstone input has changed!")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										28
									
								
								doc/events/task_complete.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								doc/events/task_complete.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] task_complete
 | 
				
			||||||
 | 
					see: commands.execAsync To run a command which fires a task_complete event.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{task_complete} event is fired when an asynchronous task completes. This is usually handled inside the function call that queued the task; however, functions such as @{commands.execAsync} return immediately so the user can wait for completion.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The ID of the task that completed.
 | 
				
			||||||
 | 
					3. @{boolean}: Whether the command succeeded.
 | 
				
			||||||
 | 
					4. @{string}: If the command failed, an error message explaining the failure. (This is not present if the command succeeded.)
 | 
				
			||||||
 | 
					...: Any parameters returned from the command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints the results of an asynchronous command:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local taskID = commands.execAsync("say Hello")
 | 
				
			||||||
 | 
					local event
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event = {os.pullEvent("task_complete")}
 | 
				
			||||||
 | 
					until event[2] == taskID
 | 
				
			||||||
 | 
					if event[3] == true then
 | 
				
			||||||
 | 
					  print("Task " .. event[2] .. " succeeded:", table.unpack(event, 4))
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  print("Task " .. event[2] .. " failed: " .. event[4])
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										15
									
								
								doc/events/term_resize.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								doc/events/term_resize.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] term_resize
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{term_resize} event is fired when the main terminal is resized, mainly when a new tab is opened or closed in @{multishell}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints :
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  os.pullEvent("term_resize")
 | 
				
			||||||
 | 
					  local w, h = term.getSize()
 | 
				
			||||||
 | 
					  print("The term was resized to (" .. w .. ", " .. h .. ")")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										25
									
								
								doc/events/terminate.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								doc/events/terminate.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] terminate
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{terminate} event is fired when <kbd>Ctrl-T</kbd> is held down.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is normally handled by @{os.pullEvent}, and will not be returned. However, @{os.pullEventRaw} will return this event when fired.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@{terminate} will be sent even when a filter is provided to @{os.pullEventRaw}. When using @{os.pullEventRaw} with a filter, make sure to check that the event is not @{terminate}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when Ctrl-T is held:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  local event = os.pullEventRaw("terminate")
 | 
				
			||||||
 | 
					  if event == "terminate" then print("Terminate requested!") end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Exits when Ctrl-T is held:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  os.pullEvent()
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										21
									
								
								doc/events/timer.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/timer.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] timer
 | 
				
			||||||
 | 
					see: os.startTimer To start a timer.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{timer} event is fired when a timer started with @{os.startTimer} completes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{number}: The ID of the timer that finished.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Starts a timer and then prints its ID:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local timerID = os.startTimer(2)
 | 
				
			||||||
 | 
					local event, id
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, id = os.pullEvent("timer")
 | 
				
			||||||
 | 
					until id == timerID
 | 
				
			||||||
 | 
					print("Timer with ID " .. id .. " was fired")
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										14
									
								
								doc/events/turtle_inventory.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								doc/events/turtle_inventory.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] turtle_inventory
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{turtle_inventory} event is fired when a turtle's inventory is changed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when the inventory is changed:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					while true do
 | 
				
			||||||
 | 
					  os.pullEvent("turtle_inventory")
 | 
				
			||||||
 | 
					  print("The inventory was changed.")
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										21
									
								
								doc/events/websocket_closed.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								doc/events/websocket_closed.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] websocket_closed
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{websocket_closed} event is fired when an open WebSocket connection is closed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The URL of the WebSocket that was closed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message when a WebSocket is closed (this may take a minute):
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local myURL = "wss://example.tweaked.cc/echo"
 | 
				
			||||||
 | 
					local ws = http.websocket(myURL)
 | 
				
			||||||
 | 
					local event, url
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, url = os.pullEvent("websocket_closed")
 | 
				
			||||||
 | 
					until url == myURL
 | 
				
			||||||
 | 
					print("The WebSocket at " .. url .. " was closed.")
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										25
									
								
								doc/events/websocket_failure.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								doc/events/websocket_failure.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] websocket_failure
 | 
				
			||||||
 | 
					see: http.websocketAsync To send an HTTP request.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{websocket_failure} event is fired when a WebSocket connection request fails.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is normally handled inside @{http.websocket}, but it can still be seen when using @{http.websocketAsync}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The URL of the site requested.
 | 
				
			||||||
 | 
					3. @{string}: An error describing the failure.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints an error why the website cannot be contacted:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local myURL = "wss://example.tweaked.cc/not-a-websocket"
 | 
				
			||||||
 | 
					http.websocketAsync(myURL)
 | 
				
			||||||
 | 
					local event, url, err
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, url, err = os.pullEvent("websocket_failure")
 | 
				
			||||||
 | 
					until url == myURL
 | 
				
			||||||
 | 
					print("The URL " .. url .. " could not be reached: " .. err)
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										26
									
								
								doc/events/websocket_message.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								doc/events/websocket_message.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] websocket_message
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{websocket_message} event is fired when a message is received on an open WebSocket connection.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is normally handled by @{http.Websocket.receive}, but it can also be pulled manually.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The URL of the WebSocket.
 | 
				
			||||||
 | 
					3. @{string}: The contents of the message.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints a message sent by a WebSocket:
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local myURL = "wss://example.tweaked.cc/echo"
 | 
				
			||||||
 | 
					local ws = http.websocket(myURL)
 | 
				
			||||||
 | 
					ws.send("Hello!")
 | 
				
			||||||
 | 
					local event, url, message
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, url, message = os.pullEvent("websocket_message")
 | 
				
			||||||
 | 
					until url == myURL
 | 
				
			||||||
 | 
					print("Received message from " .. url .. " with contents " .. message)
 | 
				
			||||||
 | 
					ws.close()
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										28
									
								
								doc/events/websocket_success.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								doc/events/websocket_success.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					module: [kind=event] websocket_success
 | 
				
			||||||
 | 
					see: http.websocketAsync To open a WebSocket asynchronously.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The @{websocket_success} event is fired when a WebSocket connection request returns successfully.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This event is normally handled inside @{http.websocket}, but it can still be seen when using @{http.websocketAsync}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Return Values
 | 
				
			||||||
 | 
					1. @{string}: The event name.
 | 
				
			||||||
 | 
					2. @{string}: The URL of the site.
 | 
				
			||||||
 | 
					3. @{http.Websocket}: The handle for the WebSocket.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Example
 | 
				
			||||||
 | 
					Prints the content of a website (this may fail if the request fails):
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					local myURL = "wss://example.tweaked.cc/echo"
 | 
				
			||||||
 | 
					http.websocketAsync(myURL)
 | 
				
			||||||
 | 
					local event, url, handle
 | 
				
			||||||
 | 
					repeat
 | 
				
			||||||
 | 
					    event, url, handle = os.pullEvent("websocket_success")
 | 
				
			||||||
 | 
					until url == myURL
 | 
				
			||||||
 | 
					print("Connected to " .. url)
 | 
				
			||||||
 | 
					handle.send("Hello!")
 | 
				
			||||||
 | 
					print(handle.receive())
 | 
				
			||||||
 | 
					handle.close()
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										1
									
								
								doc/head.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								doc/head.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<meta name="theme-color" content="#c8d87c">
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								doc/images/basic-terminal.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/images/basic-terminal.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 53 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								doc/images/peripherals.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/images/peripherals.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 194 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								doc/images/turtle.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								doc/images/turtle.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 163 KiB  | 
							
								
								
									
										56
									
								
								doc/index.md
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								doc/index.md
									
									
									
									
									
								
							@@ -1,11 +1,55 @@
 | 
				
			|||||||
#  [](https://minecraft.curseforge.com/projects/cc-tweaked "Download CC: Tweaked on CurseForge")
 | 
					# 
 | 
				
			||||||
 | 
					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 is a fork of [ComputerCraft], adding programmable computers, turtles and more to Minecraft.
 | 
					CC: Tweaked can be installed from [CurseForge] or [Modrinth]. It requires the [Minecraft Forge][forge] mod loader, but
 | 
				
			||||||
 | 
					[versions are available for Fabric][ccrestitched].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This website contains documentation for all Lua libraries and APIs from the latest version of CC: Tweaked. This
 | 
					## Features
 | 
				
			||||||
documentation is still in development, so will most likely be incomplete. If you've found something you think is wrong,
 | 
					Controlled using the [Lua programming language][lua], CC: Tweaked's computers provides all the tools you need to start
 | 
				
			||||||
or would like to help out [please get in touch on GitHub][gh].
 | 
					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/SquidDev-CC/CC-Tweaked/ "CC: Tweaked on GitHub"
 | 
				
			||||||
[bug]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose
 | 
					[bug]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose
 | 
				
			||||||
[computercraft]: https://github.com/dan200/ComputerCraft "ComputerCraft on GitHub"
 | 
					[computercraft]: https://github.com/dan200/ComputerCraft "ComputerCraft on GitHub"
 | 
				
			||||||
[gh]: https://github.com/SquidDev-CC/CC-Tweaked "CC:Tweaked 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"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,7 +77,7 @@ the prompt.
 | 
				
			|||||||
@treturn string The text typed in.
 | 
					@treturn string The text typed in.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@see cc.completion For functions to help with completion.
 | 
					@see cc.completion For functions to help with completion.
 | 
				
			||||||
@usage Read an string and echo it back to the user
 | 
					@usage Read a string and echo it back to the user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    write("> ")
 | 
					    write("> ")
 | 
				
			||||||
    local msg = read()
 | 
					    local msg = read()
 | 
				
			||||||
@@ -101,6 +101,9 @@ the prompt.
 | 
				
			|||||||
    write("> ")
 | 
					    write("> ")
 | 
				
			||||||
    local msg = read(nil, history, function(text) return completion.choice(text, choices) end, "app")
 | 
					    local msg = read(nil, history, function(text) return completion.choice(text, choices) end, "app")
 | 
				
			||||||
    print(msg)
 | 
					    print(msg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@changed 1.74 Added `completeFn` parameter.
 | 
				
			||||||
 | 
					@changed 1.80pr1 Added `default` parameter.
 | 
				
			||||||
]]
 | 
					]]
 | 
				
			||||||
function read(replaceChar, history, completeFn, default) end
 | 
					function read(replaceChar, history, completeFn, default) end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -108,6 +111,7 @@ function read(replaceChar, history, completeFn, default) end
 | 
				
			|||||||
--
 | 
					--
 | 
				
			||||||
-- For example, `ComputerCraft 1.93.0 (Minecraft 1.15.2)`.
 | 
					-- For example, `ComputerCraft 1.93.0 (Minecraft 1.15.2)`.
 | 
				
			||||||
-- @usage _HOST
 | 
					-- @usage _HOST
 | 
				
			||||||
 | 
					-- @since 1.76
 | 
				
			||||||
_HOST = _HOST
 | 
					_HOST = _HOST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--[[- The default computer settings as defined in the ComputerCraft
 | 
					--[[- The default computer settings as defined in the ComputerCraft
 | 
				
			||||||
@@ -121,5 +125,6 @@ An example value to disable autocompletion:
 | 
				
			|||||||
    shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false
 | 
					    shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@usage _CC_DEFAULT_SETTINGS
 | 
					@usage _CC_DEFAULT_SETTINGS
 | 
				
			||||||
 | 
					@since 1.77
 | 
				
			||||||
]]
 | 
					]]
 | 
				
			||||||
_CC_DEFAULT_SETTINGS = _CC_DEFAULT_SETTINGS
 | 
					_CC_DEFAULT_SETTINGS = _CC_DEFAULT_SETTINGS
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,10 +58,10 @@ function request(...) end
 | 
				
			|||||||
-- @treturn string A message detailing why the request failed.
 | 
					-- @treturn string A message detailing why the request failed.
 | 
				
			||||||
-- @treturn Response|nil The failing http response, if available.
 | 
					-- @treturn Response|nil The failing http response, if available.
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
-- @usage Make a request to [example.computercraft.cc](https://example.computercraft.cc),
 | 
					-- @usage Make a request to [example.tweaked.cc](https://example.tweaked.cc),
 | 
				
			||||||
-- and print the returned page.
 | 
					-- and print the returned page.
 | 
				
			||||||
-- ```lua
 | 
					-- ```lua
 | 
				
			||||||
-- local request = http.get("https://example.computercraft.cc")
 | 
					-- local request = http.get("https://example.tweaked.cc")
 | 
				
			||||||
-- print(request.readAll())
 | 
					-- print(request.readAll())
 | 
				
			||||||
-- -- => HTTP is working!
 | 
					-- -- => HTTP is working!
 | 
				
			||||||
-- request.close()
 | 
					-- request.close()
 | 
				
			||||||
@@ -123,7 +123,7 @@ function checkURLAsync(url) end
 | 
				
			|||||||
--
 | 
					--
 | 
				
			||||||
-- @usage
 | 
					-- @usage
 | 
				
			||||||
-- ```lua
 | 
					-- ```lua
 | 
				
			||||||
-- print(http.checkURL("https://example.computercraft.cc/"))
 | 
					-- print(http.checkURL("https://example.tweaked.cc/"))
 | 
				
			||||||
-- -- => true
 | 
					-- -- => true
 | 
				
			||||||
-- print(http.checkURL("http://localhost/"))
 | 
					-- print(http.checkURL("http://localhost/"))
 | 
				
			||||||
-- -- => false Domain not permitted
 | 
					-- -- => false Domain not permitted
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,9 +2,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--[[- Loads the given API into the global environment.
 | 
					--[[- Loads the given API into the global environment.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Warning** This function is deprecated. Use of this function will pollute the
 | 
					 | 
				
			||||||
global table, use @{require} instead.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This function loads and executes the file at the given path, and all global
 | 
					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
 | 
					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.
 | 
					`myAPI.<function name>`, where `myAPI` is the base name of the API file.
 | 
				
			||||||
@@ -12,7 +9,10 @@ variables and functions exported by it will by available through the use of
 | 
				
			|||||||
@tparam string path The path of the API to load.
 | 
					@tparam string path The path of the API to load.
 | 
				
			||||||
@treturn boolean Whether or not the API was successfully loaded.
 | 
					@treturn boolean Whether or not the API was successfully loaded.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@deprecated Use @{require}.
 | 
					@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
 | 
					function loadAPI(path) end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,7 +21,7 @@ function loadAPI(path) end
 | 
				
			|||||||
-- This effectively removes the specified table from `_G`.
 | 
					-- This effectively removes the specified table from `_G`.
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
-- @tparam string name The name of the API to unload.
 | 
					-- @tparam string name The name of the API to unload.
 | 
				
			||||||
-- @deprecated Use @{require}.
 | 
					-- @deprecated See @{os.loadAPI} for why.
 | 
				
			||||||
function unloadAPI(name) end
 | 
					function unloadAPI(name) end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--[[- Pause execution of the current thread and waits for any events matching
 | 
					--[[- Pause execution of the current thread and waits for any events matching
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1,13 @@
 | 
				
			|||||||
 | 
					--[[- Craft a recipe based on the turtle's inventory.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The turtle's inventory should set up like a crafting grid. For instance, to
 | 
				
			||||||
 | 
					craft sticks, slots 1 and 5 should contain 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.
 | 
				
			||||||
 | 
					]]
 | 
				
			||||||
function craft(limit) end
 | 
					function craft(limit) end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
# Mod properties
 | 
					# Mod properties
 | 
				
			||||||
mod_version=1.95.0
 | 
					mod_version=1.98.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Minecraft properties (update mods.toml when changing)
 | 
					# Minecraft properties (update mods.toml when changing)
 | 
				
			||||||
mc_version=1.16.4
 | 
					mc_version=1.17.1
 | 
				
			||||||
forge_version=35.0.1
 | 
					mapping_version=2021.08.15
 | 
				
			||||||
mappings_version=20201028-1.16.3
 | 
					forge_version=37.0.34
 | 
				
			||||||
 | 
					# NO SERIOUSLY, UPDATE mods.toml WHEN CHANGING
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											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
 | 
					distributionBase=GRADLE_USER_HOME
 | 
				
			||||||
distributionPath=wrapper/dists
 | 
					distributionPath=wrapper/dists
 | 
				
			||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip
 | 
					distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
 | 
				
			||||||
zipStoreBase=GRADLE_USER_HOME
 | 
					zipStoreBase=GRADLE_USER_HOME
 | 
				
			||||||
zipStorePath=wrapper/dists
 | 
					zipStorePath=wrapper/dists
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								gradlew
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,21 @@
 | 
				
			|||||||
#!/usr/bin/env sh
 | 
					#!/usr/bin/env sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Copyright 2015 the original author or authors.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					# you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					# You may obtain a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#      https://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					# distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					# See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					# limitations under the License.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
##############################################################################
 | 
					##############################################################################
 | 
				
			||||||
##
 | 
					##
 | 
				
			||||||
##  Gradle start up script for UN*X
 | 
					##  Gradle start up script for UN*X
 | 
				
			||||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
 | 
				
			|||||||
APP_BASE_NAME=`basename "$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.
 | 
					# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 | 
				
			||||||
DEFAULT_JVM_OPTS=""
 | 
					DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
 | 
					# Use the maximum available, or set MAX_FD != -1 to use that value.
 | 
				
			||||||
MAX_FD="maximum"
 | 
					MAX_FD="maximum"
 | 
				
			||||||
@@ -66,6 +82,7 @@ esac
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 | 
					CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Determine the Java command to use to start the JVM.
 | 
					# Determine the Java command to use to start the JVM.
 | 
				
			||||||
if [ -n "$JAVA_HOME" ] ; then
 | 
					if [ -n "$JAVA_HOME" ] ; then
 | 
				
			||||||
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
 | 
					    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
 | 
				
			||||||
@@ -109,10 +126,11 @@ if $darwin; then
 | 
				
			|||||||
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 | 
					    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# For Cygwin, switch paths to Windows format before running java
 | 
					# For Cygwin or MSYS, switch paths to Windows format before running java
 | 
				
			||||||
if $cygwin ; then
 | 
					if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
 | 
				
			||||||
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
 | 
					    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
 | 
				
			||||||
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
 | 
					    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    JAVACMD=`cygpath --unix "$JAVACMD"`
 | 
					    JAVACMD=`cygpath --unix "$JAVACMD"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # We build the pattern for arguments to be converted via cygpath
 | 
					    # We build the pattern for arguments to be converted via cygpath
 | 
				
			||||||
@@ -138,19 +156,19 @@ if $cygwin ; then
 | 
				
			|||||||
        else
 | 
					        else
 | 
				
			||||||
            eval `echo args$i`="\"$arg\""
 | 
					            eval `echo args$i`="\"$arg\""
 | 
				
			||||||
        fi
 | 
					        fi
 | 
				
			||||||
        i=$((i+1))
 | 
					        i=`expr $i + 1`
 | 
				
			||||||
    done
 | 
					    done
 | 
				
			||||||
    case $i in
 | 
					    case $i in
 | 
				
			||||||
        (0) set -- ;;
 | 
					        0) set -- ;;
 | 
				
			||||||
        (1) set -- "$args0" ;;
 | 
					        1) set -- "$args0" ;;
 | 
				
			||||||
        (2) set -- "$args0" "$args1" ;;
 | 
					        2) set -- "$args0" "$args1" ;;
 | 
				
			||||||
        (3) set -- "$args0" "$args1" "$args2" ;;
 | 
					        3) set -- "$args0" "$args1" "$args2" ;;
 | 
				
			||||||
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
 | 
					        4) set -- "$args0" "$args1" "$args2" "$args3" ;;
 | 
				
			||||||
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
 | 
					        5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
 | 
				
			||||||
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
 | 
					        6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
 | 
				
			||||||
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
 | 
					        7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
 | 
				
			||||||
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
 | 
					        8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
 | 
				
			||||||
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
 | 
					        9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
 | 
				
			||||||
    esac
 | 
					    esac
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -159,14 +177,9 @@ save () {
 | 
				
			|||||||
    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
 | 
					    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
 | 
				
			||||||
    echo " "
 | 
					    echo " "
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
APP_ARGS=$(save "$@")
 | 
					APP_ARGS=`save "$@"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
 | 
					# 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"
 | 
					eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
 | 
					 | 
				
			||||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
 | 
					 | 
				
			||||||
  cd "$(dirname "$0")"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exec "$JAVACMD" "$@"
 | 
					exec "$JAVACMD" "$@"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										43
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										43
									
								
								gradlew.bat
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +1,19 @@
 | 
				
			|||||||
 | 
					@rem
 | 
				
			||||||
 | 
					@rem Copyright 2015 the original author or authors.
 | 
				
			||||||
 | 
					@rem
 | 
				
			||||||
 | 
					@rem Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					@rem you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					@rem You may obtain a copy of the License at
 | 
				
			||||||
 | 
					@rem
 | 
				
			||||||
 | 
					@rem      https://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					@rem
 | 
				
			||||||
 | 
					@rem Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					@rem distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					@rem See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					@rem limitations under the License.
 | 
				
			||||||
 | 
					@rem
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@if "%DEBUG%" == "" @echo off
 | 
					@if "%DEBUG%" == "" @echo off
 | 
				
			||||||
@rem ##########################################################################
 | 
					@rem ##########################################################################
 | 
				
			||||||
@rem
 | 
					@rem
 | 
				
			||||||
@@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
 | 
				
			|||||||
set APP_BASE_NAME=%~n0
 | 
					set APP_BASE_NAME=%~n0
 | 
				
			||||||
set APP_HOME=%DIRNAME%
 | 
					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.
 | 
					@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 | 
				
			||||||
set DEFAULT_JVM_OPTS=
 | 
					set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@rem Find java.exe
 | 
					@rem Find java.exe
 | 
				
			||||||
if defined JAVA_HOME goto findJavaFromJavaHome
 | 
					if defined JAVA_HOME goto findJavaFromJavaHome
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set JAVA_EXE=java.exe
 | 
					set JAVA_EXE=java.exe
 | 
				
			||||||
%JAVA_EXE% -version >NUL 2>&1
 | 
					%JAVA_EXE% -version >NUL 2>&1
 | 
				
			||||||
if "%ERRORLEVEL%" == "0" goto init
 | 
					if "%ERRORLEVEL%" == "0" goto execute
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo.
 | 
					echo.
 | 
				
			||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
					echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
				
			||||||
@@ -35,7 +54,7 @@ goto fail
 | 
				
			|||||||
set JAVA_HOME=%JAVA_HOME:"=%
 | 
					set JAVA_HOME=%JAVA_HOME:"=%
 | 
				
			||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 | 
					set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if exist "%JAVA_EXE%" goto init
 | 
					if exist "%JAVA_EXE%" goto execute
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo.
 | 
					echo.
 | 
				
			||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
 | 
					echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
 | 
				
			||||||
@@ -45,28 +64,14 @@ echo location of your Java installation.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
goto fail
 | 
					goto fail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:init
 | 
					 | 
				
			||||||
@rem Get command-line arguments, handling Windows variants
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if not "%OS%" == "Windows_NT" goto win9xME_args
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:win9xME_args
 | 
					 | 
				
			||||||
@rem Slurp the command line arguments.
 | 
					 | 
				
			||||||
set CMD_LINE_ARGS=
 | 
					 | 
				
			||||||
set _SKIP=2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:win9xME_args_slurp
 | 
					 | 
				
			||||||
if "x%~1" == "x" goto execute
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set CMD_LINE_ARGS=%*
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:execute
 | 
					:execute
 | 
				
			||||||
@rem Setup the command line
 | 
					@rem Setup the command line
 | 
				
			||||||
 | 
					
 | 
				
			||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
 | 
					set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@rem Execute Gradle
 | 
					@rem Execute Gradle
 | 
				
			||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
 | 
					"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:end
 | 
					:end
 | 
				
			||||||
@rem End local scope for the variables with windows NT shell
 | 
					@rem End local scope for the variables with windows NT shell
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
(sources
 | 
					(sources
 | 
				
			||||||
  /doc/stub/
 | 
					  /doc/stub/
 | 
				
			||||||
 | 
					  /doc/events/
 | 
				
			||||||
  /build/docs/luaJavadoc/
 | 
					  /build/docs/luaJavadoc/
 | 
				
			||||||
  /src/main/resources/*/computercraft/lua/bios.lua
 | 
					  /src/main/resources/*/computercraft/lua/bios.lua
 | 
				
			||||||
  /src/main/resources/*/computercraft/lua/rom/
 | 
					  /src/main/resources/*/computercraft/lua/rom/
 | 
				
			||||||
@@ -10,29 +11,35 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(doc
 | 
					(doc
 | 
				
			||||||
  (title "CC: Tweaked")
 | 
					 | 
				
			||||||
  (destination build/docs/lua)
 | 
					  (destination build/docs/lua)
 | 
				
			||||||
  (logo src/main/resources/pack.png)
 | 
					 | 
				
			||||||
  (index doc/index.md)
 | 
					  (index doc/index.md)
 | 
				
			||||||
  (styles src/web/styles.css)
 | 
					
 | 
				
			||||||
  (scripts build/rollup/index.js)
 | 
					  (site
 | 
				
			||||||
  (source-link https://github.com/SquidDev-CC/CC-Tweaked/blob/${commit}/${path}#L${line})
 | 
					    (title "CC: Tweaked")
 | 
				
			||||||
 | 
					    (logo src/main/resources/pack.png)
 | 
				
			||||||
 | 
					    (url https://tweaked.cc/)
 | 
				
			||||||
 | 
					    (source-link https://github.com/SquidDev-CC/CC-Tweaked/blob/${commit}/${path}#L${line})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (styles src/web/styles.css)
 | 
				
			||||||
 | 
					    (scripts build/rollup/index.js)
 | 
				
			||||||
 | 
					    (head doc/head.html))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (module-kinds
 | 
					  (module-kinds
 | 
				
			||||||
    (peripheral Peripherals)
 | 
					    (peripheral Peripherals)
 | 
				
			||||||
    (generic_peripheral "Generic Peripherals"))
 | 
					    (generic_peripheral "Generic Peripherals")
 | 
				
			||||||
 | 
					    (event Events))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (library-path
 | 
					  (library-path
 | 
				
			||||||
    /doc/stub/
 | 
					    /doc/stub/
 | 
				
			||||||
    /build/docs/luaJavadoc/
 | 
					    /build/docs/luaJavadoc/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /src/main/resources/*/computercraft/lua/rom/apis
 | 
					    /src/main/resources/*/computercraft/lua/rom/apis/
 | 
				
			||||||
    /src/main/resources/*/computercraft/lua/rom/apis/command
 | 
					    /src/main/resources/*/computercraft/lua/rom/apis/command/
 | 
				
			||||||
    /src/main/resources/*/computercraft/lua/rom/apis/turtle
 | 
					    /src/main/resources/*/computercraft/lua/rom/apis/turtle/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /src/main/resources/*/computercraft/lua/rom/modules/main
 | 
					    /src/main/resources/*/computercraft/lua/rom/modules/main/
 | 
				
			||||||
    /src/main/resources/*/computercraft/lua/rom/modules/command
 | 
					    /src/main/resources/*/computercraft/lua/rom/modules/command/
 | 
				
			||||||
    /src/main/resources/*/computercraft/lua/rom/modules/turtle))
 | 
					    /src/main/resources/*/computercraft/lua/rom/modules/turtle/))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(at /
 | 
					(at /
 | 
				
			||||||
  (linters
 | 
					  (linters
 | 
				
			||||||
@@ -81,27 +88,16 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
;; Suppress warnings for currently undocumented modules.
 | 
					;; Suppress warnings for currently undocumented modules.
 | 
				
			||||||
(at
 | 
					(at
 | 
				
			||||||
  (; Java APIs
 | 
					  (; Lua APIs
 | 
				
			||||||
   /doc/stub/http.lua
 | 
					 | 
				
			||||||
   /doc/stub/os.lua
 | 
					 | 
				
			||||||
   /doc/stub/turtle.lua
 | 
					 | 
				
			||||||
   /doc/stub/global.lua
 | 
					 | 
				
			||||||
   ; Java generated APIs
 | 
					 | 
				
			||||||
   /build/docs/luaJavadoc/turtle.lua
 | 
					 | 
				
			||||||
   ; Peripherals
 | 
					 | 
				
			||||||
   /build/docs/luaJavadoc/drive.lua
 | 
					 | 
				
			||||||
   /build/docs/luaJavadoc/speaker.lua
 | 
					 | 
				
			||||||
   /build/docs/luaJavadoc/printer.lua
 | 
					 | 
				
			||||||
   ; Generic peripherals
 | 
					 | 
				
			||||||
   /build/docs/luaJavadoc/fluid_storage.lua
 | 
					 | 
				
			||||||
   ; Lua APIs
 | 
					 | 
				
			||||||
   /src/main/resources/*/computercraft/lua/rom/apis/io.lua
 | 
					   /src/main/resources/*/computercraft/lua/rom/apis/io.lua
 | 
				
			||||||
   /src/main/resources/*/computercraft/lua/rom/apis/window.lua)
 | 
					   /src/main/resources/*/computercraft/lua/rom/apis/window.lua)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  (linters -doc:undocumented -doc:undocumented-arg -doc:undocumented-return))
 | 
					  (linters -doc:undocumented -doc:undocumented-arg -doc:undocumented-return))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;; Suppress warnings for the BIOS using its own deprecated members for now.
 | 
					;; Suppress warnings for various APIs using its own deprecated members.
 | 
				
			||||||
(at /src/main/resources/*/computercraft/lua/bios.lua
 | 
					(at
 | 
				
			||||||
 | 
					  (/src/main/resources/*/computercraft/lua/bios.lua
 | 
				
			||||||
 | 
					   /src/main/resources/*/computercraft/lua/rom/apis/turtle/turtle.lua)
 | 
				
			||||||
  (linters -var:deprecated))
 | 
					  (linters -var:deprecated))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(at /src/test/resources/test-rom
 | 
					(at /src/test/resources/test-rom
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										330
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										330
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,13 +1,265 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "tweaked.cc",
 | 
					  "name": "tweaked.cc",
 | 
				
			||||||
  "version": "1.0.0",
 | 
					  "version": "1.0.0",
 | 
				
			||||||
  "lockfileVersion": 1,
 | 
					  "lockfileVersion": 2,
 | 
				
			||||||
  "requires": true,
 | 
					  "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",
 | 
				
			||||||
 | 
					        "terser": "^5.3.8",
 | 
				
			||||||
 | 
					        "typescript": "^4.0.5"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@rollup/plugin-typescript": {
 | 
				
			||||||
 | 
					      "version": "8.2.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ==",
 | 
				
			||||||
 | 
					      "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/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/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/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/is-core-module": {
 | 
				
			||||||
 | 
					      "version": "2.6.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "has": "^1.0.3"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "funding": {
 | 
				
			||||||
 | 
					        "url": "https://github.com/sponsors/ljharb"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "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.5.14",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.14.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ==",
 | 
				
			||||||
 | 
					      "funding": {
 | 
				
			||||||
 | 
					        "type": "opencollective",
 | 
				
			||||||
 | 
					        "url": "https://opencollective.com/preact"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "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.56.2",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "bin": {
 | 
				
			||||||
 | 
					        "rollup": "dist/bin/rollup"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": ">=10.0.0"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "optionalDependencies": {
 | 
				
			||||||
 | 
					        "fsevents": "~2.3.2"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "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.19",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
 | 
				
			||||||
 | 
					      "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/terser": {
 | 
				
			||||||
 | 
					      "version": "5.7.1",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "dependencies": {
 | 
				
			||||||
 | 
					        "commander": "^2.20.0",
 | 
				
			||||||
 | 
					        "source-map": "~0.7.2",
 | 
				
			||||||
 | 
					        "source-map-support": "~0.5.19"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "bin": {
 | 
				
			||||||
 | 
					        "terser": "bin/terser"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": ">=10"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "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.3.5",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "bin": {
 | 
				
			||||||
 | 
					        "tsc": "bin/tsc",
 | 
				
			||||||
 | 
					        "tsserver": "bin/tsserver"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": ">=4.2.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@rollup/plugin-typescript": {
 | 
					    "@rollup/plugin-typescript": {
 | 
				
			||||||
      "version": "6.1.0",
 | 
					      "version": "8.2.5",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-6.1.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz",
 | 
				
			||||||
      "integrity": "sha512-hJxaiE6WyNOsK+fZpbFh9CUijZYqPQuAOWO5khaGTUkM8DYNNyA2TDlgamecE+qLOG1G1+CwbWMAx3rbqpp6xQ==",
 | 
					      "integrity": "sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "@rollup/pluginutils": "^3.1.0",
 | 
					        "@rollup/pluginutils": "^3.1.0",
 | 
				
			||||||
@@ -32,9 +284,9 @@
 | 
				
			|||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "buffer-from": {
 | 
					    "buffer-from": {
 | 
				
			||||||
      "version": "1.1.1",
 | 
					      "version": "1.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
 | 
					      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "commander": {
 | 
					    "commander": {
 | 
				
			||||||
@@ -50,9 +302,9 @@
 | 
				
			|||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "fsevents": {
 | 
					    "fsevents": {
 | 
				
			||||||
      "version": "2.1.3",
 | 
					      "version": "2.3.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
 | 
					      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "optional": true
 | 
					      "optional": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@@ -72,30 +324,30 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "is-core-module": {
 | 
					    "is-core-module": {
 | 
				
			||||||
      "version": "2.1.0",
 | 
					      "version": "2.6.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
 | 
					      "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "has": "^1.0.3"
 | 
					        "has": "^1.0.3"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "path-parse": {
 | 
					    "path-parse": {
 | 
				
			||||||
      "version": "1.0.6",
 | 
					      "version": "1.0.7",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
 | 
				
			||||||
      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
 | 
					      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "picomatch": {
 | 
					    "picomatch": {
 | 
				
			||||||
      "version": "2.2.2",
 | 
					      "version": "2.3.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
 | 
					      "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "preact": {
 | 
					    "preact": {
 | 
				
			||||||
      "version": "10.5.5",
 | 
					      "version": "10.5.14",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.5.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.14.tgz",
 | 
				
			||||||
      "integrity": "sha512-5ONLNH1SXMzzbQoExZX4TELemNt+TEDb622xXFNfZngjjM9qtrzseJt+EfiUu4TZ6EJ95X5sE1ES4yqHFSIdhg=="
 | 
					      "integrity": "sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "requirejs": {
 | 
					    "requirejs": {
 | 
				
			||||||
      "version": "2.3.6",
 | 
					      "version": "2.3.6",
 | 
				
			||||||
@@ -104,22 +356,22 @@
 | 
				
			|||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "resolve": {
 | 
					    "resolve": {
 | 
				
			||||||
      "version": "1.18.1",
 | 
					      "version": "1.20.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
 | 
					      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "is-core-module": "^2.0.0",
 | 
					        "is-core-module": "^2.2.0",
 | 
				
			||||||
        "path-parse": "^1.0.6"
 | 
					        "path-parse": "^1.0.6"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "rollup": {
 | 
					    "rollup": {
 | 
				
			||||||
      "version": "2.33.1",
 | 
					      "version": "2.56.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz",
 | 
				
			||||||
      "integrity": "sha512-uY4O/IoL9oNW8MMcbA5hcOaz6tZTMIh7qJHx/tzIJm+n1wLoY38BLn6fuy7DhR57oNFLMbDQtDeJoFURt5933w==",
 | 
					      "integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "fsevents": "~2.1.2"
 | 
					        "fsevents": "~2.3.2"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "source-map": {
 | 
					    "source-map": {
 | 
				
			||||||
@@ -147,9 +399,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "terser": {
 | 
					    "terser": {
 | 
				
			||||||
      "version": "5.3.8",
 | 
					      "version": "5.7.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-zVotuHoIfnYjtlurOouTazciEfL7V38QMAOhGqpXDEg6yT13cF4+fEP9b0rrCEQTn+tT46uxgFsTZzhygk+CzQ==",
 | 
					      "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "requires": {
 | 
					      "requires": {
 | 
				
			||||||
        "commander": "^2.20.0",
 | 
					        "commander": "^2.20.0",
 | 
				
			||||||
@@ -158,14 +410,14 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "tslib": {
 | 
					    "tslib": {
 | 
				
			||||||
      "version": "2.0.3",
 | 
					      "version": "2.3.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ=="
 | 
					      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "typescript": {
 | 
					    "typescript": {
 | 
				
			||||||
      "version": "4.0.5",
 | 
					      "version": "4.3.5",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.5.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
 | 
				
			||||||
      "integrity": "sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==",
 | 
					      "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
    "tslib": "^2.0.3"
 | 
					    "tslib": "^2.0.3"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@rollup/plugin-typescript": "^6.1.0",
 | 
					    "@rollup/plugin-typescript": "^8.2.5",
 | 
				
			||||||
    "requirejs": "^2.3.6",
 | 
					    "requirejs": "^2.3.6",
 | 
				
			||||||
    "rollup": "^2.33.1",
 | 
					    "rollup": "^2.33.1",
 | 
				
			||||||
    "terser": "^5.3.8",
 | 
					    "terser": "^5.3.8",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,54 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_advanced_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_advanced_side",
 | 
					    "side": "computercraft:block/computer_advanced_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_advanced_front_blink"
 | 
					    "front": "computercraft:block/computer_advanced_front_blink",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_advanced_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_advanced_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_advanced_side",
 | 
					    "side": "computercraft:block/computer_advanced_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_advanced_front"
 | 
					    "front": "computercraft:block/computer_advanced_front",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_advanced_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_advanced_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_advanced_side",
 | 
					    "side": "computercraft:block/computer_advanced_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_advanced_front_on"
 | 
					    "front": "computercraft:block/computer_advanced_front_on",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_advanced_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_command_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_command_side",
 | 
					    "side": "computercraft:block/computer_command_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_command_front_blink"
 | 
					    "front": "computercraft:block/computer_command_front_blink",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_command_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_command_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_command_side",
 | 
					    "side": "computercraft:block/computer_command_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_command_front"
 | 
					    "front": "computercraft:block/computer_command_front",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_command_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_command_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_command_side",
 | 
					    "side": "computercraft:block/computer_command_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_command_front_on"
 | 
					    "front": "computercraft:block/computer_command_front_on",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_command_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_normal_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_normal_side",
 | 
					    "side": "computercraft:block/computer_normal_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_normal_front_blink"
 | 
					    "front": "computercraft:block/computer_normal_front_blink",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_normal_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_normal_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_normal_side",
 | 
					    "side": "computercraft:block/computer_normal_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_normal_front"
 | 
					    "front": "computercraft:block/computer_normal_front",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_normal_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "parent": "block/orientable",
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
  "textures": {
 | 
					  "textures": {
 | 
				
			||||||
    "top": "computercraft:block/computer_normal_top",
 | 
					 | 
				
			||||||
    "side": "computercraft:block/computer_normal_side",
 | 
					    "side": "computercraft:block/computer_normal_side",
 | 
				
			||||||
    "front": "computercraft:block/computer_normal_front_on"
 | 
					    "front": "computercraft:block/computer_normal_front_on",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/computer_normal_top"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "side": "computercraft:block/monitor_advanced_4",
 | 
				
			||||||
 | 
					    "front": "computercraft:block/monitor_advanced_15",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/monitor_advanced_0"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "side": "computercraft:block/monitor_normal_4",
 | 
				
			||||||
 | 
					    "front": "computercraft:block/monitor_normal_15",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/monitor_normal_0"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "minecraft:block/orientable",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "side": "computercraft:block/speaker_side",
 | 
				
			||||||
 | 
					    "front": "computercraft:block/speaker_front",
 | 
				
			||||||
 | 
					    "top": "computercraft:block/speaker_top"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "loader": "computercraft:turtle",
 | 
				
			||||||
 | 
					  "model": "computercraft:block/turtle_advanced_base"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "computercraft:block/turtle_base",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "texture": "computercraft:block/turtle_advanced"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "loader": "computercraft:turtle",
 | 
				
			||||||
 | 
					  "model": "computercraft:block/turtle_normal_base"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "computercraft:block/turtle_base",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "texture": "computercraft:block/turtle_normal"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "minecraft:block/cube_all",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "all": "computercraft:block/wired_modem_face"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "minecraft:block/cube_all",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "all": "computercraft:block/wired_modem_face_peripheral"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "minecraft:block/cube_all",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "all": "computercraft:block/wired_modem_face_on"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "minecraft:block/cube_all",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "all": "computercraft:block/wired_modem_face_peripheral_on"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "computercraft:block/modem",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "front": "computercraft:block/wired_modem_face",
 | 
				
			||||||
 | 
					    "back": "computercraft:block/modem_back"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "computercraft:block/modem",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "front": "computercraft:block/wired_modem_face_peripheral",
 | 
				
			||||||
 | 
					    "back": "computercraft:block/modem_back"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "parent": "computercraft:block/modem",
 | 
				
			||||||
 | 
					  "textures": {
 | 
				
			||||||
 | 
					    "front": "computercraft:block/wired_modem_face_on",
 | 
				
			||||||
 | 
					    "back": "computercraft:block/modem_back"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user