Merge pull request #3590 from refinedmods/release/1.12.4

Release v1.12.4
This commit is contained in:
Raoul
2023-11-06 08:18:14 +01:00
committed by GitHub
118 changed files with 2134 additions and 334 deletions

View File

@@ -88,7 +88,7 @@ Documentation must be kept up to date when adding or changing functionality.
### Javadoc
Javadoc is available after every release on https://refinedmods.com/refinedstorage/.
Javadoc is available after every release on https://refinedmods.com/javadoc/refinedstorage.
### API annotations
@@ -196,7 +196,7 @@ The workflow takes care of the following:
- Running a build.
- Publishing on [GitHub packages](https://github.com/refinedmods/refinedstorage/packages) and
CreeperHost Maven.
- Publishing Javadoc on [GitHub pages](https://github.com/refinedmods/refinedstorage/tree/gh-pages).
- Publishing Javadoc on [GitHub pages](https://github.com/refinedmods/javadoc).
- Deploying on [GitHub releases](https://github.com/refinedmods/refinedstorage/releases).
- Announcing the release on Discord and Twitter.
- Creating a PR that merges `main` back into `develop` to get the changes to `CHANGELOG.md` and `build.gradle`

View File

@@ -7,6 +7,26 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.12.4] - 2023-11-05
### Added
- Re-added compatibility with Inventory Sorter.
### Fixed
- Various world corruption issues if Refined Storage blocks were removed unexpectedly or with another mod.
- Fixed Grid search bar not being able to lose focus.
- Fixed JEI transfer crash for larger processing recipes.
- Fixed rare autocrafting crash.
- Fixed some models in inactive state being emissive.
- Fixed Controller item not rendering energy state correctly.
- Fixed duplication bug with the Crafting Grid.
- Fixed fluid duplication bug with the Importer and GregTechCEu machines.
- Attempted to fix issue where Grid doesn't load items and requires a client restart.
- Fixed Crafter Manager slots being able to sort with Inventory Sorter.
- Fixed duplication bug in the Crafter with Inventory Sorter.
## [1.12.3] - 2023-07-07
### Fixed
@@ -3475,7 +3495,9 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Internal test release.
[Unreleased]: https://github.com/refinedmods/refinedstorage/compare/v1.12.3...HEAD
[Unreleased]: https://github.com/refinedmods/refinedstorage/compare/v1.12.4...HEAD
[1.12.4]: https://github.com/refinedmods/refinedstorage/compare/v1.12.3...v1.12.4
[1.12.3]: https://github.com/refinedmods/refinedstorage/compare/v1.12.2...v1.12.3

View File

@@ -4,7 +4,7 @@
<p>Refined Storage is a mass storage mod for Minecraft that offers the player a network-based storage system, allowing
them to store items and fluids on a massively expandable device network.</p>
[![Build Status](https://github.com/refinedmods/refinedstorage/actions/workflows/build.yml/badge.svg?branch=develop)](https://github.com/refinedmods/refinedstorage/actions/workflows/build.yml) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage&metric=coverage)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage) [![Downloads on CurseForge](http://cf.way2muchnoise.eu/full_243076_downloads.svg)](http://minecraft.curseforge.com/projects/refined-storage) [![Discord](https://img.shields.io/discord/342942776494653441)](https://discordapp.com/invite/VYzsydb) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE.md)
[![Build Status](https://github.com/refinedmods/refinedstorage/actions/workflows/build.yml/badge.svg?branch=develop)](https://github.com/refinedmods/refinedstorage/actions/workflows/build.yml) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage&metric=coverage)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage) [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=refinedmods_refinedstorage&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=refinedmods_refinedstorage) [![Downloads on CurseForge](http://cf.way2muchnoise.eu/full_243076_downloads.svg)](http://minecraft.curseforge.com/projects/refined-storage) [![Downloads on Modrinth](https://img.shields.io/modrinth/dt/refined-storage?logo=modrinth)](https://modrinth.com/mod/refined-storage) [![Discord](https://img.shields.io/discord/342942776494653441)](https://discordapp.com/invite/VYzsydb) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE.md)
</div>
## About
@@ -27,6 +27,7 @@ this mod that allow the player to setup auto-crafting, allowing the crafting of
- [CurseForge](https://curseforge.com/minecraft/mc-mods/refined-storage)
- [Modrinth](https://modrinth.com/mod/refined-storage)
- [Wiki](https://refinedmods.com/refined-storage/)
- [Javadoc](https://refinedmods.com/javadoc/refinedstorage)
- [Discord](https://discordapp.com/invite/VYzsydb)
- [Twitter](https://twitter.com/refinedmods)
- [Mastodon](https://anvil.social/@refinedmods)

View File

@@ -1,5 +1,10 @@
apply from: "https://raw.githubusercontent.com/refinedmods/refinedarchitect/v0.7.1/helper.gradle"
// TODO: remove in 1.21
ext {
forgeVersion = "47.1.0"
}
repositories {
maven {
name = 'JEI'
@@ -38,8 +43,23 @@ dependencies {
compileOnly fg.deobf('curse.maven:crafting-tweaks-233071:4596466')
// TODO mixin issue
// runtimeOnly fg.deobf("top.theillusivec4.curios:curios-forge:5.2.0-beta.3+1.20.1")
// can't depend on API due to Javadoc build error (CuriosApi imports stuff from common)
compileOnly fg.deobf("top.theillusivec4.curios:curios-forge:5.2.0-beta.3+1.20.1")
implementation fg.deobf("top.theillusivec4.curios:curios-forge:5.2.0-beta.3+1.20.1")
}
// TODO: remove in 1.21
minecraft {
runs {
server {
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
}
client {
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
}
data {
property 'mixin.env.remapRefMap', 'true'
property 'mixin.env.refMapRemappingFile', "${buildDir}/createSrgToMcp/output.srg"
}
}
}

View File

@@ -1,4 +1,4 @@
// 1.20.1 2023-07-03T11:19:34.4889238 Loot Tables
// 1.20.1 2023-11-05T14:19:25.383214243 Loot Tables
24df81614f6b28c4c7e59589d79fd2c929d71727 data/refinedstorage/loot_tables/blocks/black_controller.json
aadbec0f79a3fb95d39e866a453cfec0cbbacd36 data/refinedstorage/loot_tables/blocks/black_crafter.json
a792eb6ac90ce775052c9c4a1b29bf9551477b5d data/refinedstorage/loot_tables/blocks/black_crafter_manager.json

View File

@@ -1,4 +1,4 @@
// 1.20.1 2023-07-03T11:19:34.5209453 Recipes
// 1.20.1 2023-11-05T14:19:25.387472745 Recipes
1ccdc8b9da42fbc8d8c954215c76634af2d5254e data/refinedstorage/advancements/recipes/misc/coloring_recipes/black_controller.json
b4936ab0116ecd65cc2ca1f8342b18d9019d9bf4 data/refinedstorage/advancements/recipes/misc/coloring_recipes/black_crafter.json
6632b2a29739b77ca01b29a33688640d63ba85fb data/refinedstorage/advancements/recipes/misc/coloring_recipes/black_crafter_manager.json

View File

@@ -1,2 +1,2 @@
// 1.20.1 2023-07-03T11:19:34.4768009 Block Entity Type Tags
// 1.20.1 2023-11-05T14:19:25.380203046 Block Entity Type Tags
98555d946827da8ddb7a7c451a1c99f4d0184ad3 data/packingtape/tags/block_entity_type/blacklist/problematic.json

View File

@@ -1,4 +1,4 @@
// 1.20.1 2023-07-03T11:19:34.4829224 Tags for minecraft:item mod id refinedstorage
// 1.20.1 2023-11-05T14:19:25.382491537 Tags for minecraft:item mod id refinedstorage
061bf4c2f3bdd530115615f2b04e55c2602908bd data/refinedstorage/tags/items/controller.json
407a16e5d941c69915f75b135a13e9144cc9c43e data/refinedstorage/tags/items/crafter.json
dc1342f1d3e6a4cd8eaaa52429a011c10c6c2d96 data/refinedstorage/tags/items/crafter_manager.json

View File

@@ -1,5 +1,5 @@
// 1.20.1 2023-07-03T11:19:34.5471111 Tags for minecraft:block mod id refinedstorage
3f3a0c830f4ddc021ae2c2a36f75311d8df1fb2e data/forge/tags/blocks/relocation_not_supported.json
// 1.20.1 2023-11-05T14:52:30.007687009 Tags for minecraft:block mod id refinedstorage
885d292a69d67240dbf2e57e951bf4fff5c7a064 data/forge/tags/blocks/relocation_not_supported.json
061bf4c2f3bdd530115615f2b04e55c2602908bd data/refinedstorage/tags/blocks/controller.json
407a16e5d941c69915f75b135a13e9144cc9c43e data/refinedstorage/tags/blocks/crafter.json
dc1342f1d3e6a4cd8eaaa52429a011c10c6c2d96 data/refinedstorage/tags/blocks/crafter_manager.json

View File

@@ -1,4 +1,4 @@
// 1.20.1 2023-07-03T11:19:34.5335391 Block States: refinedstorage
// 1.20.1 2023-11-05T14:52:29.995381618 Block States: refinedstorage
7b69e3ab3a7471a50e264579d36c04adb8acad35 assets/refinedstorage/blockstates/black_controller.json
c87045bd089212825bdd0f06b0d25e7bcf0e3f5d assets/refinedstorage/blockstates/black_crafter.json
999fe91e1661d6b45f9c29878f06438b3b5919dc assets/refinedstorage/blockstates/black_crafter_manager.json
@@ -267,7 +267,7 @@ e25236415255c8e84e8425cd5ef5068af2e90bf5 assets/refinedstorage/models/block/cont
719f9943433757fe6d544facfad02cf5c863b128 assets/refinedstorage/models/block/controller/magenta.json
ac1cb6e399a675e681a5c32be92cf2bbbabb845e assets/refinedstorage/models/block/controller/nearly_off.json
df5ef8ae2db4d693376007210753f08e8ed9aa1f assets/refinedstorage/models/block/controller/nearly_on.json
70e2a0e01172f7da1631c48358986597731f210f assets/refinedstorage/models/block/controller/off.json
649b3ac449fa858abcf8771bc91fe9ce04949989 assets/refinedstorage/models/block/controller/off.json
197c8d6037075f2a32aa361a573a86a93b71d178 assets/refinedstorage/models/block/controller/orange.json
b5d54a0751d165ea36f32a545cd0d74cfec96138 assets/refinedstorage/models/block/controller/pink.json
f6f6681357c6759a6de3baac9116c45f4027ed0b assets/refinedstorage/models/block/controller/purple.json
@@ -278,7 +278,7 @@ a3fc2ae7524e81e7ac41d116f23dfcfe58fcca9a assets/refinedstorage/models/block/craf
ca9f47ac28aa1e6779613d426b837526b50ae0e2 assets/refinedstorage/models/block/crafter/blue.json
58a500649c2d2a496f7228b9fa537802baf15a20 assets/refinedstorage/models/block/crafter/brown.json
cce737a93507d1eb58d51d2ddac6428c695c6b23 assets/refinedstorage/models/block/crafter/cyan.json
9abba05387aa43ead444a35b3337f87dcf8a07ce assets/refinedstorage/models/block/crafter/disconnected.json
9a012e8377cf60c903a5d42918f3b2bde17539d2 assets/refinedstorage/models/block/crafter/disconnected.json
7c6c30838702c3e43f7c9e62319d2cd486d1498a assets/refinedstorage/models/block/crafter/gray.json
c495e9d2fc43e5e6094b4799609961445d391927 assets/refinedstorage/models/block/crafter/green.json
8c493f345d1a6af778087a49cf36588954bb84fe assets/refinedstorage/models/block/crafter/light_blue.json
@@ -295,7 +295,7 @@ c1ab462d97a36b71baa6d03b0aefab777377aa80 assets/refinedstorage/models/block/craf
947d1cacb3f457c5f9985961bf9a2cb64392f9c6 assets/refinedstorage/models/block/crafter_manager/blue.json
bdf1b91bb479fdc377250a925dd569c222b8b983 assets/refinedstorage/models/block/crafter_manager/brown.json
41746225550b6f965c0bcb2168aef5afa6ac5780 assets/refinedstorage/models/block/crafter_manager/cyan.json
3760e96ab56ce35790deccb0bc0dd5b777d5624a assets/refinedstorage/models/block/crafter_manager/disconnected.json
006345975c1de5fb804ad47027d66730f13676d9 assets/refinedstorage/models/block/crafter_manager/disconnected.json
7470d98e9ed8ab00a4cac8b651d095dbc33a787a assets/refinedstorage/models/block/crafter_manager/gray.json
a6b801087e0e0311fa660ae060879aede938bfa0 assets/refinedstorage/models/block/crafter_manager/green.json
e6d7a1289f13a29a429db62287ac6c3143a9565a assets/refinedstorage/models/block/crafter_manager/light_blue.json
@@ -312,7 +312,7 @@ a65b6a6e90137b5b6d061637daca39cf0230a756 assets/refinedstorage/models/block/craf
f1beacefdaf9aae0aaafc5a3c5e865e84173c2d4 assets/refinedstorage/models/block/crafting_grid/blue.json
3f85170b187def3b075ec11982f91775c72ea2bb assets/refinedstorage/models/block/crafting_grid/brown.json
e3a6ddbf8c7348f8f0678b7b88d7309c1c2048fb assets/refinedstorage/models/block/crafting_grid/cyan.json
d9bedeb26d136630195de1b309d67f58d771bfb5 assets/refinedstorage/models/block/crafting_grid/disconnected.json
6cc5581bebc7eaa3b6ab156aec032534afa56b89 assets/refinedstorage/models/block/crafting_grid/disconnected.json
c483c28bc8d003c214cd9d2c7de40500d9a14a5e assets/refinedstorage/models/block/crafting_grid/gray.json
53c5036ea2fd4bc481bccdcd3f37f4b4a3c0e25f assets/refinedstorage/models/block/crafting_grid/green.json
034ce68bb933818291cc7b28b6c5da5471c16f01 assets/refinedstorage/models/block/crafting_grid/light_blue.json
@@ -329,7 +329,7 @@ e40a7af2d99a7ff0847a13865339fa00a3ebc439 assets/refinedstorage/models/block/craf
52a2c625eb84f7586bdb98d8f709ffb3c17e4ee9 assets/refinedstorage/models/block/crafting_monitor/blue.json
9c8ceeee7c2dc1512e23d3798c51fa75387d411c assets/refinedstorage/models/block/crafting_monitor/brown.json
1d071a43fa223ffd8261704132df37b8ee916a1d assets/refinedstorage/models/block/crafting_monitor/cyan.json
185e19d54b212f6736caa383bfe0337f79439992 assets/refinedstorage/models/block/crafting_monitor/disconnected.json
8cc27a1d4bf9f12010581454f1d78aa1d982b3ac assets/refinedstorage/models/block/crafting_monitor/disconnected.json
1e2f04d1521c27e31f06940684c1ca7306fa3524 assets/refinedstorage/models/block/crafting_monitor/gray.json
ddf85353932580ced34a09ce5cd5fc121828e90d assets/refinedstorage/models/block/crafting_monitor/green.json
a161a5fa71b287a0eb7ff801458ad5c76a55a7c5 assets/refinedstorage/models/block/crafting_monitor/light_blue.json
@@ -352,7 +352,7 @@ c735ce9091c7a5ab2eb0c7b162af77c2ffac2ad8 assets/refinedstorage/models/block/dete
b462ca74227c62a9e8567ab7461f45e5e95425d8 assets/refinedstorage/models/block/detector/light_gray.json
4f52368581621adf1d799660c42f108207217575 assets/refinedstorage/models/block/detector/lime.json
170d5328b3f1d9c05c2f6af3191a42d734e89e2b assets/refinedstorage/models/block/detector/magenta.json
d571bd12d733c62c3b7e28e6adbf44990429414e assets/refinedstorage/models/block/detector/off.json
f50f9956dc7bdd3cac13a6473a45906050667a78 assets/refinedstorage/models/block/detector/off.json
2c735eca8fcf7770558758a49f7f8ea469225897 assets/refinedstorage/models/block/detector/orange.json
d795e18038baa420972781d7206c1809c7297ae8 assets/refinedstorage/models/block/detector/pink.json
0fe0d9e192b473fdb4cc8a5844ca44de22364e43 assets/refinedstorage/models/block/detector/purple.json
@@ -363,7 +363,7 @@ bb3725144c25a75f4e0e0a47e7efd174b7211261 assets/refinedstorage/models/block/dete
08feb52f08c96567bbdc6cd0ab9f289748c3bd1c assets/refinedstorage/models/block/disk_manipulator/blue.json
5050a32ef1afdb15f31f169d257596a29cf0e46d assets/refinedstorage/models/block/disk_manipulator/brown.json
9900ae5b9004204fea75cad20e4b18a6d8d3ec37 assets/refinedstorage/models/block/disk_manipulator/cyan.json
2621bf9ea6ba66ebeb9eb3130c9a58b5858c8f78 assets/refinedstorage/models/block/disk_manipulator/disconnected.json
46b21908098b41f5a6a4229d941dd4732ef1dd76 assets/refinedstorage/models/block/disk_manipulator/disconnected.json
8f78635bbb9015e9b3c710418adec9b96570b133 assets/refinedstorage/models/block/disk_manipulator/gray.json
588bb56e49677311063aa0eee9ebbb864e528fc0 assets/refinedstorage/models/block/disk_manipulator/green.json
46677b54fec1f540a8d63e8037bbf164f755b995 assets/refinedstorage/models/block/disk_manipulator/light_blue.json
@@ -381,7 +381,7 @@ d7c7712fe9dc02e0bde2ed57f5e886698b5d1d65 assets/refinedstorage/models/block/disk
2cc6db45ec512f617d3dfc74e56c812700e8c9be assets/refinedstorage/models/block/fluid_grid/blue.json
043ee02c82d506d6f5024246fafdf467bcba50f4 assets/refinedstorage/models/block/fluid_grid/brown.json
92c6f3c28c41f179c507434f9e13c41fb6713942 assets/refinedstorage/models/block/fluid_grid/cyan.json
0cbd7a5d7692ef3a031960eccc58307cf15d887d assets/refinedstorage/models/block/fluid_grid/disconnected.json
8715a94eb3b672cf941e471c5883cc9ddebff362 assets/refinedstorage/models/block/fluid_grid/disconnected.json
328db8a51dac5c943b005dd8178f70de0e69b03d assets/refinedstorage/models/block/fluid_grid/gray.json
3a012b462e69bdca95c5bb3e030d8dea2d438539 assets/refinedstorage/models/block/fluid_grid/green.json
7f05d7725b608fdb70ba2ae4c6ade712912b5d30 assets/refinedstorage/models/block/fluid_grid/light_blue.json
@@ -398,7 +398,7 @@ e845c4a37c72d5ad426fac7203353a9665648a46 assets/refinedstorage/models/block/grid
589f51309dbecb1964c070a70496b79ae1c4ebcb assets/refinedstorage/models/block/grid/blue.json
437076a560cbafb39c685b88e6fd2073c7c158d0 assets/refinedstorage/models/block/grid/brown.json
49f3eb8374ee309b81f9242bd048f66421eaa75e assets/refinedstorage/models/block/grid/cyan.json
b85adb5c23340beb39809692ae600bae8a8fbd97 assets/refinedstorage/models/block/grid/disconnected.json
97d78c65ba856ead9ff344625e37ed4f6f880516 assets/refinedstorage/models/block/grid/disconnected.json
3ad1130e18a706495810f1cc32e2658b4910607a assets/refinedstorage/models/block/grid/gray.json
83b393342de4c5aee81c50715479ec78efb21667 assets/refinedstorage/models/block/grid/green.json
3fb70b9aba3dbe38bc0279f1b2789695f8e0a784 assets/refinedstorage/models/block/grid/light_blue.json
@@ -415,7 +415,7 @@ b6ad5c9d362ca9c4cbb5727be2a3ea38f03e0a64 assets/refinedstorage/models/block/grid
521b606adc714ae111325cfb4b86c2f00fc49838 assets/refinedstorage/models/block/network_receiver/blue.json
e988e5bf8a325e3ed5e80e5615e8d5b337e92892 assets/refinedstorage/models/block/network_receiver/brown.json
9feb023af7e1f64c0586fcaa67059743deb3da04 assets/refinedstorage/models/block/network_receiver/cyan.json
1ab3271c61288c831ec53f64d025a34c1805d87b assets/refinedstorage/models/block/network_receiver/disconnected.json
978191a2fcbf46cfd70fe9e4bfa564a3b1b89336 assets/refinedstorage/models/block/network_receiver/disconnected.json
44587865547f9c2e58421ea0a880ff51cf8b8fbf assets/refinedstorage/models/block/network_receiver/gray.json
180555a0b56ddbe2def2b86d44ad8d8747bffbea assets/refinedstorage/models/block/network_receiver/green.json
cd3a8952d2246b8ae436f6b6b66ee7f7f3f51fa7 assets/refinedstorage/models/block/network_receiver/light_blue.json
@@ -432,7 +432,7 @@ c17ae790076c791a6f51b86f307c71452a47e5b9 assets/refinedstorage/models/block/netw
c4e1615846d83ab4c806b6b24373be722261d1f3 assets/refinedstorage/models/block/network_transmitter/blue.json
0f59245da158e77b1cf84cfab5164eeb8814384d assets/refinedstorage/models/block/network_transmitter/brown.json
d1dd664110221c97fe2d22a111800cd2b6df6982 assets/refinedstorage/models/block/network_transmitter/cyan.json
90f410054ba60b9f9b4cc7212cefb0ec54b8d0db assets/refinedstorage/models/block/network_transmitter/disconnected.json
7fad44f8c99b39fa763f603e3f30fa67abebd566 assets/refinedstorage/models/block/network_transmitter/disconnected.json
8d516cc91c6e1bd3fb8e2eee31e268bf10b590df assets/refinedstorage/models/block/network_transmitter/gray.json
ce9afe78c7f30a826630135797ca4c90f7cccbb8 assets/refinedstorage/models/block/network_transmitter/green.json
3a230a4a14c2151ac1de52072514b622a4fac746 assets/refinedstorage/models/block/network_transmitter/light_blue.json
@@ -449,7 +449,7 @@ ef2ca4a218be25d42a994a308d3a684f82aeb3e8 assets/refinedstorage/models/block/netw
09d8500c01a62a454e8e1a817a82e1ad19deace2 assets/refinedstorage/models/block/pattern_grid/blue.json
50406c5a5a65c0d46e91ef389cd3fd23a2b2599b assets/refinedstorage/models/block/pattern_grid/brown.json
6ce91be1821a684898a59d3a8cfbe13ba4f6b707 assets/refinedstorage/models/block/pattern_grid/cyan.json
d06e4411da2bf8312b42cfefc1830610befa8bfd assets/refinedstorage/models/block/pattern_grid/disconnected.json
1dfe91631ef1f12dcecc7e0e45ec7f5e9aeb53f0 assets/refinedstorage/models/block/pattern_grid/disconnected.json
3257be294252ab0a567fc96486e30b028ba6009d assets/refinedstorage/models/block/pattern_grid/gray.json
b0713d7de5cd75e371bc83e9abd33e842702f1cc assets/refinedstorage/models/block/pattern_grid/green.json
5412d15ff025c0ba4bf04e74cbecb765932cb697 assets/refinedstorage/models/block/pattern_grid/light_blue.json
@@ -466,7 +466,7 @@ e6b978a202ab3b7096443862fc70418fab92d528 assets/refinedstorage/models/block/patt
3918e0f6307e76c72f112b9e5a26977e4b32bb1a assets/refinedstorage/models/block/relay/blue.json
2e79077645de1d34de0d3f01102d5242a577440d assets/refinedstorage/models/block/relay/brown.json
a683b28b4b41949b663208e28c393746419e5f1f assets/refinedstorage/models/block/relay/cyan.json
d27657d53a4ea85f6c28d11f82d08015af9ef0e2 assets/refinedstorage/models/block/relay/disconnected.json
b66ed29783c7a24a7112af3d58cfb903d14535bd assets/refinedstorage/models/block/relay/disconnected.json
9705e6e41a83a5349f74e4478284f6fe8b63a6dd assets/refinedstorage/models/block/relay/gray.json
2d21af4bfa0fade473addf82032db9e3187af096 assets/refinedstorage/models/block/relay/green.json
f53061187c76cce0787d11c6b800745dfd48b36a assets/refinedstorage/models/block/relay/light_blue.json
@@ -483,7 +483,7 @@ d6e52eb671800d61b5565e502f395f91c5b650a0 assets/refinedstorage/models/block/rela
e6dcfb1bfa2cd2ce4f3d3dc2aae7da3ad344bbda assets/refinedstorage/models/block/security_manager/blue.json
cacca03ecf0de2bce557ca841401033c45cf4cc1 assets/refinedstorage/models/block/security_manager/brown.json
e241938c7d93a4fc12a09fa9a1ee847d129e92b9 assets/refinedstorage/models/block/security_manager/cyan.json
101c60b99c9c532a248ed15adb59f64ec4bcd186 assets/refinedstorage/models/block/security_manager/disconnected.json
c47c799fca836d8d3ee2022acd5347c3e84836f1 assets/refinedstorage/models/block/security_manager/disconnected.json
5fcb0264b7cc0d4132cf9f18deafa366c6066f53 assets/refinedstorage/models/block/security_manager/gray.json
871b6c7a028d339a551e10d432a936e316f7910e assets/refinedstorage/models/block/security_manager/green.json
f068112ed910080dfc74f2309228f2d5c41ea1b6 assets/refinedstorage/models/block/security_manager/light_blue.json
@@ -500,7 +500,7 @@ a865ead60de383ea8e84c5c16ffdcc2fcbd2791a assets/refinedstorage/models/block/secu
f338756587a7c6bce14677030543f7399aee9259 assets/refinedstorage/models/block/wireless_transmitter/blue.json
667bad1eaa409dbd56bb9db7048a029a610dc5c0 assets/refinedstorage/models/block/wireless_transmitter/brown.json
eeb75332e2a0a9a10b1f5d47b8621340c3913877 assets/refinedstorage/models/block/wireless_transmitter/cyan.json
ca0a18305f47bf6b1e01014b9c557cefbd2873af assets/refinedstorage/models/block/wireless_transmitter/disconnected.json
7d8cdce240042937a7a9ad14390f02f978e3b38f assets/refinedstorage/models/block/wireless_transmitter/disconnected.json
732c1094b53f66b96e04630b2e3549f1ae3f3d3e assets/refinedstorage/models/block/wireless_transmitter/gray.json
2cb3ccf208c6144c461f8b6d05e45360f88e31f1 assets/refinedstorage/models/block/wireless_transmitter/green.json
f0c6cd01aa8af1558c43033433096942fdda103e assets/refinedstorage/models/block/wireless_transmitter/light_blue.json
@@ -513,12 +513,12 @@ c2e51f822376d1968fc07e6987f70ff069d460d4 assets/refinedstorage/models/block/wire
747ea39519e81abea94ca278f2e610e7c55d342e assets/refinedstorage/models/block/wireless_transmitter/red.json
c6258775f847e0957a14fdfd24dcce3116d90acc assets/refinedstorage/models/block/wireless_transmitter/white.json
556c8e5da522c6e27f8a6ee8de69fc95fafb504e assets/refinedstorage/models/block/wireless_transmitter/yellow.json
b281a426469c35fbbb1cb3e87795daa52ec3f97b assets/refinedstorage/models/item/black_controller.json
0fb53d70880b97a55241dbb04f49b9ad39048920 assets/refinedstorage/models/item/black_controller.json
942d718968e1b8d27b203bc661801d37d154b5f2 assets/refinedstorage/models/item/black_crafter.json
75ac21fb6def11be4568d2ac5ff2651f3564f25d assets/refinedstorage/models/item/black_crafter_manager.json
28891a28805f96c47409a34943342830a15e6690 assets/refinedstorage/models/item/black_crafting_grid.json
ddb0a90214bf85dc8e188068f73ae2b20f82150f assets/refinedstorage/models/item/black_crafting_monitor.json
b281a426469c35fbbb1cb3e87795daa52ec3f97b assets/refinedstorage/models/item/black_creative_controller.json
0fb53d70880b97a55241dbb04f49b9ad39048920 assets/refinedstorage/models/item/black_creative_controller.json
241b9b206acf6f4c9ac3151c4044dac213bc0670 assets/refinedstorage/models/item/black_detector.json
ac9dc77f9d6ba5ee90101187aa09e406c0d14fbd assets/refinedstorage/models/item/black_disk_manipulator.json
876fc7ec3dda3568c1fd1e8d2b6ceb200d1380ab assets/refinedstorage/models/item/black_fluid_grid.json
@@ -529,12 +529,12 @@ d823ba7bc1affa7af633185834d1ff582882f2e6 assets/refinedstorage/models/item/black
61861f588ea12538786c06129c3d0a1040394f16 assets/refinedstorage/models/item/black_relay.json
c634efc545854df54c57dd2bf61d6e03448742e6 assets/refinedstorage/models/item/black_security_manager.json
6a1e27442bf1512ba949fafaf135502ae0420169 assets/refinedstorage/models/item/black_wireless_transmitter.json
691f05fe24b16b4eb7688992e08b2f3f5afb02ee assets/refinedstorage/models/item/blue_controller.json
1df94eb9089e76129d911d793c26402ff9313880 assets/refinedstorage/models/item/blue_controller.json
2de69e179294ad396ebe181228c3e9c1787ab550 assets/refinedstorage/models/item/blue_crafter.json
cdea55152a48642717bdc630f74ee6fcf1d8f667 assets/refinedstorage/models/item/blue_crafter_manager.json
c75d3ac7fb95df1b57ae997f5bf9ed7aad112eb0 assets/refinedstorage/models/item/blue_crafting_grid.json
4fba5520838ccf9f88f51853ad95b9bd6c6c9b9c assets/refinedstorage/models/item/blue_crafting_monitor.json
691f05fe24b16b4eb7688992e08b2f3f5afb02ee assets/refinedstorage/models/item/blue_creative_controller.json
1df94eb9089e76129d911d793c26402ff9313880 assets/refinedstorage/models/item/blue_creative_controller.json
f59b716bc576eed79556110ef355fa28cf92d10a assets/refinedstorage/models/item/blue_detector.json
5f8275097f6478a4f23e1ce55dde36a5dc2e5407 assets/refinedstorage/models/item/blue_disk_manipulator.json
675c756edd54900ab155bc45d5a7134cf6dac3a3 assets/refinedstorage/models/item/blue_fluid_grid.json
@@ -545,12 +545,12 @@ f59b716bc576eed79556110ef355fa28cf92d10a assets/refinedstorage/models/item/blue_
763ebca22b3642be09f396deac9cd9c54b90e58f assets/refinedstorage/models/item/blue_relay.json
5abbfde1e5a947ae44fde121c3294f9fb2b60e7d assets/refinedstorage/models/item/blue_security_manager.json
e38c127e67a2ef649d7ed595577947c93473d3d2 assets/refinedstorage/models/item/blue_wireless_transmitter.json
4be65b24bde8f3b4dd101ee78b74bb8e22cfd193 assets/refinedstorage/models/item/brown_controller.json
f27acd12556251b68e10d33d55cb90bcee40ab07 assets/refinedstorage/models/item/brown_controller.json
0fb2cc9e3e05d19d9fcc5e04c6baeaa2cb04265c assets/refinedstorage/models/item/brown_crafter.json
022322ce32ac742f4ce5498d3da128741fe0767d assets/refinedstorage/models/item/brown_crafter_manager.json
eb37e649bbb3f087df69a30c22215418b3fc901d assets/refinedstorage/models/item/brown_crafting_grid.json
4556f504e89f87de6ab73c12259b73eb151e8d7a assets/refinedstorage/models/item/brown_crafting_monitor.json
4be65b24bde8f3b4dd101ee78b74bb8e22cfd193 assets/refinedstorage/models/item/brown_creative_controller.json
f27acd12556251b68e10d33d55cb90bcee40ab07 assets/refinedstorage/models/item/brown_creative_controller.json
470afaeaaaec68a1474b2efcb2e027382b6d4069 assets/refinedstorage/models/item/brown_detector.json
12c9098c38f118056d9576671287b9783e50be98 assets/refinedstorage/models/item/brown_disk_manipulator.json
7fcf4b0092b4a6e733046548217f8cd40a0b0c01 assets/refinedstorage/models/item/brown_fluid_grid.json
@@ -561,18 +561,18 @@ a852eda91b130409a8127af77cf1a00b2aab81c8 assets/refinedstorage/models/item/brown
023fb3d3d0164e237d6d8c83028e66ffb080905f assets/refinedstorage/models/item/brown_relay.json
45c70a18a9b27b3a0f7cd41a450ba23ba4b97faf assets/refinedstorage/models/item/brown_security_manager.json
3c329581c36a66b21409184843a78e90eae25c50 assets/refinedstorage/models/item/brown_wireless_transmitter.json
016151e185659bb813f613e2fd854b97f409e6ee assets/refinedstorage/models/item/controller.json
9af89e77d470eaf03b34847b568e0fcd0cfeb2ca assets/refinedstorage/models/item/controller.json
712a2408676f6ce1208b196d0cfe065136d612fe assets/refinedstorage/models/item/crafter.json
2adb1c2ed2c30890df2492069293f20c085eddf2 assets/refinedstorage/models/item/crafter_manager.json
2ef1da280a960eafd61369b67ea1647966fdcc0c assets/refinedstorage/models/item/crafting_grid.json
ea61beccbf6896f3fdf99b8d4787be67573595dc assets/refinedstorage/models/item/crafting_monitor.json
016151e185659bb813f613e2fd854b97f409e6ee assets/refinedstorage/models/item/creative_controller.json
0771c634ffd9a6a354ca2464a26c48bfbb19699d assets/refinedstorage/models/item/cyan_controller.json
9af89e77d470eaf03b34847b568e0fcd0cfeb2ca assets/refinedstorage/models/item/creative_controller.json
d3d25cbac485889dd6766253c3fb96a1827963a9 assets/refinedstorage/models/item/cyan_controller.json
5b3089cc0257509445e335427fcee15a0c6d19e4 assets/refinedstorage/models/item/cyan_crafter.json
734e1865d2b25eda65d72541f7db30b277d3cf73 assets/refinedstorage/models/item/cyan_crafter_manager.json
c4fc9d67c903d107548d25237173d1df0dfad2ee assets/refinedstorage/models/item/cyan_crafting_grid.json
133a84e4fd76123350bffc37cab6156ae6a0f61f assets/refinedstorage/models/item/cyan_crafting_monitor.json
0771c634ffd9a6a354ca2464a26c48bfbb19699d assets/refinedstorage/models/item/cyan_creative_controller.json
d3d25cbac485889dd6766253c3fb96a1827963a9 assets/refinedstorage/models/item/cyan_creative_controller.json
3e224af44dddb95f804967974a776f3d39e14f79 assets/refinedstorage/models/item/cyan_detector.json
db51d1db8c2ef34f4ca03499081995031fc9bd75 assets/refinedstorage/models/item/cyan_disk_manipulator.json
959e0627277816d1d5a0a529bee59631aa2cbd59 assets/refinedstorage/models/item/cyan_fluid_grid.json
@@ -586,12 +586,12 @@ c3bcb743cd9b551b8e3e07dd16a039ccce65167f assets/refinedstorage/models/item/cyan_
a14c5f121b112f80f018eb39e4017a044f5176c2 assets/refinedstorage/models/item/detector.json
b864dd2a574cb0ff0f87373ba145b7e7c4b6a315 assets/refinedstorage/models/item/disk_manipulator.json
b6f77a02dc8f84c8dc50af0e3ca8d4a2597894fb assets/refinedstorage/models/item/fluid_grid.json
9dfedbca7429678288b5e569f4ca99b1723c24b2 assets/refinedstorage/models/item/gray_controller.json
2793400d4b735f12ca00a38d89ce230de4882728 assets/refinedstorage/models/item/gray_controller.json
f201a4dc689054fbf5afa4cd9318059b45e34fac assets/refinedstorage/models/item/gray_crafter.json
d699ea44dc8ba183d453f865bb5dd816cae8a628 assets/refinedstorage/models/item/gray_crafter_manager.json
e8beb5658c198903aa882e818e9f1a12fb219ed2 assets/refinedstorage/models/item/gray_crafting_grid.json
a24b4fb9353df1c8b9ba48ec7cda1402a0d18e06 assets/refinedstorage/models/item/gray_crafting_monitor.json
9dfedbca7429678288b5e569f4ca99b1723c24b2 assets/refinedstorage/models/item/gray_creative_controller.json
2793400d4b735f12ca00a38d89ce230de4882728 assets/refinedstorage/models/item/gray_creative_controller.json
3a62caa71a381e853fb8e1fd09e6eca16de95b8c assets/refinedstorage/models/item/gray_detector.json
876cf3b8ad044945e93a2dcf595e5ee851a95801 assets/refinedstorage/models/item/gray_disk_manipulator.json
4eb03c2834f4d92be29707d3a7e3412d2e5afae7 assets/refinedstorage/models/item/gray_fluid_grid.json
@@ -602,12 +602,12 @@ d549169a533feee23ee8f3e1b39b7c4bcf23b475 assets/refinedstorage/models/item/gray_
39bd74ec45ffe304d1e339d184b2164117d88b5f assets/refinedstorage/models/item/gray_relay.json
9db80d9e795dbe5edff7a565671cf0095a7c4973 assets/refinedstorage/models/item/gray_security_manager.json
be60c25b51488e5a1f5db9aa0b8ce834b4f843b6 assets/refinedstorage/models/item/gray_wireless_transmitter.json
83f880c7750bb4e0ab772b23955faa259792b078 assets/refinedstorage/models/item/green_controller.json
a6dccc5437fa6c15a9a032e7862c4c5653849dd8 assets/refinedstorage/models/item/green_controller.json
36aec4f5a603dddd1817a815a612a4eb7190e222 assets/refinedstorage/models/item/green_crafter.json
6fce1c029999c014a5d9bd0ac7b2b24838dc0cf6 assets/refinedstorage/models/item/green_crafter_manager.json
3d835f157f4ace96a84a0e990276fe03fe1758c4 assets/refinedstorage/models/item/green_crafting_grid.json
cbb61098395bda16b743c82f56529a00d91a708a assets/refinedstorage/models/item/green_crafting_monitor.json
83f880c7750bb4e0ab772b23955faa259792b078 assets/refinedstorage/models/item/green_creative_controller.json
a6dccc5437fa6c15a9a032e7862c4c5653849dd8 assets/refinedstorage/models/item/green_creative_controller.json
7ec5ba813db5c1ae5663bebfa659b53c8e75096c assets/refinedstorage/models/item/green_detector.json
7b0b74419933a23e3921672b49edc8830d1b3045 assets/refinedstorage/models/item/green_disk_manipulator.json
a8c70489b145ecafc07040195946c329ae30da41 assets/refinedstorage/models/item/green_fluid_grid.json
@@ -619,12 +619,12 @@ ca9981a8b7c74fbdea91c12409b1c56929f829a2 assets/refinedstorage/models/item/green
29860d74f6f59ebabc4534eb3e437c50d82e6d75 assets/refinedstorage/models/item/green_security_manager.json
0f626e543261b13e2d9021d09fc804236b9c9ca5 assets/refinedstorage/models/item/green_wireless_transmitter.json
8e62b1170a93f317a3a0463eb2dc331bc6a29fc8 assets/refinedstorage/models/item/grid.json
2269e15b0f486194980cd1fe6ed2c7c506d10c3c assets/refinedstorage/models/item/light_gray_controller.json
dbcc2e910fd5029dd5061fc018b0c21bee0aa0b0 assets/refinedstorage/models/item/light_gray_controller.json
1280d243a5ee781a911776123a92280f6871e92b assets/refinedstorage/models/item/light_gray_crafter.json
63d91aa91f0b04bc56661d77cba3802a028b14c3 assets/refinedstorage/models/item/light_gray_crafter_manager.json
5447f9412ac89a2453495f7012906936556f3f97 assets/refinedstorage/models/item/light_gray_crafting_grid.json
589f1eab82f17738f7c84408250051526612166c assets/refinedstorage/models/item/light_gray_crafting_monitor.json
2269e15b0f486194980cd1fe6ed2c7c506d10c3c assets/refinedstorage/models/item/light_gray_creative_controller.json
dbcc2e910fd5029dd5061fc018b0c21bee0aa0b0 assets/refinedstorage/models/item/light_gray_creative_controller.json
c0fe9601a0b96cb28e05777646e8b1fa06dff11c assets/refinedstorage/models/item/light_gray_detector.json
a015d9065f13234987d35e242922e19a39cda358 assets/refinedstorage/models/item/light_gray_disk_manipulator.json
792b2649c17462ffad43035187f9ae62faf2f741 assets/refinedstorage/models/item/light_gray_fluid_grid.json
@@ -635,12 +635,12 @@ d7492fb5ea426b156d29d90cac3c068a69257993 assets/refinedstorage/models/item/light
4b04ebd4de4cc44d66f69595a15e19c986bd89c5 assets/refinedstorage/models/item/light_gray_relay.json
72c8be165eead23444e70fd27b214fbe4b4c8f5c assets/refinedstorage/models/item/light_gray_security_manager.json
cf8a25b86388ed35135d6f7abc84c9db2f8c3147 assets/refinedstorage/models/item/light_gray_wireless_transmitter.json
011d6b505683c116a6dec86ac3f6a6164f6b9d6a assets/refinedstorage/models/item/lime_controller.json
191c24b9824b3c218963d8ec68c79a25600cd04e assets/refinedstorage/models/item/lime_controller.json
b5fe18a5faa8b19bca2356055bed26e3c4b7d6da assets/refinedstorage/models/item/lime_crafter.json
c06a4c91f48f582ec7bbddf1992632496f628052 assets/refinedstorage/models/item/lime_crafter_manager.json
5cd081548f10fccc38406afa4e62211a67068868 assets/refinedstorage/models/item/lime_crafting_grid.json
d42a9b602a6b3e8ca87f44093bd5dbb8d025b83b assets/refinedstorage/models/item/lime_crafting_monitor.json
011d6b505683c116a6dec86ac3f6a6164f6b9d6a assets/refinedstorage/models/item/lime_creative_controller.json
191c24b9824b3c218963d8ec68c79a25600cd04e assets/refinedstorage/models/item/lime_creative_controller.json
acc983f06040f4785c84fca542678df7bf93eba6 assets/refinedstorage/models/item/lime_detector.json
19e1e36a546b3ec487a2a4356d85b0f0d72ad69d assets/refinedstorage/models/item/lime_disk_manipulator.json
2d485286e0757a593ca7ce9cd37ce34ba036fc4f assets/refinedstorage/models/item/lime_fluid_grid.json
@@ -651,12 +651,12 @@ a9be76a8a262a6a315f1227d33c8d7304b21f04a assets/refinedstorage/models/item/lime_
95676494b1360458129336fb1c89a827d9887d9a assets/refinedstorage/models/item/lime_relay.json
c06aaadeb1e8573ee6a8f4d66c47a908df9df070 assets/refinedstorage/models/item/lime_security_manager.json
4ac21895d402f5824f599daeae315330deeeb5cc assets/refinedstorage/models/item/lime_wireless_transmitter.json
9f27b43f99677fca67591759cbe5f6edd73bb50a assets/refinedstorage/models/item/magenta_controller.json
ed8cd700afa7ce785453398f1739fa69b544306b assets/refinedstorage/models/item/magenta_controller.json
7ae69165d5905f17a5e837de77d22941f3f22181 assets/refinedstorage/models/item/magenta_crafter.json
97a0c41ddb54000647c33b56095215033b7f364a assets/refinedstorage/models/item/magenta_crafter_manager.json
fea6df9eea90ca27131d5b9e37b08d50b1cb3618 assets/refinedstorage/models/item/magenta_crafting_grid.json
3bf88ca8bbd2ebe7eba52cd6a90a81d4af0391b0 assets/refinedstorage/models/item/magenta_crafting_monitor.json
9f27b43f99677fca67591759cbe5f6edd73bb50a assets/refinedstorage/models/item/magenta_creative_controller.json
ed8cd700afa7ce785453398f1739fa69b544306b assets/refinedstorage/models/item/magenta_creative_controller.json
5fdee8b4342e1b1b8e09a8ab300fcb9dbdcf8530 assets/refinedstorage/models/item/magenta_detector.json
44ff4ad0e90b6b4bc72653d833e04e5352241304 assets/refinedstorage/models/item/magenta_disk_manipulator.json
220ab0b014958d16917799de11a951e9ab8b207c assets/refinedstorage/models/item/magenta_fluid_grid.json
@@ -669,12 +669,12 @@ d7bcf381a5d9689d554438184f0fec0012f65f05 assets/refinedstorage/models/item/magen
833c0a8c3e209c604cad8146468143470693f42a assets/refinedstorage/models/item/magenta_wireless_transmitter.json
6dbbe55fd346aaa8eec23b2808ffd18d5840d832 assets/refinedstorage/models/item/network_receiver.json
54f8841b6832f05b8e5076cfb5a714ef66c4b159 assets/refinedstorage/models/item/network_transmitter.json
4c5f868c405f5a821344993b45ce1c7eb53b39ef assets/refinedstorage/models/item/orange_controller.json
62a9e346d5e83e3b4c1c947d7ef5316d93b168a6 assets/refinedstorage/models/item/orange_controller.json
2a934a32a43fd58110eebc7b3e4b05f71c21b76c assets/refinedstorage/models/item/orange_crafter.json
3e7fbb114a1270c3e2cf2d79f043c62e869de2dc assets/refinedstorage/models/item/orange_crafter_manager.json
4f35a7cc88dff4dc4ee066261024f14f123f8227 assets/refinedstorage/models/item/orange_crafting_grid.json
0c7188e1968be58e1797720861a5d104f7dae2a4 assets/refinedstorage/models/item/orange_crafting_monitor.json
4c5f868c405f5a821344993b45ce1c7eb53b39ef assets/refinedstorage/models/item/orange_creative_controller.json
62a9e346d5e83e3b4c1c947d7ef5316d93b168a6 assets/refinedstorage/models/item/orange_creative_controller.json
833cc370275e91e9088bba3505b52e9199beafca assets/refinedstorage/models/item/orange_detector.json
cc94b04311c3c1089dc1e488464540f5ef04b448 assets/refinedstorage/models/item/orange_disk_manipulator.json
846a0e2b574b4518a392916902564fc692b72994 assets/refinedstorage/models/item/orange_fluid_grid.json
@@ -686,12 +686,12 @@ cae021973ae73db4f26907bc20af071b4788a7d1 assets/refinedstorage/models/item/orang
fc333d59e066c62ef6bad598dfaadcc030655f23 assets/refinedstorage/models/item/orange_security_manager.json
27557f3fd10361a51c867fe8211073807576f040 assets/refinedstorage/models/item/orange_wireless_transmitter.json
4368418d5b92cbaa041d20e6f25d06ab3f24fd6f assets/refinedstorage/models/item/pattern_grid.json
ee76a877974d73451d88c2ca231c8854ada09a1b assets/refinedstorage/models/item/pink_controller.json
0514638803a2e3805e5078001fb4f53ceb7d1a41 assets/refinedstorage/models/item/pink_controller.json
3b472cd0ed96b6eb64c7695429cc7a76e629f1a6 assets/refinedstorage/models/item/pink_crafter.json
03a29baf74da2cbf3d7ee5ae8d9925d19c34e8f3 assets/refinedstorage/models/item/pink_crafter_manager.json
e0710739ed2c8c74147585c990fe62d9fdb18ab0 assets/refinedstorage/models/item/pink_crafting_grid.json
71045a36761dca453325aced8d84cff206c81817 assets/refinedstorage/models/item/pink_crafting_monitor.json
ee76a877974d73451d88c2ca231c8854ada09a1b assets/refinedstorage/models/item/pink_creative_controller.json
0514638803a2e3805e5078001fb4f53ceb7d1a41 assets/refinedstorage/models/item/pink_creative_controller.json
6c67a4fc7796172f625c4862cf616c86bf8cba79 assets/refinedstorage/models/item/pink_detector.json
75c748b9473e195554615573406e1571b5ccac10 assets/refinedstorage/models/item/pink_disk_manipulator.json
c3b2796d126d95f9141472a0c0009d88bd7cb855 assets/refinedstorage/models/item/pink_fluid_grid.json
@@ -702,12 +702,12 @@ ba12ed9891fa73b2336ff93ab4bfd0d3b1492652 assets/refinedstorage/models/item/pink_
6d6d9cd242688e2891cd6fc8c74eb19dcf36ac19 assets/refinedstorage/models/item/pink_relay.json
fe2fc6e128f619dddc5d9f04486264a245c2b457 assets/refinedstorage/models/item/pink_security_manager.json
332f608a7dc84019b8b0fa2a5e44ad9f78e430de assets/refinedstorage/models/item/pink_wireless_transmitter.json
4dfb50d2cd83c9592a6273cebe727c01aa4f1636 assets/refinedstorage/models/item/purple_controller.json
0f11e9205719c6fe582e96bd4205ac7c93bfd209 assets/refinedstorage/models/item/purple_controller.json
506b89f03df977db6eb43c09d39b8aa8d7fcc28a assets/refinedstorage/models/item/purple_crafter.json
b3b6be54491ba314822a6b47b20a55955b81a986 assets/refinedstorage/models/item/purple_crafter_manager.json
413fffa72205e3c3f50106162bf88e8d18cad8ab assets/refinedstorage/models/item/purple_crafting_grid.json
ac159f10aab33c9e95009384d994a46caf4e9c5b assets/refinedstorage/models/item/purple_crafting_monitor.json
4dfb50d2cd83c9592a6273cebe727c01aa4f1636 assets/refinedstorage/models/item/purple_creative_controller.json
0f11e9205719c6fe582e96bd4205ac7c93bfd209 assets/refinedstorage/models/item/purple_creative_controller.json
a137fc45d5f9b891ef00d75a2855258a88177668 assets/refinedstorage/models/item/purple_detector.json
525576087501ad8483619e8339a614951eada2b6 assets/refinedstorage/models/item/purple_disk_manipulator.json
80fb0c7bc38471d990c1623918a96db182bbe93b assets/refinedstorage/models/item/purple_fluid_grid.json
@@ -718,12 +718,12 @@ c5a01a9ddace2e421e32b12c83d7a0b384be75fa assets/refinedstorage/models/item/purpl
e2efaf0e99c7dc1125b32370201be809a67c25d9 assets/refinedstorage/models/item/purple_relay.json
3c3ed303d605e0e9345940fc1756e2ecd1c48287 assets/refinedstorage/models/item/purple_security_manager.json
ef7d480ea1f08c1a2a7c2aebcbe3ca751df9f9b6 assets/refinedstorage/models/item/purple_wireless_transmitter.json
30cae1f86496d859b04120d0f0948597323b1c6b assets/refinedstorage/models/item/red_controller.json
004e6cf370c1b7ad3d243a358494bb1af2fdee8d assets/refinedstorage/models/item/red_controller.json
6804c531235f5c7cd13f0c734a30aa58855c66d8 assets/refinedstorage/models/item/red_crafter.json
f2804c202120637bff89dd8b2ab8e43ba1f5aafc assets/refinedstorage/models/item/red_crafter_manager.json
acddcd41152a23916905fd85ad62081f5cb8c90c assets/refinedstorage/models/item/red_crafting_grid.json
5a93d02b15f7ef2d9803ef0d004930ed1766707b assets/refinedstorage/models/item/red_crafting_monitor.json
30cae1f86496d859b04120d0f0948597323b1c6b assets/refinedstorage/models/item/red_creative_controller.json
004e6cf370c1b7ad3d243a358494bb1af2fdee8d assets/refinedstorage/models/item/red_creative_controller.json
4c1c2a7322dada203e2521225d80c5b516cacb62 assets/refinedstorage/models/item/red_detector.json
262bdaf7a4a2a587dc88e3fb5c72c22e16829998 assets/refinedstorage/models/item/red_disk_manipulator.json
67e092b9a6df25cb4396d3ae4464dd3c009c60b2 assets/refinedstorage/models/item/red_fluid_grid.json
@@ -736,12 +736,12 @@ d2127558a02a6cb0a6c58a1feb8a4b9eb251d544 assets/refinedstorage/models/item/red_n
05e22d0e5fafbbe8c6864c896a05907b1808c4cf assets/refinedstorage/models/item/red_wireless_transmitter.json
58e008aea088a9e1903885a2bc6e14d9f0b2c333 assets/refinedstorage/models/item/relay.json
e0546ec6993e456e7ef61a35cccc862382b15fd5 assets/refinedstorage/models/item/security_manager.json
346c26a65981ebc056b0ee27d2de9c51ba4994dd assets/refinedstorage/models/item/white_controller.json
9b37576964ccce28c9396299400a78a0a9d9ee04 assets/refinedstorage/models/item/white_controller.json
c6e5a16319d0fad19ac8ede0108b658cd4028146 assets/refinedstorage/models/item/white_crafter.json
e6194df137b2c614d6402d6dc672beae80430d38 assets/refinedstorage/models/item/white_crafter_manager.json
399926c00694fa7abefd1709cc3da37d7eb0c5af assets/refinedstorage/models/item/white_crafting_grid.json
ecff06abfe1465fb6630f027f9253965ceb2ed60 assets/refinedstorage/models/item/white_crafting_monitor.json
346c26a65981ebc056b0ee27d2de9c51ba4994dd assets/refinedstorage/models/item/white_creative_controller.json
9b37576964ccce28c9396299400a78a0a9d9ee04 assets/refinedstorage/models/item/white_creative_controller.json
5f1ae8346d30d2e4f6b5aed97504d35ec05eecfe assets/refinedstorage/models/item/white_detector.json
0eec3932d36ed9e265a48b90fc1ae83bb95a3aa3 assets/refinedstorage/models/item/white_disk_manipulator.json
ca0c7707acf771758db0194f30f1247d4721ae50 assets/refinedstorage/models/item/white_fluid_grid.json
@@ -753,12 +753,12 @@ ca0c7707acf771758db0194f30f1247d4721ae50 assets/refinedstorage/models/item/white
42c146254c8c634eb9f79f29b909535b0504d6a5 assets/refinedstorage/models/item/white_security_manager.json
dffc5e13406d4370d1cc3fcc69c7556029406e98 assets/refinedstorage/models/item/white_wireless_transmitter.json
08797906f5356ea0ccc061347d188bab0c63c02d assets/refinedstorage/models/item/wireless_transmitter.json
ffd57aa30d902404da8963c14320fa8be54d6451 assets/refinedstorage/models/item/yellow_controller.json
2fca7b8b45c98bc01de598dd53f0f80f2e547dd4 assets/refinedstorage/models/item/yellow_controller.json
1bf5a3d8d72edcd34ddf8266caaac89717a02ecb assets/refinedstorage/models/item/yellow_crafter.json
6b33ac9d2c729a4ea8dd42efb8feeb553a434d70 assets/refinedstorage/models/item/yellow_crafter_manager.json
b628289d264ed316cd2d88c297fb8712f8bbffd2 assets/refinedstorage/models/item/yellow_crafting_grid.json
496e7503c51cf826e718301641235d07ddb24de7 assets/refinedstorage/models/item/yellow_crafting_monitor.json
ffd57aa30d902404da8963c14320fa8be54d6451 assets/refinedstorage/models/item/yellow_creative_controller.json
2fca7b8b45c98bc01de598dd53f0f80f2e547dd4 assets/refinedstorage/models/item/yellow_creative_controller.json
04e4c31f56373507a46da2deccc4890305fe671e assets/refinedstorage/models/item/yellow_detector.json
6412b4000a8034e4b5e019b9a6d9c32085cda263 assets/refinedstorage/models/item/yellow_disk_manipulator.json
5b6b9685ed940cdfcede5c4df4b6836fbd748895 assets/refinedstorage/models/item/yellow_fluid_grid.json

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_all_cutout",
"parent": "refinedstorage:block/cube_all_cutout_nonemissive",
"textures": {
"all": "refinedstorage:block/controller/off",
"cutout": "refinedstorage:block/controller/cutouts/off",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_cutout",
"parent": "refinedstorage:block/cube_cutout_nonemissive",
"textures": {
"cutout_down": "refinedstorage:block/bottom",
"cutout_east": "refinedstorage:block/crafter/cutouts/side_disconnected",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"parent": "refinedstorage:block/cube_north_cutout_nonemissive",
"textures": {
"cutout": "refinedstorage:block/crafter_manager/cutouts/disconnected",
"down": "refinedstorage:block/bottom",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"parent": "refinedstorage:block/cube_north_cutout_nonemissive",
"textures": {
"cutout": "refinedstorage:block/crafting_grid/cutouts/disconnected",
"down": "refinedstorage:block/bottom",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"parent": "refinedstorage:block/cube_north_cutout_nonemissive",
"textures": {
"cutout": "refinedstorage:block/crafting_monitor/cutouts/disconnected",
"down": "refinedstorage:block/bottom",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/detector",
"parent": "refinedstorage:block/detector_nonemissive",
"textures": {
"torch": "refinedstorage:block/detector/cutouts/off"
}

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"parent": "refinedstorage:block/cube_north_cutout_nonemissive",
"textures": {
"cutout": "refinedstorage:block/disk_manipulator/cutouts/disconnected",
"down": "refinedstorage:block/bottom",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"parent": "refinedstorage:block/cube_north_cutout_nonemissive",
"textures": {
"cutout": "refinedstorage:block/fluid_grid/cutouts/disconnected",
"down": "refinedstorage:block/bottom",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"parent": "refinedstorage:block/cube_north_cutout_nonemissive",
"textures": {
"cutout": "refinedstorage:block/grid/cutouts/disconnected",
"down": "refinedstorage:block/bottom",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_all_cutout",
"parent": "refinedstorage:block/cube_all_cutout_nonemissive",
"textures": {
"all": "refinedstorage:block/network_receiver/network_receiver",
"cutout": "refinedstorage:block/network_receiver/cutouts/disconnected",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_all_cutout",
"parent": "refinedstorage:block/cube_all_cutout_nonemissive",
"textures": {
"all": "refinedstorage:block/network_transmitter/network_transmitter",
"cutout": "refinedstorage:block/network_transmitter/cutouts/disconnected",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_north_cutout",
"parent": "refinedstorage:block/cube_north_cutout_nonemissive",
"textures": {
"cutout": "refinedstorage:block/pattern_grid/cutouts/disconnected",
"down": "refinedstorage:block/bottom",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_all_cutout",
"parent": "refinedstorage:block/cube_all_cutout_nonemissive",
"textures": {
"all": "refinedstorage:block/relay/relay",
"cutout": "refinedstorage:block/relay/cutouts/disconnected",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/cube_cutout",
"parent": "refinedstorage:block/cube_cutout_nonemissive",
"textures": {
"cutout_down": "refinedstorage:block/bottom",
"cutout_east": "refinedstorage:block/security_manager/cutouts/right_disconnected",

View File

@@ -1,5 +1,5 @@
{
"parent": "refinedstorage:block/wireless_transmitter",
"parent": "refinedstorage:block/wireless_transmitter_nonemissive",
"textures": {
"cutout": "refinedstorage:block/wireless_transmitter/cutouts/disconnected"
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/black"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/black",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/black"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/black",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/blue"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/blue",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/blue"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/blue",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/brown"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/brown",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/brown"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/brown",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/light_blue"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/light_blue",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/light_blue"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/light_blue",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/cyan"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/cyan",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/cyan"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/cyan",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/gray"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/gray",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/gray"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/gray",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/green"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/green",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/green"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/green",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/light_gray"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/light_gray",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/light_gray"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/light_gray",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/lime"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/lime",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/lime"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/lime",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/magenta"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/magenta",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/magenta"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/magenta",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/orange"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/orange",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/orange"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/orange",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/pink"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/pink",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/pink"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/pink",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/purple"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/purple",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/purple"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/purple",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/red"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/red",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/red"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/red",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/white"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/white",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/white"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/white",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/yellow"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/yellow",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,3 +1,28 @@
{
"parent": "refinedstorage:block/controller/yellow"
"overrides": [
{
"model": "refinedstorage:block/controller/off",
"predicate": {
"refinedstorage:energy_type": 0.0
}
},
{
"model": "refinedstorage:block/controller/nearly_off",
"predicate": {
"refinedstorage:energy_type": 1.0
}
},
{
"model": "refinedstorage:block/controller/nearly_on",
"predicate": {
"refinedstorage:energy_type": 2.0
}
},
{
"model": "refinedstorage:block/controller/yellow",
"predicate": {
"refinedstorage:energy_type": 3.0
}
}
]
}

View File

@@ -1,21 +1,21 @@
{
"values": [
"#refinedstorage:creative_controller",
"#refinedstorage:detector",
"#refinedstorage:pattern_grid",
"#refinedstorage:network_transmitter",
"#refinedstorage:security_manager",
"#refinedstorage:creative_controller",
"#refinedstorage:fluid_grid",
"#refinedstorage:crafter",
"#refinedstorage:grid",
"#refinedstorage:disk_manipulator",
"#refinedstorage:wireless_transmitter",
"#refinedstorage:detector",
"#refinedstorage:crafter_manager",
"#refinedstorage:grid",
"#refinedstorage:crafting_monitor",
"#refinedstorage:controller",
"#refinedstorage:crafting_grid",
"#refinedstorage:crafter",
"#refinedstorage:fluid_grid",
"#refinedstorage:network_receiver",
"#refinedstorage:relay",
"#refinedstorage:crafter_manager",
"#refinedstorage:crafting_grid",
"#refinedstorage:disk_manipulator",
"refinedstorage:1k_storage_block",
"refinedstorage:4k_storage_block",
"refinedstorage:16k_storage_block",

View File

@@ -47,8 +47,20 @@ public class CraftingNode extends Node {
if (interval == 0 || ticks % interval == 0) {
for (int i = 0; i < container.getMaximumSuccessfulCraftingUpdates(); i++) {
if (IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(true), internalStorage, Action.SIMULATE) != null) {
IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(false), internalStorage, Action.PERFORM);
var simulatedRequirements = requirements.getSingleItemRequirementSet(true);
if(simulatedRequirements == null) {
return;
}
if (IoUtil.extractFromInternalItemStorage(simulatedRequirements, internalStorage, Action.SIMULATE) != null) {
var actualRequirements = requirements.getSingleItemRequirementSet(false);
if(actualRequirements == null) {
return;
}
IoUtil.extractFromInternalItemStorage(actualRequirements, internalStorage, Action.PERFORM);
ItemStack output = getPattern().getOutput(recipe, network.getLevel().registryAccess());

View File

@@ -90,7 +90,7 @@ public class NodeRequirements {
}
}
} else {
throw new IllegalStateException("Bad!");
return null;
}
}
@@ -137,7 +137,7 @@ public class NodeRequirements {
}
}
} else {
throw new IllegalStateException("Bad!");
return null;
}
}

View File

@@ -121,10 +121,20 @@ public class ProcessingNode extends Node {
boolean hasAllRequirements = false;
List<ItemStack> extractedItems = IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(true), internalStorage, Action.SIMULATE);
var simulatedRequirements = requirements.getSingleItemRequirementSet(true);
if(simulatedRequirements == null) {
return;
}
List<ItemStack> extractedItems = IoUtil.extractFromInternalItemStorage(simulatedRequirements, internalStorage, Action.SIMULATE);
List<FluidStack> extractedFluids = null;
if (extractedItems != null) {
extractedFluids = IoUtil.extractFromInternalFluidStorage(requirements.getSingleFluidRequirementSet(true), internalFluidStorage, Action.SIMULATE);
var simulatedFluidRequirements = requirements.getSingleFluidRequirementSet(true);
if(simulatedFluidRequirements == null) {
return;
}
extractedFluids = IoUtil.extractFromInternalFluidStorage(simulatedFluidRequirements, internalFluidStorage, Action.SIMULATE);
if (extractedFluids != null) {
hasAllRequirements = true;
}
@@ -151,9 +161,17 @@ public class ProcessingNode extends Node {
}
this.state = ProcessingState.READY;
var actualRequirements = requirements.getSingleItemRequirementSet(false);
if(actualRequirements == null) {
return;
}
extractedItems = IoUtil.extractFromInternalItemStorage(actualRequirements, internalStorage, Action.PERFORM);
extractedItems = IoUtil.extractFromInternalItemStorage(requirements.getSingleItemRequirementSet(false), internalStorage, Action.PERFORM);
extractedFluids = IoUtil.extractFromInternalFluidStorage(requirements.getSingleFluidRequirementSet(false), internalFluidStorage, Action.PERFORM);
var actualFluidRequirements = requirements.getSingleFluidRequirementSet(false);
if(actualFluidRequirements == null) {
return;
}
extractedFluids = IoUtil.extractFromInternalFluidStorage(actualFluidRequirements, internalFluidStorage, Action.PERFORM);
container.insertItemsIntoInventory(extractedItems, Action.PERFORM);
container.insertFluidsIntoInventory(extractedFluids, Action.PERFORM);

View File

@@ -23,6 +23,9 @@ import net.minecraft.world.item.crafting.CraftingRecipe;
import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.items.ItemHandlerHelper;
import net.minecraftforge.items.wrapper.InvWrapper;
import net.minecraftforge.items.wrapper.PlayerInvWrapper;
import net.minecraftforge.items.wrapper.PlayerMainInvWrapper;
import javax.annotation.Nullable;
import java.util.*;
@@ -123,16 +126,18 @@ public class CraftingGridBehavior implements ICraftingGridBehavior {
}
for (ItemStack craftedItem : craftedItemsList) {
if (!player.getInventory().add(craftedItem.copy())) {
ItemStack remainder = craftedItem;
ItemStack remainder = ItemHandlerHelper.insertItem(
new PlayerMainInvWrapper(player.getInventory()),
craftedItem.copy(),
false
);
if (useNetwork) {
remainder = network.insertItem(craftedItem, craftedItem.getCount(), Action.PERFORM);
}
if (!remainder.isEmpty() && useNetwork) {
remainder = network.insertItem(remainder, remainder.getCount(), Action.PERFORM);
}
if (!remainder.isEmpty()) {
Containers.dropItemStack(player.getCommandSenderWorld(), player.getX(), player.getY(), player.getZ(), remainder);
}
if (!remainder.isEmpty()) {
Containers.dropItemStack(player.getCommandSenderWorld(), player.getX(), player.getY(), player.getZ(), remainder);
}
}

View File

@@ -103,20 +103,15 @@ public class ImporterNetworkNode extends NetworkNode implements IComparable, IWh
IFluidHandler handler = LevelUtils.getFluidHandler(getFacingBlockEntity(), getDirection().getOpposite());
if (handler != null) {
FluidStack stack = handler.drain(FluidType.BUCKET_VOLUME, IFluidHandler.FluidAction.SIMULATE);
FluidStack extractedSimulated = handler.drain(FluidType.BUCKET_VOLUME * upgrades.getStackInteractCount(), IFluidHandler.FluidAction.SIMULATE);
if (!stack.isEmpty() &&
IWhitelistBlacklist.acceptsFluid(fluidFilters, mode, compare, stack) &&
network.insertFluid(stack, stack.getAmount(), Action.SIMULATE).isEmpty()) {
FluidStack toDrain = handler.drain(FluidType.BUCKET_VOLUME * upgrades.getStackInteractCount(), IFluidHandler.FluidAction.SIMULATE);
if (!extractedSimulated.isEmpty()
&& IWhitelistBlacklist.acceptsFluid(fluidFilters, mode, compare, extractedSimulated)
&& network.insertFluid(extractedSimulated, extractedSimulated.getAmount(), Action.SIMULATE).isEmpty()) {
FluidStack extracted = handler.drain(extractedSimulated, IFluidHandler.FluidAction.EXECUTE);
if (!toDrain.isEmpty()) {
FluidStack remainder = network.insertFluidTracked(toDrain, toDrain.getAmount());
if (!remainder.isEmpty()) {
toDrain.shrink(remainder.getAmount());
}
handler.drain(toDrain, IFluidHandler.FluidAction.EXECUTE);
if (!extracted.isEmpty()) {
network.insertFluidTracked(extracted, extracted.getAmount());
}
}
}

View File

@@ -122,6 +122,7 @@ public class CableBlock extends NetworkNodeBlock implements SimpleWaterloggedBlo
}
@Override
@SuppressWarnings("deprecation")
public boolean isPathfindable(BlockState state, BlockGetter worldIn, BlockPos pos, PathComputationType type) {
return false;
}
@@ -197,8 +198,8 @@ public class CableBlock extends NetworkNodeBlock implements SimpleWaterloggedBlo
}
return blockEntity.getCapability(NetworkNodeProxyCapability.NETWORK_NODE_PROXY_CAPABILITY, direction).isPresent()
&& !isSideCovered(blockEntity, direction)
&& !isSideCovered(world.getBlockEntity(pos.relative(direction)), direction.getOpposite());
&& !isSideCovered(blockEntity, direction)
&& !isSideCovered(world.getBlockEntity(pos.relative(direction)), direction.getOpposite());
}
private boolean isSideCovered(BlockEntity blockEntity, Direction direction) {
@@ -229,12 +230,12 @@ public class CableBlock extends NetworkNodeBlock implements SimpleWaterloggedBlo
boolean down = hasNodeConnection(world, pos.relative(Direction.DOWN), currentState, Direction.UP);
return currentState
.setValue(NORTH, north)
.setValue(EAST, east)
.setValue(SOUTH, south)
.setValue(WEST, west)
.setValue(UP, up)
.setValue(DOWN, down);
.setValue(NORTH, north)
.setValue(EAST, east)
.setValue(SOUTH, south)
.setValue(WEST, west)
.setValue(UP, up)
.setValue(DOWN, down);
}
@Override

View File

@@ -27,7 +27,7 @@ public class CableBlockEntity extends NetworkNodeBlockEntity<CableNetworkNode> {
.build();
public CableBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.CABLE.get(), pos, state, SPEC);
super(RSBlockEntities.CABLE.get(), pos, state, SPEC, CableNetworkNode.class);
}
@Override

View File

@@ -42,7 +42,7 @@ public class ConstructorBlockEntity extends NetworkNodeBlockEntity<ConstructorNe
.build();
public ConstructorBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.CONSTRUCTOR.get(), pos, state, SPEC);
super(RSBlockEntities.CONSTRUCTOR.get(), pos, state, SPEC, ConstructorNetworkNode.class);
}
@Override

View File

@@ -33,7 +33,7 @@ public class CrafterBlockEntity extends NetworkNodeBlockEntity<CrafterNetworkNod
private final LazyOptional<IItemHandler> patternsCapability = LazyOptional.of(() -> getNode().getPatternInventory());
public CrafterBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.CRAFTER.get(), pos, state, SPEC);
super(RSBlockEntities.CRAFTER.get(), pos, state, SPEC, CrafterNetworkNode.class);
}
@Override

View File

@@ -35,7 +35,7 @@ public class CrafterManagerBlockEntity extends NetworkNodeBlockEntity<CrafterMan
.build();
public CrafterManagerBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.CRAFTER_MANAGER.get(), pos, state, SPEC);
super(RSBlockEntities.CRAFTER_MANAGER.get(), pos, state, SPEC, CrafterManagerNetworkNode.class);
}
@Override

View File

@@ -45,7 +45,7 @@ public class DestructorBlockEntity extends NetworkNodeBlockEntity<DestructorNetw
.build();
public DestructorBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.DESTRUCTOR.get(), pos, state, SPEC);
super(RSBlockEntities.DESTRUCTOR.get(), pos, state, SPEC, DestructorNetworkNode.class);
}
@Override

View File

@@ -43,7 +43,7 @@ public class DetectorBlockEntity extends NetworkNodeBlockEntity<DetectorNetworkN
private static final String NBT_POWERED = "Powered";
public DetectorBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.DETECTOR.get(), pos, state, SPEC);
super(RSBlockEntities.DETECTOR.get(), pos, state, SPEC, DetectorNetworkNode.class);
}
@Override

View File

@@ -99,7 +99,7 @@ public class DiskDriveBlockEntity extends NetworkNodeBlockEntity<DiskDriveNetwor
private final DiskState[] diskState = new DiskState[8];
public DiskDriveBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.DISK_DRIVE.get(), pos, state, SPEC);
super(RSBlockEntities.DISK_DRIVE.get(), pos, state, SPEC, DiskDriveNetworkNode.class);
Arrays.fill(diskState, DiskState.NONE);
}

View File

@@ -57,7 +57,7 @@ public class DiskManipulatorBlockEntity extends NetworkNodeBlockEntity<DiskManip
private final DiskState[] diskState = new DiskState[6];
public DiskManipulatorBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.DISK_MANIPULATOR.get(), pos, state, SPEC);
super(RSBlockEntities.DISK_MANIPULATOR.get(), pos, state, SPEC, DiskManipulatorNetworkNode.class);
Arrays.fill(diskState, DiskState.NONE);
}

View File

@@ -38,7 +38,7 @@ public class ExporterBlockEntity extends NetworkNodeBlockEntity<ExporterNetworkN
.build();
public ExporterBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.EXPORTER.get(), pos, state, SPEC);
super(RSBlockEntities.EXPORTER.get(), pos, state, SPEC, ExporterNetworkNode.class);
}
@Override

View File

@@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.blockentity.config.*;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationSpec;
import com.refinedmods.refinedstorage.blockentity.data.RSSerializers;
import com.refinedmods.refinedstorage.config.ServerConfig;
import com.refinedmods.refinedstorage.util.LevelUtils;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
@@ -72,7 +73,7 @@ public class ExternalStorageBlockEntity extends NetworkNodeBlockEntity<ExternalS
.build();
public ExternalStorageBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.EXTERNAL_STORAGE.get(), pos, state, SPEC);
super(RSBlockEntities.EXTERNAL_STORAGE.get(), pos, state, SPEC, ExternalStorageNetworkNode.class);
}
@Override

View File

@@ -26,16 +26,16 @@ public class FluidInterfaceBlockEntity extends NetworkNodeBlockEntity<FluidInter
public static final BlockEntitySynchronizationParameter<FluidStack, FluidInterfaceBlockEntity> TANK_OUT = new BlockEntitySynchronizationParameter<>(new ResourceLocation(RS.ID, "fluid_interface_out"), RSSerializers.FLUID_STACK_SERIALIZER, FluidStack.EMPTY, t -> t.getNode().getTankOut().getFluid());
public static BlockEntitySynchronizationSpec SPEC = BlockEntitySynchronizationSpec.builder()
.addWatchedParameter(REDSTONE_MODE)
.addParameter(TANK_IN)
.addParameter(TANK_OUT)
.build();
.addWatchedParameter(REDSTONE_MODE)
.addParameter(TANK_IN)
.addParameter(TANK_OUT)
.build();
private final LazyOptional<IFluidHandler> tankCapability = LazyOptional.of(() -> getNode().getTank());
private final LazyOptional<IItemHandler> inCapability = LazyOptional.of(() -> getNode().getIn());
public FluidInterfaceBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.FLUID_INTERFACE.get(), pos, state, SPEC);
super(RSBlockEntities.FLUID_INTERFACE.get(), pos, state, SPEC, FluidInterfaceNetworkNode.class);
}
@Nonnull

View File

@@ -39,7 +39,7 @@ public class FluidStorageBlockEntity extends NetworkNodeBlockEntity<FluidStorage
private final FluidStorageType type;
public FluidStorageBlockEntity(FluidStorageType type, BlockPos pos, BlockState state) {
super(getType(type), pos, state, SPEC);
super(getType(type), pos, state, SPEC, FluidStorageNetworkNode.class);
this.type = type;
}

View File

@@ -36,7 +36,7 @@ public class ImporterBlockEntity extends NetworkNodeBlockEntity<ImporterNetworkN
.build();
public ImporterBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.IMPORTER.get(), pos, state, SPEC);
super(RSBlockEntities.IMPORTER.get(), pos, state, SPEC, ImporterNetworkNode.class);
}
@Override

View File

@@ -30,7 +30,7 @@ public class InterfaceBlockEntity extends NetworkNodeBlockEntity<InterfaceNetwor
private final LazyOptional<IItemHandler> itemsCapability = LazyOptional.of(() -> getNode().getItems());
public InterfaceBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.INTERFACE.get(), pos, state, SPEC);
super(RSBlockEntities.INTERFACE.get(), pos, state, SPEC, InterfaceNetworkNode.class);
}
@Nonnull

View File

@@ -28,16 +28,26 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public abstract class NetworkNodeBlockEntity<N extends NetworkNode> extends BaseBlockEntity implements INetworkNodeProxy<N>, IRedstoneConfigurable {
public static final BlockEntitySynchronizationParameter<Integer, NetworkNodeBlockEntity> REDSTONE_MODE = RedstoneMode.createParameter(new ResourceLocation(RS.ID, "redstone_mode"));
public static final BlockEntitySynchronizationParameter<Integer, NetworkNodeBlockEntity<?>> REDSTONE_MODE = RedstoneMode.createParameter(new ResourceLocation(RS.ID, "redstone_mode"));
private final LazyOptional<INetworkNodeProxy<N>> networkNodeProxy = LazyOptional.of(() -> this);
private final Class<N> networkNodeClass;
private N clientNode;
private N removedNode;
private static final Logger LOGGER = LogManager.getLogger();
// TODO: remove this ctor in 1.21
@Deprecated
protected NetworkNodeBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state, BlockEntitySynchronizationSpec syncSpec) {
super(type, pos, state, syncSpec);
this.networkNodeClass = null;
}
protected NetworkNodeBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state, BlockEntitySynchronizationSpec syncSpec,
Class<N> networkNodeClass) {
super(type, pos, state, syncSpec);
this.networkNodeClass = networkNodeClass;
}
@Override
@@ -72,13 +82,20 @@ public abstract class NetworkNodeBlockEntity<N extends NetworkNode> extends Base
node = createAndSetNode(manager);
}
return (N) node;
return doCast(node);
} catch (ClassCastException e) {
LOGGER.warn("Node @ {} got desynced with it's block entity container, recreating", worldPosition, e);
return (N) createAndSetNode(manager);
}
}
private N doCast(INetworkNode node) {
if (networkNodeClass == null) {
return (N) node;
}
return networkNodeClass.cast(node);
}
private INetworkNode createAndSetNode(INetworkNodeManager manager) {
INetworkNode node = createNode(level, worldPosition);
manager.setNode(worldPosition, node);
@@ -110,7 +127,11 @@ public abstract class NetworkNodeBlockEntity<N extends NetworkNode> extends Base
INetworkNode node = manager.getNode(worldPosition);
if (node != null) {
removedNode = (N) node;
try {
removedNode = doCast(node);
} catch (ClassCastException e) {
removedNode = null;
}
}
manager.removeNode(worldPosition);

View File

@@ -15,7 +15,7 @@ public class NetworkReceiverBlockEntity extends NetworkNodeBlockEntity<NetworkRe
.build();
public NetworkReceiverBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.NETWORK_RECEIVER.get(), pos, state, SPEC);
super(RSBlockEntities.NETWORK_RECEIVER.get(), pos, state, SPEC, NetworkReceiverNetworkNode.class);
}
@Override

View File

@@ -40,7 +40,7 @@ public class NetworkTransmitterBlockEntity extends NetworkNodeBlockEntity<Networ
private final LazyOptional<IItemHandler> networkCardCapability = LazyOptional.of(() -> getNode().getNetworkCard());
public NetworkTransmitterBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.NETWORK_TRANSMITTER.get(), pos, state, SPEC);
super(RSBlockEntities.NETWORK_TRANSMITTER.get(), pos, state, SPEC, NetworkTransmitterNetworkNode.class);
}
@Override

