diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 8d2df077..e4d171a6 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -16,6 +16,8 @@ e780d6d9e891082dc6ce83fde1697ce36281a02a assets/bloodmagic/blockstates/fireritua f78ce2be09ab794bf5f5679414eee0dc85cf4fb1 assets/bloodmagic/blockstates/largebloodstonebrick.json 002795212cc7bf2cad2a91f873d85e2204c6367d assets/bloodmagic/blockstates/lightritualstone.json e1a98bd53fca155e4bbb03c1e548341af0f84bd7 assets/bloodmagic/blockstates/masterritualstone.json +95a0c9a84139cf92c2689e53408b51619db126a1 assets/bloodmagic/blockstates/obsidianbrickpath.json +8b0ea137c63cf3a658a03eee58ca4b2c3d996f87 assets/bloodmagic/blockstates/obsidiantilepath.json 372ecd737f7082a4c2c70e46745f893b1179f885 assets/bloodmagic/blockstates/orbcapacityrune.json a2eaa9166258d7179d9e5099200f777bb9edf613 assets/bloodmagic/blockstates/rawdemoncrystal.json 90daa355e528ab8a6582f796951201882f3c56da assets/bloodmagic/blockstates/ritualstone.json @@ -23,9 +25,15 @@ a2eaa9166258d7179d9e5099200f777bb9edf613 assets/bloodmagic/blockstates/rawdemonc b03040d7a168653bf8df3600033b8fde2383db30 assets/bloodmagic/blockstates/selfsacrificerune.json 487ffdc02ab7b65aafcb932e3b5cf6ea0500b21d assets/bloodmagic/blockstates/speedrune.json f1ca47098385a955155cab9c2a97219e02d390a0 assets/bloodmagic/blockstates/steadfastdemoncrystal.json +297bc2425f7b07b1a9dd3f7f6649c44f88dbac29 assets/bloodmagic/blockstates/stonebrickpath.json +e3256db10fc8a8ab540f6ac8d27e0f47861e817a assets/bloodmagic/blockstates/stonetilepath.json 48ed6b25a5d8d8074c38d772fdc27c1753d42c36 assets/bloodmagic/blockstates/vengefuldemoncrystal.json e6d9cf699667aaa47efff37b2b033895dee29c15 assets/bloodmagic/blockstates/waterritualstone.json -69f7dee8ac7105339c604bc9b211386200165a2a assets/bloodmagic/lang/en_us.json +74c889434f46e060e8f185e8ef674312eb2f1192 assets/bloodmagic/blockstates/woodbrickpath.json +42f26f715bddd16c069f9b51e3767b36477c8908 assets/bloodmagic/blockstates/woodtilepath.json +3c6ce233dae6c1307d9016406c324bbe844b4e1e assets/bloodmagic/blockstates/wornstonebrickpath.json +d59655f12d1724b73b77c373fb6864fcff69db12 assets/bloodmagic/blockstates/wornstonetilepath.json +59b1ed6c18916f66576dd584ca3d1a203aa6fd87 assets/bloodmagic/lang/en_us.json 34445195b9f2459475cde53454bc8e37d32865d7 assets/bloodmagic/models/block/accelerationrune.json bcdbccc49d4509571be6988762ab87126275a4c8 assets/bloodmagic/models/block/airritualstone.json adf6c0b1e25451609486dc8c8cfbd9cf0f8c67f4 assets/bloodmagic/models/block/alchemicalreactionchamber.json @@ -77,12 +85,20 @@ c30064f4aa09c42d23e94d118ae5b148eadb3a6c assets/bloodmagic/models/block/earthrit d6bf1482345199e7d056a60865024ea5d480b986 assets/bloodmagic/models/block/largebloodstonebrick.json 2e1a81c758bfeec2aee807b48239f23241302268 assets/bloodmagic/models/block/lightritualstone.json eab1713a8879decb2ae05258a6bcfa9da78ec67b assets/bloodmagic/models/block/masterritualstone.json +1e354903812e9cf8e2fea26b908430d7e1cf20a9 assets/bloodmagic/models/block/obsidianbrickpath.json +71893b8b185c2b0f64f21b7dc6c4f2850f936206 assets/bloodmagic/models/block/obsidiantilepath.json c3a813b735cd229f8597e41d04465926b2e65fe1 assets/bloodmagic/models/block/orbcapacityrune.json 9b2bf2a44b788cbaecbe63a3e085e8de76672e1b assets/bloodmagic/models/block/ritualstone.json a8a1d06fcc2f8395530c72d2846133fff37d5537 assets/bloodmagic/models/block/sacrificerune.json 791c9f2e27215ff0a45eed7efe385276bfc09aed assets/bloodmagic/models/block/selfsacrificerune.json 65fe5e01ed2660e45a5c329ff2389a87e4d791ec assets/bloodmagic/models/block/speedrune.json +c5d2b0e33500a5c51046cd606e0d1272ec0dddd6 assets/bloodmagic/models/block/stonebrickpath.json +359e28e79778961f57c6369b5d1b68218972fccb assets/bloodmagic/models/block/stonetilepath.json 6041f2e47f5437d90a58586e42d18dadc42df439 assets/bloodmagic/models/block/waterritualstone.json +d77cdb168a084aeb962be6ad7b4f41b181837be6 assets/bloodmagic/models/block/woodbrickpath.json +e54a4f2b3cd405c69782662b1b0d57e24f7c2524 assets/bloodmagic/models/block/woodtilepath.json +ee59117289640eaebf7a9d7f629dd584ac3ed50f assets/bloodmagic/models/block/wornstonebrickpath.json +bee51abed529a89ad088b2cb89a4c1d0de541bf1 assets/bloodmagic/models/block/wornstonetilepath.json 9462d62d9bc9408359d30728de8651dc104aacf1 assets/bloodmagic/models/item/accelerationrune.json 1aad9b00930b996e3680223cfcb631db2d9cb5ce assets/bloodmagic/models/item/activationcrystalawakened.json 5b8a9b260de9e5eccac525b3fa665ae973f5d23f assets/bloodmagic/models/item/activationcrystalcreative.json @@ -144,6 +160,8 @@ ccbcba6e4a6450bb67f91ba17754d668ba64c0ac assets/bloodmagic/models/item/ironfragm 0a3566d3c86403f24c22977dd32ffaec727a9ad3 assets/bloodmagic/models/item/masterbloodorb.json 9e377ab2c131993f96ab6fb544bda4dbba0ab87e assets/bloodmagic/models/item/masterritualstone.json 7596826c5b40c2809eb0a42eb5f5f2089290e3e5 assets/bloodmagic/models/item/miningsigil.json +eaa0548775c3d5839b46d333af33f815dc6dd0fe assets/bloodmagic/models/item/obsidianbrickpath.json +cf066d15baae650a383240a91240abd335bbb0e3 assets/bloodmagic/models/item/obsidiantilepath.json ff9b802098659824626dc90dbb5a0d8960234228 assets/bloodmagic/models/item/orbcapacityrune.json aa3947434e24f4a4c4ae43428de3f2dd2ceb31a6 assets/bloodmagic/models/item/plantoil.json f267edf1b08e69d377290a549bd5ec4a12661d9e assets/bloodmagic/models/item/primitive_crystalline_resonator.json @@ -156,6 +174,7 @@ c0a7633527bdd25fc85e78fc4838733063726d88 assets/bloodmagic/models/item/reagentfa 4ff6b8f6943d96a0f292ff4e0b0973edff550229 assets/bloodmagic/models/item/reagentgrowth.json c82717c2706ec2ef1518f95c6aefdff9bdae09b8 assets/bloodmagic/models/item/reagentlava.json baafdb5915c5fbc99b84a54670ed64a6f26cb0fe assets/bloodmagic/models/item/reagentmagnetism.json +2023ecdc208cfca92053b5cc3bbb98e21f5e3e19 assets/bloodmagic/models/item/reagentsight.json 95b2925e96a7df71d72568e0ed7b03290293cbe7 assets/bloodmagic/models/item/reagentvoid.json fd1447d943ddc4540a51a72dcbb245d77d45da71 assets/bloodmagic/models/item/reagentwater.json 50bf796adbed412488df48ed9250fc9b0ecd851f assets/bloodmagic/models/item/reinforcedslate.json @@ -164,9 +183,10 @@ fd1447d943ddc4540a51a72dcbb245d77d45da71 assets/bloodmagic/models/item/reagentwa 2722891c9c40b124d85bf9ff8eb885e175f5e6ff assets/bloodmagic/models/item/ritualstone.json 094b2d159deb0996c655498cf89a20e1c06a4ab7 assets/bloodmagic/models/item/ritualtinkerer.json db73abb3bcb1731b6fc389e3577910b6aab87b10 assets/bloodmagic/models/item/sacrificerune.json -9403d6195d4d38d5876c2a42f4edfb9bdcd05210 assets/bloodmagic/models/item/sacrificialdagger.json +616afe16c430ce4732498f0b2d19509d3a545bcc assets/bloodmagic/models/item/sacrificialdagger.json b23b701e93011247714ebdaffd6d52e918ba3d8a assets/bloodmagic/models/item/saltpeter.json b8582a5cd6ca35279e9b35931f1c5ca089b094b8 assets/bloodmagic/models/item/sanguinereverter.json +b9fd6c60eba0186ba7ac156c4d126fcf74c21b84 assets/bloodmagic/models/item/seersigil.json cc71421e98ee7ee047a4cfbb6cb69529c2b02d4e assets/bloodmagic/models/item/selfsacrificerune.json ea5747638d0b5dcc03f008b202cc60a11e0827bb assets/bloodmagic/models/item/sigilofmagnetism.json db0f63198089161b8d4ecfb1ec8a45f7dc5ba83d assets/bloodmagic/models/item/soulaxe.json @@ -181,6 +201,8 @@ fe2b201007c974229509f6900c6eb8b03d158b0a assets/bloodmagic/models/item/soulsword 52d21027ac6fed000e77b5e8ad9102319b25cb33 assets/bloodmagic/models/item/speedrune.json 6e2b7581e06ee42915cc98ac10a6cb8e45512c70 assets/bloodmagic/models/item/steadfastcrystal.json 6968a3d0c3bbeac8ea4cb2c050e28506e8938851 assets/bloodmagic/models/item/steadfastdemoncrystal.json +29009ca92dc30e1ec4ae1d454cd3f8726d8edc3c assets/bloodmagic/models/item/stonebrickpath.json +2dc28b0e2b7ae7bb0bcf8c8e74b9ba7c800446ff assets/bloodmagic/models/item/stonetilepath.json 26cb0aae63ea4f27efd5337c90c580ddd7481b99 assets/bloodmagic/models/item/sulfur.json e8fe01c5cddc268538681889f3161472a8f1c8ad assets/bloodmagic/models/item/variants/growthsigil_activated.json 20c802279de4df496057795c2e891fa54a21376f assets/bloodmagic/models/item/variants/growthsigil_deactivated.json @@ -188,6 +210,8 @@ e8fe01c5cddc268538681889f3161472a8f1c8ad assets/bloodmagic/models/item/variants/ 11f5516cea8ac65bbb0f5958d6492170482ae8d8 assets/bloodmagic/models/item/variants/icesigil_deactivated.json be3772fd711ccf4a2adfad122a8b39e8a36e874a assets/bloodmagic/models/item/variants/miningsigil_activated.json 7dec45f3167426d975564692a80196cdb3f4bdb4 assets/bloodmagic/models/item/variants/miningsigil_deactivated.json +9403d6195d4d38d5876c2a42f4edfb9bdcd05210 assets/bloodmagic/models/item/variants/sacrificialdagger.json +89ea1f760bac680b1baa98536d6bc407e347676e assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json 79c61e61656a934397c92626809c1869b0617fc3 assets/bloodmagic/models/item/variants/sigilofmagnetism_activated.json 129ace1f4a25f22bd09215603248a25adcf234e0 assets/bloodmagic/models/item/variants/sigilofmagnetism_deactivated.json 81e1cb0664f53f30ad195fc4330786b71db9e20c assets/bloodmagic/models/item/variants/soulaxe.json @@ -243,6 +267,10 @@ a31019db55828cb937a071ac2f74b125a2d0c955 assets/bloodmagic/models/item/waterritu 7426fed5f833ce3d08602f727f1467dd3e107991 assets/bloodmagic/models/item/watersigil.json f72efc172699d43405019add97f455bd6b7f452b assets/bloodmagic/models/item/weakbloodorb.json 1efacee8dc0c3114567509ad247800cff59cb455 assets/bloodmagic/models/item/weakbloodshard.json +c0907e611e09ccc924452070519006add21f3d12 assets/bloodmagic/models/item/woodbrickpath.json +1de444baa270a146dcd33c784b08f75a3d745421 assets/bloodmagic/models/item/woodtilepath.json +c8ea88c439c91d0eeee3e6204a3c50f8cfd36758 assets/bloodmagic/models/item/wornstonebrickpath.json +2d9dab8ebc036473d82eb044eb7a7bba0d0937a4 assets/bloodmagic/models/item/wornstonetilepath.json 04faf23bcb783a306c3b7a8a375ac2bf87c1072b data/bloodmagic/advancements/recipes/bloodmagictab/alchemy_table.json e6a3ac3998653b10ee09780be9099a9d0c5b3917 data/bloodmagic/advancements/recipes/bloodmagictab/arc.json 828c0f89e747d48d37c6a86030a8ec59ca5c29cb data/bloodmagic/advancements/recipes/bloodmagictab/blood_altar.json @@ -257,8 +285,15 @@ e897d6f91e2a0bd12b0da0a50e5c897294989e7c data/bloodmagic/advancements/recipes/bl 263f7c251d2f163db5bd229f2ab8a222f23ae03a data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_self_sacrifice.json 7ca400d1141ff4be1b529cd060950b42cf3b9bfb data/bloodmagic/advancements/recipes/bloodmagictab/blood_rune_speed.json 764e54fdaa24f87cceb815990bbbd2e2cd87f205 data/bloodmagic/advancements/recipes/bloodmagictab/bloodstonebrick.json +a6f012d0584d36d9b7dd0ec4f9e4cbd2a3ff1146 data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json 4c24af93a64071aadc0308b27bcbc44572e5ccfc data/bloodmagic/advancements/recipes/bloodmagictab/largebloodstonebrick.json 344567e6f5671131addcfebbd92d18e5cbd66ef5 data/bloodmagic/advancements/recipes/bloodmagictab/lava_crystal.json +d8ca7255f72a2ab6915552cdeb682ecc6efde03a data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json +1b85f9d2b823aef941158276b6f46bd8279cd693 data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json +f17f721149daf9246788be3235e5a6472155215a data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json +147ba38e68ca50e503ecf1ea96e85ce62c2dd86d data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json +ea0b32b5595661f0d09f68a8a596577cc62ba0b1 data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json +0dc717f46c2c6f36b58114df2bf5c82aadb104d2 data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json 091fbd276c5ad173716e9e7474fa278e742a662f data/bloodmagic/advancements/recipes/bloodmagictab/primitive_furnace_cell.json 7cf09fef1a5bfc1401ecc34857bdf78c7282c12a data/bloodmagic/advancements/recipes/bloodmagictab/primitive_hydration_cell.json 01e90bb9c59d44a52777ecc0cf28754295fda675 data/bloodmagic/advancements/recipes/bloodmagictab/ritual_diviner_0.json @@ -290,9 +325,12 @@ a9fcfc656fab957328c10ee1d9d33807e697b7f7 data/bloodmagic/loot_tables/blocks/disl 26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/duskritualstone.json 26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/earthritualstone.json 26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/fireritualstone.json +59dd54a876b7ccd0b6c90f409753c2af2d687f03 data/bloodmagic/loot_tables/blocks/incensealtar.json 462a82b07e7fe3e479a2c072c73507686c339346 data/bloodmagic/loot_tables/blocks/largebloodstonebrick.json 26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/lightritualstone.json 72610188b4538d98ffcd015c2813d63d19889d5f data/bloodmagic/loot_tables/blocks/masterritualstone.json +3892d33bbef90db50034b1358d4a9ee8b731bc8d data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json +3576b2f9d92ab5bdc456cb904905fb5c969e55f3 data/bloodmagic/loot_tables/blocks/obsidiantilepath.json 95442c1bb740fab2eb8ee051f7184813f6023afa data/bloodmagic/loot_tables/blocks/orbcapacityrune.json 6c59e846922061c0f2249b0c73c3be89ec73ea31 data/bloodmagic/loot_tables/blocks/rawdemoncrystal.json 26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/ritualstone.json @@ -301,8 +339,14 @@ e0239eff7762a414a4e4faa0158d844dffb8c1f6 data/bloodmagic/loot_tables/blocks/sacr f748a5ba8838b50de0502f132fe2a65f4726dae6 data/bloodmagic/loot_tables/blocks/soulforge.json 015e07226fd90935f7ec663f4bcf3873a57a82d1 data/bloodmagic/loot_tables/blocks/speedrune.json 128ec3ee93e927d457beeb8161e80706e9239760 data/bloodmagic/loot_tables/blocks/steadfastdemoncrystal.json +8849e41b699c2eb7c3712a8e862bd9dd309a5c31 data/bloodmagic/loot_tables/blocks/stonebrickpath.json +6149fd464bafaabf35ca431202680c84cf5441b1 data/bloodmagic/loot_tables/blocks/stonetilepath.json 33a22d9b198c93ed07ac69b7a594bb08db64b239 data/bloodmagic/loot_tables/blocks/vengefuldemoncrystal.json 26e3f34021426def32602e5ae7755e4672878320 data/bloodmagic/loot_tables/blocks/waterritualstone.json +04c5bc02383ddff04588af3a048ee3973e69666f data/bloodmagic/loot_tables/blocks/woodbrickpath.json +2c471cedf5e3e39610821766609646698d2b47e3 data/bloodmagic/loot_tables/blocks/woodtilepath.json +9ab0aac56f75e7811f9641a6a20ff8d9dd78876a data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json +4a7395079f874ae08af94f64a8a00211a56e906a data/bloodmagic/loot_tables/blocks/wornstonetilepath.json 2df19ff659705a5408ce0819a947764673404388 data/bloodmagic/recipes/alchemy_table.json a343604b5a75e1b3810df97d024813fb041cffb6 data/bloodmagic/recipes/alchemytable/basic_cutting_fluid.json f86432e8fef0d6e140e27f575063704b7e843d75 data/bloodmagic/recipes/alchemytable/bread.json @@ -334,7 +378,7 @@ d79a96eb3eed597f1c18a8983764a6362a24748c data/bloodmagic/recipes/altar/dusk_tool 30d84c946ad9235f6e59f1046edbe8d44acc799e data/bloodmagic/recipes/altar/reinforcedslate.json 584d01dff4d64bb88bd3783751a29723700f1728 data/bloodmagic/recipes/altar/slate.json 926d4a0e165c87a15a609744d832d2f5f04a40d0 data/bloodmagic/recipes/altar/water_tool.json -7551501cf361667ec7454c307b9d2368536fbed6 data/bloodmagic/recipes/altar/weakbloodorb.json +dd59da50b674ec8f680e01a91261bf34091075cf data/bloodmagic/recipes/altar/weakbloodorb.json 5807b2515f4a2dc9855327940e6055f6947f0749 data/bloodmagic/recipes/arc.json f35bb47d609201f6568b598307ae9d157792fe3e data/bloodmagic/recipes/arc/clay_from_sand.json 6b8ba1822bac8a1af426a14f87d613dc89e3fca0 data/bloodmagic/recipes/arc/clay_from_terracotta.json @@ -363,6 +407,7 @@ d1ac23080f72f21adb5908befefe965ffb4efd4f data/bloodmagic/recipes/array/bloodligh f191a3c9982b827b0b2ba93164a81fc4f8cb0959 data/bloodmagic/recipes/array/growthsigil.json 78c880321f0bfad14239d4b9d2edae170a7fa86e data/bloodmagic/recipes/array/lavasigil.json 8b1007de1b7fca5d27b54d7c9839cde9e47ab1c0 data/bloodmagic/recipes/array/magnetismsigil.json +6fd91801759c6a7a018b9d18601fc3db4d3ee3b4 data/bloodmagic/recipes/array/seersigil.json cabe693e7c714203ad708a1068f302b3ee3120b0 data/bloodmagic/recipes/array/voidsigil.json 5e68d933fff631142a8dd819aee235d343d43cff data/bloodmagic/recipes/array/watersigil.json de8dbcf4d69bd3b47693c4631578a9b5c0e3f50c data/bloodmagic/recipes/blood_altar.json @@ -377,8 +422,15 @@ b63d77c3762f86d4a91f62e192c3e9b26e3b52ca data/bloodmagic/recipes/blood_rune_sacr 7c4e247c1df6ef594bbb2fc2196afb102f45982b data/bloodmagic/recipes/blood_rune_self_sacrifice.json e2bcf2a6f951fbcef45554ec90ba28d14e261d18 data/bloodmagic/recipes/blood_rune_speed.json eeb5e64b8bc90adc2554dde88b8792b92ad7c8cc data/bloodmagic/recipes/bloodstonebrick.json +9a5749465020b32b0147b3367784ce31a0d3b54b data/bloodmagic/recipes/incense_altar.json 63bca28ba5eebb9c488c819bcb117595eadb877d data/bloodmagic/recipes/largebloodstonebrick.json 9dedad36e9d2ab6688e069c2e6df3851c395b583 data/bloodmagic/recipes/lava_crystal.json +50d84717ac673875e4b52522b583f564a8a75e8e data/bloodmagic/recipes/path/path_stone.json +2756ff3f29e1231795671c94fdaf9e5abc65bbee data/bloodmagic/recipes/path/path_stonetile.json +dcb702aeb768bc0ff5d1f05c5ac95066c4082193 data/bloodmagic/recipes/path/path_wood.json +7491b9f62c29d2fde6ff1dbff09f16f458b9afe8 data/bloodmagic/recipes/path/path_woodtile.json +d85f637e3c87ba050c24581b8f4bef4176e1ba14 data/bloodmagic/recipes/path/path_wornstone.json +2ee3e7f073df764289939b8df814cc8f056eced0 data/bloodmagic/recipes/path/path_wornstonetile.json 0b1a11f0e1b6bc317e2dbf04560a81581623f41e data/bloodmagic/recipes/primitive_furnace_cell.json 7e1a70935e9b5ba6b345af6a7077287896ec6cfe data/bloodmagic/recipes/primitive_hydration_cell.json bfd7925ad30534463d7daf0f7dce03cf1502cbcf data/bloodmagic/recipes/ritual_diviner_0.json @@ -407,6 +459,7 @@ cba99433d18bd61a0a7c2f5ef9f97cad91028f16 data/bloodmagic/recipes/soulforge/reage ae3a6a760e9f793d5a62e2f0f6c45219b0017816 data/bloodmagic/recipes/soulforge/reagent_growth.json 1c391181ea77f5ed01f7226e0782b3b45162ab3c data/bloodmagic/recipes/soulforge/reagent_lava.json e517023dc3e32929344ff5415397fc833bfbc29a data/bloodmagic/recipes/soulforge/reagent_magnetism.json +c65a8b31432ec36e9de9de1447e357387de2195c data/bloodmagic/recipes/soulforge/reagent_sight.json c0e75e0e12290d191245c5b0b5b13bc739d2ff44 data/bloodmagic/recipes/soulforge/reagent_void.json a222d09abf1ea61feb684f2ac23d011c2034f526 data/bloodmagic/recipes/soulforge/reagent_water.json 4a4340f334c51beaacb77fd201298ad94b71e79c data/bloodmagic/recipes/soulforge/sanguine_reverter.json diff --git a/src/generated/resources/assets/bloodmagic/blockstates/obsidianbrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/obsidianbrickpath.json new file mode 100644 index 00000000..38e7c85f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/obsidianbrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/obsidianbrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/obsidiantilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/obsidiantilepath.json new file mode 100644 index 00000000..185a1d06 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/obsidiantilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/obsidiantilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/stonebrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/stonebrickpath.json new file mode 100644 index 00000000..dd693c22 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/stonebrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/stonebrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/stonetilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/stonetilepath.json new file mode 100644 index 00000000..e3f65a05 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/stonetilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/stonetilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/woodbrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/woodbrickpath.json new file mode 100644 index 00000000..5b1d7ce2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/woodbrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/woodbrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/woodtilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/woodtilepath.json new file mode 100644 index 00000000..6439e3bc --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/woodtilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/woodtilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/wornstonebrickpath.json b/src/generated/resources/assets/bloodmagic/blockstates/wornstonebrickpath.json new file mode 100644 index 00000000..4c9539bf --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/wornstonebrickpath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/wornstonebrickpath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/blockstates/wornstonetilepath.json b/src/generated/resources/assets/bloodmagic/blockstates/wornstonetilepath.json new file mode 100644 index 00000000..db7e680a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/blockstates/wornstonetilepath.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/wornstonetilepath" + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/lang/en_us.json b/src/generated/resources/assets/bloodmagic/lang/en_us.json index 9c870d10..b980958e 100644 --- a/src/generated/resources/assets/bloodmagic/lang/en_us.json +++ b/src/generated/resources/assets/bloodmagic/lang/en_us.json @@ -17,9 +17,12 @@ "block.bloodmagic.duskritualstone": "Dusk Ritual Stone", "block.bloodmagic.earthritualstone": "Earth Ritual Stone", "block.bloodmagic.fireritualstone": "Fire Ritual Stone", + "block.bloodmagic.incensealtar": "Incense Altar", "block.bloodmagic.largebloodstonebrick": "Large Bloodstone Brick", "block.bloodmagic.lightritualstone": "Dawn Ritual Stone", "block.bloodmagic.masterritualstone": "Master Ritual Stone", + "block.bloodmagic.obsidianbrickpath": "Obsidian Path", + "block.bloodmagic.obsidiantilepath": "Tiled Obsidian Path", "block.bloodmagic.orbcapacityrune": "Rune of the Orb", "block.bloodmagic.rawdemoncrystal": "Raw Crystal Cluster", "block.bloodmagic.ritualstone": "Ritual Stone", @@ -28,8 +31,14 @@ "block.bloodmagic.soulforge": "Hellfire Forge", "block.bloodmagic.speedrune": "Speed Rune", "block.bloodmagic.steadfastdemoncrystal": "Steadfast Crystal Cluster", + "block.bloodmagic.stonebrickpath": "Stone Path", + "block.bloodmagic.stonetilepath": "Tiled Stone Path", "block.bloodmagic.vengefuldemoncrystal": "Vengeful Crystal Cluster", "block.bloodmagic.waterritualstone": "Water Ritual Stone", + "block.bloodmagic.woodbrickpath": "Wooden Path", + "block.bloodmagic.woodtilepath": "Tiled Wooden Path", + "block.bloodmagic.wornstonebrickpath": "Worn Stone Path", + "block.bloodmagic.wornstonetilepath": "Tiled Worn Stone Path", "chat.bloodmagic.damageSource": "%s's soul became too weak", "chat.bloodmagic.ritual.activate": "A rush of energy flows through the ritual!", "chat.bloodmagic.ritual.notValid": "You feel that these runes are not configured correctly...", @@ -38,6 +47,7 @@ "gui.bloodmagic.empty": "Empty", "guide.bloodmagic.landing_text": "\"It is my dear hope that by holding this tome in your hands, I may impart the knowledge of the lost art that is Blood Magic\"$(br)$(o)- Magus Arcana$()", "guide.bloodmagic.name": "Sanguine Scientiem", + "hud.bloodmagic.inactive": "Inactive", "item.bloodmagic.activationcrystalawakened": "Awakened Activation Crystal", "item.bloodmagic.activationcrystalcreative": "Creative Activation Crystal", "item.bloodmagic.activationcrystalweak": "Weak Activation Crystal", @@ -92,6 +102,7 @@ "item.bloodmagic.reagentgrowth": "Growth Reagent", "item.bloodmagic.reagentlava": "Lava Reagent", "item.bloodmagic.reagentmagnetism": "Magnetism Reagent", + "item.bloodmagic.reagentsight": "Sight Reagent", "item.bloodmagic.reagentvoid": "Void Reagent", "item.bloodmagic.reagentwater": "Water Reagent", "item.bloodmagic.reinforcedslate": "Reinforced Slate", @@ -101,6 +112,7 @@ "item.bloodmagic.sacrificialdagger": "Sacrificial Knife", "item.bloodmagic.saltpeter": "Saltpeter", "item.bloodmagic.sanguinereverter": "Sanguine Reverter", + "item.bloodmagic.seersigil": "Seer's Sigil", "item.bloodmagic.sigilofmagnetism": "Sigil of Magnetism", "item.bloodmagic.soulaxe": "Sentient Axe", "item.bloodmagic.soulgemcommon": "Common Tartaric Gem", @@ -347,6 +359,16 @@ "tooltip.bloodmagic.sigil.greengrove.desc": "Environmentally friendly", "tooltip.bloodmagic.sigil.lava.desc": "HOT! DO NOT EAT", "tooltip.bloodmagic.sigil.magnetism.desc": "I have a very magnetic personality", + "tooltip.bloodmagic.sigil.seer.currentAltarCapacity": "Current Capacity: %d LP", + "tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate": "Consumption Rate: %d LP", + "tooltip.bloodmagic.sigil.seer.currentAltarProgress": "Current Progress: %d LP/ %s LP", + "tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent": "Current Progress: %s", + "tooltip.bloodmagic.sigil.seer.currentAltarTier": "Current Tier: %d", + "tooltip.bloodmagic.sigil.seer.currentBonus": "Current Bonus: +%d%%", + "tooltip.bloodmagic.sigil.seer.currentCharge": "Current Charge: %d", + "tooltip.bloodmagic.sigil.seer.currentEssence": "Current Essence: %d LP", + "tooltip.bloodmagic.sigil.seer.currentTranquility": "Current Tranquility: %d", + "tooltip.bloodmagic.sigil.seer.desc": "When seeing all is not enough", "tooltip.bloodmagic.sigil.void.desc": "Better than a Swiffer\u00AE!", "tooltip.bloodmagic.sigil.water.desc": "Infinite water, anyone?", "tooltip.bloodmagic.slate.desc": "Infused stone inside of a Blood Altar", diff --git a/src/generated/resources/assets/bloodmagic/models/block/obsidianbrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/obsidianbrickpath.json new file mode 100644 index 00000000..77f2ba8e --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/obsidianbrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/obsidianbrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/obsidiantilepath.json b/src/generated/resources/assets/bloodmagic/models/block/obsidiantilepath.json new file mode 100644 index 00000000..40a85379 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/obsidiantilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/obsidiantilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/stonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/stonebrickpath.json new file mode 100644 index 00000000..59ad054f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/stonebrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/stonebrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/stonetilepath.json b/src/generated/resources/assets/bloodmagic/models/block/stonetilepath.json new file mode 100644 index 00000000..380149f4 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/stonetilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/stonetilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/woodbrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/woodbrickpath.json new file mode 100644 index 00000000..32aa5bb7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/woodbrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/woodbrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/woodtilepath.json b/src/generated/resources/assets/bloodmagic/models/block/woodtilepath.json new file mode 100644 index 00000000..b2a8fbe6 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/woodtilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/woodtilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/wornstonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/block/wornstonebrickpath.json new file mode 100644 index 00000000..b4a3da7b --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/wornstonebrickpath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/wornstonebrickpath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/block/wornstonetilepath.json b/src/generated/resources/assets/bloodmagic/models/block/wornstonetilepath.json new file mode 100644 index 00000000..b1e91317 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/block/wornstonetilepath.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "bloodmagic:block/wornstonetilepath" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/obsidianbrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/obsidianbrickpath.json new file mode 100644 index 00000000..03c76b69 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/obsidianbrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/obsidianbrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/obsidiantilepath.json b/src/generated/resources/assets/bloodmagic/models/item/obsidiantilepath.json new file mode 100644 index 00000000..3db5658a --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/obsidiantilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/obsidiantilepath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/reagentsight.json b/src/generated/resources/assets/bloodmagic/models/item/reagentsight.json new file mode 100644 index 00000000..8389e493 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/reagentsight.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/reagentsight" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/sacrificialdagger.json b/src/generated/resources/assets/bloodmagic/models/item/sacrificialdagger.json index 20e1c9f1..b516e95a 100644 --- a/src/generated/resources/assets/bloodmagic/models/item/sacrificialdagger.json +++ b/src/generated/resources/assets/bloodmagic/models/item/sacrificialdagger.json @@ -2,5 +2,19 @@ "parent": "minecraft:item/handheld", "textures": { "layer0": "bloodmagic:item/sacrificialdagger" - } + }, + "overrides": [ + { + "predicate": { + "bloodmagic:incense": 0.0 + }, + "model": "bloodmagic:item/variants/sacrificialdagger" + }, + { + "predicate": { + "bloodmagic:incense": 1.0 + }, + "model": "bloodmagic:item/variants/sacrificialdagger_ceremonial" + } + ] } \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/seersigil.json b/src/generated/resources/assets/bloodmagic/models/item/seersigil.json new file mode 100644 index 00000000..f79756b2 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/seersigil.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/seersigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/stonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/stonebrickpath.json new file mode 100644 index 00000000..f7f36e89 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/stonebrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/stonebrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/stonetilepath.json b/src/generated/resources/assets/bloodmagic/models/item/stonetilepath.json new file mode 100644 index 00000000..42594e88 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/stonetilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/stonetilepath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger.json b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger.json new file mode 100644 index 00000000..20e1c9f1 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sacrificialdagger" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json new file mode 100644 index 00000000..ba8ea9db --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/variants/sacrificialdagger_ceremonial.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "bloodmagic:item/sacrificialdagger_ceremonial" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/woodbrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/woodbrickpath.json new file mode 100644 index 00000000..d598f8f7 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/woodbrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/woodbrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/woodtilepath.json b/src/generated/resources/assets/bloodmagic/models/item/woodtilepath.json new file mode 100644 index 00000000..fd20da53 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/woodtilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/woodtilepath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/wornstonebrickpath.json b/src/generated/resources/assets/bloodmagic/models/item/wornstonebrickpath.json new file mode 100644 index 00000000..78f2ee16 --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/wornstonebrickpath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/wornstonebrickpath" +} \ No newline at end of file diff --git a/src/generated/resources/assets/bloodmagic/models/item/wornstonetilepath.json b/src/generated/resources/assets/bloodmagic/models/item/wornstonetilepath.json new file mode 100644 index 00000000..7394723f --- /dev/null +++ b/src/generated/resources/assets/bloodmagic/models/item/wornstonetilepath.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/wornstonetilepath" +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json new file mode 100644 index 00000000..cc469b58 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/incense_altar.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:incense_altar" + ] + }, + "criteria": { + "has_weak_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:weakbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:incense_altar" + } + } + }, + "requirements": [ + [ + "has_weak_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json new file mode 100644 index 00000000..c4388608 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_stone" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_stone" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json new file mode 100644 index 00000000..e89a4e06 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_stonetile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_stonetile" + ] + }, + "criteria": { + "has_magician_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:magicianbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_stonetile" + } + } + }, + "requirements": [ + [ + "has_magician_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json new file mode 100644 index 00000000..dd6dc1ec --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_wood" + ] + }, + "criteria": { + "has_apprentice_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:apprenticebloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_wood" + } + } + }, + "requirements": [ + [ + "has_apprentice_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json new file mode 100644 index 00000000..1e7d7d71 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_woodtile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_woodtile" + ] + }, + "criteria": { + "has_apprentice_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:apprenticebloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_woodtile" + } + } + }, + "requirements": [ + [ + "has_apprentice_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json new file mode 100644 index 00000000..cde914c3 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstone.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_wornstone" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_wornstone" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json new file mode 100644 index 00000000..658edfb7 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/advancements/recipes/bloodmagictab/path/path_wornstonetile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "bloodmagic:path/path_wornstonetile" + ] + }, + "criteria": { + "has_master_orb": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "item": "bloodmagic:masterbloodorb" + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "bloodmagic:path/path_wornstonetile" + } + } + }, + "requirements": [ + [ + "has_master_orb", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/incensealtar.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/incensealtar.json new file mode 100644 index 00000000..b588d41d --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/incensealtar.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:incensealtar" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json new file mode 100644 index 00000000..6eb3eea4 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidianbrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:obsidianbrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidiantilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidiantilepath.json new file mode 100644 index 00000000..ee7bbbf2 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/obsidiantilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:obsidiantilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonebrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonebrickpath.json new file mode 100644 index 00000000..3a9b4289 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonebrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:stonebrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonetilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonetilepath.json new file mode 100644 index 00000000..7796876b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/stonetilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:stonetilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodbrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodbrickpath.json new file mode 100644 index 00000000..d4116d40 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodbrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:woodbrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodtilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodtilepath.json new file mode 100644 index 00000000..fd8a04c6 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/woodtilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:woodtilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json new file mode 100644 index 00000000..d66e2617 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonebrickpath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:wornstonebrickpath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonetilepath.json b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonetilepath.json new file mode 100644 index 00000000..4de9ffb8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/loot_tables/blocks/wornstonetilepath.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "bloodmagic:wornstonetilepath" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/altar/weakbloodorb.json b/src/generated/resources/data/bloodmagic/recipes/altar/weakbloodorb.json index e489f7e0..16769109 100644 --- a/src/generated/resources/data/bloodmagic/recipes/altar/weakbloodorb.json +++ b/src/generated/resources/data/bloodmagic/recipes/altar/weakbloodorb.json @@ -8,6 +8,6 @@ }, "upgradeLevel": 0, "altarSyphon": 2000, - "consumptionRate": 2, + "consumptionRate": 5, "drainRate": 1 } \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/array/seersigil.json b/src/generated/resources/data/bloodmagic/recipes/array/seersigil.json new file mode 100644 index 00000000..3441514b --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/array/seersigil.json @@ -0,0 +1,13 @@ +{ + "type": "bloodmagic:array", + "texture": "bloodmagic:textures/models/alchemyarrays/sightsigil.png", + "baseinput": { + "item": "bloodmagic:reagentsight" + }, + "addedinput": { + "item": "bloodmagic:reinforcedslate" + }, + "output": { + "item": "bloodmagic:seersigil" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/incense_altar.json b/src/generated/resources/data/bloodmagic/recipes/incense_altar.json new file mode 100644 index 00000000..95826002 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/incense_altar.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "s s", + "shs", + "coc" + ], + "key": { + "s": { + "tag": "forge:stone" + }, + "c": { + "tag": "forge:cobblestone" + }, + "h": { + "item": "minecraft:charcoal" + }, + "o": { + "type": "bloodmagic:bloodorb", + "orb_tier": 1 + } + }, + "result": { + "item": "bloodmagic:incensealtar" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_stone.json b/src/generated/resources/data/bloodmagic/recipes/path/path_stone.json new file mode 100644 index 00000000..3bcdf018 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_stone.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "forge:stone" + }, + { + "tag": "forge:stone" + }, + { + "tag": "forge:stone" + }, + { + "tag": "forge:stone" + }, + { + "type": "bloodmagic:bloodorb", + "orb_tier": 3 + } + ], + "result": { + "item": "bloodmagic:stonebrickpath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_stonetile.json b/src/generated/resources/data/bloodmagic/recipes/path/path_stonetile.json new file mode 100644 index 00000000..64521902 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_stonetile.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + } + ], + "result": { + "item": "bloodmagic:stonetilepath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_wood.json b/src/generated/resources/data/bloodmagic/recipes/path/path_wood.json new file mode 100644 index 00000000..d04415bf --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_wood.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "tag": "minecraft:planks" + }, + { + "tag": "minecraft:planks" + }, + { + "tag": "minecraft:planks" + }, + { + "tag": "minecraft:planks" + }, + { + "type": "bloodmagic:bloodorb", + "orb_tier": 2 + } + ], + "result": { + "item": "bloodmagic:woodbrickpath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_woodtile.json b/src/generated/resources/data/bloodmagic/recipes/path/path_woodtile.json new file mode 100644 index 00000000..2d0a2641 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_woodtile.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:woodbrickpath" + }, + { + "item": "bloodmagic:woodbrickpath" + }, + { + "item": "bloodmagic:woodbrickpath" + }, + { + "item": "bloodmagic:woodbrickpath" + } + ], + "result": { + "item": "bloodmagic:woodtilepath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_wornstone.json b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstone.json new file mode 100644 index 00000000..6a43f7e0 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstone.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "item": "bloodmagic:stonebrickpath" + }, + { + "type": "bloodmagic:bloodorb", + "orb_tier": 4 + } + ], + "result": { + "item": "bloodmagic:wornstonebrickpath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/path/path_wornstonetile.json b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstonetile.json new file mode 100644 index 00000000..1efd2976 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/path/path_wornstonetile.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "bloodmagic:wornstonebrickpath" + }, + { + "item": "bloodmagic:wornstonebrickpath" + }, + { + "item": "bloodmagic:wornstonebrickpath" + }, + { + "item": "bloodmagic:wornstonebrickpath" + } + ], + "result": { + "item": "bloodmagic:wornstonetilepath", + "count": 4 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/bloodmagic/recipes/soulforge/reagent_sight.json b/src/generated/resources/data/bloodmagic/recipes/soulforge/reagent_sight.json new file mode 100644 index 00000000..5d6931c8 --- /dev/null +++ b/src/generated/resources/data/bloodmagic/recipes/soulforge/reagent_sight.json @@ -0,0 +1,20 @@ +{ + "type": "bloodmagic:soulforge", + "input0": { + "tag": "forge:dusts/glowstone" + }, + "input1": { + "tag": "forge:glass" + }, + "input2": { + "tag": "forge:glass" + }, + "input3": { + "item": "bloodmagic:divinationsigil" + }, + "output": { + "item": "bloodmagic:reagentsight" + }, + "minimumDrain": 64.0, + "drain": 0.0 +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/BloodMagic.java b/src/main/java/wayoftime/bloodmagic/BloodMagic.java index c25a03d4..b5cf2d93 100644 --- a/src/main/java/wayoftime/bloodmagic/BloodMagic.java +++ b/src/main/java/wayoftime/bloodmagic/BloodMagic.java @@ -51,6 +51,7 @@ import wayoftime.bloodmagic.core.recipe.IngredientBloodOrb; import wayoftime.bloodmagic.core.registry.OrbRegistry; import wayoftime.bloodmagic.network.BloodMagicPacketHandler; import wayoftime.bloodmagic.potion.BloodMagicPotions; +import wayoftime.bloodmagic.registry.ModTranquilityHandlers; import wayoftime.bloodmagic.ritual.RitualManager; import wayoftime.bloodmagic.tile.TileAlchemicalReactionChamber; import wayoftime.bloodmagic.tile.TileAlchemyArray; @@ -59,6 +60,7 @@ import wayoftime.bloodmagic.tile.TileAltar; import wayoftime.bloodmagic.tile.TileDemonCrucible; import wayoftime.bloodmagic.tile.TileDemonCrystal; import wayoftime.bloodmagic.tile.TileDemonCrystallizer; +import wayoftime.bloodmagic.tile.TileIncenseAltar; import wayoftime.bloodmagic.tile.TileMasterRitualStone; import wayoftime.bloodmagic.tile.TileSoulForge; import wayoftime.bloodmagic.util.handler.event.GenericHandler; @@ -122,6 +124,8 @@ public class BloodMagic ModLoadingContext context = ModLoadingContext.get(); context.registerConfig(ModConfig.Type.CLIENT, ConfigManager.CLIENT_SPEC); + + ModTranquilityHandlers.init(); } private void registerRecipes(RegistryEvent.Register> event) @@ -166,6 +170,7 @@ public class BloodMagic event.getRegistry().register(TileEntityType.Builder.create(TileDemonCrystal::new, BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(), BloodMagicBlocks.CORROSIVE_CRYSTAL_BLOCK.get(), BloodMagicBlocks.DESTRUCTIVE_CRYSTAL_BLOCK.get(), BloodMagicBlocks.VENGEFUL_CRYSTAL_BLOCK.get(), BloodMagicBlocks.STEADFAST_CRYSTAL_BLOCK.get()).build(null).setRegistryName("demoncrystal")); event.getRegistry().register(TileEntityType.Builder.create(TileDemonCrucible::new, BloodMagicBlocks.DEMON_CRUCIBLE.get()).build(null).setRegistryName("demoncrucible")); event.getRegistry().register(TileEntityType.Builder.create(TileDemonCrystallizer::new, BloodMagicBlocks.DEMON_CRYSTALLIZER.get()).build(null).setRegistryName("demoncrystallizer")); + event.getRegistry().register(TileEntityType.Builder.create(TileIncenseAltar::new, BloodMagicBlocks.INCENSE_ALTAR.get()).build(null).setRegistryName("incensealtar")); } @SubscribeEvent diff --git a/src/main/java/wayoftime/bloodmagic/altar/BloodAltar.java b/src/main/java/wayoftime/bloodmagic/altar/BloodAltar.java index 4ad89bf5..4e4d25ec 100644 --- a/src/main/java/wayoftime/bloodmagic/altar/BloodAltar.java +++ b/src/main/java/wayoftime/bloodmagic/altar/BloodAltar.java @@ -276,11 +276,11 @@ public class BloodAltar// implements IFluidHandler if (internalCounter % this.getChargingFrequency() == 0 && !this.isActive) { -// int chargeInputted = Math.min(chargingRate, this.fluid.getAmount()); -// chargeInputted = Math.min(chargeInputted, maxCharge - totalCharge); -// totalCharge += chargeInputted; -// this.fluid.setAmount(this.fluid.getAmount() - chargeInputted); -// tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); + int chargeInputted = Math.min(chargingRate, this.fluid.getAmount()); + chargeInputted = Math.min(chargeInputted, maxCharge - totalCharge); + totalCharge += chargeInputted; + this.fluid.setAmount(this.fluid.getAmount() - chargeInputted); + tileAltar.getWorld().notifyBlockUpdate(tileAltar.getPos(), tileAltar.getWorld().getBlockState(tileAltar.getPos()), tileAltar.getWorld().getBlockState(tileAltar.getPos()), 3); } if (internalCounter % 100 == 0 && (this.isActive || this.cooldownAfterCrafting <= 0)) diff --git a/src/main/java/wayoftime/bloodmagic/api/IBloodMagicAPI.java b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicAPI.java index fb347b0e..d9ea2988 100644 --- a/src/main/java/wayoftime/bloodmagic/api/IBloodMagicAPI.java +++ b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicAPI.java @@ -32,14 +32,14 @@ public interface IBloodMagicAPI */ @Nonnull IBloodMagicRecipeRegistrar getRecipeRegistrar(); -// -// /** -// * Retrieves the instance of the value manager. -// * -// * @return the active {@link IBloodMagicValueManager} instance -// */ -// @Nonnull -// IBloodMagicValueManager getValueManager(); + + /** + * Retrieves the instance of the value manager. + * + * @return the active {@link IBloodMagicValueManager} instance + */ + @Nonnull + IBloodMagicValueManager getValueManager(); /** * Registers an {@link IBlockState} as a given component for the Blood Altar. diff --git a/src/main/java/wayoftime/bloodmagic/api/IBloodMagicValueManager.java b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicValueManager.java new file mode 100644 index 00000000..0658e253 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/IBloodMagicValueManager.java @@ -0,0 +1,45 @@ +package wayoftime.bloodmagic.api; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; + +import net.minecraft.block.BlockState; +import net.minecraft.util.ResourceLocation; + +/** + * Allows value modification for various features of Blood Magic such as + * Sacrificial values. + */ +public interface IBloodMagicValueManager +{ + + /** + * Sets the amount of LP received per health point from sacrificing the given + * entity. By default, this is 25. Setting the value to 0 effectively disables + * sacrificing. + * + * @param entityId The registry name of the entity. + * @param value The amount of LP per health point to receive upon sacrifice. + */ + void setSacrificialValue(@Nonnull ResourceLocation entityId, @Nonnegative int value); + + /** + * Sets the Tranquility value of a given {@link IBlockState}. + *

