ENORMOUS update to patchi and some more spell circle things

This commit is contained in:
gamma-delta 2022-03-23 01:57:35 -05:00
parent b83d09d540
commit 7524df6d90
84 changed files with 720 additions and 466 deletions

View file

@ -1,33 +1,31 @@
0c822eb2acf14b943bc813d5156ea62017b64e7c assets/hexcasting/blockstates/empty_impetus.json
4d62b41c90cb0c5b94697e151c4aad964fb56727 assets/hexcasting/blockstates/empty_impetus.json
8d7c7bfdca1def0205714465422d327dbcc00539 assets/hexcasting/blockstates/impetus_rightclick.json
5d71e7f61e082c331d53771d5add898dd083bac5 assets/hexcasting/blockstates/redirector.json
5cb63493ae07f5ab5d8f686e3553c97a85105931 assets/hexcasting/blockstates/slate.json
043abd5bbfd1186415049d24d185d4e4395320f9 assets/hexcasting/blockstates/slate_block.json
c16c01e29c536391db8cedf03383ebd11e82de74 assets/hexcasting/models/block/empty_impetus.json
880e730e120c4f427b0839e754b2369a9b3b4482 assets/hexcasting/models/block/empty_impetus_dim_down.json
6bd0ed320b8f5c411c36cf0fce2e88f4881327c1 assets/hexcasting/models/block/empty_impetus_dim_east.json
9f46c1d18dbb34b1f643f9385308c35493437503 assets/hexcasting/models/block/empty_impetus_dim_north.json
55174e0b340c73834a48cb4702a25c0df245abdb assets/hexcasting/models/block/empty_impetus_dim_south.json
d9b460dc0abf7e88a65212f850355a5eb7148746 assets/hexcasting/models/block/empty_impetus_dim_up.json
9cf4221f99e5e4d48c5416c518dc8afe5395ccc5 assets/hexcasting/models/block/empty_impetus_dim_west.json
35661c65dd81edd052e12a48a76c16dcd62cd025 assets/hexcasting/models/block/empty_impetus_lit_down.json
3fa282b745c34f0f53947a15ed9adbe721c1190d assets/hexcasting/models/block/empty_impetus_lit_east.json
e43163fc0ab7ad8bac456823c411db3cf2cd359b assets/hexcasting/models/block/empty_impetus_lit_north.json
15bd688592008a4e1c08395a87e9d15a95b989b3 assets/hexcasting/models/block/empty_impetus_lit_south.json
fbc3be3a8f445ca61520dabccf8351f6e1da0327 assets/hexcasting/models/block/empty_impetus_lit_up.json
7e75627a2ab24a0c1d20083be7374a03c098b3c3 assets/hexcasting/models/block/empty_impetus_lit_west.json
06de8993d5f0db683b0f6cb7f236d323f2733b54 assets/hexcasting/models/block/impetus_rightclick_dim_down.json
61bfd2716b73c3a5553e33d37a6b10eb4852e33d assets/hexcasting/models/block/impetus_rightclick_dim_east.json
6e31dfb9b8490482adb7df7a3973806c8fbf6b23 assets/hexcasting/models/block/impetus_rightclick_dim_east.json
1a559739fbd7ded56ca558227adeef162220222c assets/hexcasting/models/block/impetus_rightclick_dim_north.json
ab3888f656003264f1decfb88c73d88ff407050a assets/hexcasting/models/block/impetus_rightclick_dim_south.json
61733f16a1c064e07f79db2fce33406418e10118 assets/hexcasting/models/block/impetus_rightclick_dim_up.json
eef88f01d40deaac961771d4e52fd1e8bbec95a9 assets/hexcasting/models/block/impetus_rightclick_dim_west.json
57422949b831c231ad1addecf0ebd8951bda2192 assets/hexcasting/models/block/impetus_rightclick_dim_west.json
0cb51f8b8e3b44d93bf63111c959db93fbdf589b assets/hexcasting/models/block/impetus_rightclick_lit_down.json
b947e2fb549846ca055a7d4cb36ee71e04715180 assets/hexcasting/models/block/impetus_rightclick_lit_east.json
bd394ea4742625276b3640abef34c7fa39f3880a assets/hexcasting/models/block/impetus_rightclick_lit_east.json
50f3dfe15b8f084bcef9c7a88fc5df8984f9bb45 assets/hexcasting/models/block/impetus_rightclick_lit_north.json
159204f86618a2981500a127f627dfffc6624e4e assets/hexcasting/models/block/impetus_rightclick_lit_south.json
fe7e16c7178aa1ac3ecfa8750d095cbd3838189b assets/hexcasting/models/block/impetus_rightclick_lit_up.json
7208fbe9e2640ab000b49c7a2cce316812f4130f assets/hexcasting/models/block/impetus_rightclick_lit_west.json
06de8993d5f0db683b0f6cb7f236d323f2733b54 assets/hexcasting/models/block/redirector_dim_down.json
61bfd2716b73c3a5553e33d37a6b10eb4852e33d assets/hexcasting/models/block/redirector_dim_east.json
1a559739fbd7ded56ca558227adeef162220222c assets/hexcasting/models/block/redirector_dim_north.json
ab3888f656003264f1decfb88c73d88ff407050a assets/hexcasting/models/block/redirector_dim_south.json
61733f16a1c064e07f79db2fce33406418e10118 assets/hexcasting/models/block/redirector_dim_up.json
eef88f01d40deaac961771d4e52fd1e8bbec95a9 assets/hexcasting/models/block/redirector_dim_west.json
0cb51f8b8e3b44d93bf63111c959db93fbdf589b assets/hexcasting/models/block/redirector_lit_down.json
b947e2fb549846ca055a7d4cb36ee71e04715180 assets/hexcasting/models/block/redirector_lit_east.json
50f3dfe15b8f084bcef9c7a88fc5df8984f9bb45 assets/hexcasting/models/block/redirector_lit_north.json
159204f86618a2981500a127f627dfffc6624e4e assets/hexcasting/models/block/redirector_lit_south.json
fe7e16c7178aa1ac3ecfa8750d095cbd3838189b assets/hexcasting/models/block/redirector_lit_up.json
7208fbe9e2640ab000b49c7a2cce316812f4130f assets/hexcasting/models/block/redirector_lit_west.json
eca0d28d0c44af31e28baff46061ac72463bbc28 assets/hexcasting/models/block/impetus_rightclick_lit_west.json
d51541b464840530f4e734db1f67ed20e811ad14 assets/hexcasting/models/block/slate_block.json
60c0f39882d22c2634cf738b0fe4e956eaa2adbe assets/hexcasting/models/item/abacus.json
eb78f6a2b68dd772a5016fc5a3db10488a65abfa assets/hexcasting/models/item/amethyst_dust.json
@ -53,7 +51,7 @@ c2ceb08a8662a7e4a311401b0baced1add6f2e35 assets/hexcasting/models/item/dye_color
f41fb9405b869644333872cd1ece40b1b07410d2 assets/hexcasting/models/item/dye_colorizer_red.json
5894e7a1cc38ae5b09c651791c65c983d984d20c assets/hexcasting/models/item/dye_colorizer_white.json
07959b86ed25559b4960c5f4aa7bab88bf9b5bf1 assets/hexcasting/models/item/dye_colorizer_yellow.json
46bca89ab580243b2bcb59c166d4940ba97a44ea assets/hexcasting/models/item/empty_impetus.json
5e7b5bbe75fa4eb9461306ebf090038c53badaea assets/hexcasting/models/item/empty_impetus.json
f7f98a306a8a0529a54446b4876e624201525a1d assets/hexcasting/models/item/focus.json
0146e90177ed71b25d2936ff3b2d9975e47c5142 assets/hexcasting/models/item/focus_double.json
167b8e3f3367f12f8045369bea26d7a48e59b0d0 assets/hexcasting/models/item/focus_double_sealed.json
@ -69,7 +67,7 @@ a6cabea2984ed2b5b0dcd0087c762c9b9892a5fe assets/hexcasting/models/item/focus_pat
44db2dda5b3d2b7d1591804bdaaf5692c2a4cc5f assets/hexcasting/models/item/focus_vec3_sealed.json
5228a94d6ef14d1694551d33646d3b103fdf658b assets/hexcasting/models/item/focus_widget.json
48a791a807603d131cdf8ea16948164006a6dc6f assets/hexcasting/models/item/focus_widget_sealed.json
2102172bccc3f9a44f765c2cbb50a9ed1267378e assets/hexcasting/models/item/impetus_rightclick.json
82aac8f7ce7b65e4b045907e52144cdaa0cef1b0 assets/hexcasting/models/item/impetus_rightclick.json
0cdfde8339a08638fd11ce7bef4a0769eb15bcf9 assets/hexcasting/models/item/lens.json
22ec49ee56e2d0d9fca4473f965c64b82d712f79 assets/hexcasting/models/item/patchouli_book.json
d7dd348ef3d402a0e6d1c601581e30e99f9bcc87 assets/hexcasting/models/item/phial_large_0.json
@ -101,7 +99,6 @@ fd858303001437d5aee2f134b4dce56fb8afb0aa assets/hexcasting/models/item/pride_col
e7b88cde507911c0ad1bf60976dcc43a319d498d assets/hexcasting/models/item/pride_colorizer_7.json
372ebac400778d51f5f3d32d98b1021b52da6f09 assets/hexcasting/models/item/pride_colorizer_8.json
352169689d1b82d670142478b67a1515bd71d93d assets/hexcasting/models/item/pride_colorizer_9.json
956f54c4d4df2207bbd5730d20966c82494b6b50 assets/hexcasting/models/item/redirector.json
9ef07e2885063ed1ffe1cb8f7728f26cb7c9881e assets/hexcasting/models/item/scroll.json
297b05008b9ab37b5881820a0f5c99f7441a9dfe assets/hexcasting/models/item/scroll_ancient.json
91765bdc3a764f3a3f10131e452a0030b207b03d assets/hexcasting/models/item/scroll_pristine.json
@ -120,7 +117,8 @@ b6593ea802a692c29b5032292df31beb84878ad8 data/hexcasting/advancements/aaa_wastef
4f4c94021adfb296e3ef3dce1acc46f724f38f92 data/hexcasting/advancements/aab_big_cast.json
a165e3959b7d0c37bea586d0e94609b483255569 data/hexcasting/advancements/enlightenment.json
eb6393ffc79966e4b5983a68157742b78cd12414 data/hexcasting/advancements/opened_eyes.json
e4abb6a463164c72ad0b631e58b11d4b2c618b12 data/hexcasting/advancements/recipes/brainsweep/impetus_rightclick.json
7e93886be31c3762a5b70e56a7214d19f64d58a8 data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json
d225f90cc1e3b8200014106cd2d3bede9c783817 data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json
47000a9b5a409038e369dbef156a72ec93cb51db data/hexcasting/advancements/recipes/hexcasting/abacus.json
af81f4442801d794920d6330d82cb1289a78f236 data/hexcasting/advancements/recipes/hexcasting/artifact.json
7e4de1f72dd75e3efea6e879e1be15fa4216bd4b data/hexcasting/advancements/recipes/hexcasting/cypher.json
@ -159,6 +157,7 @@ c93d37c6a54b4015a073ad18189f6e721406f183 data/hexcasting/advancements/recipes/he
43071f2aa09fa59dd8f0211a68c842dac833be02 data/hexcasting/advancements/recipes/hexcasting/scroll.json
22ad2496732633bb5539a1fa761051d7add48055 data/hexcasting/advancements/recipes/hexcasting/slate.json
d72a4675ceb721ee4ac43339d8bfbbb82c2adba2 data/hexcasting/advancements/recipes/hexcasting/slate_block.json
9fcc0862c99c50a1df9d3af95b2b3c2af28afa1b data/hexcasting/advancements/recipes/hexcasting/slate_block_from_slates.json
cd3ca380294544b07e91ce85d97808c30ffa5d17 data/hexcasting/advancements/recipes/hexcasting/spellbook.json
59000d9f3edb942081f7d1e03d753e9cd59690cc data/hexcasting/advancements/recipes/hexcasting/sub_sandwich.json
e0954b5771ab64014fe3a0269db6ab0699e3e6f8 data/hexcasting/advancements/recipes/hexcasting/trinket.json
@ -175,6 +174,8 @@ afecba3144e00505977a4ab4de7940f949ab7818 data/hexcasting/loot_modifiers/scroll_d
7ffa361bd8a108b504fe450749b42997dc898e5e data/hexcasting/loot_modifiers/scroll_stronghold_library.json
6b4459635b3d53cc2b6836fa97d29244a65b412d data/hexcasting/recipes/abacus.json
6e6e4d01097c10316892e274f33cb0faaf9dc0df data/hexcasting/recipes/artifact.json
1cb9f605890a215a965e1088abd3013bd34e0fc0 data/hexcasting/recipes/brainsweep/budding_amethyst.json
9631f6616c6a63c9e0a9eaa8126e2f116636fab5 data/hexcasting/recipes/brainsweep/impetus_rightclick.json
27164ae64cf43091f25946cc15dfcace2c903b2b data/hexcasting/recipes/cypher.json
33fed8fb8e34df026e1eea0df8161c7f842a8648 data/hexcasting/recipes/dye_colorizer_black.json
c36caf44a941a4abc44a15141eba8fe634c76fb8 data/hexcasting/recipes/dye_colorizer_blue.json
@ -194,7 +195,6 @@ bc79add419b8791e68b35076355fea11dfc640c6 data/hexcasting/recipes/dye_colorizer_w
c5341777604a4be5a311e300a4de89967b7caad2 data/hexcasting/recipes/dye_colorizer_yellow.json
db8a00478e1c4b0f9b143b5946d1ba25e489591d data/hexcasting/recipes/dynamic/seal_focus.json
91d690ba6ad40da05111aff1ea5804c859618986 data/hexcasting/recipes/focus.json
9631f6616c6a63c9e0a9eaa8126e2f116636fab5 data/hexcasting/recipes/impetus_rightclick.json
3a47933ad88386e7e70712d9db682f0a987afeda data/hexcasting/recipes/lens.json
0ea329526c81c1e4064bab61721ab4586cfcf706 data/hexcasting/recipes/pride_colorizer_0.json
c742a0a5fba2388263bfccfb49c60277d817f8cd data/hexcasting/recipes/pride_colorizer_1.json
@ -213,13 +213,10 @@ c7c7fa49b7d1f0d03cd753f1ba78aa05a68135d0 data/hexcasting/recipes/pride_colorizer
56d35172b3c5a58e2be4c5be20dd69417685f5d9 data/hexcasting/recipes/scroll.json
f3a33396e071f3afd61eadab2aabdb9acf2ae775 data/hexcasting/recipes/slate.json
2630d1471512bc7e26115cd04fd532c925f09a5f data/hexcasting/recipes/slate_block.json
6f5c41ab9f87ec1206efaaab8d91adc766bb79fd data/hexcasting/recipes/slate_block_from_slates.json
4f06f5f4ae181c8bb6b993d7b6047cd9ca7afbce data/hexcasting/recipes/spellbook.json
d14cf2f8f0895a5b6dc09b7582c0abf1c2514adf data/hexcasting/recipes/sub_sandwich.json
33b9d3a5e65343fc0e442e17d55a1eaa08943c8f data/hexcasting/recipes/trinket.json
14d6be5d47b54676a349564ea32c045c76c39b45 data/hexcasting/recipes/uuid_colorizer.json
0521d57838cb3e9795fc02ce47aa58db3b0188f9 data/hexcasting/recipes/wand.json
bb1b6b77482fd9778a8c0473495aa8e22cddd706 data/minecraft/advancements/recipes/brainsweep/budding_amethyst.json
996fb8e48bacec65d5d3de31d733e87656b74df5 data/minecraft/advancements/recipes/hexcasting/slate_block_from_slates.json
1cb9f605890a215a965e1088abd3013bd34e0fc0 data/minecraft/recipes/budding_amethyst.json
6f5c41ab9f87ec1206efaaab8d91adc766bb79fd data/minecraft/recipes/slate_block_from_slates.json
cf2e739eb059c69251e4a1305b259aff866f6f5f data/minecraft/tags/blocks/mineable/pickaxe.json

