ENORMOUS update to patchi and some more spell circle things
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "minecraft:block/cube_all",
|
||||
"textures": {
|
||||
"all": "hexcasting:block/impetus/empty"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"parent": "hexcasting:block/empty_impetus"
|
||||
"parent": "hexcasting:block/empty_impetus_dim_north"
|
||||
}
|
|
@ -1,3 +1,3 @@
|
|||
{
|
||||
"parent": "hexcasting:block/impetus_rightclick_dim_south"
|
||||
"parent": "hexcasting:block/impetus_rightclick_dim_north"
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
"parent": "hexcasting:block/redirector_dim_south"
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
},
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
},
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
},
|
|
@ -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
|
||||
}
|
|
@ -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());
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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));
|
|
@ -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());
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -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()))
|
||||
}
|
||||
}
|
|
@ -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))
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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."
|
||||
}
|
||||
|
|
After Width: | Height: | Size: 337 B |
After Width: | Height: | Size: 362 B |
After Width: | Height: | Size: 339 B |
After Width: | Height: | Size: 364 B |
After Width: | Height: | Size: 332 B |
After Width: | Height: | Size: 351 B |
After Width: | Height: | Size: 339 B |
After Width: | Height: | Size: 364 B |
After Width: | Height: | Size: 344 B |
After Width: | Height: | Size: 363 B |
After Width: | Height: | Size: 323 B |
After Width: | Height: | Size: 334 B |
After Width: | Height: | Size: 357 B |
After Width: | Height: | Size: 330 B |
BIN
src/main/resources/assets/hexcasting/textures/gui/brainsweep.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 5.1 KiB |
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -78,5 +78,8 @@
|
|||
"output": "",
|
||||
"text": "hexcasting.page.blockworks.9"
|
||||
}
|
||||
]
|
||||
],
|
||||
"extra_recipe_mappings": {
|
||||
"hexcasting:conjured": 4
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
]
|
||||
}
|
|
@ -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"
|
||||
},
|
||||
{
|
||||
|
|
|
@ -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",
|
||||
|
|