1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-08-29 08:42:17 +00:00

Merge branch 'mc-1.21.x' into mc-1.21.y

This commit is contained in:
Jonathan Coates 2025-07-12 21:46:28 +01:00
commit e81a2c72ce
No known key found for this signature in database
GPG Key ID: B9E431FF07C98D06
18 changed files with 510 additions and 246 deletions

View File

@ -11,7 +11,8 @@ body:
What version of Minecraft are you using? If your version is not listed, please try to reproduce on one of the supported versions.
options:
- 1.20.1
- 1.21.x
- 1.21.1
- 1.21.7
validations:
required: true
- type: input

View File

@ -12,6 +12,7 @@ files:
de: de_de # German
es-ES: es_es # Spanish
fr: fr_fr # French
hu: hu_hu # Hungarian
it: it_it # Italian
ja: ja_jp # Japanese
ko: ko_kr # Korean

View File

@ -12,7 +12,7 @@ neogradle.subsystems.conventions.runs.enabled=false
# Mod properties
isUnstable=true
modVersion=1.116.0
modVersion=1.116.1
# Minecraft properties: We want to configure this here so we can read it in settings.gradle
mcVersion=1.21.7

View File

@ -74,7 +74,7 @@ nullAway = "0.12.7"
shadow = "8.3.1"
spotless = "7.0.2"
taskTree = "2.1.1"
teavm = "0.11.0-SQUID.1"
teavm = "0.13.0-SQUID.1"
vanillaExtract = "0.2.1"
versionCatalogUpdate = "0.8.1"

275
package-lock.json generated
View File