View file

@ -1,7 +1,40 @@
{
"variants": {
"": {
"model": "hexcasting:block/empty_impetus"
"energized=false,facing=down": {
"model": "hexcasting:block/empty_impetus_dim_down"
},
"energized=true,facing=down": {
"model": "hexcasting:block/empty_impetus_lit_down"
},
"energized=false,facing=up": {
"model": "hexcasting:block/empty_impetus_dim_up"
},
"energized=true,facing=up": {
"model": "hexcasting:block/empty_impetus_lit_up"
},
"energized=false,facing=north": {
"model": "hexcasting:block/empty_impetus_dim_north"
},
"energized=true,facing=north": {
"model": "hexcasting:block/empty_impetus_lit_north"
},
"energized=false,facing=south": {
"model": "hexcasting:block/empty_impetus_dim_south"
},
"energized=true,facing=south": {
"model": "hexcasting:block/empty_impetus_lit_south"
},
"energized=false,facing=west": {
"model": "hexcasting:block/empty_impetus_dim_west"
},
"energized=true,facing=west": {
"model": "hexcasting:block/empty_impetus_lit_west"
},
"energized=false,facing=east": {
"model": "hexcasting:block/empty_impetus_dim_east"
},
"energized=true,facing=east": {
"model": "hexcasting:block/empty_impetus_lit_east"
}
}
}

View file

@ -1,52 +0,0 @@
{
"variants": {
"energized=false,facing=down": {
"model": "hexcasting:block/redirector_dim_down",
"uvlock": true
},
"energized=true,facing=down": {
"model": "hexcasting:block/redirector_lit_down",
"uvlock": true
},
"energized=false,facing=up": {
"model": "hexcasting:block/redirector_dim_up",
"uvlock": true
},
"energized=true,facing=up": {
"model": "hexcasting:block/redirector_lit_up",
"uvlock": true
},
"energized=false,facing=north": {
"model": "hexcasting:block/redirector_dim_north",
"uvlock": true
},
"energized=true,facing=north": {
"model": "hexcasting:block/redirector_lit_north",
"uvlock": true
},
"energized=false,facing=south": {
"model": "hexcasting:block/redirector_dim_south",
"uvlock": true
},
"energized=true,facing=south": {
"model": "hexcasting:block/redirector_lit_south",
"uvlock": true
},
"energized=false,facing=west": {
"model": "hexcasting:block/redirector_dim_west",
"uvlock": true
},
"energized=true,facing=west": {
"model": "hexcasting:block/redirector_lit_west",
"uvlock": true
},
"energized=false,facing=east": {
"model": "hexcasting:block/redirector_dim_east",
"uvlock": true
},
"energized=true,facing=east": {
"model": "hexcasting:block/redirector_lit_east",
"uvlock": true
}
}
}

View file

@ -1,6 +0,0 @@
{
"parent": "minecraft:block/cube_all",
"textures": {
"all": "hexcasting:block/impetus/empty"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/front_dim",
"up": "hexcasting:block/impetus/empty/back_dim",
"north": "hexcasting:block/impetus/empty/down_dim",
"south": "hexcasting:block/impetus/empty/down_dim",
"east": "hexcasting:block/impetus/empty/down_dim",
"west": "hexcasting:block/impetus/empty/down_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/right_dim",
"up": "hexcasting:block/impetus/empty/right_dim",
"north": "hexcasting:block/impetus/empty/left_dim",
"south": "hexcasting:block/impetus/empty/right_dim",
"east": "hexcasting:block/impetus/empty/front_dim",
"west": "hexcasting:block/impetus/empty/back_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/down_dim",
"up": "hexcasting:block/impetus/empty/up_dim",
"north": "hexcasting:block/impetus/empty/front_dim",
"south": "hexcasting:block/impetus/empty/back_dim",
"east": "hexcasting:block/impetus/empty/right_dim",
"west": "hexcasting:block/impetus/empty/left_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/up_dim",
"up": "hexcasting:block/impetus/empty/down_dim",
"north": "hexcasting:block/impetus/empty/back_dim",
"south": "hexcasting:block/impetus/empty/front_dim",
"east": "hexcasting:block/impetus/empty/left_dim",
"west": "hexcasting:block/impetus/empty/right_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/back_dim",
"up": "hexcasting:block/impetus/empty/front_dim",
"north": "hexcasting:block/impetus/empty/up_dim",
"south": "hexcasting:block/impetus/empty/up_dim",
"east": "hexcasting:block/impetus/empty/up_dim",
"west": "hexcasting:block/impetus/empty/up_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/left_dim",
"up": "hexcasting:block/impetus/empty/left_dim",
"north": "hexcasting:block/impetus/empty/right_dim",
"south": "hexcasting:block/impetus/empty/left_dim",
"east": "hexcasting:block/impetus/empty/back_dim",
"west": "hexcasting:block/impetus/empty/front_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/front_lit",
"up": "hexcasting:block/impetus/empty/back_lit",
"north": "hexcasting:block/impetus/empty/down_lit",
"south": "hexcasting:block/impetus/empty/down_lit",
"east": "hexcasting:block/impetus/empty/down_lit",
"west": "hexcasting:block/impetus/empty/down_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/right_lit",
"up": "hexcasting:block/impetus/empty/right_lit",
"north": "hexcasting:block/impetus/empty/left_lit",
"south": "hexcasting:block/impetus/empty/right_lit",
"east": "hexcasting:block/impetus/empty/front_lit",
"west": "hexcasting:block/impetus/empty/back_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/down_lit",
"up": "hexcasting:block/impetus/empty/up_lit",
"north": "hexcasting:block/impetus/empty/front_lit",
"south": "hexcasting:block/impetus/empty/back_lit",
"east": "hexcasting:block/impetus/empty/right_lit",
"west": "hexcasting:block/impetus/empty/left_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/up_lit",
"up": "hexcasting:block/impetus/empty/down_lit",
"north": "hexcasting:block/impetus/empty/back_lit",
"south": "hexcasting:block/impetus/empty/front_lit",
"east": "hexcasting:block/impetus/empty/left_lit",
"west": "hexcasting:block/impetus/empty/right_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/back_lit",
"up": "hexcasting:block/impetus/empty/front_lit",
"north": "hexcasting:block/impetus/empty/up_lit",
"south": "hexcasting:block/impetus/empty/up_lit",
"east": "hexcasting:block/impetus/empty/up_lit",
"west": "hexcasting:block/impetus/empty/up_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -0,0 +1,12 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/empty/left_lit",
"up": "hexcasting:block/impetus/empty/left_lit",
"north": "hexcasting:block/impetus/empty/right_lit",
"south": "hexcasting:block/impetus/empty/left_lit",
"east": "hexcasting:block/impetus/empty/back_lit",
"west": "hexcasting:block/impetus/empty/front_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,7 +1,7 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/left_dim",
"down": "hexcasting:block/impetus/rightclick/right_dim",
"up": "hexcasting:block/impetus/rightclick/right_dim",
"north": "hexcasting:block/impetus/rightclick/left_dim",
"south": "hexcasting:block/impetus/rightclick/right_dim",

View file

@ -1,7 +1,7 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/right_dim",
"down": "hexcasting:block/impetus/rightclick/left_dim",
"up": "hexcasting:block/impetus/rightclick/left_dim",
"north": "hexcasting:block/impetus/rightclick/right_dim",
"south": "hexcasting:block/impetus/rightclick/left_dim",

View file

@ -1,7 +1,7 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/left_lit",
"down": "hexcasting:block/impetus/rightclick/right_lit",
"up": "hexcasting:block/impetus/rightclick/right_lit",
"north": "hexcasting:block/impetus/rightclick/left_lit",
"south": "hexcasting:block/impetus/rightclick/right_lit",

View file

@ -1,7 +1,7 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/right_lit",
"down": "hexcasting:block/impetus/rightclick/left_lit",
"up": "hexcasting:block/impetus/rightclick/left_lit",
"north": "hexcasting:block/impetus/rightclick/right_lit",
"south": "hexcasting:block/impetus/rightclick/left_lit",

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/front_dim",
"up": "hexcasting:block/impetus/rightclick/back_dim",
"north": "hexcasting:block/impetus/rightclick/down_dim",
"south": "hexcasting:block/impetus/rightclick/down_dim",
"east": "hexcasting:block/impetus/rightclick/down_dim",
"west": "hexcasting:block/impetus/rightclick/down_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/left_dim",
"up": "hexcasting:block/impetus/rightclick/right_dim",
"north": "hexcasting:block/impetus/rightclick/left_dim",
"south": "hexcasting:block/impetus/rightclick/right_dim",
"east": "hexcasting:block/impetus/rightclick/front_dim",
"west": "hexcasting:block/impetus/rightclick/back_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/down_dim",
"up": "hexcasting:block/impetus/rightclick/up_dim",
"north": "hexcasting:block/impetus/rightclick/front_dim",
"south": "hexcasting:block/impetus/rightclick/back_dim",
"east": "hexcasting:block/impetus/rightclick/right_dim",
"west": "hexcasting:block/impetus/rightclick/left_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/up_dim",
"up": "hexcasting:block/impetus/rightclick/down_dim",
"north": "hexcasting:block/impetus/rightclick/back_dim",
"south": "hexcasting:block/impetus/rightclick/front_dim",
"east": "hexcasting:block/impetus/rightclick/left_dim",
"west": "hexcasting:block/impetus/rightclick/right_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/back_dim",
"up": "hexcasting:block/impetus/rightclick/front_dim",
"north": "hexcasting:block/impetus/rightclick/up_dim",
"south": "hexcasting:block/impetus/rightclick/up_dim",
"east": "hexcasting:block/impetus/rightclick/up_dim",
"west": "hexcasting:block/impetus/rightclick/up_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/right_dim",
"up": "hexcasting:block/impetus/rightclick/left_dim",
"north": "hexcasting:block/impetus/rightclick/right_dim",
"south": "hexcasting:block/impetus/rightclick/left_dim",
"east": "hexcasting:block/impetus/rightclick/back_dim",
"west": "hexcasting:block/impetus/rightclick/front_dim",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/front_lit",
"up": "hexcasting:block/impetus/rightclick/back_lit",
"north": "hexcasting:block/impetus/rightclick/down_lit",
"south": "hexcasting:block/impetus/rightclick/down_lit",
"east": "hexcasting:block/impetus/rightclick/down_lit",
"west": "hexcasting:block/impetus/rightclick/down_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/left_lit",
"up": "hexcasting:block/impetus/rightclick/right_lit",
"north": "hexcasting:block/impetus/rightclick/left_lit",
"south": "hexcasting:block/impetus/rightclick/right_lit",
"east": "hexcasting:block/impetus/rightclick/front_lit",
"west": "hexcasting:block/impetus/rightclick/back_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/down_lit",
"up": "hexcasting:block/impetus/rightclick/up_lit",
"north": "hexcasting:block/impetus/rightclick/front_lit",
"south": "hexcasting:block/impetus/rightclick/back_lit",
"east": "hexcasting:block/impetus/rightclick/right_lit",
"west": "hexcasting:block/impetus/rightclick/left_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/up_lit",
"up": "hexcasting:block/impetus/rightclick/down_lit",
"north": "hexcasting:block/impetus/rightclick/back_lit",
"south": "hexcasting:block/impetus/rightclick/front_lit",
"east": "hexcasting:block/impetus/rightclick/left_lit",
"west": "hexcasting:block/impetus/rightclick/right_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/back_lit",
"up": "hexcasting:block/impetus/rightclick/front_lit",
"north": "hexcasting:block/impetus/rightclick/up_lit",
"south": "hexcasting:block/impetus/rightclick/up_lit",
"east": "hexcasting:block/impetus/rightclick/up_lit",
"west": "hexcasting:block/impetus/rightclick/up_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,12 +0,0 @@
{
"parent": "minecraft:block/cube",
"textures": {
"down": "hexcasting:block/impetus/rightclick/right_lit",
"up": "hexcasting:block/impetus/rightclick/left_lit",
"north": "hexcasting:block/impetus/rightclick/right_lit",
"south": "hexcasting:block/impetus/rightclick/left_lit",
"east": "hexcasting:block/impetus/rightclick/back_lit",
"west": "hexcasting:block/impetus/rightclick/front_lit",
"particle": "hexcasting:block/slate"
}
}

View file

@ -1,3 +1,3 @@
{
"parent": "hexcasting:block/empty_impetus"
"parent": "hexcasting:block/empty_impetus_dim_north"
}

View file

@ -1,3 +1,3 @@
{
"parent": "hexcasting:block/impetus_rightclick_dim_south"
"parent": "hexcasting:block/impetus_rightclick_dim_north"
}

View file

@ -1,3 +0,0 @@
{
"parent": "hexcasting:block/redirector_dim_south"
}

View file

@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"minecraft:budding_amethyst"
"hexcasting:brainsweep/budding_amethyst"
]
},
"criteria": {
@ -21,7 +21,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "minecraft:budding_amethyst"
"recipe": "hexcasting:brainsweep/budding_amethyst"
}
}
},

