Skip to content

Commit 9b8ad05

Browse files
committed
feat: explain storage logistics optimizations in dictionary of spirits
1 parent 2f0d284 commit 9b8ad05

File tree

4 files changed

+263
-1
lines changed

4 files changed

+263
-1
lines changed

src/generated/resources/assets/occultism/lang/en_us.json

+16
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,22 @@
732732
"book.occultism.dictionary_of_spirits.storage.storage_stabilizer.spotlight.text": "Storage Stabilizers increase the storage space in the storage dimension of the storage actuator. The higher the tier of the stabilizer, the more additional storage it provides. The following entries will show you how to craft each tier.\n\\\n\\\n",
733733
"book.occultism.dictionary_of_spirits.storage.storage_stabilizer.upgrade.text": "It is **safe to destroy a storage stabilizer** to upgrade it. The items in the [Storage Actuator](entry://storage/storage_controller) will not be lost or dropped - you simply cannot add new items until you add enough storage stabilizers to have free slots again.\n",
734734
"book.occultism.dictionary_of_spirits.storage.storage_stabilizer.upgrade.title": "Upgrading",
735+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.description": "Inserting and extracting items from the Storage Actuator",
736+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.extraction.text": "Extracting items can lead to performance issues, especially when pipes with Item Filters are used, because then the entire huge storage is searched for these items one by one.\n\\\n\\\nTo *massively* improve performance, use Transporter Spirits to extract from the Storage Actuator or Stable Wormhole. Even if the Spirit deposits into a chest right next to the storage system, and a pipe extracts from that chest, the performance is **much** better than if a pipe extracts directly.\n",
737+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.extraction.title": "Extracting Items",
738+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.insertion.text": "When inserting items, you do not need to do anything, the Storage Actuator will maximize performance automatically for you. It is safe to insert high amounts of items at high frequencies without negative impact on game performance.\n",
739+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.insertion.title": "Inserting Items",
740+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.intro.text": "The Storage Actuator behaves much like a big chest or shulker box. That means, hoppers and pipes can insert and extract items.\n",
741+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.intro.title": "Storage Logistics",
742+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.name": "Storage Logistics",
743+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.performance.text": "Due to the potentially huge amount of items in the storage system, it is good to consider some performance aspects, otherwise your system might slow down your game or even a server you are playing on.\n",
744+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation.performance.title": "Performance",
745+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.description": "Inserting and extracting items from the Storage Actuator using Theurgy Logistics",
746+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.extraction.text": "Once again, item extraction is the critical issue for performance.\n\\\n\\\nTo make use of the performance optimization, use a [](item://theurgy:logistics_item_extractor) and apply a [](item://theurgy:list_filter) to extract the desired items.\n\\\n\\\nThe Theurgy Guidebook \"The Hermetica\" has a chapter on Theurgy mercurial logistics and how to use them to insert and extract items.\n",
747+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.extraction.title": "Extracting Items",
748+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.intro.text": "Much like transporter Spirits, Theurgy Mercurial Logistics systems are optimized to work with the Storage Actuator and Stable Wormholes.\n",
749+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.intro.title": "Theurgy Storage Integration",
750+
"book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.name": "Theurgy Storage Integration",
735751
"book.occultism.dictionary_of_spirits.summoning_rituals.afrit_essence.intro.text": "[](item://occultism:afrit_essence) is required to safely call on the more powerful spirits, commonly used in the form of red chalk. To obtain the essence, an [#](ad03fc)Afrit[#]() needs to be summoned unbound into this plane, and killed. Be warned that this is no simple endeavour, and unbound spirit presents great danger to all nearby.\n",
736752
"book.occultism.dictionary_of_spirits.summoning_rituals.afrit_essence.intro.title": "Afrit Essence",
737753
"book.occultism.dictionary_of_spirits.summoning_rituals.afrit_essence.name": "Afrit Essence",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"background_u_index": 0,
3+
"background_v_index": 0,
4+
"category": "occultism:storage",
5+
"description": "",
6+
"hide_while_locked": false,
7+
"icon": {
8+
"item": "minecraft:hopper"
9+
},
10+
"name": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.name",
11+
"pages": [
12+
{
13+
"type": "modonomicon:text",
14+
"anchor": "",
15+
"condition": {
16+
"type": "modonomicon:none"
17+
},
18+
"show_title_separator": true,
19+
"text": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.intro.text",
20+
"title": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.intro.title",
21+
"use_markdown_in_title": false
22+
},
23+
{
24+
"type": "modonomicon:text",
25+
"anchor": "",
26+
"condition": {
27+
"type": "modonomicon:none"
28+
},
29+
"show_title_separator": true,
30+
"text": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.performance.text",
31+
"title": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.performance.title",
32+
"use_markdown_in_title": false
33+
},
34+
{
35+
"type": "modonomicon:text",
36+
"anchor": "",
37+
"condition": {
38+
"type": "modonomicon:none"
39+
},
40+
"show_title_separator": true,
41+
"text": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.extraction.text",
42+
"title": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.extraction.title",
43+
"use_markdown_in_title": false
44+
},
45+
{
46+
"type": "modonomicon:text",
47+
"anchor": "",
48+
"condition": {
49+
"type": "modonomicon:none"
50+
},
51+
"show_title_separator": true,
52+
"text": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.insertion.text",
53+
"title": "book.occultism.dictionary_of_spirits.storage.storage_system_automation.insertion.title",
54+
"use_markdown_in_title": false
55+
}
56+
],
57+
"parents": [
58+
{
59+
"draw_arrow": true,
60+
"entry": "occultism:storage/storage_controller",
61+
"line_enabled": true,
62+
"line_reversed": false
63+
}
64+
],
65+
"show_when_any_parent_unlocked": false,
66+
"sort_number": -1,
67+
"x": -6,
68+
"y": -2
69+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
{
2+
"background_u_index": 0,
3+
"background_v_index": 0,
4+
"category": "occultism:storage",
5+
"condition": {
6+
"type": "modonomicon:mod_loaded",
7+
"mod_id": "theurgy"
8+
},
9+
"description": "",
10+
"hide_while_locked": false,
11+
"icon": {
12+
"item": "theurgy:list_filter"
13+
},
14+
"name": "book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.name",
15+
"pages": [
16+
{
17+
"type": "modonomicon:text",
18+
"anchor": "",
19+
"condition": {
20+
"type": "modonomicon:none"
21+
},
22+
"show_title_separator": true,
23+
"text": "book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.intro.text",
24+
"title": "book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.intro.title",
25+
"use_markdown_in_title": false
26+
},
27+
{
28+
"type": "modonomicon:text",
29+
"anchor": "",
30+
"condition": {
31+
"type": "modonomicon:none"
32+
},
33+
"show_title_separator": true,
34+
"text": "book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.extraction.text",
35+
"title": "book.occultism.dictionary_of_spirits.storage.storage_system_automation_theurgy.extraction.title",
36+
"use_markdown_in_title": false
37+
}
38+
],
39+
"parents": [
40+
{
41+
"draw_arrow": true,
42+
"entry": "occultism:storage/storage_system_automation",
43+
"line_enabled": true,
44+
"line_reversed": false
45+
}
46+
],
47+
"show_when_any_parent_unlocked": false,
48+
"sort_number": -1,
49+
"x": -6,
50+
"y": -4
51+
}

src/main/java/com/klikli_dev/occultism/datagen/OccultismBookProvider.java

+127-1
Original file line numberDiff line numberDiff line change
@@ -3993,6 +3993,7 @@ private BookEntryModel makeCraftStorageSystemEntry(CategoryEntryMap entryMap, ch
39933993
);
39943994
}
39953995