@ -16,7 +16,7 @@
},
"devDependencies": {
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-typescript": "^12.0.0 && <12.1.3",
"@rollup/plugin-typescript": "^12.0.0",
"@rollup/plugin-url": "^8.0.1",
"@swc/core": "^1.3.92",
"@types/node": "^24.0.0",
@ -481,9 +481,9 @@
}
},
"node_modules/@rollup/plugin-typescript": {
"version": "12.1.2",
"resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz",
"integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==",
"version": "12.1.4",
"resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.4.tgz",
"integrity": "sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -554,9 +554,9 @@
}
},
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.43.0.tgz",
"integrity": "sha512-Krjy9awJl6rKbruhQDgivNbD1WuLb8xAclM4IR4cN5pHGAs2oIMMQJEiC3IC/9TZJ+QZkmZhlMO/6MBGxPidpw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz",
"integrity": "sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==",
"cpu": [
"arm"
],
@ -568,9 +568,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.43.0.tgz",
"integrity": "sha512-ss4YJwRt5I63454Rpj+mXCXicakdFmKnUNxr1dLK+5rv5FJgAxnN7s31a5VchRYxCFWdmnDWKd0wbAdTr0J5EA==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz",
"integrity": "sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==",
"cpu": [
"arm64"
],
@ -582,9 +582,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.43.0.tgz",
"integrity": "sha512-eKoL8ykZ7zz8MjgBenEF2OoTNFAPFz1/lyJ5UmmFSz5jW+7XbH1+MAgCVHy72aG59rbuQLcJeiMrP8qP5d/N0A==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz",
"integrity": "sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==",
"cpu": [
"arm64"
],
@ -596,9 +596,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.43.0.tgz",
"integrity": "sha512-SYwXJgaBYW33Wi/q4ubN+ldWC4DzQY62S4Ll2dgfr/dbPoF50dlQwEaEHSKrQdSjC6oIe1WgzosoaNoHCdNuMg==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz",
"integrity": "sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==",
"cpu": [
"x64"
],
@ -610,9 +610,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.43.0.tgz",
"integrity": "sha512-SV+U5sSo0yujrjzBF7/YidieK2iF6E7MdF6EbYxNz94lA+R0wKl3SiixGyG/9Klab6uNBIqsN7j4Y/Fya7wAjQ==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz",
"integrity": "sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==",
"cpu": [
"arm64"
],
@ -624,9 +624,9 @@
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.43.0.tgz",
"integrity": "sha512-J7uCsiV13L/VOeHJBo5SjasKiGxJ0g+nQTrBkAsmQBIdil3KhPnSE9GnRon4ejX1XDdsmK/l30IYLiAaQEO0Cg==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz",
"integrity": "sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==",
"cpu": [
"x64"
],
@ -638,9 +638,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.43.0.tgz",
"integrity": "sha512-gTJ/JnnjCMc15uwB10TTATBEhK9meBIY+gXP4s0sHD1zHOaIh4Dmy1X9wup18IiY9tTNk5gJc4yx9ctj/fjrIw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz",
"integrity": "sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==",
"cpu": [
"arm"
],
@ -652,9 +652,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.43.0.tgz",
"integrity": "sha512-ZJ3gZynL1LDSIvRfz0qXtTNs56n5DI2Mq+WACWZ7yGHFUEirHBRt7fyIk0NsCKhmRhn7WAcjgSkSVVxKlPNFFw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz",
"integrity": "sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==",
"cpu": [
"arm"
],
@ -666,9 +666,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.43.0.tgz",
"integrity": "sha512-8FnkipasmOOSSlfucGYEu58U8cxEdhziKjPD2FIa0ONVMxvl/hmONtX/7y4vGjdUhjcTHlKlDhw3H9t98fPvyA==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz",
"integrity": "sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==",
"cpu": [
"arm64"
],
@ -680,9 +680,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.43.0.tgz",
"integrity": "sha512-KPPyAdlcIZ6S9C3S2cndXDkV0Bb1OSMsX0Eelr2Bay4EsF9yi9u9uzc9RniK3mcUGCLhWY9oLr6er80P5DE6XA==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz",
"integrity": "sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==",
"cpu": [
"arm64"
],
@ -694,9 +694,9 @@
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.43.0.tgz",
"integrity": "sha512-HPGDIH0/ZzAZjvtlXj6g+KDQ9ZMHfSP553za7o2Odegb/BEfwJcR0Sw0RLNpQ9nC6Gy8s+3mSS9xjZ0n3rhcYg==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz",
"integrity": "sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==",
"cpu": [
"loong64"
],
@ -708,9 +708,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.43.0.tgz",
"integrity": "sha512-gEmwbOws4U4GLAJDhhtSPWPXUzDfMRedT3hFMyRAvM9Mrnj+dJIFIeL7otsv2WF3D7GrV0GIewW0y28dOYWkmw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz",
"integrity": "sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==",
"cpu": [
"ppc64"
],
@ -722,9 +722,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.43.0.tgz",
"integrity": "sha512-XXKvo2e+wFtXZF/9xoWohHg+MuRnvO29TI5Hqe9xwN5uN8NKUYy7tXUG3EZAlfchufNCTHNGjEx7uN78KsBo0g==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz",
"integrity": "sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==",
"cpu": [
"riscv64"
],
@ -736,9 +736,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.43.0.tgz",
"integrity": "sha512-ruf3hPWhjw6uDFsOAzmbNIvlXFXlBQ4nk57Sec8E8rUxs/AI4HD6xmiiasOOx/3QxS2f5eQMKTAwk7KHwpzr/Q==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz",
"integrity": "sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==",
"cpu": [
"riscv64"
],
@ -750,9 +750,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.43.0.tgz",
"integrity": "sha512-QmNIAqDiEMEvFV15rsSnjoSmO0+eJLoKRD9EAa9rrYNwO/XRCtOGM3A5A0X+wmG+XRrw9Fxdsw+LnyYiZWWcVw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz",
"integrity": "sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==",
"cpu": [
"s390x"
],
@ -764,9 +764,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.43.0.tgz",
"integrity": "sha512-jAHr/S0iiBtFyzjhOkAics/2SrXE092qyqEg96e90L3t9Op8OTzS6+IX0Fy5wCt2+KqeHAkti+eitV0wvblEoQ==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz",
"integrity": "sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==",
"cpu": [
"x64"
],
@ -778,9 +778,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.43.0.tgz",
"integrity": "sha512-3yATWgdeXyuHtBhrLt98w+5fKurdqvs8B53LaoKD7P7H7FKOONLsBVMNl9ghPQZQuYcceV5CDyPfyfGpMWD9mQ==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz",
"integrity": "sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==",
"cpu": [
"x64"
],
@ -792,9 +792,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.43.0.tgz",
"integrity": "sha512-wVzXp2qDSCOpcBCT5WRWLmpJRIzv23valvcTwMHEobkjippNf+C3ys/+wf07poPkeNix0paTNemB2XrHr2TnGw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz",
"integrity": "sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==",
"cpu": [
"arm64"
],
@ -806,9 +806,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.43.0.tgz",
"integrity": "sha512-fYCTEyzf8d+7diCw8b+asvWDCLMjsCEA8alvtAutqJOJp/wL5hs1rWSqJ1vkjgW0L2NB4bsYJrpKkiIPRR9dvw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz",
"integrity": "sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==",
"cpu": [
"ia32"
],
@ -820,9 +820,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.43.0.tgz",
"integrity": "sha512-SnGhLiE5rlK0ofq8kzuDkM0g7FN1s5VYY+YSMTibP7CqShxCQvqtNxTARS4xX4PFJfHjG0ZQYX9iGzI3FQh5Aw==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz",
"integrity": "sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==",
"cpu": [
"x64"
],
@ -844,9 +844,9 @@
}
},
"node_modules/@swc/core": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.1.tgz",
"integrity": "sha512-aKXdDTqxTVFl/bKQZ3EQUjEMBEoF6JBv29moMZq0kbVO43na6u/u+3Vcbhbrh+A2N0X5OL4RaveuWfAjEgOmeA==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.9.tgz",
"integrity": "sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==",
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
@ -862,16 +862,16 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.12.1",
"@swc/core-darwin-x64": "1.12.1",
"@swc/core-linux-arm-gnueabihf": "1.12.1",
"@swc/core-linux-arm64-gnu": "1.12.1",
"@swc/core-linux-arm64-musl": "1.12.1",
"@swc/core-linux-x64-gnu": "1.12.1",
"@swc/core-linux-x64-musl": "1.12.1",
"@swc/core-win32-arm64-msvc": "1.12.1",
"@swc/core-win32-ia32-msvc": "1.12.1",
"@swc/core-win32-x64-msvc": "1.12.1"
"@swc/core-darwin-arm64": "1.12.9",
"@swc/core-darwin-x64": "1.12.9",
"@swc/core-linux-arm-gnueabihf": "1.12.9",
"@swc/core-linux-arm64-gnu": "1.12.9",
"@swc/core-linux-arm64-musl": "1.12.9",
"@swc/core-linux-x64-gnu": "1.12.9",
"@swc/core-linux-x64-musl": "1.12.9",
"@swc/core-win32-arm64-msvc": "1.12.9",
"@swc/core-win32-ia32-msvc": "1.12.9",
"@swc/core-win32-x64-msvc": "1.12.9"
},
"peerDependencies": {
"@swc/helpers": ">=0.5.17"
@ -883,9 +883,9 @@
}
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.1.tgz",
"integrity": "sha512-nUjWVcJ3YS2N40ZbKwYO2RJ4+o2tWYRzNOcIQp05FqW0+aoUCVMdAUUzQinPDynfgwVshDAXCKemY8X7nN5MaA==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.9.tgz",
"integrity": "sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==",
"cpu": [
"arm64"
],
@ -900,9 +900,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.1.tgz",
"integrity": "sha512-OGm4a4d3OeJn+tRt8H/eiHgTFrJbS6r8mi/Ob65tAEXZGHN900T2kR7c5ALr0V2hBOQ8BfhexwPoQlGQP/B95w==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.9.tgz",
"integrity": "sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==",
"cpu": [
"x64"
],
@ -917,9 +917,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.1.tgz",
"integrity": "sha512-76YeeQKyK0EtNkQiNBZ0nbVGooPf9IucY0WqVXVpaU4wuG7ZyLEE2ZAIgXafIuzODGQoLfetue7I8boMxh1/MA==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.9.tgz",
"integrity": "sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==",
"cpu": [
"arm"
],
@ -934,9 +934,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.1.tgz",
"integrity": "sha512-BxJDIJPq1+aCh9UsaSAN6wo3tuln8UhNXruOrzTI8/ElIig/3sAueDM6Eq7GvZSGGSA7ljhNATMJ0elD7lFatQ==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.9.tgz",
"integrity": "sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==",
"cpu": [
"arm64"
],
@ -951,9 +951,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.1.tgz",
"integrity": "sha512-NhLdbffSXvY0/FwUSAl4hKBlpe5GHQGXK8DxTo3HHjLsD9sCPYieo3vG0NQoUYAy4ZUY1WeGjyxeq4qZddJzEQ==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.9.tgz",
"integrity": "sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==",
"cpu": [
"arm64"
],
@ -968,9 +968,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.1.tgz",
"integrity": "sha512-CrYnV8SZIgArQ9LKH0xEF95PKXzX9WkRSc5j55arOSBeDCeDUQk1Bg/iKdnDiuj5HC1hZpvzwMzSBJjv+Z70jA==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.9.tgz",
"integrity": "sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==",
"cpu": [
"x64"
],
@ -985,9 +985,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.1.tgz",
"integrity": "sha512-BQMl3d0HaGB0/h2xcKlGtjk/cGRn2tnbsaChAKcjFdCepblKBCz1pgO/mL7w5iXq3s57wMDUn++71/a5RAkZOA==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.9.tgz",
"integrity": "sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==",
"cpu": [
"x64"
],
@ -1002,9 +1002,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.1.tgz",
"integrity": "sha512-b7NeGnpqTfmIGtUqXBl0KqoSmOnH64nRZoT5l4BAGdvwY7nxitWR94CqZuwyLPty/bLywmyDA9uO12Kvgb3+gg==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.9.tgz",
"integrity": "sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==",
"cpu": [
"arm64"
],
@ -1019,9 +1019,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.1.tgz",
"integrity": "sha512-iU/29X2D7cHBp1to62cUg/5Xk8K+lyOJiKIGGW5rdzTW/c2zz3d/ehgpzVP/rqC4NVr88MXspqHU4il5gmDajw==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.9.tgz",
"integrity": "sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==",
"cpu": [
"ia32"
],
@ -1036,9 +1036,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
"version": "1.12.1",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.1.tgz",
"integrity": "sha512-+Zh+JKDwiFqV5N9yAd2DhYVGPORGh9cfenu1ptr9yge+eHAf7vZJcC3rnj6QMR1QJh0Y5VC9+YBjRFjZVA7XDw==",
"version": "1.12.9",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.9.tgz",
"integrity": "sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==",
"cpu": [
"x64"
],
@ -1124,9 +1124,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "24.0.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz",
"integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==",
"version": "24.0.8",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.8.tgz",
"integrity": "sha512-WytNrFSgWO/esSH9NbpWUfTMGQwCGIKfCmNlmFDNiI5gGhgMmEA+V1AEvKLeBNvvtBnailJtkrEa2OIISwrVAA==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -2856,13 +2856,13 @@
}
},
"node_modules/rollup": {
"version": "4.43.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.43.0.tgz",
"integrity": "sha512-wdN2Kd3Twh8MAEOEJZsuxuLKCsBEo4PVNLK6tQWAn10VhsVewQLzcucMgLolRlhFybGxfclbPeEYBaP6RvUFGg==",
"version": "4.44.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.1.tgz",
"integrity": "sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.7"
"@types/estree": "1.0.8"
},
"bin": {
"rollup": "dist/bin/rollup"
@ -2872,36 +2872,29 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.43.0",
"@rollup/rollup-android-arm64": "4.43.0",
"@rollup/rollup-darwin-arm64": "4.43.0",
"@rollup/rollup-darwin-x64": "4.43.0",
"@rollup/rollup-freebsd-arm64": "4.43.0",
"@rollup/rollup-freebsd-x64": "4.43.0",
"@rollup/rollup-linux-arm-gnueabihf": "4.43.0",
"@rollup/rollup-linux-arm-musleabihf": "4.43.0",
"@rollup/rollup-linux-arm64-gnu": "4.43.0",
"@rollup/rollup-linux-arm64-musl": "4.43.0",
"@rollup/rollup-linux-loongarch64-gnu": "4.43.0",
"@rollup/rollup-linux-powerpc64le-gnu": "4.43.0",
"@rollup/rollup-linux-riscv64-gnu": "4.43.0",
"@rollup/rollup-linux-riscv64-musl": "4.43.0",
"@rollup/rollup-linux-s390x-gnu": "4.43.0",
"@rollup/rollup-linux-x64-gnu": "4.43.0",
"@rollup/rollup-linux-x64-musl": "4.43.0",
"@rollup/rollup-win32-arm64-msvc": "4.43.0",
"@rollup/rollup-win32-ia32-msvc": "4.43.0",
"@rollup/rollup-win32-x64-msvc": "4.43.0",
"@rollup/rollup-android-arm-eabi": "4.44.1",
"@rollup/rollup-android-arm64": "4.44.1",
"@rollup/rollup-darwin-arm64": "4.44.1",
"@rollup/rollup-darwin-x64": "4.44.1",
"@rollup/rollup-freebsd-arm64": "4.44.1",
"@rollup/rollup-freebsd-x64": "4.44.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.44.1",
"@rollup/rollup-linux-arm-musleabihf": "4.44.1",
"@rollup/rollup-linux-arm64-gnu": "4.44.1",
"@rollup/rollup-linux-arm64-musl": "4.44.1",
"@rollup/rollup-linux-loongarch64-gnu": "4.44.1",
"@rollup/rollup-linux-powerpc64le-gnu": "4.44.1",
"@rollup/rollup-linux-riscv64-gnu": "4.44.1",
"@rollup/rollup-linux-riscv64-musl": "4.44.1",
"@rollup/rollup-linux-s390x-gnu": "4.44.1",
"@rollup/rollup-linux-x64-gnu": "4.44.1",
"@rollup/rollup-linux-x64-musl": "4.44.1",
"@rollup/rollup-win32-arm64-msvc": "4.44.1",
"@rollup/rollup-win32-ia32-msvc": "4.44.1",
"@rollup/rollup-win32-x64-msvc": "4.44.1",
"fsevents": "~2.3.2"
}
},
"node_modules/rollup/node_modules/@types/estree": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
"dev": true,
"license": "MIT"
},
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",

View File

