1
.gitignore
vendored
1
.gitignore
vendored
@@ -15,3 +15,4 @@ run/
|
||||
out/
|
||||
/bin/
|
||||
logs/
|
||||
**/.DS_Store
|
||||
|
@@ -1,5 +1,9 @@
|
||||
# Refined Storage Changelog
|
||||
|
||||
### 1.9.18
|
||||
|
||||
- Fixed potential Pattern crash when loading Minecraft.
|
||||
|
||||
### 1.9.17
|
||||
- Added more slots to the Pattern Grid (Darkere)
|
||||
- Combined Fluid and Item View in the Pattern Grid (Darkere)
|
||||
|
24
CHANGELOG.md
24
CHANGELOG.md
@@ -7,6 +7,30 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed Destructor dupe bug
|
||||
- Fixed being unable to insert items into the Storage Monitor
|
||||
- Fixed Storage Monitor not showing all matching items in non-exact mode
|
||||
- Fixed items getting lost on Creative Disk when more than 2,147,483,647 of one type is stored
|
||||
- Fixed incorrect autocrafting keybind prompt on macOS
|
||||
- Fixed crashing the game when a network block was removed in a bad way
|
||||
- Fixed duplication bug with Constructors and Shulker Boxes
|
||||
- Fixed breaking blocks with pickaxe taking too much time
|
||||
|
||||
### Changed
|
||||
|
||||
- Improved performance for grid updates
|
||||
- Improved waterlogging to behave more like vanilla
|
||||
- JEI version 9.7.1 or higher is now required
|
||||
|
||||
### Added
|
||||
|
||||
- Forge relocation and Packing Tape blacklist tag entries to prevent block movement
|
||||
- Japanese translations for certain autocrafting actions
|
||||
|
||||
## [v1.10.2] - 2022-03-26
|
||||
|
||||
### Changed
|
||||
|
||||
- Ported to Minecraft 1.18.2.
|
||||
|
10
build.gradle
10
build.gradle
@@ -33,7 +33,7 @@ apply plugin: 'maven-publish'
|
||||
|
||||
group = 'com.refinedmods'
|
||||
archivesBaseName = 'refinedstorage'
|
||||
version = '1.10.2'
|
||||
version = '1.10.3'
|
||||
|
||||
if (System.getenv('GITHUB_SHA') != null) {
|
||||
version += '+' + System.getenv('GITHUB_SHA').substring(0, 7)
|
||||
@@ -102,10 +102,10 @@ processResources {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
minecraft 'net.minecraftforge:forge:1.18.2-40.0.32'
|
||||
minecraft 'net.minecraftforge:forge:1.18.2-40.1.48'
|
||||
|
||||
compileOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171:api")
|
||||
runtimeOnly fg.deobf("mezz.jei:jei-1.18.2:9.5.4.171")
|
||||
compileOnly fg.deobf("mezz.jei:jei-1.18.2:9.7.1.232:api")
|
||||
runtimeOnly fg.deobf("mezz.jei:jei-1.18.2:9.7.1.232")
|
||||
|
||||
compileOnly fg.deobf('curse.maven:mouse-tweaks-60089:3578801')
|
||||
|
||||
@@ -122,7 +122,7 @@ jar {
|
||||
"Specification-Vendor" : "refinedmods",
|
||||
"Specification-Version" : "1",
|
||||
"Implementation-Title" : project.name,
|
||||
"Implementation-Version" : "${version}",
|
||||
"Implementation-Version" : project.jar.archiveVersion,
|
||||
"Implementation-Vendor" : "refinedmods",
|
||||
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")
|
||||
])
|
||||
|
@@ -767,6 +767,8 @@ bbae585b79552836f291bd7a254bb5311362b717 assets/refinedstorage/models/item/yello
|
||||
8bf5c07f71be511207cb3338cd9ab569f23d89d6 assets/refinedstorage/models/item/yellow_relay.json
|
||||
031da071bd54f6bbd6bd726ae8e54dcb31d93dd7 assets/refinedstorage/models/item/yellow_security_manager.json
|
||||
8cd04b5fd0ef2456369a59326d87b5067a6b7cf5 assets/refinedstorage/models/item/yellow_wireless_transmitter.json
|
||||
346cf6402101b92a94df091df36ea44fb526776e data/forge/tags/blocks/relocation_not_supported.json
|
||||
072517fbb36937374da062823ff793db732cee6c data/packingtape/tags/block_entity_type/blacklist/problematic.json
|
||||
24e9450a858ed0e2268fee8f5d37a168f92e73bc data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_controller.json
|
||||
0e90c4471c953dbb46ae3f87b713f107a4b5c6ed data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter.json
|
||||
6645b1e1c826d9147b0c81d3169ab0e8e1ef6ef2 data/refinedstorage/advancements/recipes/refinedstorage/coloring_recipes/black_crafter_manager.json
|
||||
@@ -1599,6 +1601,22 @@ f7ec08070c9ea50a614731adc57d07b94cdd3853 data/refinedstorage/recipes/pattern_gri
|
||||
f60de4928bb466ca6c9010d07817963f771caa94 data/refinedstorage/recipes/pattern_grid/red_pattern_grid.json
|
||||
a4be089e23d8452846198b5c273fd2bcc77266ca data/refinedstorage/recipes/pattern_grid/white_pattern_grid.json
|
||||
c1672fda10e2f1326c8dfea6b0379cda5156a9e7 data/refinedstorage/recipes/pattern_grid/yellow_pattern_grid.json
|
||||
0b7b05fd6b7942263c550e1ac28029c34a2d1df3 data/refinedstorage/tags/blocks/controller.json
|
||||
55a19599ea37daf13407b2f2cfb8499f8ba0460d data/refinedstorage/tags/blocks/crafter.json
|
||||
a7e857fa1054067960733aeba34648b19ef7b6c0 data/refinedstorage/tags/blocks/crafter_manager.json
|
||||
65535d054b0c6adaefaf96d73a03d2c1bcfcbd12 data/refinedstorage/tags/blocks/crafting_grid.json
|
||||
dc6d041c09fccabd495c8f0edcd10ab07aafb4f5 data/refinedstorage/tags/blocks/crafting_monitor.json
|
||||
e3f2ad6beb27c3ab1e78d149050e0184c327cef0 data/refinedstorage/tags/blocks/creative_controller.json
|
||||
a46c335e9b9fe849307b6bda03ac1b62e43c8e5e data/refinedstorage/tags/blocks/detector.json
|
||||
4d6cf8175e66ad05a36b03d2e1ba3ee55fbf150f data/refinedstorage/tags/blocks/disk_manipulator.json
|
||||
b047ec7509a9adb5bdd7d7d7915211e27ecd51ae data/refinedstorage/tags/blocks/fluid_grid.json
|
||||
6cef1d9ca36a6f9b90188e8d1872e8b5d498b224 data/refinedstorage/tags/blocks/grid.json
|
||||
160871a29dcd72d0212afeb40462f36549f12725 data/refinedstorage/tags/blocks/network_receiver.json
|
||||
fa7ffed55c5cf1f96d0762495765d7e2be4ac89a data/refinedstorage/tags/blocks/network_transmitter.json
|
||||
428fd07b2f9098024738edb68efd338aed5f9723 data/refinedstorage/tags/blocks/pattern_grid.json
|
||||
cddb4a7aa4728aa0af85a16cbc52c87c25e95366 data/refinedstorage/tags/blocks/relay.json
|
||||
b9f5ac8ab978b8a5328fa480bc8a4d7bd2c307f2 data/refinedstorage/tags/blocks/security_manager.json
|
||||
46aed661692d3d4b26880e4b293b8892ce440706 data/refinedstorage/tags/blocks/wireless_transmitter.json
|
||||
0b7b05fd6b7942263c550e1ac28029c34a2d1df3 data/refinedstorage/tags/items/controller.json
|
||||
55a19599ea37daf13407b2f2cfb8499f8ba0460d data/refinedstorage/tags/items/crafter.json
|
||||
a7e857fa1054067960733aeba34648b19ef7b6c0 data/refinedstorage/tags/items/crafter_manager.json
|
||||
|
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"#refinedstorage:controller",
|
||||
"#refinedstorage:crafting_monitor",
|
||||
"#refinedstorage:relay",
|
||||
"#refinedstorage:crafter_manager",
|
||||
"#refinedstorage:crafter",
|
||||
"#refinedstorage:crafting_grid",
|
||||
"#refinedstorage:network_receiver",
|
||||
"#refinedstorage:disk_manipulator",
|
||||
"#refinedstorage:creative_controller",
|
||||
"#refinedstorage:pattern_grid",
|
||||
"#refinedstorage:network_transmitter",
|
||||
"#refinedstorage:security_manager",
|
||||
"#refinedstorage:fluid_grid",
|
||||
"#refinedstorage:detector",
|
||||
"#refinedstorage:grid",
|
||||
"#refinedstorage:wireless_transmitter",
|
||||
"refinedstorage:1k_storage_block",
|
||||
"refinedstorage:4k_storage_block",
|
||||
"refinedstorage:16k_storage_block",
|
||||
"refinedstorage:64k_storage_block",
|
||||
"refinedstorage:creative_storage_block",
|
||||
"refinedstorage:64k_fluid_storage_block",
|
||||
"refinedstorage:256k_fluid_storage_block",
|
||||
"refinedstorage:1024k_fluid_storage_block",
|
||||
"refinedstorage:4096k_fluid_storage_block",
|
||||
"refinedstorage:creative_fluid_storage_block",
|
||||
"refinedstorage:importer",
|
||||
"refinedstorage:exporter",
|
||||
"refinedstorage:external_storage",
|
||||
"refinedstorage:disk_drive",
|
||||
"refinedstorage:interface",
|
||||
"refinedstorage:fluid_interface",
|
||||
"refinedstorage:storage_monitor",
|
||||
"refinedstorage:constructor",
|
||||
"refinedstorage:destructor",
|
||||
"refinedstorage:portable_grid",
|
||||
"refinedstorage:creative_portable_grid"
|
||||
]
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:controller",
|
||||
"refinedstorage:creative_controller",
|
||||
"refinedstorage:detector",
|
||||
"refinedstorage:disk_drive",
|
||||
"refinedstorage:exporter",
|
||||
"refinedstorage:external_storage",
|
||||
"refinedstorage:grid",
|
||||
"refinedstorage:crafting_grid",
|
||||
"refinedstorage:pattern_grid",
|
||||
"refinedstorage:fluid_grid",
|
||||
"refinedstorage:importer",
|
||||
"refinedstorage:network_transmitter",
|
||||
"refinedstorage:network_receiver",
|
||||
"refinedstorage:relay",
|
||||
"refinedstorage:cable",
|
||||
"refinedstorage:1k_storage_block",
|
||||
"refinedstorage:4k_storage_block",
|
||||
"refinedstorage:16k_storage_block",
|
||||
"refinedstorage:64k_storage_block",
|
||||
"refinedstorage:creative_storage_block",
|
||||
"refinedstorage:64k_fluid_storage_block",
|
||||
"refinedstorage:256k_fluid_storage_block",
|
||||
"refinedstorage:1024k_fluid_storage_block",
|
||||
"refinedstorage:4096k_fluid_storage_block",
|
||||
"refinedstorage:creative_fluid_storage_block",
|
||||
"refinedstorage:security_manager",
|
||||
"refinedstorage:interface",
|
||||
"refinedstorage:fluid_interface",
|
||||
"refinedstorage:wireless_transmitter",
|
||||
"refinedstorage:storage_monitor",
|
||||
"refinedstorage:constructor",
|
||||
"refinedstorage:destructor",
|
||||
"refinedstorage:disk_manipulator",
|
||||
"refinedstorage:portable_grid",
|
||||
"refinedstorage:creative_portable_grid",
|
||||
"refinedstorage:crafter",
|
||||
"refinedstorage:crafter_manager",
|
||||
"refinedstorage:crafting_monitor"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_controller",
|
||||
"refinedstorage:orange_controller",
|
||||
"refinedstorage:magenta_controller",
|
||||
"refinedstorage:controller",
|
||||
"refinedstorage:yellow_controller",
|
||||
"refinedstorage:lime_controller",
|
||||
"refinedstorage:pink_controller",
|
||||
"refinedstorage:gray_controller",
|
||||
"refinedstorage:light_gray_controller",
|
||||
"refinedstorage:cyan_controller",
|
||||
"refinedstorage:purple_controller",
|
||||
"refinedstorage:blue_controller",
|
||||
"refinedstorage:brown_controller",
|
||||
"refinedstorage:green_controller",
|
||||
"refinedstorage:red_controller",
|
||||
"refinedstorage:black_controller"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_crafter",
|
||||
"refinedstorage:orange_crafter",
|
||||
"refinedstorage:magenta_crafter",
|
||||
"refinedstorage:crafter",
|
||||
"refinedstorage:yellow_crafter",
|
||||
"refinedstorage:lime_crafter",
|
||||
"refinedstorage:pink_crafter",
|
||||
"refinedstorage:gray_crafter",
|
||||
"refinedstorage:light_gray_crafter",
|
||||
"refinedstorage:cyan_crafter",
|
||||
"refinedstorage:purple_crafter",
|
||||
"refinedstorage:blue_crafter",
|
||||
"refinedstorage:brown_crafter",
|
||||
"refinedstorage:green_crafter",
|
||||
"refinedstorage:red_crafter",
|
||||
"refinedstorage:black_crafter"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_crafter_manager",
|
||||
"refinedstorage:orange_crafter_manager",
|
||||
"refinedstorage:magenta_crafter_manager",
|
||||
"refinedstorage:crafter_manager",
|
||||
"refinedstorage:yellow_crafter_manager",
|
||||
"refinedstorage:lime_crafter_manager",
|
||||
"refinedstorage:pink_crafter_manager",
|
||||
"refinedstorage:gray_crafter_manager",
|
||||
"refinedstorage:light_gray_crafter_manager",
|
||||
"refinedstorage:cyan_crafter_manager",
|
||||
"refinedstorage:purple_crafter_manager",
|
||||
"refinedstorage:blue_crafter_manager",
|
||||
"refinedstorage:brown_crafter_manager",
|
||||
"refinedstorage:green_crafter_manager",
|
||||
"refinedstorage:red_crafter_manager",
|
||||
"refinedstorage:black_crafter_manager"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_crafting_grid",
|
||||
"refinedstorage:orange_crafting_grid",
|
||||
"refinedstorage:magenta_crafting_grid",
|
||||
"refinedstorage:crafting_grid",
|
||||
"refinedstorage:yellow_crafting_grid",
|
||||
"refinedstorage:lime_crafting_grid",
|
||||
"refinedstorage:pink_crafting_grid",
|
||||
"refinedstorage:gray_crafting_grid",
|
||||
"refinedstorage:light_gray_crafting_grid",
|
||||
"refinedstorage:cyan_crafting_grid",
|
||||
"refinedstorage:purple_crafting_grid",
|
||||
"refinedstorage:blue_crafting_grid",
|
||||
"refinedstorage:brown_crafting_grid",
|
||||
"refinedstorage:green_crafting_grid",
|
||||
"refinedstorage:red_crafting_grid",
|
||||
"refinedstorage:black_crafting_grid"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_crafting_monitor",
|
||||
"refinedstorage:orange_crafting_monitor",
|
||||
"refinedstorage:magenta_crafting_monitor",
|
||||
"refinedstorage:crafting_monitor",
|
||||
"refinedstorage:yellow_crafting_monitor",
|
||||
"refinedstorage:lime_crafting_monitor",
|
||||
"refinedstorage:pink_crafting_monitor",
|
||||
"refinedstorage:gray_crafting_monitor",
|
||||
"refinedstorage:light_gray_crafting_monitor",
|
||||
"refinedstorage:cyan_crafting_monitor",
|
||||
"refinedstorage:purple_crafting_monitor",
|
||||
"refinedstorage:blue_crafting_monitor",
|
||||
"refinedstorage:brown_crafting_monitor",
|
||||
"refinedstorage:green_crafting_monitor",
|
||||
"refinedstorage:red_crafting_monitor",
|
||||
"refinedstorage:black_crafting_monitor"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_creative_controller",
|
||||
"refinedstorage:orange_creative_controller",
|
||||
"refinedstorage:magenta_creative_controller",
|
||||
"refinedstorage:creative_controller",
|
||||
"refinedstorage:yellow_creative_controller",
|
||||
"refinedstorage:lime_creative_controller",
|
||||
"refinedstorage:pink_creative_controller",
|
||||
"refinedstorage:gray_creative_controller",
|
||||
"refinedstorage:light_gray_creative_controller",
|
||||
"refinedstorage:cyan_creative_controller",
|
||||
"refinedstorage:purple_creative_controller",
|
||||
"refinedstorage:blue_creative_controller",
|
||||
"refinedstorage:brown_creative_controller",
|
||||
"refinedstorage:green_creative_controller",
|
||||
"refinedstorage:red_creative_controller",
|
||||
"refinedstorage:black_creative_controller"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_detector",
|
||||
"refinedstorage:orange_detector",
|
||||
"refinedstorage:magenta_detector",
|
||||
"refinedstorage:detector",
|
||||
"refinedstorage:yellow_detector",
|
||||
"refinedstorage:lime_detector",
|
||||
"refinedstorage:pink_detector",
|
||||
"refinedstorage:gray_detector",
|
||||
"refinedstorage:light_gray_detector",
|
||||
"refinedstorage:cyan_detector",
|
||||
"refinedstorage:purple_detector",
|
||||
"refinedstorage:blue_detector",
|
||||
"refinedstorage:brown_detector",
|
||||
"refinedstorage:green_detector",
|
||||
"refinedstorage:red_detector",
|
||||
"refinedstorage:black_detector"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_disk_manipulator",
|
||||
"refinedstorage:orange_disk_manipulator",
|
||||
"refinedstorage:magenta_disk_manipulator",
|
||||
"refinedstorage:disk_manipulator",
|
||||
"refinedstorage:yellow_disk_manipulator",
|
||||
"refinedstorage:lime_disk_manipulator",
|
||||
"refinedstorage:pink_disk_manipulator",
|
||||
"refinedstorage:gray_disk_manipulator",
|
||||
"refinedstorage:light_gray_disk_manipulator",
|
||||
"refinedstorage:cyan_disk_manipulator",
|
||||
"refinedstorage:purple_disk_manipulator",
|
||||
"refinedstorage:blue_disk_manipulator",
|
||||
"refinedstorage:brown_disk_manipulator",
|
||||
"refinedstorage:green_disk_manipulator",
|
||||
"refinedstorage:red_disk_manipulator",
|
||||
"refinedstorage:black_disk_manipulator"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_fluid_grid",
|
||||
"refinedstorage:orange_fluid_grid",
|
||||
"refinedstorage:magenta_fluid_grid",
|
||||
"refinedstorage:fluid_grid",
|
||||
"refinedstorage:yellow_fluid_grid",
|
||||
"refinedstorage:lime_fluid_grid",
|
||||
"refinedstorage:pink_fluid_grid",
|
||||
"refinedstorage:gray_fluid_grid",
|
||||
"refinedstorage:light_gray_fluid_grid",
|
||||
"refinedstorage:cyan_fluid_grid",
|
||||
"refinedstorage:purple_fluid_grid",
|
||||
"refinedstorage:blue_fluid_grid",
|
||||
"refinedstorage:brown_fluid_grid",
|
||||
"refinedstorage:green_fluid_grid",
|
||||
"refinedstorage:red_fluid_grid",
|
||||
"refinedstorage:black_fluid_grid"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_grid",
|
||||
"refinedstorage:orange_grid",
|
||||
"refinedstorage:magenta_grid",
|
||||
"refinedstorage:grid",
|
||||
"refinedstorage:yellow_grid",
|
||||
"refinedstorage:lime_grid",
|
||||
"refinedstorage:pink_grid",
|
||||
"refinedstorage:gray_grid",
|
||||
"refinedstorage:light_gray_grid",
|
||||
"refinedstorage:cyan_grid",
|
||||
"refinedstorage:purple_grid",
|
||||
"refinedstorage:blue_grid",
|
||||
"refinedstorage:brown_grid",
|
||||
"refinedstorage:green_grid",
|
||||
"refinedstorage:red_grid",
|
||||
"refinedstorage:black_grid"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_network_receiver",
|
||||
"refinedstorage:orange_network_receiver",
|
||||
"refinedstorage:magenta_network_receiver",
|
||||
"refinedstorage:network_receiver",
|
||||
"refinedstorage:yellow_network_receiver",
|
||||
"refinedstorage:lime_network_receiver",
|
||||
"refinedstorage:pink_network_receiver",
|
||||
"refinedstorage:gray_network_receiver",
|
||||
"refinedstorage:light_gray_network_receiver",
|
||||
"refinedstorage:cyan_network_receiver",
|
||||
"refinedstorage:purple_network_receiver",
|
||||
"refinedstorage:blue_network_receiver",
|
||||
"refinedstorage:brown_network_receiver",
|
||||
"refinedstorage:green_network_receiver",
|
||||
"refinedstorage:red_network_receiver",
|
||||
"refinedstorage:black_network_receiver"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_network_transmitter",
|
||||
"refinedstorage:orange_network_transmitter",
|
||||
"refinedstorage:magenta_network_transmitter",
|
||||
"refinedstorage:network_transmitter",
|
||||
"refinedstorage:yellow_network_transmitter",
|
||||
"refinedstorage:lime_network_transmitter",
|
||||
"refinedstorage:pink_network_transmitter",
|
||||
"refinedstorage:gray_network_transmitter",
|
||||
"refinedstorage:light_gray_network_transmitter",
|
||||
"refinedstorage:cyan_network_transmitter",
|
||||
"refinedstorage:purple_network_transmitter",
|
||||
"refinedstorage:blue_network_transmitter",
|
||||
"refinedstorage:brown_network_transmitter",
|
||||
"refinedstorage:green_network_transmitter",
|
||||
"refinedstorage:red_network_transmitter",
|
||||
"refinedstorage:black_network_transmitter"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_pattern_grid",
|
||||
"refinedstorage:orange_pattern_grid",
|
||||
"refinedstorage:magenta_pattern_grid",
|
||||
"refinedstorage:pattern_grid",
|
||||
"refinedstorage:yellow_pattern_grid",
|
||||
"refinedstorage:lime_pattern_grid",
|
||||
"refinedstorage:pink_pattern_grid",
|
||||
"refinedstorage:gray_pattern_grid",
|
||||
"refinedstorage:light_gray_pattern_grid",
|
||||
"refinedstorage:cyan_pattern_grid",
|
||||
"refinedstorage:purple_pattern_grid",
|
||||
"refinedstorage:blue_pattern_grid",
|
||||
"refinedstorage:brown_pattern_grid",
|
||||
"refinedstorage:green_pattern_grid",
|
||||
"refinedstorage:red_pattern_grid",
|
||||
"refinedstorage:black_pattern_grid"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_relay",
|
||||
"refinedstorage:orange_relay",
|
||||
"refinedstorage:magenta_relay",
|
||||
"refinedstorage:relay",
|
||||
"refinedstorage:yellow_relay",
|
||||
"refinedstorage:lime_relay",
|
||||
"refinedstorage:pink_relay",
|
||||
"refinedstorage:gray_relay",
|
||||
"refinedstorage:light_gray_relay",
|
||||
"refinedstorage:cyan_relay",
|
||||
"refinedstorage:purple_relay",
|
||||
"refinedstorage:blue_relay",
|
||||
"refinedstorage:brown_relay",
|
||||
"refinedstorage:green_relay",
|
||||
"refinedstorage:red_relay",
|
||||
"refinedstorage:black_relay"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_security_manager",
|
||||
"refinedstorage:orange_security_manager",
|
||||
"refinedstorage:magenta_security_manager",
|
||||
"refinedstorage:security_manager",
|
||||
"refinedstorage:yellow_security_manager",
|
||||
"refinedstorage:lime_security_manager",
|
||||
"refinedstorage:pink_security_manager",
|
||||
"refinedstorage:gray_security_manager",
|
||||
"refinedstorage:light_gray_security_manager",
|
||||
"refinedstorage:cyan_security_manager",
|
||||
"refinedstorage:purple_security_manager",
|
||||
"refinedstorage:blue_security_manager",
|
||||
"refinedstorage:brown_security_manager",
|
||||
"refinedstorage:green_security_manager",
|
||||
"refinedstorage:red_security_manager",
|
||||
"refinedstorage:black_security_manager"
|
||||
]
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"replace": false,
|
||||
"values": [
|
||||
"refinedstorage:white_wireless_transmitter",
|
||||
"refinedstorage:orange_wireless_transmitter",
|
||||
"refinedstorage:magenta_wireless_transmitter",
|
||||
"refinedstorage:wireless_transmitter",
|
||||
"refinedstorage:yellow_wireless_transmitter",
|
||||
"refinedstorage:lime_wireless_transmitter",
|
||||
"refinedstorage:pink_wireless_transmitter",
|
||||
"refinedstorage:gray_wireless_transmitter",
|
||||
"refinedstorage:light_gray_wireless_transmitter",
|
||||
"refinedstorage:cyan_wireless_transmitter",
|
||||
"refinedstorage:purple_wireless_transmitter",
|
||||
"refinedstorage:blue_wireless_transmitter",
|
||||
"refinedstorage:brown_wireless_transmitter",
|
||||
"refinedstorage:green_wireless_transmitter",
|
||||
"refinedstorage:red_wireless_transmitter",
|
||||
"refinedstorage:black_wireless_transmitter"
|
||||
]
|
||||
}
|
@@ -48,6 +48,7 @@ public final class RS {
|
||||
|
||||
RSBlocks.register();
|
||||
RSItems.register();
|
||||
RSLootFunctions.register();
|
||||
|
||||
FMLJavaModLoadingContext.get().getModEventBus().addListener(CommonSetup::onCommonSetup);
|
||||
FMLJavaModLoadingContext.get().getModEventBus().addGenericListener(BlockEntityType.class, CommonSetup::onRegisterBlockEntities);
|
||||
|
@@ -7,6 +7,7 @@ import com.refinedmods.refinedstorage.apiimpl.storage.ItemStorageType;
|
||||
import com.refinedmods.refinedstorage.block.*;
|
||||
import com.refinedmods.refinedstorage.item.blockitem.PortableGridBlockItem;
|
||||
import com.refinedmods.refinedstorage.util.ColorMap;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
@@ -15,6 +16,7 @@ import net.minecraftforge.registries.RegistryObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -28,6 +30,7 @@ public final class RSBlocks {
|
||||
public static final RegistryObject<ExternalStorageBlock> EXTERNAL_STORAGE;
|
||||
public static final Map<ItemStorageType, RegistryObject<StorageBlock>> STORAGE_BLOCKS = new EnumMap<>(ItemStorageType.class);
|
||||
public static final Map<FluidStorageType, RegistryObject<FluidStorageBlock>> FLUID_STORAGE_BLOCKS = new EnumMap<>(FluidStorageType.class);
|
||||
public static final Map<TagKey<Block>, ColorMap<? extends Block>> COLORED_BLOCK_TAGS = new HashMap<>();
|
||||
public static final RegistryObject<InterfaceBlock> INTERFACE;
|
||||
public static final RegistryObject<FluidInterfaceBlock> FLUID_INTERFACE;
|
||||
public static final RegistryObject<StorageMonitorBlock> STORAGE_MONITOR;
|
||||
|
@@ -5,38 +5,30 @@ import com.refinedmods.refinedstorage.loottable.CrafterLootFunction;
|
||||
import com.refinedmods.refinedstorage.loottable.PortableGridBlockLootFunction;
|
||||
import com.refinedmods.refinedstorage.loottable.StorageBlockLootFunction;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType;
|
||||
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
|
||||
import net.minecraftforge.registries.DeferredRegister;
|
||||
import net.minecraftforge.registries.RegistryObject;
|
||||
|
||||
public final class RSLootFunctions {
|
||||
private static LootItemFunctionType storageBlock;
|
||||
private static LootItemFunctionType portableGrid;
|
||||
private static LootItemFunctionType crafter;
|
||||
private static LootItemFunctionType controller;
|
||||
public static final RegistryObject<LootItemFunctionType> STORAGE_BLOCK;
|
||||
public static final RegistryObject<LootItemFunctionType> PORTABLE_GRID;
|
||||
public static final RegistryObject<LootItemFunctionType> CRAFTER;
|
||||
public static final RegistryObject<LootItemFunctionType> CONTROLLER;
|
||||
|
||||
private static final DeferredRegister<LootItemFunctionType> LOOT_ITEM_FUNCTIONS = DeferredRegister.create(Registry.LOOT_FUNCTION_REGISTRY, RS.ID);
|
||||
|
||||
static {
|
||||
STORAGE_BLOCK = LOOT_ITEM_FUNCTIONS.register("storage_block", () -> new LootItemFunctionType(new StorageBlockLootFunction.Serializer()));
|
||||
PORTABLE_GRID = LOOT_ITEM_FUNCTIONS.register("portable_grid", () -> new LootItemFunctionType(new PortableGridBlockLootFunction.Serializer()));
|
||||
CRAFTER = LOOT_ITEM_FUNCTIONS.register("crafter", () -> new LootItemFunctionType(new CrafterLootFunction.Serializer()));
|
||||
CONTROLLER = LOOT_ITEM_FUNCTIONS.register("controller", () -> new LootItemFunctionType(new ControllerLootFunction.Serializer()));
|
||||
}
|
||||
|
||||
private RSLootFunctions() {
|
||||
}
|
||||
|
||||
public static void register() {
|
||||
storageBlock = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "storage_block"), new LootItemFunctionType(new StorageBlockLootFunction.Serializer()));
|
||||
portableGrid = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "portable_grid"), new LootItemFunctionType(new PortableGridBlockLootFunction.Serializer()));
|
||||
crafter = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "crafter"), new LootItemFunctionType(new CrafterLootFunction.Serializer()));
|
||||
controller = Registry.register(Registry.LOOT_FUNCTION_TYPE, new ResourceLocation(RS.ID, "controller"), new LootItemFunctionType(new ControllerLootFunction.Serializer()));
|
||||
}
|
||||
|
||||
public static LootItemFunctionType getStorageBlock() {
|
||||
return storageBlock;
|
||||
}
|
||||
|
||||
public static LootItemFunctionType getPortableGrid() {
|
||||
return portableGrid;
|
||||
}
|
||||
|
||||
public static LootItemFunctionType getCrafter() {
|
||||
return crafter;
|
||||
}
|
||||
|
||||
public static LootItemFunctionType getController() {
|
||||
return controller;
|
||||
LOOT_ITEM_FUNCTIONS.register(FMLJavaModLoadingContext.get().getModEventBus());
|
||||
}
|
||||
}
|
||||
|
@@ -14,8 +14,8 @@ import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler;
|
||||
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
|
||||
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
|
||||
import com.refinedmods.refinedstorage.item.UpgradeItem;
|
||||
import com.refinedmods.refinedstorage.util.StackUtils;
|
||||
import com.refinedmods.refinedstorage.util.LevelUtils;
|
||||
import com.refinedmods.refinedstorage.util.StackUtils;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.PositionImpl;
|
||||
@@ -112,6 +112,8 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable,
|
||||
private void extractAndPlaceBlock(ItemStack stack) {
|
||||
ItemStack took = network.extractItem(stack, 1, compare, Action.SIMULATE);
|
||||
if (!took.isEmpty()) {
|
||||
// We have to copy took as the forge hook clears the item.
|
||||
final ItemStack tookCopy = took.copy();
|
||||
BlockPlaceContext ctx = new ConstructorBlockItemUseContext(
|
||||
level,
|
||||
LevelUtils.getFakePlayer((ServerLevel) level, getOwner()),
|
||||
@@ -122,7 +124,7 @@ public class ConstructorNetworkNode extends NetworkNode implements IComparable,
|
||||
|
||||
InteractionResult result = ForgeHooks.onPlaceItemIntoWorld(ctx);
|
||||
if (result.consumesAction()) {
|
||||
network.extractItem(stack, 1, Action.PERFORM);
|
||||
network.extractItem(tookCopy, 1, Action.PERFORM);
|
||||
}
|
||||
} else if (upgrades.hasUpgrade(UpgradeItem.Type.CRAFTING)) {
|
||||
ItemStack craft = itemFilters.getStackInSlot(0);
|
||||
|
@@ -15,8 +15,8 @@ import com.refinedmods.refinedstorage.inventory.item.UpgradeItemHandler;
|
||||
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeFluidInventoryListener;
|
||||
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
|
||||
import com.refinedmods.refinedstorage.item.UpgradeItem;
|
||||
import com.refinedmods.refinedstorage.util.StackUtils;
|
||||
import com.refinedmods.refinedstorage.util.LevelUtils;
|
||||
import com.refinedmods.refinedstorage.util.StackUtils;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
@@ -100,7 +100,12 @@ public class DestructorNetworkNode extends NetworkNode implements IComparable, I
|
||||
List<ItemEntity> droppedItems = level.getEntitiesOfClass(ItemEntity.class, new AABB(front));
|
||||
|
||||
for (ItemEntity entity : droppedItems) {
|
||||
ItemStack droppedItem = ((ItemEntity) entity).getItem();
|
||||
|
||||
if (entity.isRemoved()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack droppedItem = entity.getItem();
|
||||
|
||||
if (IWhitelistBlacklist.acceptsItem(itemFilters, mode, compare, droppedItem) &&
|
||||
network.insertItem(droppedItem, droppedItem.getCount(), Action.SIMULATE).isEmpty()) {
|
||||
|
@@ -5,16 +5,16 @@ import com.refinedmods.refinedstorage.api.network.security.Permission;
|
||||
import com.refinedmods.refinedstorage.api.util.Action;
|
||||
import com.refinedmods.refinedstorage.api.util.IComparer;
|
||||
import com.refinedmods.refinedstorage.apiimpl.API;
|
||||
import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler;
|
||||
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
|
||||
import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity;
|
||||
import com.refinedmods.refinedstorage.blockentity.config.IComparable;
|
||||
import com.refinedmods.refinedstorage.blockentity.config.IType;
|
||||
import com.refinedmods.refinedstorage.blockentity.config.RedstoneMode;
|
||||
import com.refinedmods.refinedstorage.inventory.fluid.FluidInventory;
|
||||
import com.refinedmods.refinedstorage.inventory.item.BaseItemHandler;
|
||||
import com.refinedmods.refinedstorage.inventory.listener.NetworkNodeInventoryListener;
|
||||
import com.refinedmods.refinedstorage.util.LevelUtils;
|
||||
import com.refinedmods.refinedstorage.util.NetworkUtils;
|
||||
import com.refinedmods.refinedstorage.util.StackUtils;
|
||||
import com.refinedmods.refinedstorage.util.LevelUtils;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
@@ -299,9 +299,13 @@ public class StorageMonitorNetworkNode extends NetworkNode implements IComparabl
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (compare == IComparer.COMPARE_NBT) {
|
||||
ItemStack stored = network.getItemStorageCache().getList().get(toCheck, compare);
|
||||
|
||||
return stored != null ? stored.getCount() : 0;
|
||||
} else {
|
||||
return network.getItemStorageCache().getList().getStacks(toCheck).stream().mapToInt(entry -> entry.getStack().getCount()).sum();
|
||||
}
|
||||
|
||||
} else if (getType() == IType.FLUIDS) {
|
||||
FluidStack toCheck = fluidFilter.getFluid(0);
|
||||
|
||||
|
@@ -95,13 +95,14 @@ public class FluidStorageDisk implements IStorageDisk<FluidStack> {
|
||||
|
||||
return StackUtils.copy(otherStack, size - remainingSpace);
|
||||
} else {
|
||||
int maxConsumable = Math.min(size, Integer.MAX_VALUE - otherStack.getAmount());
|
||||
if (action == Action.PERFORM) {
|
||||
otherStack.grow(size);
|
||||
otherStack.grow(maxConsumable);
|
||||
|
||||
onChanged();
|
||||
}
|
||||
|
||||
return FluidStack.EMPTY;
|
||||
return StackUtils.copy(otherStack, size - maxConsumable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -102,14 +102,15 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
|
||||
|
||||
return ItemHandlerHelper.copyStackWithSize(otherStack, size - remainingSpace);
|
||||
} else {
|
||||
int maxConsumable = Math.min(size, Integer.MAX_VALUE - otherStack.getCount());
|
||||
if (action == Action.PERFORM) {
|
||||
otherStack.grow(size);
|
||||
itemCount += size;
|
||||
otherStack.grow(maxConsumable);
|
||||
itemCount += maxConsumable;
|
||||
|
||||
onChanged();
|
||||
}
|
||||
|
||||
return ItemStack.EMPTY;
|
||||
return ItemHandlerHelper.copyStackWithSize(otherStack, size - maxConsumable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,9 +6,9 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNodeProxy;
|
||||
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.Cover;
|
||||
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType;
|
||||
import com.refinedmods.refinedstorage.block.shape.ShapeCache;
|
||||
import com.refinedmods.refinedstorage.blockentity.CableBlockEntity;
|
||||
import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability;
|
||||
import com.refinedmods.refinedstorage.render.ConstantsCable;
|
||||
import com.refinedmods.refinedstorage.blockentity.CableBlockEntity;
|
||||
import com.refinedmods.refinedstorage.util.BlockUtils;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
@@ -165,7 +165,8 @@ public class CableBlock extends NetworkNodeBlock implements SimpleWaterloggedBlo
|
||||
@Nullable
|
||||
@Override
|
||||
public BlockState getStateForPlacement(BlockPlaceContext ctx) {
|
||||
return getState(defaultBlockState(), ctx.getLevel(), ctx.getClickedPos());
|
||||
FluidState fluidState = ctx.getLevel().getFluidState(ctx.getClickedPos());
|
||||
return getState(defaultBlockState().setValue(WATERLOGGED, fluidState.getType() == Fluids.WATER), ctx.getLevel(), ctx.getClickedPos());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -1,12 +1,12 @@
|
||||
package com.refinedmods.refinedstorage.block;
|
||||
|
||||
import com.refinedmods.refinedstorage.apiimpl.network.node.StorageMonitorNetworkNode;
|
||||
import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity;
|
||||
import com.refinedmods.refinedstorage.container.StorageMonitorContainerMenu;
|
||||
import com.refinedmods.refinedstorage.container.factory.BlockEntityMenuProvider;
|
||||
import com.refinedmods.refinedstorage.blockentity.StorageMonitorBlockEntity;
|
||||
import com.refinedmods.refinedstorage.util.BlockUtils;
|
||||
import com.refinedmods.refinedstorage.util.NetworkUtils;
|
||||
import com.refinedmods.refinedstorage.util.LevelUtils;
|
||||
import com.refinedmods.refinedstorage.util.NetworkUtils;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.network.chat.TranslatableComponent;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
@@ -40,7 +40,7 @@ public class StorageMonitorBlock extends NetworkNodeBlock {
|
||||
@SuppressWarnings("deprecation")
|
||||
public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand handIn, BlockHitResult hit) {
|
||||
if (!level.isClientSide) {
|
||||
ItemStack held = player.containerMenu.getCarried();
|
||||
ItemStack held = player.getItemInHand(handIn);
|
||||
|
||||
if (player.isCrouching()) {
|
||||
return NetworkUtils.attemptModify(level, pos, player, () -> NetworkHooks.openGui(
|
||||
|
@@ -6,10 +6,10 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNodeProxy;
|
||||
import com.refinedmods.refinedstorage.api.util.Action;
|
||||
import com.refinedmods.refinedstorage.apiimpl.API;
|
||||
import com.refinedmods.refinedstorage.apiimpl.network.node.NetworkNode;
|
||||
import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability;
|
||||
import com.refinedmods.refinedstorage.blockentity.config.IRedstoneConfigurable;
|
||||
import com.refinedmods.refinedstorage.blockentity.config.RedstoneMode;
|
||||
import com.refinedmods.refinedstorage.blockentity.data.BlockEntitySynchronizationParameter;
|
||||
import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
@@ -18,6 +18,8 @@ import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
@@ -28,6 +30,8 @@ public abstract class NetworkNodeBlockEntity<N extends NetworkNode> extends Base
|
||||
private N clientNode;
|
||||
private N removedNode;
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
protected NetworkNodeBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
|
||||
@@ -61,7 +65,10 @@ public abstract class NetworkNodeBlockEntity<N extends NetworkNode> extends Base
|
||||
INetworkNode node = manager.getNode(worldPosition);
|
||||
|
||||
if (node == null) {
|
||||
throw new IllegalStateException("No network node present at " + worldPosition.toString() + ", consider removing the block at this position");
|
||||
LOGGER.warn("Expected a node @ {} but couldn't find it, creating a new one...", worldPosition);
|
||||
node = createNode(level, worldPosition);
|
||||
manager.setNode(worldPosition, node);
|
||||
manager.markForSaving();
|
||||
}
|
||||
|
||||
return (N) node;
|
||||
|
@@ -0,0 +1,68 @@
|
||||
package com.refinedmods.refinedstorage.datageneration;
|
||||
|
||||
import com.refinedmods.refinedstorage.RSBlockEntities;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraft.data.tags.TagsProvider;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.TagKey;
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType;
|
||||
import net.minecraftforge.common.data.ExistingFileHelper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class BlockEntityTagGenerator extends TagsProvider<BlockEntityType<?>> {
|
||||
public BlockEntityTagGenerator(DataGenerator dataGenerator, String modId, @Nullable ExistingFileHelper existingFileHelper) {
|
||||
super(dataGenerator, Registry.BLOCK_ENTITY_TYPE, modId, existingFileHelper);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addTags() {
|
||||
TagAppender<BlockEntityType<?>> packingTapeBlacklist = tag(TagKey.create(Registry.BLOCK_ENTITY_TYPE_REGISTRY, new ResourceLocation("packingtape:blacklist/problematic")));
|
||||
packingTapeBlacklist.add(
|
||||
RSBlockEntities.CONTROLLER,
|
||||
RSBlockEntities.CREATIVE_CONTROLLER,
|
||||
RSBlockEntities.DETECTOR,
|
||||
RSBlockEntities.DISK_DRIVE,
|
||||
RSBlockEntities.EXPORTER,
|
||||
RSBlockEntities.EXTERNAL_STORAGE,
|
||||
RSBlockEntities.GRID,
|
||||
RSBlockEntities.CRAFTING_GRID,
|
||||
RSBlockEntities.PATTERN_GRID,
|
||||
RSBlockEntities.FLUID_GRID,
|
||||
RSBlockEntities.IMPORTER,
|
||||
RSBlockEntities.NETWORK_TRANSMITTER,
|
||||
RSBlockEntities.NETWORK_RECEIVER,
|
||||
RSBlockEntities.RELAY,
|
||||
RSBlockEntities.CABLE,
|
||||
RSBlockEntities.ONE_K_STORAGE_BLOCK,
|
||||
RSBlockEntities.FOUR_K_STORAGE_BLOCK,
|
||||
RSBlockEntities.SIXTEEN_K_STORAGE_BLOCK,
|
||||
RSBlockEntities.SIXTY_FOUR_K_STORAGE_BLOCK,
|
||||
RSBlockEntities.CREATIVE_STORAGE_BLOCK,
|
||||
RSBlockEntities.SIXTY_FOUR_K_FLUID_STORAGE_BLOCK,
|
||||
RSBlockEntities.TWO_HUNDRED_FIFTY_SIX_K_FLUID_STORAGE_BLOCK,
|
||||
RSBlockEntities.THOUSAND_TWENTY_FOUR_K_FLUID_STORAGE_BLOCK,
|
||||
RSBlockEntities.FOUR_THOUSAND_NINETY_SIX_K_FLUID_STORAGE_BLOCK,
|
||||
RSBlockEntities.CREATIVE_FLUID_STORAGE_BLOCK,
|
||||
RSBlockEntities.SECURITY_MANAGER,
|
||||
RSBlockEntities.INTERFACE,
|
||||
RSBlockEntities.FLUID_INTERFACE,
|
||||
RSBlockEntities.WIRELESS_TRANSMITTER,
|
||||
RSBlockEntities.STORAGE_MONITOR,
|
||||
RSBlockEntities.CONSTRUCTOR,
|
||||
RSBlockEntities.DESTRUCTOR,
|
||||
RSBlockEntities.DISK_MANIPULATOR,
|
||||
RSBlockEntities.PORTABLE_GRID,
|
||||
RSBlockEntities.CREATIVE_PORTABLE_GRID,
|
||||
RSBlockEntities.CRAFTER,
|
||||
RSBlockEntities.CRAFTER_MANAGER,
|
||||
RSBlockEntities.CRAFTING_MONITOR
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return "Block Entity Type Tags";
|
||||
}
|
||||
}
|
@@ -0,0 +1,42 @@
|
||||
package com.refinedmods.refinedstorage.datageneration;
|
||||
|
||||
import com.refinedmods.refinedstorage.RSBlocks;
|
||||
import net.minecraft.data.DataGenerator;
|
||||
import net.minecraft.data.tags.BlockTagsProvider;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraftforge.common.data.ExistingFileHelper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class BlockTagGenerator extends BlockTagsProvider {
|
||||
public BlockTagGenerator(DataGenerator dataGenerator, String modId, @Nullable ExistingFileHelper existingFileHelper) {
|
||||
super(dataGenerator, modId, existingFileHelper);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addTags() {
|
||||
TagAppender<Block> noRelocationTag = tag(BlockTags.create(new ResourceLocation("forge:relocation_not_supported")));
|
||||
RSBlocks.COLORED_BLOCK_TAGS.forEach((tag, map) -> {
|
||||
map.values().forEach(block -> tag(tag).add(block.get()));
|
||||
noRelocationTag.addTags(tag);
|
||||
});
|
||||
RSBlocks.STORAGE_BLOCKS.forEach((tag, block) -> noRelocationTag.add(block.get()));
|
||||
RSBlocks.FLUID_STORAGE_BLOCKS.forEach((tag, block) -> noRelocationTag.add(block.get()));
|
||||
|
||||
noRelocationTag.add(
|
||||
RSBlocks.IMPORTER.get(),
|
||||
RSBlocks.EXPORTER.get(),
|
||||
RSBlocks.EXTERNAL_STORAGE.get(),
|
||||
RSBlocks.DISK_DRIVE.get(),
|
||||
RSBlocks.INTERFACE.get(),
|
||||
RSBlocks.FLUID_INTERFACE.get(),
|
||||
RSBlocks.STORAGE_MONITOR.get(),
|
||||
RSBlocks.CONSTRUCTOR.get(),
|
||||
RSBlocks.DESTRUCTOR.get(),
|
||||
RSBlocks.PORTABLE_GRID.get(),
|
||||
RSBlocks.CREATIVE_PORTABLE_GRID.get()
|
||||
);
|
||||
}
|
||||
}
|
@@ -13,12 +13,22 @@ public class DataGenerators {
|
||||
}
|
||||
if (event.includeServer()) {
|
||||
event.getGenerator().addProvider(new RecipeGenerator(event.getGenerator()));
|
||||
event.getGenerator().addProvider(new TagGenerator(
|
||||
BlockTagGenerator blockTagGenerator = new BlockTagGenerator(
|
||||
event.getGenerator(),
|
||||
new BlockTagsProvider(event.getGenerator(), RS.ID, event.getExistingFileHelper()),
|
||||
RS.ID,
|
||||
event.getExistingFileHelper());
|
||||
event.getGenerator().addProvider(blockTagGenerator);
|
||||
event.getGenerator().addProvider(new ItemTagGenerator(
|
||||
event.getGenerator(),
|
||||
blockTagGenerator,
|
||||
RS.ID,
|
||||
event.getExistingFileHelper())
|
||||
);
|
||||
event.getGenerator().addProvider(new BlockEntityTagGenerator(
|
||||
event.getGenerator(),
|
||||
RS.ID,
|
||||
event.getExistingFileHelper()
|
||||
));
|
||||
event.getGenerator().addProvider(new LootTableGenerator(event.getGenerator()));
|
||||
}
|
||||
}
|
||||
|
@@ -8,8 +8,8 @@ import net.minecraftforge.common.data.ExistingFileHelper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class TagGenerator extends ItemTagsProvider {
|
||||
public TagGenerator(DataGenerator dataGenerator, BlockTagsProvider blockTagProvider, String modId, @Nullable ExistingFileHelper existingFileHelper) {
|
||||
public class ItemTagGenerator extends ItemTagsProvider {
|
||||
public ItemTagGenerator(DataGenerator dataGenerator, BlockTagsProvider blockTagProvider, String modId, @Nullable ExistingFileHelper existingFileHelper) {
|
||||
super(dataGenerator, blockTagProvider, modId, existingFileHelper);
|
||||
}
|
||||
|
@@ -5,9 +5,11 @@ import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.refinedmods.refinedstorage.item.CoverItem;
|
||||
import com.refinedmods.refinedstorage.recipe.CoverRecipe;
|
||||
import mezz.jei.api.constants.VanillaTypes;
|
||||
import mezz.jei.api.gui.IRecipeLayout;
|
||||
import mezz.jei.api.ingredients.IIngredients;
|
||||
import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICustomCraftingCategoryExtension;
|
||||
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||
import mezz.jei.api.gui.builder.IRecipeSlotBuilder;
|
||||
import mezz.jei.api.gui.ingredient.ICraftingGridHelper;
|
||||
import mezz.jei.api.recipe.IFocusGroup;
|
||||
import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension;
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
@@ -16,25 +18,24 @@ import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraftforge.common.Tags;
|
||||
import net.minecraftforge.common.util.Size2i;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
import net.minecraftforge.registries.tags.ITag;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryExtension {
|
||||
public class CoverCraftingCategoryExtension implements ICraftingCategoryExtension {
|
||||
|
||||
|
||||
@Override
|
||||
public void setIngredients(IIngredients ingredients) {
|
||||
public void setRecipe(IRecipeLayoutBuilder builder, ICraftingGridHelper craftingGridHelper, IFocusGroup focuses) {
|
||||
List<ItemStack> input = new ArrayList<>();
|
||||
List<ItemStack> output = new ArrayList<>();
|
||||
for (Block block : ForgeRegistries.BLOCKS.getValues()) {
|
||||
Item item = Item.byBlock(block);
|
||||
if (item == Items.AIR) {
|
||||
Item item = Item.BY_BLOCK.get(block);
|
||||
if (item == null || item == Items.AIR) {
|
||||
continue;
|
||||
}
|
||||
NonNullList<ItemStack> subBlocks = NonNullList.create();
|
||||
@@ -48,15 +49,26 @@ public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryEx
|
||||
}
|
||||
}
|
||||
}
|
||||
ITag<Item> nuggets = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON);
|
||||
ingredients.setInputLists(VanillaTypes.ITEM, Arrays.asList(nuggets.stream().map(ItemStack::new).collect(Collectors.toList()), input));
|
||||
ingredients.setOutputs(VanillaTypes.ITEM, output);
|
||||
|
||||
ITag<Item> nuggetTag = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON);
|
||||
List<ItemStack> nuggets = nuggetTag.stream().map(ItemStack::new).toList();
|
||||
List<List<ItemStack>> inputs = new ArrayList<>(Collections.nCopies(9, new ArrayList<>()));
|
||||
inputs.set(3, nuggets);
|
||||
inputs.set(4, input);
|
||||
List<IRecipeSlotBuilder> inputSlots = craftingGridHelper.createAndSetInputs(builder, VanillaTypes.ITEM_STACK, inputs, 3, 3);
|
||||
IRecipeSlotBuilder outputSlot = craftingGridHelper.createAndSetOutputs(builder, VanillaTypes.ITEM_STACK, output);
|
||||
|
||||
builder.createFocusLink(inputSlots.get(4), outputSlot);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Size2i getSize() {
|
||||
return new Size2i(2, 1);
|
||||
public int getWidth() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -64,21 +76,4 @@ public class CoverCraftingCategoryExtension implements ICustomCraftingCategoryEx
|
||||
public ResourceLocation getRegistryName() {
|
||||
return CoverRecipe.SERIALIZER.getRegistryName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRecipe(IRecipeLayout recipeLayout, IIngredients ingredients) {
|
||||
ITag<Item> nuggets = ForgeRegistries.ITEMS.tags().getTag(Tags.Items.NUGGETS_IRON);
|
||||
ItemStack stack = recipeLayout.getFocus(VanillaTypes.ITEM).getValue();
|
||||
if (stack.getItem() instanceof CoverItem) {
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(4, nuggets.stream().map(ItemStack::new).collect(Collectors.toList()));
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, CoverItem.getItem(stack));
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, stack);
|
||||
} else {
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(4, nuggets.stream().map(ItemStack::new).collect(Collectors.toList()));
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, stack);
|
||||
ItemStack output = new ItemStack(RSItems.COVER.get());
|
||||
CoverItem.setItem(output, stack);
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -9,8 +9,11 @@ import com.refinedmods.refinedstorage.network.grid.GridTransferMessage;
|
||||
import com.refinedmods.refinedstorage.screen.grid.GridScreen;
|
||||
import com.refinedmods.refinedstorage.screen.grid.stack.IGridStack;
|
||||
import com.refinedmods.refinedstorage.screen.grid.stack.ItemGridStack;
|
||||
import mezz.jei.api.gui.IRecipeLayout;
|
||||
import mezz.jei.api.gui.ingredient.IGuiIngredient;
|
||||
import mezz.jei.api.constants.VanillaTypes;
|
||||
import mezz.jei.api.forge.ForgeTypes;
|
||||
import mezz.jei.api.gui.ingredient.IRecipeSlotView;
|
||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||
import mezz.jei.api.recipe.RecipeIngredientRole;
|
||||
import mezz.jei.api.recipe.transfer.IRecipeTransferError;
|
||||
import mezz.jei.api.recipe.transfer.IRecipeTransferHandler;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
@@ -19,11 +22,9 @@ import net.minecraft.world.inventory.CraftingContainer;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.crafting.CraftingRecipe;
|
||||
import net.minecraftforge.fluids.FluidStack;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridContainerMenu, Object> {
|
||||
@@ -47,23 +48,22 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
|
||||
}
|
||||
|
||||
@Override
|
||||
public IRecipeTransferError transferRecipe(@Nonnull GridContainerMenu container, Object recipe, @Nonnull IRecipeLayout recipeLayout, @Nonnull Player player, boolean maxTransfer, boolean doTransfer) {
|
||||
public @Nullable IRecipeTransferError transferRecipe(GridContainerMenu container, Object recipe, IRecipeSlotsView recipeSlots, Player player, boolean maxTransfer, boolean doTransfer) {
|
||||
if (!(container.getScreenInfoProvider() instanceof GridScreen)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
GridType type = container.getGrid().getGridType();
|
||||
|
||||
if (type == GridType.CRAFTING) {
|
||||
return transferRecipeForCraftingGrid(container, recipe, recipeLayout, player, doTransfer);
|
||||
return transferRecipeForCraftingGrid(container, recipe, recipeSlots, player, doTransfer);
|
||||
} else if (type == GridType.PATTERN) {
|
||||
return transferRecipeForPatternGrid(container, recipe, recipeLayout, player, doTransfer);
|
||||
return transferRecipeForPatternGrid(container, recipe, recipeSlots, player, doTransfer);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private RecipeTransferCraftingGridError transferRecipeForCraftingGrid(GridContainerMenu container, Object recipe, IRecipeLayout recipeLayout, Player player, boolean doTransfer) {
|
||||
private RecipeTransferCraftingGridError transferRecipeForCraftingGrid(GridContainerMenu container, Object recipe, IRecipeSlotsView recipeLayout, Player player, boolean doTransfer) {
|
||||
IngredientTracker tracker = createTracker(container, recipeLayout, player, doTransfer);
|
||||
|
||||
if (doTransfer) {
|
||||
@@ -88,7 +88,7 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
|
||||
return null;
|
||||
}
|
||||
|
||||
private IRecipeTransferError transferRecipeForPatternGrid(GridContainerMenu container, Object recipe, IRecipeLayout recipeLayout, Player player, boolean doTransfer) {
|
||||
private IRecipeTransferError transferRecipeForPatternGrid(GridContainerMenu container, Object recipe, IRecipeSlotsView recipeLayout, Player player, boolean doTransfer) {
|
||||
IngredientTracker tracker = createTracker(container, recipeLayout, player, doTransfer);
|
||||
|
||||
if (doTransfer) {
|
||||
@@ -102,7 +102,7 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
|
||||
return null;
|
||||
}
|
||||
|
||||
private IngredientTracker createTracker(GridContainerMenu container, IRecipeLayout recipeLayout, Player player, boolean doTransfer) {
|
||||
private IngredientTracker createTracker(GridContainerMenu container, IRecipeSlotsView recipeLayout, Player player, boolean doTransfer) {
|
||||
IngredientTracker tracker = new IngredientTracker(recipeLayout, doTransfer);
|
||||
|
||||
// Using IGridView#getStacks will return a *filtered* list of items in the view,
|
||||
@@ -145,66 +145,74 @@ public class GridRecipeTransferHandler implements IRecipeTransferHandler<GridCon
|
||||
return System.currentTimeMillis() - lastTransferTimeMs <= TRANSFER_SCROLLBAR_DELAY_MS;
|
||||
}
|
||||
|
||||
private void moveItems(GridContainerMenu gridContainer, Object recipe, IRecipeLayout recipeLayout, IngredientTracker tracker) {
|
||||
private void moveItems(GridContainerMenu gridContainer, Object recipe, IRecipeSlotsView recipeLayout, IngredientTracker tracker) {
|
||||
this.lastTransferTimeMs = System.currentTimeMillis();
|
||||
|
||||
if (gridContainer.getGrid().getGridType() == GridType.PATTERN && !(recipe instanceof CraftingRecipe)) {
|
||||
moveForProcessing(recipeLayout, tracker);
|
||||
} else {
|
||||
move(gridContainer, recipeLayout, recipe);
|
||||
move(recipeLayout);
|
||||
}
|
||||
}
|
||||
|
||||
private void move(GridContainerMenu gridContainer, IRecipeLayout recipeLayout, Object recipe) {
|
||||
RS.NETWORK_HANDLER.sendToServer(new GridTransferMessage(
|
||||
recipeLayout.getItemStacks().getGuiIngredients(),
|
||||
gridContainer.slots.stream().filter(s -> s.container instanceof CraftingContainer).collect(Collectors.toList()),
|
||||
recipe instanceof CraftingRecipe
|
||||
));
|
||||
private void move(IRecipeSlotsView recipeSlotsView) {
|
||||
List<List<ItemStack>> inputs = recipeSlotsView.getSlotViews(RecipeIngredientRole.INPUT).stream().map(view -> {
|
||||
|
||||
//Creating a mutable list
|
||||
List<ItemStack> stacks = view.getIngredients(VanillaTypes.ITEM_STACK).collect(Collectors.toCollection(ArrayList::new));
|
||||
|
||||
//moving the displayed stack to first
|
||||
Optional<ItemStack> displayStack = view.getDisplayedIngredient(VanillaTypes.ITEM_STACK);
|
||||
displayStack.ifPresent(stack -> {
|
||||
int index = stacks.indexOf(stack);
|
||||
if (index > -1) {
|
||||
stacks.remove(index);
|
||||
stacks.add(0, stack);
|
||||
}
|
||||
});
|
||||
return stacks;
|
||||
}).toList();
|
||||
|
||||
RS.NETWORK_HANDLER.sendToServer(new GridTransferMessage(inputs));
|
||||
}
|
||||
|
||||
private void moveForProcessing(IRecipeLayout recipeLayout, IngredientTracker tracker) {
|
||||
private void moveForProcessing(IRecipeSlotsView recipeLayout, IngredientTracker tracker) {
|
||||
List<ItemStack> inputs = new LinkedList<>();
|
||||
List<ItemStack> outputs = new LinkedList<>();
|
||||
|
||||
List<FluidStack> fluidInputs = new LinkedList<>();
|
||||
List<FluidStack> fluidOutputs = new LinkedList<>();
|
||||
|
||||
for (IGuiIngredient<ItemStack> guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) {
|
||||
handleItemIngredient(inputs, outputs, guiIngredient, tracker);
|
||||
List<IRecipeSlotView> inputSlots = recipeLayout.getSlotViews(RecipeIngredientRole.INPUT);
|
||||
for (IRecipeSlotView view : inputSlots) {
|
||||
handleItemIngredient(inputs, view, tracker);
|
||||
handleFluidIngredient(fluidInputs, view);
|
||||
}
|
||||
|
||||
for (IGuiIngredient<FluidStack> guiIngredient : recipeLayout.getFluidStacks().getGuiIngredients().values()) {
|
||||
handleFluidIngredient(fluidInputs, fluidOutputs, guiIngredient);
|
||||
List<IRecipeSlotView> outputSlots = recipeLayout.getSlotViews(RecipeIngredientRole.OUTPUT);
|
||||
for (IRecipeSlotView view : outputSlots) {
|
||||
handleItemIngredient(outputs, view, tracker);
|
||||
handleFluidIngredient(fluidOutputs, view);
|
||||
}
|
||||
|
||||
RS.NETWORK_HANDLER.sendToServer(new GridProcessingTransferMessage(inputs, outputs, fluidInputs, fluidOutputs));
|
||||
}
|
||||
|
||||
private void handleFluidIngredient(List<FluidStack> fluidInputs, List<FluidStack> fluidOutputs, IGuiIngredient<FluidStack> guiIngredient) {
|
||||
if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) {
|
||||
FluidStack ingredient = guiIngredient.getDisplayedIngredient().copy();
|
||||
|
||||
if (guiIngredient.isInput()) {
|
||||
fluidInputs.add(ingredient);
|
||||
} else {
|
||||
fluidOutputs.add(ingredient);
|
||||
}
|
||||
private void handleFluidIngredient(List<FluidStack> list, IRecipeSlotView slotView) {
|
||||
if (slotView != null) {
|
||||
slotView.getDisplayedIngredient(ForgeTypes.FLUID_STACK).ifPresent(list::add);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleItemIngredient(List<ItemStack> inputs, List<ItemStack> outputs, IGuiIngredient<ItemStack> guiIngredient, IngredientTracker tracker) {
|
||||
if (guiIngredient != null && guiIngredient.getDisplayedIngredient() != null) {
|
||||
ItemStack ingredient = tracker.findBestMatch(guiIngredient.getAllIngredients()).copy();
|
||||
private void handleItemIngredient(List<ItemStack> list, IRecipeSlotView slotView, IngredientTracker tracker) {
|
||||
if (slotView != null && slotView.getIngredients(VanillaTypes.ITEM_STACK).findAny().isPresent()) {
|
||||
ItemStack stack = tracker.findBestMatch(slotView.getIngredients(VanillaTypes.ITEM_STACK).toList());
|
||||
|
||||
if (ingredient == ItemStack.EMPTY) {
|
||||
ingredient = guiIngredient.getDisplayedIngredient().copy();
|
||||
if (stack.isEmpty() && slotView.getDisplayedIngredient(VanillaTypes.ITEM_STACK).isPresent()) {
|
||||
stack = slotView.getDisplayedIngredient(VanillaTypes.ITEM_STACK).get();
|
||||
}
|
||||
|
||||
if (guiIngredient.isInput()) {
|
||||
inputs.add(ingredient);
|
||||
} else {
|
||||
outputs.add(ingredient);
|
||||
if (!stack.isEmpty()) {
|
||||
list.add(stack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,30 +1,60 @@
|
||||
package com.refinedmods.refinedstorage.integration.jei;
|
||||
|
||||
import com.refinedmods.refinedstorage.RSItems;
|
||||
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||
import com.refinedmods.refinedstorage.item.CoverItem;
|
||||
import com.refinedmods.refinedstorage.recipe.HollowCoverRecipe;
|
||||
import mezz.jei.api.constants.VanillaTypes;
|
||||
import mezz.jei.api.gui.IRecipeLayout;
|
||||
import mezz.jei.api.ingredients.IIngredients;
|
||||
import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICustomCraftingCategoryExtension;
|
||||
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder;
|
||||
import mezz.jei.api.gui.builder.IRecipeSlotBuilder;
|
||||
import mezz.jei.api.gui.ingredient.ICraftingGridHelper;
|
||||
import mezz.jei.api.recipe.IFocusGroup;
|
||||
import mezz.jei.api.recipe.category.extensions.vanilla.crafting.ICraftingCategoryExtension;
|
||||
import net.minecraft.core.NonNullList;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.common.util.Size2i;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraftforge.registries.ForgeRegistries;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class HollowCoverCraftingCategoryExtension implements ICustomCraftingCategoryExtension {
|
||||
public class HollowCoverCraftingCategoryExtension implements ICraftingCategoryExtension {
|
||||
|
||||
@Override
|
||||
public void setIngredients(IIngredients ingredients) {
|
||||
ingredients.setInput(VanillaTypes.ITEM, new ItemStack(RSItems.COVER.get()));
|
||||
ingredients.setOutput(VanillaTypes.ITEM, new ItemStack(RSItems.HOLLOW_COVER.get()));
|
||||
public void setRecipe(IRecipeLayoutBuilder builder, ICraftingGridHelper craftingGridHelper, IFocusGroup focuses) {
|
||||
|
||||
List<List<ItemStack>> stacks = new ArrayList<>(Collections.nCopies(9, new ArrayList<>()));
|
||||
List<ItemStack> input = new ArrayList<>();
|
||||
List<ItemStack> output = new ArrayList<>();
|
||||
for (Block block : ForgeRegistries.BLOCKS.getValues()) {
|
||||
Item item = Item.BY_BLOCK.get(block);
|
||||
if (item == null || item == Items.AIR) {
|
||||
continue;
|
||||
}
|
||||
NonNullList<ItemStack> subBlocks = NonNullList.create();
|
||||
block.fillItemCategory(CreativeModeTab.TAB_SEARCH, subBlocks);
|
||||
for (ItemStack subBlock : subBlocks) {
|
||||
if (CoverManager.isValidCover(subBlock)) {
|
||||
ItemStack fullCover = new ItemStack(RSItems.COVER.get());
|
||||
CoverItem.setItem(fullCover, subBlock);
|
||||
input.add(fullCover);
|
||||
ItemStack hollowCover = new ItemStack(RSItems.HOLLOW_COVER.get());
|
||||
CoverItem.setItem(hollowCover, subBlock);
|
||||
output.add(hollowCover);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Size2i getSize() {
|
||||
return new Size2i(2, 1);
|
||||
stacks.set(4, input);
|
||||
List<IRecipeSlotBuilder> inputSlots = craftingGridHelper.createAndSetInputs(builder, VanillaTypes.ITEM_STACK, stacks, 0, 0);
|
||||
IRecipeSlotBuilder outputSlot = craftingGridHelper.createAndSetOutputs(builder, VanillaTypes.ITEM_STACK, output);
|
||||
builder.createFocusLink(inputSlots.get(4), outputSlot);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -34,18 +64,12 @@ public class HollowCoverCraftingCategoryExtension implements ICustomCraftingCate
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRecipe(IRecipeLayout recipeLayout, IIngredients ingredients) {
|
||||
ItemStack stack = recipeLayout.getFocus(VanillaTypes.ITEM).getValue();
|
||||
if (stack.getItem() == RSItems.COVER.get()) {
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, stack);
|
||||
ItemStack output = new ItemStack(RSItems.HOLLOW_COVER.get());
|
||||
CoverItem.setItem(output, CoverItem.getItem(stack));
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, output);
|
||||
} else {
|
||||
ItemStack input = new ItemStack(RSItems.COVER.get());
|
||||
CoverItem.setItem(input, CoverItem.getItem(stack));
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(5, input);
|
||||
recipeLayout.getIngredientsGroup(VanillaTypes.ITEM).set(0, stack);
|
||||
}
|
||||
public int getWidth() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getHeight() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@@ -1,19 +1,18 @@
|
||||
package com.refinedmods.refinedstorage.integration.jei;
|
||||
|
||||
import mezz.jei.api.gui.ingredient.IGuiIngredient;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import mezz.jei.api.gui.ingredient.IRecipeSlotView;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
class Ingredient {
|
||||
private final IGuiIngredient<ItemStack> guiIngredient;
|
||||
private final IRecipeSlotView slotView;
|
||||
private final int required;
|
||||
private UUID craftStackId;
|
||||
private int fulfilled;
|
||||
|
||||
public Ingredient(IGuiIngredient<ItemStack> guiIngredient) {
|
||||
this.guiIngredient = guiIngredient;
|
||||
this.required = guiIngredient.getAllIngredients().get(0).getCount();
|
||||
public Ingredient(IRecipeSlotView view, int count) {
|
||||
this.slotView = view;
|
||||
this.required = count;
|
||||
}
|
||||
|
||||
public boolean isAvailable() {
|
||||
@@ -28,8 +27,8 @@ class Ingredient {
|
||||
return craftStackId != null;
|
||||
}
|
||||
|
||||
public IGuiIngredient<ItemStack> getGuiIngredient() {
|
||||
return guiIngredient;
|
||||
public IRecipeSlotView getSlotView() {
|
||||
return slotView;
|
||||
}
|
||||
|
||||
public UUID getCraftStackId() {
|
||||
|
@@ -6,8 +6,10 @@ import com.refinedmods.refinedstorage.api.util.IComparer;
|
||||
import com.refinedmods.refinedstorage.apiimpl.API;
|
||||
import com.refinedmods.refinedstorage.item.PatternItem;
|
||||
import com.refinedmods.refinedstorage.screen.grid.stack.IGridStack;
|
||||
import mezz.jei.api.gui.IRecipeLayout;
|
||||
import mezz.jei.api.gui.ingredient.IGuiIngredient;
|
||||
import mezz.jei.api.constants.VanillaTypes;
|
||||
import mezz.jei.api.gui.ingredient.IRecipeSlotView;
|
||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||
import mezz.jei.api.recipe.RecipeIngredientRole;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
@@ -20,12 +22,13 @@ public class IngredientTracker {
|
||||
private final Map<ResourceLocation, Integer> storedItems = new HashMap<>();
|
||||
private boolean doTransfer;
|
||||
|
||||
public IngredientTracker(IRecipeLayout recipeLayout, boolean doTransfer) {
|
||||
for (IGuiIngredient<ItemStack> guiIngredient : recipeLayout.getItemStacks().getGuiIngredients().values()) {
|
||||
if (guiIngredient.isInput() && !guiIngredient.getAllIngredients().isEmpty()) {
|
||||
ingredients.add(new Ingredient(guiIngredient));
|
||||
}
|
||||
public IngredientTracker(IRecipeSlotsView recipeLayout, boolean doTransfer) {
|
||||
for (IRecipeSlotView slotView : recipeLayout.getSlotViews(RecipeIngredientRole.INPUT)) {
|
||||
Optional<ItemStack> optionalItemStack = slotView.getIngredients(VanillaTypes.ITEM_STACK).findAny();
|
||||
|
||||
optionalItemStack.ifPresent(stack -> ingredients.add(new Ingredient(slotView, stack.getCount())));
|
||||
}
|
||||
|
||||
this.doTransfer = doTransfer;
|
||||
}
|
||||
|
||||
@@ -55,9 +58,8 @@ public class IngredientTracker {
|
||||
}
|
||||
|
||||
Optional<ItemStack> match = ingredient
|
||||
.getGuiIngredient()
|
||||
.getAllIngredients()
|
||||
.stream()
|
||||
.getSlotView()
|
||||
.getIngredients(VanillaTypes.ITEM_STACK)
|
||||
.filter(s -> API.instance().getComparer().isEqual(stack, s, IComparer.COMPARE_NBT))
|
||||
.findFirst();
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package com.refinedmods.refinedstorage.integration.jei;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import mezz.jei.api.gui.IRecipeLayout;
|
||||
import mezz.jei.api.gui.ingredient.IRecipeSlotsView;
|
||||
import mezz.jei.api.recipe.transfer.IRecipeTransferError;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
@@ -16,6 +16,7 @@ import java.util.List;
|
||||
public class RecipeTransferCraftingGridError implements IRecipeTransferError {
|
||||
protected static final Color AUTOCRAFTING_HIGHLIGHT_COLOR = new Color(0.0f, 0.0f, 1.0f, 0.4f);
|
||||
private static final Color MISSING_HIGHLIGHT_COLOR = new Color(1.0f, 0.0f, 0.0f, 0.4f);
|
||||
private static final boolean HOST_OS_IS_MACOS = System.getProperty("os.name").equals("Mac OS X");
|
||||
protected final IngredientTracker tracker;
|
||||
|
||||
public RecipeTransferCraftingGridError(IngredientTracker tracker) {
|
||||
@@ -28,11 +29,12 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showError(PoseStack stack, int mouseX, int mouseY, IRecipeLayout recipeLayout, int recipeX, int recipeY) {
|
||||
List<Component> message = drawIngredientHighlights(stack, recipeX, recipeY);
|
||||
public void showError(PoseStack poseStack, int mouseX, int mouseY, IRecipeSlotsView recipeSlotsView, int recipeX, int recipeY) {
|
||||
poseStack.translate(recipeX, recipeY, 0);
|
||||
List<Component> message = drawIngredientHighlights(poseStack, recipeX, recipeY);
|
||||
|
||||
Screen currentScreen = Minecraft.getInstance().screen;
|
||||
currentScreen.renderComponentTooltip(stack, message, mouseX, mouseY);
|
||||
currentScreen.renderComponentTooltip(poseStack, message, mouseX, mouseY);
|
||||
}
|
||||
|
||||
protected List<Component> drawIngredientHighlights(PoseStack stack, int recipeX, int recipeY) {
|
||||
@@ -45,10 +47,10 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError {
|
||||
for (Ingredient ingredient : tracker.getIngredients()) {
|
||||
if (!ingredient.isAvailable()) {
|
||||
if (ingredient.isCraftable()) {
|
||||
ingredient.getGuiIngredient().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY);
|
||||
ingredient.getSlotView().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB());
|
||||
craftMessage = true;
|
||||
} else {
|
||||
ingredient.getGuiIngredient().drawHighlight(stack, MISSING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY);
|
||||
ingredient.getSlotView().drawHighlight(stack, MISSING_HIGHLIGHT_COLOR.getRGB());
|
||||
missingMessage = true;
|
||||
}
|
||||
}
|
||||
@@ -59,8 +61,12 @@ public class RecipeTransferCraftingGridError implements IRecipeTransferError {
|
||||
}
|
||||
|
||||
if (craftMessage) {
|
||||
if (HOST_OS_IS_MACOS) {
|
||||
message.add(new TranslatableComponent("gui.refinedstorage.jei.transfer.request_autocrafting_mac").withStyle(ChatFormatting.BLUE));
|
||||
} else {
|
||||
message.add(new TranslatableComponent("gui.refinedstorage.jei.transfer.request_autocrafting").withStyle(ChatFormatting.BLUE));
|
||||
}
|
||||
}
|
||||
|
||||
return message;
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ public class RecipeTransferPatternGridError extends RecipeTransferCraftingGridEr
|
||||
|
||||
for (Ingredient ingredient : tracker.getIngredients()) {
|
||||
if (ingredient.isCraftable()) {
|
||||
ingredient.getGuiIngredient().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB(), recipeX, recipeY);
|
||||
ingredient.getSlotView().drawHighlight(stack, AUTOCRAFTING_HIGHLIGHT_COLOR.getRGB());
|
||||
craftMessage = true;
|
||||
}
|
||||
}
|
||||
|
@@ -38,7 +38,7 @@ public class ControllerLootFunction extends LootItemConditionalFunction {
|
||||
|
||||
@Override
|
||||
public LootItemFunctionType getType() {
|
||||
return RSLootFunctions.getController();
|
||||
return RSLootFunctions.CONTROLLER.get();
|
||||
}
|
||||
|
||||
public static class Serializer extends LootItemConditionalFunction.Serializer<ControllerLootFunction> {
|
||||
|
@@ -40,7 +40,7 @@ public class CrafterLootFunction extends LootItemConditionalFunction {
|
||||
|
||||
@Override
|
||||
public LootItemFunctionType getType() {
|
||||
return RSLootFunctions.getCrafter();
|
||||
return RSLootFunctions.CRAFTER.get();
|
||||
}
|
||||
|
||||
public static class Serializer extends LootItemConditionalFunction.Serializer<CrafterLootFunction> {
|
||||
|
@@ -30,7 +30,7 @@ public class PortableGridBlockLootFunction extends LootItemConditionalFunction {
|
||||
|
||||
@Override
|
||||
public LootItemFunctionType getType() {
|
||||
return RSLootFunctions.getPortableGrid();
|
||||
return RSLootFunctions.PORTABLE_GRID.get();
|
||||
}
|
||||
|
||||
public static class Serializer extends LootItemConditionalFunction.Serializer<PortableGridBlockLootFunction> {
|
||||
|
@@ -51,7 +51,7 @@ public class StorageBlockLootFunction extends LootItemConditionalFunction {
|
||||
|
||||
@Override
|
||||
public LootItemFunctionType getType() {
|
||||
return RSLootFunctions.getStorageBlock();
|
||||
return RSLootFunctions.STORAGE_BLOCK.get();
|
||||
}
|
||||
|
||||
public static class Serializer extends LootItemConditionalFunction.Serializer<StorageBlockLootFunction> {
|
||||
|
@@ -1,47 +1,36 @@
|
||||
package com.refinedmods.refinedstorage.network.grid;
|
||||
|
||||
|
||||
import com.refinedmods.refinedstorage.api.network.grid.GridType;
|
||||
import com.refinedmods.refinedstorage.api.network.grid.IGrid;
|
||||
import com.refinedmods.refinedstorage.container.GridContainerMenu;
|
||||
import com.refinedmods.refinedstorage.util.StackUtils;
|
||||
import mezz.jei.api.gui.ingredient.IGuiIngredient;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.inventory.Slot;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class GridTransferMessage {
|
||||
private final ItemStack[][] recipe = new ItemStack[9][];
|
||||
private Map<Integer, ? extends IGuiIngredient<ItemStack>> inputs;
|
||||
private List<Slot> slots;
|
||||
boolean isCraftingRecipe;
|
||||
List<List<ItemStack>> inputs;
|
||||
|
||||
public GridTransferMessage() {
|
||||
}
|
||||
|
||||
public GridTransferMessage(Map<Integer, ? extends IGuiIngredient<ItemStack>> inputs, List<Slot> slots, boolean isCraftingRecipe) {
|
||||
public GridTransferMessage(List<List<ItemStack>> inputs) {
|
||||
this.inputs = inputs;
|
||||
this.slots = slots;
|
||||
this.isCraftingRecipe = isCraftingRecipe;
|
||||
}
|
||||
|
||||
public static GridTransferMessage decode(FriendlyByteBuf buf) {
|
||||
GridTransferMessage msg = new GridTransferMessage();
|
||||
|
||||
int slots = buf.readInt();
|
||||
for (int i = 0; i < slots; i++) {
|
||||
int numberOfIngredients = buf.readInt();
|
||||
msg.recipe[i] = new ItemStack[numberOfIngredients];
|
||||
|
||||
for (int i = 0; i < slots; ++i) {
|
||||
int ingredients = buf.readInt();
|
||||
|
||||
msg.recipe[i] = new ItemStack[ingredients];
|
||||
|
||||
for (int j = 0; j < ingredients; ++j) {
|
||||
for (int j = 0; j < numberOfIngredients; j++) {
|
||||
msg.recipe[i][j] = StackUtils.readItemStack(buf);
|
||||
}
|
||||
}
|
||||
@@ -50,29 +39,18 @@ public class GridTransferMessage {
|
||||
}
|
||||
|
||||
public static void encode(GridTransferMessage message, FriendlyByteBuf buf) {
|
||||
buf.writeInt(message.slots.size());
|
||||
|
||||
for (Slot slot : message.slots) {
|
||||
IGuiIngredient<ItemStack> ingredient = message.inputs.get(slot.getSlotIndex() + (message.isCraftingRecipe ? 1 : 0));
|
||||
buf.writeInt(message.inputs.size());
|
||||
for (List<ItemStack> stacks : message.inputs) {
|
||||
buf.writeInt(stacks.size());
|
||||
|
||||
List<ItemStack> ingredients = new ArrayList<>();
|
||||
|
||||
if (ingredient != null) {
|
||||
for (ItemStack possibleStack : ingredient.getAllIngredients()) {
|
||||
if (possibleStack != null) {
|
||||
ingredients.add(possibleStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buf.writeInt(ingredients.size());
|
||||
|
||||
for (ItemStack possibleStack : ingredients) {
|
||||
for (ItemStack possibleStack : stacks) {
|
||||
StackUtils.writeItemStack(buf, possibleStack);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void handle(GridTransferMessage message, Supplier<NetworkEvent.Context> ctx) {
|
||||
Player player = ctx.get().getSender();
|
||||
|
||||
|
@@ -26,7 +26,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
public class FluidGridStack implements IGridStack {
|
||||
private static final String ERROR_PLACEHOLDER = "<Error>";
|
||||
private final Logger logger = LogManager.getLogger(getClass());
|
||||
private static final Logger LOGGER = LogManager.getLogger(FluidGridStack.class);
|
||||
|
||||
private final UUID id;
|
||||
private final FluidStack stack;
|
||||
@@ -86,7 +86,7 @@ public class FluidGridStack implements IGridStack {
|
||||
try {
|
||||
cachedName = stack.getDisplayName().getString();
|
||||
} catch (Throwable t) {
|
||||
logger.warn("Could not retrieve fluid name of {}", stack.getFluid().getRegistryName());
|
||||
LOGGER.warn("Could not retrieve fluid name of {}", stack.getFluid().getRegistryName());
|
||||
|
||||
cachedName = ERROR_PLACEHOLDER;
|
||||
}
|
||||
@@ -146,7 +146,7 @@ public class FluidGridStack implements IGridStack {
|
||||
try {
|
||||
tooltip = Lists.newArrayList(stack.getDisplayName());
|
||||
} catch (Throwable t) {
|
||||
logger.warn("Could not retrieve fluid tooltip of {}", stack.getFluid().getRegistryName());
|
||||
LOGGER.warn("Could not retrieve fluid tooltip of {}", stack.getFluid().getRegistryName());
|
||||
tooltip = Lists.newArrayList(new TextComponent(ERROR_PLACEHOLDER));
|
||||
}
|
||||
|
||||
|
@@ -26,7 +26,7 @@ import java.util.stream.Collectors;
|
||||
public class ItemGridStack implements IGridStack {
|
||||
private static final String ERROR_PLACEHOLDER = "<Error>";
|
||||
|
||||
private final Logger logger = LogManager.getLogger(getClass());
|
||||
private static final Logger LOGGER = LogManager.getLogger(ItemGridStack.class);
|
||||
private final ItemStack stack;
|
||||
private UUID id;
|
||||
@Nullable
|
||||
@@ -96,7 +96,7 @@ public class ItemGridStack implements IGridStack {
|
||||
try {
|
||||
cachedName = stack.getHoverName().getString();
|
||||
} catch (Throwable t) {
|
||||
logger.warn("Could not retrieve item name of {}", stack.getItem().getRegistryName());
|
||||
LOGGER.warn("Could not retrieve item name of {}", stack.getItem().getRegistryName());
|
||||
|
||||
cachedName = ERROR_PLACEHOLDER;
|
||||
}
|
||||
@@ -156,7 +156,7 @@ public class ItemGridStack implements IGridStack {
|
||||
try {
|
||||
tooltip = RenderUtils.getTooltipFromItem(stack);
|
||||
} catch (Throwable t) {
|
||||
logger.warn("Could not retrieve item tooltip of {}", stack.getItem().getRegistryName());
|
||||
LOGGER.warn("Could not retrieve item tooltip of {}", stack.getItem().getRegistryName());
|
||||
|
||||
tooltip = new ArrayList<>();
|
||||
tooltip.add(new TextComponent(ERROR_PLACEHOLDER));
|
||||
|
@@ -159,9 +159,6 @@ public final class CommonSetup {
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRegisterBlockEntities(RegistryEvent.Register<BlockEntityType<?>> e) {
|
||||
// Register here, there seems to be no specific register event for loot function types.
|
||||
RSLootFunctions.register();
|
||||
|
||||
e.getRegistry().register(registerSynchronizationParameters(BlockEntityType.Builder.of((pos, state) -> new ControllerBlockEntity(NetworkType.NORMAL, pos, state), RSBlocks.CONTROLLER.getBlocks()).build(null).setRegistryName(RS.ID, "controller")));
|
||||
e.getRegistry().register(registerSynchronizationParameters(BlockEntityType.Builder.of((pos, state) -> new ControllerBlockEntity(NetworkType.CREATIVE, pos, state), RSBlocks.CREATIVE_CONTROLLER.getBlocks()).build(null).setRegistryName(RS.ID, "creative_controller")));
|
||||
e.getRegistry().register(BlockEntityType.Builder.of(CableBlockEntity::new, RSBlocks.CABLE.get()).build(null).setRegistryName(RS.ID, "cable"));
|
||||
|
@@ -8,7 +8,7 @@ import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||
import net.minecraft.world.level.material.Material;
|
||||
|
||||
public final class BlockUtils {
|
||||
public static final BlockBehaviour.Properties DEFAULT_ROCK_PROPERTIES = BlockBehaviour.Properties.of(Material.STONE).strength(1.9F).sound(SoundType.STONE);
|
||||
public static final BlockBehaviour.Properties DEFAULT_ROCK_PROPERTIES = BlockBehaviour.Properties.of(Material.STONE).strength(0.5F, 6.0F).sound(SoundType.STONE);
|
||||
public static final BlockBehaviour.Properties DEFAULT_GLASS_PROPERTIES = BlockBehaviour.Properties.of(Material.GLASS).sound(SoundType.GLASS).strength(0.35F);
|
||||
|
||||
private BlockUtils() {
|
||||
|
@@ -10,6 +10,7 @@ import com.refinedmods.refinedstorage.item.blockitem.ColoredBlockItem;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.tags.ItemTags;
|
||||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
@@ -77,6 +78,7 @@ public class ColorMap<T extends IForgeRegistryEntry<? super T>> {
|
||||
map.put(color, (RegistryObject<T>) block);
|
||||
RSBlocks.COLORED_BLOCKS.add(block);
|
||||
}
|
||||
RSBlocks.COLORED_BLOCK_TAGS.put(BlockTags.create(new ResourceLocation(RS.ID, get(DEFAULT_COLOR).getId().getPath())), (ColorMap<S>) this);
|
||||
}
|
||||
|
||||
public <S extends BaseBlock> void registerItemsFromBlocks(ColorMap<S> blockMap) {
|
||||
|
@@ -12,3 +12,15 @@ authors = "Refined Mods"
|
||||
description = '''
|
||||
An elegant solution to your hoarding problem
|
||||
'''
|
||||
[[dependencies.refinedstorage]]
|
||||
modId = "forge"
|
||||
mandatory = true
|
||||
versionRange = "[40.1,)"
|
||||
ordering = "NONE"
|
||||
side = "BOTH"
|
||||
[[dependencies.refinedstorage]]
|
||||
modId = "jei"
|
||||
mandatory = false
|
||||
versionRange = "[9.7.1,)"
|
||||
ordering = "BEFORE"
|
||||
side = "BOTH"
|
@@ -90,6 +90,7 @@
|
||||
"gui.refinedstorage.alternatives.apply": "Apply",
|
||||
"gui.refinedstorage.jei.transfer.autocrafting_available": "Autocrafting available",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + CLICK to request autocrafting",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + CLICK to request autocrafting",
|
||||
"misc.refinedstorage.energy_stored": "%d / %d FE",
|
||||
"misc.refinedstorage.energy_usage": "Usage: %d FE/t",
|
||||
"misc.refinedstorage.energy_usage_minimal": "%d FE/t",
|
||||
|
@@ -88,6 +88,7 @@
|
||||
"gui.refinedstorage.alternatives.apply": "Applica",
|
||||
"gui.refinedstorage.jei.transfer.autocrafting_available": "Fabbricazione automatica disponibile",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + CLICK per richiedere la fabbricazione automatica",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + CLICK per richiedere la fabbricazione automatica",
|
||||
"misc.refinedstorage.energy_stored": "%d / %d FE",
|
||||
"misc.refinedstorage.energy_usage": "Utilizzo: %d FE/t",
|
||||
"misc.refinedstorage.energy_usage_minimal": "%d FE/t",
|
@@ -88,7 +88,9 @@
|
||||
"gui.refinedstorage.crafter_manager": "クラフターマネージャー",
|
||||
"gui.refinedstorage.alternatives": "代替案",
|
||||
"gui.refinedstorage.alternatives.apply": "適用",
|
||||
|
||||
"gui.refinedstorage.jei.transfer.autocrafting_available": "自動クラフトが出来る",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting": "CTRLキーを押しながらクリックするために自動クラフトする",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMDキーを押しながらクリックするために自動クラフトする",
|
||||
"misc.refinedstorage.energy_stored": "%d / %d FE",
|
||||
"misc.refinedstorage.energy_usage": "消費電力: %d FE/t",
|
||||
"misc.refinedstorage.energy_usage_minimal": "%d FE/t",
|
||||
|
@@ -90,6 +90,7 @@
|
||||
"gui.refinedstorage.alternatives.apply": "적용",
|
||||
"gui.refinedstorage.jei.transfer.autocrafting_available": "자동 제작 사용 가능",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + 클릭하여 자동 제작 요청",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + 클릭하여 자동 제작 요청",
|
||||
"misc.refinedstorage.energy_stored": "%d / %d FE",
|
||||
"misc.refinedstorage.energy_usage": "사용: %d FE/t",
|
||||
"misc.refinedstorage.energy_usage_minimal": "%d FE/t",
|
||||
|
@@ -90,6 +90,7 @@
|
||||
"gui.refinedstorage.alternatives.apply": "Zastosuj",
|
||||
"gui.refinedstorage.jei.transfer.autocrafting_available": "Auto-wytwarzanie dostępne",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting": "CTRL + KLIKNIJ aby zażądać wytworzenia",
|
||||
"gui.refinedstorage.jei.transfer.request_autocrafting_mac": "CMD + KLIKNIJ aby zażądać wytworzenia",
|
||||
"misc.refinedstorage.energy_stored": "%d / %d FE",
|
||||
"misc.refinedstorage.energy_usage": "Zużycie: %d FE/t",
|
||||
"misc.refinedstorage.energy_usage_minimal": "%d FE/t",
|
||||
|
Reference in New Issue
Block a user