+ * Valid tranquility types: + *

+ * + * @param state The {@link IBlockState} to set the value of. + * @param tranquilityType The type of Tranquility this block should provide. + * @param value The amount of tranquility this block should provide. + */ + void setTranquility(@Nonnull BlockState state, @Nonnull String tranquilityType, double value); +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java index b6119974..c792ad1f 100644 --- a/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java +++ b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicAPI.java @@ -19,14 +19,14 @@ public class BloodMagicAPI implements IBloodMagicAPI // private final BloodMagicBlacklist blacklist; private final BloodMagicRecipeRegistrar recipeRegistrar; -// private final BloodMagicValueManager valueManager; + private final BloodMagicValueManager valueManager; private final Multimap altarComponents; public BloodMagicAPI() { // this.blacklist = new BloodMagicBlacklist(); this.recipeRegistrar = new BloodMagicRecipeRegistrar(); -// this.valueManager = new BloodMagicValueManager(); + this.valueManager = new BloodMagicValueManager(); this.altarComponents = ArrayListMultimap.create(); } @@ -43,13 +43,14 @@ public class BloodMagicAPI implements IBloodMagicAPI { return recipeRegistrar; } + // -// @Nonnull -// @Override -// public BloodMagicValueManager getValueManager() -// { -// return valueManager; -// } + @Nonnull + @Override + public BloodMagicValueManager getValueManager() + { + return valueManager; + } @Override public void registerAltarComponent(@Nonnull BlockState state, @Nonnull String componentType) diff --git a/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java index 3565243a..36386d50 100644 --- a/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java +++ b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicCorePlugin.java @@ -4,6 +4,8 @@ import net.minecraft.block.Blocks; import wayoftime.bloodmagic.altar.ComponentType; import wayoftime.bloodmagic.api.IBloodMagicAPI; import wayoftime.bloodmagic.common.block.BloodMagicBlocks; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.incense.TranquilityStack; public class BloodMagicCorePlugin { @@ -11,6 +13,21 @@ public class BloodMagicCorePlugin public void register(IBloodMagicAPI apiInterface) { + BloodMagicAPI api = (BloodMagicAPI) apiInterface; + api.getValueManager().setTranquility(Blocks.LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); +// api.getValueManager().setTranquility(Blocks.FLOWING_LAVA, new TranquilityStack(EnumTranquilityType.LAVA, 1.2D)); + api.getValueManager().setTranquility(Blocks.WATER, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); +// api.getValueManager().setTranquility(Blocks.water, new TranquilityStack(EnumTranquilityType.WATER, 1.0D)); + api.getValueManager().setTranquility(BloodMagicBlocks.LIFE_ESSENCE_BLOCK.get(), new TranquilityStack(EnumTranquilityType.WATER, 1.5D)); + api.getValueManager().setTranquility(Blocks.NETHERRACK, new TranquilityStack(EnumTranquilityType.FIRE, 0.5D)); + api.getValueManager().setTranquility(Blocks.DIRT, new TranquilityStack(EnumTranquilityType.EARTHEN, 0.25D)); + api.getValueManager().setTranquility(Blocks.FARMLAND, new TranquilityStack(EnumTranquilityType.EARTHEN, 1.0D)); + api.getValueManager().setTranquility(Blocks.POTATOES, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.CARROTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.WHEAT, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.NETHER_WART, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + api.getValueManager().setTranquility(Blocks.BEETROOTS, new TranquilityStack(EnumTranquilityType.CROP, 1.0D)); + apiInterface.registerAltarComponent(Blocks.GLOWSTONE.getDefaultState(), ComponentType.GLOWSTONE.name()); apiInterface.registerAltarComponent(Blocks.SEA_LANTERN.getDefaultState(), ComponentType.GLOWSTONE.name()); apiInterface.registerAltarComponent(BloodMagicBlocks.BLOODSTONE.get().getDefaultState(), ComponentType.BLOODSTONE.name()); diff --git a/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicValueManager.java b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicValueManager.java new file mode 100644 index 00000000..41e3f1b4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/api/impl/BloodMagicValueManager.java @@ -0,0 +1,76 @@ +package wayoftime.bloodmagic.api.impl; + +import java.util.Map; + +import javax.annotation.Nonnull; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.ResourceLocation; +import wayoftime.bloodmagic.api.IBloodMagicValueManager; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.incense.TranquilityStack; +import wayoftime.bloodmagic.util.BMLog; + +public class BloodMagicValueManager implements IBloodMagicValueManager +{ + + private final Map sacrificial; + private final Map tranquility; + + public BloodMagicValueManager() + { + this.sacrificial = Maps.newHashMap(); + this.tranquility = Maps.newHashMap(); + } + + @Override + public void setSacrificialValue(@Nonnull ResourceLocation entityId, int value) + { + BMLog.API_VERBOSE.info("Value Manager: Set sacrificial value of {} to {}.", entityId, value); + sacrificial.put(entityId, value); + } + + @Override + public void setTranquility(@Nonnull BlockState state, @Nonnull String tranquilityType, double value) + { + EnumTranquilityType tranquility = null; + for (EnumTranquilityType type : EnumTranquilityType.values()) + { + if (type.name().equalsIgnoreCase(tranquilityType)) + { + tranquility = type; + break; + } + } + + if (tranquility != null) + { + BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityType, value); + this.tranquility.put(state, new TranquilityStack(tranquility, value)); + } else + BMLog.API.warn("Invalid tranquility type: {}.", tranquilityType); + } + + public void setTranquility(Block block, TranquilityStack tranquilityStack) + { + for (BlockState state : block.getStateContainer().getValidStates()) + { + BMLog.API_VERBOSE.info("Value Manager: Set tranquility value of {} to {} @ {}", state, tranquilityStack.type, tranquilityStack.value); + tranquility.put(state, tranquilityStack); + } + } + + public Map getSacrificial() + { + return ImmutableMap.copyOf(sacrificial); + } + + public Map getTranquility() + { + return ImmutableMap.copyOf(tranquility); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/client/ClientEvents.java b/src/main/java/wayoftime/bloodmagic/client/ClientEvents.java index b4b33440..1c26f571 100644 --- a/src/main/java/wayoftime/bloodmagic/client/ClientEvents.java +++ b/src/main/java/wayoftime/bloodmagic/client/ClientEvents.java @@ -28,6 +28,7 @@ import wayoftime.bloodmagic.client.screens.ScreenAlchemyTable; import wayoftime.bloodmagic.client.screens.ScreenSoulForge; import wayoftime.bloodmagic.common.block.BloodMagicBlocks; import wayoftime.bloodmagic.common.item.BloodMagicItems; +import wayoftime.bloodmagic.common.item.ItemSacrificialDagger; import wayoftime.bloodmagic.common.item.sigil.ItemSigilToggleable; import wayoftime.bloodmagic.common.item.soul.ItemSentientSword; import wayoftime.bloodmagic.common.registries.BloodMagicEntityTypes; @@ -79,6 +80,7 @@ public class ClientEvents registerMultiWillTool(BloodMagicItems.LESSER_GEM.get()); registerMultiWillTool(BloodMagicItems.COMMON_GEM.get()); registerMultiWillTool(BloodMagicItems.GREATER_GEM.get()); + registerSacrificialKnife(BloodMagicItems.SACRIFICIAL_DAGGER.get()); ItemModelsProperties.registerProperty(BloodMagicItems.SENTIENT_SWORD.get(), BloodMagic.rl("active"), new IItemPropertyGetter() { @@ -129,4 +131,21 @@ public class ClientEvents } }); } + + public static void registerSacrificialKnife(Item item) + { + ItemModelsProperties.registerProperty(item, BloodMagic.rl("incense"), new IItemPropertyGetter() + { + @Override + public float call(ItemStack stack, ClientWorld world, LivingEntity entity) + { + Item item = stack.getItem(); + if (item instanceof ItemSacrificialDagger) + { + return ((ItemSacrificialDagger) item).canUseForSacrifice(stack) ? 1 : 0; + } + return 0; + } + }); + } } diff --git a/src/main/java/wayoftime/bloodmagic/client/Sprite.java b/src/main/java/wayoftime/bloodmagic/client/Sprite.java new file mode 100644 index 00000000..8b637fe1 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/Sprite.java @@ -0,0 +1,57 @@ +package wayoftime.bloodmagic.client; + +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.AbstractGui; +import net.minecraft.util.ResourceLocation; + +public class Sprite +{ + + private final ResourceLocation textureLocation; + private final int textureX; + private final int textureY; + private final int textureWidth; + private final int textureHeight; + + public Sprite(ResourceLocation textureLocation, int textureX, int textureY, int textureWidth, int textureHeight) + { + this.textureLocation = textureLocation; + this.textureX = textureX; + this.textureY = textureY; + this.textureWidth = textureWidth; + this.textureHeight = textureHeight; + } + + public ResourceLocation getTextureLocation() + { + return textureLocation; + } + + public int getTextureX() + { + return textureX; + } + + public int getTextureY() + { + return textureY; + } + + public int getTextureWidth() + { + return textureWidth; + } + + public int getTextureHeight() + { + return textureHeight; + } + + public void draw(MatrixStack matrixStack, int x, int y) + { + Minecraft.getInstance().getTextureManager().bindTexture(getTextureLocation()); + AbstractGui.blit(matrixStack, x, y, 0, getTextureX(), getTextureY(), getTextureWidth(), getTextureHeight(), 256, 256); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/Elements.java b/src/main/java/wayoftime/bloodmagic/client/hud/Elements.java index e1b771d0..7a4697fd 100644 --- a/src/main/java/wayoftime/bloodmagic/client/hud/Elements.java +++ b/src/main/java/wayoftime/bloodmagic/client/hud/Elements.java @@ -1,15 +1,90 @@ package wayoftime.bloodmagic.client.hud; +import java.util.function.Consumer; +import java.util.function.Function; + +import org.apache.commons.lang3.tuple.Pair; + +import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.vector.Vector2f; import wayoftime.bloodmagic.BloodMagic; import wayoftime.bloodmagic.ConfigManager; +import wayoftime.bloodmagic.client.Sprite; import wayoftime.bloodmagic.client.hud.element.ElementDemonAura; +import wayoftime.bloodmagic.client.hud.element.ElementDivinedInformation; +import wayoftime.bloodmagic.tile.TileAltar; +import wayoftime.bloodmagic.tile.TileIncenseAltar; +import wayoftime.bloodmagic.util.helper.NumeralHelper; public class Elements { public static void registerElements() { ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "demon_will_aura"), new ElementDemonAura(), new Vector2f(ConfigManager.CLIENT.demonWillGaugeX.get().floatValue(), ConfigManager.CLIENT.demonWillGaugeY.get().floatValue())); + + ElementRegistry.registerHandler(BloodMagic.rl("blood_altar"), new ElementDivinedInformation(2, true, TileAltar.class) + { + @Override + public void gatherInformation(Consumer>> information) + { + // Current tier + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), altar -> altar == null + ? "IV" + : NumeralHelper.toRoman(altar.getTier().toInt()))); + // Stored/Capacity + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), altar -> String.format("%d/%d", altar == null + ? 0 + : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()))); + } + }, new Vector2f(0.01F, 0.01F)); + + ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "blood_altar_adv"), new ElementDivinedInformation(5, false, TileAltar.class) + { + @Override + public void gatherInformation(Consumer>> information) + { + // Current tier + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), altar -> altar == null + ? "IV" + : NumeralHelper.toRoman(altar.getTier().toInt()))); + // Stored/Capacity + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), altar -> String.format("%d/%d", altar == null + ? 0 + : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()))); + // Crafting progress/Crafting requirement + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 32, 46, 16, 16), altar -> { + if (altar == null || !altar.isActive()) + return I18n.format("hud.bloodmagic.inactive"); + int progress = altar.getProgress(); + int totalLiquidRequired = altar.getLiquidRequired() * altar.getStackInSlot(0).getCount(); + return String.format("%d/%d", progress, totalLiquidRequired); + })); + // Consumption rate + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 48, 46, 16, 16), altar -> altar == null + ? "0" + : String.valueOf((int) (altar.getConsumptionRate() * (altar.getConsumptionMultiplier() + 1))))); + // Total charge + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 64, 46, 16, 16), altar -> altar == null + ? "0" + : String.valueOf(altar.getTotalCharge()))); + } + }, new Vector2f(0.01F, 0.01F)); + + ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "incense_altar"), new ElementDivinedInformation(2, true, TileIncenseAltar.class) + { + @Override + public void gatherInformation(Consumer>> information) + { + // Current tranquility + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 80, 46, 16, 16), incense -> incense == null + ? "0" + : String.valueOf((int) ((100D * (int) (100 * incense.tranquility)) / 100D)))); + // Sacrifice bonus + information.accept(Pair.of(new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 96, 46, 16, 16), incense -> incense == null + ? "0" + : String.valueOf((int) (100 * incense.incenseAddition)))); + } + }, new Vector2f(0.01F, 0.01F)); } } diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDivinedInformation.java b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDivinedInformation.java new file mode 100644 index 00000000..d068635b --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementDivinedInformation.java @@ -0,0 +1,76 @@ +package wayoftime.bloodmagic.client.hud.element; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Hand; +import wayoftime.bloodmagic.common.item.BloodMagicItems; + +public abstract class ElementDivinedInformation extends ElementTileInformation +{ + + private final boolean simple; + + public ElementDivinedInformation(int lines, boolean simple, Class tileClass) + { + super(100, lines, tileClass); + this.simple = simple; + } + + @Override + public boolean shouldRender(Minecraft minecraft) + { + PlayerEntity player = Minecraft.getInstance().player; + ItemStack sigilStack = player.getHeldItem(Hand.MAIN_HAND); + boolean flag = false; + if (simple) + { + if (sigilStack.getItem() == BloodMagicItems.DIVINATION_SIGIL.get() || sigilStack.getItem() == BloodMagicItems.SEER_SIGIL.get()) + flag = true; + else + flag = isFlagSigilHolding(sigilStack, true); + +// if (!flag) +// { +// sigilStack = player.getHeldItem(Hand.OFF_HAND); +// if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_DIVINATION || sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_SEER) +// flag = true; +// else +// flag = isFlagSigilHolding(sigilStack, true); +// } + + } else + { + if (sigilStack.getItem() == BloodMagicItems.SEER_SIGIL.get()) + flag = true; + else + flag = isFlagSigilHolding(sigilStack, false); +// +// if (!flag) +// { +// sigilStack = player.getHeldItem(Hand.OFF_HAND); +// if (sigilStack.getItem() == RegistrarBloodMagicItems.SIGIL_SEER) +// flag = true; +// else +// flag = isFlagSigilHolding(sigilStack, false); +// } + } + + return super.shouldRender(minecraft) && flag; + } + + private boolean isFlagSigilHolding(ItemStack sigilStack, boolean simple) + { +// if (sigilStack.getItem() instanceof ItemSigilHolding) +// { +// List internalInv = ItemSigilHolding.getInternalInventory(sigilStack); +// int currentSlot = ItemSigilHolding.getCurrentItemOrdinal(sigilStack); +// if (internalInv != null && !internalInv.get(currentSlot).isEmpty()) +// { +// return (internalInv.get(currentSlot).getItem() == RegistrarBloodMagicItems.SIGIL_SEER && !simple) || (internalInv.get(currentSlot).getItem() == RegistrarBloodMagicItems.SIGIL_DIVINATION && simple); +// } +// } + return false; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementTileInformation.java b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementTileInformation.java new file mode 100644 index 00000000..5a5aa20f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/client/hud/element/ElementTileInformation.java @@ -0,0 +1,71 @@ +package wayoftime.bloodmagic.client.hud.element; + +import java.awt.Color; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.Lists; +import com.mojang.blaze3d.matrix.MatrixStack; + +import net.minecraft.client.Minecraft; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.RayTraceResult; +import wayoftime.bloodmagic.client.Sprite; + +public abstract class ElementTileInformation extends HUDElement +{ + + protected final Class tileClass; + private final List>> information; + + public ElementTileInformation(int width, int lines, Class tileClass) + { + super(width, 18 * lines - 2); + + this.tileClass = tileClass; + this.information = Lists.newArrayList(); + gatherInformation(information::add); + } + + public abstract void gatherInformation(Consumer>> information); + + @SuppressWarnings("unchecked") + @Override + public void draw(MatrixStack matrixStack, float partialTicks, int drawX, int drawY) + { + RayTraceResult trace = Minecraft.getInstance().objectMouseOver; + if (trace == null || trace.getType() != RayTraceResult.Type.BLOCK) + return; + + T tile = (T) Minecraft.getInstance().world.getTileEntity(((BlockRayTraceResult) trace).getPos()); + + int yOffset = 0; + for (Pair> sprite : information) + { + sprite.getLeft().draw(matrixStack, drawX, drawY + yOffset); + int textY = drawY + yOffset + (sprite.getLeft().getTextureHeight() / 4); + Minecraft.getInstance().fontRenderer.drawStringWithShadow(matrixStack, (tile != null && tile.getClass() == tileClass) + ? sprite.getRight().apply(tile) + : "?", drawX + sprite.getLeft().getTextureWidth() + 2, textY, Color.WHITE.getRGB()); + yOffset += sprite.getLeft().getTextureHeight() + 2; + } + } + + @Override + public boolean shouldRender(Minecraft minecraft) + { + RayTraceResult trace = Minecraft.getInstance().objectMouseOver; + if (trace == null || trace.getType() != RayTraceResult.Type.BLOCK) + return false; + + TileEntity tile = Minecraft.getInstance().world.getTileEntity(((BlockRayTraceResult) trace).getPos()); + if (tile == null || !tileClass.isAssignableFrom(tile.getClass())) + return false; + + return true; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockIncenseAltar.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockIncenseAltar.java new file mode 100644 index 00000000..2d64b98c --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockIncenseAltar.java @@ -0,0 +1,77 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockRenderType; +import net.minecraft.block.BlockState; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; +import net.minecraftforge.common.ToolType; +import wayoftime.bloodmagic.tile.TileIncenseAltar; +import wayoftime.bloodmagic.tile.TileSoulForge; + +public class BlockIncenseAltar extends Block +{ + protected static final VoxelShape BODY = Block.makeCuboidShape(5, 0, 5, 12, 16, 12); + + public BlockIncenseAltar() + { + super(Properties.create(Material.IRON).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0)); + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) + { + return BODY; + } + + @Override + public void onPlayerDestroy(IWorld world, BlockPos blockPos, BlockState blockState) + { + TileSoulForge forge = (TileSoulForge) world.getTileEntity(blockPos); + if (forge != null) + forge.dropItems(); + + super.onPlayerDestroy(world, blockPos, blockState); + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) + { + if (!state.isIn(newState.getBlock())) + { + TileEntity tileentity = worldIn.getTileEntity(pos); + if (tileentity instanceof TileSoulForge) + { + ((TileSoulForge) tileentity).dropItems(); + worldIn.updateComparatorOutputLevel(pos, this); + } + + super.onReplaced(state, worldIn, pos, newState, isMoving); + } + } + + @Override + public boolean hasTileEntity(BlockState state) + { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) + { + return new TileIncenseAltar(); + } + + @Override + public BlockRenderType getRenderType(BlockState state) + { + return BlockRenderType.MODEL; + } + +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BlockPath.java b/src/main/java/wayoftime/bloodmagic/common/block/BlockPath.java new file mode 100644 index 00000000..bc854616 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/common/block/BlockPath.java @@ -0,0 +1,24 @@ +package wayoftime.bloodmagic.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import wayoftime.bloodmagic.incense.IIncensePath; + +public class BlockPath extends Block implements IIncensePath +{ + protected final int pathLevel; + + public BlockPath(int pathLevel, Properties properties) + { + super(properties); + this.pathLevel = pathLevel; + } + + @Override + public int getLevelOfPath(World world, BlockPos pos, BlockState state) + { + return pathLevel; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/common/block/BloodMagicBlocks.java b/src/main/java/wayoftime/bloodmagic/common/block/BloodMagicBlocks.java index 6b69e742..3f00677c 100644 --- a/src/main/java/wayoftime/bloodmagic/common/block/BloodMagicBlocks.java +++ b/src/main/java/wayoftime/bloodmagic/common/block/BloodMagicBlocks.java @@ -1,5 +1,6 @@ package wayoftime.bloodmagic.common.block; +import net.minecraft.block.AbstractBlock; import net.minecraft.block.AbstractBlock.Properties; import net.minecraft.block.Block; import net.minecraft.block.FlowingFluidBlock; @@ -41,6 +42,7 @@ public class BloodMagicBlocks // public static final RegistryObject BLOODSTONE = BASICBLOCKS.register("ruby_block", BloodstoneBlock::new); public static final RegistryObject SOUL_FORGE = BLOCKS.register("soulforge", BlockSoulForge::new); + public static final RegistryObject INCENSE_ALTAR = BLOCKS.register("incensealtar", BlockIncenseAltar::new); public static final RegistryObject ALCHEMY_ARRAY = BLOCKS.register("alchemyarray", BlockAlchemyArray::new); public static final RegistryObject BLANK_RUNE = BASICBLOCKS.register("blankrune", () -> new BlockBloodRune(BloodRuneType.BLANK)); public static final RegistryObject SPEED_RUNE = BASICBLOCKS.register("speedrune", () -> new BlockBloodRune(BloodRuneType.SPEED)); @@ -81,6 +83,15 @@ public class BloodMagicBlocks public static final RegistryObject VENGEFUL_CRYSTAL_BLOCK = BLOCKS.register("vengefuldemoncrystal", () -> new BlockDemonCrystal(EnumDemonWillType.VENGEFUL)); public static final RegistryObject STEADFAST_CRYSTAL_BLOCK = BLOCKS.register("steadfastdemoncrystal", () -> new BlockDemonCrystal(EnumDemonWillType.STEADFAST)); + public static final RegistryObject WOOD_PATH = BASICBLOCKS.register("woodbrickpath", () -> new BlockPath(2, AbstractBlock.Properties.create(Material.WOOD).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.AXE).harvestLevel(0))); + public static final RegistryObject WOOD_TILE_PATH = BASICBLOCKS.register("woodtilepath", () -> new BlockPath(2, AbstractBlock.Properties.create(Material.WOOD).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.AXE).harvestLevel(0))); + public static final RegistryObject STONE_PATH = BASICBLOCKS.register("stonebrickpath", () -> new BlockPath(4, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject STONE_TILE_PATH = BASICBLOCKS.register("stonetilepath", () -> new BlockPath(4, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject WORN_STONE_PATH = BASICBLOCKS.register("wornstonebrickpath", () -> new BlockPath(6, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject WORN_STONE_TILE_PATH = BASICBLOCKS.register("wornstonetilepath", () -> new BlockPath(6, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(0))); + public static final RegistryObject OBSIDIAN_PATH = BASICBLOCKS.register("obsidianbrickpath", () -> new BlockPath(8, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(3))); + public static final RegistryObject OBSIDIAN_TILE_PATH = BASICBLOCKS.register("obsidiantilepath", () -> new BlockPath(8, AbstractBlock.Properties.create(Material.ROCK).hardnessAndResistance(2.0F, 5.0F).harvestTool(ToolType.PICKAXE).harvestLevel(3))); + private static ForgeFlowingFluid.Properties makeProperties() { return new ForgeFlowingFluid.Properties(LIFE_ESSENCE_FLUID, LIFE_ESSENCE_FLUID_FLOWING, FluidAttributes.builder(FLUID_STILL, FLUID_FLOWING)).bucket(LIFE_ESSENCE_BUCKET).block(LIFE_ESSENCE_BLOCK); @@ -95,6 +106,7 @@ public class BloodMagicBlocks public static final RegistryObject> SOUL_FORGE_CONTAINER = CONTAINERS.register("soul_forge_container", () -> IForgeContainerType.create(ContainerSoulForge::new)); public static final RegistryObject> ARC_CONTAINER = CONTAINERS.register("arc_container", () -> IForgeContainerType.create(ContainerAlchemicalReactionChamber::new)); public static final RegistryObject> ALCHEMY_TABLE_CONTAINER = CONTAINERS.register("alchemy_table_container", () -> IForgeContainerType.create(ContainerAlchemyTable::new)); + // public static final RegistryObject BLOOD_STONE = registerNoItem("blood_stone", () -> new BloodstoneBlock()); // //// private static RegistryObject register(String name, Supplier sup, Function, Supplier> itemCreator) diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBaseRecipes.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBaseRecipes.java index 91dc8af3..309c2572 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBaseRecipes.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorBaseRecipes.java @@ -46,6 +46,10 @@ public class GeneratorBaseRecipes extends BaseRecipeProvider ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.DUSK_RITUAL_DIVINER.get()).key('S', BloodMagicItems.DEMONIC_SLATE.get()).key('t', BloodMagicItems.DUSK_INSCRIPTION_TOOL.get()).key('d', BloodMagicItems.BASE_RITUAL_DIVINER.get()).patternLine(" S ").patternLine("tdt").patternLine(" S ").addCriterion("has_demon_slate", hasItem(BloodMagicItems.DEMONIC_SLATE.get())).build(consumer, BloodMagic.rl("ritual_diviner_1")); ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.BLOODSTONE_BRICK.get(), 4).key('s', BloodMagicBlocks.BLOODSTONE.get()).patternLine("ss").patternLine("ss").addCriterion("has_weak_shard", hasItem(BloodMagicItems.WEAK_BLOOD_SHARD.get())).build(consumer, BloodMagic.rl("bloodstonebrick")); ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.BLOODSTONE.get(), 8).addIngredient(Tags.Items.STONE).addIngredient(BloodMagicItems.WEAK_BLOOD_SHARD.get()).addCriterion("has_weak_shard", hasItem(BloodMagicItems.WEAK_BLOOD_SHARD.get())).build(consumer, BloodMagic.rl("largebloodstonebrick")); + + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WOOD_TILE_PATH.get(), 4).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addIngredient(BloodMagicBlocks.WOOD_PATH.get()).addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_woodtile")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.STONE_TILE_PATH.get(), 4).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_stonetile")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WORN_STONE_TILE_PATH.get(), 4).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addIngredient(BloodMagicBlocks.WORN_STONE_PATH.get()).addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_wornstonetile")); } private void addVanillaSmithingRecipes(Consumer consumer) @@ -57,6 +61,8 @@ public class GeneratorBaseRecipes extends BaseRecipeProvider private void addBloodOrbRecipes(Consumer consumer) { + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.INCENSE_ALTAR.get()).key('s', Tags.Items.STONE).key('c', Tags.Items.COBBLESTONE).key('h', Items.CHARCOAL).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).patternLine("s s").patternLine("shs").patternLine("coc").addCriterion("has_weak_orb", hasItem(BloodMagicItems.WEAK_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("incense_altar")); + ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.BLANK_RUNE.get()).key('a', Tags.Items.STONE).key('s', Ingredient.fromItems(BloodMagicItems.SLATE.get())).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).patternLine("asa").patternLine("aoa").patternLine("aaa").addCriterion("has_weak_orb", hasItem(BloodMagicItems.WEAK_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_blank")); ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SPEED_RUNE.get()).key('a', Tags.Items.STONE).key('b', Ingredient.fromItems(BloodMagicItems.SLATE.get())).key('c', Ingredient.fromItems(Items.SUGAR)).key('d', BloodMagicBlocks.BLANK_RUNE.get()).patternLine("aba").patternLine("cdc").patternLine("aba").addCriterion("has_blank_rune", hasItem(BloodMagicItems.BLANK_RUNE_ITEM.get())).build(consumer, BloodMagic.rl("blood_rune_speed")); ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SACRIFICE_RUNE.get()).key('a', Tags.Items.STONE).key('b', BloodMagicItems.REINFORCED_SLATE.get()).key('c', Tags.Items.INGOTS_GOLD).key('d', BloodMagicBlocks.BLANK_RUNE.get()).key('e', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_APPRENTICE.get())).patternLine("aba").patternLine("cdc").patternLine("aea").addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("blood_rune_sacrifice")); @@ -78,6 +84,12 @@ public class GeneratorBaseRecipes extends BaseRecipeProvider ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.LAVA_CRYSTAL.get()).key('a', Tags.Items.GLASS).key('b', Items.LAVA_BUCKET).key('c', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).key('d', Tags.Items.OBSIDIAN).key('e', Tags.Items.GEMS_DIAMOND).patternLine("aba").patternLine("bcb").patternLine("ded").addCriterion("has_weak_orb", hasItem(BloodMagicItems.WEAK_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("lava_crystal")); ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.PRIMITIVE_HYDRATION_CELL.get()).key('B', Items.WATER_BUCKET).key('c', Tags.Items.COBBLESTONE).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).key('s', BloodMagicItems.SLATE.get()).patternLine("csc").patternLine("cBc").patternLine("coc").addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("primitive_hydration_cell")); + + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WOOD_PATH.get(), 4).addIngredient(ItemTags.PLANKS).addIngredient(ItemTags.PLANKS).addIngredient(ItemTags.PLANKS).addIngredient(ItemTags.PLANKS).addIngredient(IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_APPRENTICE.get())).addCriterion("has_apprentice_orb", hasItem(BloodMagicItems.APPRENTICE_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_wood")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.STONE_PATH.get(), 4).addIngredient(Tags.Items.STONE).addIngredient(Tags.Items.STONE).addIngredient(Tags.Items.STONE).addIngredient(Tags.Items.STONE).addIngredient(IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MAGICIAN.get())).addCriterion("has_magician_orb", hasItem(BloodMagicItems.MAGICIAN_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_stone")); + ShapelessRecipeBuilder.shapelessRecipe(BloodMagicBlocks.WORN_STONE_PATH.get(), 4).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(BloodMagicBlocks.STONE_PATH.get()).addIngredient(IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("path/path_wornstone")); + + ShapedRecipeBuilder.shapedRecipe(BloodMagicItems.RITUAL_READER.get()).key('s', BloodMagicItems.DEMONIC_SLATE.get()).key('g', Tags.Items.GLASS).key('i', Tags.Items.INGOTS_GOLD).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_MASTER.get())).patternLine("gog").patternLine("isi").patternLine(" s ").addCriterion("has_master_orb", hasItem(BloodMagicItems.MASTER_BLOOD_ORB.get())).build(consumer, BloodMagic.rl("ritual_reader")); // ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SPEED_RUNE.get()).key('s', Items.GLASS).key('o', Ingredient.fromItems(Items.DIAMOND)).patternLine("sss").patternLine("sos").patternLine("sss").addCriterion("has_diamond", hasItem(Items.DIAMOND)).build(consumer, new ResourceLocation(BloodMagic.MODID, "speed_rune_from_standard")); // ShapedRecipeBuilder.shapedRecipe(BloodMagicBlocks.SPEED_RUNE.get()).key('s', Items.GLASS).key('o', IngredientBloodOrb.fromOrb(BloodMagicItems.ORB_WEAK.get())).patternLine("sss").patternLine("sos").patternLine("sss").addCriterion("has_diamond", hasItem(Items.DIAMOND)).build(consumer, new ResourceLocation(BloodMagic.MODID, "speed_rune_from_orb")); } diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemModels.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemModels.java index ef2d5612..280b2432 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemModels.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorItemModels.java @@ -63,6 +63,7 @@ public class GeneratorItemModels extends ItemModelProvider registerDemonTool(BloodMagicItems.SENTIENT_AXE.get()); registerDemonTool(BloodMagicItems.SENTIENT_PICKAXE.get()); registerDemonTool(BloodMagicItems.SENTIENT_SHOVEL.get()); + registerSacrificialKnife(BloodMagicItems.SACRIFICIAL_DAGGER.get()); } private void registerCustomBlockPath(Block block, String newPath) @@ -145,4 +146,14 @@ public class GeneratorItemModels extends ItemModelProvider } } + + private void registerSacrificialKnife(Item item) + { + String path = item.getRegistryName().getPath(); + ItemModelBuilder builder = getBuilder(path); + + ModelFile baseKnifeFile = singleTexture("item/variants/" + path, mcLoc("item/handheld"), "layer0", modLoc("item/" + path)); + ModelFile ceremonialKnifeFile = singleTexture("item/variants/" + path + "_ceremonial", mcLoc("item/handheld"), "layer0", modLoc("item/" + path + "_ceremonial")); + builder = builder.override().predicate(BloodMagic.rl("incense"), 0).model(baseKnifeFile).end().override().predicate(BloodMagic.rl("incense"), 1).model(ceremonialKnifeFile).end(); + } } diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java index 6c8546b0..492b17cc 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLanguage.java @@ -16,6 +16,9 @@ public class GeneratorLanguage extends LanguageProvider @Override protected void addTranslations() { + // HUD + add("hud.bloodmagic.inactive", "Inactive"); + // Creative Tab add("itemGroup.bloodmagic.creativeTab", "Blood Magic"); @@ -45,6 +48,17 @@ public class GeneratorLanguage extends LanguageProvider // add("tooltip.bloodmagic.sigil.divination.currentInversion", "Current Inversion: %d"); add("tooltip.bloodmagic.sigil.divination.currentBonus", "Current Bonus: +%d%%"); + add("tooltip.bloodmagic.sigil.seer.desc", "When seeing all is not enough"); + add("tooltip.bloodmagic.sigil.seer.currentAltarProgress", "Current Progress: %d LP/ %s LP"); + add("tooltip.bloodmagic.sigil.seer.currentAltarProgress.percent", "Current Progress: %s"); + add("tooltip.bloodmagic.sigil.seer.currentAltarConsumptionRate", "Consumption Rate: %d LP"); + add("tooltip.bloodmagic.sigil.seer.currentAltarTier", "Current Tier: %d"); + add("tooltip.bloodmagic.sigil.seer.currentEssence", "Current Essence: %d LP"); + add("tooltip.bloodmagic.sigil.seer.currentAltarCapacity", "Current Capacity: %d LP"); + add("tooltip.bloodmagic.sigil.seer.currentCharge", "Current Charge: %d"); + add("tooltip.bloodmagic.sigil.seer.currentTranquility", "Current Tranquility: %d"); + add("tooltip.bloodmagic.sigil.seer.currentBonus", "Current Bonus: +%d%%"); + add("tooltip.bloodmagic.decoration.safe", "Safe for decoration"); add("tooltip.bloodmagic.decoration.notSafe", "Dangerous for decoration"); @@ -304,6 +318,7 @@ public class GeneratorLanguage extends LanguageProvider addBlock(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER, "Alchemical Reaction Chamber"); addBlock(BloodMagicBlocks.ALCHEMY_TABLE, "Alchemy Table"); + addBlock(BloodMagicBlocks.INCENSE_ALTAR, "Incense Altar"); addBlock(BloodMagicBlocks.BLOODSTONE, "Large Bloodstone Brick"); addBlock(BloodMagicBlocks.BLOODSTONE_BRICK, "Bloodstone Brick"); @@ -317,6 +332,15 @@ public class GeneratorLanguage extends LanguageProvider addBlock(BloodMagicBlocks.DEMON_CRUCIBLE, "Demon Crucible"); addBlock(BloodMagicBlocks.DEMON_CRYSTALLIZER, "Demon Crystallizer"); + addBlock(BloodMagicBlocks.WOOD_PATH, "Wooden Path"); + addBlock(BloodMagicBlocks.WOOD_TILE_PATH, "Tiled Wooden Path"); + addBlock(BloodMagicBlocks.STONE_PATH, "Stone Path"); + addBlock(BloodMagicBlocks.STONE_TILE_PATH, "Tiled Stone Path"); + addBlock(BloodMagicBlocks.WORN_STONE_PATH, "Worn Stone Path"); + addBlock(BloodMagicBlocks.WORN_STONE_TILE_PATH, "Tiled Worn Stone Path"); + addBlock(BloodMagicBlocks.OBSIDIAN_PATH, "Obsidian Path"); + addBlock(BloodMagicBlocks.OBSIDIAN_TILE_PATH, "Tiled Obsidian Path"); + // Item names addItem(BloodMagicItems.WEAK_BLOOD_ORB, "Weak Blood Orb"); addItem(BloodMagicItems.APPRENTICE_BLOOD_ORB, "Apprentice Blood Orb"); @@ -332,6 +356,7 @@ public class GeneratorLanguage extends LanguageProvider addItem(BloodMagicItems.ICE_SIGIL, "Sigil of the Frozen Lake"); addItem(BloodMagicItems.AIR_SIGIL, "Air Sigil"); addItem(BloodMagicItems.BLOOD_LIGHT_SIGIL, "Sigil of the Blood Lamp"); + addItem(BloodMagicItems.SEER_SIGIL, "Seer's Sigil"); addItem(BloodMagicBlocks.LIFE_ESSENCE_BUCKET, "Bucket of Life"); addItem(BloodMagicItems.ARCANE_ASHES, "Arcane Ashes"); @@ -353,6 +378,7 @@ public class GeneratorLanguage extends LanguageProvider addItem(BloodMagicItems.REAGENT_MAGNETISM, "Magnetism Reagent"); addItem(BloodMagicItems.REAGENT_AIR, "Air Reagent"); addItem(BloodMagicItems.REAGENT_BLOOD_LIGHT, "Blood Lamp Reagent"); + addItem(BloodMagicItems.REAGENT_SIGHT, "Sight Reagent"); addItem(BloodMagicItems.PETTY_GEM, "Petty Tartaric Gem"); addItem(BloodMagicItems.LESSER_GEM, "Lesser Tartaric Gem"); diff --git a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLootTable.java b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLootTable.java index ecb2d715..4275e10b 100644 --- a/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLootTable.java +++ b/src/main/java/wayoftime/bloodmagic/common/data/GeneratorLootTable.java @@ -75,6 +75,7 @@ public class GeneratorLootTable extends LootTableProvider registerDropSelfLootTable(BloodMagicBlocks.ALCHEMICAL_REACTION_CHAMBER.get()); registerDropSelfLootTable(BloodMagicBlocks.DEMON_CRUCIBLE.get()); registerDropSelfLootTable(BloodMagicBlocks.DEMON_CRYSTALLIZER.get()); + registerDropSelfLootTable(BloodMagicBlocks.INCENSE_ALTAR.get()); // registerNoDropLootTable(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get()); registerDropCrystalsLootTable(BloodMagicBlocks.RAW_CRYSTAL_BLOCK.get(), BloodMagicItems.RAW_CRYSTAL.get()); diff --git a/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java b/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java index ea23610a..4bccc371 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/BloodMagicItems.java @@ -78,6 +78,16 @@ public class BloodMagicItems public static final RegistryObject BLOOD_ALTAR_ITEM = ITEMS.register("altar", () -> new BlockItem(BloodMagicBlocks.BLOOD_ALTAR.get(), new Item.Properties().group(BloodMagic.TAB))); public static final RegistryObject ALCHEMY_TABLE_ITEM = ITEMS.register("alchemytable", () -> new ItemBlockAlchemyTable(BloodMagicBlocks.ALCHEMY_TABLE.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject INCENSE_ALTAR_ITEM = ITEMS.register("incensealtar", () -> new BlockItem(BloodMagicBlocks.INCENSE_ALTAR.get(), new Item.Properties().group(BloodMagic.TAB))); + + public static final RegistryObject WOOD_PATH_ITEM = ITEMS.register("woodbrickpath", () -> new BlockItem(BloodMagicBlocks.WOOD_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject WOOD_TILE_PATH_ITEM = ITEMS.register("woodtilepath", () -> new BlockItem(BloodMagicBlocks.WOOD_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject STONE_PATH_ITEM = ITEMS.register("stonebrickpath", () -> new BlockItem(BloodMagicBlocks.STONE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject STONE_TILE_PATH_ITEM = ITEMS.register("stonetilepath", () -> new BlockItem(BloodMagicBlocks.STONE_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject WORN_STONE_PATH_ITEM = ITEMS.register("wornstonebrickpath", () -> new BlockItem(BloodMagicBlocks.WORN_STONE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject WORN_STONE_TILE_PATH_ITEM = ITEMS.register("wornstonetilepath", () -> new BlockItem(BloodMagicBlocks.WORN_STONE_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject OBSIDIAN_PATH_ITEM = ITEMS.register("obsidianbrickpath", () -> new BlockItem(BloodMagicBlocks.OBSIDIAN_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); + public static final RegistryObject OBSIDIAN_TILE_PATH_ITEM = ITEMS.register("obsidiantilepath", () -> new BlockItem(BloodMagicBlocks.OBSIDIAN_TILE_PATH.get(), new Item.Properties().group(BloodMagic.TAB))); // TODO: Need to rework the above instantiations for the ItemBlocks so that it's // done with the Blocks. @@ -90,6 +100,7 @@ public class BloodMagicItems public static final RegistryObject MASTER_BLOOD_ORB = BASICITEMS.register("masterbloodorb", () -> new ItemBloodOrb(ORB_MASTER)); public static final RegistryObject DIVINATION_SIGIL = BASICITEMS.register("divinationsigil", () -> new ItemSigilDivination(true)); + public static final RegistryObject SEER_SIGIL = BASICITEMS.register("seersigil", () -> new ItemSigilDivination(false)); public static final RegistryObject SACRIFICIAL_DAGGER = BASICITEMS.register("sacrificialdagger", () -> new ItemSacrificialDagger()); public static final RegistryObject SLATE = BASICITEMS.register("blankslate", () -> new ItemBase()); public static final RegistryObject REINFORCED_SLATE = BASICITEMS.register("reinforcedslate", () -> new ItemBase()); @@ -136,6 +147,7 @@ public class BloodMagicItems public static final RegistryObject REAGENT_MAGNETISM = BASICITEMS.register("reagentmagnetism", () -> new ItemBase()); public static final RegistryObject REAGENT_AIR = BASICITEMS.register("reagentair", () -> new ItemBase()); public static final RegistryObject REAGENT_BLOOD_LIGHT = BASICITEMS.register("reagentbloodlight", () -> new ItemBase()); + public static final RegistryObject REAGENT_SIGHT = BASICITEMS.register("reagentsight", () -> new ItemBase()); // Tartaric Gems public static final RegistryObject PETTY_GEM = ITEMS.register("soulgempetty", () -> new ItemSoulGem("petty", 64)); diff --git a/src/main/java/wayoftime/bloodmagic/common/item/ItemSacrificialDagger.java b/src/main/java/wayoftime/bloodmagic/common/item/ItemSacrificialDagger.java index 2889156d..e305c0fd 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/ItemSacrificialDagger.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/ItemSacrificialDagger.java @@ -25,6 +25,7 @@ import wayoftime.bloodmagic.ConfigHandler; import wayoftime.bloodmagic.event.SacrificeKnifeUsedEvent; import wayoftime.bloodmagic.util.Constants; import wayoftime.bloodmagic.util.DamageSourceBloodMagic; +import wayoftime.bloodmagic.util.helper.IncenseHelper; import wayoftime.bloodmagic.util.helper.NBTHelper; import wayoftime.bloodmagic.util.helper.PlayerHelper; import wayoftime.bloodmagic.util.helper.PlayerSacrificeHelper; @@ -52,7 +53,14 @@ public class ItemSacrificialDagger extends Item public void onPlayerStoppedUsing(ItemStack stack, World worldIn, LivingEntity entityLiving, int timeLeft) { if (entityLiving instanceof PlayerEntity && !entityLiving.getEntityWorld().isRemote) - PlayerSacrificeHelper.sacrificePlayerHealth((PlayerEntity) entityLiving); + if (PlayerSacrificeHelper.sacrificePlayerHealth((PlayerEntity) entityLiving)) + IncenseHelper.setHasMaxIncense(stack, (PlayerEntity) entityLiving, false); + } + + @Override + public boolean hasEffect(ItemStack stack) + { + return IncenseHelper.getHasMaxIncense(stack) || super.hasEffect(stack); } @Override @@ -114,13 +122,15 @@ public class ItemSacrificialDagger extends Item return super.onItemRightClick(world, player, hand); lpAdded = evt.lpAdded; + } else if (player.isSneaking()) + { + lpAdded = Integer.MAX_VALUE; } double posX = player.getPosX(); double posY = player.getPosY(); double posZ = player.getPosZ(); - world.playSound(player, posX, posY, posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) - * 0.8F); + world.playSound(player, posX, posY, posZ, SoundEvents.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) world.addParticle(RedstoneParticleData.REDSTONE_DUST, posX + Math.random() - Math.random(), posY + Math.random() - Math.random(), posZ + Math.random() - Math.random(), 0, 0, 0); diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBase.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBase.java index 11c77760..f7d8567c 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBase.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilBase.java @@ -6,6 +6,7 @@ import net.minecraft.client.util.ITooltipFlag; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TranslationTextComponent; import net.minecraft.world.World; import net.minecraftforge.api.distmarker.Dist; @@ -36,7 +37,7 @@ public class ItemSigilBase extends ItemSigil @OnlyIn(Dist.CLIENT) public void addInformation(ItemStack stack, World world, List tooltip, ITooltipFlag flag) { - tooltip.add(new TranslationTextComponent(tooltipBase + "desc")); + tooltip.add(new TranslationTextComponent(tooltipBase + "desc").mergeStyle(TextFormatting.ITALIC)); // if (TextHelper.canTranslate(tooltipBase + "desc")) // tooltip.addAll(Arrays.asList(WordUtils.wrap(TextHelper.localizeEffect(tooltipBase // + "desc"), 30, "/cut", false).split("/cut"))); diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilDivination.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilDivination.java index 90e242a5..2b995104 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilDivination.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilDivination.java @@ -20,6 +20,7 @@ import wayoftime.bloodmagic.altar.IBloodAltar; import wayoftime.bloodmagic.core.data.Binding; import wayoftime.bloodmagic.iface.IAltarReader; import wayoftime.bloodmagic.iface.ISigil; +import wayoftime.bloodmagic.tile.TileIncenseAltar; import wayoftime.bloodmagic.util.ChatUtil; import wayoftime.bloodmagic.util.helper.NetworkHelper; import wayoftime.bloodmagic.util.helper.NumeralHelper; @@ -27,10 +28,12 @@ import wayoftime.bloodmagic.util.helper.PlayerHelper; public class ItemSigilDivination extends ItemSigilBase implements IAltarReader { + private final boolean isSimple; public ItemSigilDivination(boolean simple) { super(simple ? "divination" : "seer"); + isSimple = simple; } @Override @@ -51,7 +54,7 @@ public class ItemSigilDivination extends ItemSigilBase implements IAltarReader super.onItemRightClick(world, player, hand); Binding binding = getBinding(stack); - if (binding != null) + if (isSimple && binding != null) { int currentEssence = NetworkHelper.getSoulNetwork(binding).getCurrentEssence(); List toSend = Lists.newArrayList(); @@ -73,18 +76,21 @@ public class ItemSigilDivination extends ItemSigilBase implements IAltarReader int currentEssence = altar.getCurrentBlood(); int capacity = altar.getCapacity(); altar.checkTier(); - ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase - + "currentAltarTier", NumeralHelper.toRoman(tier)), new TranslationTextComponent(tooltipBase - + "currentEssence", currentEssence), new TranslationTextComponent(tooltipBase - + "currentAltarCapacity", capacity)); + if (isSimple) + { + ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TranslationTextComponent(tooltipBase + "currentEssence", currentEssence), new TranslationTextComponent(tooltipBase + "currentAltarCapacity", capacity)); + } else + { + ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase + "currentAltarTier", NumeralHelper.toRoman(tier)), new TranslationTextComponent(tooltipBase + "currentEssence", currentEssence), new TranslationTextComponent(tooltipBase + "currentAltarCapacity", capacity)); + } + } else if (tile != null && tile instanceof TileIncenseAltar) + { + TileIncenseAltar altar = (TileIncenseAltar) tile; + altar.recheckConstruction(); + double tranquility = altar.tranquility; + ChatUtil.sendNoSpam(player, new TranslationTextComponent(tooltipBase + "currentTranquility", (int) ((100D * (int) (100 * tranquility)) / 100d)), new TranslationTextComponent(tooltipBase + "currentBonus", (int) (100 * altar.incenseAddition))); } -// else if (tile != null && tile instanceof TileIncenseAltar) -// { -// TileIncenseAltar altar = (TileIncenseAltar) tile; -// altar.recheckConstruction(); -// double tranquility = altar.tranquility; -// ChatUtil.sendNoSpam(player, new TextComponentTranslation(tooltipBase + "currentTranquility", (int) ((100D * (int) (100 * tranquility)) / 100d)), new TextComponentTranslation(tooltipBase + "currentBonus", (int) (100 * altar.incenseAddition))); -// } else if (tile != null && tile instanceof TileInversionPillar) +// else if (tile != null && tile instanceof TileInversionPillar) // { // TileInversionPillar pillar = (TileInversionPillar) tile; // double inversion = pillar.getCurrentInversion(); @@ -98,8 +104,7 @@ public class ItemSigilDivination extends ItemSigilBase implements IAltarReader int currentEssence = NetworkHelper.getSoulNetwork(binding).getCurrentEssence(); List toSend = Lists.newArrayList(); if (!binding.getOwnerId().equals(player.getGameProfile().getId())) - toSend.add(new TranslationTextComponent(tooltipBase - + "otherNetwork", binding.getOwnerName())); + toSend.add(new TranslationTextComponent(tooltipBase + "otherNetwork", binding.getOwnerName())); toSend.add(new TranslationTextComponent(tooltipBase + "currentEssence", currentEssence)); ChatUtil.sendNoSpam(player, toSend.toArray(new ITextComponent[toSend.size()])); } diff --git a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulGem.java b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulGem.java index 9206dd15..6a21c8c0 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulGem.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/soul/ItemSoulGem.java @@ -8,7 +8,6 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; import net.minecraft.nbt.CompoundNBT; import net.minecraft.util.ActionResult; import net.minecraft.util.ActionResultType; @@ -77,8 +76,6 @@ public class ItemSoulGem extends Item implements IDemonWillGem, IMultiWillTool if (!stack.hasTag()) return; - Items d; - EnumDemonWillType type = this.getCurrentType(stack); tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.soulGem." + name)); tooltip.add(new TranslationTextComponent("tooltip.bloodmagic.will", ChatUtil.DECIMAL_FORMAT.format(getWill(type, stack)))); @@ -133,8 +130,7 @@ public class ItemSoulGem extends Item implements IDemonWillGem, IMultiWillTool if (soulsLeft < getMaxWill(thisType, soulGemStack)) { - double newSoulsLeft = Math.min(soulsLeft - + soul.getWill(thisType, soulStack), getMaxWill(thisType, soulGemStack)); + double newSoulsLeft = Math.min(soulsLeft + soul.getWill(thisType, soulStack), getMaxWill(thisType, soulGemStack)); soul.drainWill(thisType, soulStack, newSoulsLeft - soulsLeft); setWill(thisType, soulGemStack, newSoulsLeft); diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyArrayRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyArrayRecipeProvider.java index dfe9c6ec..de85c13d 100644 --- a/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyArrayRecipeProvider.java +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/AlchemyArrayRecipeProvider.java @@ -28,6 +28,7 @@ public class AlchemyArrayRecipeProvider implements ISubRecipeProvider AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/magnetismsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_MAGNETISM.get()), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), new ItemStack(BloodMagicItems.MAGNETISM_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "magnetismsigil")); AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/lightsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_BLOOD_LIGHT.get()), Ingredient.fromItems(BloodMagicItems.IMBUED_SLATE.get()), new ItemStack(BloodMagicItems.BLOOD_LIGHT_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "bloodlightsigil")); AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/airsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_AIR.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.AIR_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "airsigil")); + AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/sightsigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_SIGHT.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.SEER_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "seersigil")); // AlchemyArrayRecipeBuilder.array(BloodMagic.rl("textures/models/alchemyarrays/fastminersigil.png"), Ingredient.fromItems(BloodMagicItems.REAGENT_FAST_MINER.get()), Ingredient.fromItems(BloodMagicItems.REINFORCED_SLATE.get()), new ItemStack(BloodMagicItems.FAST_MINER_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "frostsigil")); // BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), new ItemStack(BloodMagicItems.WEAK_BLOOD_ORB.get()), AltarTier.ONE.ordinal(), 2000, 2, 1).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath // + "weakbloodorb")); diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/BloodAltarRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/BloodAltarRecipeProvider.java index e607b80e..7588ab8f 100644 --- a/src/main/java/wayoftime/bloodmagic/common/recipe/BloodAltarRecipeProvider.java +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/BloodAltarRecipeProvider.java @@ -23,7 +23,7 @@ public class BloodAltarRecipeProvider implements ISubRecipeProvider String basePath = "altar/"; // ONE - BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), new ItemStack(BloodMagicItems.WEAK_BLOOD_ORB.get()), AltarTier.ONE.ordinal(), 2000, 2, 1).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath + "weakbloodorb")); + BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.GEMS_DIAMOND), new ItemStack(BloodMagicItems.WEAK_BLOOD_ORB.get()), AltarTier.ONE.ordinal(), 2000, 5, 1).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath + "weakbloodorb")); BloodAltarRecipeBuilder.altar(Ingredient.fromTag(Tags.Items.STONE), new ItemStack(BloodMagicItems.SLATE.get()), AltarTier.ONE.ordinal(), 1000, 5, 5).build(consumer, new ResourceLocation(BloodMagic.MODID, basePath + "slate")); BloodAltarRecipeBuilder.altar(Ingredient.fromItems(Items.BUCKET), new ItemStack(BloodMagicBlocks.LIFE_ESSENCE_BUCKET.get()), AltarTier.ONE.ordinal(), 1000, 5, 0).build(consumer, BloodMagic.rl(basePath + "bucket_life")); diff --git a/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java b/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java index fce5ea2e..6e1f4b6a 100644 --- a/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java +++ b/src/main/java/wayoftime/bloodmagic/common/recipe/TartaricForgeRecipeProvider.java @@ -40,6 +40,7 @@ public class TartaricForgeRecipeProvider implements ISubRecipeProvider TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_MAGNETISM.get()), 600, 10, Ingredient.fromTag(Tags.Items.STRING), Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(Tags.Items.INGOTS_GOLD), Ingredient.fromTag(Tags.Items.STORAGE_BLOCKS_IRON)).build(consumer, BloodMagic.rl(basePath + "reagent_magnetism")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_FAST_MINER.get()), 128, 20, Ingredient.fromItems(Items.IRON_PICKAXE), Ingredient.fromItems(Items.IRON_AXE), Ingredient.fromItems(Items.IRON_SHOVEL), Ingredient.fromTag(Tags.Items.GUNPOWDER)).build(consumer, BloodMagic.rl(basePath + "reagent_fastminer")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_BLOOD_LIGHT.get()), 300, 10, Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE), Ingredient.fromItems(Items.TORCH), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE), Ingredient.fromTag(Tags.Items.DUSTS_REDSTONE)).build(consumer, BloodMagic.rl(basePath + "reagent_blood_light")); + TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicItems.REAGENT_SIGHT.get()), 64, 0, Ingredient.fromTag(Tags.Items.DUSTS_GLOWSTONE), Ingredient.fromTag(Tags.Items.GLASS), Ingredient.fromTag(Tags.Items.GLASS), Ingredient.fromItems(BloodMagicItems.DIVINATION_SIGIL.get())).build(consumer, BloodMagic.rl(basePath + "reagent_sight")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DEMON_CRUCIBLE.get()), 400, 100, Ingredient.fromItems(Items.CAULDRON), Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromTag(Tags.Items.GEMS_LAPIS), Ingredient.fromTag(Tags.Items.GEMS_DIAMOND)).build(consumer, BloodMagic.rl(basePath + "demon_crucible")); TartaricForgeRecipeBuilder.tartaricForge(new ItemStack(BloodMagicBlocks.DEMON_CRYSTALLIZER.get()), 500, 100, Ingredient.fromItems(BloodMagicBlocks.SOUL_FORGE.get()), Ingredient.fromTag(Tags.Items.STONE), Ingredient.fromTag(Tags.Items.GEMS_LAPIS), Ingredient.fromTag(Tags.Items.GLASS)).build(consumer, BloodMagic.rl(basePath + "demon_crystallizer")); diff --git a/src/main/java/wayoftime/bloodmagic/incense/EnumTranquilityType.java b/src/main/java/wayoftime/bloodmagic/incense/EnumTranquilityType.java new file mode 100644 index 00000000..0bdbe0ad --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/EnumTranquilityType.java @@ -0,0 +1,12 @@ +package wayoftime.bloodmagic.incense; + +public enum EnumTranquilityType +{ + PLANT(), + CROP(), + TREE(), + EARTHEN(), + WATER(), + FIRE(), + LAVA(),; +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/incense/IIncensePath.java b/src/main/java/wayoftime/bloodmagic/incense/IIncensePath.java new file mode 100644 index 00000000..ae5ef122 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/IIncensePath.java @@ -0,0 +1,15 @@ +package wayoftime.bloodmagic.incense; + +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface IIncensePath +{ + /** + * Goes from 0 to however far this path block can be from the altar while still + * functioning. 0 represents a block that can work when it is two blocks + * horizontally away from the altar. + */ + int getLevelOfPath(World world, BlockPos pos, BlockState state); +} diff --git a/src/main/java/wayoftime/bloodmagic/incense/ITranquilityHandler.java b/src/main/java/wayoftime/bloodmagic/incense/ITranquilityHandler.java new file mode 100644 index 00000000..557870e4 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/ITranquilityHandler.java @@ -0,0 +1,11 @@ +package wayoftime.bloodmagic.incense; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public interface ITranquilityHandler +{ + TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, BlockState state); +} diff --git a/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarComponent.java b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarComponent.java new file mode 100644 index 00000000..2bceb3f5 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarComponent.java @@ -0,0 +1,60 @@ +package wayoftime.bloodmagic.incense; + +import net.minecraft.block.Block; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; + +public class IncenseAltarComponent +{ + public final BlockPos offsetPos; + public final Block block; + + public IncenseAltarComponent(BlockPos offsetPos, Block block) + { + this.offsetPos = offsetPos; + this.block = block; + } + + public boolean doesBlockMatch(Block block) + { + return this.block == block; + } + + /** + * Base rotation is north. + */ + public BlockPos getOffset(Direction rotation) + { + return new BlockPos(this.getX(rotation), offsetPos.getY(), this.getZ(rotation)); + } + + public int getX(Direction direction) + { + switch (direction) + { + case EAST: + return -this.offsetPos.getZ(); + case SOUTH: + return -this.offsetPos.getX(); + case WEST: + return this.offsetPos.getZ(); + default: + return this.offsetPos.getX(); + } + } + + public int getZ(Direction direction) + { + switch (direction) + { + case EAST: + return this.offsetPos.getX(); + case SOUTH: + return -this.offsetPos.getZ(); + case WEST: + return -this.offsetPos.getX(); + default: + return this.offsetPos.getZ(); + } + } +} diff --git a/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarHandler.java b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarHandler.java new file mode 100644 index 00000000..eb68885f --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/IncenseAltarHandler.java @@ -0,0 +1,114 @@ +package wayoftime.bloodmagic.incense; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.Direction; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class IncenseAltarHandler +{ + public static Map> incenseComponentMap = new TreeMap<>(); + // Incense bonus maximum applied for the tier of blocks. + public static double[] incenseBonuses = new double[] { 0.2, 0.6, 1.2, 2, 3, 4.5 }; + public static double[] tranquilityRequired = new double[] { 0, 6, 14.14, 28, 44.09, 83.14 }; + public static int[] roadsRequired = new int[] { 0, 1, 4, 6, 8, 10, 12 }; // TODO: Change for when the roads are + // fully implemented + + public static void registerIncenseComponent(int altarLevel, IncenseAltarComponent component) + { + if (incenseComponentMap.containsKey(altarLevel)) + { + incenseComponentMap.get(altarLevel).add(component); + } else + { + List list = new ArrayList<>(); + list.add(component); + incenseComponentMap.put(altarLevel, list); + } + } + + public static void registerIncenseComponent(int altarLevel, BlockPos offsetPos, Block block, BlockState state) + { + registerIncenseComponent(altarLevel, new IncenseAltarComponent(offsetPos, block)); + } + + public static double getMaxIncenseBonusFromComponents(World world, BlockPos pos) + { + double accumulatedBonus = 0; + for (int i = 0; i < incenseBonuses.length; i++) + { + double previousBonus = (i <= 0 ? 0 : incenseBonuses[i - 1]); + double nextBonus = incenseBonuses[i]; + if (!incenseComponentMap.containsKey(i)) + { + accumulatedBonus += (nextBonus - previousBonus); + } else + { + boolean hasAllComponentsThisTier = true; + for (IncenseAltarComponent component : incenseComponentMap.get(i)) + { + BlockPos offsetPos = pos.add(component.getOffset(Direction.NORTH)); + BlockState state = world.getBlockState(offsetPos); + Block block = state.getBlock(); + if (component.doesBlockMatch(block)) + { + hasAllComponentsThisTier = false; + } else + { + accumulatedBonus += (nextBonus - previousBonus) / incenseComponentMap.get(i).size(); + } + } + + if (!hasAllComponentsThisTier) + { + break; + } + } + } + + return accumulatedBonus; + } + + public static double getMaxIncenseBonusFromRoads(int roads) + { + double previousBonus = 0; + for (int i = 0; i < incenseBonuses.length; i++) + { + if (roads >= roadsRequired[i]) + { + previousBonus = incenseBonuses[i]; + } else + { + return previousBonus; + } + } + + return previousBonus; + } + + public static double getIncenseBonusFromComponents(World world, BlockPos pos, double tranquility, int roads) + { + double maxBonus = Math.min(getMaxIncenseBonusFromComponents(world, pos), getMaxIncenseBonusFromRoads(roads)); + double possibleBonus = 0; + + for (int i = 0; i < incenseBonuses.length; i++) + { + if (tranquility >= tranquilityRequired[i]) + { + possibleBonus = incenseBonuses[i]; + } else if (i >= 1) + { + possibleBonus += (incenseBonuses[i] - possibleBonus) * (tranquility - tranquilityRequired[i - 1]) / (tranquilityRequired[i] - tranquilityRequired[i - 1]); + break; + } + } + + return Math.min(maxBonus, possibleBonus); + } +} \ No newline at end of file diff --git a/src/main/java/wayoftime/bloodmagic/incense/IncenseTranquilityRegistry.java b/src/main/java/wayoftime/bloodmagic/incense/IncenseTranquilityRegistry.java new file mode 100644 index 00000000..86fe5f01 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/IncenseTranquilityRegistry.java @@ -0,0 +1,33 @@ +package wayoftime.bloodmagic.incense; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +public class IncenseTranquilityRegistry +{ + public static List handlerList = new ArrayList<>(); + + public static void registerTranquilityHandler(ITranquilityHandler handler) + { + handlerList.add(handler); + } + + public static TranquilityStack getTranquilityOfBlock(World world, BlockPos pos, Block block, BlockState state) + { + for (ITranquilityHandler handler : handlerList) + { + TranquilityStack tranq = handler.getTranquilityOfBlock(world, pos, block, state); + if (tranq != null) + { + return tranq; + } + } + + return null; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/incense/TranquilityStack.java b/src/main/java/wayoftime/bloodmagic/incense/TranquilityStack.java new file mode 100644 index 00000000..2d066476 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/incense/TranquilityStack.java @@ -0,0 +1,13 @@ +package wayoftime.bloodmagic.incense; + +public class TranquilityStack +{ + public final EnumTranquilityType type; + public double value; + + public TranquilityStack(EnumTranquilityType type, double value) + { + this.type = type; + this.value = value; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/registry/ModTranquilityHandlers.java b/src/main/java/wayoftime/bloodmagic/registry/ModTranquilityHandlers.java new file mode 100644 index 00000000..b41925a3 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/registry/ModTranquilityHandlers.java @@ -0,0 +1,31 @@ +package wayoftime.bloodmagic.registry; + +import net.minecraft.block.FireBlock; +import net.minecraft.block.GrassBlock; +import net.minecraft.block.LeavesBlock; +import net.minecraft.tags.BlockTags; +import wayoftime.bloodmagic.api.impl.BloodMagicAPI; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.incense.IncenseTranquilityRegistry; +import wayoftime.bloodmagic.incense.TranquilityStack; + +public class ModTranquilityHandlers +{ + + public static void init() + { + IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof LeavesBlock + ? new TranquilityStack(EnumTranquilityType.PLANT, 1.0D) + : null); + IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof FireBlock + ? new TranquilityStack(EnumTranquilityType.FIRE, 1.0D) + : null); + IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> block instanceof GrassBlock + ? new TranquilityStack(EnumTranquilityType.EARTHEN, 0.5D) + : null); + IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> BlockTags.LOGS.contains(block) + ? new TranquilityStack(EnumTranquilityType.TREE, 1.0D) + : null); + IncenseTranquilityRegistry.registerTranquilityHandler((world, pos, block, state) -> BloodMagicAPI.INSTANCE.getValueManager().getTranquility().get(state)); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/tile/TileIncenseAltar.java b/src/main/java/wayoftime/bloodmagic/tile/TileIncenseAltar.java new file mode 100644 index 00000000..6e8ed14e --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/tile/TileIncenseAltar.java @@ -0,0 +1,206 @@ +package wayoftime.bloodmagic.tile; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntityType; +import net.minecraft.util.Direction; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.server.ServerWorld; +import net.minecraftforge.registries.ObjectHolder; +import wayoftime.bloodmagic.incense.EnumTranquilityType; +import wayoftime.bloodmagic.incense.IIncensePath; +import wayoftime.bloodmagic.incense.IncenseAltarHandler; +import wayoftime.bloodmagic.incense.IncenseTranquilityRegistry; +import wayoftime.bloodmagic.incense.TranquilityStack; +import wayoftime.bloodmagic.ritual.AreaDescriptor; +import wayoftime.bloodmagic.util.helper.PlayerSacrificeHelper; + +public class TileIncenseAltar extends TileInventory implements ITickableTileEntity +{ + public static int maxCheckRange = 5; + public AreaDescriptor incenseArea = new AreaDescriptor.Rectangle(new BlockPos(-5, -5, -5), 11); + public Map tranquilityMap = new HashMap<>(); + + public double incenseAddition = 0; // Self-sacrifice is multiplied by 1 plus this value. + public double tranquility = 0; + public int roadDistance = 0; // Number of road blocks laid down + + @ObjectHolder("bloodmagic:incensealtar") + public static TileEntityType TYPE; + + public TileIncenseAltar(TileEntityType type) + { + super(type, 1, "incensealtar"); + } + + public TileIncenseAltar() + { + this(TYPE); + } + + @Override + public void tick() + { + AxisAlignedBB aabb = incenseArea.getAABB(getPos()); + List playerList = getWorld().getEntitiesWithinAABB(PlayerEntity.class, aabb); + if (playerList.isEmpty()) + { + return; + } + + if (getWorld().getGameTime() % 100 == 0) + { + recheckConstruction(); + } + + boolean hasPerformed = false; + + for (PlayerEntity player : playerList) + { + if (PlayerSacrificeHelper.incrementIncense(player, 0, incenseAddition, incenseAddition / 100)) + { + hasPerformed = true; + } + } + + if (hasPerformed) + { + if (getWorld().rand.nextInt(4) == 0 && getWorld() instanceof ServerWorld) + { + ServerWorld server = (ServerWorld) getWorld(); + server.spawnParticle(ParticleTypes.FLAME, pos.getX() + 0.5, pos.getY() + 1.2, pos.getZ() + 0.5, 1, 0.02, 0.03, 0.02, 0); + } + } + } + + @Override + public void deserialize(CompoundNBT tag) + { + super.deserialize(tag); + tranquility = tag.getDouble("tranquility"); + incenseAddition = tag.getDouble("incenseAddition"); + } + + @Override + public CompoundNBT serialize(CompoundNBT tag) + { + super.serialize(tag); + tag.putDouble("tranquility", tranquility); + tag.putDouble("incenseAddition", incenseAddition); + return tag; + } + + public void recheckConstruction() + { + // TODO: Check the physical construction of the incense altar to determine the + // maximum length. + int maxLength = 11; // Max length of the path. The path starts two blocks away from the center + // block. + int yOffset = 0; + + Map tranquilityMap = new HashMap<>(); + + for (int currentDistance = 2; currentDistance < currentDistance + maxLength; currentDistance++) + { + boolean canFormRoad = false; + + for (int i = -maxCheckRange + yOffset; i <= maxCheckRange + yOffset; i++) + { + BlockPos verticalPos = pos.add(0, i, 0); + + canFormRoad = true; + level: for (int index = 0; index < 4; index++) + { + Direction horizontalFacing = Direction.byHorizontalIndex(index); + BlockPos facingOffsetPos = verticalPos.offset(horizontalFacing, currentDistance); + for (int j = -1; j <= 1; j++) + { + BlockPos offsetPos = facingOffsetPos.offset(horizontalFacing.rotateY(), j); + BlockState state = getWorld().getBlockState(offsetPos); + Block block = state.getBlock(); + if (!(block instanceof IIncensePath && ((IIncensePath) block).getLevelOfPath(getWorld(), offsetPos, state) >= currentDistance - 2)) + { + canFormRoad = false; + break level; + } + } + } + + if (canFormRoad) + { + yOffset = i; + break; + } + } + + if (canFormRoad) + { + for (int i = -currentDistance; i <= currentDistance; i++) + { + for (int j = -currentDistance; j <= currentDistance; j++) + { + if (Math.abs(i) != currentDistance && Math.abs(j) != currentDistance) + { + continue; // TODO: Can make this just set j to currentDistance to speed it up. + } + + for (int y = yOffset; y <= 2 + yOffset; y++) + { + BlockPos offsetPos = pos.add(i, y, j); + BlockState state = getWorld().getBlockState(offsetPos); + Block block = state.getBlock(); + TranquilityStack stack = IncenseTranquilityRegistry.getTranquilityOfBlock(getWorld(), offsetPos, block, state); + if (stack != null) + { + if (!tranquilityMap.containsKey(stack.type)) + { + tranquilityMap.put(stack.type, stack.value); + } else + { + tranquilityMap.put(stack.type, tranquilityMap.get(stack.type) + stack.value); + } + } + } + } + } + } else + { + roadDistance = currentDistance - 2; + break; + } + } + + this.tranquilityMap = tranquilityMap; + + double totalTranquility = 0; + for (Entry entry : tranquilityMap.entrySet()) + { + totalTranquility += entry.getValue(); + } + + if (totalTranquility < 0) + { + return; + } + + double appliedTranquility = 0; + for (Entry entry : tranquilityMap.entrySet()) + { + appliedTranquility += Math.sqrt(entry.getValue()); + } + + double bonus = IncenseAltarHandler.getIncenseBonusFromComponents(getWorld(), pos, appliedTranquility, roadDistance); + incenseAddition = bonus; + this.tranquility = appliedTranquility; + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/IncenseHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/IncenseHelper.java new file mode 100644 index 00000000..4e071189 --- /dev/null +++ b/src/main/java/wayoftime/bloodmagic/util/helper/IncenseHelper.java @@ -0,0 +1,55 @@ +package wayoftime.bloodmagic.util.helper; + +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import wayoftime.bloodmagic.util.Constants; + +public class IncenseHelper +{ + + public static double getCurrentIncense(PlayerEntity player) + { + CompoundNBT data = player.getPersistentData(); + if (data.contains(Constants.NBT.CURRENT_INCENSE)) + { + return data.getDouble(Constants.NBT.CURRENT_INCENSE); + } + + return 0; + } + + public static void setCurrentIncense(PlayerEntity player, double amount) + { + CompoundNBT data = player.getPersistentData(); + data.putDouble(Constants.NBT.CURRENT_INCENSE, amount); + } + + public static void setMaxIncense(PlayerEntity player, double amount) + { + CompoundNBT data = player.getPersistentData(); + data.putDouble(Constants.NBT.MAX_INCENSE, amount); + } + + public static double getMaxIncense(PlayerEntity player) + { + CompoundNBT data = player.getPersistentData(); + if (data.contains(Constants.NBT.MAX_INCENSE)) + { + return data.getDouble(Constants.NBT.MAX_INCENSE); + } + return 0; + } + + public static void setHasMaxIncense(ItemStack stack, PlayerEntity player, boolean isMax) + { + stack = NBTHelper.checkNBT(stack); + stack.getTag().putBoolean(Constants.NBT.HAS_MAX_INCENSE, isMax); + } + + public static boolean getHasMaxIncense(ItemStack stack) + { + stack = NBTHelper.checkNBT(stack); + return stack.getTag().getBoolean(Constants.NBT.HAS_MAX_INCENSE); + } +} diff --git a/src/main/java/wayoftime/bloodmagic/util/helper/PlayerSacrificeHelper.java b/src/main/java/wayoftime/bloodmagic/util/helper/PlayerSacrificeHelper.java index 54a0c5b2..0f247bbc 100644 --- a/src/main/java/wayoftime/bloodmagic/util/helper/PlayerSacrificeHelper.java +++ b/src/main/java/wayoftime/bloodmagic/util/helper/PlayerSacrificeHelper.java @@ -19,35 +19,35 @@ public class PlayerSacrificeHelper public static double getPlayerIncense(PlayerEntity player) { - return 0; -// return IncenseHelper.getCurrentIncense(player); +// return 0; + return IncenseHelper.getCurrentIncense(player); } public static void setPlayerIncense(PlayerEntity player, double amount) { -// IncenseHelper.setCurrentIncense(player, amount); + IncenseHelper.setCurrentIncense(player, amount); } public static boolean incrementIncense(PlayerEntity player, double min, double incenseAddition, double increment) { - return true; -// double amount = getPlayerIncense(player); -// if (amount < min || amount >= incenseAddition) -// { -// return false; -// } -// -// amount = amount + Math.min(increment, incenseAddition - amount); -// setPlayerIncense(player, amount); -// -// if (amount == incenseAddition) -// { -// IncenseHelper.setMaxIncense(player, incenseAddition); -// } -// // System.out.println("Amount of incense: " + amount + ", Increment: " + -// // increment); -// // return true; + double amount = getPlayerIncense(player); + if (amount < min || amount >= incenseAddition) + { + return false; + } + + amount = amount + Math.min(increment, incenseAddition - amount); + setPlayerIncense(player, amount); + + if (amount == incenseAddition) + { + IncenseHelper.setMaxIncense(player, incenseAddition); + } + // System.out.println("Amount of incense: " + amount + ", Increment: " + + // increment); + + return true; } /** @@ -74,8 +74,7 @@ public class PlayerSacrificeHelper if (health > maxHealth / 10.0) { float sacrificedHealth = health - maxHealth / 10.0f; - int lpAdded = (int) (sacrificedHealth * ConfigHandler.values.sacrificialDaggerConversion - * getModifier(amount)); + int lpAdded = (int) (sacrificedHealth * ConfigHandler.values.sacrificialDaggerConversion * getModifier(amount)); IBloodAltar altar = getAltar(player.getEntityWorld(), player.getPosition()); if (altar != null) diff --git a/src/main/resources/assets/bloodmagic/blockstates/incensealtar.json b/src/main/resources/assets/bloodmagic/blockstates/incensealtar.json new file mode 100644 index 00000000..a625a8b1 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/blockstates/incensealtar.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "bloodmagic:block/incensealtar" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar.png new file mode 100644 index 00000000..617e26c0 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar1.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar1.png new file mode 100644 index 00000000..cd47dfd4 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar1.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar2.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar2.png new file mode 100644 index 00000000..1a4ae8cf Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar2.png differ diff --git a/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar3.png b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar3.png new file mode 100644 index 00000000..a8cb9062 Binary files /dev/null and b/src/main/resources/assets/bloodmagic/images/entries/utility/incense_altar3.png differ diff --git a/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.json b/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.json deleted file mode 100644 index 5525b347..00000000 --- a/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "block/cube_all", - "textures": { - "all": "bloodmagic:blocks/IncenseAltar" - } -} - diff --git a/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj b/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj index d78471a9..3c6790d1 100644 --- a/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj +++ b/src/main/resources/assets/bloodmagic/models/block/blockincensealtar.obj @@ -1,6 +1,6 @@ # Blender v2.76 (sub 0) OBJ File: '' # www.blender.org -mtllib BlockIncenseAltar.mtl +mtllib blockincensealtar.mtl o BlockIncenseAltar_(1) v 0.659375 0.159375 0.871875 v 0.659375 -0.000000 0.871875 diff --git a/src/main/resources/assets/bloodmagic/models/block/incensealtar.json b/src/main/resources/assets/bloodmagic/models/block/incensealtar.json new file mode 100644 index 00000000..4f824ef3 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/block/incensealtar.json @@ -0,0 +1,10 @@ +{ + "parent": "block/block", + "loader": "forge:obj", + "flip-v": true, + "model": "bloodmagic:models/block/blockincensealtar.obj", + "textures": { + "default": "bloodmagic:models/incensealtar", + "particle": "#default" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/models/item/incensealtar.json b/src/main/resources/assets/bloodmagic/models/item/incensealtar.json new file mode 100644 index 00000000..2ae61ae6 --- /dev/null +++ b/src/main/resources/assets/bloodmagic/models/item/incensealtar.json @@ -0,0 +1,3 @@ +{ + "parent": "bloodmagic:block/incensealtar" +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/textures/item/ceremonialdagger.png b/src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger_ceremonial.png similarity index 100% rename from src/main/resources/assets/bloodmagic/textures/item/ceremonialdagger.png rename to src/main/resources/assets/bloodmagic/textures/item/sacrificialdagger_ceremonial.png diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/utility.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/utility.json new file mode 100644 index 00000000..82cef237 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/categories/utility.json @@ -0,0 +1,6 @@ +{ + "name": "Utility Blocks", + "description": "", + "icon": "bloodmagic:incensealtar", + "sortnum": 5 +} \ No newline at end of file diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/bloodaltar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/bloodaltar.json index 9504e3ea..5e7f1f7d 100644 --- a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/bloodaltar.json +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/altar/bloodaltar.json @@ -30,7 +30,8 @@ }, { "type": "crafting", - "recipe": "bloodmagic:sacrificial_dagger" + "recipe": "bloodmagic:sacrificial_dagger", + "anchor": "knife" }, { "type": "text", diff --git a/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/incense_altar.json b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/incense_altar.json new file mode 100644 index 00000000..7e928500 --- /dev/null +++ b/src/main/resources/data/bloodmagic/patchouli_books/guide/en_us/entries/utility/incense_altar.json @@ -0,0 +1,83 @@ +{ + "name": "Incense Altar", + "icon": "bloodmagic:incensealtar", + "category": "utility", + "pages": [ + { + "type": "text", + "text": " The $(item)Incense Altar$() is a multiblock structure that can be used to boost your self-sacrificing at a $(l:altar/bloodaltar)Blood Altar.$(/l) By standing nearby your setup, the $(item)Incense Altar$() will calm your soul based on the area's total \"Tranquility\"." + }, + { + "type": "crafting", + "recipe": "bloodmagic:incense_altar" + }, + { + "type": "text", + "text": " The basic Tier 1 setup of an $(item)Incense Altar$() is the altar itself; place down the altar anywhere (good to set up a 3x3 block platform, which will be helpful later, but not necessary) and stay within a 5 block radius of the altar.$(br2) While the altar is working it will emit flame particles from its top and transform your $(l:altar/bloodaltar#knife)Sacrificial Knife.$(/l) Once your knife starts to shine, holding and releasing right click near a Blood Altar will sacrifice 90% of your health all at once." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar1.png" + ], + "title": "Basic Setup", + "border": true, + "text": "Basic setup showing the 3x3 square of blocks before the path blocks." + }, + { + "type": "text", + "text": " What is more, based on the total Tranquility of the area you will receive a bonus to the LP added to the altar. Hovering over the $(item)Incense Altar$() with either a $(l:sigil/divination)Divination Sigil$(/l) or $(item)Seer's Sigil$() will display the total Tranquility of the setup (top number) and the percentage bonus received when sacrificing (bottom number). When you sacrifice, it will take the LP that you would normally get and multiply it by (1 + bonus/100)." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar2.png" + ], + "title": "Incense HUD", + "border": true, + "text": "Incense HUD, default in top left corner, showing a self-sacrifice bonus of +20%." + }, + { + "type": "text", + "text": " \"But Way, how can I increase this bonus?\" Why, by increasing the tranquility of the surrounding area! ...That may be a bit ambiguous.$(br2) To increase the Tranquility of the area, you need to place paths leading out from your Incense Altar. These paths need to be constructed from a three wide set of Path blocks, such as the $(item)Wooden Path$(), that extend from the 3x3 set of solid reference blocks in all four cardinal directions." + }, + { + "type": "crafting", + "recipe": "bloodmagic:path/path_wood" + }, + { + "type": "text", + "text": " Each new \"ring\" of path blocks follow a set of rules:$(li)All path blocks on the same ring have to be on the same level.$(li)The next ring of path blocks have to be a max of 5 blocks higher/lower than the previous ring.$(li)The blocks that are the same level or up to two blocks above the path blocks' ring count towards the total Tranquility - these are indicated by the glass blocks in the picture." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar.png" + ], + "title": "Incense Altar", + "border": true, + "text": "Incense Altar with different Path orientations." + }, + { + "type": "text", + "text": "Furthermore:$(li)The efficacy of each type of path block only lasts a certain distance: wooden paths can only go three rings, stone paths for up to five rings, worn stone paths for seven rings, and obsidian paths for nine rings.$(bn2) Now obviously, not every type of block will count towards your Tranquility. Not just any ol' cobble will do, no! We need crops, dirt, and even... lava?" + }, + { + "type": "text", + "text": " There are multiple block categories that count towards the total Tranquility. In no particular order, they are: Plants, Crops, Trees, Earthen, Water, Fire, and Lava. The Incense Altar will look at all of the blocks that are within its range (set by the path blocks) and tabulate how much total Tranquility of each Type there is. Once done, it will calculate the total Tranquility by square-rooting the Tranquility of each type and then adding them together." + }, + { + "type": "text", + "text": "This means that for later-game setups, it is best to have many different types of Tranquility. Although other mods may add their own, and more will be added later, the blocks that contribute to Tranquility are: Lava, Water, Life Essence, Netherrack, Dirt, Farmland, Potatoes, Carrots, Wheat, Netherwart, Beetroots, Leaves, Logs, Fire, and Grass." + }, + { + "type": "image", + "images": [ + "bloodmagic:images/entries/utility/incense_altar3.png" + ], + "title": "Incense Altar Setup", + "border": true, + "text": "Late-game Incense Altar setup with many different levels." + } + ] +} \ No newline at end of file