@ -13,7 +13,7 @@
},
"devDependencies": {
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-typescript": "^12.0.0 && <12.1.3",
"@rollup/plugin-typescript": "^12.0.0",
"@rollup/plugin-url": "^8.0.1",
"@swc/core": "^1.3.92",
"@types/node": "^24.0.0",

View File

@ -50,6 +50,12 @@ public enum UserLevel implements Predicate<CommandSourceStack> {
public static boolean isOwner(CommandSourceStack source) {
var server = source.getServer();
// While CommandSourceStack.getServer is non-nullable, that's a lie for permission checks. When loading
// .mcfunction files, ServerFunctionLibrary constructs an instance with an empty server. In that case, return
// false we don't want to treat functions as an owner!
if (server == null) return false;
var player = source.getPlayer();
return server.isDedicatedServer()
? source.getEntity() == null && source.hasPermission(4) && source.getTextName().equals("Server")

View File

@ -9,6 +9,7 @@ import dan200.computercraft.core.util.Nullability;
import dan200.computercraft.shared.network.client.SpeakerStopClientMessage;
import dan200.computercraft.shared.network.server.ServerNetworking;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
@ -47,7 +48,12 @@ public class SpeakerBlockEntity extends BlockEntity {
}
@Override
public SpeakerPosition getPosition() {
protected ServerLevel getLevel() {
return (ServerLevel) speaker.getLevel();
}
@Override
protected SpeakerPosition getPosition() {
return SpeakerPosition.of(speaker.getLevel(), Vec3.atCenterOf(speaker.getBlockPos()));
}

View File

@ -32,7 +32,10 @@ import net.minecraft.util.Mth;
import net.minecraft.world.level.block.state.properties.NoteBlockInstrument;
import org.jspecify.annotations.Nullable;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import static dan200.computercraft.api.lua.LuaValues.checkFinite;
@ -155,7 +158,9 @@ public abstract class SpeakerPeripheral implements IPeripheral {
}
}
public abstract SpeakerPosition getPosition();
protected abstract ServerLevel getLevel();
protected abstract SpeakerPosition getPosition();
public UUID getSource() {
return source;
@ -255,7 +260,7 @@ public abstract class SpeakerPeripheral implements IPeripheral {
// Prevent playing music discs.
var soundEvent = BuiltInRegistries.SOUND_EVENT.getValue(identifier);
// TODO: Build a set of sound events at server startup, and cache this.
var level = Objects.requireNonNull(getPosition().level());
var level = getLevel();
if (soundEvent != null && level.registryAccess().lookupOrThrow(Registries.JUKEBOX_SONG).stream().anyMatch(x -> x.soundEvent().value() == soundEvent)) {
return false;
}

View File

@ -7,7 +7,6 @@ package dan200.computercraft.shared.peripheral.speaker;
import dan200.computercraft.api.peripheral.IComputerAccess;
import dan200.computercraft.shared.network.client.SpeakerStopClientMessage;
import dan200.computercraft.shared.network.server.ServerNetworking;
import net.minecraft.server.level.ServerLevel;
/**
@ -16,8 +15,6 @@ import net.minecraft.server.level.ServerLevel;
public abstract class UpgradeSpeakerPeripheral extends SpeakerPeripheral {
public static final String ADJECTIVE = "upgrade.computercraft.speaker.adjective";
protected abstract ServerLevel getLevel();
@Override
public void detach(IComputerAccess computer) {
super.detach(computer);

View File

@ -11,10 +11,10 @@ import dan200.computercraft.shared.peripheral.speaker.UpgradeSpeakerPeripheral;
import net.minecraft.server.level.ServerLevel;
import org.jspecify.annotations.Nullable;
public final class PocketSpeakerPeripheral extends UpgradeSpeakerPeripheral {
final class PocketSpeakerPeripheral extends UpgradeSpeakerPeripheral {
private final IPocketAccess access;
public PocketSpeakerPeripheral(IPocketAccess access) {
PocketSpeakerPeripheral(IPocketAccess access) {
this.access = access;
}
@ -24,7 +24,7 @@ public final class PocketSpeakerPeripheral extends UpgradeSpeakerPeripheral {
}
@Override
public SpeakerPosition getPosition() {
protected SpeakerPosition getPosition() {
var entity = access.getEntity();
return entity == null ? SpeakerPosition.of(access.getLevel(), access.getPosition()) : SpeakerPosition.of(entity);
}

View File

@ -32,7 +32,7 @@ public class TurtleSpeaker extends AbstractTurtleUpgrade {
}
@Override
public SpeakerPosition getPosition() {
protected SpeakerPosition getPosition() {
return SpeakerPosition.of(turtle.getLevel(), Vec3.atCenterOf(turtle.getPosition()));
}

View File

@ -0,0 +1,224 @@
{
"argument.computercraft.argument_expected": "Argumentum szükséges",
"argument.computercraft.computer.distance": "Távolság az entitástól",
"argument.computercraft.computer.family": "Számítógép típus",
"argument.computercraft.computer.id": "Számítógép ID",
"argument.computercraft.computer.instance": "Egyedi példányazonosító",
"argument.computercraft.computer.label": "Számítógép címke",
"argument.computercraft.computer.many_matching": "Több számítógép egyezik '%s' (példányok %s)",
"argument.computercraft.computer.no_matching": "Nincs egyező számítógép '%s'",
"argument.computercraft.tracking_field.no_field": "Ismeretlen mező '%s'",
"argument.computercraft.unknown_computer_family": "Ismeretlen számítógéptípus '%s'",
"block.computercraft.cable": "Hálózati kábel",
"block.computercraft.computer_advanced": "Fejlett számítógép",
"block.computercraft.computer_command": "Parancsszámítógép",
"block.computercraft.computer_normal": "Számítógép",
"block.computercraft.disk_drive": "Lemezmeghajtó",
"block.computercraft.monitor_advanced": "Fejlett monitor",
"block.computercraft.printer": "Nyomtató",
"block.computercraft.redstone_relay": "Redstone jelfogó",
"block.computercraft.speaker": "Hangszóró",
"block.computercraft.turtle_advanced": "Fejlett teknős",
"block.computercraft.turtle_advanced.upgraded": "Fejlett %s teknős",
"block.computercraft.turtle_advanced.upgraded_twice": "Fejlett %s %s teknős",
"block.computercraft.turtle_normal": "Teknős",
"block.computercraft.turtle_normal.upgraded": "%s teknős",
"block.computercraft.turtle_normal.upgraded_twice": "%s %s teknős",
"block.computercraft.wired_modem": "Vezetékes modem",
"block.computercraft.wired_modem_full": "Vezetékes modem",
"block.computercraft.wireless_modem_advanced": "Ender modem",
"block.computercraft.wireless_modem_normal": "Vezeték nélküli modem",
"chat.computercraft.wired_modem.peripheral_connected": "Periféria \"%s\" csatlakoztatva a hálózathoz",
"chat.computercraft.wired_modem.peripheral_disconnected": "Periféria \"%s\" lecsatlakoztatva a hálózatról",
"commands.computercraft.desc": "A /computercraft parancs különböző hibakereső és adminisztrációs eszközöket biztosít a számítógépek vezérléséhez és kezeléséhez.",
"commands.computercraft.dump.action": "További információ a számítógépről",
"commands.computercraft.dump.desc": "Az összes számítógép állapotát, vagy egy konkrét számítógépről szóló információkat jeleníti meg. Megadhatod a számítógép példányazonosítóját (pl. 123), számítógép azonosítóját (pl. #123) vagy címkéjét (pl. \"@Saját Számítógép\").",
"commands.computercraft.dump.open_path": "Nézd meg ennek a számítógépnek a fájljait",
"commands.computercraft.dump.synopsis": "Számítógépek állapotának megjelenítése.",
"commands.computercraft.generic.additional_rows": "%d további sor…",
"commands.computercraft.generic.exception": "Kezelhetetlen kivétel (%s)",
"commands.computercraft.generic.yes": "I",
"commands.computercraft.help.desc": "Megjeleníti ezt a súgóüzenetet",
"commands.computercraft.help.no_children": "%s nem rendelkezik alparancsokkal",
"commands.computercraft.help.no_command": "Nincs ilyen parancs '%s'",
"commands.computercraft.help.synopsis": "Súgó biztosítása egy adott parancshoz",
"commands.computercraft.queue.desc": "Számítógép_parancs eseményt küld egy parancsszámítógépnek, további argumentumok továbbításával. Ez főleg térképkészítők számára készült, mint egy számítógépbarátabb változata a /trigger parancsnak. Bármelyik játékos futtathatja a parancsot, amit valószínűleg egy szövegelem kattintási eseményén keresztül végeznek.",
"commands.computercraft.queue.synopsis": "Számítógép_parancs esemény küldése egy parancsszámítógépnek",
"commands.computercraft.shutdown.desc": "Leállítja a megadott számítógépeket, vagy mindet, ha nincs megadva. Megadhatod a számítógép példányazonosítóját (pl. 123), számítógép azonosítóját (pl. #123) vagy címkéjét (pl. \"@Saját Számítógép\").",
"commands.computercraft.shutdown.done": "%s/%s számítógép leállítva",
"commands.computercraft.shutdown.synopsis": "Számítógépek távoli leállítása.",
"commands.computercraft.synopsis": "Különféle parancsok számítógépek vezérlésére.",
"commands.computercraft.tp.action": "Teleportálj ehhez a számítógéphez",
"commands.computercraft.tp.desc": "Teleportálj egy számítógép helyére. Megadhatod a számítógép példányazonosítóját (pl. 123) vagy számítógép azonosítóját (pl. #123).",
"commands.computercraft.tp.synopsis": "Teleportálás egy adott számítógéphez.",
"commands.computercraft.track.desc": "Követi, mennyi ideig futnak a számítógépek, valamint hány eseményt kezelnek. Ez hasonló információkat nyújt, mint a /forge track, és hasznos lehet a késés diagnosztizálásában.",
"commands.computercraft.track.dump.computer": "Számítógép",
"commands.computercraft.track.dump.desc": "A számítógépes követés legfrissebb eredményeinek megjelenítése.",
"commands.computercraft.track.dump.no_timings": "Nincsenek elérhető időzítések",
"commands.computercraft.track.dump.synopsis": "A legfrissebb követési eredmények megjelenítése",
"commands.computercraft.track.start.desc": "Minden számítógép végrehajtási idejének és eseményszámának követését indítja. Ezzel az előző futások eredményei elvesznek.",
"commands.computercraft.track.start.stop": "Futtasd a %s parancsot a követés leállításához és az eredmények megtekintéséhez",
"commands.computercraft.track.start.synopsis": "Minden számítógép követésének indítása",
"commands.computercraft.track.stop.action": "Kattints a követés leállításához",
"commands.computercraft.track.stop.desc": "Minden számítógépes esemény és végrehajtási idő követésének leállítása",
"commands.computercraft.track.stop.not_enabled": "A számítógépek jelenleg nem követhetők",
"commands.computercraft.track.stop.synopsis": "Minden számítógép követésének leállítása",
"commands.computercraft.track.synopsis": "Számítógépek végrehajtási idejének követése.",
"commands.computercraft.turn_on.desc": "Kapcsold be a megadott számítógépeket. Megadhatod a számítógép példányazonosítóját (pl. 123), számítógép azonosítóját (pl. #123) vagy címkéjét (pl. \"@Saját Számítógép\").",
"commands.computercraft.turn_on.done": "%s/%s számítógép bekapcsolva",
"commands.computercraft.turn_on.synopsis": "Számítógépek távoli bekapcsolása.",
"commands.computercraft.view.action": "Nézd meg ezt a számítógépet",
"commands.computercraft.view.desc": "Nyisd meg egy számítógép terminálját, amely lehetővé teszi a távoli vezérlést. Ez nem biztosít hozzáférést a teknősök leltárához. Megadhatod a számítógép példányazonosítóját (pl. 123) vagy számítógép azonosítóját (pl. #123).",
"commands.computercraft.view.not_player": "Nem lehet terminált nyitni nem-játékos entitáshoz",
"commands.computercraft.view.synopsis": "Számítógép termináljának megtekintése.",
"gui.computercraft.config.command_require_creative": "Parancsszámítógépekhez kreatív mód szükséges",
"gui.computercraft.config.command_require_creative.tooltip": "Szükséges, hogy a játékosok kreatív módban legyenek és rendelkezzenek adminisztrátori jogosultsággal a parancsszámítógépek használatához. Ez az alapértelmezett viselkedés a Minecraft parancsblokkjaihoz.",
"gui.computercraft.config.computer_space_limit": "Számítógép tárhelykorlát (byte-ban)",
"gui.computercraft.config.computer_space_limit.tooltip": "A számítógépek és teknősök lemezterületének korlátja, byte-ban.",
"gui.computercraft.config.default_computer_settings": "Alapértelmezett számítógép-beállítások",
"gui.computercraft.config.default_computer_settings.tooltip": "Alapértelmezett rendszerbeállítások vesszővel elválasztott listája, amelyek az új számítógépekre vonatkoznak.\nPélda: \"shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false\" letiltja az automatikus kiegészítést.",
"gui.computercraft.config.disabled_generic_methods": "Letiltott általános metódusok",
"gui.computercraft.config.disabled_generic_methods.tooltip": "Általános metódusok vagy metódusforrások listája, amelyek le vannak tiltva. Az általános metódusokat akkor adják hozzá egy blokkhoz vagy blokk entitáshoz, ha nincs kifejezetten hozzárendelt periféria-szolgáltató. Ez magában foglalja a leltár metódusokat (pl. inventory.getItemDetail, inventory.pushItems), valamint (Forge esetén) a fluid_storage és energy_storage metódusokat is.\nA listában lévő metódus lehet egy teljes metóduscsoport (computercraft:inventory), vagy egyetlen metódus (computercraft:inventory#pushItems).",
"gui.computercraft.config.execution": "Végrehajtás",
"gui.computercraft.config.execution.computer_threads": "Számítógép szálak",
"gui.computercraft.config.execution.computer_threads.tooltip": "Az egyidejűleg futó számítógépek számát szabályozza. A magasabb szám több számítógép egyidejű futását teszi lehetővé, de lassulást okozhat. Vegye figyelembe, hogy néhány mod nem működik, ha a szálak száma meghaladja az 1-et. Óvatosan használja.\nTartomány: > 1",
"gui.computercraft.config.execution.max_main_computer_time": "Szerver tick számítógépidő-korlát",
"gui.computercraft.config.execution.max_main_computer_time.tooltip": "Az ideális maximális idő, ameddig egy számítógép egy tick-ben futtathat, milliszekundumban. Megjegyzés: Lehetséges, hogy túllépjük ezt a határt, mivel nincs mód az idő pontos előrejelzésére - ez az átlagos felső határ.",
"gui.computercraft.config.execution.max_main_global_time": "Szerver tick globális időkorlát",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "Az egy tick-ben feladatok végrehajtására fordított maximális idő, milliszekundumban.",
"gui.computercraft.config.execution.tooltip": "A számítógépek végrehajtási viselkedését szabályozza. Ez elsősorban szerverek finomhangolására szolgál, és általában nem szükséges megváltoztatni.",
"gui.computercraft.config.floppy_space_limit": "Floppy lemez tárhelykorlát (byte-ban)",
"gui.computercraft.config.floppy_space_limit.tooltip": "A floppy lemezek lemezterületének korlátja, byte-ban.",
"gui.computercraft.config.http.bandwidth": "Sávszélesség",
"gui.computercraft.config.http.bandwidth.global_download": "Globális letöltési korlát",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "Az egy másodperc alatt letölthető byte-ok száma, amelyet minden számítógép oszt meg. (byte/s).\nTartomány: > 1",
"gui.computercraft.config.http.bandwidth.global_upload": "Globális feltöltési korlát",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "Az egy másodperc alatt feltölthető byte-ok száma, amelyet minden számítógép oszt meg. (byte/s).\nTartomány: > 1",
"gui.computercraft.config.http.bandwidth.tooltip": "A számítógépek által használt sávszélességet korlátozza.",
"gui.computercraft.config.http.enabled": "HTTP API engedélyezése",
"gui.computercraft.config.http.enabled.tooltip": "Az \"http\" API engedélyezése a számítógépeken. Ha letiltjuk, akkor az \"http\", \"pastebin\" és \"wget\" programok is le lesznek tiltva, amelyeket sok felhasználó használ. Ajánlott engedélyezve hagyni, és a \"rules\" beállítás használatával finomhangolni a szabályozást.",
"gui.computercraft.config.http.max_requests": "Maximális egyidejű kérések",
"gui.computercraft.config.http.max_requests.tooltip": "Az egyszerre elküldhető http kérések száma egy számítógépen. A további kérések sorba állnak, és akkor kerülnek elküldésre, amikor a futó kérések befejeződtek. 0-ra állítva nincs korlátozás.\nTartomány: > 0",
"gui.computercraft.config.http.max_websockets": "Maximális egyidejű websockets",
"gui.computercraft.config.http.max_websockets.tooltip": "Az egyszerre megnyitható websockets száma egy számítógépen.\nTartomány: > 1",
"gui.computercraft.config.http.proxy.host": "Hosztnév",
"gui.computercraft.config.http.proxy.host.tooltip": "A proxy szerver hosztneve vagy IP-címe.",
"gui.computercraft.config.http.proxy.port.tooltip": "A proxy szerver portja.\nTartomány: 1 ~ 65536",
"gui.computercraft.config.http.proxy.tooltip": "Az HTTP és websocket kérések proxy szerveren keresztüli alagútba helyezése. Csak az \"use_proxy\" igazra állított HTTP szabályok esetén hatékony (alapértelmezésben kikapcsolva).",
"gui.computercraft.config.http.proxy.type": "Proxy típus",
"gui.computercraft.config.http.proxy.type.tooltip": "A használni kívánt proxy típus.\nMegengedett értékek: HTTP, HTTPS, SOCKS4, SOCKS5",
"gui.computercraft.config.http.rules": "Engedélyezés/tiltás szabályok",
"gui.computercraft.config.http.rules.tooltip": "Szabályok listája, amelyek szabályozzák az \"http\" API viselkedését adott domainek vagy IP-k számára. Minden szabály egy hosztnévre és egy opcionális portra vonatkozik, majd több tulajdonságot állít be a kéréshez. A szabályok sorrendben kerülnek értékelésre, így az előbbi szabályok felülírják a későbbieket.\n\nÉrvényes tulajdonságok:\n - \"host\" (kötelező): Az a domain vagy IP-cím, amelyre ez a szabály vonatkozik. Ez lehet domain név (\"pastebin.com\"), helyettesítő karakter (\"*.pastebin.com\") vagy CIDR jelölés (\"127.0.0.0/8\").\n - \"port\" (opcionális): Csak adott porttal rendelkező kérésekre vonatkozik, mint például 80 vagy 443.\n\n - \"action\" (opcionális): Azt határozza meg, hogy engedélyezett vagy tiltott legyen-e a kérés.\n - \"max_download\" (opcionális): A maximális méret (byte-ban), amit egy számítógép letölthet ezen a kérésen keresztül.\n - \"max_upload\" (opcionális): A maximális méret (byte-ban), amit egy számítógép feltölthet ezen a kérésen keresztül.\n - \"max_websocket_message\" (opcionális): A maximális méret (byte-ban), amit egy számítógép egy websocket csomagon keresztül küldhet vagy fogadhat.\n - \"use_proxy\" (opcionális): Proxy vagy HTTP/SOCKS proxy használata, ha be van állítva.",
"gui.computercraft.config.http.tooltip": "A HTTP API szabályozása",
"gui.computercraft.config.http.websocket_enabled": "Websockets engedélyezése",
"gui.computercraft.config.http.websocket_enabled.tooltip": "A websockets használatának engedélyezése az http segítségével. Ehhez az \"http_enable\" opciónak is igaznak kell lennie.",
"gui.computercraft.config.log_computer_errors": "Számítógép hibáinak naplózása",
"gui.computercraft.config.log_computer_errors.tooltip": "A perifériák és más Lua objektumok által kiváltott kivételek naplózása. Ez segíthet a mod készítőknek a hibák megoldásában, de túl sok naplózott hiba esetén log-túltelítettséget eredményezhet.",
"gui.computercraft.config.maximum_open_files": "Maximálisan megnyitható fájlok száma számítógépenként",
"gui.computercraft.config.maximum_open_files.tooltip": "Beállítja, hogy egy számítógép hány fájlt nyithat meg egyszerre. 0-ra állítva nincs korlátozás.\nTartomány: > 0",
"gui.computercraft.config.monitor_distance": "Monitor távolság",
"gui.computercraft.config.monitor_distance.tooltip": "A monitorok maximális megjelenítési távolsága. Alapértelmezés szerint a szabványos blokk entitás korlátot használja, de ha nagyobb monitorokat szeretne építeni, akkor ezt növelheti.\nTartomány: 16 ~ 1024",
"gui.computercraft.config.monitor_renderer": "Monitor renderelő",
"gui.computercraft.config.monitor_renderer.tooltip": "A monitorok renderelőjének beállítása. Általában érdemes \"legjobb\" értéken hagyni - ha a monitorok teljesítményproblémákat okoznak, kipróbálhat más renderelő opciókat.\nMegengedett értékek: BEST, TBO, VBO",
"gui.computercraft.config.peripheral": "Perifériák",
"gui.computercraft.config.peripheral.command_block_enabled": "Parancsblokk periféria engedélyezése",
"gui.computercraft.config.peripheral.command_block_enabled.tooltip": "Parancsblokk periféria támogatásának engedélyezése",
"gui.computercraft.config.peripheral.max_notes_per_tick": "Egy tick alatt játszható maximális hangjegyek száma",
"gui.computercraft.config.peripheral.max_notes_per_tick.tooltip": "A hangszóró által egy tick alatt lejátszható maximális hangjegyek száma.\nTartomány: > 1",
"gui.computercraft.config.peripheral.modem_high_altitude_range": "Modem hatótávolság (magas magasság)",
"gui.computercraft.config.peripheral.modem_high_altitude_range.tooltip": "A vezeték nélküli modemek hatótávolsága maximális magasságban, tiszta időben, méterben.\nTartomány: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm": "Modem hatótávolság (magas magasság, viharos idő)",
"gui.computercraft.config.peripheral.modem_high_altitude_range_during_storm.tooltip": "A vezeték nélküli modemek hatótávolsága maximális magasságban viharos időben, méterben.\nTartomány: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range": "Modem hatótávolság (alapértelmezett)",
"gui.computercraft.config.peripheral.modem_range.tooltip": "A vezeték nélküli modemek hatótávolsága alacsony magasságban, tiszta időben, méterben.\nTartomány: 0 ~ 100000",
"gui.computercraft.config.peripheral.modem_range_during_storm": "Modem hatótávolság (viharos idő)",
"gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "A vezeték nélküli modemek hatótávolsága alacsony magasságban, viharos időben, méterben.\nTartomány: 0 ~ 100000",
"gui.computercraft.config.peripheral.monitor_bandwidth": "Monitor sávszélesség",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "A monitoronként elküldhető adatkorlát *tick-enként*. Megjegyzés:\n - A sávszélességet a tömörítés előtt mérjük, így az ügyfélhez elküldött adat kisebb.\n - Nem veszi figyelembe a játékosok számát, akiknek egy csomagot küldünk. Egy monitor frissítése egy játékos számára ugyanolyan sávszélesség-korlátot fogyaszt, mint 20 játékosnak küldve.\n - Egy teljes méretű monitor ~25kb adatot küld. Az alapértelmezett érték (1MB) ~40 monitor frissítését teszi lehetővé egyetlen tick-ben.\n0-ra állítva letiltja.\nTartomány: > 0",
"gui.computercraft.config.peripheral.tooltip": "Különböző beállítások a perifériákhoz.",
"gui.computercraft.config.term_sizes": "Terminál méretek",
"gui.computercraft.config.term_sizes.computer": "Számítógép",
"gui.computercraft.config.term_sizes.computer.height": "Terminál magasság",
"gui.computercraft.config.term_sizes.computer.height.tooltip": "Tartomány: 1 ~ 255",
"gui.computercraft.config.term_sizes.computer.tooltip": "Számítógépek terminálmérete.",
"gui.computercraft.config.term_sizes.computer.width": "Terminál szélesség",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "Tartomány: 1 ~ 255",
"gui.computercraft.config.term_sizes.monitor.height": "Maximális monitor magasság",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "Tartomány: 1 ~ 32",
"gui.computercraft.config.term_sizes.monitor.tooltip": "A monitorok maximális mérete (blokkokban).",
"gui.computercraft.config.term_sizes.monitor.width": "Maximális monitor szélesség",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "Tartomány: 1 ~ 32",
"gui.computercraft.config.term_sizes.pocket_computer": "Zseb számítógép",
"gui.computercraft.config.term_sizes.pocket_computer.height": "Terminál magasság",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "Tartomány: 1 ~ 255",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "Zseb számítógépek terminálmérete.",
"gui.computercraft.config.term_sizes.pocket_computer.width": "Terminál szélesség",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "Tartomány: 1 ~ 255",
"gui.computercraft.config.term_sizes.tooltip": "Különböző számítógépek terminálméretének konfigurálása.\nA nagyobb terminálok több sávszélességet igényelnek, ezért óvatosan használjuk.",
"gui.computercraft.config.turtle": "Teknősök",
"gui.computercraft.config.turtle.advanced_fuel_limit": "Fejlett teknős üzemanyag korlát",
"gui.computercraft.config.turtle.advanced_fuel_limit.tooltip": "A fejlett teknősök üzemanyag korlátja.\nTartomány: > 0",
"gui.computercraft.config.turtle.can_push": "A teknősök tolják az entitásokat",
"gui.computercraft.config.turtle.can_push.tooltip": "Ha be van állítva igazra, a teknősök eltolják az entitásokat az útból, ha van elég hely, ahelyett, hogy megállnának.",
"gui.computercraft.config.turtle.need_fuel": "Üzemanyag szükséges",
"gui.computercraft.config.turtle.need_fuel.tooltip": "Beállítja, hogy a teknősöknek szükségük van-e üzemanyagra a mozgáshoz.",
"gui.computercraft.config.turtle.normal_fuel_limit": "Teknős üzemanyag korlát",
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "A teknősök üzemanyag korlátja.\nTartomány: > 0",
"gui.computercraft.config.turtle.tooltip": "Különböző beállítások a teknősökhöz.",
"gui.computercraft.config.upload_max_size": "Feltöltési fájlméret korlát (byte-ban)",
"gui.computercraft.config.upload_max_size.tooltip": "A feltöltési fájlméret korlátja, byte-ban. A tartománynak 1 KiB és 16 MiB között kell lennie.\nVegye figyelembe, hogy a feltöltések egyetlen tick alatt kerülnek feldolgozásra - a nagy fájlok vagy a gyenge hálózati teljesítmény leállíthatják a hálózati szálat. És figyeljünk a lemezterületre!\nTartomány: 1024 ~ 16777216",
"gui.computercraft.config.upload_nag_delay": "Feltöltési figyelmeztetési késleltetés",
"gui.computercraft.config.upload_nag_delay.tooltip": "Az a késleltetés másodpercben, ami után figyelmeztetést kapunk a feldolgozatlan importokról. 0-ra állítva letiltja.\nTartomány: 0 ~ 60",
"gui.computercraft.pocket_computer_overlay": "Zseb számítógép megnyitva. Nyomd meg az ESC-t a bezáráshoz.",
"gui.computercraft.terminal": "Számítógép terminál",
"gui.computercraft.tooltip.computer_id": "Számítógép ID: %s",
"gui.computercraft.tooltip.copy": "Másolás vágólapra",
"gui.computercraft.tooltip.disk_id": "Lemez ID: %s",
"gui.computercraft.tooltip.terminate": "A futó kód leállítása",
"gui.computercraft.tooltip.terminate.key": "Tartsd lenyomva a Ctrl+T billentyűket",
"gui.computercraft.tooltip.turn_off": "Kapcsold ki ezt a számítógépet",
"gui.computercraft.tooltip.turn_off.key": "Tartsd lenyomva a Ctrl+S billentyűket",
"gui.computercraft.tooltip.turn_on": "Kapcsold be ezt a számítógépet",
"gui.computercraft.upload.failed": "Feltöltés sikertelen",
"gui.computercraft.upload.failed.computer_off": "Be kell kapcsolnod a számítógépet a fájlok feltöltéséhez.",
"gui.computercraft.upload.failed.corrupted": "Fájlok megsérültek a feltöltés során. Kérlek próbáld újra.",
"gui.computercraft.upload.failed.generic": "Feltöltés sikertelen (%s)",
"gui.computercraft.upload.failed.name_too_long": "A fájlnevek túl hosszúak a feltöltéshez.",
"gui.computercraft.upload.failed.too_many_files": "Nem lehet ilyen sok fájlt feltölteni.",
"gui.computercraft.upload.failed.too_much": "A fájlok túl nagyok a feltöltéshez.",
"gui.computercraft.upload.no_response": "Fájlok átvitele",
"gui.computercraft.upload.no_response.msg": "A számítógéped nem használta a továbbított fájlokat. Lehet, hogy futtatnod kell a %s programot, majd újra próbálkozni.",
"item.computercraft.disk": "Floppy lemez",
"item.computercraft.pocket_computer_advanced": "Fejlett zseb számítógép",
"item.computercraft.pocket_computer_advanced.upgraded": "Fejlett %s zseb számítógép",
"item.computercraft.pocket_computer_normal": "Zseb számítógép",
"item.computercraft.pocket_computer_normal.upgraded": "%s zseb számítógép",
"item.computercraft.printed_book": "Nyomtatott könyv",
"item.computercraft.printed_page": "Nyomtatott oldal",
"item.computercraft.printed_pages": "Nyomtatott oldalak",
"item.computercraft.treasure_disk": "Floppy lemez",
"tag.item.computercraft.computer": "Számítógépek",
"tag.item.computercraft.monitor": "Monitorok",
"tag.item.computercraft.turtle": "Teknősök",
"tag.item.computercraft.wired_modem": "Vezetékes modemek",
"tracking_field.computercraft.avg": "%s (átlag)",
"tracking_field.computercraft.computer_tasks.name": "Feladatok",
"tracking_field.computercraft.count": "%s (szám)",
"tracking_field.computercraft.fs.name": "Fájlrendszer műveletek",
"tracking_field.computercraft.http_download.name": "HTTP letöltés",
"tracking_field.computercraft.http_requests.name": "HTTP kérések",
"tracking_field.computercraft.http_upload.name": "HTTP feltöltés",
"tracking_field.computercraft.peripheral.name": "Periféria hívások",
"tracking_field.computercraft.server_tasks.name": "Szerver feladatok",
"tracking_field.computercraft.turtle_ops.name": "Teknős műveletek",
"tracking_field.computercraft.websocket_incoming.name": "Websocket bejövő",
"tracking_field.computercraft.websocket_outgoing.name": "Websocket kimenő",
"upgrade.computercraft.speaker.adjective": "Hangos",
"upgrade.computercraft.wireless_modem_normal.adjective": "Vezeték nélküli",
"upgrade.minecraft.crafting_table.adjective": "Kézműves",
"upgrade.minecraft.diamond_axe.adjective": "Fanyeső",
"upgrade.minecraft.diamond_hoe.adjective": "Gazdálkodó",
"upgrade.minecraft.diamond_pickaxe.adjective": "Bányász",
"upgrade.minecraft.diamond_shovel.adjective": "Ásó",
"upgrade.minecraft.diamond_sword.adjective": "Közelharci"
}

View File

@ -1,19 +1,19 @@
{
"argument.computercraft.argument_expected": "预期自变量",
"argument.computercraft.computer.distance": "实体距离",
"argument.computercraft.computer.family": "电脑类别",
"argument.computercraft.computer.id": "电脑ID",
"argument.computercraft.computer.family": "计算机类别",
"argument.computercraft.computer.id": "计算机ID",
"argument.computercraft.computer.instance": "唯一实例ID",
"argument.computercraft.computer.label": "电脑标签",
"argument.computercraft.computer.label": "计算机标签",
"argument.computercraft.computer.many_matching": "多台计算机匹配'%s' (实例%s)",
"argument.computercraft.computer.no_matching": "没有计算机匹配'%s'",
"argument.computercraft.tracking_field.no_field": "未知字段'%s'",
"argument.computercraft.unknown_computer_family": "未知电脑类别 '%s'",
"block.computercraft.cable": "网络缆",
"argument.computercraft.unknown_computer_family": "未知计算机类别“%s”",
"block.computercraft.cable": "网络线缆",
"block.computercraft.computer_advanced": "高级计算机",
"block.computercraft.computer_command": "命令电脑",
"block.computercraft.computer_command": "命令计算机",
"block.computercraft.computer_normal": "计算机",
"block.computercraft.disk_drive": "盘驱动器",
"block.computercraft.disk_drive": "盘驱动器",
"block.computercraft.monitor_advanced": "高级显示器",
"block.computercraft.monitor_normal": "显示器",
"block.computercraft.printer": "打印机",
@ -29,36 +29,36 @@
"block.computercraft.wired_modem_full": "有线调制解调器",
"block.computercraft.wireless_modem_advanced": "末影调制解调器",
"block.computercraft.wireless_modem_normal": "无线调制解调器",
"chat.computercraft.wired_modem.peripheral_connected": "外部设备\"%s\"连接到网络",
"chat.computercraft.wired_modem.peripheral_disconnected": "外部设备\"%s\"与网络断开连接",
"chat.computercraft.wired_modem.peripheral_connected": "外部设备\"%s\"连接到网络",
"chat.computercraft.wired_modem.peripheral_disconnected": "外部设备\"%s\"与网络断开连接",
"commands.computercraft.desc": "/computercraft命令提供各种调试和管理工具用于控制和与计算机交互.",
"commands.computercraft.dump.action": "查看有关此计算机的更多信息",
"commands.computercraft.dump.desc": "显示所有计算机的状态或某台计算机的特定信息. 你可以指定计算机的实例id (例如. 123), 计算机id (例如. #123)或标签(例如. \"@My Computer\").",
"commands.computercraft.dump.open_path": "查看该电脑的文件",
"commands.computercraft.dump.synopsis": "显示计算机的状态.",
"commands.computercraft.generic.additional_rows": "%d额外的行…",
"commands.computercraft.generic.exception": "未处理的异常(%s)",
"commands.computercraft.generic.no": "N",
"commands.computercraft.generic.yes": "Y",
"commands.computercraft.dump.open_path": "查看此计算机的文件",
"commands.computercraft.dump.synopsis": "显示计算机的状态",
"commands.computercraft.generic.additional_rows": "%d额外的行…",
"commands.computercraft.generic.exception": "未处理的异常%s",
"commands.computercraft.generic.no": "",
"commands.computercraft.generic.yes": "",
"commands.computercraft.help.desc": "显示该帮助信息",
"commands.computercraft.help.no_children": "%s没有子命令",
"commands.computercraft.help.no_command": "没有这样的命令'%s'",
"commands.computercraft.help.no_command": "没有这样的命令“%s”",
"commands.computercraft.help.synopsis": "为特定的命令提供帮助",
"commands.computercraft.queue.desc": "发送computer_command事件到命令计算机,并传递其他参数. 这主要是为地图制作者设计的, 作为/trigger更加计算机友好的版本. 任何玩家都可以运行命令, 这很可能是通过文本组件的点击事件完成的.",
"commands.computercraft.queue.synopsis": "将computer_command事件发送到命令计算机",
"commands.computercraft.shutdown.desc": "关闭列出的计算机或全部计算机(如果未指定). 你可以指定计算机的实例id (例如. 123), 计算机id (例如. #123)或标签(例如. \"@My Computer\").",
"commands.computercraft.shutdown.desc": "关闭列出的计算机或全部计算机(如果未指定)。你可以指定计算机的实例id例如 123计算机id例如 #123或标签例如 \"@My Computer\")。",
"commands.computercraft.shutdown.done": "关闭%s/%s计算机",
"commands.computercraft.shutdown.synopsis": "远程关闭计算机.",
"commands.computercraft.synopsis": "各种控制计算机的命令.",
"commands.computercraft.tp.action": "传送到这台电脑",
"commands.computercraft.tp.desc": "传送到计算机的位置. 你可以指定计算机的实例id (例如. 123)或计算机id (例如. #123).",
"commands.computercraft.tp.synopsis": "传送到特定的计算机.",
"commands.computercraft.track.desc": "跟踪计算机执行的时间以及它们处理的事件数. 这以/forge track类似的方式呈现信息可用于诊断滞后.",
"commands.computercraft.shutdown.synopsis": "远程关闭计算机",
"commands.computercraft.synopsis": "各种控制计算机的命令",
"commands.computercraft.tp.action": "传送到这台计算机",
"commands.computercraft.tp.desc": "传送到计算机的位置。你可以指定计算机的实例id例如 123或计算机id例如 #123",
"commands.computercraft.tp.synopsis": "传送到特定的计算机",
"commands.computercraft.track.desc": "跟踪计算机执行的时间以及它们处理的事件数。这以/forge track类似的方式呈现信息可能有助于诊断卡顿与滞后。",
"commands.computercraft.track.dump.computer": "计算机",
"commands.computercraft.track.dump.desc": "输出计算机跟踪的最新结果.",
"commands.computercraft.track.dump.desc": "输出计算机跟踪的最新结果",
"commands.computercraft.track.dump.no_timings": "没有时序可用",
"commands.computercraft.track.dump.synopsis": "输出最新的跟踪结果",
"commands.computercraft.track.start.desc": "开始跟踪所有计算机的执行时间和事件计数. 这将放弃先前运行的结果.",
"commands.computercraft.track.start.desc": "开始跟踪所有计算机的执行时间和事件计数。这将放弃先前运行的结果。",
"commands.computercraft.track.start.stop": "运行%s以停止跟踪并查看结果",
"commands.computercraft.track.start.synopsis": "开始跟踪所有计算机",
"commands.computercraft.track.stop.action": "点击停止跟踪",
@ -67,16 +67,16 @@
"commands.computercraft.track.stop.synopsis": "停止跟踪所有计算机",
"commands.computercraft.track.synopsis": "跟踪计算机的执行时间.",
"commands.computercraft.turn_on.desc": "打开列出的计算机. 你可以指定计算机的实例id (例如. 123), 计算机id (例如. #123)或标签(例如. \"@My Computer\").",
"commands.computercraft.turn_on.done": "打开%s/%s计算机",
"commands.computercraft.turn_on.done": "打开%s/%s计算机",
"commands.computercraft.turn_on.synopsis": "远程打开计算机.",
"commands.computercraft.view.action": "查看此计算机",
"commands.computercraft.view.desc": "打开计算机的终端,允许远程控制计算机. 这不提供对海龟库存的访问. 你可以指定计算机的实例id (例如. 123)或计算机id (例如. #123).",
"commands.computercraft.view.not_player": "无法为非玩家打开终端",
"commands.computercraft.view.synopsis": "查看计算机的终端.",
"gui.computercraft.config.command_require_creative": "命令电脑需要创造模式",
"gui.computercraft.config.command_require_creative": "命令计算机需要创造模式",
"gui.computercraft.config.command_require_creative.tooltip": "玩家需要处于创造模式并为管理员才能与命令计算机交互。\n这是原版命令方块的默认行为。",
"gui.computercraft.config.computer_space_limit": "计算机空间限制(字节)",
"gui.computercraft.config.computer_space_limit.tooltip": "计算机和海龟的盘空间限制,以字节为单位。",
"gui.computercraft.config.computer_space_limit.tooltip": "计算机和海龟的盘空间限制,以字节为单位。",
"gui.computercraft.config.default_computer_settings": "默认计算机设置",
"gui.computercraft.config.default_computer_settings.tooltip": "以逗号分隔的默认系统设置列表,用于在新计算机上设置。\n示例“shell.autocomplete=false,lua.autocomplete=false,edit.autocomplete=false”\n将禁用所有自动补全功能。",
"gui.computercraft.config.disabled_generic_methods": "禁用的通用方法",
@ -89,15 +89,15 @@
"gui.computercraft.config.execution.max_main_global_time": "服务器全局tick时间限制",
"gui.computercraft.config.execution.max_main_global_time.tooltip": "在1刻内执行任务所花费的最大时间以毫秒为单位。\n请注意我们很可能会超出此限制因为无法确定需要多长时间——这旨在成为平均时间的上限。",
"gui.computercraft.config.execution.tooltip": "控制计算机的执行行为。这主要用于微调服务器,一般不需要触碰。",
"gui.computercraft.config.floppy_space_limit": "软盘空间限制(字节)",
"gui.computercraft.config.floppy_space_limit.tooltip": "软盘的磁盘空间限制,以字节为单位。",
"gui.computercraft.config.floppy_space_limit": "软盘空间限制(字节)",
"gui.computercraft.config.floppy_space_limit.tooltip": "软盘的存储空间限制,以字节为单位。",
"gui.computercraft.config.http": "HTTP",
"gui.computercraft.config.http.bandwidth": "带宽",
"gui.computercraft.config.http.bandwidth.global_download": "全局下载限速",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "每秒钟可以下载的字节数. 所有电脑共享该设置 (bytes/s).",
"gui.computercraft.config.http.bandwidth.global_download.tooltip": "每秒钟内可下载的字节数。此值在所有计算机之间共享。(字节/秒)",
"gui.computercraft.config.http.bandwidth.global_upload": "全局上传限速",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "每秒钟可以上传的字节数. 所有电脑共享该设置 (bytes/s).",
"gui.computercraft.config.http.bandwidth.tooltip": "限制电脑可以使用的带宽.",
"gui.computercraft.config.http.bandwidth.global_upload.tooltip": "每秒钟内可上传的字节数。此值在所有计算机之间共享。(字节/秒)",
"gui.computercraft.config.http.bandwidth.tooltip": "限制计算机可以使用的带宽。",
"gui.computercraft.config.http.enabled": "启用HTTP API",
"gui.computercraft.config.http.enabled.tooltip": "在计算机上启用“http”API。禁用此功能还会禁用许多用户依赖的“pastebin”和“wget”程序。建议保持此功能开启并使用“规则”配置选项来实施更精细的控制。",
"gui.computercraft.config.http.max_requests": "最大并发请求数",
@ -112,7 +112,7 @@
"gui.computercraft.config.http.proxy.tooltip": "通过代理服务器传输HTTP和WebSocket请求。仅影响将“use_proxy”设为true默认关闭的HTTP规则。\n如果代理需要认证请在与“computercraft-server.toml”相同的目录中创建一个“computercraft-proxy.pw”文件其中包含以冒号分隔的用户名和密码例如“myuser:mypassword”。对于SOCKS4代理只需要用户名。",
"gui.computercraft.config.http.proxy.type": "代理类型",
"gui.computercraft.config.http.proxy.type.tooltip": "代理使用的协议.",
"gui.computercraft.config.http.rules": "允许/阻止规则",
"gui.computercraft.config.http.rules": "允许/拒绝规则",
"gui.computercraft.config.http.rules.tooltip": "控制特定域或IP的“http”API行为的规则列表。每条规则匹配一个主机名和一个可选端口然后为请求设置多个属性。规则按顺序进行评估这意味着较早的规则将覆盖较晚的规则。\n\n有效属性\n —“host”必需此规则匹配的域或 IP 地址。这可能是域名“pastebin.com”、通配符“*.pastebin.com”或 CIDR 表示法“127.0.0.0/8”。\n —“port”可选仅匹配特定端口的请求例如80或443。\n\n —“action”可选允许还是拒绝此请求。\n —“max_download”可选计算机在此请求中可以下载的最大大小以字节为单位。\n —“max_upload”可选计算机在此请求中可以上传的最大大小以字节为单位。\n —“max_websocket_message”可选计算机在一个WebSocket数据包中可以发送或接收的最大大小以字节为单位。\n —“use_proxy”可选如果已配置则启用HTTP/SOCKS代理。",
"gui.computercraft.config.http.tooltip": "控制HTTP API",
"gui.computercraft.config.http.websocket_enabled": "启用websockets",
@ -121,11 +121,11 @@
"gui.computercraft.config.log_computer_errors.tooltip": "记录外设和其他Lua对象抛出的异常。这可让Mod作者更轻松地调试问题但如果人们使用有缺陷的方法则可能导致日志垃圾。",
"gui.computercraft.config.maximum_open_files": "每台计算机打开的最大文件数",
"gui.computercraft.config.maximum_open_files.tooltip": "设置计算机可同时打开的文件数。设为0表示无限制。",
"gui.computercraft.config.monitor_distance": "监视器距离",
"gui.computercraft.config.monitor_distance.tooltip": "监视器渲染的最大距离。默认为标准图块实体限制,但如果你希望建造更大的监视器,则可以扩展。",
"gui.computercraft.config.monitor_renderer": "监视器渲染器",
"gui.computercraft.config.monitor_renderer.tooltip": "用于监视器的渲染器。通常,应将其保持在“最佳”状态——如果监视器存在性能问题,你可以尝试其他渲染器。",
"gui.computercraft.config.peripheral": "外设备",
"gui.computercraft.config.monitor_distance": "显示器距离",
"gui.computercraft.config.monitor_distance.tooltip": "显示器渲染的最大距离。默认为标准图块实体限制,但如果你希望建造更大的显示器,则可以调高此值。",
"gui.computercraft.config.monitor_renderer": "显示器渲染器",
"gui.computercraft.config.monitor_renderer.tooltip": "用于显示器的渲染器。通常,应将其保持在“最佳”状态——如果显示器存在性能问题,你可以尝试其他渲染器。",
"gui.computercraft.config.peripheral": "外设备",
"gui.computercraft.config.peripheral.command_block_enabled": "启用命令方块外设",
"gui.computercraft.config.peripheral.command_block_enabled.tooltip": "启用命令方块外设支持",
"gui.computercraft.config.peripheral.max_notes_per_tick": "计算机一次可以播放的最大音符数量",
@ -138,8 +138,8 @@
"gui.computercraft.config.peripheral.modem_range.tooltip": "晴朗天气下低海拔无线调制解调器的范围,以米为单位。",
"gui.computercraft.config.peripheral.modem_range_during_storm": "调制解调器范围(恶劣天气)",
"gui.computercraft.config.peripheral.modem_range_during_storm.tooltip": "暴风雨天气下低海拔无线调制解调器的范围,以米为单位。",
"gui.computercraft.config.peripheral.monitor_bandwidth": "监视器带宽",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "*每刻*可以发送多少监视器数据的限制。请注意:\n —带宽是在压缩之前测量的,因此发送到客户端的数据较少。\n —这忽略了数据包发送到的玩家数量。为一个玩家更新监视器所消耗的带宽限制与发送到20个玩家的带宽限制相同。\n —全尺寸监视器发送约25kb的数据。因此默认值1MB允许在1刻内更新约40个监视器。\n设为0以禁用。",
"gui.computercraft.config.peripheral.monitor_bandwidth": "显示器带宽",
"gui.computercraft.config.peripheral.monitor_bandwidth.tooltip": "*每刻*可以发送多少显示器数据的限制。请注意:\n - 带宽是在压缩之前测量的,因此发送到客户端的数据较少。\n - 这忽略了数据包发送到的玩家数量。为一个玩家更新显示器所消耗的带宽限制与发送到20个玩家的带宽限制相同。\n - 全尺寸显示器发送约25kb的数据。因此默认值1MB允许在1刻内更新约40个显示器。\n设为0以禁用。",
"gui.computercraft.config.peripheral.tooltip": "与外设相关的各种选项。",
"gui.computercraft.config.term_sizes": "终端尺寸",
"gui.computercraft.config.term_sizes.computer": "计算机",
@ -148,18 +148,18 @@
"gui.computercraft.config.term_sizes.computer.tooltip": "计算机的终端尺寸。",
"gui.computercraft.config.term_sizes.computer.width": "终端宽度",
"gui.computercraft.config.term_sizes.computer.width.tooltip": "计算机终端宽度",
"gui.computercraft.config.term_sizes.monitor": "监视器",
"gui.computercraft.config.term_sizes.monitor.height": "最大监视器高度",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "监视器的最大高度",
"gui.computercraft.config.term_sizes.monitor.tooltip": "监视器的最大尺寸(以方块为单位)。",
"gui.computercraft.config.term_sizes.monitor.width": "最大监视器宽度",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "监视器的最大宽度",
"gui.computercraft.config.term_sizes.pocket_computer": "手提计算机",
"gui.computercraft.config.term_sizes.monitor": "显示器",
"gui.computercraft.config.term_sizes.monitor.height": "最大显示器高度",
"gui.computercraft.config.term_sizes.monitor.height.tooltip": "显示器的最大高度",
"gui.computercraft.config.term_sizes.monitor.tooltip": "显示器的最大尺寸(以方块为单位)。",
"gui.computercraft.config.term_sizes.monitor.width": "最大显示器宽度",
"gui.computercraft.config.term_sizes.monitor.width.tooltip": "显示器的最大宽度",
"gui.computercraft.config.term_sizes.pocket_computer": "便携式计算机",
"gui.computercraft.config.term_sizes.pocket_computer.height": "终端高度",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "手提计算机终端高度",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "手提计算机的终端尺寸。",
"gui.computercraft.config.term_sizes.pocket_computer.height.tooltip": "便携式计算机终端高度",
"gui.computercraft.config.term_sizes.pocket_computer.tooltip": "便携式计算机终端尺寸",
"gui.computercraft.config.term_sizes.pocket_computer.width": "终端宽度",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "手提计算机终端宽度",
"gui.computercraft.config.term_sizes.pocket_computer.width.tooltip": "便携式计算机终端宽度",
"gui.computercraft.config.term_sizes.tooltip": "配置各种计算机终端的尺寸。\n终端越大需要的带宽越多请谨慎使用。",
"gui.computercraft.config.turtle": "海龟",
"gui.computercraft.config.turtle.advanced_fuel_limit": "高级海龟燃料限制",
@ -172,14 +172,14 @@
"gui.computercraft.config.turtle.normal_fuel_limit.tooltip": "海龟的燃料限制。",
"gui.computercraft.config.turtle.tooltip": "与海龟相关的各种选项。",
"gui.computercraft.config.upload_max_size": "文件上传大小限制(字节)",
"gui.computercraft.config.upload_max_size.tooltip": "文件上传大小限制以字节为单位。必须在1KiB到16MiB之间。\n请记住上传在1刻内处理——大文件或不佳的网络性能可能会使网络线程停滞。并且注意磁盘空间!",
"gui.computercraft.config.upload_max_size.tooltip": "文件上传大小限制以字节为单位。必须在1KiB到16MiB之间。\n请记住上传在1刻内处理——大文件或不佳的网络性能可能会使网络线程停滞。记得注意软盘空间!",
"gui.computercraft.config.upload_nag_delay": "上传延迟",
"gui.computercraft.config.upload_nag_delay.tooltip": "通知未处理的导入之前延迟的秒数。设为0以禁用。",
"gui.computercraft.pocket_computer_overlay": "手提计算机已打开。按ESC键关闭。",
"gui.computercraft.pocket_computer_overlay": "便携式计算机已打开。按ESC键可关闭。",
"gui.computercraft.terminal": "计算机终端",
"gui.computercraft.tooltip.computer_id": "计算机ID: %s",
"gui.computercraft.tooltip.copy": "复制到剪贴板",
"gui.computercraft.tooltip.disk_id": "磁盘ID: %s",
"gui.computercraft.tooltip.disk_id": "软盘ID%s",
"gui.computercraft.tooltip.terminate": "停止当前运行的代码",
"gui.computercraft.tooltip.terminate.key": "按住Ctrl+T",
"gui.computercraft.tooltip.turn_off": "关闭这台计算机",
@ -195,19 +195,19 @@
"gui.computercraft.upload.no_response": "传输文件",
"gui.computercraft.upload.no_response.msg": "你的计算机尚未使用你传输的文件。你可能需要运行%s程序并重试。",
"item.computercraft.disk": "软盘",
"item.computercraft.pocket_computer_advanced": "高级手提计算机",
"item.computercraft.pocket_computer_advanced.upgraded": "高级%s手提计算机",
"item.computercraft.pocket_computer_normal": "手提计算机",
"item.computercraft.pocket_computer_normal.upgraded": "%s手提计算机",
"item.computercraft.pocket_computer_advanced": "高级便携式计算机",
"item.computercraft.pocket_computer_advanced.upgraded": "高级便携式计算机(%s",
"item.computercraft.pocket_computer_normal": "便携式计算机",
"item.computercraft.pocket_computer_normal.upgraded": "便携式计算机(%s",
"item.computercraft.printed_book": "打印书",
"item.computercraft.printed_page": "打印纸",
"item.computercraft.printed_pages": "打印纸",
"item.computercraft.printed_pages": "一摞打印纸",
"item.computercraft.treasure_disk": "软盘",
"itemGroup.computercraft": "ComputerCraft",
"tag.item.computercraft.computer": "计算机",
"tag.item.computercraft.disks": "盘",
"tag.item.computercraft.disks": "盘",
"tag.item.computercraft.dyeable": "可染色物品",
"tag.item.computercraft.monitor": "监视器",
"tag.item.computercraft.monitor": "显示器",
"tag.item.computercraft.pocket_computers": "便携式计算机",
"tag.item.computercraft.turtle": "海龟",
"tag.item.computercraft.turtle_can_place": "可放置海龟物品",
@ -220,12 +220,12 @@
"tracking_field.computercraft.http_requests.name": "HTTP请求",
"tracking_field.computercraft.http_upload.name": "HTTP上传",
"tracking_field.computercraft.max": "%s (最大)",
"tracking_field.computercraft.peripheral.name": "外部设备呼叫",
"tracking_field.computercraft.peripheral.name": "外部设备调用",
"tracking_field.computercraft.server_tasks.name": "服务器任务",
"tracking_field.computercraft.turtle_ops.name": "海龟行动",
"tracking_field.computercraft.turtle_ops.name": "海龟操作",
"tracking_field.computercraft.websocket_incoming.name": "Websocket传入",
"tracking_field.computercraft.websocket_outgoing.name": "Websocket传出",
"upgrade.computercraft.speaker.adjective": "喧闹",
"upgrade.computercraft.speaker.adjective": "嘈杂",
"upgrade.computercraft.wireless_modem_advanced.adjective": "末影",
"upgrade.computercraft.wireless_modem_normal.adjective": "无线",
"upgrade.minecraft.crafting_table.adjective": "合成",

View File

@ -1,3 +1,11 @@
# New features in CC: Tweaked 1.116.1
* Update translations.
Several bug fixes:
* Fix NPE when mcfunction files contain CC commands.
* Fix crash in `speaker.playAudio` on noisy pocket computers.
# New features in CC: Tweaked 1.116.0
* Add `turtle.getEquippedLeft()` and `turtle.getEquippedRight()`.

View File

@ -1,22 +1,9 @@
New features in CC: Tweaked 1.116.0
New features in CC: Tweaked 1.116.1
* Add `turtle.getEquippedLeft()` and `turtle.getEquippedRight()`.
* Add item tags for floppy disks and pocket computers.
* Support multi-line strings and comments in `edit`.
* Computer and pocket computer terminal sizes can be set with the `computercraft:terminal_size` component.
* Border and sidebar textures now use vanilla's nine-sliced format.
* Allow equipping upgrades on the bottom of a pocket computer.
* Update translations.
Several bug fixes:
* Ignore shader compilation errors when running with Pojav.
* Fix several issues with character input.
* Fix pocket computer dyes being lost when equipping/unequipping upgrades.
* Fix superflous warnings from allocation tracking.
* Fix `__lt`/`__le` not working on heterogeneous types.
* Many documentation fixes (Lemmmy, matematikaadit, McJack12).
* Fix `0` being treated as a valid colour in `window` and `colour.toBlit`.
* Fix out-of-bounds when pasting too lon text.
* Fix syntax highlighting of string escapes (LorneHyde).
* Fix sidebar texture of advanced computers being offset.
* Fix NPE when mcfunction files contain CC commands.
* Fix crash in `speaker.playAudio` on noisy pocket computers.
Type "help changelog" to see the full version history.

View File

@ -144,12 +144,12 @@ public class ComputerCraft {
ComputerCraftAPI.registerGenericSource(new InventoryMethods());
Peripherals.addGenericLookup(InventoryMethods::extractContainer);
if (FabricLoader.getInstance().isModLoaded(CreateIntegration.ID)) CreateIntegration.setup();
}
private static <B extends FriendlyByteBuf, T extends CustomPacketPayload> void registerPayloadType(PayloadTypeRegistry<B> registry, CustomPacketPayload.TypeAndCodec<B, T> type) {
registry.register(type.type(), type.codec());
if (FabricLoader.getInstance().isModLoaded(CreateIntegration.ID)) CreateIntegration.setup();
}
private record ReloadListener(ResourceLocation name, PreparableReloadListener listener)

View File

@ -17,6 +17,8 @@ import java.io.InputStream;
import java.io.UncheckedIOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
@ -112,11 +114,17 @@ public class TransformingClassLoader extends ClassLoader {
return super.getResourceAsStream(name);
}
var bytes = getTransformed(path);
this.lastFile = new TransformedClass(name, bytes);
return new ByteArrayInputStream(bytes);
}
private byte[] getTransformed(Path path) {
ClassReader reader;
try (var stream = Files.newInputStream(path)) {
reader = new ClassReader(stream);
} catch (IOException e) {
throw new UncheckedIOException("Failed reading " + name, e);
throw new UncheckedIOException("Failed reading " + path, e);
}
var writer = new ClassWriter(reader, 0);
@ -125,9 +133,7 @@ public class TransformingClassLoader extends ClassLoader {
for (var transformer : transformers) sink = transformer.apply(className, sink);
reader.accept(sink, 0);
var bytes = writer.toByteArray();
this.lastFile = new TransformedClass(name, bytes);
return new ByteArrayInputStream(bytes);
return writer.toByteArray();
}
@Override
@ -142,7 +148,7 @@ public class TransformingClassLoader extends ClassLoader {
return new IteratorEnumeration<>(
(path == null ? classpath.stream().map(x -> x.resolve(name)) : Stream.of(path))
.filter(Files::exists)
.map(TransformingClassLoader::toURL)
.map(this::toURL)
.iterator()
);
}
@ -160,9 +166,12 @@ public class TransformingClassLoader extends ClassLoader {
}
}
private static URL toURL(Path path) {
private URL toURL(Path path) {
try {
return path.toUri().toURL();
var url = path.toUri().toURL();
if (!path.toString().endsWith(".class")) return url;
return new URL(url.getProtocol(), url.getHost(), url.getPort(), url.getFile(), new TransformingHandler(path));
} catch (MalformedURLException e) {
throw new IllegalStateException("Cannot convert " + path + " to a URL", e);
}
@ -171,4 +180,31 @@ public class TransformingClassLoader extends ClassLoader {
@SuppressWarnings("ArrayRecordComponent")
private record TransformedClass(String name, byte[] contents) {
}
private final class TransformingHandler extends URLStreamHandler {
private final Path path;
private TransformingHandler(Path path) {
this.path = path;
}
@Override
protected URLConnection openConnection(URL u) {
return new URLConnection(u) {
private @Nullable InputStream stream;
@Override
public void connect() {
if (stream == null) stream = new ByteArrayInputStream(getTransformed(path));
}
@Override
public InputStream getInputStream() {
connect();
if (stream == null) throw new NullPointerException("Stream cannot be null");
return stream;
}
};
}
}
}