View File

@@ -15,7 +15,7 @@ public class RelayBlockEntity extends NetworkNodeBlockEntity<RelayNetworkNode> {
.build();
public RelayBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.RELAY.get(), pos, state, SPEC);
super(RSBlockEntities.RELAY.get(), pos, state, SPEC, RelayNetworkNode.class);
}
@Override

View File

@@ -15,7 +15,7 @@ public class SecurityManagerBlockEntity extends NetworkNodeBlockEntity<SecurityM
.build();
public SecurityManagerBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.SECURITY_MANAGER.get(), pos, state, SPEC);
super(RSBlockEntities.SECURITY_MANAGER.get(), pos, state, SPEC, SecurityManagerNetworkNode.class);
}
@Override

View File

@@ -39,7 +39,7 @@ public class StorageBlockEntity extends NetworkNodeBlockEntity<StorageNetworkNod
private final ItemStorageType type;
public StorageBlockEntity(ItemStorageType type, BlockPos pos, BlockState state) {
super(getType(type), pos, state, SPEC);
super(getType(type), pos, state, SPEC, StorageNetworkNode.class);
this.type = type;
}

View File

@@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.blockentity.config.IComparable;
import com.refinedmods.refinedstorage.blockentity.config.IType;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationSpec;
import com.refinedmods.refinedstorage.config.ServerConfig;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.resources.ResourceLocation;
@@ -40,7 +41,7 @@ public class StorageMonitorBlockEntity extends NetworkNodeBlockEntity<StorageMon
private FluidStack fluidStack = FluidStack.EMPTY;
public StorageMonitorBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.STORAGE_MONITOR.get(), pos, state, SPEC);
super(RSBlockEntities.STORAGE_MONITOR.get(), pos, state, SPEC, StorageMonitorNetworkNode.class);
}
@Override

