mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-10-15 14:07:38 +00:00
Compare commits
705 Commits
v1.96.0
...
v1.16.5-1.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9fbcbae5b3 | ||
![]() |
36a779dc18 | ||
![]() |
cd8b8bbc74 | ||
![]() |
d8319bb35c | ||
![]() |
afd6adbffa | ||
![]() |
d3a5d1e314 | ||
![]() |
56010382fb | ||
![]() |
0ff6b0ca70 | ||
![]() |
4b33306940 | ||
![]() |
4dea3dff36 | ||
![]() |
3e8c741170 | ||
![]() |
62baa72457 | ||
![]() |
5eb711da87 | ||
![]() |
79c5df1d92 | ||
![]() |
991ea6e829 | ||
![]() |
1d160641a4 | ||
![]() |
c2b3d914f7 | ||
![]() |
143b2bdbcd | ||
![]() |
8cb21ed4d1 | ||
![]() |
8aa7695fdd | ||
![]() |
fa78818069 | ||
![]() |
62172c6049 | ||
![]() |
39f3cf8cbe | ||
![]() |
5082947331 | ||
![]() |
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 | ||
![]() |
4af5bcc0b0 | ||
![]() |
96c577482d | ||
![]() |
7f9a707f75 | ||
![]() |
ed3913c1f4 | ||
![]() |
16d74dd2e8 | ||
![]() |
24bb92007a | ||
![]() |
2f0cae0bc1 | ||
![]() |
e3a672099c | ||
![]() |
abf425dfb5 | ||
![]() |
663859d2e5 | ||
![]() |
f5eb6ce03e | ||
![]() |
4ae370b9db | ||
![]() |
b97e950d86 | ||
![]() |
5865e9c41a | ||
![]() |
85cf2d5ff1 | ||
![]() |
61f8e97f6b | ||
![]() |
c92f06cfd9 | ||
![]() |
05c3c8ad32 | ||
![]() |
bb8f4c624b | ||
![]() |
ea3a160367 | ||
![]() |
737b3cb576 | ||
![]() |
d83a68f3ff | ||
![]() |
24d3777722 | ||
![]() |
826797cbd5 | ||
![]() |
511eea39a1 | ||
![]() |
24af36743d | ||
![]() |
e2761bb315 | ||
![]() |
6734a0e112 | ||
![]() |
d4199064ae | ||
![]() |
04f9644ae7 | ||
![]() |
486f41f082 | ||
![]() |
fff8353451 | ||
![]() |
9a749642d2 | ||
![]() |
c35707725f | ||
![]() |
b0651082f4 | ||
![]() |
aab0cd34cd | ||
![]() |
d2a1a00dc4 | ||
![]() |
f194f4fa3a | ||
![]() |
c9f3d315c0 | ||
![]() |
7f90f2f7ca | ||
![]() |
9f57e77ed3 | ||
![]() |
ab39cb849d | ||
![]() |
a4c9e89370 | ||
![]() |
c8aeddedd4 | ||
![]() |
83df64e520 | ||
![]() |
74ac5bb3d1 | ||
![]() |
d13bd2cce8 | ||
![]() |
ab232bd689 | ||
![]() |
cc96e41d3e | ||
![]() |
741adfa7bb | ||
![]() |
666e83cf4f | ||
![]() |
e2a635b6e5 | ||
![]() |
c58441b29c | ||
![]() |
a6fcfb6af2 | ||
![]() |
17a9329207 | ||
![]() |
f6160bdc57 | ||
![]() |
6aae4e5766 | ||
![]() |
84a6bb1cf3 | ||
![]() |
c334423d42 | ||
![]() |
113b560a20 | ||
![]() |
5bf367af9f | ||
![]() |
61fb4caaad | ||
![]() |
6734af6e4a | ||
![]() |
bf6053906d | ||
![]() |
4766833cf2 | ||
![]() |
01d81cb91d | ||
![]() |
93068402a2 | ||
![]() |
34a2c835d4 | ||
![]() |
30d35883b8 | ||
![]() |
71563a52ff | ||
![]() |
0c6e7b5db5 | ||
![]() |
334ca65482 | ||
![]() |
8472112fc1 | ||
![]() |
84036d97d9 | ||
![]() |
0832974725 | ||
![]() |
6cee4efcd3 | ||
![]() |
6f868849ab | ||
![]() |
275ca58a82 | ||
![]() |
87393e8aef | ||
![]() |
86bf57e3cd | ||
![]() |
72c1d451fe | ||
![]() |
8b4a01df27 | ||
![]() |
d0a973fa46 | ||
![]() |
748ebbe66b | ||
![]() |
59de21eae2 | ||
![]() |
50473afea8 | ||
![]() |
37f925de0a | ||
![]() |
cefde3f003 | ||
![]() |
ae6124d1f4 | ||
![]() |
7e121ff72f | ||
![]() |
5155e18de2 | ||
![]() |
7365741088 | ||
![]() |
d5368d0719 | ||
![]() |
26c12ac1a9 | ||
![]() |
2c67849b35 | ||
![]() |
04509cefec | ||
![]() |
74b9f5dcb0 | ||
![]() |
7809a2eddd | ||
![]() |
183b342071 | ||
![]() |
0bb5515055 | ||
![]() |
e8e9294fdf | ||
![]() |
9acfc0316f | ||
![]() |
29fb0baa09 | ||
![]() |
d5de39ebd4 | ||
![]() |
0faf76e4bd | ||
![]() |
99581e1f40 | ||
![]() |
e8e2ed9fe5 | ||
![]() |
9f72448ecd | ||
![]() |
3da3f16deb | ||
![]() |
0e2ce3c634 | ||
![]() |
fe00e00537 | ||
![]() |
29646a7f61 | ||
![]() |
50d2712581 | ||
![]() |
3093f882d8 | ||
![]() |
e5cf0d1c61 | ||
![]() |
cd879b067f | ||
![]() |
053cb1b53c | ||
![]() |
6b102a8142 | ||
![]() |
ac7979fb46 | ||
![]() |
c8a6888a2f | ||
![]() |
9ce33f8a3f | ||
![]() |
d51851e763 | ||
![]() |
fb70a1a998 | ||
![]() |
a1dcd59d95 | ||
![]() |
2a17585702 | ||
![]() |
2f323f23d7 | ||
![]() |
087c305b0d | ||
![]() |
31764f6d65 | ||
![]() |
4efde2b294 | ||
![]() |
95554a53d1 | ||
![]() |
89c1b2771d | ||
![]() |
8f069a9b72 | ||
![]() |
2e9d6603e3 | ||
![]() |
46595e73df | ||
![]() |
a6a1b9b8e5 | ||
![]() |
3f277a7a7b | ||
![]() |
90c5d3f1e8 | ||
![]() |
a5f7cf8334 | ||
![]() |
3075f89797 | ||
![]() |
45297665c6 | ||
![]() |
ddbf3fc111 | ||
![]() |
da82b89676 | ||
![]() |
d5f1a2c817 | ||
![]() |
6020adef6b | ||
![]() |
d2a52a8b5d | ||
![]() |
9f8774960f | ||
![]() |
36bb8b67c9 | ||
![]() |
8f3a56dd32 | ||
![]() |
113d5d982f | ||
![]() |
37a447e745 | ||
![]() |
9e2232d240 | ||
![]() |
514db30fb1 | ||
![]() |
08181f72d4 | ||
![]() |
613a28a5af | ||
![]() |
e4c422d6f9 | ||
![]() |
478f992dea | ||
![]() |
b54519d0e6 | ||
![]() |
9499654757 | ||
![]() |
c5138c535c | ||
![]() |
5bd8d84d14 | ||
![]() |
ab0310e27c | ||
![]() |
607751da40 | ||
![]() |
1efabccd14 | ||
![]() |
029374e9aa | ||
![]() |
2a8efb3fd5 | ||
![]() |
48edcde4ef | ||
![]() |
58a2995bbc | ||
![]() |
a35dcb28ef | ||
![]() |
7b2d482387 | ||
![]() |
2b077554f7 | ||
![]() |
9134f243c1 | ||
![]() |
c0f3ca81fb | ||
![]() |
190ed4fd20 | ||
![]() |
b9ff9b7f90 | ||
![]() |
b9b8121be9 | ||
![]() |
014bf55cd4 | ||
![]() |
085ae2e74a | ||
![]() |
4ff33f165d | ||
![]() |
d929c02d2a | ||
![]() |
d50a08a549 | ||
![]() |
c493d668c8 | ||
![]() |
53477fd3a1 | ||
![]() |
87aa839b60 | ||
![]() |
e02ccdcb1a | ||
![]() |
f36f532c63 | ||
![]() |
5a816917d5 | ||
![]() |
7af63d052d | ||
![]() |
4f8217d1ab | ||
![]() |
5409d441b5 | ||
![]() |
d5f82fa458 | ||
![]() |
d0deab3519 | ||
![]() |
d5a8df753a | ||
![]() |
13de2c4dd0 | ||
![]() |
906280225e | ||
![]() |
161a5b4707 | ||
![]() |
c6b6b4479c | ||
![]() |
96e7b60285 | ||
![]() |
086fccd997 | ||
![]() |
5dfaf6eee9 | ||
![]() |
e251dd066c | ||
![]() |
9abcfe56ea | ||
![]() |
abbc641fd4 | ||
![]() |
c60dcb4f5a | ||
![]() |
4be0b15afa | ||
![]() |
a4ae36b6b3 | ||
![]() |
ac075d9f53 | ||
![]() |
05d7be0362 | ||
![]() |
9a71dc1a26 | ||
![]() |
156023b154 | ||
![]() |
6b3773a862 | ||
![]() |
376d628cf0 | ||
![]() |
44062ebd52 | ||
![]() |
5739285fc2 | ||
![]() |
70b457ed18 | ||
![]() |
ca2995ed38 | ||
![]() |
6816931659 | ||
![]() |
1547ecbeb3 | ||
![]() |
e918f55b58 | ||
![]() |
c28b468844 | ||
![]() |
052cf8ee7d | ||
![]() |
550ada2f9e | ||
![]() |
17b7727262 | ||
![]() |
4553e404b2 | ||
![]() |
a565a571f9 | ||
![]() |
fb64b6017b | ||
![]() |
ed4229ab70 | ||
![]() |
3fb906ef6c | ||
![]() |
e1663f3df0 | ||
![]() |
52c6584c81 | ||
![]() |
9f87eda5de | ||
![]() |
697e9449cf | ||
![]() |
76c3e4c155 | ||
![]() |
358289b5f9 | ||
![]() |
5eec24676f | ||
![]() |
f52b8fa2de | ||
![]() |
447c3ab125 | ||
![]() |
8fac68386e | ||
![]() |
a3021c4697 | ||
![]() |
b7c61f9c6d | ||
![]() |
08a0342618 | ||
![]() |
3d7a81696d | ||
![]() |
48cb032ddf | ||
![]() |
33260a7747 | ||
![]() |
a049502d12 | ||
![]() |
ae7ef66dfa | ||
![]() |
9748679484 | ||
![]() |
da419b24e7 | ||
![]() |
7f57a977a1 | ||
![]() |
2f42a4e85b | ||
![]() |
af40f5ae5c | ||
![]() |
759d02a249 | ||
![]() |
d7729337ac | ||
![]() |
ee391ae9ea | ||
![]() |
4ed4a6409b | ||
![]() |
e5cc345f49 | ||
![]() |
d847a4d9e0 | ||
![]() |
f106733d71 | ||
![]() |
f3de97d67f | ||
![]() |
544f276ff0 | ||
![]() |
463635a459 | ||
![]() |
3b7b845930 | ||
![]() |
1fc0214857 | ||
![]() |
11bf601db9 | ||
![]() |
7c1154ddfc | ||
![]() |
df557e03fa | ||
![]() |
524b6f1d8a | ||
![]() |
cea8be7efa | ||
![]() |
c5f918ad95 | ||
![]() |
b14c7842fc | ||
![]() |
eead8b5755 | ||
![]() |
10a27a7a25 | ||
![]() |
865fc239a0 | ||
![]() |
f9f94b8304 | ||
![]() |
cb8135a0d1 | ||
![]() |
ef4b0a5632 | ||
![]() |
6a6a87489c | ||
![]() |
2360a6e951 | ||
![]() |
f4f71185ae | ||
![]() |
062977336a | ||
![]() |
e52d98ad8b | ||
![]() |
ef8da8054f | ||
![]() |
1ccd687c00 | ||
![]() |
a8ce5a5b20 | ||
![]() |
68e6bc464b | ||
![]() |
68762fe84c | ||
![]() |
419f29321a | ||
![]() |
00b41d29c1 | ||
![]() |
0ffd5fcf85 | ||
![]() |
95fee95006 | ||
![]() |
239bd769df | ||
![]() |
b4e0e9984f | ||
![]() |
79f42e35ce | ||
![]() |
be89fc25f9 | ||
![]() |
8eae02c037 | ||
![]() |
930fd59298 | ||
![]() |
bf13bac152 | ||
![]() |
649acbae1c | ||
![]() |
05eada427b | ||
![]() |
03caf9d805 | ||
![]() |
d6ea3aab1c | ||
![]() |
f3a330e330 | ||
![]() |
044d2b2b06 | ||
![]() |
fb440b0d2e | ||
![]() |
0de5969ec1 | ||
![]() |
3f98b2785e | ||
![]() |
798868427e | ||
![]() |
c79f643ba7 | ||
![]() |
1db3a14c54 | ||
![]() |
bf6d017ad1 | ||
![]() |
8b1773dd60 | ||
![]() |
a706300598 | ||
![]() |
2541c3c5e6 | ||
![]() |
41a1b99f7d | ||
![]() |
1862a439e2 | ||
![]() |
018ecfbaa0 | ||
![]() |
4c8fd4fc35 | ||
![]() |
35c1b10224 | ||
![]() |
c1c01bef7c | ||
![]() |
a48c3d0ba8 | ||
![]() |
93a9ebc4f6 | ||
![]() |
7cc2bd43c6 | ||
![]() |
393e628721 | ||
![]() |
0bcd28e58c | ||
![]() |
42f5389fb8 | ||
![]() |
041cfe91b4 | ||
![]() |
0f82a4589b | ||
![]() |
4320a4f851 | ||
![]() |
037cbabb32 | ||
![]() |
0dde859582 | ||
![]() |
e59c043fb6 | ||
![]() |
ae928c4397 | ||
![]() |
da41c65128 | ||
![]() |
4d18234714 | ||
![]() |
d254c6464b | ||
![]() |
3a5d50e572 | ||
![]() |
03b6d2f1ab | ||
![]() |
b0397ed3c5 | ||
![]() |
fa70ebcac2 | ||
![]() |
86e0330100 | ||
![]() |
92567b4d7e | ||
![]() |
0ae70fed13 | ||
![]() |
3b7300543a | ||
![]() |
642351af1a | ||
![]() |
121802a683 | ||
![]() |
08cf55e55f | ||
![]() |
3c8c0d78ef | ||
![]() |
c4d18aa9ca | ||
![]() |
2d4a87adc9 | ||
![]() |
bedac71e3d | ||
![]() |
ee4e42e730 | ||
![]() |
0de75f05dd | ||
![]() |
be6dd21e54 | ||
![]() |
927ddb0bde | ||
![]() |
a8fadabaf1 | ||
![]() |
44d0f78c1b | ||
![]() |
38f9a015ca | ||
![]() |
c311cdc6f5 | ||
![]() |
a93e0f3284 | ||
![]() |
14b3065ba4 | ||
![]() |
3ea2d6a0a8 | ||
![]() |
c802290437 | ||
![]() |
f7781defe5 | ||
![]() |
418420523a | ||
![]() |
d342a1f368 | ||
![]() |
81f85361d5 | ||
![]() |
f1621b30ec | ||
![]() |
d4f6a594b6 | ||
![]() |
ff5ba5c131 | ||
![]() |
4243f30308 | ||
![]() |
813e91073d | ||
![]() |
7250f22ff6 | ||
![]() |
db31a53bba | ||
![]() |
3023f235a4 | ||
![]() |
79cd8b4da5 | ||
![]() |
8e4d311cd9 | ||
![]() |
9bd8c86a94 | ||
![]() |
cbc0c1d0b6 | ||
![]() |
49c37857d4 | ||
![]() |
b1139a4bf6 | ||
![]() |
7e8559278e | ||
![]() |
1e7f1c98fc | ||
![]() |
a802f25dd6 | ||
![]() |
f1d6d21d6d | ||
![]() |
a80302c513 | ||
![]() |
1c46949da7 | ||
![]() |
07a56454a0 | ||
![]() |
a0e72d02c8 | ||
![]() |
455a59ca85 | ||
![]() |
46d78af068 | ||
![]() |
08d22fd3df | ||
![]() |
e6c691a8f8 | ||
![]() |
4b0e5c445c | ||
![]() |
eb5cff1045 | ||
![]() |
35c7792aa2 | ||
![]() |
521688d630 | ||
![]() |
75e2845c01 | ||
![]() |
2f96283286 | ||
![]() |
cbe6e9b5f5 | ||
![]() |
2ab79cf474 | ||
![]() |
6ce34aba79 | ||
![]() |
5eeb320b60 | ||
![]() |
93310850d2 | ||
![]() |
a2880b12ca | ||
![]() |
cef2657048 | ||
![]() |
ccd85eb055 | ||
![]() |
303b57779a | ||
![]() |
6279816ecc | ||
![]() |
4ae77261fa | ||
![]() |
4b7d843b78 | ||
![]() |
1c28df65c3 | ||
![]() |
85b740f484 | ||
![]() |
f9929cb27d | ||
![]() |
bafab1ac07 | ||
![]() |
e05c262468 | ||
![]() |
acfb72246c | ||
![]() |
9d51c4c340 | ||
![]() |
18068effec | ||
![]() |
7a3f7d3bba | ||
![]() |
95aa48c456 | ||
![]() |
6ea8ca991b | ||
![]() |
f1e551b960 | ||
![]() |
772c54ec74 | ||
![]() |
13cb789c18 | ||
![]() |
42220c4268 | ||
![]() |
3052506e2e | ||
![]() |
0741daa7eb | ||
![]() |
b4aa554279 | ||
![]() |
8fe2abe0ae | ||
![]() |
5af789ae11 | ||
![]() |
904a168d5c | ||
![]() |
724441eddc | ||
![]() |
f68ab3edd1 | ||
![]() |
68542aca3a | ||
![]() |
594bc4203c | ||
![]() |
57318b022d | ||
![]() |
761159aa93 | ||
![]() |
29dce26bf6 | ||
![]() |
717ab69093 | ||
![]() |
138a2cf08f | ||
![]() |
81daf82647 | ||
![]() |
f3798bfb63 | ||
![]() |
bc07dfad2e | ||
![]() |
8dd1c2a6cc | ||
![]() |
d10b657a54 | ||
![]() |
f90da739eb | ||
![]() |
d9cadf64e8 | ||
![]() |
15d4a55cd8 | ||
![]() |
309cbdb8be | ||
![]() |
39a9ad0ce7 | ||
![]() |
0f3c44c926 | ||
![]() |
a0e7c4a74c | ||
![]() |
7d428030df | ||
![]() |
00c395f689 | ||
![]() |
d8e1c73d26 | ||
![]() |
ffa4cc241b | ||
![]() |
6f1b740c8f | ||
![]() |
3406ba3ebf |
@@ -11,5 +11,8 @@ insert_final_newline = true
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.properties]
|
||||
insert_final_newline = false
|
||||
[*.sexp]
|
||||
indent_size = 2
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
|
15
.gitattributes
vendored
Normal file
15
.gitattributes
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
# Ignore changes in generated files
|
||||
src/generated/resources/data/** linguist-generated
|
||||
src/testMod/server-files/structures linguist-generated
|
||||
|
||||
* text=auto
|
||||
|
||||
*.gradle eol=lf diff=java
|
||||
*.java eol=lf diff=java
|
||||
*.kt eol=lf diff=java
|
||||
*.lua eol=lf
|
||||
*.md eol=lf diff=markdown
|
||||
*.txt eol=lf
|
||||
|
||||
*.png binary
|
||||
*.jar binary
|
15
.github/ISSUE_TEMPLATE/bug_report.md
vendored
15
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,15 +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
|
||||
- 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
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
70
.github/workflows/main-ci.yml
vendored
Normal file
70
.github/workflows/main-ci.yml
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
name: Build
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Java 8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 8
|
||||
|
||||
- name: Cache gradle dependencies
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.gradle/caches
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
|
||||
- name: Disable Gradle daemon
|
||||
run: |
|
||||
mkdir -p ~/.gradle
|
||||
echo "org.gradle.daemon=false" >> ~/.gradle/gradle.properties
|
||||
|
||||
- name: Build with Gradle
|
||||
run: |
|
||||
./gradlew assemble || ./gradlew assemble
|
||||
./gradlew downloadAssets || ./gradlew downloadAssets
|
||||
xvfb-run ./gradlew build
|
||||
|
||||
- name: Upload Jar
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: CC-Tweaked
|
||||
path: build/libs
|
||||
|
||||
- name: Upload Screnshots
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Screenshots
|
||||
path: test-files/client/screenshots
|
||||
if-no-files-found: ignore
|
||||
retention-days: 5
|
||||
if: failure()
|
||||
|
||||
- name: Upload Coverage
|
||||
uses: codecov/codecov-action@v2
|
||||
|
||||
- name: Parse test reports
|
||||
run: ./tools/parse-reports.py
|
||||
if: ${{ failure() }}
|
||||
|
||||
- name: Cache pre-commit
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.cache/pre-commit
|
||||
key: ${{ runner.os }}-pre-commit-${{ hashFiles('config/pre-commit/config.yml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pre-commit-
|
||||
|
||||
- name: Run linters
|
||||
run: |
|
||||
pip install pre-commit
|
||||
pre-commit run --config config/pre-commit/config.yml --show-diff-on-failure --all --color=always
|
19
.github/workflows/make-doc.sh
vendored
Executable file
19
.github/workflows/make-doc.sh
vendored
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -eu
|
||||
|
||||
DEST="${GITHUB_REF#refs/*/}"
|
||||
echo "Uploading docs to https://tweaked.cc/$DEST"
|
||||
|
||||
# Setup ssh key
|
||||
mkdir -p "$HOME/.ssh/"
|
||||
echo "$SSH_KEY" > "$HOME/.ssh/key"
|
||||
chmod 600 "$HOME/.ssh/key"
|
||||
|
||||
# And upload
|
||||
rsync -avc -e "ssh -i $HOME/.ssh/key -o StrictHostKeyChecking=no -p $SSH_PORT" \
|
||||
"$GITHUB_WORKSPACE/build/docs/lua/" \
|
||||
"$SSH_USER@$SSH_HOST:/var/www/tweaked.cc/$DEST"
|
||||
rsync -avc -e "ssh -i $HOME/.ssh/key -o StrictHostKeyChecking=no -p $SSH_PORT" \
|
||||
"$GITHUB_WORKSPACE/build/docs/javadoc/" \
|
||||
"$SSH_USER@$SSH_HOST:/var/www/tweaked.cc/$DEST/javadoc"
|
50
.github/workflows/make-doc.yml
vendored
Normal file
50
.github/workflows/make-doc.yml
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
name: Build documentation
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- mc-1.16.x
|
||||
|
||||
jobs:
|
||||
make_doc:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Java 8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 8
|
||||
|
||||
- name: Cache gradle dependencies
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.gradle/caches
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('gradle.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
|
||||
- name: Setup illuaminate
|
||||
run: |
|
||||
test -d bin || mkdir bin
|
||||
test -f bin/illuaminate || wget -q -Obin/illuaminate https://squiddev.cc/illuaminate/linux-x86-64/illuaminate
|
||||
chmod +x bin/illuaminate
|
||||
|
||||
- name: Setup node
|
||||
run: npm ci
|
||||
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew compileJava --no-daemon || ./gradlew compileJava --no-daemon
|
||||
|
||||
- name: Generate documentation
|
||||
run: ./gradlew docWebsite javadoc --no-daemon
|
||||
|
||||
- name: Upload documentation
|
||||
run: .github/workflows/make-doc.sh 2> /dev/null
|
||||
env:
|
||||
SSH_KEY: ${{ secrets.SSH_KEY }}
|
||||
SSH_USER: ${{ secrets.SSH_USER }}
|
||||
SSH_HOST: ${{ secrets.SSH_HOST }}
|
||||
SSH_PORT: ${{ secrets.SSH_PORT }}
|
12
.gitignore
vendored
12
.gitignore
vendored
@@ -3,6 +3,8 @@
|
||||
/logs
|
||||
/build
|
||||
/out
|
||||
/doc/out/
|
||||
/node_modules
|
||||
|
||||
# Runtime directories
|
||||
/run
|
||||
@@ -15,3 +17,13 @@
|
||||
.idea
|
||||
.gradle
|
||||
*.DS_Store
|
||||
|
||||
/.classpath
|
||||
/.project
|
||||
/.settings
|
||||
/.vscode
|
||||
bin/
|
||||
*.launch
|
||||
|
||||
/src/generated/resources/.cache
|
||||
/src/web/mount/*.d.ts
|
||||
|
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
|
34
.luacheckrc
34
.luacheckrc
@@ -1,34 +0,0 @@
|
||||
std = "max"
|
||||
|
||||
ignore = {
|
||||
-- Allow access to undefined globals or their fields. In the future we'll
|
||||
-- define all of CC's globals within this file
|
||||
'113', '143',
|
||||
|
||||
-- FIXME: Ignore unused arguments and loop variables
|
||||
'212', '213',
|
||||
|
||||
-- Disable line is too long for now. It would be possible to clean
|
||||
-- this up in the future.
|
||||
'631',
|
||||
}
|
||||
|
||||
-- Only run the linter on ROM and bios for now, as the treasure disks
|
||||
-- are largely unsupported.
|
||||
include_files = {
|
||||
'src/main/resources/assets/computercraft/lua/rom',
|
||||
'src/main/resources/assets/computercraft/lua/bios.lua'
|
||||
}
|
||||
|
||||
files['src/main/resources/assets/computercraft/lua/bios.lua'] = {
|
||||
-- Allow declaring and mutating globals
|
||||
allow_defined_top = true,
|
||||
ignore = { '112', '121', '122', '131', '142' },
|
||||
}
|
||||
|
||||
files['src/main/resources/assets/computercraft/lua/rom/apis'] = {
|
||||
-- APIs may define globals on the top level. We'll ignore unused globals,
|
||||
-- as obviously they may be used outside that API.
|
||||
allow_defined_top = true,
|
||||
ignore = { '131' },
|
||||
}
|
14
.travis.yml
14
.travis.yml
@@ -1,14 +0,0 @@
|
||||
language: java
|
||||
|
||||
script: ./gradlew build --no-daemon
|
||||
|
||||
before_cache:
|
||||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.gradle/caches/
|
||||
- $HOME/.gradle/wrapper/s
|
||||
|
||||
jdk:
|
||||
- oraclejdk8
|
115
CONTRIBUTING.md
Normal file
115
CONTRIBUTING.md
Normal file
@@ -0,0 +1,115 @@
|
||||
# Contributing to CC: Tweaked
|
||||
As with many open source projects, CC: Tweaked thrives on contributions from other people! This document (hopefully)
|
||||
provides an introduction as to how to get started in helping out.
|
||||
|
||||
If you've any other questions, [just ask the community][community] or [open an issue][new-issue].
|
||||
|
||||
## Reporting issues
|
||||
If you have a bug, suggestion, or other feedback, the best thing to do is [file an issue][new-issue]. When doing so,
|
||||
do use the issue templates - they provide a useful hint on what information to provide.
|
||||
|
||||
## Translations
|
||||
Translations are managed through [Weblate], an online interface for managing language strings. This is synced
|
||||
automatically with GitHub, so please don't submit PRs adding/changing translations!
|
||||
|
||||
## Developing
|
||||
In order to develop CC: Tweaked, you'll need to download the source code and then run it. This is a pretty simple
|
||||
process. When building on Windows, Use `gradlew.bat` instead of `./gradlew`.
|
||||
|
||||
- **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
|
||||
- **Setup Forge:** `./gradlew build`
|
||||
- **Run Minecraft:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
|
||||
- **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`.
|
||||
These commands may take a few minutes to run the first time, as the environment is set up, but should be much faster
|
||||
afterwards.
|
||||
|
||||
The following sections describe the more niche sections of CC: Tweaked's build system. Some bits of these are
|
||||
quite-complex, and (dare I say) over-engineered, so you may wish to ignore them. Well tested/documented PRs are always
|
||||
preferred (and I'd definitely recommend setting up the tooling if you're doing serious development work), but for
|
||||
small changes it can be a lot.
|
||||
|
||||
### Code linters
|
||||
CC: Tweaked uses a couple of "linters" on its source code, to enforce a consistent style across the project. While these
|
||||
are run whenever you submit a PR, it's often useful to run this before committing.
|
||||
|
||||
- **[Checkstyle]:** Checks Java code to ensure it is consistently formatted. This can be run with `./gradlew build` or
|
||||
`./gradle check`.
|
||||
- **[illuaminate]:** Checks Lua code for semantic and styleistic issues. See [the usage section][illuaminate-usage] for
|
||||
how to download and run it. You may need to generate the Java documentation stubs (see "Documentation" below) for all
|
||||
lints to pass.
|
||||
|
||||
### Documentation
|
||||
When writing documentation for [CC: Tweaked's documentation website][docs], it may be useful to build the documentation
|
||||
and preview it yourself before submitting a PR.
|
||||
|
||||
Building all documentation is, sadly, a multi-stage process (though this is largely hidden by Gradle). First we need to
|
||||
convert Java doc-comments into Lua ones, we also generate some Javascript to embed. All of this is then finally fed into
|
||||
illuaminate, which spits out our HTML.
|
||||
|
||||
#### Setting up the tooling
|
||||
For various reasons, getting the environment set up to build documentation can be pretty complex. I'd quite like to
|
||||
automate this via Docker and/or nix in the future, but this needs to be done manually for now.
|
||||
|
||||
This tooling is only needed if you need to build the whole website. If you just want to generate the Lua stubs, you can
|
||||
skp this section.
|
||||
- Install Node/npm and install our Node packages with `npm ci`.
|
||||
- Install [illuaminate][illuaminate-usage] as described above.
|
||||
|
||||
#### Building documentation
|
||||
Gradle should be your entrypoint to building most documentation. There's two tasks which are of interest:
|
||||
|
||||
- `./gradlew luaJavadoc` - Generate documentation stubs for Java methods.
|
||||
- `./gradlew docWebsite` - Generate the whole website (including Javascript pages). The resulting HTML is stored at
|
||||
`./build/docs/lua/`.
|
||||
|
||||
#### Writing documentation
|
||||
illuaminate's documentation system is not currently documented (somewhat ironic), but is _largely_ the same as
|
||||
[ldoc][ldoc]. Documentation comments are written in Markdown,
|
||||
|
||||
Our markdown engine does _not_ support GitHub flavoured markdown, and so does not support all the features one might
|
||||
expect (such as tables). It is very much recommended that you build and preview the docs locally first.
|
||||
|
||||
### Testing
|
||||
Thankfully running tests is much simpler than running the documentation generator! `./gradlew check` will run the
|
||||
entire test suite (and some additional bits of verification).
|
||||
|
||||
Before we get into writing tests, it's worth mentioning the various test suites that CC: Tweaked has:
|
||||
- "Core" Java (`./src/test/java`): These test core bits of the mod which don't require any Minecraft interaction.
|
||||
This includes the `@LuaFunction` system, file system code, etc...
|
||||
|
||||
These tests are run by `./gradlew test`.
|
||||
|
||||
- CraftOS (`./src/test/resources/test-rom/`): These tests are written in Lua, and ensure the Lua environment, libraries
|
||||
and programs work as expected. These are (generally) written to be able to be run on emulators too, to provide some
|
||||
sort of compliance test.
|
||||
|
||||
These tests are run by the '"Core" Java' test suite, and so are also run with `./gradlew test`.
|
||||
|
||||
- In-game (`./src/testMod/java/dan200/computercraft/ingame/`): These tests are run on an actual Minecraft server and client,
|
||||
using [the same system Mojang do][mc-test]. The aim of these is to test in-game behaviour of blocks and peripherals.
|
||||
|
||||
These are run by `./gradlew testClient` and `./gradlew testServer`. You may want to run the client under `xvfb-run`
|
||||
or similar when running in a headless environment.
|
||||
|
||||
## CraftOS tests
|
||||
CraftOS's tests are written using a test system called "mcfly", heavily inspired by [busted] (and thus RSpec). Groups of
|
||||
tests go inside `describe` blocks, and a single test goes inside `it`.
|
||||
|
||||
Assertions are generally written using `expect` (inspired by Hamcrest and the like). For instance, `expect(foo):eq("bar")`
|
||||
asserts that your variable `foo` is equal to the expected value `"bar"`.
|
||||
|
||||
[new-issue]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose "Create a new issue"
|
||||
[community]: README.md#Community "Get in touch with the community."
|
||||
[checkstyle]: https://checkstyle.org/
|
||||
[illuaminate]: https://github.com/SquidDev/illuaminate/ "Illuaminate on GitHub"
|
||||
[illuaminate-usage]: https://github.com/SquidDev/illuaminate/blob/master/README.md#usage "Installing Illuaminate"
|
||||
[weblate]: https://i18n.tweaked.cc/projects/cc-tweaked/minecraft/ "CC: Tweaked weblate instance"
|
||||
[docs]: https://tweaked.cc/ "CC: Tweaked documentation"
|
||||
[ldoc]: http://stevedonovan.github.io/ldoc/ "ldoc, a Lua documentation generator."
|
||||
[mc-test]: https://www.youtube.com/watch?v=vXaWOJTCYNg
|
||||
[busted]: https://github.com/Olivine-Labs/busted "busted: Elegant Lua unit testing."
|
14
LICENSE
14
LICENSE
@@ -19,14 +19,14 @@ Mod: The mod code designated by the present license, in source form, binary
|
||||
form, as obtained standalone, as part of a wider distribution or resulting from
|
||||
the compilation of the original or modified sources.
|
||||
|
||||
Dependency: Code required for the mod to work properly. This includes
|
||||
Dependency: Code required for the mod to work properly. This includes
|
||||
dependencies required to compile the code as well as any file or modification
|
||||
that is explicitly or implicitly required for the mod to be working.
|
||||
|
||||
1. Scope
|
||||
--------
|
||||
|
||||
The present license is granted to any user of the mod. As a prerequisite,
|
||||
The present license is granted to any user of the mod. As a prerequisite,
|
||||
a user must own a legally acquired copy of Minecraft
|
||||
|
||||
2. Liability
|
||||
@@ -41,13 +41,13 @@ or misuse of this mod fall on the user.
|
||||
3. Play rights
|
||||
--------------
|
||||
|
||||
The user is allowed to install this mod on a Minecraft client or server and to play
|
||||
The user is allowed to install this mod on a Minecraft client or server and to play
|
||||
without restriction.
|
||||
|
||||
4. Modification rights
|
||||
----------------------
|
||||
|
||||
The user has the right to decompile the source code, look at either the
|
||||
The user has the right to decompile the source code, look at either the
|
||||
decompiled version or the original source code, and to modify it.
|
||||
|
||||
5. Distribution of original or modified copy rights
|
||||
@@ -61,10 +61,10 @@ include:
|
||||
- patch to its source or binary files
|
||||
- any copy of a portion of its binary source files
|
||||
|
||||
The user is allowed to redistribute this mod partially, in totality, or
|
||||
The user is allowed to redistribute this mod partially, in totality, or
|
||||
included in a distribution.
|
||||
|
||||
When distributing binary files, the user must provide means to obtain its
|
||||
When distributing binary files, the user must provide means to obtain its
|
||||
entire set of sources or modified sources at no cost.
|
||||
|
||||
All distributions of this mod must remain licensed under the CCPL.
|
||||
@@ -92,7 +92,7 @@ must be made available at no cost and remain licensed under the CCPL.
|
||||
---------------
|
||||
|
||||
If you choose to contribute code or assets to be included in this mod, you
|
||||
agree that, if added to to the main repository at
|
||||
agree that, if added to to the main repository at
|
||||
https://github.com/dan200/ComputerCraft, your contributions will be covered by
|
||||
this license, and that Daniel Ratcliffe will retain the right to re-license the
|
||||
mod, including your contributions, in part or in whole, under other licenses.
|
||||
|
79
README.md
79
README.md
@@ -1,75 +1,48 @@
|
||||
# 
|
||||
[](https://travis-ci.org/SquidDev-CC/CC-Tweaked "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,
|
||||
turtles and more to Minecraft.
|
||||
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.
|
||||
|
||||
## What?
|
||||
ComputerCraft has always held a fond place in my heart: it's the mod which really got me into Minecraft, and it's the
|
||||
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.
|
||||
CC: Tweaked can be installed from [CurseForge] or [Modrinth]. It requires the [Minecraft Forge][forge] mod loader, but
|
||||
[versions are available for Fabric][ccrestitched].
|
||||
|
||||
## Contributing
|
||||
Any contribution is welcome, be that using the mod, reporting bugs or contributing code. In order to start helping
|
||||
develop CC:T, you'll need to follow these steps:
|
||||
|
||||
- **Clone the repository:** `git clone https://github.com/SquidDev-CC/CC-Tweaked.git && cd CC-Tweaked`
|
||||
- **Setup Forge:** `./gradlew setupDecompWorkspace`
|
||||
- **Test your changes:** `./gradlew runClient` (or run the `GradleStart` class from your IDE).
|
||||
|
||||
If you want to run CC:T in a normal Minecraft instance, run `./gradlew build` and copy the `.jar` from `build/libs`.
|
||||
Any contribution is welcome, be that using the mod, reporting bugs or contributing code. If you want to get started
|
||||
developing the mod, [check out the instructions here](CONTRIBUTING.md#developing).
|
||||
|
||||
## Community
|
||||
If you need help getting started with CC: Tweaked, want to show off your latest project, or just want to chat about
|
||||
ComputerCraft we have a [forum](https://forums.computercraft.cc/) and [Discord guild](https://discord.gg/H2UyJXe)!
|
||||
There's also a fairly populated, albeit quiet [IRC channel](http://webchat.esper.net/?channels=#computercraft), if
|
||||
that's more your cup of tea.
|
||||
ComputerCraft we have a [forum](https://forums.computercraft.cc/) and [Discord guild](https://discord.computercraft.cc)!
|
||||
There's also a fairly populated, albeit quiet [IRC channel](http://webchat.esper.net/?channels=computercraft), if that's
|
||||
more your cup of tea.
|
||||
|
||||
I'd generally recommend you don't contact me directly (email, DM, etc...) unless absolutely necessary (i.e. in order to
|
||||
report exploits). You'll get a far quicker response if you ask the whole community!
|
||||
We also host fairly comprehensive documentation at [tweaked.cc](https://tweaked.cc/ "The CC: Tweaked website").
|
||||
|
||||
## Using
|
||||
If you want to depend on CC: Tweaked, we have a maven repo. However, you should be wary that some functionality is only
|
||||
exposed by CC:T's API and not vanilla ComputerCraft. If you wish to support all variations of ComputerCraft, I recommend
|
||||
using [cc.crzd.me's maven](https://cc.crzd.me/maven/) instead.
|
||||
CC: Tweaked is hosted on my maven repo, and so is relatively simple to depend on. You may wish to add a soft (or hard)
|
||||
dependency in your `mods.toml` file, with the appropriate version bounds, to ensure that API functionality you depend
|
||||
on is present.
|
||||
|
||||
```groovy
|
||||
dependencies {
|
||||
repositories {
|
||||
maven { url 'https://squiddev.cc/maven/' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.squiddev:cc-tweaked-${mc_version}:${cct_version}"
|
||||
implementation fg.deobf("org.squiddev:cc-tweaked-${mc_version}:${cct_version}")
|
||||
}
|
||||
```
|
||||
|
||||
You should also be careful to only use classes within the `dan200.computercraft.api` package. Non-API classes are
|
||||
subject to change at any point. If you depend on functionality outside the API, file an issue, and we can look into
|
||||
exposing more features.
|
||||
|
||||
We bundle the API sources with the jar, so documentation should be easily viewable within your editor. Alternatively,
|
||||
the generated documentation [can be browsed online](https://tweaked.cc/javadoc/).
|
||||
|
||||
[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"
|
||||
|
605
build.gradle
605
build.gradle
@@ -1,39 +1,61 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
maven {
|
||||
name = "forge"
|
||||
url = "http://files.minecraftforge.net/maven"
|
||||
}
|
||||
maven { url = "https://maven.minecraftforge.net" }
|
||||
maven { url = 'https://maven.parchmentmc.org' }
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.google.code.gson:gson:2.8.1'
|
||||
classpath 'net.minecraftforge.gradle:ForgeGradle:3.0.117'
|
||||
classpath 'net.sf.proguard:proguard-gradle:6.1.0beta2'
|
||||
classpath 'org.ajoberstar.grgit:grgit-gradle:3.0.0'
|
||||
classpath 'net.minecraftforge.gradle:ForgeGradle:5.1.+'
|
||||
classpath 'org.parchmentmc:librarian:1.+'
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.matthewprenger.cursegradle' version '1.2.0'
|
||||
id "com.github.breadmoirai.github-release" version "2.2.4"
|
||||
id "checkstyle"
|
||||
id "jacoco"
|
||||
id "maven-publish"
|
||||
id "com.github.hierynomus.license" version "0.16.1"
|
||||
id "com.matthewprenger.cursegradle" version "1.4.0"
|
||||
id "com.github.breadmoirai.github-release" version "2.2.12"
|
||||
id "org.jetbrains.kotlin.jvm" version "1.3.72"
|
||||
id "com.modrinth.minotaur" version "1.2.1"
|
||||
}
|
||||
|
||||
apply plugin: 'net.minecraftforge.gradle'
|
||||
apply plugin: 'org.ajoberstar.grgit'
|
||||
apply plugin: 'maven-publish'
|
||||
apply plugin: 'maven'
|
||||
apply plugin: 'org.parchmentmc.librarian.forgegradle'
|
||||
|
||||
version = mod_version
|
||||
|
||||
group = "org.squiddev"
|
||||
archivesBaseName = "cc-tweaked-${mc_version}"
|
||||
|
||||
def javaVersion = JavaLanguageVersion.of(8)
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = javaVersion
|
||||
}
|
||||
|
||||
withSourcesJar()
|
||||
withJavadocJar()
|
||||
}
|
||||
|
||||
tasks.withType(JavaExec).configureEach {
|
||||
javaLauncher = javaToolchains.launcherFor {
|
||||
languageVersion = javaVersion
|
||||
}
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main.resources {
|
||||
srcDir 'src/generated/resources'
|
||||
}
|
||||
|
||||
testMod {}
|
||||
}
|
||||
|
||||
minecraft {
|
||||
runs {
|
||||
client {
|
||||
workingDirectory project.file('run')
|
||||
all {
|
||||
property 'forge.logging.markers', 'REGISTRIES'
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
|
||||
@@ -44,155 +66,139 @@ minecraft {
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
client {
|
||||
workingDirectory project.file('run')
|
||||
property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
|
||||
property 'forge.logging.console.level', 'debug'
|
||||
}
|
||||
|
||||
server {
|
||||
workingDirectory project.file("run/server")
|
||||
arg "--nogui"
|
||||
}
|
||||
|
||||
data {
|
||||
workingDirectory project.file('run')
|
||||
args '--mod', 'computercraft', '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/')
|
||||
}
|
||||
|
||||
testClient {
|
||||
workingDirectory project.file('test-files/client')
|
||||
parent runs.client
|
||||
|
||||
mods {
|
||||
computercraft {
|
||||
source sourceSets.main
|
||||
cctest {
|
||||
source sourceSets.testMod
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
testServer {
|
||||
workingDirectory project.file('test-files/server')
|
||||
parent runs.server
|
||||
|
||||
mods {
|
||||
cctest {
|
||||
source sourceSets.testMod
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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/testMod/resources/META-INF/accesstransformer.cfg')
|
||||
}
|
||||
|
||||
repositories {
|
||||
maven {
|
||||
name "JEI"
|
||||
url "http://dvs1.progwml6.com/files/maven"
|
||||
}
|
||||
mavenCentral()
|
||||
maven {
|
||||
name "SquidDev"
|
||||
url "https://squiddev.cc/maven"
|
||||
}
|
||||
ivy {
|
||||
name "Charset"
|
||||
artifactPattern "https://asie.pl/files/mods/Charset/LibOnly/[module]-[revision](-[classifier]).[ext]"
|
||||
}
|
||||
maven {
|
||||
name "Amadornes"
|
||||
url "http://maven.amadornes.com/"
|
||||
}
|
||||
}
|
||||
|
||||
configurations {
|
||||
shade
|
||||
compile.extendsFrom shade
|
||||
deployerJars
|
||||
implementation.extendsFrom shade
|
||||
cctJavadoc
|
||||
|
||||
testModImplementation.extendsFrom(implementation)
|
||||
testModImplementation.extendsFrom(testImplementation)
|
||||
}
|
||||
|
||||
dependencies {
|
||||
checkstyle "com.puppycrawl.tools:checkstyle:8.25"
|
||||
|
||||
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
|
||||
|
||||
compileOnly fg.deobf("mezz.jei:jei-1.13.2:5.0.0.20:api")
|
||||
// deobfProvided "pl.asie:Charset-Lib:0.5.4.6"
|
||||
// deobfProvided "MCMultiPart2:MCMultiPart:2.5.3"
|
||||
compileOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.104:api")
|
||||
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.13.2:5.0.0.20")
|
||||
runtimeOnly fg.deobf("mezz.jei:jei-1.16.5:7.7.0.104")
|
||||
|
||||
shade 'org.squiddev:Cobalt:0.5.0-SNAPSHOT'
|
||||
shade 'org.squiddev:Cobalt:0.5.2-SNAPSHOT'
|
||||
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.1.0'
|
||||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.1.0'
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
|
||||
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
|
||||
testImplementation 'org.hamcrest:hamcrest:2.2'
|
||||
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72'
|
||||
testImplementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.72'
|
||||
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
|
||||
|
||||
deployerJars "org.apache.maven.wagon:wagon-ssh:3.0.0"
|
||||
testModImplementation sourceSets.main.output
|
||||
|
||||
cctJavadoc 'cc.tweaked:cct-javadoc:1.4.1'
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
exclude 'dan200/computercraft/shared/integration/mcmp'
|
||||
exclude 'dan200/computercraft/shared/integration/charset'
|
||||
}
|
||||
}
|
||||
// Compile tasks
|
||||
|
||||
compileTestModJava {
|
||||
dependsOn(compileJava)
|
||||
}
|
||||
|
||||
javadoc {
|
||||
include "dan200/computercraft/api/**/*.java"
|
||||
}
|
||||
|
||||
jar {
|
||||
dependsOn javadoc
|
||||
task luaJavadoc(type: Javadoc) {
|
||||
description "Generates documentation for Java-side Lua functions."
|
||||
group "documentation"
|
||||
|
||||
manifest {
|
||||
attributes(["Specification-Title": "computercraft",
|
||||
"Specification-Vendor": "SquidDev",
|
||||
"Specification-Version": "25.0",
|
||||
"Implementation-Title": "CC: Tweaked",
|
||||
"Implementation-Version": "${mod_version}",
|
||||
"Implementation-Vendor" :"SquidDev",
|
||||
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
|
||||
source = sourceSets.main.allJava
|
||||
destinationDir = file("${project.docsDir}/luaJavadoc")
|
||||
classpath = sourceSets.main.compileClasspath
|
||||
|
||||
options.docletpath = configurations.cctJavadoc.files as List
|
||||
options.doclet = "cc.tweaked.javadoc.LuaDoclet"
|
||||
options.noTimestamp = false
|
||||
|
||||
javadocTool = javaToolchains.javadocToolFor {
|
||||
languageVersion = JavaLanguageVersion.of(11)
|
||||
}
|
||||
}
|
||||
|
||||
from (sourceSets.main.allSource) {
|
||||
include "dan200/computercraft/api/**/*.java"
|
||||
jar {
|
||||
manifest {
|
||||
attributes(["Specification-Title" : "computercraft",
|
||||
"Specification-Vendor" : "SquidDev",
|
||||
"Specification-Version" : "1",
|
||||
"Implementation-Title" : "CC: Tweaked",
|
||||
"Implementation-Version" : "${mod_version}",
|
||||
"Implementation-Vendor" : "SquidDev",
|
||||
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")])
|
||||
}
|
||||
|
||||
from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
|
||||
}
|
||||
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.nio.file.*
|
||||
import java.util.zip.*
|
||||
|
||||
import com.google.gson.GsonBuilder
|
||||
import com.google.gson.JsonElement
|
||||
import org.ajoberstar.grgit.Grgit
|
||||
import 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"
|
||||
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.** { *; }'
|
||||
|
||||
// Preserve the constructors in Cobalt library class, as we init them via reflection
|
||||
keepclassmembers 'class org.squiddev.cobalt.lib.** { <init>(...); }'
|
||||
|
||||
// LWJGL and Apache bundle Java 9 versions, which is great, but rather breaks Proguard
|
||||
dontwarn 'module-info'
|
||||
dontwarn 'org.apache.**,org.lwjgl.**'
|
||||
}
|
||||
|
||||
task proguardMove(dependsOn: proguard) {
|
||||
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
|
||||
)
|
||||
[compileJava, compileTestJava, compileTestModJava].forEach {
|
||||
it.configure {
|
||||
options.compilerArgs << "-Xlint" << "-Xlint:-processing"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
processResources {
|
||||
inputs.property "version", mod_version
|
||||
inputs.property "mcversion", mc_version
|
||||
@@ -200,25 +206,25 @@ processResources {
|
||||
def hash = 'none'
|
||||
Set<String> contributors = []
|
||||
try {
|
||||
def grgit = Grgit.open(dir: '.')
|
||||
hash = grgit.head().id
|
||||
hash = ["git", "-C", projectDir, "rev-parse", "HEAD"].execute().text.trim()
|
||||
|
||||
def blacklist = ['GitHub', 'dan200', 'Daniel Ratcliffe']
|
||||
grgit.log().each {
|
||||
if (!blacklist.contains(it.author.name)) contributors.add(it.author.name)
|
||||
if (!blacklist.contains(it.committer.name)) contributors.add(it.committer.name)
|
||||
["git", "-C", projectDir, "log", "--format=tformat:%an%n%cn"].execute().text.split('\n').each {
|
||||
if (!blacklist.contains(it)) contributors.add(it)
|
||||
}
|
||||
} catch(Exception ignored) { }
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
inputs.property "commithash", hash
|
||||
duplicatesStrategy = DuplicatesStrategy.INCLUDE
|
||||
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
include 'META-INF/mods.toml'
|
||||
include 'data/computercraft/lua/rom/help/credits.txt'
|
||||
|
||||
expand 'version': mod_version,
|
||||
'mcversion': mc_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) {
|
||||
@@ -227,78 +233,217 @@ processResources {
|
||||
}
|
||||
}
|
||||
|
||||
task compressJson(dependsOn: jar) {
|
||||
group "compact"
|
||||
description "Minifies all JSON files, stripping whitespace"
|
||||
sourcesJar {
|
||||
duplicatesStrategy = DuplicatesStrategy.INCLUDE
|
||||
}
|
||||
|
||||
def jarPath = file(jar.archivePath)
|
||||
// Web tasks
|
||||
|
||||
def tempPath = File.createTempFile("input", ".jar", temporaryDir)
|
||||
tempPath.deleteOnExit()
|
||||
|
||||
def gson = new GsonBuilder().create()
|
||||
import com.hierynomus.gradle.license.tasks.LicenseCheck
|
||||
import com.hierynomus.gradle.license.tasks.LicenseFormat
|
||||
import org.apache.tools.ant.taskdefs.condition.Os
|
||||
|
||||
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 ->
|
||||
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)
|
||||
List<String> mkCommand(String command) {
|
||||
return Os.isFamily(Os.FAMILY_WINDOWS) ? ["cmd", "/c", command] : ["sh", "-c", command]
|
||||
}
|
||||
|
||||
def element = inJar.getInputStream(entry).withCloseable { gson.fromJson(it.newReader("UTF8"), JsonElement.class) }
|
||||
outJar.write(gson.toJson(element).getBytes(StandardCharsets.UTF_8))
|
||||
}
|
||||
}
|
||||
task rollup(type: Exec) {
|
||||
group = "build"
|
||||
description = "Bundles JS into rollup"
|
||||
|
||||
}
|
||||
}
|
||||
inputs.files(fileTree("src/web")).withPropertyName("sources")
|
||||
inputs.file("package-lock.json").withPropertyName("package-lock.json")
|
||||
inputs.file("tsconfig.json").withPropertyName("Typescript config")
|
||||
inputs.file("rollup.config.js").withPropertyName("Rollup config")
|
||||
outputs.file("$buildDir/rollup/index.js").withPropertyName("output")
|
||||
|
||||
// And replace the original jar again
|
||||
Files.move(tempPath.toPath(), jarPath.toPath(), StandardCopyOption.REPLACE_EXISTING)
|
||||
commandLine mkCommand('"node_modules/.bin/rollup" --config rollup.config.js')
|
||||
}
|
||||
|
||||
task minifyWeb(type: Exec, dependsOn: rollup) {
|
||||
group = "build"
|
||||
description = "Bundles JS into rollup"
|
||||
|
||||
inputs.file("$buildDir/rollup/index.js").withPropertyName("sources")
|
||||
inputs.file("package-lock.json").withPropertyName("package-lock.json")
|
||||
outputs.file("$buildDir/rollup/index.min.js").withPropertyName("output")
|
||||
|
||||
commandLine mkCommand('"node_modules/.bin/terser"' + " -o '$buildDir/rollup/index.min.js' '$buildDir/rollup/index.js'")
|
||||
}
|
||||
|
||||
task illuaminateDocs(type: Exec, dependsOn: [minifyWeb, luaJavadoc]) {
|
||||
group = "build"
|
||||
description = "Bundles JS into rollup"
|
||||
|
||||
inputs.files(fileTree("doc")).withPropertyName("docs")
|
||||
inputs.files(fileTree("src/main/resources/data/computercraft/lua/rom")).withPropertyName("lua rom")
|
||||
inputs.file("illuaminate.sexp").withPropertyName("illuaminate.sexp")
|
||||
inputs.dir("$buildDir/docs/luaJavadoc")
|
||||
inputs.file("$buildDir/rollup/index.min.js").withPropertyName("scripts")
|
||||
inputs.file("src/web/styles.css").withPropertyName("styles")
|
||||
outputs.dir("$buildDir/docs/lua")
|
||||
|
||||
commandLine mkCommand('"bin/illuaminate" doc-gen')
|
||||
}
|
||||
|
||||
task docWebsite(type: Copy, dependsOn: [illuaminateDocs]) {
|
||||
from 'doc'
|
||||
include 'logo.png'
|
||||
include 'images/**'
|
||||
into "${project.docsDir}/lua"
|
||||
}
|
||||
|
||||
// Check tasks
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
testLogging {
|
||||
events "skipped", "failed"
|
||||
}
|
||||
}
|
||||
|
||||
assemble.dependsOn compressJson
|
||||
jacocoTestReport {
|
||||
dependsOn('test')
|
||||
reports {
|
||||
xml.required = true
|
||||
html.required = true
|
||||
}
|
||||
}
|
||||
|
||||
check.dependsOn jacocoTestReport
|
||||
|
||||
license {
|
||||
mapping("java", "SLASHSTAR_STYLE")
|
||||
strictCheck true
|
||||
|
||||
ext.year = Calendar.getInstance().get(Calendar.YEAR)
|
||||
}
|
||||
|
||||
[licenseMain, licenseFormatMain].forEach {
|
||||
it.configure {
|
||||
include("**/*.java")
|
||||
exclude("dan200/computercraft/api/**")
|
||||
header file('config/license/main.txt')
|
||||
}
|
||||
}
|
||||
|
||||
[licenseTest, licenseFormatTest, licenseTestMod, licenseFormatTestMod].forEach {
|
||||
it.configure {
|
||||
include("**/*.java")
|
||||
header file('config/license/main.txt')
|
||||
}
|
||||
}
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
tasks.withType(LicenseFormat) {
|
||||
outputs.upToDateWhen { false }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
task licenseAPI(type: LicenseCheck)
|
||||
task licenseFormatAPI(type: LicenseFormat)
|
||||
[licenseAPI, licenseFormatAPI].forEach {
|
||||
it.configure {
|
||||
source = sourceSets.main.java
|
||||
include("dan200/computercraft/api/**")
|
||||
header file('config/license/api.txt')
|
||||
}
|
||||
}
|
||||
|
||||
task setupServer(type: Copy) {
|
||||
group "test server"
|
||||
description "Sets up the environment for the test server."
|
||||
|
||||
from("src/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
|
||||
|
||||
task checkRelease {
|
||||
group "upload"
|
||||
description "Verifies that everything is ready for a release"
|
||||
|
||||
inputs.property "version", mod_version
|
||||
inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.txt")
|
||||
inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
|
||||
inputs.file("src/main/resources/data/computercraft/lua/rom/help/changelog.md")
|
||||
inputs.file("src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
|
||||
|
||||
doLast {
|
||||
def ok = true
|
||||
|
||||
// Check we're targetting the current version
|
||||
def whatsnew = new File("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") {
|
||||
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
|
||||
def idx = whatsnew.findIndexOf { it == 'Type "help changelog" to see the full version history.' }
|
||||
if (idx == -1) {
|
||||
ok = false
|
||||
project.logger.error("Must mention the changelog in whatsnew.txt")
|
||||
project.logger.error("Must mention the changelog in whatsnew.md")
|
||||
} else {
|
||||
whatsnew = whatsnew.getAt(0 ..< idx)
|
||||
whatsnew = whatsnew.getAt(0..<idx)
|
||||
}
|
||||
|
||||
// Check whatsnew and changelog match.
|
||||
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)) {
|
||||
ok = false
|
||||
project.logger.error("whatsnew and changelog are not in sync")
|
||||
@@ -307,7 +452,7 @@ task checkRelease {
|
||||
if (!ok) throw new IllegalStateException("Could not check release")
|
||||
}
|
||||
}
|
||||
|
||||
check.dependsOn checkRelease
|
||||
|
||||
curseforge {
|
||||
apiKey = project.hasProperty('curseForgeApiKey') ? project.curseForgeApiKey : ''
|
||||
@@ -316,59 +461,70 @@ curseforge {
|
||||
releaseType = 'release'
|
||||
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 {
|
||||
incompatible "computercraft"
|
||||
}
|
||||
addGameVersion "${mc_version}"
|
||||
}
|
||||
}
|
||||
|
||||
import com.modrinth.minotaur.TaskModrinthUpload
|
||||
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
|
||||
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 {
|
||||
publications {
|
||||
mavenJava(MavenPublication) {
|
||||
maven(MavenPublication) {
|
||||
from components.java
|
||||
// artifact sourceJar
|
||||
|
||||
pom {
|
||||
name = 'CC: Tweaked'
|
||||
description = 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
|
||||
url = 'https://github.com/SquidDev-CC/CC-Tweaked'
|
||||
|
||||
scm {
|
||||
url = 'https://github.com/SquidDev-CC/CC-Tweaked.git'
|
||||
}
|
||||
|
||||
issueManagement {
|
||||
system = 'github'
|
||||
url = 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
|
||||
}
|
||||
|
||||
licenses {
|
||||
license {
|
||||
name = 'ComputerCraft Public License, Version 1.0'
|
||||
url = 'https://github.com/SquidDev-CC/CC-Tweaked/blob/mc-1.15.x/LICENSE'
|
||||
}
|
||||
}
|
||||
|
||||
withXml { asNode().remove(asNode().get("dependencies")) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uploadArchives {
|
||||
repositories {
|
||||
if(project.hasProperty('mavenUploadUrl')) {
|
||||
mavenDeployer {
|
||||
configuration = configurations.deployerJars
|
||||
|
||||
repository(url: project.property('mavenUploadUrl')) {
|
||||
authentication(
|
||||
userName: project.property('mavenUploadUser'),
|
||||
privateKey: project.property('mavenUploadKey'))
|
||||
}
|
||||
|
||||
pom.project {
|
||||
name 'CC: Tweaked'
|
||||
packaging 'jar'
|
||||
description 'CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles and more to Minecraft.'
|
||||
url 'https://github.com/SquidDev-CC/CC-Tweaked'
|
||||
|
||||
scm {
|
||||
url 'https://github.com/SquidDev-CC/CC-Tweaked.git'
|
||||
}
|
||||
|
||||
issueManagement {
|
||||
system 'github'
|
||||
url 'https://github.com/SquidDev-CC/CC-Tweaked/issues'
|
||||
}
|
||||
|
||||
licenses {
|
||||
license {
|
||||
name 'ComputerCraft Public License, Version 1.0'
|
||||
url 'https://github.com/SquidDev-CC/CC-Tweaked/blob/master/LICENSE'
|
||||
distribution 'repo'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pom.whenConfigured { pom ->
|
||||
pom.dependencies.clear()
|
||||
if (project.hasProperty("mavenUser")) {
|
||||
maven {
|
||||
name = "SquidDev"
|
||||
url = "https://squiddev.cc/maven"
|
||||
credentials {
|
||||
username = project.property("mavenUser") as String
|
||||
password = project.property("mavenPass") as String
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -379,39 +535,30 @@ githubRelease {
|
||||
token project.hasProperty('githubApiKey') ? project.githubApiKey : ''
|
||||
owner 'SquidDev-CC'
|
||||
repo 'CC-Tweaked'
|
||||
targetCommitish { Grgit.open(dir: '.').branch.current().name }
|
||||
targetCommitish.set(project.provider({
|
||||
try {
|
||||
return ["git", "-C", projectDir, "rev-parse", "--abbrev-ref", "HEAD"].execute().text.trim()
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
return "master"
|
||||
}))
|
||||
|
||||
tagName "v${mc_version}-${mod_version}"
|
||||
releaseName "[${mc_version}] ${mod_version}"
|
||||
body {
|
||||
"## " + new File("src/main/resources/data/computercraft/lua/rom/help/whatsnew.txt")
|
||||
body.set(project.provider({
|
||||
"## " + new File(projectDir, "src/main/resources/data/computercraft/lua/rom/help/whatsnew.md")
|
||||
.readLines()
|
||||
.takeWhile { it != 'Type "help changelog" to see the full version history.' }
|
||||
.join("\n").trim()
|
||||
}
|
||||
}))
|
||||
prerelease false
|
||||
}
|
||||
|
||||
def uploadTasks = ["uploadArchives", "curseforge", "githubRelease"]
|
||||
def uploadTasks = ["publish", "curseforge", "publishModrinth", "githubRelease"]
|
||||
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease }
|
||||
|
||||
task uploadAll(dependsOn: uploadTasks) {
|
||||
group "upload"
|
||||
description "Uploads to all repositories (Maven, Curse, GitHub release)"
|
||||
description "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)"
|
||||
}
|
||||
|
||||
test {
|
||||
useJUnitPlatform()
|
||||
testLogging {
|
||||
events "passed", "skipped", "failed"
|
||||
}
|
||||
}
|
||||
|
||||
gradle.projectsEvaluated {
|
||||
reobfJar.dependsOn proguardMove
|
||||
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs << "-Xlint" << "-Xlint:-processing" // Causes Forge build to fail << "-Werror"
|
||||
}
|
||||
}
|
||||
|
||||
|
164
config/checkstyle/checkstyle.xml
Normal file
164
config/checkstyle/checkstyle.xml
Normal file
@@ -0,0 +1,164 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
|
||||
"https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||
<module name="Checker">
|
||||
<property name="tabWidth" value="4"/>
|
||||
<property name="charset" value="UTF-8" />
|
||||
|
||||
<module name="SuppressionFilter">
|
||||
<property name="file" value="${config_loc}/suppressions.xml" />
|
||||
</module>
|
||||
|
||||
<module name="BeforeExecutionExclusionFileFilter">
|
||||
<property name="fileNamePattern" value="render_old"/>
|
||||
</module>
|
||||
|
||||
<module name="TreeWalker">
|
||||
<!-- Annotations -->
|
||||
<module name="AnnotationLocation" />
|
||||
<module name="AnnotationUseStyle" />
|
||||
<module name="MissingDeprecated" />
|
||||
<module name="MissingOverride" />
|
||||
|
||||
<!-- Blocks -->
|
||||
<module name="EmptyBlock" />
|
||||
<module name="EmptyCatchBlock">
|
||||
<property name="exceptionVariableName" value="ignored" />
|
||||
</module>
|
||||
<module name="LeftCurly">
|
||||
<property name="option" value="nl" />
|
||||
<!-- The defaults, minus lambdas. -->
|
||||
<property name="tokens" value="ANNOTATION_DEF,CLASS_DEF,CTOR_DEF,ENUM_CONSTANT_DEF,ENUM_DEF,INTERFACE_DEF,LITERAL_CASE,LITERAL_CATCH,LITERAL_DEFAULT,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,METHOD_DEF,OBJBLOCK,STATIC_INIT" />
|
||||
</module>
|
||||
<module name="NeedBraces">
|
||||
<property name="allowSingleLineStatement" value="true"/>
|
||||
</module>
|
||||
<module name="RightCurly">
|
||||
<property name="option" value="alone" />
|
||||
</module>
|
||||
|
||||
<!-- Class design. As if we've ever followed good practice here. -->
|
||||
<module name="FinalClass" />
|
||||
<module name="InterfaceIsType" />
|
||||
<module name="MutableException" />
|
||||
<module name="OneTopLevelClass" />
|
||||
|
||||
<!-- Coding -->
|
||||
<module name="ArrayTrailingComma" />
|
||||
<module name="EqualsHashCode" />
|
||||
<!-- FallThrough does not handle unreachable code well -->
|
||||
<module name="IllegalInstantiation" />
|
||||
<module name="IllegalThrows" />
|
||||
<module name="ModifiedControlVariable" />
|
||||
<module name="NoClone" />
|
||||
<module name="NoFinalizer" />
|
||||
<module name="OneStatementPerLine" />
|
||||
<module name="PackageDeclaration" />
|
||||
<module name="SimplifyBooleanExpression" />
|
||||
<module name="SimplifyBooleanReturn" />
|
||||
<module name="StringLiteralEquality" />
|
||||
<module name="UnnecessaryParentheses" />
|
||||
<module name="UnnecessarySemicolonAfterTypeMemberDeclaration" />
|
||||
<module name="UnnecessarySemicolonInTryWithResources" />
|
||||
<module name="UnnecessarySemicolonInEnumeration" />
|
||||
|
||||
<!-- Imports -->
|
||||
<module name="CustomImportOrder" />
|
||||
<module name="IllegalImport" />
|
||||
<module name="RedundantImport" />
|
||||
<module name="UnusedImports" />
|
||||
|
||||
<!-- Javadoc -->
|
||||
<!-- TODO: Missing* checks for the dan200.computercraft.api package? -->
|
||||
<module name="AtclauseOrder" />
|
||||
<module name="InvalidJavadocPosition" />
|
||||
<module name="JavadocBlockTagLocation" />
|
||||
<module name="JavadocMethod"/>
|
||||
<module name="JavadocType"/>
|
||||
<module name="JavadocStyle" />
|
||||
<module name="NonEmptyAtclauseDescription" />
|
||||
<module name="SingleLineJavadoc" />
|
||||
<module name="SummaryJavadocCheck"/>
|
||||
|
||||
<!-- Misc -->
|
||||
<module name="ArrayTypeStyle" />
|
||||
<module name="CommentsIndentation" />
|
||||
<module name="Indentation" />
|
||||
<module name="OuterTypeFilename" />
|
||||
|
||||
<!-- Modifiers -->
|
||||
<module name="ModifierOrder" />
|
||||
<module name="RedundantModifier" />
|
||||
|
||||
<!-- Naming -->
|
||||
<module name="ClassTypeParameterName" />
|
||||
<module name="InterfaceTypeParameterName" />
|
||||
<module name="LambdaParameterName" />
|
||||
<module name="LocalFinalVariableName" />
|
||||
<module name="LocalVariableName" />
|
||||
<module name="MemberName" />
|
||||
<module name="MethodName" />
|
||||
<module name="MethodTypeParameterName" />
|
||||
<module name="PackageName">
|
||||
<property name="format" value="^dan200\.computercraft(\.[a-z][a-z0-9]*)*" />
|
||||
</module>
|
||||
<module name="ParameterName" />
|
||||
<module name="StaticVariableName">
|
||||
<property name="format" value="^[a-z][a-zA-Z0-9]*|CAPABILITY(_[A-Z_]+)?$" />
|
||||
<property name="applyToPrivate" value="false" />
|
||||
</module>
|
||||
<module name="StaticVariableName">
|
||||
<property name="format" value="^(s_)?[a-z][a-zA-Z0-9]*|CAPABILITY(_[A-Z_]+)?$" />
|
||||
<property name="applyToPrivate" value="true" />
|
||||
</module>
|
||||
<module name="TypeName" />
|
||||
|
||||
<!-- Whitespace -->
|
||||
<module name="EmptyForInitializerPad"/>
|
||||
<module name="EmptyForIteratorPad">
|
||||
<property name="option" value="space"/>
|
||||
</module>
|
||||
<module name="GenericWhitespace" />
|
||||
<module name="MethodParamPad" />
|
||||
<module name="NoLineWrap" />
|
||||
<module name="NoWhitespaceAfter">
|
||||
<property name="tokens" value="AT,INC,DEC,UNARY_MINUS,UNARY_PLUS,BNOT,LNOT,DOT,ARRAY_DECLARATOR,INDEX_OP" />
|
||||
</module>
|
||||
<module name="NoWhitespaceBefore" />
|
||||
<!-- TODO: Decide on an OperatorWrap style. -->
|
||||
<module name="ParenPad">
|
||||
<property name="option" value="space" />
|
||||
<property name="tokens" value="ANNOTATION,ANNOTATION_FIELD_DEF,CTOR_CALL,CTOR_DEF,ENUM_CONSTANT_DEF,LITERAL_CATCH,LITERAL_DO,LITERAL_FOR,LITERAL_IF,LITERAL_NEW,LITERAL_SWITCH,LITERAL_SYNCHRONIZED,LITERAL_WHILE,METHOD_CALL,METHOD_DEF,RESOURCE_SPECIFICATION,SUPER_CTOR_CALL,LAMBDA" />
|
||||
</module>
|
||||
<module name="ParenPad">
|
||||
<property name="option" value="nospace" />
|
||||
<property name="tokens" value="DOT,EXPR,QUESTION" />
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<property name="option" value="eol" />
|
||||
<property name="tokens" value="COMMA,SEMI,ELLIPSIS,ARRAY_DECLARATOR,RBRACK,METHOD_REF" />
|
||||
</module>
|
||||
<module name="SeparatorWrap">
|
||||
<property name="option" value="nl" />
|
||||
<property name="tokens" value="DOT,AT" />
|
||||
</module>
|
||||
<module name="SingleSpaceSeparator" />
|
||||
<module name="TypecastParenPad" />
|
||||
<module name="WhitespaceAfter">
|
||||
<property name="tokens" value="COMMA" />
|
||||
</module>
|
||||
<module name="WhitespaceAround">
|
||||
<property name="allowEmptyConstructors" value="true" />
|
||||
<property name="ignoreEnhancedForColon" value="false" />
|
||||
<property name="tokens" value="ASSIGN,BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAMBDA,LAND,LCURLY,LE,LITERAL_RETURN,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND" />
|
||||
</module>
|
||||
</module>
|
||||
|
||||
<module name="FileTabCharacter" />
|
||||
<module name="NewlineAtEndOfFile" />
|
||||
<module name="RegexpSingleline">
|
||||
<property name="format" value="\s+$"/>
|
||||
<property name="message" value="Trailing whitespace"/>
|
||||
</module>
|
||||
</module>
|
12
config/checkstyle/suppressions.xml
Normal file
12
config/checkstyle/suppressions.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE suppressions PUBLIC
|
||||
"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
|
||||
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
|
||||
<suppressions>
|
||||
<!-- All the config options and method fields. -->
|
||||
<suppress checks="StaticVariableName" files=".*[\\/]ComputerCraft.java" />
|
||||
<suppress checks="StaticVariableName" files=".*[\\/]ComputerCraftAPI.java" />
|
||||
|
||||
<!-- The commands API is documented in Lua. -->
|
||||
<suppress checks="SummaryJavadocCheck" files=".*[\\/]CommandAPI.java" />
|
||||
</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>
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
||||
</component>
|
@@ -58,4 +58,4 @@
|
||||
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||
</indentOptions>
|
||||
</codeStyleSettings>
|
||||
</code_scheme>
|
||||
</code_scheme>
|
3
config/license/api.txt
Normal file
3
config/license/api.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
This file is part of the public ComputerCraft API - http://www.computercraft.info
|
||||
Copyright Daniel Ratcliffe, 2011-${year}. This API may be redistributed unmodified and in full only.
|
||||
For help using the API, and posting your mods, visit the forums at computercraft.info.
|
3
config/license/main.txt
Normal file
3
config/license/main.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
This file is part of ComputerCraft - http://www.computercraft.info
|
||||
Copyright Daniel Ratcliffe, 2011-${year}. Do not distribute without permission.
|
||||
Send enquiries to dratcliffe@gmail.com
|
55
config/pre-commit/config.yml
Normal file
55
config/pre-commit/config.yml
Normal file
@@ -0,0 +1,55 @@
|
||||
# See https://pre-commit.com for more information
|
||||
# See https://pre-commit.com/hooks.html for more hooks
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v3.2.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
- id: end-of-file-fixer
|
||||
- id: check-merge-conflict
|
||||
|
||||
# Quick syntax checkers
|
||||
- id: check-xml
|
||||
- id: check-yaml
|
||||
- id: check-toml
|
||||
- id: check-json
|
||||
exclude: "tsconfig\\.json$"
|
||||
|
||||
- repo: https://github.com/editorconfig-checker/editorconfig-checker.python
|
||||
rev: 2.3.5
|
||||
hooks:
|
||||
- id: editorconfig-checker
|
||||
args: ['-disable-indentation']
|
||||
exclude: "^(.*\\.(bat)|LICENSE)$"
|
||||
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: checkstyle
|
||||
name: Check Java codestyle
|
||||
files: ".*\\.java$"
|
||||
language: system
|
||||
entry: ./gradlew checkstyleMain checkstyleTest
|
||||
pass_filenames: false
|
||||
require_serial: true
|
||||
- id: license
|
||||
name: Check Java license headers
|
||||
files: ".*\\.java$"
|
||||
language: system
|
||||
entry: ./gradlew licenseFormat
|
||||
pass_filenames: false
|
||||
require_serial: true
|
||||
- id: illuaminate
|
||||
name: Check Lua code
|
||||
files: ".*\\.(lua|java|md)"
|
||||
language: script
|
||||
entry: config/pre-commit/illuaminate-lint.sh
|
||||
pass_filenames: false
|
||||
require_serial: true
|
||||
|
||||
exclude: |
|
||||
(?x)^(
|
||||
src/generated|
|
||||
src/test/resources/test-rom/data/json-parsing/|
|
||||
src/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 |
55
doc/index.md
Normal file
55
doc/index.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# 
|
||||
CC: Tweaked is a mod for Minecraft which adds programmable computers, turtles and more to the game. A fork of the
|
||||
much-beloved [ComputerCraft], it continues its legacy with better performance, stability, and a wealth of new features.
|
||||
|
||||
CC: Tweaked can be installed from [CurseForge] or [Modrinth]. It requires the [Minecraft Forge][forge] mod loader, but
|
||||
[versions are available for Fabric][ccrestitched].
|
||||
|
||||
## Features
|
||||
Controlled using the [Lua programming language][lua], CC: Tweaked's computers provides all the tools you need to start
|
||||
writing code and automating your Minecraft world.
|
||||
|
||||
{.big-image}
|
||||
|
||||
While computers are incredibly powerful, they're rather limited by their inability to move about. *Turtles* are the
|
||||
solution here. They can move about the world, placing and breaking blocks, swinging a sword to protect you from zombies,
|
||||
or whatever else you program them to!
|
||||
|
||||
{.big-image}
|
||||
|
||||
Not all problems can be solved with a pickaxe though, and so CC: Tweaked also provides a bunch of additional peripherals
|
||||
for your computers. You can play a tune with speakers, display text or images on a monitor, connect all your
|
||||
computers together with modems, and much more.
|
||||
|
||||
Computers can now also interact with inventories such as chests, allowing you to build complex inventory and item
|
||||
management systems.
|
||||
|
||||
{.big-image}
|
||||
|
||||
## Getting Started
|
||||
While ComputerCraft is lovely for both experienced programmers and for people who have never coded before, it can be a
|
||||
little daunting getting started. Thankfully, there's several fantastic tutorials out there:
|
||||
|
||||
- [Direwolf20's ComputerCraft tutorials](https://www.youtube.com/watch?v=wrUHUhfCY5A "ComputerCraft Tutorial Episode 1 - HELP! and Hello World")
|
||||
- [Sethbling's ComputerCraft series](https://www.youtube.com/watch?v=DSsx4VSe-Uk "Programming Tutorial with Minecraft Turtles -- Ep. 1: Intro to Turtles and If-Then-Else_End")
|
||||
- [Lyqyd's Computer Basics 1](http://www.computercraft.info/forums2/index.php?/topic/15033-computer-basics-i/ "Computer Basics I")
|
||||
|
||||
Once you're a little more familiar with the mod, the sidebar and links below provide more detailed documentation on the
|
||||
various APIs and peripherals provided by the mod.
|
||||
|
||||
If you get stuck, do pop in to the [Minecraft Computer Mod Discord guild][discord] or ComputerCraft's
|
||||
[IRC channel][irc].
|
||||
|
||||
## Get Involved
|
||||
CC: Tweaked lives on [GitHub]. If you've got any ideas, feedback or bugs please do [create an issue][bug].
|
||||
|
||||
[github]: https://github.com/SquidDev-CC/CC-Tweaked/ "CC: Tweaked on GitHub"
|
||||
[bug]: https://github.com/SquidDev-CC/CC-Tweaked/issues/new/choose
|
||||
[computercraft]: https://github.com/dan200/ComputerCraft "ComputerCraft on GitHub"
|
||||
[curseforge]: https://minecraft.curseforge.com/projects/cc-tweaked "Download CC: Tweaked from CurseForge"
|
||||
[modrinth]: https://modrinth.com/mod/gu7yAYhd "Download CC: Tweaked from Modrinth"
|
||||
[forge]: https://files.minecraftforge.net/ "Download Minecraft Forge."
|
||||
[ccrestitched]: https://www.curseforge.com/minecraft/mc-mods/cc-restitched "Download CC: Restitched from CurseForge"
|
||||
[lua]: https://www.lua.org/ "Lua's main website"
|
||||
[discord]: https://discord.computercraft.cc "The Minecraft Computer Mods Discord"
|
||||
[irc]: http://webchat.esper.net/?channels=computercraft "IRC webchat on EsperNet"
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
34
doc/stub/fs.lua
Normal file
34
doc/stub/fs.lua
Normal file
@@ -0,0 +1,34 @@
|
||||
--- The FS API allows you to manipulate files and the filesystem.
|
||||
--
|
||||
-- @module fs
|
||||
|
||||
--- Returns true if a path is mounted to the parent filesystem.
|
||||
--
|
||||
-- The root filesystem "/" is considered a mount, along with disk folders and
|
||||
-- the rom folder. Other programs (such as network shares) can exstend this to
|
||||
-- make other mount types by correctly assigning their return value for getDrive.
|
||||
--
|
||||
-- @tparam string path The path to check.
|
||||
-- @treturn boolean If the path is mounted, rather than a normal file/folder.
|
||||
-- @throws If the path does not exist.
|
||||
-- @see getDrive
|
||||
function isDriveRoot(path) end
|
||||
|
||||
--[[- Provides completion for a file or directory name, suitable for use with
|
||||
@{_G.read}.
|
||||
|
||||
When a directory is a possible candidate for completion, two entries are
|
||||
included - one with a trailing slash (indicating that entries within this
|
||||
directory exist) and one without it (meaning this entry is an immediate
|
||||
completion candidate). `include_dirs` can be set to @{false} to only include
|
||||
those with a trailing slash.
|
||||
|
||||
@tparam string path The path to complete.
|
||||
@tparam string location The location where paths are resolved from.
|
||||
@tparam[opt] boolean include_files When @{false}, only directories will be
|
||||
included in the returned list.
|
||||
@tparam[opt] boolean include_dirs When @{false}, "raw" directories will not be
|
||||
included in the returned list.
|
||||
@treturn { string... } A list of possible completion candidates.
|
||||
]]
|
||||
function complete(path, location, include_files, include_dirs) end
|
130
doc/stub/global.lua
Normal file
130
doc/stub/global.lua
Normal file
@@ -0,0 +1,130 @@
|
||||
--[[-
|
||||
Functions in the global environment, defined in `bios.lua`. This does not
|
||||
include standard Lua functions.
|
||||
|
||||
@module _G
|
||||
]]
|
||||
|
||||
--[[- Pauses execution for the specified number of seconds.
|
||||
|
||||
As it waits for a fixed amount of world ticks, `time` will automatically be
|
||||
rounded up to the nearest multiple of 0.05 seconds. If you are using coroutines
|
||||
or the @{parallel|parallel API}, it will only pause execution of the current
|
||||
thread, not the whole program.
|
||||
|
||||
**Note** Because sleep internally uses timers, it is a function that yields.
|
||||
This means that you can use it to prevent "Too long without yielding" errors,
|
||||
however, as the minimum sleep time is 0.05 seconds, it will slow your program
|
||||
down.
|
||||
|
||||
**Warning** Internally, this function queues and waits for a timer event (using
|
||||
@{os.startTimer}), however it does not listen for any other events. This means
|
||||
that any event that occurs while sleeping will be entirely discarded. If you
|
||||
need to receive events while sleeping, consider using @{os.startTimer|timers},
|
||||
or the @{parallel|parallel API}.
|
||||
|
||||
@tparam number time The number of seconds to sleep for, rounded up to the
|
||||
nearest multiple of 0.05.
|
||||
|
||||
@see os.startTimer
|
||||
@usage Sleep for three seconds.
|
||||
|
||||
print("Sleeping for three seconds")
|
||||
sleep(3)
|
||||
print("Done!")
|
||||
]]
|
||||
function sleep(time) end
|
||||
|
||||
--- Writes a line of text to the screen without a newline at the end, wrapping
|
||||
-- text if necessary.
|
||||
--
|
||||
-- @tparam string text The text to write to the string
|
||||
-- @treturn number The number of lines written
|
||||
-- @see print A wrapper around write that adds a newline and accepts multiple arguments
|
||||
-- @usage write("Hello, world")
|
||||
function write(text) end
|
||||
|
||||
--- Prints the specified values to the screen separated by spaces, wrapping if
|
||||
-- necessary. After printing, the cursor is moved to the next line.
|
||||
--
|
||||
-- @param ... The values to print on the screen
|
||||
-- @treturn number The number of lines written
|
||||
-- @usage print("Hello, world!")
|
||||
function print(...) end
|
||||
|
||||
--- Prints the specified values to the screen in red, separated by spaces,
|
||||
-- wrapping if necessary. After printing, the cursor is moved to the next line.
|
||||
--
|
||||
-- @param ... The values to print on the screen
|
||||
-- @usage printError("Something went wrong!")
|
||||
function printError(...) end
|
||||
|
||||
--[[- Reads user input from the terminal, automatically handling arrow keys,
|
||||
pasting, character replacement, history scrollback, auto-completion, and
|
||||
default values.
|
||||
|
||||
@tparam[opt] string replaceChar A character to replace each typed character with.
|
||||
This can be used for hiding passwords, for example.
|
||||
@tparam[opt] table history A table holding history items that can be scrolled
|
||||
back to with the up/down arrow keys. The oldest item is at index 1, while the
|
||||
newest item is at the highest index.
|
||||
@tparam[opt] function(partial: string):({ string... }|nil) completeFn A function
|
||||
to be used for completion. This function should take the partial text typed so
|
||||
far, and returns a list of possible completion options.
|
||||
@tparam[opt] string default Default text which should already be entered into
|
||||
the prompt.
|
||||
|
||||
@treturn string The text typed in.
|
||||
|
||||
@see cc.completion For functions to help with completion.
|
||||
@usage Read a string and echo it back to the user
|
||||
|
||||
write("> ")
|
||||
local msg = read()
|
||||
print(msg)
|
||||
|
||||
@usage Prompt a user for a password.
|
||||
|
||||
while true do
|
||||
write("Password> ")
|
||||
local pwd = read("*")
|
||||
if pwd == "let me in" then break end
|
||||
print("Incorrect password, try again.")
|
||||
end
|
||||
print("Logged in!")
|
||||
|
||||
@usage A complete example with completion, history and a default value.
|
||||
|
||||
local completion = require "cc.completion"
|
||||
local history = { "potato", "orange", "apple" }
|
||||
local choices = { "apple", "orange", "banana", "strawberry" }
|
||||
write("> ")
|
||||
local msg = read(nil, history, function(text) return completion.choice(text, choices) end, "app")
|
||||
print(msg)
|
||||
|
||||
@changed 1.74 Added `completeFn` parameter.
|
||||
@changed 1.80pr1 Added `default` parameter.
|
||||
]]
|
||||
function read(replaceChar, history, completeFn, default) end
|
||||
|
||||
--- The ComputerCraft and Minecraft version of the current computer environment.
|
||||
--
|
||||
-- For example, `ComputerCraft 1.93.0 (Minecraft 1.15.2)`.
|
||||
-- @usage _HOST
|
||||
-- @since 1.76
|
||||
_HOST = _HOST
|
||||
|
||||
--[[- The default computer settings as defined in the ComputerCraft
|
||||
configuration.
|
||||
|
||||
This is a comma-separated list of settings pairs defined by the mod
|
||||
configuration or server owner. By default, it is empty.
|
||||
|
||||
An example value to disable autocompletion:
|
||||
|
||||
shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false
|
||||
|
||||
@usage _CC_DEFAULT_SETTINGS
|
||||
@since 1.77
|
||||
]]
|
||||
_CC_DEFAULT_SETTINGS = _CC_DEFAULT_SETTINGS
|
157
doc/stub/http.lua
Normal file
157
doc/stub/http.lua
Normal file
@@ -0,0 +1,157 @@
|
||||
--- The http library allows communicating with web servers, sending and
|
||||
-- receiving data from them.
|
||||
--
|
||||
-- @module http
|
||||
|
||||
--- Asynchronously make a HTTP request to the given url.
|
||||
--
|
||||
-- This returns immediately, a [`http_success`](#http-success-event) or
|
||||
-- [`http_failure`](#http-failure-event) will be queued once the request has
|
||||
-- completed.
|
||||
--
|
||||
-- @tparam string url The url to request
|
||||
-- @tparam[opt] string body An optional string containing the body of the
|
||||
-- request. If specified, a `POST` request will be made instead.
|
||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
|
||||
-- of this request.
|
||||
-- @tparam[opt] boolean binary Whether to make a binary HTTP request. If true,
|
||||
-- the body will not be UTF-8 encoded, and the received response will not be
|
||||
-- decoded.
|
||||
--
|
||||
-- @tparam[2] {
|
||||
-- url = string, body? = string, headers? = { [string] = string },
|
||||
-- binary? = boolean, method? = string, redirect? = boolean,
|
||||
-- } request Options for the request.
|
||||
--
|
||||
-- This table form is an expanded version of the previous syntax. All arguments
|
||||
-- from above are passed in as fields instead (for instance,
|
||||
-- `http.request("https://example.com")` becomes `http.request { url =
|
||||
-- "https://example.com" }`).
|
||||
--
|
||||
-- This table also accepts several additional options:
|
||||
--
|
||||
-- - `method`: Which HTTP method to use, for instance `"PATCH"` or `"DELETE"`.
|
||||
-- - `redirect`: Whether to follow HTTP redirects. Defaults to true.
|
||||
--
|
||||
-- @see http.get For a synchronous way to make GET requests.
|
||||
-- @see http.post For a synchronous way to make POST requests.
|
||||
function request(...) end
|
||||
|
||||
--- Make a HTTP GET request to the given url.
|
||||
--
|
||||
-- @tparam string url The url to request
|
||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
|
||||
-- of this request.
|
||||
-- @tparam[opt] boolean binary Whether to make a binary HTTP request. If true,
|
||||
-- the body will not be UTF-8 encoded, and the received response will not be
|
||||
-- decoded.
|
||||
--
|
||||
-- @tparam[2] {
|
||||
-- url = string, headers? = { [string] = string },
|
||||
-- binary? = boolean, method? = string, redirect? = boolean,
|
||||
-- } request Options for the request. See @{http.request} for details on how
|
||||
-- these options behave.
|
||||
--
|
||||
-- @treturn Response The resulting http response, which can be read from.
|
||||
-- @treturn[2] nil When the http request failed, such as in the event of a 404
|
||||
-- error or connection timeout.
|
||||
-- @treturn string A message detailing why the request failed.
|
||||
-- @treturn Response|nil The failing http response, if available.
|
||||
--
|
||||
-- @usage Make a request to [example.tweaked.cc](https://example.tweaked.cc),
|
||||
-- and print the returned page.
|
||||
-- ```lua
|
||||
-- local request = http.get("https://example.tweaked.cc")
|
||||
-- print(request.readAll())
|
||||
-- -- => HTTP is working!
|
||||
-- request.close()
|
||||
-- ```
|
||||
function get(...) end
|
||||
|
||||
--- Make a HTTP POST request to the given url.
|
||||
--
|
||||
-- @tparam string url The url to request
|
||||
-- @tparam string body The body of the POST request.
|
||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
|
||||
-- of this request.
|
||||
-- @tparam[opt] boolean binary Whether to make a binary HTTP request. If true,
|
||||
-- the body will not be UTF-8 encoded, and the received response will not be
|
||||
-- decoded.
|
||||
--
|
||||
-- @tparam[2] {
|
||||
-- url = string, body? = string, headers? = { [string] = string },
|
||||
-- binary? = boolean, method? = string, redirect? = boolean,
|
||||
-- } request Options for the request. See @{http.request} for details on how
|
||||
-- these options behave.
|
||||
--
|
||||
-- @treturn Response The resulting http response, which can be read from.
|
||||
-- @treturn[2] nil When the http request failed, such as in the event of a 404
|
||||
-- error or connection timeout.
|
||||
-- @treturn string A message detailing why the request failed.
|
||||
-- @treturn Response|nil The failing http response, if available.
|
||||
function post(...) end
|
||||
|
||||
--- Asynchronously determine whether a URL can be requested.
|
||||
--
|
||||
-- If this returns `true`, one should also listen for [`http_check`
|
||||
-- events](#http-check-event) which will container further information about
|
||||
-- whether the URL is allowed or not.
|
||||
--
|
||||
-- @tparam string url The URL to check.
|
||||
-- @treturn true When this url is not invalid. This does not imply that it is
|
||||
-- allowed - see the comment above.
|
||||
-- @treturn[2] false When this url is invalid.
|
||||
-- @treturn string A reason why this URL is not valid (for instance, if it is
|
||||
-- malformed, or blocked).
|
||||
--
|
||||
-- @see http.checkURL For a synchronous version.
|
||||
function checkURLAsync(url) end
|
||||
|
||||
--- Determine whether a URL can be requested.
|
||||
--
|
||||
-- If this returns `true`, one should also listen for [`http_check`
|
||||
-- events](#http-check-event) which will container further information about
|
||||
-- whether the URL is allowed or not.
|
||||
--
|
||||
-- @tparam string url The URL to check.
|
||||
-- @treturn true When this url is valid and can be requested via @{http.request}.
|
||||
-- @treturn[2] false When this url is invalid.
|
||||
-- @treturn string A reason why this URL is not valid (for instance, if it is
|
||||
-- malformed, or blocked).
|
||||
--
|
||||
-- @see http.checkURLAsync For an asynchronous version.
|
||||
--
|
||||
-- @usage
|
||||
-- ```lua
|
||||
-- print(http.checkURL("https://example.tweaked.cc/"))
|
||||
-- -- => true
|
||||
-- print(http.checkURL("http://localhost/"))
|
||||
-- -- => false Domain not permitted
|
||||
-- print(http.checkURL("not a url"))
|
||||
-- -- => false URL malformed
|
||||
-- ```
|
||||
function checkURL(url) end
|
||||
|
||||
--- Open a websocket.
|
||||
--
|
||||
-- @tparam string url The websocket url to connect to. This should have the
|
||||
-- `ws://` or `wss://` protocol.
|
||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
|
||||
-- of the initial websocket connection.
|
||||
--
|
||||
-- @treturn Websocket The websocket connection.
|
||||
-- @treturn[2] false If the websocket connection failed.
|
||||
-- @treturn string An error message describing why the connection failed.
|
||||
function websocket(url, headers) end
|
||||
|
||||
--- Asynchronously open a websocket.
|
||||
--
|
||||
-- This returns immediately, a [`websocket_success`](#websocket-success-event)
|
||||
-- or [`websocket_failure`](#websocket-failure-event) will be queued once the
|
||||
-- request has completed.
|
||||
--
|
||||
-- @tparam string url The websocket url to connect to. This should have the
|
||||
-- `ws://` or `wss://` protocol.
|
||||
-- @tparam[opt] { [string] = string } headers Additional headers to send as part
|
||||
-- of the initial websocket connection.
|
||||
function websocketAsync(url, headers) end
|
125
doc/stub/os.lua
Normal file
125
doc/stub/os.lua
Normal file
@@ -0,0 +1,125 @@
|
||||
-- Defined in bios.lua
|
||||
|
||||
--[[- Loads the given API into the global environment.
|
||||
|
||||
This function loads and executes the file at the given path, and all global
|
||||
variables and functions exported by it will by available through the use of
|
||||
`myAPI.<function name>`, where `myAPI` is the base name of the API file.
|
||||
|
||||
@tparam string path The path of the API to load.
|
||||
@treturn boolean Whether or not the API was successfully loaded.
|
||||
|
||||
@deprecated When possible it's best to avoid using this function. It pollutes
|
||||
the global table and can mask errors.
|
||||
|
||||
@{require} should be used to load libraries instead.
|
||||
]]
|
||||
function loadAPI(path) end
|
||||
|
||||
--- Unloads an API which was loaded by @{os.loadAPI}.
|
||||
--
|
||||
-- This effectively removes the specified table from `_G`.
|
||||
--
|
||||
-- @tparam string name The name of the API to unload.
|
||||
-- @deprecated See @{os.loadAPI} for why.
|
||||
function unloadAPI(name) end
|
||||
|
||||
--[[- Pause execution of the current thread and waits for any events matching
|
||||
`filter`.
|
||||
|
||||
This function @{coroutine.yield|yields} the current process and waits for it
|
||||
to be resumed with a vararg list where the first element matches `filter`.
|
||||
If no `filter` is supplied, this will match all events.
|
||||
|
||||
Unlike @{os.pullEventRaw}, it will stop the application upon a "terminate"
|
||||
event, printing the error "Terminated".
|
||||
|
||||
@tparam[opt] string filter Event to filter for.
|
||||
@treturn string event The name of the event that fired.
|
||||
@treturn any param... Optional additional parameters of the event.
|
||||
@usage Listen for `mouse_click` events.
|
||||
|
||||
while true do
|
||||
local event, button, x, y = os.pullEvent("mouse_click")
|
||||
print("Button", button, "was clicked at", x, ",", y)
|
||||
end
|
||||
|
||||
@usage Listen for multiple events.
|
||||
|
||||
while true do
|
||||
local eventData = {os.pullEvent()}
|
||||
local event = eventData[1]
|
||||
|
||||
if event == "mouse_click" then
|
||||
print("Button", eventData[2], "was clicked at", eventData[3], ",", eventData[4])
|
||||
elseif event == "key" then
|
||||
print("Key code", eventData[2], "was pressed")
|
||||
end
|
||||
end
|
||||
|
||||
@see os.pullEventRaw To pull the terminate event.
|
||||
]]
|
||||
function pullEvent(filter) end
|
||||
|
||||
--[[- Pause execution of the current thread and waits for events, including the
|
||||
`terminate` event.
|
||||
|
||||
This behaves almost the same as @{os.pullEvent}, except it allows you to handle
|
||||
the `terminate` event yourself - the program will not stop execution when
|
||||
<kbd>Ctrl+T</kbd> is pressed.
|
||||
|
||||
@tparam[opt] string filter Event to filter for.
|
||||
@treturn string event The name of the event that fired.
|
||||
@treturn any param... Optional additional parameters of the event.
|
||||
@usage Listen for `terminate` events.
|
||||
|
||||
while true do
|
||||
local event = os.pullEventRaw()
|
||||
if event == "terminate" then
|
||||
print("Caught terminate event!")
|
||||
end
|
||||
end
|
||||
|
||||
@see os.pullEvent To pull events normally.
|
||||
]]
|
||||
function pullEventRaw(filter) end
|
||||
|
||||
--- Pauses execution for the specified number of seconds, alias of @{_G.sleep}.
|
||||
--
|
||||
-- @tparam number time The number of seconds to sleep for, rounded up to the
|
||||
-- nearest multiple of 0.05.
|
||||
function sleep(time) end
|
||||
|
||||
--- Get the current CraftOS version (for example, `CraftOS 1.8`).
|
||||
--
|
||||
-- This is defined by `bios.lua`. For the current version of CC:Tweaked, this
|
||||
-- should return `CraftOS 1.8`.
|
||||
--
|
||||
-- @treturn string The current CraftOS version.
|
||||
-- @usage os.version()
|
||||
function version() end
|
||||
|
||||
--[[- Run the program at the given path with the specified environment and
|
||||
arguments.
|
||||
|
||||
This function does not resolve program names like the shell does. This means
|
||||
that, for example, `os.run("edit")` will not work. As well as this, it does not
|
||||
provide access to the @{shell} API in the environment. For this behaviour, use
|
||||
@{shell.run} instead.
|
||||
|
||||
If the program cannot be found, or failed to run, it will print the error and
|
||||
return `false`. If you want to handle this more gracefully, use an alternative
|
||||
such as @{loadfile}.
|
||||
|
||||
@tparam table env The environment to run the program with.
|
||||
@tparam string path The exact path of the program to run.
|
||||
@param ... The arguments to pass to the program.
|
||||
@treturn boolean Whether or not the program ran successfully.
|
||||
@usage Run the default shell from within your program:
|
||||
|
||||
os.run({}, "/rom/programs/shell.lua")
|
||||
|
||||
@see shell.run
|
||||
@see loadfile
|
||||
]]
|
||||
function run(env, path, ...) end
|
13
doc/stub/turtle.lua
Normal file
13
doc/stub/turtle.lua
Normal file
@@ -0,0 +1,13 @@
|
||||
--[[- Craft a recipe based on the turtle's inventory.
|
||||
|
||||
The turtle's inventory should set up like a crafting grid. For instance, to
|
||||
craft sticks, slots 1 and 5 should contain 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
|
@@ -1,7 +1,8 @@
|
||||
# Mod properties
|
||||
mod_version=1.83.1
|
||||
mod_version=1.98.2
|
||||
|
||||
# Minecraft properties
|
||||
mc_version=1.13.2
|
||||
forge_version=25.0.219
|
||||
mappings_version=20190530-1.13.2
|
||||
# Minecraft properties (update mods.toml when changing)
|
||||
mc_version=1.16.5
|
||||
mapping_version=2021.08.08
|
||||
forge_version=36.1.0
|
||||
# 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
|
||||
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
|
||||
zipStorePath=wrapper/dists
|
||||
|
53
gradlew
vendored
53
gradlew
vendored
@@ -1,5 +1,21 @@
|
||||
#!/usr/bin/env sh
|
||||
|
||||
#
|
||||
# Copyright 2015 the original author or authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
##
|
||||
## Gradle start up script for UN*X
|
||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
|
||||
APP_BASE_NAME=`basename "$0"`
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS=""
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
@@ -66,6 +82,7 @@ esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
@@ -109,10 +126,11 @@ if $darwin; then
|
||||
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||
fi
|
||||
|
||||
# For Cygwin, switch paths to Windows format before running java
|
||||
if $cygwin ; then
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
||||
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||
|
||||
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||
|
||||
# We build the pattern for arguments to be converted via cygpath
|
||||
@@ -138,19 +156,19 @@ if $cygwin ; then
|
||||
else
|
||||
eval `echo args$i`="\"$arg\""
|
||||
fi
|
||||
i=$((i+1))
|
||||
i=`expr $i + 1`
|
||||
done
|
||||
case $i in
|
||||
(0) set -- ;;
|
||||
(1) set -- "$args0" ;;
|
||||
(2) set -- "$args0" "$args1" ;;
|
||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
0) set -- ;;
|
||||
1) set -- "$args0" ;;
|
||||
2) set -- "$args0" "$args1" ;;
|
||||
3) set -- "$args0" "$args1" "$args2" ;;
|
||||
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@@ -159,14 +177,9 @@ save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
APP_ARGS=$(save "$@")
|
||||
APP_ARGS=`save "$@"`
|
||||
|
||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
||||
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
|
||||
|
||||
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
|
||||
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
|
||||
cd "$(dirname "$0")"
|
||||
fi
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
|
43
gradlew.bat
vendored
43
gradlew.bat
vendored
@@ -1,3 +1,19 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%" == "" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=.
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS=
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if "%ERRORLEVEL%" == "0" goto init
|
||||
if "%ERRORLEVEL%" == "0" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
@@ -35,7 +54,7 @@ goto fail
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto init
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
@@ -45,28 +64,14 @@ echo location of your Java installation.
|
||||
|
||||
goto fail
|
||||
|
||||
:init
|
||||
@rem Get command-line arguments, handling Windows variants
|
||||
|
||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||
|
||||
:win9xME_args
|
||||
@rem Slurp the command line arguments.
|
||||
set CMD_LINE_ARGS=
|
||||
set _SKIP=2
|
||||
|
||||
:win9xME_args_slurp
|
||||
if "x%~1" == "x" goto execute
|
||||
|
||||
set CMD_LINE_ARGS=%*
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
|
112
illuaminate.sexp
Normal file
112
illuaminate.sexp
Normal file
@@ -0,0 +1,112 @@
|
||||
; -*- mode: Lisp;-*-
|
||||
|
||||
(sources
|
||||
/doc/stub/
|
||||
/doc/events/
|
||||
/build/docs/luaJavadoc/
|
||||
/src/main/resources/*/computercraft/lua/bios.lua
|
||||
/src/main/resources/*/computercraft/lua/rom/
|
||||
/src/test/resources/test-rom
|
||||
/src/web/mount)
|
||||
|
||||
|
||||
(doc
|
||||
(destination build/docs/lua)
|
||||
(index doc/index.md)
|
||||
|
||||
(site
|
||||
(title "CC: Tweaked")
|
||||
(logo src/main/resources/pack.png)
|
||||
(url https://tweaked.cc/)
|
||||
(source-link https://github.com/SquidDev-CC/CC-Tweaked/blob/${commit}/${path}#L${line})
|
||||
|
||||
(styles src/web/styles.css)
|
||||
(scripts build/rollup/index.js)
|
||||
(head doc/head.html))
|
||||
|
||||
(module-kinds
|
||||
(peripheral Peripherals)
|
||||
(generic_peripheral "Generic Peripherals")
|
||||
(event Events))
|
||||
|
||||
(library-path
|
||||
/doc/stub/
|
||||
/build/docs/luaJavadoc/
|
||||
|
||||
/src/main/resources/*/computercraft/lua/rom/apis/
|
||||
/src/main/resources/*/computercraft/lua/rom/apis/command/
|
||||
/src/main/resources/*/computercraft/lua/rom/apis/turtle/
|
||||
|
||||
/src/main/resources/*/computercraft/lua/rom/modules/main/
|
||||
/src/main/resources/*/computercraft/lua/rom/modules/command/
|
||||
/src/main/resources/*/computercraft/lua/rom/modules/turtle/))
|
||||
|
||||
(at /
|
||||
(linters
|
||||
syntax:string-index
|
||||
|
||||
;; It'd be nice to avoid this, but right now there's a lot of instances of
|
||||
;; it.
|
||||
-var:set-loop
|
||||
|
||||
;; It's useful to name arguments for documentation, so we allow this. It'd
|
||||
;; be good to find a compromise in the future, but this works for now.
|
||||
-var:unused-arg)
|
||||
|
||||
(lint
|
||||
(bracket-spaces
|
||||
(call no-space)
|
||||
(function-args no-space)
|
||||
(parens no-space)
|
||||
(table space)
|
||||
(index no-space))
|
||||
|
||||
;; colours imports from colors, and we don't handle that right now.
|
||||
;; keys is entirely dynamic, so we skip it.
|
||||
(dynamic-modules colours keys _G)
|
||||
|
||||
(globals
|
||||
:max
|
||||
_CC_DEFAULT_SETTINGS
|
||||
_CC_DISABLE_LUA51_FEATURES
|
||||
;; Ideally we'd pick these up from bios.lua, but illuaminate currently
|
||||
;; isn't smart enough.
|
||||
sleep write printError read rs)))
|
||||
|
||||
;; We disable the unused global linter in bios.lua and the APIs. In the future
|
||||
;; hopefully we'll get illuaminate to handle this.
|
||||
(at
|
||||
(/src/main/resources/*/computercraft/lua/bios.lua
|
||||
/src/main/resources/*/computercraft/lua/rom/apis/)
|
||||
(linters -var:unused-global)
|
||||
(lint (allow-toplevel-global true)))
|
||||
|
||||
;; Silence some variable warnings in documentation stubs.
|
||||
(at (/doc/stub/ /build/docs/luaJavadoc/)
|
||||
(linters -var:unused-global)
|
||||
(lint (allow-toplevel-global true)))
|
||||
|
||||
;; Suppress warnings for currently undocumented modules.
|
||||
(at
|
||||
(; Lua APIs
|
||||
/src/main/resources/*/computercraft/lua/rom/apis/io.lua
|
||||
/src/main/resources/*/computercraft/lua/rom/apis/window.lua)
|
||||
|
||||
(linters -doc:undocumented -doc:undocumented-arg -doc:undocumented-return))
|
||||
|
||||
;; Suppress warnings for various APIs using its own deprecated members.
|
||||
(at
|
||||
(/src/main/resources/*/computercraft/lua/bios.lua
|
||||
/src/main/resources/*/computercraft/lua/rom/apis/turtle/turtle.lua)
|
||||
(linters -var:deprecated))
|
||||
|
||||
(at /src/test/resources/test-rom
|
||||
; We should still be able to test deprecated members.
|
||||
(linters -var:deprecated)
|
||||
|
||||
(lint
|
||||
(globals
|
||||
:max sleep write
|
||||
cct_test describe expect howlci fail it pending stub)))
|
||||
|
||||
(at /src/web/mount/expr_template.lua (lint (globals :max __expr__)))
|
424
package-lock.json
generated
Normal file
424
package-lock.json
generated
Normal file
@@ -0,0 +1,424 @@
|
||||
{
|
||||
"name": "tweaked.cc",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "tweaked.cc",
|
||||
"version": "1.0.0",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"preact": "^10.5.5",
|
||||
"tslib": "^2.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rollup/plugin-typescript": "^8.2.5",
|
||||
"requirejs": "^2.3.6",
|
||||
"rollup": "^2.33.1",
|
||||
"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": {
|
||||
"@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,
|
||||
"requires": {
|
||||
"@rollup/pluginutils": "^3.1.0",
|
||||
"resolve": "^1.17.0"
|
||||
}
|
||||
},
|
||||
"@rollup/pluginutils": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
|
||||
"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/estree": "0.0.39",
|
||||
"estree-walker": "^1.0.1",
|
||||
"picomatch": "^2.2.2"
|
||||
}
|
||||
},
|
||||
"@types/estree": {
|
||||
"version": "0.0.39",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
|
||||
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
|
||||
"dev": true
|
||||
},
|
||||
"buffer-from": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
||||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
||||
"dev": true
|
||||
},
|
||||
"commander": {
|
||||
"version": "2.20.3",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
||||
"dev": true
|
||||
},
|
||||
"estree-walker": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
|
||||
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
|
||||
"dev": true
|
||||
},
|
||||
"fsevents": {
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
|
||||
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"function-bind": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
|
||||
"dev": true
|
||||
},
|
||||
"has": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
||||
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"function-bind": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"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,
|
||||
"requires": {
|
||||
"has": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"path-parse": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
|
||||
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
|
||||
"dev": true
|
||||
},
|
||||
"picomatch": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
|
||||
"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
|
||||
"dev": true
|
||||
},
|
||||
"preact": {
|
||||
"version": "10.5.14",
|
||||
"resolved": "https://registry.npmjs.org/preact/-/preact-10.5.14.tgz",
|
||||
"integrity": "sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ=="
|
||||
},
|
||||
"requirejs": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
|
||||
"integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==",
|
||||
"dev": true
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.20.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
|
||||
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"is-core-module": "^2.2.0",
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
},
|
||||
"rollup": {
|
||||
"version": "2.56.2",
|
||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.2.tgz",
|
||||
"integrity": "sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fsevents": "~2.3.2"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||
"dev": true
|
||||
},
|
||||
"source-map-support": {
|
||||
"version": "0.5.19",
|
||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
|
||||
"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"buffer-from": "^1.0.0",
|
||||
"source-map": "^0.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"terser": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz",
|
||||
"integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"commander": "^2.20.0",
|
||||
"source-map": "~0.7.2",
|
||||
"source-map-support": "~0.5.19"
|
||||
}
|
||||
},
|
||||
"tslib": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
|
||||
"integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
|
||||
},
|
||||
"typescript": {
|
||||
"version": "4.3.5",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz",
|
||||
"integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
}
|
18
package.json
Normal file
18
package.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "tweaked.cc",
|
||||
"version": "1.0.0",
|
||||
"description": "Website additions for tweaked.cc",
|
||||
"author": "SquidDev",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"preact": "^10.5.5",
|
||||
"tslib": "^2.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rollup/plugin-typescript": "^8.2.5",
|
||||
"requirejs": "^2.3.6",
|
||||
"rollup": "^2.33.1",
|
||||
"terser": "^5.3.8",
|
||||
"typescript": "^4.0.5"
|
||||
}
|
||||
}
|
55
rollup.config.js
Normal file
55
rollup.config.js
Normal file
@@ -0,0 +1,55 @@
|
||||
import { readFileSync, promises as fs } from "fs";
|
||||
import path from "path";
|
||||
|
||||
import typescript from "@rollup/plugin-typescript";
|
||||
|
||||
const input = "src/web";
|
||||
const requirejs = readFileSync("node_modules/requirejs/require.js");
|
||||
|
||||
export default {
|
||||
input: [`${input}/index.tsx`],
|
||||
output: {
|
||||
file: "build/rollup/index.js",
|
||||
// We bundle requirejs (and config) into the header. It's rather gross
|
||||
// but also works reasonably well.
|
||||
banner: `${requirejs}\nrequire.config({ paths: { copycat: "https://copy-cat.squiddev.cc" } });`,
|
||||
format: "amd",
|
||||
preferConst: true,
|
||||
amd: {
|
||||
define: "require",
|
||||
}
|
||||
},
|
||||
context: "window",
|
||||
external: ["copycat/embed"],
|
||||
|
||||
plugins: [
|
||||
typescript(),
|
||||
|
||||
{
|
||||
name: "cc-tweaked",
|
||||
async options(options) {
|
||||
// Generate .d.ts files for all /mount files. This is the worst way to do it,
|
||||
// but we need to run before the TS pass.
|
||||
const template = "declare const contents : string;\nexport default contents;\n";
|
||||
const files = await fs.readdir(`${input}/mount`);
|
||||
|
||||
await Promise.all(files
|
||||
.filter(x => path.extname(x) !== ".ts")
|
||||
.map(async file => {
|
||||
const path = `${input}/mount/${file}.d.ts`;
|
||||
const contents = await fs.readFile(path, { encoding: "utf-8" }).catch(() => "");
|
||||
if (contents !== template) await fs.writeFile(path, template);
|
||||
})
|
||||
);
|
||||
return options;
|
||||
},
|
||||
async transform(code, file) {
|
||||
// Allow loading files in /mount.
|
||||
const ext = path.extname(file);
|
||||
return ext != '.tsx' && ext != '.ts' && path.dirname(file) === path.resolve(`${input}/mount`)
|
||||
? `export default ${JSON.stringify(code)};\n`
|
||||
: null;
|
||||
},
|
||||
}
|
||||
],
|
||||
};
|
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north,state=off": {
|
||||
"model": "computercraft:block/computer_advanced_off"
|
||||
},
|
||||
"facing=south,state=off": {
|
||||
"model": "computercraft:block/computer_advanced_off",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=off": {
|
||||
"model": "computercraft:block/computer_advanced_off",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=off": {
|
||||
"model": "computercraft:block/computer_advanced_off",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,state=on": {
|
||||
"model": "computercraft:block/computer_advanced_on"
|
||||
},
|
||||
"facing=south,state=on": {
|
||||
"model": "computercraft:block/computer_advanced_on",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=on": {
|
||||
"model": "computercraft:block/computer_advanced_on",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=on": {
|
||||
"model": "computercraft:block/computer_advanced_on",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,state=blinking": {
|
||||
"model": "computercraft:block/computer_advanced_blinking"
|
||||
},
|
||||
"facing=south,state=blinking": {
|
||||
"model": "computercraft:block/computer_advanced_blinking",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=blinking": {
|
||||
"model": "computercraft:block/computer_advanced_blinking",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=blinking": {
|
||||
"model": "computercraft:block/computer_advanced_blinking",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north,state=off": {
|
||||
"model": "computercraft:block/computer_command_off"
|
||||
},
|
||||
"facing=south,state=off": {
|
||||
"model": "computercraft:block/computer_command_off",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=off": {
|
||||
"model": "computercraft:block/computer_command_off",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=off": {
|
||||
"model": "computercraft:block/computer_command_off",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,state=on": {
|
||||
"model": "computercraft:block/computer_command_on"
|
||||
},
|
||||
"facing=south,state=on": {
|
||||
"model": "computercraft:block/computer_command_on",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=on": {
|
||||
"model": "computercraft:block/computer_command_on",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=on": {
|
||||
"model": "computercraft:block/computer_command_on",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,state=blinking": {
|
||||
"model": "computercraft:block/computer_command_blinking"
|
||||
},
|
||||
"facing=south,state=blinking": {
|
||||
"model": "computercraft:block/computer_command_blinking",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=blinking": {
|
||||
"model": "computercraft:block/computer_command_blinking",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=blinking": {
|
||||
"model": "computercraft:block/computer_command_blinking",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north,state=off": {
|
||||
"model": "computercraft:block/computer_normal_off"
|
||||
},
|
||||
"facing=south,state=off": {
|
||||
"model": "computercraft:block/computer_normal_off",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=off": {
|
||||
"model": "computercraft:block/computer_normal_off",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=off": {
|
||||
"model": "computercraft:block/computer_normal_off",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,state=on": {
|
||||
"model": "computercraft:block/computer_normal_on"
|
||||
},
|
||||
"facing=south,state=on": {
|
||||
"model": "computercraft:block/computer_normal_on",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=on": {
|
||||
"model": "computercraft:block/computer_normal_on",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=on": {
|
||||
"model": "computercraft:block/computer_normal_on",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,state=blinking": {
|
||||
"model": "computercraft:block/computer_normal_blinking"
|
||||
},
|
||||
"facing=south,state=blinking": {
|
||||
"model": "computercraft:block/computer_normal_blinking",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,state=blinking": {
|
||||
"model": "computercraft:block/computer_normal_blinking",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,state=blinking": {
|
||||
"model": "computercraft:block/computer_normal_blinking",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,852 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced"
|
||||
},
|
||||
"facing=south,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_advanced",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l"
|
||||
},
|
||||
"facing=south,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_advanced_l",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r"
|
||||
},
|
||||
"facing=south,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_advanced_r",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr"
|
||||
},
|
||||
"facing=south,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_advanced_lr",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u"
|
||||
},
|
||||
"facing=south,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_advanced_u",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d"
|
||||
},
|
||||
"facing=south,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_advanced_d",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud"
|
||||
},
|
||||
"facing=south,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_advanced_ud",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd"
|
||||
},
|
||||
"facing=south,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_advanced_rd",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld"
|
||||
},
|
||||
"facing=south,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_advanced_ld",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru"
|
||||
},
|
||||
"facing=south,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_advanced_ru",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu"
|
||||
},
|
||||
"facing=south,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_advanced_lu",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd"
|
||||
},
|
||||
"facing=south,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_advanced_lrd",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud"
|
||||
},
|
||||
"facing=south,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_advanced_rud",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud"
|
||||
},
|
||||
"facing=south,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_advanced_lud",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru"
|
||||
},
|
||||
"facing=south,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_advanced_lru",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud"
|
||||
},
|
||||
"facing=south,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_advanced_lrud",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,852 @@
|
||||
{
|
||||
"variants": {
|
||||
"facing=north,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_normal"
|
||||
},
|
||||
"facing=south,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=none": {
|
||||
"model": "computercraft:block/monitor_normal",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l"
|
||||
},
|
||||
"facing=south,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=l": {
|
||||
"model": "computercraft:block/monitor_normal_l",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r"
|
||||
},
|
||||
"facing=south,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=r": {
|
||||
"model": "computercraft:block/monitor_normal_r",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr"
|
||||
},
|
||||
"facing=south,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lr": {
|
||||
"model": "computercraft:block/monitor_normal_lr",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u"
|
||||
},
|
||||
"facing=south,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=u": {
|
||||
"model": "computercraft:block/monitor_normal_u",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d"
|
||||
},
|
||||
"facing=south,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=d": {
|
||||
"model": "computercraft:block/monitor_normal_d",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud"
|
||||
},
|
||||
"facing=south,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=ud": {
|
||||
"model": "computercraft:block/monitor_normal_ud",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd"
|
||||
},
|
||||
"facing=south,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=rd": {
|
||||
"model": "computercraft:block/monitor_normal_rd",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld"
|
||||
},
|
||||
"facing=south,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=ld": {
|
||||
"model": "computercraft:block/monitor_normal_ld",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru"
|
||||
},
|
||||
"facing=south,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=ru": {
|
||||
"model": "computercraft:block/monitor_normal_ru",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu"
|
||||
},
|
||||
"facing=south,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lu": {
|
||||
"model": "computercraft:block/monitor_normal_lu",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd"
|
||||
},
|
||||
"facing=south,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lrd": {
|
||||
"model": "computercraft:block/monitor_normal_lrd",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud"
|
||||
},
|
||||
"facing=south,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=rud": {
|
||||
"model": "computercraft:block/monitor_normal_rud",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud"
|
||||
},
|
||||
"facing=south,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lud": {
|
||||
"model": "computercraft:block/monitor_normal_lud",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru"
|
||||
},
|
||||
"facing=south,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lru": {
|
||||
"model": "computercraft:block/monitor_normal_lru",
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 90
|
||||
},
|
||||
"facing=south,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 90,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 90,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=down,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 90,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 270
|
||||
},
|
||||
"facing=south,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 270,
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 270,
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=up,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"x": 270,
|
||||
"y": 90
|
||||
},
|
||||
"facing=north,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud"
|
||||
},
|
||||
"facing=south,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"y": 180
|
||||
},
|
||||
"facing=west,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"y": 270
|
||||
},
|
||||
"facing=east,orientation=north,state=lrud": {
|
||||
"model": "computercraft:block/monitor_normal_lrud",
|
||||
"y": 90
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,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
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_advanced_side",
|
||||
"front": "computercraft:block/computer_advanced_front_blink",
|
||||
"top": "computercraft:block/computer_advanced_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_advanced_side",
|
||||
"front": "computercraft:block/computer_advanced_front",
|
||||
"top": "computercraft:block/computer_advanced_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_advanced_side",
|
||||
"front": "computercraft:block/computer_advanced_front_on",
|
||||
"top": "computercraft:block/computer_advanced_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_command_side",
|
||||
"front": "computercraft:block/computer_command_front_blink",
|
||||
"top": "computercraft:block/computer_command_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_command_side",
|
||||
"front": "computercraft:block/computer_command_front",
|
||||
"top": "computercraft:block/computer_command_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_command_side",
|
||||
"front": "computercraft:block/computer_command_front_on",
|
||||
"top": "computercraft:block/computer_command_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_normal_side",
|
||||
"front": "computercraft:block/computer_normal_front_blink",
|
||||
"top": "computercraft:block/computer_normal_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_normal_side",
|
||||
"front": "computercraft:block/computer_normal_front",
|
||||
"top": "computercraft:block/computer_normal_top"
|
||||
}
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"parent": "minecraft:block/orientable",
|
||||
"textures": {
|
||||
"side": "computercraft:block/computer_normal_side",
|
||||
"front": "computercraft:block/computer_normal_front_on",
|
||||
"top": "computercraft:block/computer_normal_top"
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user