View file

@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"hexcasting:impetus_rightclick"
"hexcasting:brainsweep/impetus_rightclick"
]
},
"criteria": {
@ -21,7 +21,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "hexcasting:impetus_rightclick"
"recipe": "hexcasting:brainsweep/impetus_rightclick"
}
}
},

View file

@ -2,7 +2,7 @@
"parent": "minecraft:recipes/root",
"rewards": {
"recipes": [
"minecraft:slate_block_from_slates"
"hexcasting:slate_block_from_slates"
]
},
"criteria": {
@ -21,7 +21,7 @@
"has_the_recipe": {
"trigger": "minecraft:recipe_unlocked",
"conditions": {
"recipe": "minecraft:slate_block_from_slates"
"recipe": "hexcasting:slate_block_from_slates"
}
}
},

View file

@ -4,6 +4,8 @@ import net.minecraft.nbt.LongArrayTag
import net.minecraft.world.InteractionHand
import net.minecraft.world.phys.Vec2
import net.minecraft.world.phys.Vec3
import kotlin.math.max
import kotlin.math.min
object HexUtils {
@JvmStatic
@ -35,6 +37,25 @@ object HexUtils {
@JvmStatic
fun FixNANs(x: Double): Double = if (x.isFinite()) x else 0.0
@JvmStatic
fun FindCenter(points: List<Vec2>): Vec2 {
var minX = Float.POSITIVE_INFINITY
var minY = Float.POSITIVE_INFINITY
var maxX = Float.NEGATIVE_INFINITY
var maxY = Float.NEGATIVE_INFINITY
for (pos in points) {
minX = min(minX, pos.x)
minY = min(minY, pos.y)
maxX = max(maxX, pos.x)
maxY = max(maxY, pos.y)
}
return Vec2(
(minX + maxX) / 2f,
(minY + maxY) / 2f
)
}
const val TAU = Math.PI * 2.0
}

View file

@ -44,15 +44,19 @@ public class PatternTooltipGreeble implements ClientTooltipComponent, TooltipCom
var com1 = this.pattern.getCenter(1);
var lines1 = this.pattern.toLines(1, Vec2.ZERO);
var maxDist = -1f;
var maxDx = -1f;
var maxDy = -1f;
for (var dot : lines1) {
var dist = Mth.sqrt(dot.distanceToSqr(com1));
if (dist > maxDist) {
maxDist = dist;
var dx = Mth.abs(dot.x - com1.x);
if (dx > maxDx) {
maxDx = dx;
}
var dy = Mth.abs(dot.y - com1.y);
if (dy > maxDy) {
maxDy = dy;
}
}
this.scale = Math.min(10, this.getHeight() / 2.5f / maxDist);
this.scale = Math.min(8f, Math.min(SIZE / 3f / maxDx, SIZE / 3f / maxDy));
var com2 = this.pattern.getCenter(this.scale);
var lines2 = this.pattern.toLines(this.scale, com2.negated());

View file

@ -1,8 +1,8 @@
package at.petrak.hexcasting.common.blocks;
import at.petrak.hexcasting.HexMod;
import at.petrak.hexcasting.common.blocks.circles.BlockEmptyImpetus;
import at.petrak.hexcasting.common.blocks.circles.BlockEntitySlate;
import at.petrak.hexcasting.common.blocks.circles.BlockRedirector;
import at.petrak.hexcasting.common.blocks.circles.BlockSlate;
import at.petrak.hexcasting.common.blocks.circles.impetuses.BlockAbstractImpetus;
import at.petrak.hexcasting.common.blocks.circles.impetuses.BlockEntityRightClickImpetus;
@ -41,12 +41,9 @@ public class HexBlocks {
public static final RegistryObject<BlockSlate> SLATE = BLOCKS.register("slate",
() -> new BlockSlate(slateish()));
public static final RegistryObject<BlockRedirector> REDIRECTOR = BLOCKS.register("redirector",
() -> new BlockRedirector(slateish()));
public static final RegistryObject<Block> EMPTY_IMPETUS = BLOCKS.register("empty_impetus",
() -> new Block(slateish()));
public static final RegistryObject<BlockEmptyImpetus> EMPTY_IMPETUS = BLOCKS.register("empty_impetus",
() -> new BlockEmptyImpetus(slateish()));
public static final RegistryObject<BlockRightClickImpetus> IMPETUS_RIGHTCLICK = BLOCKS.register(
"impetus_rightclick",
() -> new BlockRightClickImpetus(slateish()

View file

@ -17,10 +17,11 @@ import org.jetbrains.annotations.Nullable;
import java.util.EnumSet;
public class BlockRedirector extends BlockCircleComponent {
// As it turns out, not actually an impetus
public class BlockEmptyImpetus extends BlockCircleComponent {
public static final DirectionProperty FACING = BlockStateProperties.FACING;
public BlockRedirector(Properties p_49795_) {
public BlockEmptyImpetus(Properties p_49795_) {
super(p_49795_);
this.registerDefaultState(this.stateDefinition.any()
.setValue(ENERGIZED, false).setValue(FACING, Direction.NORTH));

View file

@ -93,14 +93,19 @@ public class BlockEntitySlate extends ModBlockEntity {
var com1 = tile.pattern.getCenter(1);
var lines1 = tile.pattern.toLines(1, Vec2.ZERO);
var maxDist = -1f;
var maxDx = -1f;
var maxDy = -1f;
for (var dot : lines1) {
var dist = Mth.sqrt(dot.distanceToSqr(com1));
if (dist > maxDist) {
maxDist = dist;
var dx = Mth.abs(dot.x - com1.x);
if (dx > maxDx) {
maxDx = dx;
}
var dy = Mth.abs(dot.y - com1.y);
if (dy > maxDy) {
maxDy = dy;
}
}
var scale = Math.min(4, 16 / 2.5f / maxDist);
var scale = Math.min(3.8f, Math.min(16 / 2.5f / maxDx, 16 / 2.5f / maxDy));
var com2 = tile.pattern.getCenter(scale);
var lines2 = tile.pattern.toLines(scale, com2.negated());

View file

@ -102,7 +102,12 @@ class CastException(val reason: Reason, vararg val data: Any) : Exception() {
*
* for fucks sake i need to just implement mishaps already
*/
RECIPE_DIDNT_WORK
RECIPE_DIDNT_WORK,
/**
* No spell circles??
*/
NO_SPELL_CIRCLE,
}
override val message: String
@ -120,5 +125,6 @@ class CastException(val reason: Reason, vararg val data: Any) : Exception() {
Reason.BAD_OFFHAND_COUNT -> "operator expected ${this.data[0]} items in the offhand but got ${this.data[1]}"
Reason.REQUIRES_INVENTORY -> "required an inventory at ${this.data[0] as BlockPos}"
Reason.RECIPE_DIDNT_WORK -> "bad recipe"
Reason.NO_SPELL_CIRCLE -> "requires a spell circle to cast"
}
}

View file

@ -19,8 +19,6 @@ import net.minecraft.nbt.ListTag
import net.minecraft.nbt.Tag
import net.minecraft.network.chat.Component
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
import net.minecraft.world.InteractionHand
import net.minecraft.world.phys.Vec3
import kotlin.math.min
@ -339,10 +337,6 @@ class CastingHarness private constructor(
out.put(TAG_PREPACKAGED_COLORIZER, this.prepackagedColorizer.serialize())
}
if (this.ctx.spellCircle != null) {
out.put(TAG_SPELL_CIRCLE, this.ctx.spellCircle.serializeToNBT())
}
return out
}
@ -353,22 +347,12 @@ class CastingHarness private constructor(
const val TAG_PARENTHESIZED = "parenthesized"
const val TAG_ESCAPE_NEXT = "escape_next"
const val TAG_PREPACKAGED_COLORIZER = "prepackaged_colorizer"
const val TAG_SPELL_CIRCLE = "spell_circle"
@JvmStatic
fun DeserializeFromNBT(nbt: Tag?, caster: ServerPlayer, wandHand: InteractionHand): CastingHarness {
fun DeserializeFromNBT(nbt: Tag, ctx: CastingContext): CastingHarness {
return try {
val nbt = nbt as CompoundTag
val spellCircleContext = if (nbt.contains(TAG_SPELL_CIRCLE)) {
SpellCircleContext.DeserializeFromNBT(nbt.getCompound(TAG_SPELL_CIRCLE))
} else {
null
}
val ctx = CastingContext(caster, wandHand, spellCircleContext)
val stack = mutableListOf<SpellDatum<*>>()
val stackTag = nbt.getList(TAG_STACK, Tag.TAG_COMPOUND.toInt())
for (subtag in stackTag) {
@ -394,7 +378,7 @@ class CastingHarness private constructor(
CastingHarness(stack, parenCount, parenthesized, escapeNext, ctx, colorizer)
} catch (exn: Exception) {
HexMod.LOGGER.warn("Couldn't load harness from nbt tag, falling back to default: $nbt: $exn")
CastingHarness(CastingContext(caster, wandHand))
CastingHarness(ctx)
}
}
}

View file

@ -0,0 +1,26 @@
package at.petrak.hexcasting.common.casting.operators.circles
import at.petrak.hexcasting.api.spell.ConstManaOperator
import at.petrak.hexcasting.api.spell.Operator
import at.petrak.hexcasting.api.spell.SpellDatum
import at.petrak.hexcasting.common.casting.CastException
import at.petrak.hexcasting.common.casting.CastingContext
import net.minecraft.world.phys.Vec3
class OpCircleBounds(val max: Boolean) : ConstManaOperator {
override val argc = 0
override fun execute(args: List<SpellDatum<*>>, ctx: CastingContext): List<SpellDatum<*>> {
if (ctx.spellCircle == null)
throw CastException(CastException.Reason.NO_SPELL_CIRCLE)
val aabb = ctx.spellCircle.aabb
return Operator.spellListOf(
if (max)
Vec3(aabb.minX, aabb.minY, aabb.minZ)
else
Vec3(aabb.maxX, aabb.maxY, aabb.maxZ)
)
}
}

View file

@ -0,0 +1,23 @@
package at.petrak.hexcasting.common.casting.operators.circles
import at.petrak.hexcasting.api.spell.ConstManaOperator
import at.petrak.hexcasting.api.spell.Operator
import at.petrak.hexcasting.api.spell.SpellDatum
import at.petrak.hexcasting.common.blocks.circles.impetuses.BlockAbstractImpetus
import at.petrak.hexcasting.common.casting.CastException
import at.petrak.hexcasting.common.casting.CastingContext
import net.minecraft.world.phys.Vec3
object OpImpetusDir : ConstManaOperator {
override val argc = 0
override fun execute(args: List<SpellDatum<*>>, ctx: CastingContext): List<SpellDatum<*>> {
if (ctx.spellCircle == null)
throw CastException(CastException.Reason.NO_SPELL_CIRCLE)
val pos = ctx.spellCircle.impetusPos
val bs = ctx.world.getBlockState(pos)
val dir = bs.getValue(BlockAbstractImpetus.FACING)
return Operator.spellListOf(Vec3(dir.step()))
}
}

View file

@ -0,0 +1,19 @@
package at.petrak.hexcasting.common.casting.operators.circles
import at.petrak.hexcasting.api.spell.ConstManaOperator
import at.petrak.hexcasting.api.spell.Operator
import at.petrak.hexcasting.api.spell.SpellDatum
import at.petrak.hexcasting.common.casting.CastException
import at.petrak.hexcasting.common.casting.CastingContext
import net.minecraft.world.phys.Vec3
object OpImpetusPos : ConstManaOperator {
override val argc = 0
override fun execute(args: List<SpellDatum<*>>, ctx: CastingContext): List<SpellDatum<*>> {
if (ctx.spellCircle == null)
throw CastException(CastException.Reason.NO_SPELL_CIRCLE)
return Operator.spellListOf(Vec3.atCenterOf(ctx.spellCircle.impetusPos))
}
}

View file

@ -23,8 +23,8 @@ object OpBrainsweep : SpellOperator {
args: List<SpellDatum<*>>,
ctx: CastingContext
): Triple<RenderedSpell, Int, List<ParticleSpray>> {
val pos = args.getChecked<Vec3>(0)
val sacrifice = args.getChecked<Villager>(1)
val sacrifice = args.getChecked<Villager>(0)
val pos = args.getChecked<Vec3>(1)
ctx.assertVecInRange(pos)
ctx.assertEntityInRange(sacrifice)

View file

@ -104,10 +104,11 @@ public class HexItems {
}
public static class Blocks {
public static final RegistryObject<BlockItem> CONJURED = ITEMS.register("conjured",
() -> new BlockItem(HexBlocks.CONJURED.get(), new Item.Properties()));
public static final RegistryObject<ItemSlate> SLATE = ITEMS.register("slate",
() -> new ItemSlate(HexBlocks.SLATE.get(), props()));
public static final RegistryObject<BlockItem> REDIRECTOR = ITEMS.register("redirector",
() -> new BlockItem(HexBlocks.REDIRECTOR.get(), props()));
public static final RegistryObject<BlockItem> EMPTY_IMPETUS = ITEMS.register("empty_impetus",
() -> new BlockItem(HexBlocks.EMPTY_IMPETUS.get(), props()));

View file

@ -1,5 +1,6 @@
package at.petrak.hexcasting.common.network;
import at.petrak.hexcasting.common.casting.CastingContext;
import at.petrak.hexcasting.common.casting.CastingHarness;
import at.petrak.hexcasting.common.items.ItemWand;
import at.petrak.hexcasting.common.lib.HexSounds;
@ -33,15 +34,15 @@ public record MsgNewSpellPatternSyn(InteractionHand handUsed, HexPattern pattern
buf.writeNbt(this.pattern.serializeToNBT());
}
public void handle(Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
ServerPlayer sender = ctx.get().getSender();
public void handle(Supplier<NetworkEvent.Context> networkCtx) {
networkCtx.get().enqueueWork(() -> {
ServerPlayer sender = networkCtx.get().getSender();
if (sender != null) {
var held = sender.getItemInHand(this.handUsed);
if (held.getItem() instanceof ItemWand) {
var ctx = new CastingContext(sender, this.handUsed);
var tag = held.getOrCreateTag();
var harness = CastingHarness.DeserializeFromNBT(tag.getCompound(ItemWand.TAG_HARNESS), sender,
this.handUsed);
var harness = CastingHarness.DeserializeFromNBT(tag.getCompound(ItemWand.TAG_HARNESS), ctx);
var clientInfo = harness.executeNewPattern(this.pattern, sender.getLevel());
@ -66,7 +67,7 @@ public record MsgNewSpellPatternSyn(InteractionHand handUsed, HexPattern pattern
}
}
});
ctx.get().setPacketHandled(true);
networkCtx.get().setPacketHandled(true);
}
}

View file

@ -66,7 +66,7 @@ public record BrainsweepRecipe(
@Override
public ItemStack getResultItem() {
return ItemStack.EMPTY;
return ItemStack.EMPTY.copy();
}
public static class Serializer extends ForgeRegistryEntry<RecipeSerializer<?>> implements RecipeSerializer<BrainsweepRecipe> {

View file

@ -1,13 +1,15 @@
package at.petrak.hexcasting.datagen;
import at.petrak.hexcasting.HexMod;
import at.petrak.hexcasting.api.BlockCircleComponent;
import at.petrak.hexcasting.common.blocks.HexBlocks;
import at.petrak.hexcasting.common.blocks.circles.BlockRedirector;
import at.petrak.hexcasting.common.blocks.circles.BlockSlate;
import at.petrak.hexcasting.common.blocks.circles.impetuses.BlockAbstractImpetus;
import net.minecraft.core.Direction;
import net.minecraft.data.DataGenerator;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraftforge.client.model.generators.BlockModelBuilder;
import net.minecraftforge.client.model.generators.BlockStateProvider;
import net.minecraftforge.client.model.generators.ConfiguredModel;
import net.minecraftforge.common.data.ExistingFileHelper;
@ -38,114 +40,87 @@ public class HexBlockStatesAndModels extends BlockStateProvider {
.build();
});
getVariantBuilder(HexBlocks.REDIRECTOR.get()).forAllStates(bs -> {
var isLit = bs.getValue(BlockRedirector.ENERGIZED);
var litness = isLit ? "lit" : "dim";
var dir = bs.getValue(BlockRedirector.FACING);
var slateTex = modLoc("block/slate");
arrowCircleBlock(HexBlocks.EMPTY_IMPETUS.get(), "empty_impetus", "block/impetus/empty", slateTex);
arrowCircleBlock(HexBlocks.IMPETUS_RIGHTCLICK.get(), "impetus_rightclick", "block/impetus/rightclick",
slateTex);
final ResourceLocation up = modLoc("block/impetus/rightclick/up_" + litness),
down = modLoc("block/impetus/rightclick/down_" + litness),
left = modLoc("block/impetus/rightclick/left_" + litness),
right = modLoc("block/impetus/rightclick/right_" + litness),
front = modLoc("block/impetus/rightclick/front_" + litness),
back = modLoc("block/impetus/rightclick/back_" + litness);
var name = "redirector_" + litness + "_" + dir.getName();
var f = oriented(dir, up, down, left, right, front, back);
var model = models().cube(name, f[0], f[1], f[2], f[3], f[4], f[5])
.texture("particle", modLoc("block/slate"));
if (!isLit && dir == Direction.SOUTH) {
simpleBlockItem(HexBlocks.REDIRECTOR.get(), model);
}
return ConfiguredModel.builder()
.modelFile(model)
.uvLock(true)
.build();
});
var emptyImpetus = models().cubeAll("empty_impetus", modLoc("block/impetus/empty"));
simpleBlock(HexBlocks.EMPTY_IMPETUS.get(), emptyImpetus);
simpleBlockItem(HexBlocks.EMPTY_IMPETUS.get(), emptyImpetus);
getVariantBuilder(HexBlocks.IMPETUS_RIGHTCLICK.get()).forAllStates(bs -> {
var isLit = bs.getValue(BlockAbstractImpetus.ENERGIZED);
var litness = isLit ? "lit" : "dim";
var dir = bs.getValue(BlockAbstractImpetus.FACING);
// Assuming it's facing north
var up = modLoc("block/impetus/rightclick/up_" + litness);
var front = modLoc("block/impetus/rightclick/front_" + litness);
var back = modLoc("block/impetus/rightclick/back_" + litness);
var left = modLoc("block/impetus/rightclick/left_" + litness);
var right = modLoc("block/impetus/rightclick/right_" + litness);
var down = modLoc("block/impetus/rightclick/down_" + litness);
var name = "impetus_rightclick_" + litness + "_" + dir.getName();
var f = oriented(dir, up, down, left, right, front, back);
var model = models().cube(name, f[0], f[1], f[2], f[3], f[4], f[5])
.texture("particle", modLoc("block/slate"));
if (!isLit && dir == Direction.SOUTH) {
simpleBlockItem(HexBlocks.IMPETUS_RIGHTCLICK.get(), model);
}
return ConfiguredModel.builder()
.modelFile(model)
.build();
});
var slateBlock = models().cubeAll("slate_block", modLoc("block/slate"));
simpleBlock(HexBlocks.SLATE_BLOCK.get(), slateBlock);
simpleBlockItem(HexBlocks.SLATE_BLOCK.get(), slateBlock);
blockAndItem(HexBlocks.SLATE_BLOCK.get(), models().cubeAll("slate_block", modLoc("block/slate")));
}
// return [bottom, top, north, south, east, west
private static ResourceLocation[] oriented(Direction dir, ResourceLocation up, ResourceLocation down,
ResourceLocation left, ResourceLocation right, ResourceLocation front, ResourceLocation back) {
ResourceLocation bottom = null, top = null, north = null, south = null, east = null, west = null;
private void blockAndItem(Block block, BlockModelBuilder model) {
simpleBlock(block, model);
simpleBlockItem(block, model);
}
switch (dir) {
case UP -> {
top = front;
bottom = back;
north = east = south = west = up;
private void arrowCircleBlock(Block block, String name, String stub, ResourceLocation particle) {
getVariantBuilder(block).forAllStates(bs -> {
var isLit = bs.getValue(BlockCircleComponent.ENERGIZED);
var litness = isLit ? "lit" : "dim";
var dir = bs.getValue(BlockStateProperties.FACING);
var up = modLoc(stub + "/up_" + litness);
var front = modLoc(stub + "/front_" + litness);
var back = modLoc(stub + "/back_" + litness);
var left = modLoc(stub + "/left_" + litness);
var right = modLoc(stub + "/right_" + litness);
var down = modLoc(stub + "/down_" + litness);
ResourceLocation bottom = null, top = null, north = null, south = null, east = null, west = null;
switch (dir) {
case UP -> {
top = front;
bottom = back;
north = east = south = west = up;
}
case DOWN -> {
bottom = front;
top = back;
north = east = south = west = down;
}
case NORTH -> {
north = front;
south = back;
west = left;
east = right;
top = up;
bottom = down;
}
case SOUTH -> {
south = front;
north = back;
west = right;
east = left;
top = down;
bottom = up;
}
case WEST -> {
west = front;
east = back;
north = right;
south = left;
top = left;
bottom = left;
}
case EAST -> {
east = front;
west = back;
north = left;
south = right;
top = right;
bottom = right;
}
}
case DOWN -> {
bottom = front;
top = back;
north = east = south = west = down;
var modelName = name + "_" + litness + "_" + dir.getName();
var model = models().cube(modelName, bottom, top, north, south, east, west)
.texture("particle", particle);
if (!isLit && dir == Direction.NORTH) {
simpleBlockItem(block, model);
}
case NORTH -> {
north = front;
south = back;
west = left;
east = right;
top = up;
bottom = down;
}
case SOUTH -> {
south = front;
north = back;
west = right;
east = left;
top = down;
bottom = up;
}
case WEST -> {
west = front;
east = back;
north = right;
south = left;
top = left;
bottom = right;
}
case EAST -> {
east = front;
west = back;
north = left;
south = right;
top = right;
bottom = left;
}
}
return new ResourceLocation[]{bottom, top, north, south, east, west};
return ConfiguredModel.builder()
.modelFile(model)
.build();
});
}
}

View file

@ -1,5 +1,6 @@
package at.petrak.hexcasting.datagen;
import at.petrak.hexcasting.HexMod;
import at.petrak.hexcasting.common.advancement.OvercastTrigger;
import at.petrak.hexcasting.common.blocks.HexBlocks;
import at.petrak.hexcasting.common.items.HexItems;
@ -193,7 +194,7 @@ public class HexRecipes extends RecipeProvider {
.pattern("S")
.pattern("S")
.unlockedBy("has_item", has(HexItems.Blocks.SLATE.get()))
.save(recipes, "slate_block_from_slates");
.save(recipes, modLoc("slate_block_from_slates"));
ShapedRecipeBuilder.shaped(HexBlocks.SLATE_BLOCK.get(), 8)
.define('S', Blocks.DEEPSLATE)
@ -213,13 +214,17 @@ public class HexRecipes extends RecipeProvider {
new VillagerIngredient(new ResourceLocation("toolsmith"), null, 1),
HexBlocks.IMPETUS_RIGHTCLICK.get().defaultBlockState())
.unlockedBy("enlightenment", enlightenment)
.save(recipes);
.save(recipes, modLoc("brainsweep/impetus_rightclick"));
new BrainsweepRecipeBuilder(StateIngredientHelper.of(Blocks.AMETHYST_BLOCK),
new VillagerIngredient(null, null, 5),
Blocks.BUDDING_AMETHYST.defaultBlockState())
.unlockedBy("enlightenment", enlightenment)
.save(recipes);
.save(recipes, modLoc("brainsweep/budding_amethyst"));
}
private ResourceLocation modLoc(String path) {
return new ResourceLocation(HexMod.MOD_ID, path);
}
protected void specialRecipe(Consumer<FinishedRecipe> consumer, SimpleRecipeSerializer<?> serializer) {

View file

@ -1,12 +1,11 @@
package at.petrak.hexcasting.hexmath
import at.petrak.hexcasting.HexUtils
import at.petrak.hexcasting.client.RenderLib
import net.minecraft.nbt.ByteArrayTag
import net.minecraft.nbt.ByteTag
import net.minecraft.nbt.CompoundTag
import net.minecraft.world.phys.Vec2
import kotlin.math.max
import kotlin.math.min
/**
* Sequence of angles to define a pattern traced.
@ -94,24 +93,9 @@ data class HexPattern(val startDir: HexDir, val angles: MutableList<HexAngle> =
*/
@JvmOverloads
fun getCenter(hexRadius: Float, origin: HexCoord = HexCoord.Origin): Vec2 {
var minX = Float.POSITIVE_INFINITY
var minY = Float.POSITIVE_INFINITY
var maxX = Float.NEGATIVE_INFINITY
var maxY = Float.NEGATIVE_INFINITY
val poses = this.positions()
val vecOrigin = RenderLib.coordToPx(origin, hexRadius, Vec2.ZERO)
for (pos in poses) {
val px = RenderLib.coordToPx(pos, hexRadius, vecOrigin)
minX = min(minX, px.x)
minY = min(minY, px.y)
maxX = max(maxX, px.x)
maxY = max(maxY, px.y)
}
return Vec2(
(minX + maxX) / 2f,
(minY + maxY) / 2f
)
val originPx = RenderLib.coordToPx(origin, hexRadius, Vec2.ZERO)
val points = this.toLines(hexRadius, originPx)
return HexUtils.FindCenter(points)
}

View file

@ -1,14 +1,15 @@
package at.petrak.hexcasting.interop.patchouli;
import at.petrak.hexcasting.HexUtils;
import at.petrak.hexcasting.client.RenderLib;
import at.petrak.hexcasting.hexmath.HexCoord;
import at.petrak.hexcasting.hexmath.HexPattern;
import com.google.gson.annotations.SerializedName;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.util.Mth;
import net.minecraft.world.phys.Vec2;
import vazkii.patchouli.api.IComponentRenderContext;
import vazkii.patchouli.api.ICustomComponent;
@ -24,9 +25,6 @@ import java.util.stream.Collectors;
* Page that has a hex pattern on it
*/
abstract public class AbstractPatternComponent implements ICustomComponent {
@SerializedName("hex_size")
public String hexSizeRaw;
protected transient int x, y;
protected transient float hexSize;
@ -89,36 +87,60 @@ abstract public class AbstractPatternComponent implements ICustomComponent {
@Override
public void onVariablesAvailable(UnaryOperator<IVariable> lookup) {
this.hexSize = lookup.apply(IVariable.wrap(hexSizeRaw)).asNumber(10f).floatValue();
var patterns = this.getPatterns(lookup);
this.patterns = new ArrayList<>(patterns.size());
// Center the whole thing so the center of all pieces is in the center.
var comAcc = new Vec2(0, 0);
var pointsCount = 0;
var seenPoints = new HashSet<HexCoord>();
// As per PatternTooltipGreeble, we start with a random scale, then re-scale it once we know the COM.
var fakeScale = 1;
var seenFakePoints = new ArrayList<Vec2>();
var seenCoords = new HashSet<HexCoord>();
for (var pair : patterns) {
var pattern = pair.getFirst();
var origin = pair.getSecond();
for (var pos : pattern.positions(origin)) {
comAcc = comAcc.add(RenderLib.coordToPx(pos, this.hexSize, Vec2.ZERO));
pointsCount++;
var px = RenderLib.coordToPx(pos, fakeScale, Vec2.ZERO);
seenFakePoints.add(px);
}
// And while we're looping add the (COORD ONLY) things internally
this.patterns.add(new PatternEntryInternal(pattern, origin, new ArrayList<>()));
seenPoints.addAll(pattern.positions(origin));
seenCoords.addAll(pattern.positions(origin));
}
var fakeCom = HexUtils.FindCenter(seenFakePoints);
var comOffset = comAcc.scale(1f / pointsCount).negated();
var maxDx = -1f;
var maxDy = -1f;
for (var dot : seenFakePoints) {
var dx = Mth.abs(dot.x - fakeCom.x);
if (dx > maxDx) {
maxDx = dx;
}
var dy = Mth.abs(dot.y - fakeCom.y);
if (dy > maxDy) {
maxDy = dy;
}
}
this.hexSize = Math.min(12, Math.min(120 / 2.5f / maxDx, 70 / 2.5f / maxDy));
var seenRealPoints = new ArrayList<Vec2>();
for (var pat : this.patterns) {
var localOrigin = RenderLib.coordToPx(pat.origin, this.hexSize, comOffset);
for (var pos : pat.pattern.positions(pat.origin)) {
var px = RenderLib.coordToPx(pos, this.hexSize, Vec2.ZERO);
seenRealPoints.add(px);
}
}
var realCom = HexUtils.FindCenter(seenRealPoints);
// and NOW for real!
for (var pat : this.patterns) {
var localOrigin = RenderLib.coordToPx(pat.origin, this.hexSize, realCom.negated());
var points = pat.pattern.toLines(this.hexSize, localOrigin);
pat.zappyPoints.addAll(RenderLib.makeZappy(points, 10f, 0.8f, 0f));
}
this.pathfinderDots = seenPoints.stream()
.map(coord -> RenderLib.coordToPx(coord, this.hexSize, comOffset))
this.pathfinderDots = seenCoords.stream()
.map(coord -> RenderLib.coordToPx(coord, this.hexSize, realCom.negated()))
.collect(Collectors.toList());
}

View file

@ -0,0 +1,93 @@
package at.petrak.hexcasting.interop.patchouli;
import at.petrak.hexcasting.common.recipe.BrainsweepRecipe;
import at.petrak.hexcasting.common.recipe.HexRecipeSerializers;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.ItemStack;
import vazkii.patchouli.api.IComponentProcessor;
import vazkii.patchouli.api.IVariable;
import vazkii.patchouli.api.IVariableProvider;
import java.util.Objects;
public class BrainsweepProcessor implements IComponentProcessor {
private BrainsweepRecipe recipe;
@Override
public void setup(IVariableProvider vars) {
var id = new ResourceLocation(vars.get("recipe").asString());
var recman = Minecraft.getInstance().level.getRecipeManager();
var brainsweepings = recman.getAllRecipesFor(HexRecipeSerializers.BRAINSWEEP_TYPE);
for (var poisonApples : brainsweepings) {
if (poisonApples.getId().equals(id)) {
this.recipe = poisonApples;
break;
}
}
}
@Override
public IVariable process(String key) {
if (this.recipe == null) {
return null;
}
switch (key) {
case "header" -> {
return IVariable.from(this.recipe.result().getBlock().getName());
}
case "input" -> {
var inputStacks = this.recipe.blockIn().getDisplayedStacks();
return IVariable.from(inputStacks.toArray(new ItemStack[0]));
}
case "result" -> {
return IVariable.from(new ItemStack(this.recipe.result().getBlock()));
}
case "entity" -> {
var profession = Objects.requireNonNullElse(this.recipe.villagerIn().profession(),
new ResourceLocation("toolsmith"));
var biome = Objects.requireNonNullElse(this.recipe.villagerIn().biome(),
new ResourceLocation("plains"));
var level = this.recipe.villagerIn().minLevel();
var iHatePatchouli = String.format(
"minecraft:villager{VillagerData:{profession:'%s',type:'%s',level:%d}}",
profession, biome, level);
return IVariable.wrap(iHatePatchouli);
}
case "profession" -> {
var profession = this.recipe.villagerIn().profession();
if (profession == null) {
return IVariable.wrap(I18n.get("hexcasting.tooltip.brainsweep.profession.any"));
}
// Villager.java:677
// jesus christ the things i do for this mod
var probablyTheKeyForTheName = "entity." + (!"minecraft".equals(
profession.getNamespace()) ? profession.getNamespace() + '.' : "") + profession.getPath();
var out = I18n.get("hexcasting.tooltip.brainsweep.profession", I18n.get(probablyTheKeyForTheName));
return IVariable.wrap(out);
}
case "biome" -> {
var biome = this.recipe.villagerIn().biome();
if (biome == null) {
return IVariable.wrap(I18n.get("hexcasting.tooltip.brainsweep.biome.any"));
}
// i fucking give up
var definitelyProbablyTheKeyWhyDidIMakeThisUpdateSoBig = "biome.minecraft." + biome.getPath();
var out = I18n.get("hexcasting.tooltip.brainsweep.biome",
I18n.get(definitelyProbablyTheKeyWhyDidIMakeThisUpdateSoBig));
return IVariable.wrap(out);
}
case "minLevel" -> {
return IVariable.wrap(
I18n.get("hexcasting.tooltip.brainsweep.min_level", this.recipe.villagerIn().minLevel()));
}
default -> {
return null;
}
}
}
}

View file

@ -50,6 +50,10 @@
"block.hexcasting.conjured": "Conjured Block",
"block.hexcasting.slate.blank": "Blank Slate",
"block.hexcasting.slate.written": "Patterned Slate",
"block.hexcasting.empty_impetus": "Empty Impetus",
"block.hexcasting.impetus_rightclick": "Actuator Impetus",
"block.hexcasting.slate_block": "Block of Slate",
"itemGroup.hexcasting": "Hexcasting",
"hexcasting.tooltip.spellbook.page": "§7Selected Page §a§l%d§7/§a§l%d§r",
@ -58,6 +62,11 @@
"hexcasting.tooltip.abacus.reset.nice": "nice",
"hexcasting.tooltip.lens.impetus.mana": "%s Dusts",
"hexcasting.tooltip.lens.pattern.invalid": "Invalid Pattern",
"hexcasting.tooltip.brainsweep.profession": "Profession: %s",
"hexcasting.tooltip.brainsweep.profession.any": "Any Profession",
"hexcasting.tooltip.brainsweep.biome": "Biome: %s",
"hexcasting.tooltip.brainsweep.biome.any": "Any Biome",
"hexcasting.tooltip.brainsweep.min_level": "Level %d or higher",
"hexcasting.spelldata.onitem": "§7Contains: §r%s",
"hexcasting.spelldata.entity.whoknows": "An Entity (this should only show up if this was stored before the 0.5.0 update, use Scribe's Reflection, Scribe's Gambit to fix)",
@ -391,8 +400,14 @@
"_comment": "The Work",
"hexcasting.entry.the_work": "The Work",
"hexcasting.page.the_work1": "I have seen so many things. Unspeakable things. Innumerable things. I could write three words and turn my mind inside-out and smear my brains across the shadowed walls of my skull to decay into fluff and nothing.",
"hexcasting.page.the_work2": "I have seen staccato-needle patterns and acid-etched schematics written on the inside of my eyelids. They smolder there-- they dance, they taunt, they $(italic)ache/$. I'm possessed by an intense $(italic)need/$ to draw them, create them. Form them. Liberate them from the gluey shackles of my mortal mind-- present them in their Glory to the world for all to see.$(p)All shall see.$(p)All will see.",
"hexcasting.page.the_work.1": "I have seen so many things. Unspeakable things. Innumerable things. I could write three words and turn my mind inside-out and smear my brains across the shadowed walls of my skull to decay into fluff and nothing.",
"hexcasting.page.the_work.2": "I have seen staccato-needle patterns and acid-etched schematics written on the inside of my eyelids. They smolder there-- they dance, they taunt, they $(italic)ache/$. I'm possessed by an intense $(italic)need/$ to draw them, create them. Form them. Liberate them from the gluey shackles of my mortal mind-- present them in their Glory to the world for all to see.$(p)All shall see.$(p)All will see.",
"hexcasting.entry.brainsweeping": "On the Flaying of Minds",
"hexcasting.page.brainsweeping.1": "A secret was revealed to me. I saw it. I cannot forget its horror. The idea skitters across my brain.$(br2)I belived-- oh, foolishly, I $(italic)believed --that _Media is the spare energy left over by thought. But now I $(italic)know/$ what it is: the energy $(italic)of/$ thought.",
"hexcasting.page.brainsweeping.2": "It is produced by thinking sentience and allows sentience to think. It is a knot tying that braids into its own string. The Entity I foolishly anthromorphized as Nature is simply a grand such tangle, or perhaps the set of all tangles, or ... if I think it hurts I have so many synapses and all of them can think pain at once ALL OF THEM CAN SEE$(br2)I am not holding on. My notes. Quickly.",
"hexcasting.page.brainsweeping.3": "The villagers of this world have enough consciousness left to be extracted. Place it into a block, warp it, change it. Intricate patterns caused by different patterns of thought, the abstract neural pathways of their jobs and lives mapped into the cold physic of solid atoms.$(br2)This is what $(l:patterns/great_spells/brainsweep)$(action)Flay Mind/$ does, the extraction. Target the villager entity and the destination block. Ten $(item)Charged Crystals/$ for this perversion of will.",
"hexcasting.page.brainsweeping.4": "And an application. For this flaying, any sort of villager will do, if it has developed enough. Other recipes require more specific types. NO MORE must I descend into the hellish earth for my _media.",
"_comment": "Patterns",
@ -590,5 +605,7 @@
"hexcasting.page.greater_sentinel.2": "The stronger sentinel acts like the normal one I can summon without the use of a Great Spell, if a little more visually interesting. However, the range in which my spells can work is extended to a small region around my greater sentinel, about 16 blocks. In other words, no matter where in the world I am, I can interact with things around my sentinel (the mysterious forces of chunkloading notwithstanding).",
"hexcasting.page.make_battery.1": "Infuse a bottle with _media to form a $(item)Phial./$",
"hexcasting.page.make_battery.2": "Similarly to the spells for $(l:patterns/spells/hexcasting)$(action)Crafting Hexcasting Items/$, I must hold a $(item)Glass Bottle/$ in my other hand, and provide the spell with a dropped stack of $(item)Amethyst/$. See $(l:items/phials)this page/$ for more information."
"hexcasting.page.make_battery.2": "Similarly to the spells for $(l:patterns/spells/hexcasting)$(action)Crafting Hexcasting Items/$, I must hold a $(item)Glass Bottle/$ in my other hand, and provide the spell with a dropped stack of $(item)Amethyst/$. See $(l:items/phials)this page/$ for more information.",
"hexcasting.page.brainsweep_spell.1": "I cannot make heads or tails of this spell... To be honest, I'm not sure I want to know what it does."
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -0,0 +1,26 @@
{
"name": "hexcasting.entry.brainsweeping",
"category": "hexcasting:greatwork",
"icon": "minecraft:wither_skeleton_skull",
"advancement": "hexcasting:enlightenment",
"entry_color": "54398a",
"pages": [
{
"type": "patchouli:text",
"text": "hexcasting.page.brainsweeping.1"
},
{
"type": "patchouli:text",
"text": "hexcasting.page.brainsweeping.2"
},
{
"type": "patchouli:text",
"text": "hexcasting.page.brainsweeping.3"
},
{
"type": "hexcasting:brainsweep",
"recipe": "hexcasting:brainsweep/budding_amethyst",
"text": "hexcasting.page.brainsweeping.4"
}
]
}

View file

@ -1,18 +1,18 @@
{
"name": "hexcasting.entry.the_work",
"category": "hexcasting:greatwork",
"icon": "minecraft:nether_star",
"priority": true,
"advancement": "hexcasting:enlightenment",
"entry_color": "54398a",
"pages": [
{
"type": "patchouli:text",
"text": "hexcasting.page.the_work1"
},
{
"type": "patchouli:text",
"text": "hexcasting.page.the_work2"
}
]
"name": "hexcasting.entry.the_work",
"category": "hexcasting:greatwork",
"icon": "minecraft:nether_star",
"priority": true,
"advancement": "hexcasting:enlightenment",
"entry_color": "54398a",
"pages": [
{
"type": "patchouli:text",
"text": "hexcasting.page.the_work.1"
},
{
"type": "patchouli:text",
"text": "hexcasting.page.the_work.2"
}
]
}

View file

@ -0,0 +1,18 @@
{
"name": "hexcasting.spell.hexcasting:brainsweep",
"category": "hexcasting:patterns/great_spells",
"icon": "minecraft:skeleton_skull",
"sortnum": 7,
"advancement": "hexcasting:root",
"read_by_default": true,
"pages": [
{
"type": "hexcasting:pattern",
"op_id": "hexcasting:brainsweep",
"anchor": "hexcasting:brainsweep",
"input": "entity, vector",
"output": "",
"text": "hexcasting.page.brainsweep_spell.1"
}
]
}

View file

@ -78,5 +78,8 @@
"output": "",
"text": "hexcasting.page.blockworks.9"
}
]
],
"extra_recipe_mappings": {
"hexcasting:conjured": 4
}
}

View file

@ -0,0 +1,56 @@
{
"processor": "at.petrak.hexcasting.interop.patchouli.BrainsweepProcessor",
"components": [
{
"type": "patchouli:image",
"image": "hexcasting:textures/gui/brainsweep.png",
"width": 128,
"height": 128,
"texture_width": 128,
"texture_height": 128
},
{
"type": "patchouli:header",
"text": "#header",
"x": -1,
"y": -1
},
{
"type": "patchouli:entity",
"x": 50,
"y": 44,
"render_size": 50,
"entity": "#entity"
},
{
"type": "patchouli:tooltip",
"x": 36,
"y": 18,
"width": 26,
"height": 49,
"tooltip": [
"#profession",
"#biome",
"#minLevel"
]
},
{
"type": "patchouli:item",
"x": 12,
"y": 35,
"item": "#input"
},
{
"type": "patchouli:item",
"x": 87,
"y": 35,
"item": "#result",
"link_recipe": true
},
{
"type": "patchouli:text",
"text": "#text",
"y": 77
}
]
}

View file

@ -15,9 +15,8 @@
"type": "patchouli:custom",
"class": "at.petrak.hexcasting.interop.patchouli.ManualPatternComponent",
"x": 58,
"y": 50,
"y": 48,
"patterns": "#patterns",
"hex_size": "#hex_size",
"stroke_order": "#stroke_order"
},
{

View file

@ -15,9 +15,8 @@
"type": "patchouli:custom",
"class": "at.petrak.hexcasting.interop.patchouli.ManualPatternComponent",
"x": 58,
"y": 50,
"patterns": "#patterns",
"hex_size": "#hex_size"
"y": 48,
"patterns": "#patterns"
},
{
"type": "patchouli:text",