3996+
39963997
private BookEntryModel makeCraftDimensionalMatrixEntry(CategoryEntryMap entryMap, char icon) {
39973998
this.context().entry("craft_dimensional_matrix");
39983999

@@ -4432,6 +4433,7 @@ private BookEntryModel makeCraftOtherworldGogglesEntry(CategoryEntryMap entryMap
44324433
gogglesRecipe
44334434
);
44344435
}
4436+
44354437
private BookEntryModel makeCraftWildTrimEntry(CategoryEntryMap entryMap, char icon) {
44364438
this.context().entry("craft_wild_trim");
44374439

@@ -4959,6 +4961,7 @@ private BookEntryModel makeHordeHuskEntry(CategoryEntryMap entryMap, char icon)
49594961
description
49604962
);
49614963
}
4964+
49624965
private BookEntryModel makeHordeDrownedEntry(CategoryEntryMap entryMap, char icon) {
49634966
this.context().entry("horde_drowned");
49644967
this.lang().add(this.context().entryName(), "Wild Horde Drowned");
@@ -4994,6 +4997,7 @@ private BookEntryModel makeHordeDrownedEntry(CategoryEntryMap entryMap, char ico
49944997
description
49954998
);
49964999
}
5000+
49975001
private BookEntryModel makeHordeCreeperEntry(CategoryEntryMap entryMap, char icon) {
49985002
this.context().entry("horde_creeper");
49995003
this.lang().add(this.context().entryName(), "Wild Horde Creeper");
@@ -5029,6 +5033,7 @@ private BookEntryModel makeHordeCreeperEntry(CategoryEntryMap entryMap, char ico
50295033
description
50305034
);
50315035
}
5036+
50325037
private BookEntryModel makeHordeSilverfishEntry(CategoryEntryMap entryMap, char icon) {
50335038
this.context().entry("horde_silverfish");
50345039
this.lang().add(this.context().entryName(), "Wild Horde Silverfish");
@@ -5064,6 +5069,7 @@ private BookEntryModel makeHordeSilverfishEntry(CategoryEntryMap entryMap, char
50645069
description
50655070
);
50665071
}
5072+
50675073
private BookEntryModel makeHordeIllagerEntry(CategoryEntryMap entryMap, char icon) {
50685074
this.context().entry("horde_illager");
50695075
this.lang().add(this.context().entryName(), "Mini Illager Invasion");
@@ -5099,6 +5105,7 @@ private BookEntryModel makeHordeIllagerEntry(CategoryEntryMap entryMap, char ico
50995105
description
51005106
);
51015107
}
5108+
51025109
private BookEntryModel makePossessWeakBreezeEntry(CategoryEntryMap entryMap, char icon) {
51035110
this.context().entry("possess_weak_breeze");
51045111
this.lang().add(this.context().entryName(), "The first key");
@@ -5134,6 +5141,7 @@ private BookEntryModel makePossessWeakBreezeEntry(CategoryEntryMap entryMap, cha
51345141
description
51355142
);
51365143
}
5144+
51375145
private BookEntryModel makePossessBreezeEntry(CategoryEntryMap entryMap, char icon) {
51385146
this.context().entry("possess_breeze");
51395147
this.lang().add(this.context().entryName(), "In the chamber");
@@ -5169,6 +5177,7 @@ private BookEntryModel makePossessBreezeEntry(CategoryEntryMap entryMap, char ic
51695177
description
51705178
);
51715179
}
5180+
51725181
private BookEntryModel makePossessStrongBreezeEntry(CategoryEntryMap entryMap, char icon) {
51735182
this.context().entry("possess_strong_breeze");
51745183
this.lang().add(this.context().entryName(), "Glorious Vault");
@@ -5211,8 +5220,9 @@ private BookCategoryModel makeStorageCategory() {
52115220

52125221
var entryMap = ModonomiconAPI.get().getEntryMap();
52135222
entryMap.setMap(
5223+
"_______ṡ___________________",
52145224
"___________________________",
5215-
"_________w_r_______________",
5225+
"_______ș_w_r_______________",
52165226
"___________________________",
52175227
"_____0_c___s_1_2_3_4________",
52185228
"___________________________",
@@ -5226,6 +5236,14 @@ private BookCategoryModel makeStorageCategory() {
52265236
var storageController = this.makeStorageControllerEntry(entryMap, 'c');
52275237
storageController.withParent(BookEntryParentModel.create(overview.getId()));
52285238

5239+
var storageSystemAutomation = this.makeStorageSystemAutomationEntry(entryMap, 'ș');
5240+
storageSystemAutomation.withParent(BookEntryParentModel.create(storageController.getId()));
5241+
5242+
var storageSystemAutomationTheurgy = this.makeStorageSystemAutomationTheurgyEntry(entryMap, 'ṡ');
5243+
storageSystemAutomationTheurgy.withParent(BookEntryParentModel.create(storageSystemAutomation.getId()));
5244+
storageSystemAutomationTheurgy.withCondition(BookModLoadedConditionModel.create().withModId("theurgy"));
5245+
5246+
52295247
var storageStabilizer = this.makeStorageStabilizerEntry(entryMap, 's');
52305248
storageStabilizer.withParent(BookEntryParentModel.create(storageController.getId()));
52315249

@@ -5275,6 +5293,8 @@ private BookCategoryModel makeStorageCategory() {
52755293
.withEntries(
52765294
overview,
52775295
storageController,
5296+
storageSystemAutomation,
5297+
storageSystemAutomationTheurgy,
52785298
storageStabilizer,
52795299
craftStabilizerTier1,
52805300
craftStabilizerTier2,
@@ -5377,6 +5397,112 @@ private BookEntryModel makeStorageControllerEntry(CategoryEntryMap entryMap, cha
53775397
);
53785398
}
53795399

5400+
private BookEntryModel makeStorageSystemAutomationEntry(CategoryEntryMap entryMap, char icon) {
5401+
this.context().entry("storage_system_automation");
5402+
this.lang().add(this.context().entryName(), "Storage Logistics");
5403+
this.lang().add(this.context().entryDescription(), "Inserting and extracting items from the Storage Actuator");
5404+
5405+
this.context().page("intro");
5406+
var intro = BookTextPageModel.create()
5407+
.withTitle(this.context().pageTitle())
5408+
.withText(this.context().pageText());
5409+
5410+
this.lang().add(this.context().pageTitle(), "Storage Logistics");
5411+
this.lang().add(this.context().pageText(),
5412+
"""
5413+
The Storage Actuator behaves much like a big chest or shulker box. That means, hoppers and pipes can insert and extract items.
5414+
""");
5415+
5416+
this.context().page("performance");
5417+
var performance = BookTextPageModel.create()
5418+
.withTitle(this.context().pageTitle())
5419+
.withText(this.context().pageText());
5420+
5421+
this.lang().add(this.context().pageTitle(), "Performance");
5422+
this.lang().add(this.context().pageText(),
5423+
"""
5424+
Due to the potentially huge amount of items in the storage system, it is good to consider some performance aspects, otherwise your system might slow down your game or even a server you are playing on.
5425+
""");
5426+
5427+
this.context().page("extraction");
5428+
var extraction = BookTextPageModel.create()
5429+
.withTitle(this.context().pageTitle())
5430+
.withText(this.context().pageText());
5431+
5432+
this.lang().add(this.context().pageTitle(), "Extracting Items");
5433+
this.lang().add(this.context().pageText(),
5434+
"""
5435+
Extracting items can lead to performance issues, especially when pipes with Item Filters are used, because then the entire huge storage is searched for these items one by one.
5436+
\\
5437+
\\
5438+
To *massively* improve performance, use Transporter Spirits to extract from the Storage Actuator or Stable Wormhole. Even if the Spirit deposits into a chest right next to the storage system, and a pipe extracts from that chest, the performance is **much** better than if a pipe extracts directly.
5439+
""");
5440+
5441+
this.context().page("insertion");
5442+
var insertion = BookTextPageModel.create()
5443+
.withTitle(this.context().pageTitle())
5444+
.withText(this.context().pageText());
5445+
5446+
this.lang().add(this.context().pageTitle(), "Inserting Items");
5447+
this.lang().add(this.context().pageText(),
5448+
"""
5449+
When inserting items, you do not need to do anything, the Storage Actuator will maximize performance automatically for you. It is safe to insert high amounts of items at high frequencies without negative impact on game performance.
5450+
""");
5451+
5452+
5453+
return BookEntryModel.create(this.modLoc(this.context().categoryId() + "/" + this.context().entryId()), this.context().entryName())
5454+
.withIcon(Items.HOPPER)
5455+
.withLocation(entryMap.get(icon))
5456+
.withPages(
5457+
intro,
5458+
performance,
5459+
extraction,
5460+
insertion
5461+
);
5462+
}
5463+
5464+
private BookEntryModel makeStorageSystemAutomationTheurgyEntry(CategoryEntryMap entryMap, char icon) {
5465+
this.context().entry("storage_system_automation_theurgy");
5466+
this.lang().add(this.context().entryName(), "Theurgy Storage Integration");
5467+
this.lang().add(this.context().entryDescription(), "Inserting and extracting items from the Storage Actuator using Theurgy Logistics");
5468+
5469+
this.context().page("intro");
5470+
var intro = BookTextPageModel.create()
5471+
.withTitle(this.context().pageTitle())
5472+
.withText(this.context().pageText());
5473+
5474+
this.lang().add(this.context().pageTitle(), "Theurgy Storage Integration");
5475+
this.lang().add(this.context().pageText(),
5476+
"""
5477+
Much like transporter Spirits, Theurgy Mercurial Logistics systems are optimized to work with the Storage Actuator and Stable Wormholes.
5478+
""");
5479+
5480+
this.context().page("extraction");
5481+
var extraction = BookTextPageModel.create()
5482+
.withTitle(this.context().pageTitle())
5483+
.withText(this.context().pageText());
5484+
5485+
this.lang().add(this.context().pageTitle(), "Extracting Items");
5486+
this.lang().add(this.context().pageText(),
5487+
"""
5488+
Once again, item extraction is the critical issue for performance.
5489+
\\
5490+
\\
5491+
To make use of the performance optimization, use a [](item://theurgy:logistics_item_extractor) and apply a [](item://theurgy:list_filter) to extract the desired items.
5492+
\\
5493+
\\
5494+
The Theurgy Guidebook "The Hermetica" has a chapter on Theurgy mercurial logistics and how to use them to insert and extract items.
5495+
""");
5496+
5497+
return BookEntryModel.create(this.modLoc(this.context().categoryId() + "/" + this.context().entryId()), this.context().entryName())
5498+
.withIcon(ItemRegistry.LIST_FILTER.get())
5499+
.withLocation(entryMap.get(icon))
5500+
.withPages(
5501+
intro,
5502+
extraction
5503+
);
5504+
}
5505+
53805506
private BookEntryModel makeStorageStabilizerEntry(CategoryEntryMap entryMap, char icon) {
53815507
this.context().entry("storage_stabilizer");
53825508

0 commit comments

Comments
 (0)