View File

@@ -22,7 +22,7 @@ public class WirelessTransmitterBlockEntity extends NetworkNodeBlockEntity<Wirel
.build();
public WirelessTransmitterBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.WIRELESS_TRANSMITTER.get(), pos, state, SPEC);
super(RSBlockEntities.WIRELESS_TRANSMITTER.get(), pos, state, SPEC, WirelessTransmitterNetworkNode.class);
}
@Override

View File

@@ -41,7 +41,7 @@ public class CraftingMonitorBlockEntity extends NetworkNodeBlockEntity<CraftingM
.build();
public CraftingMonitorBlockEntity(BlockPos pos, BlockState state) {
super(RSBlockEntities.CRAFTING_MONITOR.get(), pos, state, SPEC);
super(RSBlockEntities.CRAFTING_MONITOR.get(), pos, state, SPEC, CraftingMonitorNetworkNode.class);
}
@Override

View File

@@ -119,7 +119,7 @@ public class GridBlockEntity extends NetworkNodeBlockEntity<GridNetworkNode> {
private final LazyOptional<IItemHandler> diskCapability = LazyOptional.of(() -> getNode().getPatterns());
public GridBlockEntity(GridType type, BlockPos pos, BlockState state) {
super(getType(type), pos, state, SPEC);
super(getType(type), pos, state, SPEC, GridNetworkNode.class);
this.type = type;
}

View File

@@ -13,6 +13,7 @@ import net.minecraft.world.level.block.Block;
import net.minecraftforge.client.model.generators.BlockStateProvider;
import net.minecraftforge.client.model.generators.ModelFile;
import net.minecraftforge.common.data.ExistingFileHelper;
import net.minecraftforge.registries.ForgeRegistries;
public class BlockModelGenerator extends BlockStateProvider {
private static final ResourceLocation BOTTOM = new ResourceLocation(RS.ID, "block/bottom");
@@ -51,14 +52,14 @@ public class BlockModelGenerator extends BlockStateProvider {
models.wirelessTransmitterBlock(block, state -> {
if (Boolean.FALSE.equals(state.getValue(NetworkNodeBlock.CONNECTED))) {
return models.createWirelessTransmitterModel(
"block/" + folderName + "/disconnected",
resourceLocation(folderName, "cutouts/disconnected")
return models.createWirelessTransmitterNonEmissiveModel(
"block/" + folderName + "/disconnected",
resourceLocation(folderName, "cutouts/disconnected")
);
} else {
ModelFile model = models.createWirelessTransmitterModel(
"block/" + folderName + "/" + color,
resourceLocation(folderName, "cutouts/" + color)
"block/" + folderName + "/" + color,
resourceLocation(folderName, "cutouts/" + color)
);
simpleBlockItem(block, model);
@@ -75,14 +76,14 @@ public class BlockModelGenerator extends BlockStateProvider {
models.simpleBlockStateModel(block, state -> {
if (Boolean.FALSE.equals(state.getValue(DetectorBlock.POWERED))) {
return models.createDetectorModel(
"block/" + folderName + "/off",
resourceLocation(folderName, "cutouts/off")
return models.createDetectorNonEmissiveModel(
"block/" + folderName + "/off",
resourceLocation(folderName, "cutouts/off")
);
} else {
ModelFile model = models.createDetectorModel(
"block/" + folderName + "/" + color,
resourceLocation(folderName, "cutouts/" + color)
"block/" + folderName + "/" + color,
resourceLocation(folderName, "cutouts/" + color)
);
simpleBlockItem(block, model);
@@ -99,36 +100,36 @@ public class BlockModelGenerator extends BlockStateProvider {
models.horizontalRSBlock(block, state -> {
if (Boolean.FALSE.equals(state.getValue(NetworkNodeBlock.CONNECTED))) {
return models.createCubeCutoutModel(
"block/" + folderName + "/disconnected",
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top_disconnected"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/right_disconnected"),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "cutouts/left_disconnected"),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "cutouts/front_disconnected"),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "cutouts/back_disconnected")
return models.createCubeCutoutNonEmissiveModel(
"block/" + folderName + "/disconnected",
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top_disconnected"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/right_disconnected"),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "cutouts/left_disconnected"),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "cutouts/front_disconnected"),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "cutouts/back_disconnected")
);
} else {
ModelFile model = models.createCubeCutoutModel(
"block/" + folderName + "/" + color,
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top" + "_" + color),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/right" + "_" + color),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "cutouts/left" + "_" + color),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "cutouts/front" + "_" + color),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "cutouts/back" + "_" + color)
"block/" + folderName + "/" + color,
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top" + "_" + color),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/right" + "_" + color),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "cutouts/left" + "_" + color),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "cutouts/front" + "_" + color),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "cutouts/back" + "_" + color)
);
simpleBlockItem(block, model);
@@ -145,18 +146,18 @@ public class BlockModelGenerator extends BlockStateProvider {
models.simpleBlockStateModel(block, state -> {
if (Boolean.FALSE.equals(state.getValue(NetworkNodeBlock.CONNECTED))) {
return models.createCubeAllCutoutModel(
"block/" + folderName + "/disconnected",
resourceLocation(folderName, folderName),
resourceLocation(folderName, folderName),
resourceLocation(folderName, "cutouts/disconnected")
return models.createCubeAllCutoutNonEmissiveModel(
"block/" + folderName + "/disconnected",
resourceLocation(folderName, folderName),
resourceLocation(folderName, folderName),
resourceLocation(folderName, "cutouts/disconnected")
);
} else {
ModelFile model = models.createCubeAllCutoutModel(
"block/" + folderName + "/" + color,
resourceLocation(folderName, folderName),
resourceLocation(folderName, folderName),
resourceLocation(folderName, "cutouts/" + color)
"block/" + folderName + "/" + color,
resourceLocation(folderName, folderName),
resourceLocation(folderName, folderName),
resourceLocation(folderName, "cutouts/" + color)
);
simpleBlockItem(block, model);
@@ -173,36 +174,36 @@ public class BlockModelGenerator extends BlockStateProvider {
models.anyDirectionalRSBlock(block, state -> {
if (Boolean.FALSE.equals(state.getValue(NetworkNodeBlock.CONNECTED))) {
return models.createCubeCutoutModel(
"block/" + folderName + "/disconnected",
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected")
return models.createCubeCutoutNonEmissiveModel(
"block/" + folderName + "/disconnected",
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected"),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_disconnected")
);
} else {
ModelFile model = models.createCubeCutoutModel(
"block/" + folderName + "/" + color,
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color)
"block/" + folderName + "/" + color,
BOTTOM,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "cutouts/top_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color),
resourceLocation(folderName, "side"),
resourceLocation(folderName, "cutouts/side_" + color)
);
simpleBlockItem(block, model);
@@ -219,37 +220,54 @@ public class BlockModelGenerator extends BlockStateProvider {
models.simpleBlockStateModel(block, state -> {
if (state.getValue(ControllerBlock.ENERGY_TYPE).equals(ControllerBlock.EnergyType.OFF)) {
return models.createCubeAllCutoutModel(
"block/" + folderName + "/off",
resourceLocation(folderName, "off"),
resourceLocation(folderName, "off"),
resourceLocation(folderName, "cutouts/off")
return models.createCubeAllCutoutNonEmissiveModel(
"block/" + folderName + "/off",
resourceLocation(folderName, "off"),
resourceLocation(folderName, "off"),
resourceLocation(folderName, "cutouts/off")
);
} else if (state.getValue(ControllerBlock.ENERGY_TYPE).equals(ControllerBlock.EnergyType.NEARLY_OFF)) {
return models.createControllerNearlyCutoutModel(
"block/" + folderName + "/nearly_off",
resourceLocation(folderName, "off"),
resourceLocation(folderName, "on"),
resourceLocation(folderName, "cutouts/nearly_off"),
resourceLocation(folderName, "cutouts/nearly_off_gray")
"block/" + folderName + "/nearly_off",
resourceLocation(folderName, "off"),
resourceLocation(folderName, "on"),
resourceLocation(folderName, "cutouts/nearly_off"),
resourceLocation(folderName, "cutouts/nearly_off_gray")
);
} else if (state.getValue(ControllerBlock.ENERGY_TYPE).equals(ControllerBlock.EnergyType.NEARLY_ON)) {
return models.createControllerNearlyCutoutModel(
"block/" + folderName + "/nearly_on",
resourceLocation(folderName, "off"),
resourceLocation(folderName, "on"),
resourceLocation(folderName, "cutouts/nearly_on"),
resourceLocation(folderName, "cutouts/nearly_on_gray")
"block/" + folderName + "/nearly_on",
resourceLocation(folderName, "off"),
resourceLocation(folderName, "on"),
resourceLocation(folderName, "cutouts/nearly_on"),
resourceLocation(folderName, "cutouts/nearly_on_gray")
);
} else {
ModelFile model = models.createCubeAllCutoutModel(
"block/" + folderName + "/" + color,
resourceLocation(folderName, "off"),
resourceLocation(folderName, "on"),
resourceLocation(folderName, "cutouts/" + color)
"block/" + folderName + "/" + color,
resourceLocation(folderName, "off"),
resourceLocation(folderName, "on"),
resourceLocation(folderName, "cutouts/" + color)
);
simpleBlockItem(block, model);
final ResourceLocation energyType = new ResourceLocation(RS.ID, "energy_type");
itemModels().getBuilder(ForgeRegistries.BLOCKS.getKey(block).getPath())
.override()
.predicate(energyType, 0)
.model(models().getExistingFile(
new ResourceLocation(RS.ID, "block/" + folderName + "/off")
)).end().override()
.predicate(energyType, 1)
.model(models().getExistingFile(
new ResourceLocation(RS.ID, "block/" + folderName + "/nearly_off")
)).end().override()
.predicate(energyType, 2)
.model(models().getExistingFile(
new ResourceLocation(RS.ID, "block/" + folderName + "/nearly_on")
)).end().override()
.predicate(energyType, 3)
.model(model).end();
return model;
}
});
@@ -261,27 +279,27 @@ public class BlockModelGenerator extends BlockStateProvider {
Block block = registryObject.get();
String folderName = blockMap.get(ColorMap.DEFAULT_COLOR).getId().getPath();
ModelFile disconnected = models.createCubeNorthCutoutModel(
"block/" + folderName + "/disconnected",
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/disconnected")
ModelFile disconnected = models.createCubeNorthCutoutNonEmissiveModel(
"block/" + folderName + "/disconnected",
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/disconnected")
);
ModelFile connected = models.createCubeNorthCutoutModel(
"block/" + folderName + "/" + color,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/" + color)
"block/" + folderName + "/" + color,
BOTTOM,
resourceLocation(folderName, "top"),
resourceLocation(folderName, "front"),
resourceLocation(folderName, "back"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "left"),
resourceLocation(folderName, "right"),
resourceLocation(folderName, "cutouts/" + color)
);
//generate Item Model

View File

@@ -89,11 +89,21 @@ public class BlockModels {
.texture("torch", torch);
}
public BlockModelBuilder createDetectorNonEmissiveModel(String name, ResourceLocation torch) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "detector_nonemissive"))
.texture("torch", torch);
}
public BlockModelBuilder createWirelessTransmitterModel(String name, ResourceLocation cutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "wireless_transmitter"))
.texture("cutout", cutout);
}
public BlockModelBuilder createWirelessTransmitterNonEmissiveModel(String name, ResourceLocation cutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "wireless_transmitter_nonemissive"))
.texture("cutout", cutout);
}
public BlockModelBuilder createCubeCutoutModel(String name, ResourceLocation down, ResourceLocation downCutout, ResourceLocation up, ResourceLocation upCutout, ResourceLocation east, ResourceLocation eastCutout, ResourceLocation west, ResourceLocation westCutout, ResourceLocation north, ResourceLocation northCutout, ResourceLocation south, ResourceLocation southCutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "cube_cutout"))
.texture("particle", north)
@@ -111,6 +121,23 @@ public class BlockModels {
.texture("cutout_up", upCutout);
}
public BlockModelBuilder createCubeCutoutNonEmissiveModel(String name, ResourceLocation down, ResourceLocation downCutout, ResourceLocation up, ResourceLocation upCutout, ResourceLocation east, ResourceLocation eastCutout, ResourceLocation west, ResourceLocation westCutout, ResourceLocation north, ResourceLocation northCutout, ResourceLocation south, ResourceLocation southCutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "cube_cutout_nonemissive"))
.texture("particle", north)
.texture("east", east)
.texture("south", south)
.texture("west", west)
.texture("up", up)
.texture("down", down)
.texture("north", north)
.texture("cutout_down", downCutout)
.texture("cutout_east", eastCutout)
.texture("cutout_west", westCutout)
.texture("cutout_south", southCutout)
.texture("cutout_north", northCutout)
.texture("cutout_up", upCutout);
}
public BlockModelBuilder createControllerNearlyCutoutModel(String name, ResourceLocation particle, ResourceLocation all, ResourceLocation grayCutout, ResourceLocation cutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "block/controller_nearly"))
.texture("particle", particle)
@@ -126,6 +153,13 @@ public class BlockModels {
.texture("cutout", cutout);
}
public BlockModelBuilder createCubeAllCutoutNonEmissiveModel(String name, ResourceLocation particle, ResourceLocation all, ResourceLocation cutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "cube_all_cutout_nonemissive"))
.texture("particle", particle)
.texture("all", all)
.texture("cutout", cutout);
}
public BlockModelBuilder createCubeNorthCutoutModel(String name, ResourceLocation down, ResourceLocation up, ResourceLocation north, ResourceLocation south, ResourceLocation east, ResourceLocation west, ResourceLocation particle, ResourceLocation cutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "cube_north_cutout"))
.texture("particle", particle)
@@ -138,6 +172,18 @@ public class BlockModels {
.texture("cutout", cutout);
}
public BlockModelBuilder createCubeNorthCutoutNonEmissiveModel(String name, ResourceLocation down, ResourceLocation up, ResourceLocation north, ResourceLocation south, ResourceLocation east, ResourceLocation west, ResourceLocation particle, ResourceLocation cutout) {
return generator.models().withExistingParent(name, new ResourceLocation(RS.ID, "cube_north_cutout_nonemissive"))
.texture("particle", particle)
.texture("east", east)
.texture("south", south)
.texture("west", west)
.texture("up", up)
.texture("down", down)
.texture("north", north)
.texture("cutout", cutout);
}
class CustomLoaderBuilderBasic extends CustomLoaderBuilder<BlockModelBuilder> {
protected CustomLoaderBuilderBasic(ResourceLocation loaderId, BlockModelBuilder parent, ExistingFileHelper existingFileHelper) {
super(loaderId, parent, existingFileHelper);

View File

@@ -1,6 +1,9 @@
package com.refinedmods.refinedstorage.integration.inventorysorter;
import com.refinedmods.refinedstorage.RS;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.InterModComms;
public class InventorySorterIntegration {
private static final String ID = "inventorysorter";
@@ -14,6 +17,7 @@ public class InventorySorterIntegration {
public static void register() {
// Prevent items moving while scrolling through slots with Inventory Sorter in the Crafter Manager
// InterModComms.sendTo("inventorysorter", "slotblacklist", () -> "com.refinedmods.refinedstorage.container.slot.CrafterManagerSlot");
InterModComms.sendTo("inventorysorter", "slotblacklist", () -> "com.refinedmods.refinedstorage.container.slot.CrafterManagerSlot");
InterModComms.sendTo("inventorysorter", "containerblacklist", () -> new ResourceLocation(RS.ID, "crafter"));
}
}

View File

@@ -19,7 +19,7 @@ import net.minecraft.client.gui.screens.Screen;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.CraftingRecipe;
import net.minecraft.world.item.crafting.Recipe;
import net.minecraftforge.fluids.FluidStack;
import org.jetbrains.annotations.Nullable;
@@ -127,7 +127,13 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
private void moveItems(GridContainerMenu gridContainer, Object recipe, IRecipeSlotsView recipeLayout, Player player) {
this.lastTransferTimeMs = System.currentTimeMillis();
if (gridContainer.getGrid().getGridType() == GridType.PATTERN && !(recipe instanceof CraftingRecipe)) {
boolean isCraftingRecipe = false;
if(recipe instanceof Recipe<?> castRecipe)
{
isCraftingRecipe = castRecipe.getType() == net.minecraft.world.item.crafting.RecipeType.CRAFTING;
}
if (gridContainer.getGrid().getGridType() == GridType.PATTERN && !isCraftingRecipe) {
moveForProcessing(recipeLayout, gridContainer, player);
} else {
move(recipeLayout);

View File

@@ -14,10 +14,14 @@ import javax.annotation.Nullable;
public class ControllerItemPropertyGetter implements ItemPropertyFunction {
@Override
public float call(ItemStack stack, @Nullable ClientLevel level, @Nullable LivingEntity entity, int p) {
// if that stack is still clean (like in the creative mode tab, or just crafted) maintain the on state.
if (stack.getTag() == null) {
return ControllerBlock.EnergyType.ON.ordinal();
}
IEnergyStorage storage = stack.getCapability(ForgeCapabilities.ENERGY).orElse(null);
if (storage != null) {
return Network.getEnergyType(storage.getEnergyStored(), storage.getMaxEnergyStored()).ordinal();
}
return ControllerBlock.EnergyType.OFF.ordinal();
return ControllerBlock.EnergyType.ON.ordinal();
}
}

View File

@@ -70,7 +70,7 @@ public class GridFluidUpdateMessage {
grid.setView(new GridViewImpl(grid, GridScreen.getDefaultSorter(), GridScreen.getSorters()));
grid.getView().setCanCraft(message.canCraft);
grid.getView().setStacks(message.stacks);
grid.getView().sort();
grid.getView().forceSort();
});
ctx.get().setPacketHandled(true);

View File

@@ -70,7 +70,7 @@ public class GridItemUpdateMessage {
grid.setView(new GridViewImpl(grid, GridScreen.getDefaultSorter(), GridScreen.getSorters()));
grid.getView().setCanCraft(message.canCraft);
grid.getView().setStacks(message.stacks);
grid.getView().sort();
grid.getView().forceSort();
});
ctx.get().setPacketHandled(true);

View File

@@ -13,7 +13,7 @@ import net.minecraftforge.network.NetworkEvent;
import java.util.List;
import java.util.function.Supplier;
public class GridTransferMessage {
private final ItemStack[][] recipe = new ItemStack[9][];
private ItemStack[][] recipe;
List<List<ItemStack>> inputs;
public GridTransferMessage() {
@@ -26,6 +26,7 @@ public class GridTransferMessage {
public static GridTransferMessage decode(FriendlyByteBuf buf) {
GridTransferMessage msg = new GridTransferMessage();
int slots = buf.readInt();
msg.recipe = new ItemStack[slots][];
for (int i = 0; i < slots; i++) {
int numberOfIngredients = buf.readInt();
msg.recipe[i] = new ItemStack[numberOfIngredients];

View File

@@ -54,7 +54,7 @@ public class PortableGridFluidUpdateMessage {
BaseScreen.executeLater(GridScreen.class, grid -> {
grid.setView(new GridViewImpl(grid, GridScreen.getDefaultSorter(), GridScreen.getSorters()));
grid.getView().setStacks(message.stacks);
grid.getView().sort();
grid.getView().forceSort();
});
ctx.get().setPacketHandled(true);

View File

@@ -54,7 +54,7 @@ public class PortableGridItemUpdateMessage {
BaseScreen.executeLater(GridScreen.class, grid -> {
grid.setView(new GridViewImpl(grid, GridScreen.getDefaultSorter(), GridScreen.getSorters()));
grid.getView().setStacks(message.stacks);
grid.getView().sort();
grid.getView().forceSort();
});
ctx.get().setPacketHandled(true);

View File

@@ -530,13 +530,15 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
@Override
public boolean mouseClicked(double mouseX, double mouseY, int clickedButton) {
if (tabs.mouseClicked()) {
setFocused(null);
return true;
}
if (scrollbar.mouseClicked(mouseX, mouseY, clickedButton)) {
setFocused(null);
return true;
}
if (grid.getGridType() == GridType.PATTERN && patternScrollbar.mouseClicked(mouseX, mouseY, clickedButton)) {
setFocused(null);
return true;
}
if (RS.CLIENT_CONFIG.getGrid().getPreventSortingWhileShiftIsDown()) {
@@ -551,12 +553,16 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
RS.NETWORK_HANDLER.sendToServer(new GridPatternCreateMessage(((GridNetworkNode) grid).getPos()));
setFocused(null);
return true;
} else if (clickedClear) {
minecraft.getSoundManager().play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
RS.NETWORK_HANDLER.sendToServer(new GridClearMessage());
setFocused(null);
return true;
} else if (grid.isGridActive()) {
ItemStack held = menu.getCarried();
@@ -567,6 +573,7 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
} else {
RS.NETWORK_HANDLER.sendToServer(new GridItemInsertHeldMessage(clickedButton == 1));
}
setFocused(null);
return true;
}
@@ -596,6 +603,7 @@ public class GridScreen extends BaseScreen<GridContainerMenu> implements IScreen
}
}
setFocused(null);
return true;
}
}

View File

@@ -63,11 +63,16 @@ public class GridViewImpl implements IGridView {
return;
}
forceSort();
}
@Override
public void forceSort() {
if (screen.getGrid().isGridActive()) {
this.stacks = map.values().stream()
.filter(getActiveFilters())
.sorted(getActiveSort())
.collect(Collectors.toCollection(ArrayList::new));
.filter(getActiveFilters())
.sorted(getActiveSort())
.collect(Collectors.toCollection(ArrayList::new));
this.active = true;
} else {
this.stacks = new ArrayList<>();

Some files were not shown because too many files have changed in this diff Show More