From ff70c7a57dfd46f2883963e4dc5572db54b5bf81 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:45:12 +0800 Subject: [PATCH 01/81] update zh_cn --- .../assets/hexcasting/lang/zh_cn.flatten.json5 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 7715983dec..22dd3ea028 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -606,6 +606,7 @@ "scroll.scribble": "卷轴:被涂写", "impetus.fletcher.tick": "制箭师促动石:咔哒", "impetus.redstone.register": "牧师促动石:叮~", + "impetus.redstone.clear": "牧师促动石:清空", "lore_fragment.read": "故事残卷:被阅读", "flight.ambience": "玩家:飞翔", "flight.finish": "飞翔结束", @@ -815,6 +816,7 @@ flight: "翱翔", "flight/range": "隐士之飞行", "flight/time": "旅者之飞行", + "flight/can_fly": "飞行员之纯化", lightning: "召雷", summon_rain: "召雨", @@ -1598,8 +1600,8 @@ quenching_allays: { "1": "$(l)它们就是小块媒质。/$我怎么没早点发现呢?它们——我是一堆血肉再加上一小点……是被赐予了一小点的思维,但悦灵是能维持自稳的媒质集群,再被按到一小点血肉上去。所有东西就都说得通了——它们对媒质的趋向性,它们对音乐的种种反应,$(l)我现在理解了/$,$(l)但/$为何前人$(l)没有/$?", "2": "理解这点后,唯一$(l)正确/$的选择就是去征服它们奇异的意识——它们奇异的自我——也是它们的全部、一个意识、一个自我、一段尾声。它们的性状似乎揭示了某些东西。我能……我能使用它们压缩$(media)媒质/$,将两束思维叠放在一起,形体与认知,多与一。$(br2)这个过程不知怎么的会自行产生$(media)媒质/$。这是怎么回事?也许——也许是$(l)我/$的缘故,是完成这项任务的过程——", - "3": "它不重要。我不重要。它们不重要,重要的只有功用。这就是了。$(br2)这肯定相当痛苦。", - "4": "所得的产物十分脆弱。直接破坏会将其打碎成碎片,$(thing)时运/$则能增加产量……如果需要获得方块本身,那要有精准采集才行。$(br2)产生的碎片相当于将 3 个$(l:items/amethyst)$(item)充能紫水晶/$拼在一起。方块则相当于 4 个碎片。", + "3": "它不重要。我不重要。它们不重要,重要的只有功用。这就是了。$(br2)这肯定相当痛苦。$(br2)十份$(l:items/amethyst)$(item)紫水晶粉/$,就是启动如此恶劣仪式的代价。", + "4": "所得的产物十分脆弱。直接破坏会将其打碎成碎片,$(thing)时运/$则能增加产量……如果需要获得方块本身,那要有精准采集才行。$(br2)产生的碎片相当于 3 个$(l:items/amethyst)$(item)充能紫水晶/$拼在一起。方块则相当于 4 个碎片。", "5": "它们变幻莫测,好像会在我的手中不断变形闪烁,若是给予它们来自另一种$(media)媒质/$形态的引导,它们便会变成对应的形态,且$(media)媒质/$总量前后不变。", }, @@ -1961,6 +1963,10 @@ "time.1": "受时间限制的飞行法术。", "time.2": "第二参数代表持续时间(以秒计),在此限制内,法术能保持稳定。持续时间超过限制就会结束该法术,滞空的物体会直接坠向地面。$(br2)此法术相对较昂贵,每秒持续时间消耗大约 1 个$(l:items/amethyst)$(item)充能紫水晶/$。我觉得它极其适合长途旅行。", + + // Putting this in this category instead of elsewhere -- see sentinel chapter also containing some reflections/nonspells + "can_fly.1": "检查玩家是否处于$(l:patterns/spells/flight#hexcasting:flight/range)隐士之飞行/$或$(l:patterns/spells/flight#hexcasting:flight/time)旅者之飞行/$的影响之下。", + "can_fly.2": "不会检查玩家是否能以其他方式飞行。$(br2)我不太清楚这个图案有什么用途,但我相信,愿意用它的人自会清楚。" }, create_lava: { From 52bcd45f27f3428528badaff046fa9b5492df19d Mon Sep 17 00:00:00 2001 From: Skye Date: Tue, 26 Nov 2024 17:50:21 +0900 Subject: [PATCH 02/81] Don't use BufferedImage --- .../client/render/PatternTextureManager.java | 51 ++++++++----------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/PatternTextureManager.java b/Common/src/main/java/at/petrak/hexcasting/client/render/PatternTextureManager.java index 8486124920..b59e1e8e75 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/PatternTextureManager.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/PatternTextureManager.java @@ -4,11 +4,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.DynamicTexture; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.FastColor; +import net.minecraft.util.Mth; import net.minecraft.util.Tuple; import net.minecraft.world.phys.Vec2; -import java.awt.*; -import java.awt.image.BufferedImage; +import java.awt.geom.Line2D; import java.util.List; import java.util.*; import java.util.concurrent.*; @@ -86,46 +87,38 @@ private static Map registerTextures(String patTextureK } private static NativeImage drawLines(List points, HexPatternPoints staticPoints, float unscaledLineWidth, int resPerUnit) { - BufferedImage img = new BufferedImage((int)(staticPoints.fullWidth*resPerUnit), (int)(staticPoints.fullHeight*resPerUnit), BufferedImage.TYPE_INT_ARGB); - Graphics2D g2d = img.createGraphics(); - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - - g2d.setColor(new Color(0xFF_FFFFFF)); // set it to white so we can reuse the texture with different colors - g2d.setStroke(new BasicStroke(unscaledLineWidth * resPerUnit, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + NativeImage nativeImage = new NativeImage((int)(staticPoints.fullWidth*resPerUnit), (int)(staticPoints.fullHeight*resPerUnit), true); for (int i = 0; i < points.size() - 1; i++) { Tuple pointFrom = getTextureCoordinates(points.get(i), staticPoints, resPerUnit); Tuple pointTo = getTextureCoordinates(points.get(i+1), staticPoints, resPerUnit); - g2d.drawLine(pointFrom.getA(), pointFrom.getB(), pointTo.getA(), pointTo.getB()); + drawLine(nativeImage, pointFrom.getA(), pointFrom.getB(), pointTo.getA(), pointTo.getB(), unscaledLineWidth * resPerUnit); } - g2d.dispose(); - NativeImage nativeImage = new NativeImage(img.getWidth(), img.getHeight(), true); - for (int y = 0; y < img.getHeight(); y++) - for (int x = 0; x < img.getWidth(); x++) - nativeImage.setPixelRGBA(x, y, img.getRGB(x, y)); return nativeImage; } + private static void drawLine(NativeImage image, int x0, int y0, int x1, int y1, float width) { + var line = new Line2D.Float(x0, y0, x1, y1); + var bounds = line.getBounds(); + double halfWidth = width / 2; + for (int x = (int) (bounds.x - width - 1); x < (int) (bounds.x + bounds.width + width + 1); x++) { + for (int y = (int) (bounds.y - width - 1); y < (int) (bounds.y + bounds.height + width + 1); y++) { + double dist = line.ptSegDist(x, y); + int alpha = (int) (Mth.clamp(halfWidth - dist + 0.5, 0, 1) * 255); + if (alpha > 0) { + int oldAlpha = FastColor.ARGB32.alpha(image.getPixelRGBA(x, y)); + int newAlpha = Math.max(oldAlpha, alpha); + image.setPixelRGBA(x, y, 0xFFFFFF | (newAlpha << 24)); + } + } + } + } + private static Tuple getTextureCoordinates(Vec2 point, HexPatternPoints staticPoints, int resPerUnit) { int x = (int) ( point.x * resPerUnit); int y = (int) ( point.y * resPerUnit); return new Tuple<>(x, y); } - // keeping this around just in case we ever decide to put the dots in the textures instead of dynamic - private static void drawHexagon(Graphics2D g2d, int x, int y, int radius) { - int fracOfCircle = 6; - Polygon hexagon = new Polygon(); - - for (int i = 0; i < fracOfCircle; i++) { - double theta = (i / (double) fracOfCircle) * Math.PI * 2; - int hx = (int) (x + Math.cos(theta) * radius); - int hy = (int) (y + Math.sin(theta) * radius); - hexagon.addPoint(hx, hy); - } - - g2d.fill(hexagon); - } - public static void repaint() { repaintIndex++; patternTexturesToAdd.clear(); From 29ab6c4fbf159c8e44c4956697300a6a815a3b41 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Sat, 30 Nov 2024 20:15:41 +0800 Subject: [PATCH 03/81] zh_cn lang: fix tag name --- .../main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 22dd3ea028..4b630de191 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -268,7 +268,7 @@ }, "tag.item.hexcasting": { - brainswept_circle_components: "剥离意识环组件", + brainswept_circle_components: "剥离意识所得法术环组件", directrices: "导向石", grants_root_advancement: "给予根进度", impeti: "促动石", From 77e46173f7a22fd28c91d514b57ab46af4726479 Mon Sep 17 00:00:00 2001 From: garyantonyo Date: Mon, 2 Dec 2024 12:14:15 -0500 Subject: [PATCH 04/81] Fixes #671 The predicate now tests if objects in the inventory are the same item same tags instead of same object ref. --- .../hexcasting/common/casting/actions/spells/OpPlaceBlock.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt index e4d761452b..d16e173a21 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt @@ -80,11 +80,11 @@ object OpPlaceBlock : SpellAction { UseOnContext(env.world, caster as? ServerPlayer, env.otherHand, spoofedStack, blockHit) val placeContext = BlockPlaceContext(itemUseCtx) if (bstate.canBeReplaced(placeContext)) { - if (env.withdrawItem({ it == placeeStack }, 1, false)) { + if (env.withdrawItem({ ItemStack.isSameItemSameTags(it, placeeStack) }, 1, false)) { val res = spoofedStack.useOn(placeContext) if (res != InteractionResult.FAIL) { - env.withdrawItem({ it == placeeStack }, 1, true) + env.withdrawItem({ ItemStack.isSameItemSameTags(it, placeeStack) }, 1, true) env.world.playSound( caster as? ServerPlayer, From ed3fd4089aa84aeb9f8dedb53b18e6a02c57f0e3 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 4 Dec 2024 00:37:03 -0500 Subject: [PATCH 05/81] Reword circle explanation to fit new behavior --- .../main/resources/assets/hexcasting/lang/en_us.flatten.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 2eb861e346..91e7df9ff3 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -1557,7 +1557,7 @@ spellcircles: { "1": "I KNOW what the $(l:items/slate)$(item)slates/$ are for. The grand assemblies lost to time. The patterns scribed on them can be actuated in sequence, automatically. Thought and power ricocheting through, one by one by one by one by one by through and through and THROUGH AND -- I must not I must not I should know better than to think that way.", - "2": "To start the ritual I need an $(l:greatwork/impetus)$(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(l:items/slate)$(item)slates/$ or other blocks suitable for the energies, one by one, collecting any patterns it finds. Once the wave circles back around to the $(l:greatwork/impetus)$(item)Impetus/$, all the patterns encountered are cast in order.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.", + "2": "To start the ritual I need an $(l:greatwork/impetus)$(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(l:items/slate)$(item)slates/$ or other blocks suitable for the energies, one by one, casting any patterns it finds.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.", "3": "As a result, the outline of the spell \"circle\" may be any closed shape, concave or convex, and it may face any direction. In fact, with the application of certain other blocks it is possible to make a spell circle that spans all three dimensions. I doubt such an oddity has very much use, but I must allocate myself a bit of vapid levity to encourage my crude mind to continue my work.", "4": "Miracle of miracles, the circle will withdraw _media neither from my inventory nor my mind. Instead, crystallized shards of _media must be provided to the $(l:greatwork/impetus)$(item)Impetus/$ via hopper, or other such artifice.$(br2)The application of a $(l:items/lens)$(item)Scrying Lens/$ will show how much _media is inside an $(l:greatwork/impetus)$(item)Impetus/$, in units of dust.", "5": "However, a spell cast from a circle does have one major limitation: it is unable to affect anything outside of the circle's bounds. That is, it cannot interact with anything outside of the cuboid of minimum size which encloses every block composing it (so a concave spell circle can still affect things in the concavity).", From 8035cf8a657cfd856160c4fe9ac3d9e47dbd0943 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 4 Dec 2024 00:39:42 -0500 Subject: [PATCH 06/81] Subtitle for hexcasting.subtitles.casting.cast.fail --- .../main/resources/assets/hexcasting/lang/en_us.flatten.json5 | 1 + 1 file changed, 1 insertion(+) diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 91e7df9ff3..4f580a8f73 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -586,6 +586,7 @@ add_segment: "Adding line", }, cast: { + fail: "Mishap crunches", normal: "Action hums", spell: "Spell boinks", hermes: "Hermes' twangs", From 3cbfb3f3d7a930b6e71f2461b63478c870542f8a Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 4 Dec 2024 00:41:57 -0500 Subject: [PATCH 07/81] Add recipes for bamboo and cherry staff to book entry --- .../patchouli_books/thehexbook/en_us/entries/items/staff.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json index 9e89746d5a..8ea8dab475 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/staff.json @@ -24,6 +24,8 @@ "hexcasting:staff/crimson", "hexcasting:staff/warped", "hexcasting:staff/mangrove", + "hexcasting:staff/bamboo", + "hexcasting:staff/cherry", "hexcasting:staff/edified" ] } From d1bc70ffc846073a8d3872a91a606367d609b6e0 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 4 Dec 2024 00:59:29 -0500 Subject: [PATCH 08/81] Properly rotate amethyst sconce model --- .../blockstates/amethyst_sconce.json | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json b/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json index af52410929..10507061f7 100644 --- a/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json +++ b/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json @@ -1,7 +1,30 @@ { "variants": { - "": { + "facing=down": { + "model": "hexcasting:block/amethyst_sconce", + "x": 180 + }, + "facing=east": { + "model": "hexcasting:block/amethyst_sconce", + "x": 90, + "y": 90 + }, + "facing=north": { + "model": "hexcasting:block/amethyst_sconce", + "x": 90 + }, + "facing=south": { + "model": "hexcasting:block/amethyst_sconce", + "x": 90, + "y": 180 + }, + "facing=up": { "model": "hexcasting:block/amethyst_sconce" + }, + "facing=west": { + "model": "hexcasting:block/amethyst_sconce", + "x": 90, + "y": 270 } } } \ No newline at end of file From bf6fd15ee7bb1933c9b730822f9f5b5fe6b84fa3 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 4 Dec 2024 01:56:58 -0500 Subject: [PATCH 09/81] Further clarify circle behavior --- .../main/resources/assets/hexcasting/lang/en_us.flatten.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 4f580a8f73..d67bae1738 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -1558,7 +1558,7 @@ spellcircles: { "1": "I KNOW what the $(l:items/slate)$(item)slates/$ are for. The grand assemblies lost to time. The patterns scribed on them can be actuated in sequence, automatically. Thought and power ricocheting through, one by one by one by one by one by through and through and THROUGH AND -- I must not I must not I should know better than to think that way.", - "2": "To start the ritual I need an $(l:greatwork/impetus)$(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(l:items/slate)$(item)slates/$ or other blocks suitable for the energies, one by one, casting any patterns it finds.$(br2)The direction the _media exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.", + "2": "To start the ritual I need an $(l:greatwork/impetus)$(item)Impetus/$ to create a self-sustaining wave of _media. That wave travels along a track of $(l:items/slate)$(item)slates/$ or other suitable blocks, casting any patterns it finds.$(br2)If there is no way for the wave to return to the $(l:greatwork/impetus)$(item)Impetus/$, the casting will fail immediately. Also, the direction the wave exits any given block MUST be unambiguous, or the casting will fail at the block with too many neighbors.", "3": "As a result, the outline of the spell \"circle\" may be any closed shape, concave or convex, and it may face any direction. In fact, with the application of certain other blocks it is possible to make a spell circle that spans all three dimensions. I doubt such an oddity has very much use, but I must allocate myself a bit of vapid levity to encourage my crude mind to continue my work.", "4": "Miracle of miracles, the circle will withdraw _media neither from my inventory nor my mind. Instead, crystallized shards of _media must be provided to the $(l:greatwork/impetus)$(item)Impetus/$ via hopper, or other such artifice.$(br2)The application of a $(l:items/lens)$(item)Scrying Lens/$ will show how much _media is inside an $(l:greatwork/impetus)$(item)Impetus/$, in units of dust.", "5": "However, a spell cast from a circle does have one major limitation: it is unable to affect anything outside of the circle's bounds. That is, it cannot interact with anything outside of the cuboid of minimum size which encloses every block composing it (so a concave spell circle can still affect things in the concavity).", From d64b2735e9b2d7506b3b05f674710d141bd1db0e Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Sat, 4 Jan 2025 22:20:23 -0500 Subject: [PATCH 10/81] Update name and description for eval-limit mishap --- .../hexcasting/api/casting/mishaps/MishapEvalTooMuch.kt | 2 +- .../resources/assets/hexcasting/lang/en_us.flatten.json5 | 6 +++--- .../resources/assets/hexcasting/lang/ru_ru.flatten.json5 | 6 +++--- .../resources/assets/hexcasting/lang/zh_cn.flatten.json5 | 6 +++--- .../thehexbook/en_us/entries/casting/mishaps.json | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEvalTooMuch.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEvalTooMuch.kt index 24ecda81e8..1634cd63e1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEvalTooMuch.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEvalTooMuch.kt @@ -14,5 +14,5 @@ class MishapEvalTooMuch : Mishap() { } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = - error("eval_too_deep") + error("eval_too_much") } diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index d67bae1738..1f578be3a1 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -928,7 +928,7 @@ wrong_dimension: "cannot see %s from %s", entity_too_far: "%s is out of range", immune_entity: "cannot alter %s", - eval_too_deep: "Recursively evaluated too deep", + eval_too_much: "Evaluated too many patterns", no_item: "needs %s but got nothing", "no_item.offhand": "needs %s in the other hand but got nothing", bad_entity: "needs %s but got %s", @@ -1384,8 +1384,8 @@ "retrospection.title": "Hasty Retrospection", retrospection: "I attempted to draw $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ without first drawing $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Introspection/$.$(br2)Causes orange sparks, and pushes the pattern for $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Retrospection/$ to the stack as a pattern iota.", - "too_deep.title": "Delve Too Deep", - too_deep: "Evaluated too many spells with meta-evaluation from one spell.$(br2)Causes dark blue sparks, and chokes all the air out of me.", + "too_many_patterns.title": "Lost in Thought", + too_many_patterns: "I attempted to evaluate too many patterns in one _Hex. Often, this happens because I've accidentally created an infinite loop.$(br2)Causes dark blue sparks, and chokes all the air out of me.", "true_name.title": "Transgress Other", true_name: "I attempted to $(l:patterns/readwrite#hexcasting:write)$(action)save a reference/$ to another player to a permanent medium.$(br2)Causes black sparks, and robs me of my sight for approximately one minute.", diff --git a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 index 1b94caa75f..3abbcc31fd 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 @@ -863,7 +863,7 @@ wrong_dimension: "не удается увидеть %s из %s", entity_too_far: "%s находится вне диапазона", immune_entity: "невозможно изменить %s", - eval_too_deep: "Рекурсивные вычисления слишком глубокие", + eval_too_much: "Рекурсивные вычисления слишком глубокие", no_item: "нуждается в %s, но ничего не получает", "no_item.offhand": "нуждается в %s в другой руке, но ничего не получил", bad_entity: "нуждается в %s, но получил %s", @@ -1294,8 +1294,8 @@ "retrospection.title": "Поспешная Ретроспектива", retrospection: "Я попытался нарисовать $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Ретроспектива/$ без предварительного рисования $(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)Интроспекция/$.$(br2)Вызывает оранжевые искры и помещает шаблон для $(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)Ретроспектива/$ в стек как шаблон иота.", - "too_deep.title": "Слишком глубоко", - too_deep: "Оценено слишком много заклинаний с метаоценкой от одного заклинания.$(br2)Вызывает темно-синие искры и лишает меня всего воздуха.", + "too_many_patterns.title": "Слишком глубоко", + too_many_patterns: "Оценено слишком много заклинаний с метаоценкой от одного заклинания.$(br2)Вызывает темно-синие искры и лишает меня всего воздуха.", "true_name.title": "Нарушение Законов", true_name: "Я попытался $(l:patterns/readwrite#hexcasting:write)$(action)сохранить истинное имя/$ другого игрока на постоянный носитель.$(br2)Вызывает черные искры и лишает меня зрения примерно на одну минуту.", diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 7715983dec..dc41db318b 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -925,7 +925,7 @@ wrong_dimension: "无法在%2$s中影响到%1$s", entity_too_far: "%s超出影响范围", immune_entity: "无法影响到%s", - eval_too_deep: "递归深度过大", + eval_too_much: "递归深度过大", no_item: "需要%s,而实际无对应物品", "no_item.offhand": "需要在另一只手里持有%s,而实际无对应物品", bad_entity: "需要%s,而实际接受了%s", @@ -1381,8 +1381,8 @@ "retrospection.title": "反思过急", retrospection: "试图在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$前绘制$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$。$(br2)产生橙色火花,并压入一个$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$对应的图案。", - "too_deep.title": "钻研过深", - too_deep: "在一个法术内以元运行方式运行过多法术。$(br2)产生暗蓝色火花,并使我窒息。", + "too_many_patterns.title": "钻研过深", + too_many_patterns: "在一个法术内以元运行方式运行过多法术。$(br2)产生暗蓝色火花,并使我窒息。", "true_name.title": "违犯他人", true_name: "试图在某种永久性媒介中$(l:patterns/readwrite#hexcasting:write)$(action)存储/$代表另一位玩家的 iota。$(br2)产生黑色火花,并致盲大约一分钟。", diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/mishaps.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/mishaps.json index 08fb6d0335..5a01a51556 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/mishaps.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/mishaps.json @@ -75,8 +75,8 @@ }, { "type": "patchouli:text", - "title": "hexcasting.page.mishaps.too_deep.title", - "text": "hexcasting.page.mishaps.too_deep" + "title": "hexcasting.page.mishaps.too_many_patterns.title", + "text": "hexcasting.page.mishaps.too_many_patterns" }, { "type": "patchouli:text", From 1e6f809b765c5f465df96bacf8cd1517a2c4b005 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Sun, 5 Jan 2025 20:11:30 +0800 Subject: [PATCH 11/81] zh_cn lang fix: Small Slate Bricks --- .../main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 4b630de191..b5a4c24f73 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -164,7 +164,7 @@ slate_amethyst_: { tiles: "板岩紫晶瓦", bricks: "板岩紫晶砖", - bricks_small: "板岩紫晶砖", + bricks_small: "板岩紫晶小型砖", pillar: "板岩紫晶柱", }, From 22ff0ba9d477a9ac5ed2be6a050836ed3ce87372 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Tue, 7 Jan 2025 20:34:32 -0500 Subject: [PATCH 12/81] Change "harness" to "VM" wherever it won't break stuff --- .../petrak/hexcasting/api/casting/eval/CastResult.kt | 2 +- .../petrak/hexcasting/api/casting/eval/vm/CastingVM.kt | 2 +- .../hexcasting/api/casting/eval/vm/FrameForEach.kt | 2 +- .../hexcasting/api/casting/eval/vm/FunctionalData.kt | 2 +- .../at/petrak/hexcasting/common/items/ItemStaff.java | 4 ++-- .../hexcasting/common/items/magic/ItemPackagedHex.java | 4 ++-- .../petrak/hexcasting/fabric/cc/CCStaffcastImage.java | 6 +++--- .../petrak/hexcasting/forge/xplat/ForgeXplatImpl.java | 10 +++++----- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastResult.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastResult.kt index c0b4d4442d..dea8869286 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastResult.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastResult.kt @@ -7,7 +7,7 @@ import at.petrak.hexcasting.api.casting.eval.vm.SpellContinuation import at.petrak.hexcasting.api.casting.iota.Iota /** - * The result of doing something to a cast harness. + * The result of doing something to a casting VM. * * Contains the iota that was executed to produce this CastResult, * the next thing to execute after this is finished, the modified state of the stack, diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt index 587500355b..11503b0b6f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt @@ -64,7 +64,7 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) { } } - // Then write all pertinent data back to the harness for the next iteration. + // Then write all pertinent data back to the VM for the next iteration. if (image2.newData != null) { this.image = image2.newData } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt index 0221c1f36d..02d9612767 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt @@ -47,7 +47,7 @@ data class FrameForEach( ): CastResult { // If this isn't the very first Thoth step (i.e. no Thoth computations run yet)... val stack = if (baseStack == null) { - // init stack to the harness stack... + // init stack to the VM stack... harness.image.stack.toList() } else { // else save the stack to the accumulator and reuse the saved base stack. diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FunctionalData.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FunctionalData.kt index 49f3d149d0..79c48bf6bb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FunctionalData.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FunctionalData.kt @@ -3,7 +3,7 @@ package at.petrak.hexcasting.api.casting.eval.vm import at.petrak.hexcasting.api.casting.iota.Iota /** - * A change to the data in a CastHarness after a pattern is drawn. + * A change to the data in a CastingVM after a pattern is drawn. */ data class FunctionalData( val stack: List, diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java index c571aadf58..80e84f4a2d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java @@ -37,9 +37,9 @@ public InteractionResultHolder use(Level world, Player player, Intera } if (!world.isClientSide() && player instanceof ServerPlayer serverPlayer) { - var harness = IXplatAbstractions.INSTANCE.getStaffcastVM(serverPlayer, hand); + var vm = IXplatAbstractions.INSTANCE.getStaffcastVM(serverPlayer, hand); var patterns = IXplatAbstractions.INSTANCE.getPatternsSavedInUi(serverPlayer); - var descs = harness.generateDescs(); + var descs = vm.generateDescs(); IXplatAbstractions.INSTANCE.sendPacketToPlayer(serverPlayer, new MsgOpenSpellGuiS2C(hand, patterns, descs.getFirst(), descs.getSecond(), diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java index a189fd0703..1c8886f999 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java @@ -128,8 +128,8 @@ public InteractionResultHolder use(Level world, Player player, Intera } var sPlayer = (ServerPlayer) player; var ctx = new PackagedItemCastEnv(sPlayer, usedHand); - var harness = CastingVM.empty(ctx); - var clientView = harness.queueExecuteAndWrapIotas(instrs, sPlayer.serverLevel()); + var vm = CastingVM.empty(ctx); + var clientView = vm.queueExecuteAndWrapIotas(instrs, sPlayer.serverLevel()); var patterns = instrs.stream() .filter(i -> i instanceof PatternIota) diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java index bb6018946f..383deefaab 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java @@ -10,7 +10,7 @@ import org.jetbrains.annotations.Nullable; public class CCStaffcastImage implements Component { - public static final String TAG_HARNESS = "harness"; + public static final String TAG_VM = "harness"; private final ServerPlayer owner; private CompoundTag lazyLoadedTag = new CompoundTag(); @@ -39,11 +39,11 @@ public void setImage(@Nullable CastingImage image) { @Override public void readFromNbt(CompoundTag tag) { - this.lazyLoadedTag = tag.getCompound(TAG_HARNESS); + this.lazyLoadedTag = tag.getCompound(TAG_VM); } @Override public void writeToNbt(CompoundTag tag) { - tag.put(TAG_HARNESS, this.lazyLoadedTag); + tag.put(TAG_VM, this.lazyLoadedTag); } } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java b/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java index 9d9188599d..d39a71e857 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java @@ -220,7 +220,7 @@ public void setSentinel(Player player, @Nullable Sentinel sentinel) { @Override public void setStaffcastImage(ServerPlayer player, @Nullable CastingImage image) { - player.getPersistentData().put(TAG_HARNESS, image == null ? new CompoundTag() : image.serializeToNbt()); + player.getPersistentData().put(TAG_VM, image == null ? new CompoundTag() : image.serializeToNbt()); } @Override @@ -285,9 +285,9 @@ public Sentinel getSentinel(Player player) { @Override public CastingVM getStaffcastVM(ServerPlayer player, InteractionHand hand) { - // This is always from a staff because we don't need to load the harness when casting from item + // This is always from a staff because we don't need to load the VM when casting from item var ctx = new StaffCastEnv(player, hand); - return new CastingVM(CastingImage.loadFromNbt(player.getPersistentData().getCompound(TAG_HARNESS), + return new CastingVM(CastingImage.loadFromNbt(player.getPersistentData().getCompound(TAG_VM), player.serverLevel()), ctx); } @@ -305,7 +305,7 @@ public List getPatternsSavedInUi(ServerPlayer player) { @Override public void clearCastingData(ServerPlayer player) { - player.getPersistentData().remove(TAG_HARNESS); + player.getPersistentData().remove(TAG_VM); player.getPersistentData().remove(TAG_PATTERNS); } @@ -585,6 +585,6 @@ public void setScale(Entity e, float scale) { public static final UUID ALTIORA_ATTRIBUTE_ID = UUID.fromString("91897c79-3ebb-468c-a265-40418ed01c41"); - public static final String TAG_HARNESS = "hexcasting:spell_harness"; + public static final String TAG_VM = "hexcasting:spell_harness"; public static final String TAG_PATTERNS = "hexcasting:spell_patterns"; } From 5406a59d00cba1ce1cb21eb12a0c9d6222fab22c Mon Sep 17 00:00:00 2001 From: gamma-delta Date: Tue, 14 Jan 2025 15:45:16 -0600 Subject: [PATCH 13/81] don't ignore all folders named lib --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index dc8ca90ac5..42425f1530 100644 --- a/.gitignore +++ b/.gitignore @@ -61,8 +61,8 @@ dist/ downloads/ eggs/ .eggs/ -lib/ -lib64/ +/lib/ +/lib64/ parts/ sdist/ var/ From 88aabd8f4ba0f19ff2df2944d9be0710ebb981ad Mon Sep 17 00:00:00 2001 From: gamma-delta Date: Tue, 14 Jan 2025 15:56:18 -0600 Subject: [PATCH 14/81] in theory, add dependencies. unfortunately the only way to check if this works is to publish it ... --- Fabric/build.gradle | 10 ++++++++-- Forge/build.gradle | 10 +++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 9e60ab70d3..7eed9b7eb5 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -6,9 +6,15 @@ plugins { pkSubproj { platform "fabric" curseforgeJar remapJar.archiveFile - curseforgeDependencies[] + curseforgeDependencies[ + "paucal", "patchouli", "fabric-language-kotlin", "inline", "cloth-config", + "cardinal-components-api", "fabric-api" + ] modrinthJar remapJar.archiveFile - modrinthDependencies[] + modrinthDependencies[ + "paucal", "patchouli", "fabric-language-kotlin", "inline", "cloth-config", + "cardinal-components-api", "fabric-api" + ] } loom { diff --git a/Forge/build.gradle b/Forge/build.gradle index 78be55d9aa..40ec5bbbf1 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -26,9 +26,13 @@ apply plugin: 'org.spongepowered.mixin' pkSubproj { platform "forge" curseforgeJar jar.archiveFile - curseforgeDependencies[] + curseforgeDependencies[ + "paucal", "patchouli", "caelus", "inline" + ] modrinthJar jar.archiveFile - modrinthDependencies[] + modrinthDependencies[ + "paucal", "patchouli", "caelus", "inline" + ] } repositories { @@ -149,7 +153,7 @@ minecraft { property 'mixin.env.remapRefMap', 'true' property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" property 'hexcasting.xplat_datagen', 'true' - + mods { create(modID) { source sourceSets.main From 39a500436a745bca96ada2d4681c5badce1c9cd1 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Tue, 14 Jan 2025 18:19:35 -0500 Subject: [PATCH 15/81] Make scroll-filling function usable without requiring a LootContext --- .../loot/AddPerWorldPatternToScrollFunc.java | 40 +++++++++++-------- .../forge/loot/ForgeHexScrollLootMod.java | 4 +- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java index 30c9f97370..1a972bc022 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java @@ -3,6 +3,7 @@ import at.petrak.hexcasting.api.casting.ActionRegistryEntry; import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.api.utils.HexUtils; +import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.common.casting.PatternRegistryManifest; import at.petrak.hexcasting.common.items.storage.ItemScroll; import at.petrak.hexcasting.common.lib.HexLootFunctions; @@ -10,9 +11,12 @@ import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; +import net.minecraft.util.RandomSource; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; @@ -35,30 +39,32 @@ public AddPerWorldPatternToScrollFunc(LootItemCondition[] lootItemConditions) { /** * This doesn't actually have any params so extract behaviour out for the benefit of forge */ - public static ItemStack doStatic(ItemStack stack, LootContext ctx) { - var rand = ctx.getRandom(); - var perWorldKeys = new ArrayList>(); - Registry regi = IXplatAbstractions.INSTANCE.getActionRegistry(); - for (var key : regi.registryKeySet()) { - if (HexUtils.isOfTag(regi, key, HexTags.Actions.PER_WORLD_PATTERN)) { - perWorldKeys.add(key); + public static ItemStack doStatic(ItemStack stack, RandomSource rand, ServerLevel overworld) { + ResourceKey patternKey; + if (NBTHelper.hasString(stack, ItemScroll.TAG_OP_ID)) { + patternKey = ResourceKey.create( + IXplatAbstractions.INSTANCE.getActionRegistry().key(), + ResourceLocation.tryParse(NBTHelper.getString(stack, ItemScroll.TAG_OP_ID)) + ); + } else { + var perWorldKeys = new ArrayList>(); + Registry regi = IXplatAbstractions.INSTANCE.getActionRegistry(); + for (var key : regi.registryKeySet()) { + if (HexUtils.isOfTag(regi, key, HexTags.Actions.PER_WORLD_PATTERN)) { + perWorldKeys.add(key); + } } + patternKey = perWorldKeys.get(rand.nextInt(perWorldKeys.size())); + NBTHelper.putString(stack, ItemScroll.TAG_OP_ID, patternKey.location().toString()); } - var key = perWorldKeys.get(rand.nextInt(perWorldKeys.size())); - - var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(key, ctx.getLevel().getServer().overworld()); - var tag = new CompoundTag(); - tag.putString(ItemScroll.TAG_OP_ID, key.location().toString()); - tag.put(ItemScroll.TAG_PATTERN, pat.serializeToNBT()); - - stack.getOrCreateTag().merge(tag); - + var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, overworld); + NBTHelper.put(stack, ItemScroll.TAG_PATTERN, pat.serializeToNBT()); return stack; } @Override protected ItemStack run(ItemStack stack, LootContext ctx) { - return doStatic(stack, ctx); + return doStatic(stack, ctx.getRandom(), ctx.getLevel().getServer().overworld()); } @Override diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java b/Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java index ffae0a85ce..fe1a2dda87 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java @@ -24,7 +24,7 @@ public class ForgeHexScrollLootMod extends LootModifier { Codec.INT.fieldOf("countRange").forGetter(it -> it.countRange) ).apply(inst, ForgeHexScrollLootMod::new) )); - + public final int countRange; public ForgeHexScrollLootMod(LootItemCondition[] conditionsIn, int countRange) { @@ -38,7 +38,7 @@ public ForgeHexScrollLootMod(LootItemCondition[] conditionsIn, int countRange) { int count = HexLootHandler.getScrollCount(this.countRange, context.getRandom()); for (int i = 0; i < count; i++) { var newStack = new ItemStack(HexItems.SCROLL_LARGE); - AddPerWorldPatternToScrollFunc.doStatic(newStack, context); + AddPerWorldPatternToScrollFunc.doStatic(newStack, context.getRandom(), context.getLevel().getServer().overworld()); generatedLoot.add(newStack); } return generatedLoot; From 64338324deef483d94f7edfb9de185f88c0c4a02 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Tue, 14 Jan 2025 18:23:11 -0500 Subject: [PATCH 16/81] Scrolls can now load and/or reveal the pattern on inventory tick --- .../common/items/storage/ItemScroll.java | 55 ++++++++++++++++--- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java index 036e5129b4..91a9537355 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java @@ -9,38 +9,45 @@ import at.petrak.hexcasting.common.entities.EntityWallScroll; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.common.misc.PatternTooltip; +import at.petrak.hexcasting.common.loot.AddPerWorldPatternToScrollFunc; import at.petrak.hexcasting.interop.inline.InlinePatternData; +import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; import java.util.Optional; +import java.util.List; import static at.petrak.hexcasting.api.HexAPI.modLoc; /** - * TAG_OP_ID and TAG_PATTERN: "Ancient Scroll of %s" (Great Spells) + * TAG_OP_ID and TAG_PATTERN: "Ancient Scroll of %s" (per-world pattern preloaded) + *
+ * TAG_OP_ID: "Ancient Scroll of %s" (per-world pattern loaded on inv tick) *
* TAG_PATTERN: "Scroll" (custom) *
* (none): "Empty Scroll" - *
- * TAG_OP_ID: invalid */ public class ItemScroll extends Item implements IotaHolderItem { public static final String TAG_OP_ID = "op_id"; public static final String TAG_PATTERN = "pattern"; + public static final String TAG_NEEDS_PURCHASE = "needs_purchase"; public static final ResourceLocation ANCIENT_PREDICATE = modLoc("ancient"); public final int blockSize; @@ -50,6 +57,15 @@ public ItemScroll(Properties pProperties, int blockSize) { this.blockSize = blockSize; } + // this produces a scroll that will load the correct pattern for your world once it ticks + public static ItemStack withPerWorldPattern(ItemStack stack, String op_id) { + Item item = stack.getItem(); + if (item instanceof ItemScroll) + NBTHelper.putString(stack, TAG_OP_ID, op_id); + + return stack; + } + @Override public @Nullable CompoundTag readIotaTag(ItemStack stack) { @@ -133,7 +149,7 @@ public Component getName(ItemStack pStack) { return Component.translatable(descID + ".of", Component.translatable("hexcasting.action." + ResourceLocation.tryParse(ancientId))); } else if (NBTHelper.hasCompound(pStack, TAG_PATTERN)) { - var compound = NBTHelper.getCompound(pStack, ItemScroll.TAG_PATTERN); + var compound = NBTHelper.getCompound(pStack, TAG_PATTERN); var patternLabel = Component.literal(""); if (compound != null) { var pattern = HexPattern.fromNBT(compound); @@ -145,16 +161,39 @@ public Component getName(ItemStack pStack) { } } - // purposely no hover text + @Override + public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pSlotId, boolean pIsSelected) { + // the needs_purchase tag is used so you can't see the pattern on scrolls sold by a wandering trader + // once you put the scroll into your inventory, this removes the tag to reveal the pattern + if (NBTHelper.getBoolean(pStack, TAG_NEEDS_PURCHASE)) { + NBTHelper.remove(pStack, TAG_NEEDS_PURCHASE); + } + // if op_id is set but there's no stored pattern, load the pattern on inv tick + if (NBTHelper.hasString(pStack, TAG_OP_ID) && !NBTHelper.hasCompound(pStack, TAG_PATTERN) && pEntity.getServer() != null) { + AddPerWorldPatternToScrollFunc.doStatic(pStack, pLevel.getRandom(), pEntity.getServer().overworld()); + } + } + + @Override + public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, + TooltipFlag pIsAdvanced) { + if (NBTHelper.getBoolean(pStack, TAG_NEEDS_PURCHASE)) { + var needsPurchase = Component.translatable("hexcasting.tooltip.scroll.needs_purchase"); + pTooltipComponents.add(needsPurchase.withStyle(ChatFormatting.GRAY)); + } else if (NBTHelper.hasString(pStack, TAG_OP_ID) && !NBTHelper.hasCompound(pStack, TAG_PATTERN)) { + var notLoaded = Component.translatable("hexcasting.tooltip.scroll.pattern_not_loaded"); + pTooltipComponents.add(notLoaded.withStyle(ChatFormatting.GRAY)); + } + } @Override public Optional getTooltipImage(ItemStack stack) { - var compound = NBTHelper.getCompound(stack, ItemScroll.TAG_PATTERN); - if (compound != null) { + var compound = NBTHelper.getCompound(stack, TAG_PATTERN); + if (compound != null && !NBTHelper.getBoolean(stack, TAG_NEEDS_PURCHASE)) { var pattern = HexPattern.fromNBT(compound); return Optional.of(new PatternTooltip( pattern, - NBTHelper.hasString(stack, ItemScroll.TAG_OP_ID) + NBTHelper.hasString(stack, TAG_OP_ID) ? PatternTooltipComponent.ANCIENT_BG : PatternTooltipComponent.PRISTINE_BG)); } From f11d46efe555c62f6b2265c859fd5529f08acb24 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Tue, 14 Jan 2025 18:25:47 -0500 Subject: [PATCH 17/81] Wandering traders can sell scrolls --- .../petrak/hexcasting/api/mod/HexConfig.java | 4 ++ .../mixin/MixinWanderingTrader.java | 37 +++++++++++++++++++ Common/src/main/resources/hexplat.mixins.json | 1 + .../hexcasting/fabric/FabricHexConfig.java | 9 ++++- .../hexcasting/forge/ForgeHexConfig.java | 15 +++++--- 5 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 19458cbc8e..845bf72095 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -74,10 +74,14 @@ public interface ServerConfigAccess { boolean trueNameHasAmbit(); + double traderScrollChance(); + int DEFAULT_MAX_OP_COUNT = 100_000; int DEFAULT_MAX_SPELL_CIRCLE_LENGTH = 1024; int DEFAULT_OP_BREAK_HARVEST_LEVEL = 3; + double DEFAULT_TRADER_SCROLL_CHANCE = 0.4; + boolean DEFAULT_VILLAGERS_DISLIKE_MIND_MURDER = true; List DEFAULT_DIM_TP_DENYLIST = List.of("twilightforest:twilight_forest"); diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java new file mode 100644 index 0000000000..6972090d55 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java @@ -0,0 +1,37 @@ +package at.petrak.hexcasting.mixin; + +import net.minecraft.world.entity.npc.WanderingTrader; +import net.minecraft.world.item.trading.MerchantOffers; +import net.minecraft.world.item.trading.MerchantOffer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.util.RandomSource; +import net.minecraft.server.MinecraftServer; +import at.petrak.hexcasting.api.mod.HexConfig; +import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexItems; +import at.petrak.hexcasting.common.loot.AddPerWorldPatternToScrollFunc; +import at.petrak.hexcasting.common.items.storage.ItemScroll; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +// Adds ancient scrolls to the wandering trader by replacing one of the 5 junk trades +@Mixin(WanderingTrader.class) +public class MixinWanderingTrader { + @Inject(method = "updateTrades", at = @At("RETURN")) + private void addNewTrades(CallbackInfo ci) { + var self = (WanderingTrader) (Object) this; + MerchantOffers offerList = self.getOffers(); + if (offerList == null) + return; + RandomSource rand = self.getRandom(); + if (rand.nextFloat() < HexConfig.server().traderScrollChance() && self.getServer() != null) { + ItemStack scroll = new ItemStack(HexItems.SCROLL_LARGE); + AddPerWorldPatternToScrollFunc.doStatic(scroll, rand, self.getServer().overworld()); + NBTHelper.putBoolean(scroll, ItemScroll.TAG_NEEDS_PURCHASE, true); + offerList.set(rand.nextInt(5), new MerchantOffer(new ItemStack(Items.EMERALD, 12), scroll, 1, 1, 1)); + } + } +} diff --git a/Common/src/main/resources/hexplat.mixins.json b/Common/src/main/resources/hexplat.mixins.json index 1d2ac13000..a70b99261b 100644 --- a/Common/src/main/resources/hexplat.mixins.json +++ b/Common/src/main/resources/hexplat.mixins.json @@ -9,6 +9,7 @@ "MixinMob", "MixinRaider", "MixinVillager", + "MixinWanderingTrader", "MixinWitch", "accessor.AccessorAbstractArrow", "accessor.AccessorEntity", diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index a49ab760f3..b3eeadde6b 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -184,10 +184,11 @@ public static final class Server implements HexConfig.ServerConfigAccess, Config private boolean villagersOffendedByMindMurder = DEFAULT_VILLAGERS_DISLIKE_MIND_MURDER; @ConfigEntry.Gui.Tooltip private boolean doesTrueNameHaveAmbit = DEFAULT_TRUE_NAME_HAS_AMBIT; - - @ConfigEntry.Gui.Tooltip private List tpDimDenylist = DEFAULT_DIM_TP_DENYLIST; + + @ConfigEntry.Gui.Tooltip + private double traderScrollChance = DEFAULT_TRADER_SCROLL_CHANCE; // ModMenu bad and doesn't like java objects in here so we do stupid string parsing @ConfigEntry.Gui.Tooltip @@ -281,6 +282,10 @@ public boolean trueNameHasAmbit() { return doesTrueNameHaveAmbit; } + public double traderScrollChance() { + return traderScrollChance; + } + /** * Returns -1 if none is found */ diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index bf219312fc..43510354c6 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -133,17 +133,13 @@ public boolean clickingTogglesDrawing() { public static class Server implements HexConfig.ServerConfigAccess { private static ForgeConfigSpec.IntValue opBreakHarvestLevel; private static ForgeConfigSpec.IntValue maxOpCount; - private static ForgeConfigSpec.IntValue maxSpellCircleLength; - private static ForgeConfigSpec.ConfigValue> actionDenyList; private static ForgeConfigSpec.ConfigValue> circleActionDenyList; - private static ForgeConfigSpec.BooleanValue villagersOffendedByMindMurder; - private static ForgeConfigSpec.ConfigValue> tpDimDenyList; - private static ForgeConfigSpec.BooleanValue doesTrueNameHaveAmbit; + private static ForgeConfigSpec.DoubleValue traderScrollChance; private static ForgeConfigSpec.ConfigValue> fewScrollTables; private static ForgeConfigSpec.ConfigValue> someScrollTables; @@ -171,6 +167,10 @@ public Server(ForgeConfigSpec.Builder builder) { .defineList("circleActionDenyList", List.of(), Server::isValidReslocArg); builder.pop(); + builder.push("Loot"); + traderScrollChance = builder.comment("The chance for wandering traders to sell an Ancient Scroll") + .defineInRange("traderScrollChance", DEFAULT_TRADER_SCROLL_CHANCE, 0.0, 1.0); + actionDenyList = builder.comment( "Resource locations of disallowed actions. Trying to cast one of these will result in a mishap.") .defineList("actionDenyList", List.of(), Server::isValidReslocArg); @@ -227,6 +227,11 @@ public boolean trueNameHasAmbit() { return doesTrueNameHaveAmbit.get(); } + @Override + public double traderScrollChance() { + return traderScrollChance.get(); + } + private static boolean isValidReslocArg(Object o) { return o instanceof String s && ResourceLocation.isValidResourceLocation(s); } From 04f8446e9e95d6d47cbaa5dd7f2f70a13e453f79 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Tue, 14 Jan 2025 18:26:25 -0500 Subject: [PATCH 18/81] Creative tab for scrolls --- .../hexcasting/common/lib/HexBlocks.java | 4 +-- .../common/lib/HexCreativeTabs.java | 8 +++-- .../hexcasting/common/lib/HexItems.java | 34 +++++++++++++++---- .../patchouli_books/thehexbook/book.json | 2 +- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java index 97e58a75e4..df5792dc52 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java @@ -296,14 +296,14 @@ private static T blockNoItem(String name, T block) { return block; } private static T blockItem(String name, T block) { - return blockItem(name, block, HexItems.props(), HexCreativeTabs.HEX); + return blockItem(name, block, HexItems.props(), HexCreativeTabs.MAIN); } private static T blockItem(String name, T block, @Nullable CreativeModeTab tab) { return blockItem(name, block, HexItems.props(), tab); } private static T blockItem(String name, T block, Item.Properties props) { - return blockItem(name, block, props, HexCreativeTabs.HEX); + return blockItem(name, block, props, HexCreativeTabs.MAIN); } private static T blockItem(String name, T block, Item.Properties props, @Nullable CreativeModeTab tab) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java index 93cfd63011..03f171236c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java @@ -4,6 +4,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; +import at.petrak.hexcasting.common.items.storage.ItemScroll; import java.util.LinkedHashMap; import java.util.Map; @@ -20,11 +21,14 @@ public static void registerCreativeTabs(BiConsumer TABS = new LinkedHashMap<>(); - public static final CreativeModeTab HEX = register("hexcasting", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) + public static final CreativeModeTab MAIN = register("main", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) .icon(() -> new ItemStack(HexItems.SPELLBOOK))); + public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) + .icon(() -> ItemScroll.withPerWorldPattern(new ItemStack(HexItems.SCROLL_LARGE),""))); + private static CreativeModeTab register(String name, CreativeModeTab.Builder tabBuilder) { - var tab = tabBuilder.title(Component.translatable("itemGroup." + name)).build(); + var tab = tabBuilder.title(Component.translatable("itemGroup.hexcasting." + name)).build(); var old = TABS.put(modLoc(name), tab); if (old != null) { throw new IllegalArgumentException("Typo? Duplicate id " + name); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index a85889e104..7d81c959bc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -1,6 +1,9 @@ package at.petrak.hexcasting.common.lib; import at.petrak.hexcasting.api.misc.MediaConstants; +import at.petrak.hexcasting.api.utils.HexUtils; +import at.petrak.hexcasting.api.casting.ActionRegistryEntry; +import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.common.items.ItemJewelerHammer; import at.petrak.hexcasting.common.items.ItemLens; import at.petrak.hexcasting.common.items.ItemLoreFragment; @@ -14,6 +17,8 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.google.common.base.Suppliers; import net.minecraft.Util; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.food.FoodProperties; @@ -35,6 +40,7 @@ public static void registerItems(BiConsumer r) { } public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeModeTab tab) { + if (tab == HexCreativeTabs.SCROLLS) generateScrollEntries(); for (var item : ITEM_TABS.getOrDefault(tab, List.of())) { item.register(r); } @@ -93,24 +99,23 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final Supplier BATTERY_DUST_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.DUST_UNIT * 64, - MediaConstants.DUST_UNIT * 64), HexCreativeTabs.HEX); + MediaConstants.DUST_UNIT * 64), HexCreativeTabs.MAIN); public static final Supplier BATTERY_SHARD_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.SHARD_UNIT * 64, - MediaConstants.SHARD_UNIT * 64), HexCreativeTabs.HEX); + MediaConstants.SHARD_UNIT * 64), HexCreativeTabs.MAIN); public static final Supplier BATTERY_CRYSTAL_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.CRYSTAL_UNIT * 64, - MediaConstants.CRYSTAL_UNIT * 64), HexCreativeTabs.HEX); + MediaConstants.CRYSTAL_UNIT * 64), HexCreativeTabs.MAIN); public static final Supplier BATTERY_QUENCHED_SHARD_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.QUENCHED_SHARD_UNIT * 64, - MediaConstants.QUENCHED_SHARD_UNIT * 64), HexCreativeTabs.HEX); - + MediaConstants.QUENCHED_SHARD_UNIT * 64), HexCreativeTabs.MAIN); public static final Supplier BATTERY_QUENCHED_BLOCK_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.QUENCHED_BLOCK_UNIT * 64, - MediaConstants.QUENCHED_BLOCK_UNIT * 64), HexCreativeTabs.HEX); + MediaConstants.QUENCHED_BLOCK_UNIT * 64), HexCreativeTabs.MAIN); public static final EnumMap DYE_PIGMENTS = Util.make(() -> { var out = new EnumMap(DyeColor.class); @@ -155,6 +160,21 @@ public static Item.Properties unstackable() { return props().stacksTo(1); } + private static void generateScrollEntries() { + var keyList = new ArrayList>(); + Registry regi = IXplatAbstractions.INSTANCE.getActionRegistry(); + for (var key : regi.registryKeySet()) + if (HexUtils.isOfTag(regi, key, HexTags.Actions.PER_WORLD_PATTERN)) + keyList.add(key); + keyList.sort( (a, b) -> a.location().compareTo(b.location()) ); + for (var key : keyList) { + addToTab(() -> ItemScroll.withPerWorldPattern( + new ItemStack(HexItems.SCROLL_LARGE), + key.location().toString() + ),HexCreativeTabs.SCROLLS); + } + } + private static T make(ResourceLocation id, T item, @Nullable CreativeModeTab tab) { var old = ITEMS.put(id, item); if (old != null) { @@ -171,7 +191,7 @@ private static T make(String id, T item, @Nullable CreativeMode } private static T make(String id, T item) { - return make(modLoc(id), item, HexCreativeTabs.HEX); + return make(modLoc(id), item, HexCreativeTabs.MAIN); } private static Supplier addToTab(Supplier stack, CreativeModeTab tab) { diff --git a/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json b/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json index 146a1d2642..b99fbc81ce 100644 --- a/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json +++ b/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json @@ -4,7 +4,7 @@ "version": 1, "show_progress": false, "nameplate_color": "00072b", - "creative_tab": "hexcasting:hexcasting", + "creative_tab": "hexcasting:main", "model": "hexcasting:patchouli_book", "book_texture": "hexcasting:textures/gui/patchi_book.png", "filler_texture": "hexcasting:textures/gui/patchi_filler.png", From cd4c44fa35b94c566fd188899a56d3961bac810b Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Tue, 14 Jan 2025 18:27:07 -0500 Subject: [PATCH 19/81] Assorted lang --- .../hexcasting/lang/en_us.flatten.json5 | 24 +++++++++++-------- .../hexcasting/lang/ru_ru.flatten.json5 | 5 ---- .../hexcasting/lang/zh_cn.flatten.json5 | 5 ---- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 1f578be3a1..a4194b8573 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -46,7 +46,7 @@ "": "Focus", sealed: "Sealed Focus", }, - + thought_knot: "Thought-Knot", spellbook: "Spellbook", cypher: "Cypher", @@ -252,8 +252,8 @@ }, "itemGroup.hexcasting": { - "": "Hexcasting", - creative_tab: "Hexcasting", + main: "Hex Casting", + scrolls: "Hex Casting (Scrolls)", }, "gui.hexcasting": { @@ -372,6 +372,10 @@ "": "Villagers Offended By Mind Murder", "@Tooltip": "Whether villagers should be angry at the player when other villagers are mindflayed", }, + traderScrollChance: { + "": "Wandering Trader Scroll Chance", + "@Tooltip": "The chance for wandering traders to sell an Ancient Scroll", + }, scrollInjectionsRaw: { "": "Scroll Injection Weights", "@Tooltip": "Maps the names of loot tables to the amount of per-world patterns on scrolls should go in them. There's about a 50% chance to get any scrolls in a given chest marked here; once that is met, between 1 and that many scrolls are generated.", @@ -380,11 +384,6 @@ "": "Amethyst Shard Drop Rate Change", "@Tooltip": "How much the number of amethyst shards dropped from clusters is increased/decreased.", }, - - // TODO: are these used anywhere?? - "fewScrollTables.@Tooltip": "Loot tables that a small number of Ancient Scrolls are injected into", - "someScrollTables.@Tooltip": "Loot tables that a decent number of Ancient Scrolls are injected into", - "manyScrollTables.@Tooltip": "Loot tables that a huge number of Ancient Scrolls are injected into", }, }, }, @@ -498,7 +497,7 @@ all_media: "Entire contents", infinite_media: "Infinite", }, - + // TODO: post-eigengrau make these less anticlimactic message: { cant_overcast: "That Hex needed more media than I had... I should double-check my math.", @@ -521,6 +520,11 @@ }, sealed: "Sealed", }, + + scroll: { + needs_purchase: "Purchase to show pattern", + pattern_not_loaded: "Place in inventory to load pattern", + }, abacus: { "": "%d", @@ -1476,7 +1480,7 @@ "2": "Like a $(l:items/focus)$(item)Focus/$, there exists a simple method to prevent accidental overwriting. Crafting it with a $(item)Honeycomb/$ will lacquer the current page, preventing $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ from modifying its contents. Also like a $(l:items/focus)$(item)Focus/$, using $(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove the lacquer along with the page's contents.$(br2)I can also name each page individually in an anvil. Naming it will change only the name of the currently selected page, for easy browsing.", "crafting.desc": "$(italic)Wizards love words. Most of them read a great deal, and indeed one strong sign of a potential wizard is the inability to get to sleep without reading something first.", }, - + scroll: { "1": "A $(l:items/scroll)$(item)Scroll/$ is a convenient method of sharing a pattern with others. I can copy a pattern onto one with $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, after which it will display in a tooltip.$(br2)I can also place them on the wall as decoration or edification, like a painting, in sizes from 1x1 to 3x3 blocks. Using $(l:items/amethyst)$(item)Amethyst Dust/$ on such a scroll will have it display the stroke order.", "2": "In addition, I can also find so-called $(l:items/scroll)$(item)Ancient Scrolls/$ in the dungeons and strongholds of the world. These contain the stroke order of $(thing)Great Spells/$, powerful magicks rumored to be too powerful for the hands and minds of mortals...$(br2)If those \"mortals\" couldn't cast them, I'm not sure they deserve to know them.", diff --git a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 index 3abbcc31fd..087963f6f1 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 @@ -335,11 +335,6 @@ "": "Amethyst Shard Drop Rate Change", "@Tooltip": "How much the number of amethyst shards dropped from clusters is increased/decreased.", }, - - // TODO: are these used anywhere?? - "fewScrollTables.@Tooltip": "Loot tables that a small number of Ancient Scrolls are injected into", - "someScrollTables.@Tooltip": "Loot tables that a decent number of Ancient Scrolls are injected into", - "manyScrollTables.@Tooltip": "Loot tables that a huge number of Ancient Scrolls are injected into", }, }, }, diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 3bb31e0dd9..92866af53e 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -380,11 +380,6 @@ "": "紫水晶碎片掉落率变化量", "@Tooltip": "采掘紫水晶簇时紫水晶碎片掉落数量相较原版的改变量", }, - - // TODO: are these used anywhere?? - "option.server.fewScrollTables.@Tooltip": "会额外生成较少数量卷轴的战利品表", - "option.server.someScrollTables.@Tooltip": "会额外生成中等数量卷轴的战利品表", - "option.server.manyScrollTables.@Tooltip": "会额外生成较大数量卷轴的战利品表", }, }, }, From a334b53bb9d50a994a79fd39c7ca26f65c38c520 Mon Sep 17 00:00:00 2001 From: ChuijkYahus <94828194+ChuijkYahus@users.noreply.github.com> Date: Wed, 15 Jan 2025 15:56:28 +0800 Subject: [PATCH 20/81] zh_cn lang update --- .../resources/assets/hexcasting/lang/zh_cn.flatten.json5 | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 3bb31e0dd9..8802a9c255 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -586,6 +586,7 @@ add_segment: "绘制线段", }, cast: { + fail: "事故:轰鸣", normal: "操作:嗡鸣", spell: "法术:施放", hermes: "赫尔墨斯之策略:鸣响", @@ -927,7 +928,7 @@ wrong_dimension: "无法在%2$s中影响到%1$s", entity_too_far: "%s超出影响范围", immune_entity: "无法影响到%s", - eval_too_much: "递归深度过大", + eval_too_much: "运行了过多图案", no_item: "需要%s,而实际无对应物品", "no_item.offhand": "需要在另一只手里持有%s,而实际无对应物品", bad_entity: "需要%s,而实际接受了%s", @@ -1383,8 +1384,8 @@ "retrospection.title": "反思过急", retrospection: "试图在绘制$(l:patterns/patterns_as_iotas#hexcasting:open_paren)$(action)内省/$前绘制$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$。$(br2)产生橙色火花,并压入一个$(l:patterns/patterns_as_iotas#hexcasting:close_paren)$(action)反思/$对应的图案。", - "too_many_patterns.title": "钻研过深", - too_many_patterns: "在一个法术内以元运行方式运行过多法术。$(br2)产生暗蓝色火花,并使我窒息。", + "too_many_patterns.title": "陷入沉思", + too_many_patterns: "在单个$(hex)咒术/$试图运行过多图案,通常是因为不小心制造了死循环。$(br2)产生暗蓝色火花,并使我窒息。", "true_name.title": "违犯他人", true_name: "试图在某种永久性媒介中$(l:patterns/readwrite#hexcasting:write)$(action)存储/$代表另一位玩家的 iota。$(br2)产生黑色火花,并致盲大约一分钟。", @@ -1557,7 +1558,7 @@ spellcircles: { "1": "我终于知道$(l:items/slate)$(item)石板/$的用途了。早已遗落的卓伟结构。镌刻其上的图案会按顺序自动运行。思维和能量在其中穿梭,一个接一个接一个接一个接一个穿梭穿梭穿梭——我不能我不能我不能跟着它的思维应该去理解。", - "2": "我需要$(l:greatwork/impetus)$(item)促动石/$作为一种自我维持的$(media)媒质/$波源来启动仪式。而产生的波就会随着$(l:items/slate)$(item)石板/$或是其他和这种波亲和性好的方块穿梭,一个接一个地收集碰到的图案。当波最终回到$(l:greatwork/impetus)$(item)促动石/$处时,所有碰到的图案就会按顺序运行。$(br2)$(media)媒质/$流出任何方块的方向必须唯一而确定,否则法术环会在分叉处失效。", + "2": "我需要$(l:greatwork/impetus)$(item)促动石/$作为一种自我维持的$(media)媒质/$波源来启动仪式。产生的波会随着$(l:items/slate)$(item)石板/$或是其他合适的方块穿梭,运行它碰到的图案。$(br2)如果波无法回到$(l:greatwork/impetus)$(item)促动石/$处,施法会立即失败。而且,波流出任何方块的方向必须唯一而确定,否则法术环会在分叉处失效。", "3": "因此,法术“环”必须是一个封闭的图形,凹多边形和凸多边形均可,方向也随意。实际上,借助某些其他方块,法术环可在所有三个维度上随意排布。这种性质可能没什么大用,但我必须给大脑一点刺激,好让研究继续下去。", "4": "真是精妙。法术环不会从我的物品栏或我的意识中汲取$(media)媒质/$,而是要通过漏斗(或类似装置)向$(l:greatwork/impetus)$(item)促动石/$提供晶态的$(media)媒质/$。$(br2)$(l:items/lens)$(item)探知透镜/$能以紫水晶粉为单位显示$(l:greatwork/impetus)$(item)促动石/$中的$(media)媒质/$量。", "5": "然而,用法术环施放的法术有一个限制:它无法影响环外的事物。也即,它无法影响到能将整个法术环包起的最小长方体外的事物(有凹进部分的法术环仍能影响凹进部分内的事物)。", From 8d711f41f46a0a7b9fcd96ca077ab2b7e3e0cde7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AF=E6=A1=89?= <68276806+CoreanXka@users.noreply.github.com> Date: Mon, 20 Jan 2025 22:36:28 +0800 Subject: [PATCH 21/81] Update zh_cn.flatten.json5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 哨卫出现了两次,删除其中没有链接的一个 --- .../main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 3bb31e0dd9..609c3ae9f7 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -1944,7 +1944,7 @@ "1": "$(italic)去吧!现在一切都已完成,$(br)只须留着一个人作哨卫。/$$(br2)$(l:patterns/spells/sentinels)$(thing)哨卫/$是一种能被$(hex)咒术/$召唤出的神秘力量,就和亲人或是侍卫一样。对我而言,它是一个旋转着的几何体,而其他人看不见它。", "2": "它有些有趣的性质:$(li)它似乎不可被触摸,没人摸得到它。$(li)只有我的$(hex)咒术/$才能与之交互。$(li)一旦召唤,在被驱除前它都将留在原位。$(li)只要我离它足够近,我就能透过方块看见它。", - "sentinel/create": "在给定位置召唤哨卫$(l:patterns/spells/sentinels)$(thing)哨卫/$。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", + "sentinel/create": "在给定位置召唤$(l:patterns/spells/sentinels)$(thing)哨卫/$。消耗大约 1 个$(l:items/amethyst)$(item)紫水晶粉/$。", "sentinel/destroy": "将我的$(l:patterns/spells/sentinels)$(thing)哨卫/$从世界中驱除出去。消耗极少量$(media)媒质/$。", "sentinel/get_pos": "将我的$(l:patterns/spells/sentinels)$(thing)哨卫/$的位置加到栈中,若并未召唤则加入一个 $(l:casting/influences)$(thing)Null/$。消耗极少量$(media)媒质/$。", "sentinel/wayfind": "将栈顶的位置向量变为从我的位置指向$(l:patterns/spells/sentinels)$(thing)哨卫/$的单位向量,若并未召唤则变为 $(l:casting/influences)$(thing)Null/$。消耗极少量$(media)媒质/$。", From 267b6771766c1f0d2391c50dda9442f913f54ef2 Mon Sep 17 00:00:00 2001 From: gamma-delta Date: Thu, 23 Jan 2025 11:49:18 -0600 Subject: [PATCH 22/81] fix dependency notation --- Fabric/build.gradle | 18 ++++++++++-------- Forge/build.gradle | 12 ++++++------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 7eed9b7eb5..b98e98ba44 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -6,15 +6,17 @@ plugins { pkSubproj { platform "fabric" curseforgeJar remapJar.archiveFile - curseforgeDependencies[ - "paucal", "patchouli", "fabric-language-kotlin", "inline", "cloth-config", - "cardinal-components-api", "fabric-api" - ] + curseforgeDependencies([ + "paucal:0.6.0", "patchouli:1.20.1-80", "fabric-language-kotlin:1.9.4+kotlin.1.8.21", + "inline:1.20.1-1.0.1", "cloth-config:11.1.0", + "cardinal-components-api:5.2.1", "fabric-api:0.84" + ]) modrinthJar remapJar.archiveFile - modrinthDependencies[ - "paucal", "patchouli", "fabric-language-kotlin", "inline", "cloth-config", - "cardinal-components-api", "fabric-api" - ] + modrinthDependencies([ + "paucal:0.6.0", "patchouli:1.20.1-80", "fabric-language-kotlin:1.9.4+kotlin.1.8.21", + "inline:1.20.1-1.0.1", "cloth-config:11.1.0", + "cardinal-components-api:5.2.1", "fabric-api:0.84" + ]) } loom { diff --git a/Forge/build.gradle b/Forge/build.gradle index 40ec5bbbf1..8fb040db8a 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -26,13 +26,13 @@ apply plugin: 'org.spongepowered.mixin' pkSubproj { platform "forge" curseforgeJar jar.archiveFile - curseforgeDependencies[ - "paucal", "patchouli", "caelus", "inline" - ] + curseforgeDependencies([ + "paucal:0.6.0", "patchouli:1.20.1-80", "caelus:3.1.0+1.20", "inline:1.20.1-1.0.1" + ]) modrinthJar jar.archiveFile - modrinthDependencies[ - "paucal", "patchouli", "caelus", "inline" - ] + modrinthDependencies([ + "paucal:0.6.0", "patchouli:1.20.1-80", "caelus:3.1.0+1.20", "inline:1.20.1-1.0.1" + ]) } repositories { From b5530c3d834c379d8b86082f6e39cd299e1ee5e9 Mon Sep 17 00:00:00 2001 From: object-Object Date: Thu, 23 Jan 2025 13:04:22 -0500 Subject: [PATCH 23/81] Switch to hexdoc-dev/actions and artifacts v4 --- .github/workflows/build_docs.yml | 4 ++-- .github/workflows/pr.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index f2d8c7906c..736ec27fd2 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -24,7 +24,7 @@ permissions: jobs: hexdoc: - uses: hexdoc-dev/hexdoc/.github/workflows/hexdoc.yml@main + uses: hexdoc-dev/actions/.github/workflows/hexdoc.yml@v1 permissions: contents: write pages: read @@ -51,7 +51,7 @@ jobs: id-token: write steps: - name: Download package artifact - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: hexdoc-build path: dist diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2600ad5068..c34eed7e43 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -74,7 +74,7 @@ jobs: hexdoc: # don't bother running the docs build when pushing to main - nothing necessary to cache here if: github.event_name != 'push' - uses: hexdoc-dev/hexdoc/.github/workflows/hexdoc.yml@main + uses: hexdoc-dev/actions/.github/workflows/hexdoc.yml@v1 permissions: contents: write pages: read From a8a47a60f36b605a0910038445e4b23b234bc577 Mon Sep 17 00:00:00 2001 From: beholderface Date: Fri, 10 Jan 2025 10:18:47 -0500 Subject: [PATCH 24/81] some attributes attributes for being allowed to staffcast, media consumption, player ambit radius, and sentinel ambit radius code largely based on justs_js' Hexxy Attributes addon, PR made with his permission --- .../hexcasting/client/gui/GuiSpellcasting.kt | 2 +- .../client/render/HexAdditionalRenderers.java | 2 +- .../hexcasting/common/items/ItemStaff.java | 4 ++++ .../hexcasting/common/lib/HexAttributes.java | 23 +++++++++++++++++-- .../hexcasting/lang/en_us.flatten.json5 | 4 ++++ .../fabric/mixin/FabricPlayerMixin.java | 4 ++++ .../hexcasting/forge/ForgeHexInitializer.java | 4 ++++ 7 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt index 0a9f66cd2b..df0c5acb60 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt @@ -122,7 +122,7 @@ class GuiSpellcasting constructor( val player = minecraft.player if (player != null) { val heldItem = player.getItemInHand(handOpenedWith) - if (heldItem.isEmpty || !heldItem.`is`(HexTags.Items.STAVES)) + if (heldItem.isEmpty || !heldItem.`is`(HexTags.Items.STAVES) || player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0) closeForReal() } } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java index 1861a9b8fb..0e96540a91 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java @@ -159,7 +159,7 @@ private static void tryRenderScryingLensOverlay(GuiGraphics graphics, float part return; } - if (player.getAttributeValue(HexAttributes.SCRY_SIGHT) <= 0.0) + if (player.getAttributeValue(HexAttributes.SCRY_SIGHT) <= 0.0 || player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0) return; var hitRes = mc.hitResult; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java index 80e84f4a2d..558f716dc5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.common.items; import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.common.lib.HexAttributes; import at.petrak.hexcasting.common.lib.HexSounds; import at.petrak.hexcasting.common.msgs.MsgClearSpiralPatternsS2C; import at.petrak.hexcasting.common.msgs.MsgOpenSpellGuiS2C; @@ -25,6 +26,9 @@ public ItemStaff(Properties pProperties) { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { + if (player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0){ + return InteractionResultHolder.fail(player.getItemInHand(hand)); + } if (player.isShiftKeyDown()) { if (world.isClientSide()) { player.playSound(HexSounds.STAFF_RESET, 1f, 1f); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java index 967f61268f..097c305ad9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.common.lib; import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.casting.eval.env.PlayerBasedCastEnv; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.RangedAttribute; @@ -24,14 +25,32 @@ public static void register(BiConsumer r) { private static final Map ATTRIBUTES = new LinkedHashMap<>(); + private static final String MOD_ID = HexAPI.MOD_ID; + public static final Attribute GRID_ZOOM = make("grid_zoom", new RangedAttribute( - HexAPI.MOD_ID + ".attributes.grid_zoom", 1.0, 0.5, 4.0)).setSyncable(true); + MOD_ID + ".attributes.grid_zoom", 1.0, 0.5, 4.0)).setSyncable(true); /** * Whether you have the lens overlay when looking at something. 0 = no, > 0 = yes. */ public static final Attribute SCRY_SIGHT = make("scry_sight", new RangedAttribute( - HexAPI.MOD_ID + ".attributes.scry_sight", 0.0, 0.0, 1.0)).setSyncable(true); + MOD_ID + ".attributes.scry_sight", 0.0, 0.0, 1.0)).setSyncable(true); + + //whether the player is allowed to use staffcasting and scrying lenses + public static final Attribute FEEBLE_MIND = make("feeble_mind", new RangedAttribute( + MOD_ID + ".attributes.feeble_mind", 0.0, 0.0, 1.0).setSyncable(true)); + + //a multiplier to adjust media consumption across the board + public static final Attribute MEDIA_CONSUMPTION_MODIFIER = make("media_consumption", new RangedAttribute( + MOD_ID + ".attributes.media_consumption", 1.0, 0.0, Double.MAX_VALUE).setSyncable(true)); + + public static final Attribute AMBIT_RADIUS = make("ambit_radius", new RangedAttribute( + MOD_ID + ".attributes.ambit_radius", PlayerBasedCastEnv.DEFAULT_AMBIT_RADIUS, 0.0, Double.MAX_VALUE).setSyncable(true)); + + public static final Attribute SENTINEL_RADIUS = make("sentinel_radius", new RangedAttribute( + MOD_ID + ".attributes.sentinel_radius", PlayerBasedCastEnv.DEFAULT_SENTINEL_RADIUS, 0.0, Double.MAX_VALUE).setSyncable(true)); + + private static T make(String id, T attr) { var old = ATTRIBUTES.put(modLoc(id), attr); diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 1f578be3a1..9e82f1cfd9 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -615,8 +615,12 @@ attributes: { grid_zoom: "Casting Grid Size", + media_consumption: "Media Consumption", + ambit_radius: "Player Ambit Radius", + sentinel_radius: "Sentinel Ambit Radius", // TODO: the +1 is kind of janky scry_sight: "Scrying Sight", + feeble_mind: "Feeble Mind" }, // Action localizations diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java index 2c7584663f..45a22117b7 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java @@ -22,5 +22,9 @@ protected FabricPlayerMixin(EntityType entityType, Level var out = cir.getReturnValue(); out.add(HexAttributes.GRID_ZOOM); out.add(HexAttributes.SCRY_SIGHT); + out.add(HexAttributes.FEEBLE_MIND); + out.add(HexAttributes.MEDIA_CONSUMPTION_MODIFIER); + out.add(HexAttributes.AMBIT_RADIUS); + out.add(HexAttributes.SENTINEL_RADIUS); } } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index 16bc2a0549..39bd896580 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -277,6 +277,10 @@ private static void initListeners() { modBus.addListener((EntityAttributeModificationEvent e) -> { e.add(EntityType.PLAYER, HexAttributes.GRID_ZOOM); e.add(EntityType.PLAYER, HexAttributes.SCRY_SIGHT); + e.add(EntityType.PLAYER, HexAttributes.FEEBLE_MIND); + e.add(EntityType.PLAYER, HexAttributes.MEDIA_CONSUMPTION_MODIFIER); + e.add(EntityType.PLAYER, HexAttributes.AMBIT_RADIUS); + e.add(EntityType.PLAYER, HexAttributes.SENTINEL_RADIUS); }); if (ModList.get().isLoaded(HexInterop.Forge.CURIOS_API_ID)) { From 77c811c39d476a264d20ad4ccf5dc04fd395bca9 Mon Sep 17 00:00:00 2001 From: beholderface Date: Fri, 10 Jan 2025 10:33:31 -0500 Subject: [PATCH 25/81] put back formerly-conflicting code --- .../api/casting/eval/CastingEnvironment.java | 4 ++++ .../api/casting/eval/env/CircleCastEnv.java | 6 +++--- .../casting/eval/env/PlayerBasedCastEnv.java | 21 +++++++++++++++---- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java index 9157063a97..ebd47a1e65 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java @@ -10,6 +10,7 @@ import at.petrak.hexcasting.api.mod.HexConfig; import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.api.utils.HexUtils; +import at.petrak.hexcasting.common.lib.HexAttributes; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; @@ -247,6 +248,9 @@ public boolean isEnlightened() { * positive. */ public long extractMedia(long cost, boolean simulate) { + if (this.getCastingEntity() != null){ + cost = (long) (cost * this.getCastingEntity().getAttributeValue(HexAttributes.MEDIA_CONSUMPTION_MODIFIER)); + } for (var extractMediaComponent : preMediaExtract) cost = extractMediaComponent.onExtractMedia(cost, simulate); cost = extractMediaEnvironment(cost, simulate); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java index d1d542780d..1fb6698bf7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java @@ -13,6 +13,7 @@ import at.petrak.hexcasting.api.casting.mishaps.MishapDisallowedSpell; import at.petrak.hexcasting.api.mod.HexConfig; import at.petrak.hexcasting.api.pigment.FrozenPigment; +import at.petrak.hexcasting.common.lib.HexAttributes; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -29,8 +30,6 @@ import java.util.List; import java.util.function.Predicate; -import static at.petrak.hexcasting.api.casting.eval.env.PlayerBasedCastEnv.SENTINEL_RADIUS; - public class CircleCastEnv extends CastingEnvironment { protected final CircleExecutionState execState; @@ -133,6 +132,7 @@ public long extractMediaEnvironment(long cost, boolean simulate) { public boolean isVecInRangeEnvironment(Vec3 vec) { var caster = this.execState.getCaster(this.world); if (caster != null) { + double sentinelRadius = caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); if (vec.distanceToSqr(caster.position()) <= caster.getBbHeight() * caster.getBbHeight()) { return true; } @@ -141,7 +141,7 @@ public boolean isVecInRangeEnvironment(Vec3 vec) { if (sentinel != null && sentinel.extendsRange() && caster.level().dimension() == sentinel.dimension() - && vec.distanceToSqr(sentinel.position()) <= SENTINEL_RADIUS * SENTINEL_RADIUS + 0.00000000001 + && vec.distanceToSqr(sentinel.position()) <= sentinelRadius * sentinelRadius + 0.00000000001 ) { return true; } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java index 10ff3b052b..0f6ef77703 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java @@ -14,6 +14,7 @@ import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.api.utils.MediaHelper; +import at.petrak.hexcasting.common.lib.HexAttributes; import at.petrak.hexcasting.common.lib.HexDamageTypes; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.core.BlockPos; @@ -35,8 +36,10 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public abstract class PlayerBasedCastEnv extends CastingEnvironment { - public static final double AMBIT_RADIUS = 32.0; - public static final double SENTINEL_RADIUS = 16.0; + public static final double DEFAULT_AMBIT_RADIUS = 32.0; + private double ambitRadius; + public static final double DEFAULT_SENTINEL_RADIUS = 16.0; + private double sentinelRadius; protected final ServerPlayer caster; protected final InteractionHand castingHand; @@ -45,6 +48,8 @@ protected PlayerBasedCastEnv(ServerPlayer caster, InteractionHand castingHand) { super(caster.serverLevel()); this.caster = caster; this.castingHand = castingHand; + this.ambitRadius = caster.getAttributeValue(HexAttributes.AMBIT_RADIUS); + this.sentinelRadius = caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); } @Override @@ -78,6 +83,14 @@ protected List getPrimaryStacks() { return getPrimaryStacksForPlayer(this.castingHand, this.caster); } + public double getAmbitRadius() { + return this.ambitRadius; + } + + public double getSentinelRadius(){ + return this.sentinelRadius; + } + @Override public boolean replaceItem(Predicate stackOk, ItemStack replaceWith, @Nullable InteractionHand hand) { return replaceItemForPlayer(stackOk, replaceWith, hand, this.caster); @@ -90,12 +103,12 @@ public boolean isVecInRangeEnvironment(Vec3 vec) { && sentinel.extendsRange() && this.caster.level().dimension() == sentinel.dimension() // adding 0.00000000001 to avoid machine precision errors at specific angles - && vec.distanceToSqr(sentinel.position()) <= SENTINEL_RADIUS * SENTINEL_RADIUS + 0.00000000001 + && vec.distanceToSqr(sentinel.position()) <= sentinelRadius * sentinelRadius + 0.00000000001 ) { return true; } - return vec.distanceToSqr(this.caster.position()) <= AMBIT_RADIUS * AMBIT_RADIUS + 0.00000000001; + return vec.distanceToSqr(this.caster.position()) <= ambitRadius * ambitRadius + 0.00000000001; } @Override From c5c8f3fd2b32c95f3c1e90888caa45d2147b55ce Mon Sep 17 00:00:00 2001 From: beholderface Date: Fri, 10 Jan 2025 10:38:13 -0500 Subject: [PATCH 26/81] oops forgot to put that code back --- .../api/casting/eval/env/PlayerBasedCastEnv.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java index 0f6ef77703..750a48fa23 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java @@ -71,6 +71,16 @@ public void postExecution(CastResult result) { this.sendMishapMsgToPlayer(doMishap); } } + if (this.caster != null){ + double ambitAttribute = this.caster.getAttributeValue(HexAttributes.AMBIT_RADIUS); + if (this.ambitRadius != ambitAttribute){ + this.ambitRadius = ambitAttribute; + } + double sentinelAttribute = this.caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); + if (this.sentinelRadius != sentinelAttribute){ + this.sentinelRadius = sentinelAttribute; + } + } } @Override From 6230aa7b1d6d40b82f0c616f833b2754cd4c9e6c Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Thu, 23 Jan 2025 18:41:07 -0500 Subject: [PATCH 27/81] Move op_id pattern-loading into ItemScroll --- .../common/items/storage/ItemScroll.java | 11 ++++++++-- .../loot/AddPerWorldPatternToScrollFunc.java | 22 ++++++------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java index 91a9537355..4fadd9bf57 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java @@ -9,14 +9,16 @@ import at.petrak.hexcasting.common.entities.EntityWallScroll; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.common.misc.PatternTooltip; -import at.petrak.hexcasting.common.loot.AddPerWorldPatternToScrollFunc; +import at.petrak.hexcasting.common.casting.PatternRegistryManifest; import at.petrak.hexcasting.interop.inline.InlinePatternData; +import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.ResourceKey; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -170,7 +172,12 @@ public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pS } // if op_id is set but there's no stored pattern, load the pattern on inv tick if (NBTHelper.hasString(pStack, TAG_OP_ID) && !NBTHelper.hasCompound(pStack, TAG_PATTERN) && pEntity.getServer() != null) { - AddPerWorldPatternToScrollFunc.doStatic(pStack, pLevel.getRandom(), pEntity.getServer().overworld()); + var patternKey = ResourceKey.create( + IXplatAbstractions.INSTANCE.getActionRegistry().key(), + ResourceLocation.tryParse(NBTHelper.getString(pStack, TAG_OP_ID)) + ); + var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, pEntity.getServer().overworld()); + NBTHelper.put(pStack, TAG_PATTERN, pat.serializeToNBT()); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java index 1a972bc022..0d45634db4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java @@ -40,24 +40,16 @@ public AddPerWorldPatternToScrollFunc(LootItemCondition[] lootItemConditions) { * This doesn't actually have any params so extract behaviour out for the benefit of forge */ public static ItemStack doStatic(ItemStack stack, RandomSource rand, ServerLevel overworld) { - ResourceKey patternKey; - if (NBTHelper.hasString(stack, ItemScroll.TAG_OP_ID)) { - patternKey = ResourceKey.create( - IXplatAbstractions.INSTANCE.getActionRegistry().key(), - ResourceLocation.tryParse(NBTHelper.getString(stack, ItemScroll.TAG_OP_ID)) - ); - } else { - var perWorldKeys = new ArrayList>(); - Registry regi = IXplatAbstractions.INSTANCE.getActionRegistry(); - for (var key : regi.registryKeySet()) { - if (HexUtils.isOfTag(regi, key, HexTags.Actions.PER_WORLD_PATTERN)) { - perWorldKeys.add(key); - } + var perWorldKeys = new ArrayList>(); + Registry regi = IXplatAbstractions.INSTANCE.getActionRegistry(); + for (var key : regi.registryKeySet()) { + if (HexUtils.isOfTag(regi, key, HexTags.Actions.PER_WORLD_PATTERN)) { + perWorldKeys.add(key); } - patternKey = perWorldKeys.get(rand.nextInt(perWorldKeys.size())); - NBTHelper.putString(stack, ItemScroll.TAG_OP_ID, patternKey.location().toString()); } + var patternKey = perWorldKeys.get(rand.nextInt(perWorldKeys.size())); var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, overworld); + NBTHelper.putString(stack, ItemScroll.TAG_OP_ID, patternKey.location().toString()); NBTHelper.put(stack, ItemScroll.TAG_PATTERN, pat.serializeToNBT()); return stack; } From 3bf9689eb0448c0e63feb22646b2ab4419215c1e Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Thu, 23 Jan 2025 18:47:46 -0500 Subject: [PATCH 28/81] Clamp trader scroll chance between 0 and 1 --- .../main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index b3eeadde6b..e64af01369 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -215,6 +215,7 @@ public static final class Server implements HexConfig.ServerConfigAccess, Config public void validatePostLoad() throws ValidationException { this.maxOpCount = Math.max(this.maxOpCount, 0); this.maxSpellCircleLength = Math.max(this.maxSpellCircleLength, 4); + this.traderScrollChance = Mth.clamp(this.traderScrollChance, 0.0, 1.0); this.scrollInjections = new Object2IntOpenHashMap<>(); try { From f30d22eb281eb3dfb1392b5150f5bb622424c689 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Thu, 23 Jan 2025 19:04:06 -0500 Subject: [PATCH 29/81] Revert name change of main creative tab to unbreak addon compat --- .../at/petrak/hexcasting/common/lib/HexBlocks.java | 4 ++-- .../hexcasting/common/lib/HexCreativeTabs.java | 2 +- .../at/petrak/hexcasting/common/lib/HexItems.java | 12 ++++++------ .../assets/hexcasting/lang/en_us.flatten.json5 | 2 +- .../assets/hexcasting/lang/ru_ru.flatten.json5 | 4 ++-- .../assets/hexcasting/lang/zh_cn.flatten.json5 | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java index df5792dc52..97e58a75e4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java @@ -296,14 +296,14 @@ private static T blockNoItem(String name, T block) { return block; } private static T blockItem(String name, T block) { - return blockItem(name, block, HexItems.props(), HexCreativeTabs.MAIN); + return blockItem(name, block, HexItems.props(), HexCreativeTabs.HEX); } private static T blockItem(String name, T block, @Nullable CreativeModeTab tab) { return blockItem(name, block, HexItems.props(), tab); } private static T blockItem(String name, T block, Item.Properties props) { - return blockItem(name, block, props, HexCreativeTabs.MAIN); + return blockItem(name, block, props, HexCreativeTabs.HEX); } private static T blockItem(String name, T block, Item.Properties props, @Nullable CreativeModeTab tab) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java index 03f171236c..03d8b26615 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java @@ -21,7 +21,7 @@ public static void registerCreativeTabs(BiConsumer TABS = new LinkedHashMap<>(); - public static final CreativeModeTab MAIN = register("main", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) + public static final CreativeModeTab HEX = register("hexcasting", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) .icon(() -> new ItemStack(HexItems.SPELLBOOK))); public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index 7d81c959bc..9f7e3d8d8f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -99,23 +99,23 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final Supplier BATTERY_DUST_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.DUST_UNIT * 64, - MediaConstants.DUST_UNIT * 64), HexCreativeTabs.MAIN); + MediaConstants.DUST_UNIT * 64), HexCreativeTabs.HEX); public static final Supplier BATTERY_SHARD_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.SHARD_UNIT * 64, - MediaConstants.SHARD_UNIT * 64), HexCreativeTabs.MAIN); + MediaConstants.SHARD_UNIT * 64), HexCreativeTabs.HEX); public static final Supplier BATTERY_CRYSTAL_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.CRYSTAL_UNIT * 64, - MediaConstants.CRYSTAL_UNIT * 64), HexCreativeTabs.MAIN); + MediaConstants.CRYSTAL_UNIT * 64), HexCreativeTabs.HEX); public static final Supplier BATTERY_QUENCHED_SHARD_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.QUENCHED_SHARD_UNIT * 64, - MediaConstants.QUENCHED_SHARD_UNIT * 64), HexCreativeTabs.MAIN); + MediaConstants.QUENCHED_SHARD_UNIT * 64), HexCreativeTabs.HEX); public static final Supplier BATTERY_QUENCHED_BLOCK_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), MediaConstants.QUENCHED_BLOCK_UNIT * 64, - MediaConstants.QUENCHED_BLOCK_UNIT * 64), HexCreativeTabs.MAIN); + MediaConstants.QUENCHED_BLOCK_UNIT * 64), HexCreativeTabs.HEX); public static final EnumMap DYE_PIGMENTS = Util.make(() -> { var out = new EnumMap(DyeColor.class); @@ -191,7 +191,7 @@ private static T make(String id, T item, @Nullable CreativeMode } private static T make(String id, T item) { - return make(modLoc(id), item, HexCreativeTabs.MAIN); + return make(modLoc(id), item, HexCreativeTabs.HEX); } private static Supplier addToTab(Supplier stack, CreativeModeTab tab) { diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index a4194b8573..62996626f3 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -252,7 +252,7 @@ }, "itemGroup.hexcasting": { - main: "Hex Casting", + hexcasting: "Hex Casting", scrolls: "Hex Casting (Scrolls)", }, diff --git a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 index 087963f6f1..45889fe332 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/ru_ru.flatten.json5 @@ -211,8 +211,8 @@ }, "itemGroup.hexcasting": { - "": "Hexcasting", - creative_tab: "Hexcasting", + hexcasting: "Hex Casting", + scrolls: "Hex Casting (Scrolls)", }, "gui.hexcasting": { diff --git a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 index 92866af53e..17a02792db 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/zh_cn.flatten.json5 @@ -252,8 +252,8 @@ }, "itemGroup.hexcasting": { - "": "咒法学", - creative_tab: "咒法学", + hexcasting: "咒法学", + scrolls: "咒法学", }, "gui.hexcasting": { From 213429512b9eb119f5df9376eacc67c8dab29d84 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Thu, 23 Jan 2025 21:10:30 -0500 Subject: [PATCH 30/81] Make scroll trade replace special trade instead of one of the 5 junks --- .../src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java | 2 +- .../java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 845bf72095..b6e6d952bc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -80,7 +80,7 @@ public interface ServerConfigAccess { int DEFAULT_MAX_SPELL_CIRCLE_LENGTH = 1024; int DEFAULT_OP_BREAK_HARVEST_LEVEL = 3; - double DEFAULT_TRADER_SCROLL_CHANCE = 0.4; + double DEFAULT_TRADER_SCROLL_CHANCE = 0.2; boolean DEFAULT_VILLAGERS_DISLIKE_MIND_MURDER = true; diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java index 6972090d55..c2dbcf67be 100644 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java +++ b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java @@ -31,7 +31,7 @@ private void addNewTrades(CallbackInfo ci) { ItemStack scroll = new ItemStack(HexItems.SCROLL_LARGE); AddPerWorldPatternToScrollFunc.doStatic(scroll, rand, self.getServer().overworld()); NBTHelper.putBoolean(scroll, ItemScroll.TAG_NEEDS_PURCHASE, true); - offerList.set(rand.nextInt(5), new MerchantOffer(new ItemStack(Items.EMERALD, 12), scroll, 1, 1, 1)); + offerList.set(5, new MerchantOffer(new ItemStack(Items.EMERALD, 12), scroll, 1, 1, 1)); } } } From 248ca92d7fc201710c785709433109a474604103 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Fri, 24 Jan 2025 19:26:53 -0500 Subject: [PATCH 31/81] Fixed crash with invalid op_id on unloaded scroll --- .../hexcasting/common/items/storage/ItemScroll.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java index 4fadd9bf57..1bea5dfec5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java @@ -170,12 +170,15 @@ public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pS if (NBTHelper.getBoolean(pStack, TAG_NEEDS_PURCHASE)) { NBTHelper.remove(pStack, TAG_NEEDS_PURCHASE); } - // if op_id is set but there's no stored pattern, load the pattern on inv tick + // if op_id is set but there's no stored pattern, attempt to load the pattern on inv tick if (NBTHelper.hasString(pStack, TAG_OP_ID) && !NBTHelper.hasCompound(pStack, TAG_PATTERN) && pEntity.getServer() != null) { - var patternKey = ResourceKey.create( - IXplatAbstractions.INSTANCE.getActionRegistry().key(), - ResourceLocation.tryParse(NBTHelper.getString(pStack, TAG_OP_ID)) - ); + var opID = ResourceLocation.tryParse(NBTHelper.getString(pStack, TAG_OP_ID)); + if (opID == null) { + // if the provided op_id is invalid, remove it so we don't keep trying every tick + NBTHelper.remove(pStack, TAG_OP_ID); + return; + } + var patternKey = ResourceKey.create(IXplatAbstractions.INSTANCE.getActionRegistry().key(), opID); var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, pEntity.getServer().overworld()); NBTHelper.put(pStack, TAG_PATTERN, pat.serializeToNBT()); } From 581817bf8d2f8d4e3cb54ec31f876c51c9dbae0e Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 15 Jan 2025 13:48:25 -0500 Subject: [PATCH 32/81] Item textures --- .../textures/item/cad/0_ancient_cypher.png | Bin 0 -> 5452 bytes .../item/cad/0_ancient_cypher_overlay.png | Bin 0 -> 4930 bytes .../textures/item/cad/1_ancient_cypher.png | Bin 0 -> 5825 bytes .../item/cad/1_ancient_cypher_overlay.png | Bin 0 -> 4936 bytes .../textures/item/cad/2_ancient_cypher.png | Bin 0 -> 5347 bytes .../item/cad/2_ancient_cypher_overlay.png | Bin 0 -> 4936 bytes .../textures/item/cad/3_ancient_cypher.png | Bin 0 -> 5956 bytes .../item/cad/3_ancient_cypher_overlay.png | Bin 0 -> 4930 bytes .../textures/item/cad/4_ancient_cypher.png | Bin 0 -> 5646 bytes .../item/cad/4_ancient_cypher_overlay.png | Bin 0 -> 4929 bytes .../textures/item/cad/5_ancient_cypher.png | Bin 0 -> 5218 bytes .../item/cad/5_ancient_cypher_overlay.png | Bin 0 -> 4932 bytes .../textures/item/cad/6_ancient_cypher.png | Bin 0 -> 5686 bytes .../item/cad/6_ancient_cypher_overlay.png | Bin 0 -> 4939 bytes .../textures/item/cad/7_ancient_cypher.png | Bin 0 -> 5456 bytes .../item/cad/7_ancient_cypher_overlay.png | Bin 0 -> 4939 bytes .../textures/item/scroll_ancient_large.png | Bin 442 -> 5691 bytes .../textures/item/scroll_ancient_medium.png | Bin 411 -> 5600 bytes .../textures/item/scroll_ancient_small.png | Bin 331 -> 5450 bytes 19 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/0_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/0_ancient_cypher_overlay.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/1_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/1_ancient_cypher_overlay.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/2_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/2_ancient_cypher_overlay.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/3_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/3_ancient_cypher_overlay.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/4_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/4_ancient_cypher_overlay.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/5_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/5_ancient_cypher_overlay.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/6_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/6_ancient_cypher_overlay.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/7_ancient_cypher.png create mode 100644 Common/src/main/resources/assets/hexcasting/textures/item/cad/7_ancient_cypher_overlay.png diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/0_ancient_cypher.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/0_ancient_cypher.png new file mode 100644 index 0000000000000000000000000000000000000000..844e9eca1dd8e6b25edeb1da3d3aca67eabf1cab GIT binary patch literal 5452 zcmeHKXH-+!77o&jilTxHN=T40nx2s4LX;9pRFEp5AY76gh(HpO2%(4tER^Blhz$`b zmM4zr01ARKFd&KzM8t7Gq&y!YN)fS8-%UWp^=7TNT7ziMFhp&QZN+56vzm!L zDdxL1T&xU=mCtGgAJ34|3nMFE)Xk<#e$<;HGxW^vk_ z5&Ug5`Xl;Tw$hLZ5tG>+sdO6cBqhC2yA`|Hd;J;1QrFQludnE|uAv&XFTXeWws3HZ zW+VEpzZ2HVUit%axaR~1uh+0{+^?(-70(z^OR(GWu{VB&5Bbcw$>({hp8e<;#z6Li zH*tq=9X!~5qB1LLQMR7wag8A*))F0`bvCm1%8UB3VX8y%ukTX*Ifk7tr54*-Z|j5p zyOPiSX|O&eedz)_6<{E-Rr}H6+{VI~#chWc5<2w%bY)VUj3O|?6N{V&CKR$xk+&zvtmeJ|(gg2O}`y$eX`aO6NdzHYs8-ktu+ z-TrqUKEbn5)RR6c%n*aKd!Ki-PQ*F;DXZ=6eSQq3o`%`XRDXMZ;jKBFF5!3f8yJT> zBK(vdDb%GS6mlFEnl+uiyH?3jA8{MMOubfF%~h=}&^Y#hT3G7Yt#NrJhed(wE$`+Z zRY*d*E&9W_9&u-E=La{z{#*m&58Ad``m0W*=Q9oMQr)^&CHvZ6f0*Ou<$REqOucWw_sOJZ41i?n_ms>tfyG)C+6#Zmj+BDk`qvVs2f*qpby3BM$Bz zeGv4Ji@Dr(4xLdxkbAT6Y0S%LWb@v#PDj0n7ncq=ROUwpPDp;+rN69MYDCd}xr}nR zpq<&c$`lMzsrn;&P8VQgZ9QE3iufkmRHRe9l2C-gr)udGJLnLQFDxVUBsKSk93-gs z=(em;)wT~6x2~!`J$`F@-Rs3$!>{C)Yq$E+PQ<7e%^&9n!U}| zcoIL%wF^1!>o!Fyvfb1gIq%o( z75uY$ZV#4OV{}4W=Js`HdZ|_V>78vZXwo3-x>^hQFU$hOytk_-9_z*B^sn4|IHq}T z^AEYJE|l&U^R9h7cq%!gtP`i#W0`qker?PMlJffF)?RAIj?z>uXVpR!riLwim-T{{ zm(lI(a){kFW@hg8_==9oW#h1p>y9I<$GB@B@2<}Ezfk?&d?fPcjqB0|t6B*E%%hs! z*Xvt6WnL?!Dg30eV_yR4^l12nmJB}^ND&vZq^X-#v9~QRDyZptP}MF|hunt_=@>um zM~1R6M?p8VHPqy?CH+y^FBc!1#9fF?QIy;SXa*#=c}+*m-|+d2V|`KWTspURNt-FiT(}OI`K>H zQ_U?=nCAmtMW!z&nMWp$A#db{O-4=Nic9*Wwqosk1VSN^XJ_Ziva|ct)ZkW@wfz9Y zsm9viMu5k<)1C&ekX`AyfbW9E5g9)&skY^eVIloZS5klppU-Fii1M)eZJv z=BI2ks95`?n)Seb?RbED$b#IN))ilCn4phl?5;ire_l(Ux-ih85F)PD7O8FV$p_laxL*`)mB0=LR^v2W+K8@?A>e8;lK z_jK;Q@^dF}4>Z1%XzZ?Sl%J+ia7jDg3w?u``L28Uq|wcjs3YqOHT399ToW|vhZ3f$ z2l)58nok{Hl%}{#w{=oaVRwb~d9d}_%_~m0Bmt4q z@G!m@kTOtmTmZh8iE${TTtyPfK>0YkBJBhs2ua40v3QKVlov@vt=2$Vi8x%qo#`+G z0Y5QNArgrYz~Q2zqOegUtUwfuBhcw|9G-|H5;3p_MjXwTfKm)!jFv%6V=y5xTf`Ge zcmh6Bh6x4i3ULH19v2>tn{6SM*hj)3GYylZV4$s}jCi(vjut`q@H8 zK`<{|D7S*i{z_BA<9;FQE8k=@@^EH50-Jxv{Yv{&>~dvT%h?%V3fS9Z?y;B*lx%%~ zBVhA5fc%z5qR=^H3o?d7VFzKz6b=ysT5xF?Jf2K|AS!`QptEN|vG`&M$Y(<`C>R{e zgK-FKHkC*xk}+&D-U34=2XSEt3p|EyK>;BP8l6I7K_ChT;dJuC!C(j{9uiQ-CxJ>Lku2yIR4R=|A(Ba7lr};l zFR01ALns!2#7yu3jrWTY{DhwdEfTIEIL=Y$uh&%;?Fa}EI6jEmSdDIhgW`!~fItNBWKSXyAdvwQ6@#Y$_*wb_4v!oCzqDoB2Wd5(bSIt|UO!qcn%+|$ zP{j1p^kW!LzL}6n`L+N+_H+nhFcRX({e-cmr`RDNKNy1h$4tR~lJowe7>HaVnN1+V z$)nN97&4d6!O*xI0tSTW94ek@L8P!LU!#i!TuBrtf^33e9$~KF0+n-xG@D74`PceU zA&@K&Fl8755i^T26mBM1oUCJfiq;DEUwl}}6=t;<*lt<|w=TF7;y$;+8NOsq=WiS{ zdH5SwfT6!H@=g4Hr|Uai-^9Q-DSxl7?{s|=1K*_ly}JHybZLBfnS%K6KcFc1RcY*j zr33t$r4qExk%>UdK0PkMfv`kf=;SL#AT)JkmjWU)OAi*RN?6YJsxP#Z6;UgGTsFrR z7QJCHZ9Hjr*nv4K%rpYVPp0de*lPT4kU8bSLD+Zn>RW(V}D3)?w6|M}1*hv1!HlSBy&sOMJ>c0EuA3q?cA#nD$Q_wyX|pq*PW3 za|#F7RO5Fl`1f7aihXBF8s7+1xegfJ9~?byP}82`NN6T>t=n^dUcXjPKZl5i$9Vbh z(cI{6bB8>CgyN9~eSDzi_B{8lc16pft=t^4p{p_iv8Tj~xqx#DW(R>_*}E_cZ3B1z E2gSun`Po8lyyz(_Wd0Rj{(Ao>tjD&qD~ zAFT*l(SoIlA}F{~MJUP>q$sW^BJNLt+AjeS&+9qwc+Ts8&YVnU?sxC+yZ3jOWHNny zyv$5&Odtp{6L|Ce!1p-aXXFTQwSV~mfgr=M#DHMj4~d6WYNZsDp)j7HLSa;kNg+tv z{4{5I_LEtr8Eqjoa}4^X9 zikWP)VIa9rJHEXn`+ohZ&5I7MSa9|sw0zjp@E{Vix5+`)6SBEwVf!}?PK+t7DGBj> zrB&z1m!#>|KaAWv=3*j4a1P4;Ez9uIoG6O$N!+Ja);INa z?A-o>>5-Qf-t{`SFS8Sy-xc?tWwkcTvg~`x7CGH7cvKvD)%;~JJ*d7EZoD7bD0lQ4 z{c>M^Ek6BGPN&v%e9A40c=*s*#(uH~DQkrzr@&9JAS? zSG1yPt!>sVC#o4gYK7bJX_aL???S_e8_7Kq*I9e- zm>6@kumM_heT(anRJ&C(4oHK3B_0l)?N=J?SX0ZLxH~Ia{j$C5&h;?wsNikg|2SCh zw5)1Bc08bXX|&wT*>;<4g<{9G=JUH{CqtSqKM0e>Mo;ee?RXfuHR)Az%k8O#4=>C* z=e2>`>@(L7YifP-Q_qy7))sz|P~cy1g_eB&a7k<7^5BRrrEh+gjs5pG_-Fjxi+hA= zH)2Ft*5AhX4U35wx#ila9rxkD756Ml!mZ2CTKP1KoTJPQ-C8r{4I7uYfA@&+*1YWA z`^t@N4!M>mmDx%6-&hkca~9oXC(QZ=tPbLXy$E22)naQ2Q{?axY{xWgh>esF83NFp~4C7)hB?#EZD z6S}9`Q#0q}`53S5@;LI0o89Sr=j}g*&j?9z&Zo6K(&~Aa@+a+ISDnZzZm?HJjp7|k zrsp*5eg4qvQUBSq?hiX=-)JwNIw@n9!#xNxScAE{`wHCMKeicYu06?HdEV#d+toz) zFZv9xqzP|{0`^cEXA+(RGSBFpV+Qxr>2vCg!Ylgf**@cWQE-H%`C{wUthGeVv8o^&Z(M^A8&;8FnbZ)vQ#{+Y8IMq;Ufb0YmSkTrcK-I0p%n&W#-!GdM~jnAm6w&5 zt*$HW=`mQ6q2BqDm%#<&Fb)G_FIc#kD^|)$h(swuNm{uIj711?an-62aWsmjUSSyz)G+Zr@ zpvUEcd!3j}fb}YPG>;H0^o8A(Y7}OW7$geOLyN`H2=h!}7qvvn_2YXEK!7J6AqvM; zTrxR6KAsd$Cn?pDWGaWlAya5%8jT1vh?)cij%bMr%`_cEKL#Jwh}D=1$CL_Khlz-k zu{e)F0PFBa|Kuv6a1dUh8DIhMLDnKFGL=Lj%jM*u78=|m4uA|e^p_Tz0PyQU_Cqzw zShX1Sh(i_lw4o3Z@u0mbRxQ(qBN3BP87c>=8n7$%vn{;@Lf=6P9R-n?T&1@HWPhfK zW71D#ede2PMIX*kM}YYt?q}K`W7jJKEuoOhSBhhG?g{ujf^L7VL@CB3T>UMZDyE?< zX9f{raOgya#F;~6OKAv^PLqn5B07iSOpy$M5-2n{q7b7xC;(2v01idWqH#nVgvg+X zr9_65CM6;qj)cfyGZ|uM7M;#UorgdyQDdMg5!q0$bWjoO z28l!aGY+u&m&8$sA`%7jW1wI^%CWyF209yIN+@g^k%>@IB16mq8RRe-L@He(Vu?94 zX9-QDk7^KIqm<(Dh#GZ^1Uv$+K!NJHf@ck+%JFmk_$XAD2S6E-N&_?vQbr&T1WVRU zjE~W}kpGJh7rnxe5d-Y{WngrHNk|?Xg#&y6U;oZyAP;}%7BKvElP}`;D_vjd`XUCt zNcn4ZeWmM*82BRPuhsQ`qs!#e%M_{r|A6AbtJ1~|NwMHHYlLW#7azKyJL%hlML;r2 z+I@6eQrg1+Z(yD`5k>gR^@#lg{(k z8~iK$mZ`)RDw*7Bv7tI@&CNOciY|5Ec@sMV9BZ4}DrjuRYdS5veb`cx;up^m>dNbz nY%ULb{<^H#G=Js9Yeo;MToeE3HetW5h8i9t{{ literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/1_ancient_cypher.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/1_ancient_cypher.png new file mode 100644 index 0000000000000000000000000000000000000000..ac4ca4c8bbe1be1c8e2d2f995119b433278b7749 GIT binary patch literal 5825 zcmeHKXH-+!77j`?g2I3bh?)r~Fqj@lfq;Q0UfPv}=eeyA!#-%H+n0$?zuT@lQ6QcoZZArcF@ydV%E4Htn3P{!lJV6waU z>%8~$8LN#w)|Mz57A5wcv2RfC|CpllyzJu|FRx}x2VJ$ZhWMr1Z@%3+vA7>ImJwst zCmIswr9tqwkD@+Ze{4wJ{@y>cF4F; ztDZkTay-$?;8u2raKoy*f5hHV z3zP=b5`VR`D2#Q{Y@2taC8$KnD~F+WQJE5$%JZpTxleHm{+ZP?qV!`yM;d^CNA z6>6m6`P+N!B&UD4p~tHVA%V|UwZ(~q^5HSr5m zE`%rO=o~4sd8bnS_}#?*3b@W&t-gK8S=DJdM`aPr8I;8Nsu9JeDki1*FpZkx1cIR- z?DTFKoMRv{oUscYjo;`nBUoYPBN~ZZ?`F7dVINPgkU?d15aQMARy9<|rXw`(8P+3i zQvUk5!%dUkkreh|v^(1?D{9U!8wY=l)#0vcSap=pdQF3UJA<`$RjyBr{TkOyEhC%O zwtv@6d%KN2 zQj0ALR;=qi22*HEA>=*Mckf^3Z;m^AnQ-83$~pTK9CmsAe6ji(BjtuKxHkCbLLAKR)BdS^Y;h z9*NH)Jf+WvJk@8Mw>taVfRAr=Q^D-@xm068xPG=(Irwr*)kTu%?FRRt$V!e>MVxnH zz(q6qcmgUfaphcebHfeX>8lPG+~#(JVDG)f>Gcc_^{=I;(1Rc9Uxp68Woo3DDps^V zXz+>4r*(~2mYe<)J7?d6=YB6wz-Q5>cF5VKa%g?ou zG@m^~C^dUt(O7WJHbN;R(5u~0`$UPA)tzn*!E^9J_pP zUoxS;tfl(^Jlxj$IGw=p!{P zO;9?di#z)y{Gn>mx~HrQN!}eEJ92kq|8Z(n)h>y5PerYFe!KVRp|QB0=+Zqs)JDMY zOst`&#;@7Q@Ka|rvey{YGBV%yE}r=HS{5>WWdU4=GT$QxUOyD`spgfS@!{=b`?Zs2 zZeP$jp`#F8z9J9k?7CKZpQYvnrEl~lHnj|MnG7KoPdMbNbr2D7x5i2(NRpcKIZ{doc!@>TgI zB!b7GA-&98v92OI7{GIk5QD2D+?ec$-`Nxn(%K4cDWgIJd{7D?Wc(n3ges#UCwZyR zf4LchL`*`YztfQGTs;tUp%_FE(L^*BWhdi>;*nNxgr%6nrFt^#KT|+wG-QBODxzXA zVPRqDFalaA_Q&8T6bc55$KdfO2!WD>3#5PyC6E}%DW*6WpoA^viKINC03qiDSi%q~ z4T*%t5ntlti(Fm5(hDS?ReBKaK9fAo+rp<51&Cnyny zh}ocBC@7E`OsC+mzxsHn=s=ZLm2cYHT@d1AjBNF&e&LJ0^YUANVL*micZx)Xr zK+1(2pgq77aD-u!Z$nHTA6zX3w-0;TvczD3(CAC}+iC(FFYD zhoAnypY4=hW|ITeET3Qrxx9jCxPYf(o#wQjh?lAZId8h-+$y9RLXYL8yOxF4!-2-hU_t3cv*bJitP+SsWIMNMI9C zWPk(J29^loNGz-wz%u)uT_WU4!vHa8;}7WwX$2MNq*e&y&r4;r}=TME!G; zAJX@yTtDUdAq9R2{Ij}#%JoAE{1EtOb^Xuef`5CM0tL_=P#E;6lt+CX2|Z>hvs@e) zFa!Dfv75giWSJ#$^p?P2v$f=h0xa`@4rEl3I=R}Z45%s1L?VmB(|e$2>BCM88z%W? zP72M@7SN8*G9?{|4LD)vd|Op7Kc~@IZGEgViFanHXuv-)I#85&_~?;VETEiEm7A=YOYucF&3Y3}f)-**W`#WYDj%DNIh=r^f+T7L2_+qhdZ(E9vYqj6;{ zlTd!Kvch{|y>1_To$I#1wJeLU4Z!Sm>grWO+2F=EjyAM=DXtAMhdONiQ_x>)LaC6@2_XGWIWjOC5y`yfQ8d zw!F#jQP47Y^x8YEbhGE0ZFh9Fdq8WLv#oOXyTCtPhN7=jDX*ZW{B6T2!I8W@e!&+M zc-k=%HmiGi&7zNL3G_^i_$$_((73ocop#0h5+dPh%Y&TFwq`?-)?V{(R1}%`Wcb``d(x#a XW|F%s8CkO#T0WSQog1UT)-U>BrRWD< literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/1_ancient_cypher_overlay.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/1_ancient_cypher_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..9cecaa2933d932cd5c7bfa8c8cf9446f4c41bc92 GIT binary patch literal 4936 zcmeHKc~BE+77wDL@kRtZiSZb9r<2Y_4hV7tC29aU6c9%`-5qGmWzs+Z1qF0O925mq zbPyLWbUdNF5Cl0KcTfg(yf{?Q6>nT-5CnC;1VpTzsx7N_{3-jPzwf=@JCaWJ z_MAJ6I*v-AP=-l8BtGDKr13LoAh_DKen2P`b2P>;fb>D4Xj+{{K`3z=8Lh=>xPeem zD2BT)G8bkx%^2$bA+X|GGwGn@Mc;1=q zh7rnUn4igOmIt4K)P(gorO)1!#Ly+Tx3<*V1pShE`(n_Q6S{A)XFOi68#D68*hkS4YQMsXmOHN)Sk;^)XA#B!OsaYL_(7XzMF}oTrzZZ;8a(cpE#$kX zQd=T$QqcBnsVLd+G2o|ks}A&Xnw!7-) zN3-keiVRS2e>)j;HsH0-ydwemu4fxxP!ogr4cPph>mbdkjzy>LZgzrrs={;q?3f+XJp+J)dGX2}|?Rg3-@%#ut`Y z)JR|Y)+Ow-Pw1|{bk(jfO4VLp{##o- zlN&BN=XMtkxs!T)lhs_u{TFYwx3cz}u+(%kna2-qThN+(+Vf;BVO{+5o_Na`YSqoH zK0cLZZJzn}?(Pg*yX?W+dEpl#=tpx5Rt^)IiE3T(O>IM?WkTtE4O2MYDZE`XYRGPF zqi)iw8OJW_pL}A}1uMl0q>{BHY}(rEYE? z+YL0?u2pGbk22>870Z0*@AI4RoYuH`k0@}|m=)=>tV>;qe-u0o(LJ%@5*|Lm69(K$ zNVH4wx3CFaIx%>FON)8=ol|KosE@5HGEY)uUKwj-E zAGIjcs!`v_N@RF+{Ty-U5&!D6?+0X$Wu1Hy-8kq(z*G6zl)yXQ$p?~iHym16yjdUk z;Cw~kk(+^?*(w=%|VnbJW}E9fn8bMB>E3{tlfbT&Y93@R-c zj}(gIY=ag-m*XT&j)xLzG5uBH1v-tu#Pr2H87$Mf;bDYFj1KpW@$^GumZL(9KHG`v zXb=Ga6;2{FgG#B^iwt7A30DN}jbbL9W>O)Si|GL}ZM(`KM>3}e0z8T7VI-*)F_}?OQH&@KL!%32vV=k*6J|5nYzSyT`e-$Y7$CKNiV>n4 zLxSs39ib%&jhbe}MC6(XQcS0Vb=pV&R9cy=7hbLJVFB>LG$2|givcrLDrR2`J?S0^ zKzbbdOAEap_!VLL;CfAj4#nLgaWy%mF9e46+G`_pN>ex(%EXnp3aIMAuB^|toGX=i z_gWY!2qjcnlNBKQGfk3Ed?M>J-;67!aQZp|%zJS^)BYH{Nf~I#WFmCb?+f9jBS2Lm%D!G1p)dd?;Gk>) ziX#xhL3j`s6DS~|(4GyUFiT+1#Sx67kej^0P|+NXPKAJU5-KDVXKK}@sQ|zv2hoV!bT~q4bbcC*QcO2GMKfCVF3UheVF-yx5E2KV zfM^kmErNM|Fu1ZrARjPK1ozR`V1y$2e`y=rhvwLwbPqxg_K!A+x_inOU(x;4{iq~N z%|xS_+Cqe&-680aNE|cy39!1C&@eEFx;32KpDhh1Dbj% zqceMgWf~{O$7mgy|HX%+Nuke(0e0OoFuK4bWcH529=?o2=WjfE^6)qA0HD8a@4wYvUqbWuOOOyO$q4=4(}D#fOz?FFw{1LgDQN+_3% zCnqyN4kUxM9)WraWyomb$BdG-%N7VNNU6--qIu{53$y9ef{pG#sQ4|GUBpF2#DX9e6m?YuzDYpE^X)m`@tkk}^W{u3bKkwcd++bv_g>!Q z1O@t=8c#IFU@)c}whs^eHPc*U4AAc>eM1liqbFL*4^{D?6r5Zk6NwWLoGMk0;1IP~ zgu$q9K3x>{`-5pFD;`Z?>MX`2+W*GeKIy^RccC})pVe$FD{l0jK~FwfJE!FhCnI@a zQ+sy5sf}gXAGxzSZCQk-g5%MG6;TMQv1e(q&CpKwYi*~`;*9)S4_c2O$_yOjSXlj5 z$H@4lcy&*zW6x$8F+)9`0u=Nm>pgU0tBF_5gQ}N!hyvPA$X~Onvz@C~NSswQEx3~Eos&$INsqgz3epQE-XW95V&2iWioYK4_ z_ZngU&I3(ek*|zuFy`VmyJL>!GkLq-Jtp4XP9fi&_;d6AtEFeo&$XI1BjtjTW#^^C zYo_H;7e%u@$1zL;x9rKmUO5rHsNyr4oOAV$q>-a<)7fPX z*fHjOLtAehy|js(Qnm-#nf5)T>#4tYciLMWoe4S&+r}9d=^I|~H_W#H7LGGHtn1KZ z!q&^#lE&SkQ_0tT>0IWRJvX=1ag{BvGS@rDf}UjyudSNC<2z1-@$|jhWG`o`jXR~y zp4@K743V3WB^7f%&}hv*BdkS%v*-?cyR*WQT4EPsZtIto6Sh0Y)~q?u-hfr9JZ1jl z#eoS@Lbs*#!|sd6joPv={?PE$Axv0`nc6HreL6%PIa0|3kIBaQpoI{;h%ez7d4gsXs4s1BV<8N-A!4 zy1&YGtL{J4mG~w*pk-}~*B#cqTLWaPC7#!0+*79q{eyoTs^CO%XN^4(^uvto1Fd0` z`${P`@-a(E{>*0&ZpZz!dx&BmvNW!LiHtrAUKf{9+NU4<#@XM)q3qFKY5CgN!V~m8 zixun2x?0SF(`s+!N%=ibcNMt<`U7q!npQlV=Mb?1`%}Se?21j#B4`1i^^x$GR@Th7 zH~ShxdcymUE_jwD|2-)@zG&t?ctPE@DtEi$S=om6f6l$*cYQ#ue%^JyIy`f75%GR~ z>=PDm+%IxJ;j(C6y^|A>mLAbR%jQyiqFXaAu>4(i`QXv_iG!@o>yLIvFgEpe;`Ve( zf{t#i@mzi)kK^$-I zk1Gzk&J_KynZ>U6v~P$C4%oxDe}cQ0y9*36w@TbL!@72kc;=DE(TZ*xnwX8UuYV&W zbIQ69Lz|cghj4wbUfpx8wVZ3db3a7!V$JW@CeFUow(Rz4-BqIPWuhy3rExnp2cByP zUlC$*2EQJow~9m{2hSH-SM}OQ{nh*8HQ{{KsVf7__uDcWF(qvG3#xkj9b9qi5!L1X zbLI|eaN^xHCw;fj(oT~_1>66p^pW}*M+qPZaS=8nne`ob)V*Zna;iZUeC&uAJT8^5RCp*(c83 z8#Y?Ablx9JU)Qs7+H-84+u6HY33gkY-ieJH@VzVi+P4`RNYk$t+*-11%D(ZQJ5DS< zgB>?6{h9@GaM`Jo$4(wwdF4odKX(3VMSdS^HHhvE$zpT|2<6TLVVQ&g31tF=pq9wd z9Rh=KpRJZda6F>I36L1El!bqOvIdV63t9L@bS{Z2_eNsH?4=4McxfOXUK$TGh4|SX z#_nnm1&|;r2&a}LNR^z{=kSd)t z5W^Tgh!R$a8j=&q1QJmqA&$0C zs(h1Ckdc7?)cCL#%l1XWd{Uddm$ z^yhGcK3Qleh!IQVS}T<7FEmwR(Py&0h)vU@O=olh74L9ZYV3r``CK1+fUAe9I;K<9v1DwL%tKX>uP5+qm!Y4{{Fs8p&8(}h7|GUz1c zuq!R%LPViNYf*zrCK0Fb7a9c67-Se=A_52yP$4GC#g$AYQHHbngszl{R4I@G@rprtM7cr>RLd3a z`;noV{$(^Nv500IP|5%@1sFvco;Z>$QL|!v%+{UwUwpW06-F&FsNJv(UAoYfkoajS z9N`O%^`C4bac^C&PT8kHEy*@v~U z#ZNA@?m=JBVV-b&y!fvFhNEru*Z-+kxGr<3W~IehP3wK|P}cx$Ss{jTb~%*Nmi8w# zRcGj#NYM29>pcl3nik-a5Tkzi61&iQ=T&{aaH^xl;u1SmW_w)&a?Z-O&c0yCl6Dtx za;xt+xasb4NmG=`<#Eqk>oN6dmU&5b|5{0=p1Qd_tD~JBsqtjM!A>j6s*JW={_;{D z)L*Y_QjGc_t~^eSjUN<5r)3!~IAqp&^+S|jc)C}V$}}@)J)u6aI?v=v$r<=<(j&5W z-}&J6dZuZ1b!hz2yO!m9y&amL<+iB=j-9NJzPNN`v7O0XHrk^p$2ZWYVor3%e*m0~ B0VDtb literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/2_ancient_cypher_overlay.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/2_ancient_cypher_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ea5738a55d51c266239e5b60ebe1dd51cc1880 GIT binary patch literal 4936 zcmeHKc~BE)8xQ3yLcJ9gWDR(r=Ga^$k#GhfA{ql8P*gU%8(1U<$s*Ty03JmJk0R7# z@Sunn9u+y%DvThgRZ2yWDq2uGf?O7lDj?sRfQa*T<{M|e{^w?Pv-`Zy^LwA?_Z-Ql zNEi56TTZm3P$A3Hf<$KRBmt zU9aGdeGz|^Bw}(-#;z#h?hR|tCtVRfenHz`$6t4DL|huC+ju3dxLr3R^SyHaU&&J= zcC@A*dRABVn!o7PPxcEp{oRUr=Rb*>a6EHLqb`YV+!nHg&h2R%RnXg7p`04!N^mD` zN3JBqU}~Eli!Qq3gglD_MwRg#$yJl=TXN|yne%-TwwiqXcE-XtC#Z*uJ?{?RJ^AQ^ zsqbQ4M0aGD1D`lufBJA8KdUlp+LQLpkK${K9M{@Dq6av+;p;@Yv>z(=p51c9^ccPF zu*y&1_^dRIUbi#!G**E!8!MJanIFH9J!WpZ=7PtmvJ$R@kY-D|t7BR$7R4=W9r44Q zo3Kq&NU{9`vVl{db7KdkYHjG!#)R2qQC@NG)o)9>prfqPdowp@cD!sc*PY69Pk)>> ztE~Leu2kl@;=7*K;_wxc^A4qj-EV_KOih${oO0)uGF5KMt!EVy$UHpp@FBN1(Ay#_ z$Xlbd*koejo?3QPx>_;alWM$vqGyF!leJ0ZHuEHGtW)UdOCgU(=X&izLYrZ+mw zwNvKW<>WtCCDgCk{&TzXaLth)kKIx1aYbwE+iU12JKDz|t@chGF7vDIsA0COWqUm5 zpDnj4;X5T3F-&HJulPl~V@;M{w<<5yO4row7D|e>Yt*x_(%m^Fy=iSuTAU>x1J3@O`NR_gX=UhhMv0{XDnd zUY(E3sY|N#kx{oEc)z*bJFQBVpT@f4S%?sSly7`h4i>Zx2H0?{;Birshdr+Ccr;6$2D1;UDhHm-WpUdP03Bk-g11=Moh_0vpjxgMD}8ba`E2Rk0-yMQgMKqIscTUjbNNK+4A~} zjbY=al^MJ$=G1hqr`fIkj``+(+r=W~#(r_ul_D!9I7md&Y&}%SPXPlUO|p zKb>&tV&TQYbyfM@-9`&HYWH-BHVVO1Tup%Kx6FUO5LGMb2&R_f^jM_^Oh*dE#VuBY zpsR2alH*~7N<{6rc!dfPn25TR>(BJpc;VrMZ@d-{h+hzh#;-yJ7}d?y(j`_10F*e1 zK(We5l};Edq8f08;9f6gP$7c~xk^M`<}Zc3)LI5jC77H9`g>CMJd+!=|gXVGLLx5HOf528%@l8Z=#;ibP^*DxHHKq8~$y>rgGB zAqlk#(qkfWbu=lWQo%a(!9S(O-+vHZr5j)Y@WF^hGz^%|WGI!4p%yyQdo=(VaOfW` zbb;VUgdxLq>S!&Bd#}b-q{C1M3>~!BL~A1r;b15OkHnQgRR?y3KiSep;x8Sv&{Ggb zC^ZHvK=vn^B%%07)+fH{R}A3{bp)6X;(nt2A$Ef@(DL^eiq&Ye-aUy}MAh#v#MCH( z3HxsaOg=}!WYaLdTtVX~I4Dhy32+*Z2jfgs!Qt>w?hq)6N=G6p6xTxma5@2SSTM}P zQ7%T~^93+~z*sc7obOEI@!2@W#bBO-hYf*Ps3kyEB9TMA(nDbYii@)lHj5>o!7w7H zaX5SqO@P79GzG@t3U~-#&f_^7pfFT8SFKedAf1E~3Bws0RhVHxPq@%SDiKjxbmm8i zG!h{dzyS0Bp~BQLx{phNgc1)R5j~%ukvzR;%k1Jp?;g3p7aIFs1q8=4y(%CG- zias$y5DuUg(N`(}FvvkPLN6_jkZNt9S{*5(>Yal0mV?XwprJ5?M8pV*15hT5BZOH( zCO41?uCS2Fp)t8a<`8`~MkwO`m$trrAea86`w}{^f1E+o-%|m2RR2@|V<2mV55<6>D8h9XU^F(D&!cg0P+5Eq$fX=+ zb8t2j!%%_3z``K9POTtg5H0Qz26zNqfdVyf1pmD8vCG2ysA4}dZn%mOqGQbuJA z1k2D*j1SSeF#d}V7lXo(5d-Y{WngrHNyr!+g#&y6U;oWxAP@iM77+Ahlh5M!3teC6 z`YZ-MOZiK6eWB~K82BvZFV*#bqs#K+%M`8x|A1n^t5Rp}hz9VQWhVFY5mPGkA9ltv zIgos<@eR^ZD8okUPb13S{Wd^oPD=c}&7WDBnj4uss=0Lth!#u49)bLuXz0P|eCg7^ z?U!#$8DlIiE}BruqbTNFm}QevZE-Hheew5=SKFRj>5tP_*5I1(mN3k*-1KnB15GMs r+H^N<;*GCfyed3xl^r@J)R?j}d-8ML9w~S^q);T@3&f{9LzDgk4_sY_ literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/3_ancient_cypher.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/3_ancient_cypher.png new file mode 100644 index 0000000000000000000000000000000000000000..3aae1ef12bafa0db5d371cfc52bd9a7baf0b0286 GIT binary patch literal 5956 zcmeHLX;c&05)NV%5fl|93P=dJAY@M<2?W^%F^Vh$C<>jV0})6<5+I@p~W1A-#r zf{Y^$n<9#=DvKU>r#szstG-+HRo&{oiM8Lh zSy6tqJPZa?w6(ExfPR&vhui|_tU2}`fWhE>Ax^Gh2OtP35b`-(Ul1t{7Jx`l!sWnV zlD2GDw`6Tyg_#~@(R`i!!`*phhK47)x972w2Ll6~8NXaT?fI*+mX(dY-_)jqOUG1A z^jlWk`Jmc!6y?sJyU2m7vG`2Ll zAbsJhw`RhcvNFVrj=Pqm=|RMnnuL*1(;CxGUTXr$l1bJSp}9Ocj{-xqwt)KN^Yer zxO)Tf&qMf=r-HW1YLm9v&&rPkl!mU$ows22$lqI!MOGyHotI4gKL5($m0QQXgO)h> z*1*goGwBrxhh*}sU+5+rZ8#YRR_;c{mGlI89rT9F9Oj)ooQiA^<1tmYHUpLSf_ z6JhPlNL{hstZ7{L!UZN(TtVr)IRLvnSJBN-^V6QsYd zCg0CBVsFFa6jnw{`+~t<)5`&G`M=d?F1hqfXK7!)Y4dNH+2AVME%gcKNjp0c>Jy&R zp^t7YUKEouZh z^wRb{xnx`VFtcBCXhXK0--wS|xLV(-k!R;q6kE@3$meC$uZxMu_F6Q1L*2N_>PU>+34BHq=ga52L?jQA2+LJ=f7_Z8(gZOsP5kL z-gIWM9^me3oKrmwgULj4EiCM9Ei67YeW=x^9XLj}xnrtc<>6?T>7+h@e35XD=C(}5 zKWXF2TjpH7g4dqHK2;Le#=%`3{vaEfcTkK75t9|Un*o>dEc9bQE+`3At+_GETrqgGly21;8?V{ZSbn+r~9F(*&;^njQ zlro&Pt1MF|yVtzasyTy7*_tDdpsuu!kgpw$czg;UD$vSF(2?+`NK#io~m z_GdMP9W)*7mMjTtS`Oy!D=EHSeEnc!!SuAu_9)@WF?tjYdN>Di zp@*<5V=Ilt_rm~eJ`==9`~=WL8U{1oBoP2CA5e^Bf?ix69W`8BjzV(Tbd(F3fnx|P zKyR*1h!AuP+2+Iw@nKQfs7)sF#u6F?;0KBUq{PpcC!$H{s5x93bS)KQQOG$Ju@4>P z%CJXT@P#0fgdt&YXe$Xfkbp9gM;Z&+9GZir^+yQkj*jvciv=_+HYg|v6GX)DgUR*!HoE1d&H=1HD=L=ci_$D2h z3+HP`AoI_--)Mh|eNGwDVlZfyd{%(eJzGmUN;*G{&1Z4hw7E+bh0Fm!DiLh}u$X8P zfk;II1^^jNF(9(>WE`1kNFjU$Wy=$Z0UisKLP6jdE`)<8QwfGF5*dwWQP>a!36G}Y z$pD&70GI?0m4YXK1F>Dmg{l(p{n{%j6dQtKv2X+&2Tw+m$!r{&WC(e~WU{GfHXbB$ z2xJzS0#N6?VY6t~e4!rzrIYIic!5{}&ueZ#N;u8T-jGDAue@MCwR|L%;JSY0FrW`^44|gAKeYtas35lFr7BqnM zAp{W+2(st=gs?sgvAhAE7YOx_j|KZl&i#jCAQD-IOd{R@O<>`m46+CYXn;Z_qA3Ix zi(^2gkN|-EExL%$5eET6(98?s5#kCe&^fM<8$PB=_gnoSZ%~>Ch%z*ufc`=m1%>?> zELPevK1FMc{SQ8j=M=tbF_7H{8PvL73P18CZ94zQ&&NFcA7_A|e@yaS{QjWp z2VLLAz;`MCsIDJ$eHR1YrTnA1{%3T_f7widJm?K52-+%zv<)7Gwpk09cAG6>+R|^& zHZM;|vPfX#CW65huaF)xu+%gJBwQ%AWmqljRe;N))cW^p_Cb5;I$KLKCrbUb#Bw_| z08z6k_vh3NW~?QbRxkSf-UBoJYa7s3a*~Wwjz%w+KDgC!DZ;M3OIba$SBE0*Rgyn$ zei4&d`0nti_uhhY?#3&~dsN!4-EX?iI&6;J z(B4O|KaKKExZgdjCzHNqZJR>Hc)bdqK54&XyaQe_BRq!?MTgI zdztRg-^8sB>1=&7ersvAtYSIlLhgH+oi}2AbsPJOR2#6V4dufZCb!*H9hQ|GowuRK zpf>sMy29d~jj7A_E5ZNdQg>|2Z3yV|w6;GAZ`OmuN?&nqpE7vvf_N%)O~8~hW{I7RA83? literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/3_ancient_cypher_overlay.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/3_ancient_cypher_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..911afbadde3b4bf6876cd361910e6143aec70fdc GIT binary patch literal 4930 zcmeHKc~leU77rpIsZzC|xKxJ0rDC&87DA>(K*AC=fGi4%%VcH}M#(}FNC366C?X0j z2rjsxwl37V!c%Y;wJIVlm7=%+R#CKy3o4-YOF+c)dd@qZ^ZK8YGn1M7-TV9Q{oN&* zjNm~3KJ>wK8jaRR5+Du%-+fJIFKcjhdiD;Z(JW^shDGQ@FaxB~s^wG+3F#9wBt#l1 zIgMt#_9%D4$~)imUi30wmbG98l$DwwzSO7n)w9$MHLD}}nU@|czL{fdX&u?WwP(EJ z@wXf5oT7&Etqwihxy?S7syyZJb@sh*gLIN%p6JZ9dzeSH8+Gf)Q3K=7AamHu3j1*ChZk> zWI)`s3x9drCF<9<(B_Sn*IGLy?Fj<1=rx9%)lJbQ6+uktZFiY(`jsi>}Zg`&q?n3HMWv&B7psNeCR9yOb-QWmw; zrslM5r#YuksodcZZT4`#44M40xYstz;Dt?pc+FivTN|6cst~q~$fN zf}o8zjv5(JJ=1?!9j0v#8UNGX$SsHKAJLPiemVBemD8tIWX*jwDeKzuvC{R2sbQ6bqcyz`RlUj zw^ud7FBvN5CQHHmyr_uA8N*+$y*{O?wYB#l>BHKEV|Gm1+s5`R-CzA;Ut86pck7LZ z-b{MFwb8#ayWn_1^kh*<=(S7k{j>XBRxIN_C~l{#Umvi0^C-K*mDB(2@LYfYQG;Hu zPo}GF?l#WecJ`Gqaa12;v@*RZsgnL!*sp0=_R65P>8AsbIK$0u0g z2AE8YCZZ;K|ULFP}8OV4gitTJc8Mnv?PiZBu~9IsIw)CbY5U zp#E~(nSPUV?dx^*NGda+{d`=_pMuLH(ycZQLiXQJsPDBe;(_dNW@Jrp#*Z0Wm+YE! zY`HG7uCy%jr>l`|8`~Gwr4+5KL(8$@d((!8^mX2vMc=iz@78daGV!{WhGB1=&uxP9 zChnm-3I_zI(tl}AeRuM)s=U5x+j{#f%jALA-#S{Plz8pNuHQOWbOW_$uQ;*#YIF6v z6Awq-UzRmM)T6aHIkPEiNKOtxCSK?)tPOrysxc z$~`jmn1!8Pa%F$==cLk-;*#R;D-O1`Sp+TAu6-t2h=P$APl3@FA)ScgY9$jR)H0H3 zRBFIzq|rP)jT#J}L+T+Jsi0IM_;JZ`7@`OfJcTc1OEo@ZG!>AjB|{Sf!|=p8xR8K7 z$I?BFC;(8BdJHluV^liSD1yznD7ZI?SukW)(a#aV5z=7DN3A6x9+SspGklFyJO>_2 zhdi`|91RisbwYqA5ge`8Yfu);U@$NZT&7y9U?D=Gkj3V(I2;DhVCWK5dd$dB>0C?@ z9T;L#hifT~o>HqI6DB58$LU2d4A!Cd{wXz5X&1ao*U19lgJr}tEQHBsDV4157COCe zJOJr*=pQX~Vc-{p6+-INaax@8jVD!lm+lY*-es?e)5e&?A#fHMLn?u)4(y72w57j9 z8r)@JqCi0@HD)V7_D7m}O8$YYk9;$&n8WGr2r%!${Yd+L>}F-4C6%ILH6CYjPa+n< zru|VujZ*|_zQs8_0Z9rGhK$1zFn9=;V94C$I724G2mz0eyU7W8HzY2funwEtr7$2q?DL~WNB0i^ByL`QSV@h z2<9-^A0)vsm|hMHKo3wVLT%7}SPG+*WT+l9@rekyT&_C@0f#%^O~Cu0G?~=uKrNb3 z5jK;{F|U{sgMx4XwV0_=0f1Q!qCtJMB&Jtu!_?{+5o~e_GFf&lOF=^sm>v^jdJ=%L zIXo2Mplp5^8(a~Tk1*JLl-*5VO;GZL|D|neAIPI4=>e1u?4Mv3b@Wsy8QbyH@fbsy zn+bx(pv#|1YCgvHFE`h)0wK#AL|>UNmCvGWekJ^XzHR2 zW_1S3GEI#4(R#4{iw_U8LbnkE>^fv%bb(38>KcWee3^#Mzj$=!;a}VVK!4ukllc8i z*JrvuiGfd2{#;$3>G~uFK1um=b^YJyqJMaqB30lYkO90ZacY%M!E2VaY=Xa-cFy$S z=0?bX#8wj!siV=p_{wxz(AMQU0-=pwBK5Ut>}_RZ!BtSvdw?iJBK8h*zlhIrwA#90 z<880$b>GL-Pdqaix=>c`Rb;`wzVC3#isgQ5%6sfu*V{=oQ!xu1#y5|~r22$~^P(6%K2%x;wfMpwlG2f#N;mW~KZMmGWfS literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/4_ancient_cypher.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/4_ancient_cypher.png new file mode 100644 index 0000000000000000000000000000000000000000..e52c0d34d4c7f77a798db19371906d93c37516fd GIT binary patch literal 5646 zcmeHKcT|(v5)UPy2rgg&5j6yT*wPbHOhin8AOu1cu)vq(3r0yH2@=3XDK26`WDyiZ zq^N5F8-fao2nwqxVgY$5MOeWGs7qNveP049p10?`<2i5tGdW4_H+SZDXMQtxZf+vi z&B@5X!T<(?89B3Ap3twc`ZGZf`kwRd699w3%_6=1l%7C1LME3AMIj(U86g7^ph_f! z!Bqc#=@p&J6^GROs zAJ0rs)lLqxV=a3IR$a9EghdR}Mk2tYN2`B&E9n^MwtD~0&hh@4ft_mvX2vgMwqath z|Io^y_2>e$pQ#y7bwTiTqk`#M#Jd zgJ@h`Q01<~$D5c&+wM~A`xjkpd^ePN!NB-W!cBsMsrIVk#HY{mOl!0Q4t3Y}Smr-U z(u$wp5=CKZ>u#|~Ji5#l?}XI#)Z+f~vc?#_Y)e^}o=sDtZcrXQ{YEO=WiNvnf^fp= zn68aw1^qf#XK@#OXi8QrvuQ_o%WzxX%Ir;(O;`6>#hVK~YCUoZ_0`7w2m5%w9!J;4 zIr?xirr6lm|G6N4AMtQ1p`rHl0o)R%Ro69#?TcDcxxD(66@`b~!yYzr`42PJOCIOv zL>JxV-A@bXd0>CI=TdJ@bs?jlzU;h}@It$jd1yD=y7jkNe%S}f+`KpoO#TsGnMWM) z#x333@~1XJ*v?(nh}kx}2%>xK$rJ^BPv*X+sv3hj***7K3r^LRLochM?{3X%-__0P zk+utShht}c^69LN@8NVF3>}_)-gbA+CF5p)O5A#QQ^K3V{iM3eo?|3Cqq63Yt%keq z3KLuk?s0FVTjoDrZgXt%s)2+BVTY!EdO6!6oc_Sm_S&@H#nkQTL1ojssXI|Vebm6Gt^~5vuGuQUF4kwwIV&+}e zCQD}RJSekpxmwc8OzjU^j-4 zbHeVC(Ny1e@ZbvDJBam?pG8_t&nFD+(Z6sgqDdiJJV&^gSLQn5UGnQl%k`%l1MF;z z((M!tBd0&is$~-d8qkGUd9zHpbRgo)WL3K1npW|LBB& z8Z+~Vl@Qx_5`0Z~Gi(($Y3e3MPIzHc=?d~SlTA+bWfsEln82#dvNNx`Z7R+`Gktb~ z-sPUL*WKQ*u=J;g%oa4Q>Yk?z4ME}_GZqE-62*?t{IfF-I@&-^@9 z}~l9@iaMy=5I1B zGhWcrc;Vh-!aChU>(lnQRb5{l?PGWaxf7-vk459W+=bK6^;rfE_Pyyx-#AxR z_ksF8HTHK{Hk)3ptVFgT4mK4j?+jO&_@+&Ls(6ZvL$gO}!kYdd-U{0ORjWhWDP28u7UdipJ5ArjoCh5eOHGeeMiY;As z0%&fnE`CDO8mYUwx8Y4=#?@Cg&vzwFXK24KiP`Zo>0iBC=}WG*{feHEV*QuM;5xD| z+OaiNUr!QqH=}t~)SRO~Elax;a7AnK@KjV;X-R3x=DMQcVJ-Kq^8N1^TWQcy zwowEfS$-T>8eb|#0|F@zM61Ly=tzUX=yoa@z~2BW5j-$hBw-+XOUsc6k${0*N#bBR zGA6iA#Ez7MUXgCz{KyS_ssL%X)PSy{K>%V<2_RJB5Q&1OVjwlRG-#|AV~_}qigE)3 z>Br$Bm{K{2AfkzAEXqM8+K5LkH9*ki0wK+lVIwF}T91bi z@W0s0!sH>Ea0Gk|7y^nRRRy#v?wci@oH^Vt7HSHDMPix83L^U(O{GZqm8@@kQ_pC^ z8Se;W{ss3N?a#4mlp!q+hsKifp~GCFbY?M->h);?DPJU@X@+DhmMo-DY*Ba~8HXZb z@jMiOBj8Yc0g(dms31W=1ja!*OB6~#!Uxq*5I9-{;b18MpF*bKQGhKOk0O$=&y)=h40;#fk3dO+S(GyL<)sU{i@^($`w#8s!?%RGy$)fQ7485g#%Fws4Eo$ z(8!@^XiPZ>D5Y|5sWgOvR6B)GTYj15KpRQ`C;=9r1R+o?o=C&tX;`8+9#10>X?P+E zOQK=N=}QG7VZ{H^R&O5!eKhH8kpfyjLL(a8Q(j=`=+o$9h)A=U5D3k-paJ~R5EQ^h zP@wS>!Wy08uLC5(Ak;s`3ih*H^f$#o!QrSR9sxw*cw_)YEkpgIo_WhfjTHI6bQW-M5Yx?_Bf zmX7%^KIj^SaV-Y28!+e{u-~;>RN2#qSTge$e$@41AaJ zkLvnC*LN}SUCKYI>;FcV!Pmh*LqdI}Gsi){+YqjUG?$0Dc|mt+p)i&Dt70~LE{*b}^KPdJi515r#xLhGi0QGh3oshnEg*U|aYbMZmAR9NqdT!1sN@vINK3Az8J%-Mz}^=eZ_r zpB-$lWktU!jAZTdi#Du(2R@->ZRCNq(>rqppBo=OyMH}u0qiW?!A5XzTgt!pB;6*# zkhd=Hdu-IX&Vrip?9#^-SmTco*?WifsA!i>>uxLB2a7DVcrmCm<n14+m7haK+&|U$BR~sOe)hN+*3IYbo)m^Nq{*!xUmYC2gUve DRByAq literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/4_ancient_cypher_overlay.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/4_ancient_cypher_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..e5a60b5f0c7a3d9e67be0207fa2f9898a039e3cb GIT binary patch literal 4929 zcmeHKc~BE+7H>oZ8BoLv6`_r?IBJs40XZZprwL9FkV6m$I^7*;2uVo7<$-dzETSN+ zCn|`D=X!!7A_yajH{!)G$S`6#BZ7b{=!}T&mw<@1Q?+H)&VQth~ zo*s)$ji(wz5M(M6x_EOMZ#VvvZF&USBIKGqLE(x@)Wa>Ej=( z4_;D6J<5LI;7+x9dhh7AX;ZUmk4?8B1UK4jnx~HKYh6(J-28#6!maez=6ByNobBa& zGhy7u1XEe2zAwEm&b*~4`&nIh=90tTJN@t*v~tADAU~Sj`+6H$Z$M_Fd&`=8bJ$i* z3GuNm3X685*R)wv3XSr{TwBE!U4{y7Np|i$dCtlvSYmX|Kk7p8M627+jwbM06K|Be z2ERQN8hE3ALcFo6v_ANa?U_S*rHxO5sS!ccg!X3Ik*#_AFXi$U-@ zq|lOjD>;L9KWm@=nWqfl?@|7b6aUpA+>kYYlRV5{@=MME_Tjn%eTU~qpFe!jHio@( z{>{26EkUKp7KxVfoOW+QxIT2@sbgJDlliwEJ-&}pL*mU2G96`wmrFXko5ubcv?6hK zjli!fJ>FoNe4gr9HQOvd-r!*d)ZFn~MASsH;)&1By3QF)bHnqqDS*_jtOHSF4JlxPBlE2mHU2geL%St+x953Cn=F*h&WlW|10sUs!9 zQVOHq)l~=G_2>CIe>gu%b$Hj#oB&42sqo{%I!WOKdYh+=cH;W&^s-cc#f*H^>xY^9 z-Hrtrq#k_eUG8@Ltlf_?Px4(Ro4=k;hmuoufA{5D~CVQ+4 zOsp9%!sfpe7OsqKyxFn3Jz6pTh`o(?ul>#LDMfc;4#l8rOD{QYriHKB5;(rk!?e7E zGdi#)jVgt%ibhwjow3O2wPbs;Pkh#jTPmX67~_)Z4f|Y8Mn>D76LDhFmhMk~y!df; zn?5IDM^NDN3Q@+OsxGAiTWD@=EZs zC51kg?QqMMe15>ViBVhUOsaAs=N7*RQMFEHlS1zxON08PWb1Ta!^xp5rw180cIj6) zREg?b-QNd$hmCt$6}9l^rqz$j^;4wVj!0`q?hD_Z9_P1xLW{bEkxUc5zZTu_ zjC02()gX5Y<4kLOi_z)jFC?Yu0S%sMhtdi*9`&l&q7Ha+@k+q)M*+RL?>9V2I+y)~ ze;b{3DrJ_p*^Gh=DqD06ZEUVN*TmO*Ut78D(X0BL%68k<%^8yfBi@xHrnhDMty6Eu z{K{YcNt=>A^AFPa3Z*N-t$C~AD0$-DoW>Qatq+Y|wEaS0h2EGkiFM}0$<-IjO3F&s z)fV^m>Mh-%+Vxtnfe)r(3<;**a`AV3Oc6;#afO7S#YHN?RD>Xhg>gz0iy$7;^iokd{W#Iy2hd4d}h$J*992Y5*tNC#P ziVl|#?zLh%1=gu(A_SD>Vo%svp(0>5jZH(Su5n}xld`}Vc2MC`zPF3p00ejvP{K4C zC7(`@jg6(nvS(c0~aTm%%Ye?G3jNSv>`wL>vG zgu%k7QiP3A*(^jtl`wH|;o4&yf^E;m8JrDvyhxR0#{g?GXt}im>n@5KC1gs7h2ebXQs^96)h-QhNzT@ThDA1yBTsLFKaS z*;FZ)jbR)K20U?fP&meSQ>Y?QkWMlZ4JGJGd8lqdOE}-rQzW1;X~<`Zrwr9dfdS|N zQjRNP)t{Gq$Vg(D2G#P(;ILRME|bY-B0L_#V}4fhBUEZoi&|6$LSyx>XcNN+;Q(q; zZKVPLodt-7@2nzFjY8$4P{;%n?WSO@<>0ayG!%|%P#07~08oU<<};Xl#Lfo+S2iDE zQV}~oGDKg2lhXMArLAor*r7k^LQ)O<$LmD>J++L8>VN8gl##k-f?-`-@KLNk1T`8% z^rs78^)F#zs63Pa^JAc3Kgr2IDF!!2#`T38)T5pp|Wv%oQ+F47!&U& zZxCIrkZNL472y~Pcm!O50@ZN^&mKtCw>s7a^<%>bZ5{w+RECzOLCPrffne#{iSa2~ z2l{{U;h<9(GGc&TzYL5nFbU~{qi}#P;QO!q4CLXjbOFP|PQHrYVY-It`YHy#N_n`t zhUxk$2EIypxVrvtbQynsnIh!iA5biKReFm%JqNE@qa;ffyFfMCgSCCR1V~0Jg#l^^ z`ewZL)Pr*NSOB4+MkIDMd~RZ3IC8|2$~|>J+8MQ*VrT j)l+iPq#$I%-H{L!vB9cMXh6;Z9w3pchsz14kfi?r_K8&4 literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/5_ancient_cypher.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/5_ancient_cypher.png new file mode 100644 index 0000000000000000000000000000000000000000..a17fcfc2238134be1b0946697d420d39cb634e43 GIT binary patch literal 5218 zcmeHKc~leU77qe05v&WcsFfJ7Xla&7LN*B?Bm!z6Y${3%lguQHkcDI*ENW#Dp(qNj zkFvVd1w>GkA}A_?D=0!mAB%|lR#8gjiNc!%RD7@JyyH2q|CyXgX72L)?)}~S-Q-IZ zdAXb7r{QrpoT;Y=-xvFysJq6F#y+ik20afJ|Wbg{Uf$>UDh&aFUWlLVu zyZH4N?JRaJzce?-an|}P#$WgJ&s{2X3hMn=_ojx+zs7k{lZ_5N^IqgW0C)`urcC{# z>#LuNa#G)LGin-@EJ4-uz?p~EIREs@$F|Du(VRJPflhFf^$yW_MZaYB@!;}}t*P@{_PFHWh0~U{?mts|x~6nj zO`A*OG=@(@+v!>H9J8#V%)M#xwNZ^Tlk!eogPHvg$YG-|=MXL#!KgfeV*dI!>njzm z@fTXB*!R^|olc&fRuSN4vf-Lze%<&^_X_8_Yio4-Koc-!j5g&KmMHK&ZETK4Lt@z#qJ5GwNN>a7>uHC{NbKL7n zYS@`pJ5w_GXN22F9dS*$={(IOZa+VDR^85B3(`2-ZRhUU>3h8_Q|!~&$yn(d&{R}= zE(l5;vr&`><}xSxE+Q>^L)uZVG=OS3IwJdz&W4v# z6nIVQ$WFHC=o_RxG>;61ez#HPmELFpn#pxhW@OPx!W*h{QOUN*o2x_HtA(qMy?Z`Y zXj)iv%yceub$f752|ay7+ZCiUY4wNVP0en2O;-u^S4x^00{7|Cjvw*Ot@;dced>T1+b9u2JJE}ayr87ob z-`UmO{%5gAa_!MqsrQVckN>vVLuqp}clzGh^*v|pCtSL9%nV-x=c-y)AqDDxV88Zj@|H&#>PJY-;=k@O~+qU~xc| zn9}w$;l$isr7T7B^3BICM-=#q3R?}bc`=V_{IYFi!0)ErZDxp2)|k51^+kW!S^BTt z!4qO$f3tqT2i0E4qgwwE?jBRxxcB~)RC|M@;2lSUHLq+2J56RcU6uruJ|(p&=RbM- z^Vz{f;^W@@wS(iw{be2?e(AWjL@~YfEzezYQ)xW&Cj?Z_GM2()Q>F~h=*^` z4C9uBMC-JGF&47#zYa2<-)(sA))~)6!NRw}zM+%uo{4boXpd_Uh1sr)C(>1nq*%NU^THq~F>b}(7KOOWr zwOJE*r>Zva(2ctExOOkATC(hcPjz3s3ad&`CEkEneyE6x7ozElg zSX_*^+M1tM~4dW4)2}J}qr5YwM$P6--B#1_$ zXhbJG!BGuKxxV}b!w}dLj~I%gDlUbh)oRIFI$5cfQ2-8yL!r_rG#UxBAZcP0C>Tvr zXl!&4Ll}HmBT*wN6j3S&I!sWkj6``vBBm$2k58@=3O~RrG{Y=ld{Cl66$KzuDRMbw zq=yC-L}4Jq0sW%2MXJN~=|B<+91hDdQw_E% z@X3H9QQmFum0Z5r7Ho$fuK~#uA1LzJ?h66YP%2T01 zL4^d?L1Exz1jCUy&|o&i0!a`P;E)(h7=r*Ih{WR187!s)3^Uo{5fI*L1nWvLd}LHQ zC{Jfb9W90V%bbk1Bse4*Q{?j!%F^r_-4nCKGU=QQ2(v zN24XMT7&hX4i%u1=`_7YR~Rmq4n{4g>r@OtFUPXsx~X9hRjU1!%5WZ07ZgF~`9Uqj zHWUP+ARk0w43tV^Z~+>Z%J8SrxO4`W29T%@T_Y!3K@*ekKu-WFGv2O85kIa zG>KF~;;T3&^1aass+{Xd>O_g#ue6}daej_hD$Z~ z(`dAzu&xdmWh8(`8bKM6GMp?$H!qz-8J{Ma?zGVeJ~ZwDW)lMOcJc$Yo6U9A|yjKkGg{Yk;ef$Y2`Fl?CluDjuRNg#+zdtZ*AC(tKN`B~l8(=6MYdx0G1YV%q a7#xn6?5*8re}RTYiSrbA@rzwU68;T^ndIyM literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/5_ancient_cypher_overlay.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/5_ancient_cypher_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..2847ac3bdc3d8226a731f7cf339ffc5707338841 GIT binary patch literal 4932 zcmeHKc~leU7EeSF11^ZNC}<1_wSC$5kqDFki5f+SB5p8ACNMP{$*|W2go7(mL_I~Z zRs;bp?jnmTP+S2kb;A|(A&3Qw3ksF@B_P6iJ?9^?!7@xAU## z>c@@w{0K(vwB~iQH`*0N#CjB!&e~9VxpUfsi7{_}?i%8!v+Rt$s9Olt*yp21}^5OyBvf#wM^xW1f-Z9c5yVECA z{TE+u9vf$=KhwJ7jaSRhK1Fd|O;=mPH@3fMX!*J_^;vEBra$DrI3CE)vT6OE(t0xU z_Y1tP>--ZVx~^RBa6NT6%Kl#3L5(P7@+7zWb(G3;Y*9f_u6K9gB(_NUz--dQtD6zW zWt*&ut0c{mwUP~3WQWSCj1amwLb60=wSrT9HJg?>vPKD&uS|{cbdYPz_dW|gxMyRW z#UzGXNr=p0T^(<2*1|Q~w@vI4f@PlL(-L38urg=LNnvmH@S|Q<7H;*`lU<+hH%qn* za$h$Uj}LGWXHK7Z%w}r(Xs-#s9Z8He!_QhjLwIz9;&9~dpeEZKcBXBGQ&=@@F;0Bc z;r94~HMv>oo_T3bh2o67O#RU(1^cq5t(eOXztS0S&@JzL2EsIavvAo`L0q)qZQ}`@ zjZ;>^6Is>l=_h10gxU$A!PfavO%l%iz}tT+cWRLXqgrkp&)vS0t5>{M^~g_x;(FX5M zo_MR{n#h1*kvlEZ>pXt+bziXiiQBP74rL^|Fz?dA8?F{frMCOMxzUMZ_HMnmpf<1aQ*w9Q73%cZl^Hw=O6B_JDY$U>I{D?O%07IU((BaANi{3S?`Mo zsX*m(m$qw8L*$>l;2PlzwtYM!CrU|wM<=iDyeaP+t|9OTK%e99alf;k2_VM{xX`sG#t^7eC zs_=5E3Jsc_D|KokHm3g!h1g7p%>3H!{I}>g$6LenE%q!_6u8vM{8rN1DH|7zun%A6 zywu#g!>sbodGU4MSv{eF5jIWdBRwD7Pq=s5ELpj&Kv_F{&v)B@m|I!3bkzduGo($p z;mI@#J!qcN?pTLY=-ZB$uPMJCE3f^F|2{M667DCFM>SSKdO+NL=Qvi=U1_s$`}jsf zBYiDJ)N?WF&Qos9v{dumj`X7~agCNo7PZPsHip~@SigUL&W6JIXVMKJkISnDIl;Ml1-X@tVVV{;a`R0*@*G)?|6wfZO0jyXjH2fkgvTEeB5 zYkSYPYpylc@7p;(%`DNr;e!J{sm$vD-0-maY)-Qi40~Uk zxbbLUt4NDTH>>uN`y>#&z{OHk%*T*4; z63WYp%ZgXm9`EkP&r8w&*eOVXKu3&5LFZc}nFGnSY6`5-$`DGdS_e8K4(H(+tAph$ z5R528!cmQY)LwR$L_`$=QZQRWljwYq2viiWM}p$#O6Bn@|O!fnhp`N{xw$p~NsLT75W`&gb)~GzOKyAOi&15U0W5ShB|8Vx;Kf5F!S-9@Sx} zRzoy$!ZK|XCLoc(IPv59)H;b|fL>$hR{`ijjfHhoI)z46tEq!M447{;An9Mw-+CCN z;0J^nh#0g{dO6}7jc72J!4wMlfWIzEuQG+BkW&#Aq6Sa{n3Xf&WEM}xBJ*V6QLbRKSPBN8F6SYGsKgor25aPqkqVGgP{5<$A#x^P zK_kPkOhE=tY_g1pD9JnyOjB~W2%kxZ2T{z^qaZ6`)!UE<>1H28&JRbLdPm zi$$Z6`3gCQ%wRLPbQ+HfD`A?6N+E~*w0boRwi8vu;Rscy2{#QG1&6!?!~zn7(g!tJ z0#q=j1P-7EP>n(xWB3G?qG}`vgN=I9xlAUL$DnapOeTxL;C})wMDzxbi$+#DjlyJ@ zMvNN+fpCDdurX5sfyoY{fqe7`jA`{!tyU!<8J9pbdJYUrKtU;B3>Lx|0!V2L7DQ)2 zG`5rmu5^gbBGcFqZ4h3oK$UU-3vDbPqDSARi%AN-PG}Bi`XaN1zo*P?J`~ull!Y`cQmK1Y+C=AQ_p?05T0oMxyoy zOEq?kkI{Ni|4R=K6JSt_0e*cp(7He;qz<&ge!YxM=N~-!_u(I$0Z@OL`lZz>oICyPgH61!AGMly^lQ=3t()MyT6U z)Ztm`U_0Gnoj#J8uEt%B#)4_%a%_~x))cx`q&D1gbO6Wl)!mmL)z#Nt6m75)mYjM# p@e-l(fHOPOyz#jlo+ZQBvb1n#<_?2dni)&{QX!S1h!jOiFKJb& zl#~jo&?YG(OHnG6`V~p<9a^9F_dM^@^StkW%{+JJ-t#@@bI$pE&-Z-qcQe!7X);m| zi9jGGyEr>|!T(d`*F+Wg*KqI)h(IWt$NKn7y})QdBo=ac5fC6Qy=M>AyG0Z-PCnr@vX_-A9pN_YF<`yp(Ld8QCbKtIGy8~5Hf7NR%1{b!wpXz z^t4A-b&Bgu8;Xl%ek(mr3h0enE}Ch)?(PdFskycs*K7EAc<-x3(;LM@8p)^g(%wEy zZ!JCUksPBmbmT&5|rCK|dMf|n|sPBdF}PwU2* zXn9O)LvTj-q;H*4b1x-V(Qn1Iqfzu4o9mW&eG3%s>|)9u+iH}wl4G9;@|whdC10Oj z*MWI*X4YE|eR1Pe!;q-hu#x+D{MJo*5A!eKbJEJVM^G0KC07IPmu321JvYHy5=LI9 z6->OmamKTX>4FV@e&_5?HEFeGY2u&iJuUY9m+hLYEHi-CmuzfyD+?l*IJhq_FtVk# zk}O;^<{;@WGh}K{{6iVJ5#(@6^{rG~rdmxXwaQ#LDATCfRbaz;-;F%CYi`Rrd{(Z9 zdLoK6zzhsTg_kH*6%U{?y)de^cF}?cUHaB2NXqC-2aV=0CrM?d3_F5rX328&t z^jIIkNpk?ajF>7?rK#HUY}zD>&QU0ZNAnsFy>TfdXVMR}?9;DPca2fgEMR1)m+l!H z$bUX#QRc;%o{JibV&B*G09DF{cALOC)w4}$)7Plu7pKnW&W!9Ohx#-XQdeo3F!JqE zT)bVW><0ClxGZwTKo$n1VE)8Rl%>{S2TL*@g@|K{ZdqoHP z&i5D89;3gvY7eu&CAzu|*LgdAaiy>2$;#Fz%+$27ip(6vuA_Q^>XQMj=bIz;EK1OE| zz0V8HK9oGRYD<~{n|+eJ+s|M+k1$VW+TBvv74sbsGaSgtt&mByzpY#foVMK^`TFW5w!&_Q;tQ% z*>MC{>a9SdH0<@)dF28vO|nT!^|^Z^4fYg~$Orkr^HRG+M5Vqqj@~^P>=IyRQE!)g zR^W;*&Pg&JKIMG){f6R>!QC~$W2M6SCWVhDWhy;c22K6h57@oo{P?_B!<+tRigcgO z?VTC2_p_(X;w5XEH)?pkeD4^#Eb!IYew!RWug*7n9+`%x^XJln-{rndE(;pnMDz|s z?uw3o?0W90K^1E6G4mLO*E+Thwcz$fJL}2b;jINj;8KqnB@Di zyainC>1*91+N^wM4Kf0+)an})`&n0)y<{j?Q99f{B6SqIDUaFfgQe<~gKWE@liH)HA z0WW`lKiy$4`JM;0ZTmJ$-@+n;4<=@u?P*K(zf4cDzV&iLwkz%2jlH$K4Jfr)S8D-6 zzSEuT^_Y;$L(j!aqwkTws2mA?zVkz{6J3V$h#@yWYxpc1aqnB}m!sO>Upy)@M{cYe z=-f=!_mB?AHryWZSoXzGI8n8dGpfvT*B|oG*SU#6C?xUh?U^q2_TO44+&K5FNvAts zwV7QVut6m=Ot6quPicm_z zVesA_T&+_Bvx7biym^nQIaSg4nL3=AP>0BOwyKq0MYREWEvKaopRP??x^qUSq!XWr zaUQuI+49W1!E~c?o-Y36i`AVIOZ|IUA4ncjQxEtWS3BhV-DNOpRGW{=b~}dDp=vP`k#%npzf|=L z>O1cj=FUh{T(A9jR7WANfn$j5p-`T4tQhi+b@yS%hO?<0l=UK{RSXRV;6qXnh~Y;F zB(xYhY7CbK-^;~V6fmYD4X3008BD-lD24zMhJ?YP9bDP}{CQIJ4t{4)fH{oP&^DUKLRhr`A~5fC3%mB3!{zqoXAVKBd2$SDZn z@kL`+FxkIoN_pHLWc?DGd}J)0p96u-zvKR*{Vn$~Wmt>Bpg9QHk@E0d9Ox*ye;P-~ z=5c6aw|D~Hf&+0$XdH-Rp-EgK8O>s|2xyiC3r7V(HitsN{{-bCkVruR8`!EAuP#jPS zI)G9L2E`FbG(3TZBl!>rG$MR&0jEsE{iHAC@VKl0o3?!U09NCZ?#z?G{#TEQ#@CcL zv}*im{4s(zwwM55Y+2Ai_IL^sFbd*~#R+4L53xf*K?nr*kFN#$P0ss=V&GB;1Ok~v zLW3+k8%+X=LasC#6hpQlFpn@-aDk3-1)uo_eNsl~u{<1)B)!JQEMy%m1tOWt(; zkDsse@PG6GL;rE|Tm1f^>knPO#lUYV|EaD&bo~|szoq=Ay8dT$A%7gEAOZXa6b&Dh z)~Vf{dEL4@cFdS8%t1By_G&A-U zG2pYbz{SDV$KqyvhPCqqP^V^X(MC^|(alp2O{v;BAvQK%%;O;i`4my`p7!YZq?L(#%akuh zj_OF6rR2@k+meFR&K%IC2W_8kbu%f^3_&ege5jZu^ly1cpAoAW;Y1vcy{=(1y!)z_4du|BEn% z;Q09-!NVnrt!9VMKDoc_(SaLOGIy4NUU}`Y(xr1-lQX6yq#WgqM41oR*j)Lda&Ui` zYn6#)!TJ4-Ev5p4e&&4wrcU*8X1LP2o8mV;bOanrq-UIRFaUJKmnZxhZD)K<9VC@rX)hbx~B_QH?J?9YQ&F)bOeg9| zm`tEl5R`E3m)s>eb7qbBv^BEE-KrIFU(?R0AEkQw&^O!=baD06%~}c#Nw;^?H=ik( zHtbfxN%il;GYfa`yd&DWg|XI=8O8ab+uc+;&Q#hIczop4J5{SwIWszbO0MtRe6l_? z`MhMjYmY2g+f>CX7n`C~7v?dtqwzkhm|J95p<)~9UUA*s*V_B^ij?IXgLz*K)@ zd2xZgSYE!Ni&t~ z^z0v9za>uHSoB!wc(+n>=~6g#I33R$u~tJYY^z|G)aPEUJerG_zbnb#8Cz6!mVf-& z>FqzeIn*R?7~iW{divAJ**9XQ*)q_BJFkuEI^dO86YhOJVoTGQSwruyEEcXyX|X=+ zGu(RQ^F-Uao+4;k8kNqQ4nr~17i4|Kn>*&6e5@s@s(5eZbDe(1EuFtZ{kj=C27T*j>Lk z=B8oJfw=!%T>0^Dm%qQebd@u@@qOPl>(S)f!3(|!_-+<{uOxqWqvzTE@i7ywjDBPj zLkHiI#SDA)#UxdWZg%uX?;ZVzm6P2JhbNiPu=?!CbGv@bzM*g&ek;tWO1k76##F#x zr(d1fa@EEwi)C2W?il4#)?IPCa{d!W`Gy-_g;$yy<=3klLd()7+3Xqpv+KeJ)AOsV zJE{sCm;UmC@H=u(wEg04SGU@scPq|Jd=!|HS=t+UwRB!$#HLO9JogPbLEPT#RC}G> zosO7YXM|qmpW7ZUIa>ATyXed(+dnfk`gdPSX+kzfweolM$d)JdY(CP~;xKRSrTkQ#O9FuuXL6X8pb{=TV)RFPiFl=FiU5mHDKMd+zou__vSc884VKdWQ$tH0mcG zYk2@cRvDD9uUzWu`?BFcn{8jcNgPn+J*8$@Xkby;l>2b|#xJqRG2>TmneBLbJ~gN0 z-f~0d1e6L0iJD^5l$P$29d0*4{gHE&jZfE*>gLnZ3x4nSE(?hsbL;fVc{f{YAvO@DV2%>mch4gvAN{P~~`}Ys#`GUEPmZXO0|id@g#nC9MuB z2=J_>s~9)o9nB?lLr?XXh}?1Q#&%9RE1>rWQ}a)Ph8b&Yc1+|P?o4bSdT7x-MR|5) zvpj20R^i&>;1e5-k!{CoA`e`N?Ag(q*_L*6a~oEVPyaS!dWgfc!W{eJZygH5U27!U z9^ab!$F$l4M&1YC*gJ_F<>~fy-RUn*KhV~ffKUCT@0pO4-*ix>6RjZn3k~ zrk>w+eMyqbp3&a9#}=Qk8Z|2Q!dUWP((#JYiqel8OL}^&KFl=aKNM$TU@*o}U;r+X zeSi@<4GUN56eKG_qXz>Lf;{IX=y75NNy7?KO=-o92Nfq7Fr^eT7V>3?Oz%rZQvs_C zWaz4(Fk;mTLZoEO^Ro9$zyN@Tq;WVw6RS0131Wr?7X$ZZF`EHfOz0J2#v+*<_SG3k z7-gX>gz1++#c>&4_OPcxslq}e3;H3zlb8`r(|U}}j*pLL#q(G?gPP3|i9~FK%jR;K zz=CN^)Y5nYQ)_fJL-b)tNF!mO^faZ@!e&fdp)=891_S8fm+@)zGT8vU*4WPi;Deoj z>)9L@!q#ZmgFTG2UmO7G59lvFjA7t+gdIW}btVHr`o)o2+I295k{IyUn+&m*bd&^} zj3qU|)CgAPytbsjR3;zrFjJtWG$TX-8cRBZ0|D*>xUX5i%-v!P ztYk7wq9aV^@T3wk!@NGG)De^tv)qalDjw>=O=y=>f`ltbqfGbd-7Or5o{;itz zdNlFTq#GqU2nv|8yUZ?uKycd_OD*1NGR8%+Ic4gpKXo$#JFh zBp?cxN_@hEXNl!I1w#44-(B(>CB;@>Mco*ooD3atZXUm`IwqspeP?l9SKDKgEjT`H zYCSPl4IT42cycwVkG`j#KF8r;+-14rXJ&zuO(EnALF#1Z{D%3hEnopi>K7#WX8!WD FKLL6$U-AF| literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/7_ancient_cypher.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/7_ancient_cypher.png new file mode 100644 index 0000000000000000000000000000000000000000..77f72ab4229b2721a8116ce02cbebfa398e4a78b GIT binary patch literal 5456 zcmeHKdo)yQ8z0Fv*9iG4V^rjAuRUwe?EPGR@ALfL=Y8IJlRVeB zXlt5kA`l2|H&-V*{HrIw)m7ndvr!p{K+J5|;_WA;gAquPSjgt`Afz-(1ROcqyY6jtZY3ON3Vp<9tK8~39B*(v((YxwC2n#e7JM3p(c)dJ1? z8kU$RdRcojsJq<@s46+oox%A*ej%76Je-77cl{8Mrg1%lTD7zAz0~2gh2gF(XB<{{ zSKDE(rdnxwX~lsvz$|^OQ%Eai>Wp2wzzTDbitF23&Z1nq^m@bNlr&{W9?}J`Y*6KF z`DF1WtqT>pLuSL8X4k7!%p7*v$0izzrMDaOm}$1D3?s`<*Zo!~Yqty3H>SkXCpX>6 zvZX9++RsQmu_Q0+JUg*>PupB&@vUgLD70HpsM${*^TK&sdgW08pe)&Bn)(6keNvJv5YChi5MJ(zKdwBU!ukZYvbeXR+?O;+- zXWl(=l6`HePLb?){HTH9T4b620_|m)@A3@&_x5)jf7~yqS`?=9>PlGWL;pIBF{`Hh zC%Jb>+FNmV^#lLp9a$(IG_fgL&{kql{X%scOYIN;w z?|qSFtbHZ?pc`Ynz(#-bkawmTT(3n*3lp}gD{@8e< zdrn4gxq)mn`9zOS#?3CWyMFb~O}}vv2&H(gqob#rqvPk61~;;-Uk=b*YgWvw3-WT$ z^PV?=?B0Kz>aRa1EX~@e%7Ob+aeuJ5&zQ({r3cJYc@P_Cw%bR|nDg`e02TWo<=VC? zx7*IECW7c8`aM-)%R3)$?YOKQ&pvdD-8}Qyrt|}AYU={F`Dk51?Lo|p2QWCVwQQrJ zp?N{?hKAo@>WeCxKT^iiVy_``T(dRpCEd6=C*&6 zZ!OxXa&#{4LSIz3`gy;8#--i;W$~<`@)>17+PDCy|L+@1{;ZmlRUEic{PT>RmK z(%J;^ucNdCD!lcCbKxz<&to-}Ddb~7mXHBqBKabC3qm05mPd*}W+)^@G9V6DKtsJQ zzluU~Su~U{$pi2ZIYJ>^*DYemYs(sM=9W+MbcWtvDkF^f&5JFT38fZu4S5UEr| z#bP5OA}|pIj8M$M;wTgf7Qkcicr|a)kn<91~;+ zH%n7MOYjL!1DRn=^hfPb2tn#70};$NW9^l8cT;H z!p&kP|WBoaIg)wa9;X!p0GB?Y^b917h2&laubsmB8aiDMXWN$_omce4BjbaTSXR ziBv2LD#)BnK>~(DEJd6!)})FV0tz?~+&`uY_OqP(H^o2!0Ehvw@n`}bB%z4_3q&&* z1ST4=VL$*5B$42H`xadyWJ@DJF=Wqyd4#!w3sk`s(rRj|mV9d;5dz8Q0j3O%!=t}a zMnYkylEun9#^-G9u>Zw}ox)&Ri-G+nWpL|)J0bQ-gN%KYib_;!4Y8SAA@`s zzdz{uLDzRN@Lk3~s_O?`-^IXp8ULuR{~KMJUk_7|0R9IQAwMe7n>^rSmMX*D#R*{{ z|2$vA35F#aB3FM20x`=#ek&m|vrJ&2n$*q1S?z_EiZV)f`1c!WuxQN9$==)c1~b^? zUa-UPQ<*`suFP`d=<6V|Oja>8uzlTFw~WP2oI5mHT_gi_n*6lEYN+vQXocwQ{g*sj zbPaHH9WDGt)@7px;d|LDsTvn{SQC_U*iA( literal 0 HcmV?d00001 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/cad/7_ancient_cypher_overlay.png b/Common/src/main/resources/assets/hexcasting/textures/item/cad/7_ancient_cypher_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..ac56ac22cfd2420e394d34dc958c1bd86048d585 GIT binary patch literal 4939 zcmeHKc~BE+7Eg>P;(Sr_DhC-qAQ!3)pZQM>i!iqYXI z^=o%NEz5r^p8e)H-FMadddxHDapbTA8BUd^1U9WX9TGqW$xi;m+blQbW&7e_PMc3 zd;k7(je~9E;d=vO&ge4hL&PqZa_M&i-;e4$Qn%!JZKHjoTkiui;oPg0HIvRa|8wgS z*MT*s{$&%%If6MSd+JWAXm*)FehrGohPVs%K~(qo!HeeaVIHd>)V$`%K}FPgJHnn8 z%M_E@G=<%Q5eZIIs>+!&A@%3-q?97cj#W30#hYnVZgo5(*wf~2cc{!j zFs;ufW`E&b{2zP6v*~41`w0g7^IV_U&pGtn_<09YtMHMluNMeTFN=KF_>ASkpE$!T zFAYok<0-;5uRs4>yQ_5Hp8dBqnOO0jBA1qCoe>j8CuSWoFC(NJkJ-_{>pArk{enE z>4>UD_*(n4;^wE)fgkfqUyHsURIIaeE_b9*sELG!hf3+;@wwqZ zn{8dbL8iDe)v;i)zxUn%$9hIp%1&vp-FK0x6YMWfBV2Qyg&1px@(G3C0>>U@2`lJp z0(%V&T{v<<5BEk|e)(l(iRX;g#eQLS)t4iuJh&fw?>sG0leS+|+Hn%;Z{gqVLo7NE6*WswB*~( zNgq;Ws^Y9*D_V=9%4}B1W^WxXktsC=#nlb6pqfP8#8=e16*c31u1aUek?s}z|{0J^Da>P z_m3|bgdd4LcQ)^A-uJ~hEiF{vmB!7lWGkg$FfJv)0G#VHQ;O=fYy{J*akg1&00WXj zahqZ`Am|dDWT^2_LMLOsID3)FATSv-NZOjmgw7;2%a~SNDY&2;_&G^if6>_gsqWNaxNF7}{ZPh%!c4!@*DpkHED+)dY6se6^*Q(nr-{ zVWA+D&>E~(fb6d{Nka35tgn2ttXRY8>`SpylHumFv+ci+f7BjA_|l zis?}TlUi?uC=Z8W3C7~{F#(H@2r(AI6Y*Faj))J7B|-s;3OYe4btV$gp|}MKfU^mJ z!$olv<@2~K5swFOcwzxdB7sFL1mS7a5(MLladjsMUn2pk5{c;Sl?4g|P->o7f^l&U z3%I~#@daF%g-sQ|z#2hm79j5tE-jRAUngp6r%iea(rSoQ%8g&`y&M@Sri!d$+T z!P>PWpO`&@B63+LrcVxV0r+L72e)%dDcdp7O^d+n(AUBM56V zF&NgikRoVX2qt7Hj#>Q#SZzya7@`Zs!Te}1*w1p}FN%RDQ43&L!(m}C&S&vO5|BZh zkFg{|M8wA=xJIZEeT{C?YshHCh`WaZ9syUNK&@Oc#|3t1+{=V;xa|Kh{Vs?ce~0J}CB7+qizLLH;9oiEGK`5UkHJp7G20O+nwzKP#1 zy1MB4CI-GqxvRRm==vrGzDc>Oy8dr;*?c)n;X3dSC>k7Z(ivBWq>|nzf~N*vg`^}QV?v8&pJuDnG)1W)t#(dx&P+$m(#)jQmZB_gDnbh)rO<-X zMkrfRM5z?nLMU(JeOoMjXUdZ6d#~%eT-W#hXXZLH=REiC{yq2od+z5x=ft`#S};!2 zP!okhjdON#a7X?pD38%-QKOhXWvtJX8W6c?C}rNP zSi@sipEaDUajWVw$s;VQxR|w8T+O*qVmK|wAR&0k)7P6$ntWUvOFkzNICa9NapOAU zHiVL&7q!Rwb-pvG=f$*%j_@$uQ1gj|uKjKUN$-j#HrrBcR~rEpdv(hnsCED^S-LAC z4z{5$DPE2fP>cUcn;vT;kGr;OIqO>cp5Tq8Mx&0B(g)6`87(cLhOH4FYVPThKQS@6 z?sD-oUGI=#U-I>~y03mlrtWNoRVp1L^XRdvE^E$0Z3m1-$7~6B-^xlz+;Bn2EM?udf>b*2KP2P9qX75)dx&Nj95=K#g?(920bJ`uL$9S7t!}qvbq1&;p(^1%+j{%G@h(RFo^<0ir=~Ao^GJK?vC8BXuDAbq?K`f}tj+a~ zs|g@QUyav;LZJ2r`k_^0i}kin-+=BbuRUv;Hu!ZXq&*L9y5OW(RhiX8;qX|2IUM8j zB87Rg*=^6_?FF3+>o&Gy`c;SuHH^guZptWu!~N4!r&ydxWsS-5}klH?hs8Z!fT ztVXMb_4}=t2?lnY7_$=GZ~f-*l}}a!-D{Jh6-I2Uuy~`c{#750X|5^yIH#&S)Mi<6Mt|-Tn%CUVc9Xi+ybs&$;?b(3AECH* zwe{ZRJ1LVy?+#$M_{95r>qe^Y*F5aw!S^pVdbl-U-{I?9Ld((ukLE6qTbYv`udTj* zS@@kt8VePJ_FT6A!`(Jhy{35qg`+b5JaqmLt4ADoPO~v{d2L@u;fgUQFSiijLvuHp z!BMBTJy~aN+047RGut_=x>P48Nh3lnD16!rQ+kNxO3o?#sGO|L#|!&jYW1y74sX98 zOw0yTvCUm2SXslnPv+Gz(Yi&}6YS3ylV)_?*1mTmMsTQ6GC(Wa8T~=BV{Xu*qYpO~ zZ+-TPYBGLWZMVrn-!_+|ZOMAyam^+0fUtZb5rr&JyRM} z`0q|z2zX$8&Eww7p%%~dCwzvEO`oLaF{8NP)WojlPj8>bXsH+Sa?7h`;Za(*%CEIX z?=0ClxwB>bXHv)h7bhb66_$H%eQc_beP}O^yVOFN+)|qNMSV{~&aQXI`spveytjt) z<)=A2KXW^+>LU(M4Zk>LEIHq}KdI`e)mrq8mStYv#1}2GTktK~-Pr}c(RHiC_jHtP zqxT%__tr+`oKf7}ATTRyn0Y|QZoA534`EMM*`PMz6vjAFk>6%^&WpNr4`lBhnhib1?}JtZ{mAibRc zy4DEaYSh#+@7|1|Rpg(rteALY-+22YDWdgrXgXP4eWlm48q4ylb2fF=-A!^Tozq8s zvV`*Hd6ZAocDi)g)sI)$GOxv>4{P-@rR*mQj!%U)dZgkD)_&mn${sKgg^+%0ZfQ6KqO;@*kFfvS;)C^n1IC$LFE26*ri-I3`Z=5FjPDh zPsBNf!0XA_d72n&DadEJJIwz|fn3>O{p4~9i$Dkt4#o#l@M5WeKw>hP1R|M0CgTtU zP8KSX10gt(%veb=%;5mZcv4s*hs7d{k`wS12gz-)Sj3L`7N1bU<$k9Z$-b(9=s^ep zBm@$kNDvAMBRynt$Mp!w*MR=fL*|J*B@o;pnK($wgB;gGBDwKM3Xu2RUlJq@7)l4^ z5ugA_h(Kk?tfZf&T;R-g`|hEXKmZFRLtcp3KOyBX|A$yV#iq0jr86=R#Qi((Pv~#C z4}lRBm&3mGiSeF%Je=L#GTr9V9VnJRF@&V&bSwK8Ryl(kVCwl??cT z5CdWWj1g4MBAFZz@gOA?LXL+K9tKDw(MWU>4q!6qI4TvQ;uv%$fa609DuYHNQphC! z2#Up07^zAiU}RKEDiEQf^QmMS8KmL(L|+I;^(8|%fJ)=zKswQq3i3cc!;(2f1@c() z#Zn=FEGH}k1Q0+LEdY@75eH-sz#>o_Ec;>dgoTiY98l^> zqEjfy3^X!{P9G|EvMK%-&$N>jH4k4sOGL=Olvq(fw5|u?IvdAPH(UL_Rffs`?KlFd0 zmD>knJ-p~nund_$bZBUJPkBIr!&k$X0r1df!eEBB1qnA$R6FYP=e&scSmvj0m@~Kl!)_XZ ze?@YrAN+bo6){Sw*0W6gq)vvaEAWfhgd2v20m3~=muBJZP0vw5wz}hG8Mh1IEn$6K(mou&@^BRoXrd7Ck z@4cbW|CEk0UjV-i;7cAJoL^#I0IeP@Ni*y1G^pxG3^TMd{JdIgVPq?&jr+VV>wI2% zb6=!$mF#M~inb#{ME2E@QCQVpvG=YOWoEFyxS{g2>t4|w#$@`|rkLKh%!)o`dbg!| zB8t($F1FRP)3fEH5VKo7MmXV8i?Bn_M=%+|8n`}x-O+!)+1jdNv!ZRoDWlfGB4Tb5 ny>a^Oj`*2j&MKEkYM1CQFsJQH332AgDxjPl7dhnGuZ{c<3L4CL delta 417 zcmV;S0bc&QEV=`bBYyw^b5ch_0Itp)=>Px$bV)=(R5*>LlQBpFQ5?p<6DOg;2p4Z~ zNRS3~5K$VsA;_gW0wF<&99_CaoLpTTj9MN-U^EFA4mJf25`kbsmkMg+Y8HLV`{2Fr$M^n^2mDh4H#(Dv`*5})%sxIX2M_lj-l+MBBjr^&FgBuP3U_ewwBURBBgK8Nc)iOTPnM@xKWumt$ zQWcFpZ=UG(^qrFN(p<>YE4W1u$|qYmEUe@1ehI}2Lt*b4!0gv?a>F+{h=;Yy7=ReY zqb_s?vV$BppntJBe6h~P<&7Ye&P@&2Qb|=b+T2J$Tn362hVyn_(3wnb(Sz6FGy0t# z0@0wchO-U9xI!{sqWzr&fJxX4cZ(hb@Erz#ey0bW$t0Ko+}p#vMZ4ZaAR2_Zk#kC*6Ve#~`WM+@$94$}8fRvK^Z&J@YQfR;X$o zWF|ToKfHQKp;A&vQ?u6gs%{6&X|#!$&x!gmW3$D%7q!|OxJ!MN$4G{8^jXPDSxObtq(K>nR@BxfBsx60Z#-j{!|>)+BmS>%l4EoBXOzF~>#Ez@lM>Qm z0tzTegC)P8$}oL+Y_=$Eh1s#iPUmt~o2gFU+MT;+Nhb41&kVbyh`R5M?h?%M8D%DP zY0jBhqWd%FESWyxD12Fzh7XLuS#IVHMyj^XcgfQ~m+sKGrcmL0cTK8xXNlR5T4tjJ zYS`q#mTA1O)K}DsLfwTUucQ953qu^=JT;RLz0&UR?n7L3Zp8XxRs%14aj!ubX2C;L zy3XVziivyCrV}$agmEUg=wC8kw4)itXq}GkQ7I+69rIh}uHS3x&{Ek<-}3!7$!+VT zLR)<(X!w?Mvt6PsWA#@p*Q^riD{BR7j`fFSQKKBUTO<#hv~Xk5{V#Fm ziX^%xy92fV0K8BcgUvl95O&I-Zn!(dP6LzVDb-6-h=d5ss$sb_TuEeZdp%uj({0)J z!gug|@gvVctGI-g;2+>JZcBiv(Qd2cyQdO=KV9Hfl@M`ZU#8+lhv`$`eCNZ?r9!=W z-6mGSFt|;&w03uPBI^7b?TOOn#OlAaqs}tlytKDlv}(<)5FO(fZrvlgExvp;NqMEf zS^s8j$@MFS*1p4j$%XAfVgsL|{dMva`W?%Y)~HO=qkHhgfGN`_G4fhs?{-1nXvNU) z`SpdNc@HjHL&u&JbowmWW{R;W+w)s4#H#5pq4YPe(fcJ%ca;78$w5EwP0P185_RqF zsV0qXIMV5MtxLDwHli`(O8mQR?-H)l_UDXVCSoHGvknx7rk;zvay2_Se*gULgqDGQ z8D~&|IeytLSM#b}9UiNWq)wBXU6+<+m-ZbECWEo3+Aj#Eyt3=^+Bm~#X2`9s-nLf; z69QFLf@L;&@f!|o$Aum)>fd_#2|S7)O??^aHoWrZzDPSsXMC29`>uzayv9D+^Uycj z`{V!pq-qKOUYkBV`-dn)yw7dzRrYJcnVrH&GWU_9 z!vEXK_qxO3vFsk@Z9138Ih7riskV#}3fCJis%?^A`q4zisq+=6p%UmiSe zvTSaH-EGsZ#5iN@;3%O1+n{^AK07dT)#5uphhG;7OUZ4gFN14yww{0NZIQ5-6WRCD zuA(N&&sj?dw$~k#O>2mwCO)?Zw#s{jR(+z zjx%|<>Ozmb+khE{DUMOlS>yaGGtOAsz0P62JGfcUq_^d!jXT?D*hQ__8r;@|eGg=>P^<4nzS1=^DxqO}+GF~9eQw-n3b%Xv z7Ue%(TBvNhiJVu4u>#~+3iRYML9q}AKw=(@Qwk->v4ui8Ix8gr7zNAGJUCn+a>9%> zG-1#J$O*H8;z{t7u;2&*CteEs#xL^&Zydz?LvfOS<0Vo8{V253hq#Ao`j-9A7dBPUFRTrOea z@d||kry%3R(r`SH!C>GCBs__PMKrLoIFTGsVnwpqYKSomHY@|B0*PE87NOOc08bnv zcfw$hdGtsBgc48BPw*ny2Nn=M@Jc{}C*lZrp%6dbLMC^OML<3{^tTo=Kjd`B`@k}B zj1+`jV_}he_IL;g{A4eQkw$C6fj~SQ4GR%f8L}$zizVGXJiR_ys3`~+2qhXTgzPUg zQfa0-0`NsSrT6Qy>JwVZ1~Xu9;91&UEqeaKeyqgwGPMXh65U=+R__Bs8J0-Gj-w2N z{}3!*-7!8!>xlm^J{&a)<5~=2Hzq?`7t#swpIYGuz7Svk$=8Q{_$QY@qrWZkRs4RV z>lAU#0vlyZ&!<8GL@2fLV{XlNh zQf**n%g*PL3Tv0tv&{oKbuJc*BkmWYgXic}mn5g;?>*65?z&hM!PxODyI$6{?$)1f zne45LE z5pof8=*|@R6Fp{5xNmuP@$#WGtC9Y@oZkux(=QZoJ4TdRb2IeHx+ZsJ`Ts=MLq)Hw z=?O^*+Nv_NSRNAi@Q12rkKZI251nMcn$+k2d_q@L01#RPoMxo=9_O^L{qEYeIewA4 z!HwsWE#hW1@wy*wtiBgLIAo@sH5Vs3V1X(=(|$V{wJe;xjS2!PL)5NJI`44u#ixdw whH)EH%e(U`w3Cupw8C=hwyrHTT}JP;FDxx)*_l3nhft34a9zeexHv5NKQ?@kZvX%Q delta 385 zcmV-{0e=4AE1Lt5BYyw^b5ch_0Itp)=>Px$RY^oaR5*>Tld($zQ5?rVCr)jKxa8oV z5DwB1l2Z;2PD)YGVkERQx%nTshzPYDE|r5|oJ+aXcDM)@q%8&x7G#4WD&+;hh1I|foPOPOK9r}seh(@BBO@Ls3GHS@y{m8 zAhI2!Qz-zjw6gwZ6Q}jy_6KqMgX+b131pHf0XV+g)qdT^bNx`p-J*=UMUhcMGD$-| zZ(rs9{9Se;`I$D_WQl!zcAes2D^9MYQ$BUlGfe>2j;^$s1(V4n4H*pk7&jYg?qhIA z&ootuV;&sajCw1mQz>wf*{5fkJhmQ`?UaE9dY2(r(y2AGn)Q#oy$pG5J*aP2!=ay3 zure6-DH}QfwPsc=V8N^55cab9M`Men?DBeW`-9Z;C+wX)X;TLC5{O0t6ubxvKsD`? fYTCEhJ^3wP!)KsCGN4i}00000NkvXXu0mjf7mTy8 diff --git a/Common/src/main/resources/assets/hexcasting/textures/item/scroll_ancient_small.png b/Common/src/main/resources/assets/hexcasting/textures/item/scroll_ancient_small.png index 88a87a7720ddcfe2f8d0b619ebd52666332d72e5..aabd00acae1c067c533f421a6c2fceaf0d508521 100644 GIT binary patch literal 5450 zcmeHKX;f3!77mRM6u}8ma3aPDlq5F;nPetRN{~iCP^?^TZXkvXCKm`nkQv2VL4=k; z)CwXFh=^klR8Web7F!hsiXbWqTAVp$SmMk(D3^w-v#x1r+ZgQwB!O|{e@9gH={Wp(GV|ba*2^-W14z5`oU}D*3n18rsa`cj8i&})16*O)?2?k8WU`0dB%Xy zVtPZRd*#0Ui`q(C)1L`Se2!{q@(prLxn2u7t-mbPV{!j-^XU5UBb@&04Jo%>o7UZp z?>d38^Z5PFu}c}*bWFaTlnKS&Qg|Xgd!q~l9+{AVPNZ>Bb7pLa$AR|`3iNy>IZ>_B z{5vm@{k<#G?sF@97({Es-m4Q^qxw`dRgdc*buO=_4i3!R_t;N#d2!kHv0>I*&t{d; z8kWe&YY*v^kIkLTDoA_jdD_^2ZMyzd-!-yTKhBEV-d-Uhs@vc0xanj6>UYC&Q-5Ao z!Ol#Y;`7J5_V9#6BZjYR&Ge`FkCQJEPSyDyuduLYq!f1shVHL!J{8%YM1JTiyY__O zd)}FrU}%zYW}t=!bX*>{-cP6U*(1@5D}g|R`E|mMNlj(ko%h}skEz%!@GwY=n#dN` zVjRcZ)(M=Ipi}ygdAjTHq%DfE1@U_fx|;00&&Q6Bn_<5r_=kHg!n2o`blmdRPn0CY zOr-*onPsuLHKzPXvoyO7W7bZro|)rjhxp{F^3E=3GkIB_GkN@0#+3P~o0si4eE7Qr z7h@l8j?n^_Mgxn5?m4_GrnXee;EG-3xsM!^wvsOF^eYH)U$ClR#cQkI{R-D}tr+WD zyzEwo-Y753Qg^!*K8xx)w)}R!YL4593xYS3U1m{`f^_NO*{iEsq@@ohh{}J;F?w)$ zhRT^}B+1GESXhu>fxS<$uy_2ev*F;&{Dq1PYVKGyev*B1oxdW340NgY0WFty?Y-K? zf96_Y`g~$VV^Kr4duwh(^n<6yBJmujF!ITWc7ua(kL~vnR|_KNgs&?Yklb54P_=i3 z;kInAm9s76-Sneb=jQhVS*ulj*x<$9FG)Ho+N&{%CrDNP8@{`Yyt<&e>iVt!>LcfV zS_RlSz?CzVE~^mr%e>H~s>V4br%i2p&qC)<>b3UPsMcJRm8l;^zMC~LZ`+{Yd`#iu zW}}2XPOr`{BNisF9Jjlc*jZp6^lR@C%Mw9xbdPWKnfZm~ER){G+a1>ATVB@=_~u-k z@uJbsJDa*apzM&D&ug*pWQR*rH0YJdV^j=mQx`U2kBN+*?)WV{pLgL*{1euX)4Y({ zsr8;Sif?w??BwmdRX=^(VBgsJ%T`o=A07T)%}Z^ojMB5TQa|=dXGSjif!?={slLAB zukS0T+`O}<-w^7PU~N(|yWvfXPrK8(?Mh+$^AmT} zvm2r2@MGpp%||-|x_P-Vd5tTw#ns&g(ypNJ@7}u~|&vh8eTk?$RFaTf1=48IvuJGk?tP-Gu2} zxNT7R*HDT<-TD62lucMsNLMV|e(gRjiQ}$#|aNLtC313K`T=eYC z+1jF8>e4F*H$A)FnB{hM;Tu}}x76;=#8rtY47vZMzb-l`d{&IzJ-(kMcW8GloC(LQ z%p)FK2kY)qA|6ch!-b-z1EAvOvBZ=_r*ZXJ8;3S#8>KRg*JM}tpD9v-IN|k6JBi10 z-S__lPBTof7V&?XoON^Br3H)sN@u?>*|EttAo=ty;1c;7dzz|l``d)J*0aSI;^aKs zH(XMFef@fNe;@%p#A6DI6s5bo56{n5&6ZmtSmJUEE)F_z~l z>srv$#xPun9x8rZ4>lwf6G6T-2qr4UGW5{FV65$wG7u8M2rdW?7D{aJf2ynSI3eE# zzsiaWaAi(#h|o02oRi=!f*=SRv%|A=L^_8j>`xH+OxrjAc%}jB1J?*5F@BW zsXUlOX0cc#fI^~B2&e`@5h+1HB|)N?r-2y8;J^wyfA`=0USWFsip+KC&QIHXb{?S89IZ`N01+nM^0ANxD zbO?ZGREpLcKE!sB%EchMoI)`e43lJ%VC{g0aJGY&yA7T~1U^Z;LP11;8lZbXDB(*Z z6rYB?g<^Om0&4gqGpJOi6^l+~uxMzG4tuRd^o8XLG#53fWPmv0gl1vbXgDafpe9pM z04*#U4ckc$gNRh_EtQ7a;5869jpfH-F1n%kAOdng1V%vt3XM&su*rZonZ~98Y$}5Q zSh0ao`cl475c$8fHQNVgJ-p~{LIpa1q*gS%r&hunhI_-^P@#4+;c(h*!3Lq>5ENiI z%-8yfVhs;LA)q7}M(f8&!hVno|0Ws80vgDtLI43~FwqrcpnIGpfCU5wgFz1pvVuSw z{XftZQUMYH%3+6Klt+{+G(ojo;mk*t%HnfxB0^xzI-ryh$P_efKT?J#jRZ^5RE!VN zT9f{Z4{NQ$s1k$P4a?Bdg;qk+$5J@Lm!|0agKcCT{=peg=&zG}5x-yQ`byUqG4Mso zU$g5gU0=k&7b$2)$R{bTB!2Ca6#kapyYgbs6XznJ?IR%KsU9lg7An9K4zJP@u_+*vZ)n@NC;A zlV+U4XdYP?m@BH>@MKED!33=4Nd@0v##3rfS#FP8em5}=Z4Ni%;`W+bzp}$(u}*DQ z{9NLRfoM}I9?hseRTONZY3pZlOz$q)Wg7I2wduuKIYSw(*UFvGT#*T~U$hK#r951C0k2Zmm& nhCA+*Sp3yrlGBc4@5f+%u9S-`Z>092^kCebJvk+gf${$ayG~4s delta 305 zcmX@5b((2{ay+^9y05kkh#CfhD|S1m<bf8M;r1Rz+kYC`IZ^&8VXIKCusY0 zT|q-*BcpLnftBw4`mg_&uYYH}=3XYF`0sCDcn-g1W)I*=Jhb%Y(R9+$3ci-KnI1nakuPs?;KSROl5OVY>kL809W*-8`Vi>&9Ws5gF*DwMuXkN^ y=zsg{;D1{6d+&jGOo4$s>>`4pLT From f3a31249ffaecc6a79398690fba8e74ddad4fa20 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 15 Jan 2025 13:51:28 -0500 Subject: [PATCH 33/81] Basic implementation --- .../client/RegisterClientStuff.java | 2 + .../common/items/magic/ItemAncientCypher.java | 59 +++++++++++++++++++ .../hexcasting/common/lib/HexItems.java | 1 + .../forge/datagen/xplat/HexItemModels.java | 1 + 4 files changed, 63 insertions(+) create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java diff --git a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java index 75658fa63a..14ce4e1d22 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java @@ -63,6 +63,7 @@ public static void init() { ItemSpellbook::isSealed); registerVariantOverrides(HexItems.FOCUS, HexItems.FOCUS::getVariant); registerVariantOverrides(HexItems.SPELLBOOK, HexItems.SPELLBOOK::getVariant); + registerVariantOverrides(HexItems.ANCIENT_CYPHER, HexItems.ANCIENT_CYPHER::getVariant); registerVariantOverrides(HexItems.CYPHER, HexItems.CYPHER::getVariant); registerVariantOverrides(HexItems.TRINKET, HexItems.TRINKET::getVariant); registerVariantOverrides(HexItems.ARTIFACT, HexItems.ARTIFACT::getVariant); @@ -75,6 +76,7 @@ public static void init() { } }); + registerPackagedSpellOverrides(HexItems.ANCIENT_CYPHER); registerPackagedSpellOverrides(HexItems.CYPHER); registerPackagedSpellOverrides(HexItems.TRINKET); registerPackagedSpellOverrides(HexItems.ARTIFACT); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java new file mode 100644 index 0000000000..44568c1f8e --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java @@ -0,0 +1,59 @@ +package at.petrak.hexcasting.common.items.magic; + +import at.petrak.hexcasting.api.casting.iota.IotaType; +import at.petrak.hexcasting.api.utils.NBTHelper; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ItemAncientCypher extends ItemCypher { + public static final String TAG_PATTERNS = "patterns"; + public static final String TAG_HEX_NAME = "hex_name"; + + public ItemAncientCypher(Properties pProperties) { + super(pProperties); + } + + @Override + public void clearHex(ItemStack stack) { + super.clearHex(stack); + NBTHelper.remove(stack, TAG_HEX_NAME); + } + + @Override + public Component getName(ItemStack pStack) { + var descID = this.getDescriptionId(pStack); + var hexName = NBTHelper.getString(pStack, TAG_HEX_NAME); + if (hexName != null) { + return Component.translatable(descID + ".preset", Component.translatable(hexName)); + } else { + return Component.translatable(descID); + } + } + + @Override + public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, + TooltipFlag pIsAdvanced) { + // display media fullness as usual + super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced); + + // also show contained spell + var patternsTag = NBTHelper.getList(pStack, TAG_PATTERNS, Tag.TAG_COMPOUND); + if (patternsTag != null) { + var storedHex = Component.translatable("hexcasting.tooltip.stored_hex"); + for (var iotaTag : patternsTag) { + var iotaTagC = NBTHelper.getAsCompound(iotaTag); + var iotaComponent = IotaType.getDisplay(iotaTagC).copy(); + storedHex.append(iotaComponent.withStyle(ChatFormatting.DARK_PURPLE)); + } + pTooltipComponents.add(storedHex); + } + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index a85889e104..9e921b153f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -74,6 +74,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemFocus FOCUS = make("focus", new ItemFocus(unstackable())); public static final ItemSpellbook SPELLBOOK = make("spellbook", new ItemSpellbook(unstackable())); + public static final ItemCypher ANCIENT_CYPHER = make("ancient_cypher", new ItemAncientCypher(unstackable())); public static final ItemCypher CYPHER = make("cypher", new ItemCypher(unstackable())); public static final ItemTrinket TRINKET = make("trinket", new ItemTrinket(unstackable().rarity(Rarity.UNCOMMON))); public static final ItemArtifact ARTIFACT = make("artifact", new ItemArtifact(unstackable().rarity(Rarity.RARE))); diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java b/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java index 7def15a4e4..f8a988459f 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java @@ -119,6 +119,7 @@ protected void registerModels() { buildSealableIotaHolder(HexItems.FOCUS, "focus", HexItems.FOCUS.numVariants()); buildSealableIotaHolder(HexItems.SPELLBOOK, "spellbook", HexItems.SPELLBOOK.numVariants()); + buildPackagedSpell(HexItems.ANCIENT_CYPHER, "ancient_cypher", HexItems.ANCIENT_CYPHER.numVariants()); buildPackagedSpell(HexItems.CYPHER, "cypher", HexItems.CYPHER.numVariants()); buildPackagedSpell(HexItems.TRINKET, "trinket", HexItems.TRINKET.numVariants()); buildPackagedSpell(HexItems.ARTIFACT, "artifact", HexItems.ARTIFACT.numVariants()); From 614fffd974e96fb89906ff997907d868b3938e45 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 15 Jan 2025 13:52:37 -0500 Subject: [PATCH 34/81] Make it writable --- .../casting/actions/spells/OpMakePackagedSpell.kt | 11 ++++++----- .../petrak/hexcasting/common/lib/hex/HexActions.java | 10 +++++----- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt index 2601a70696..c92b1f6d28 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt @@ -17,9 +17,10 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.item.ItemEntity import net.minecraft.world.item.ItemStack +import java.util.function.Predicate; // TODO: How to handle in circles -class OpMakePackagedSpell(val itemType: T, val cost: Long) : SpellAction { +class OpMakePackagedSpell(val isValid: Predicate, val expectedType: T, val cost: Long) : SpellAction { override val argc = 2 override fun execute( args: List, @@ -30,13 +31,13 @@ class OpMakePackagedSpell(val itemType: T, val cost: Long) val (handStack) = env.getHeldItemToOperateOn { val hexHolder = IXplatAbstractions.INSTANCE.findHexHolder(it) - it.`is`(itemType) && hexHolder != null && !hexHolder.hasHex() + isValid.test(it) && hexHolder != null && !hexHolder.hasHex() } - ?: throw MishapBadOffhandItem(ItemStack.EMPTY.copy(), itemType.description) // TODO: hack + ?: throw MishapBadOffhandItem(ItemStack.EMPTY.copy(), expectedType.description) // TODO: hack val hexHolder = IXplatAbstractions.INSTANCE.findHexHolder(handStack) - if (!handStack.`is`(itemType)) { - throw MishapBadOffhandItem(handStack, itemType.description) + if (!isValid.test(handStack)) { + throw MishapBadOffhandItem(handStack, expectedType.description) } else if (hexHolder == null || hexHolder.hasHex()) { throw MishapBadOffhandItem.of(handStack, "iota.write") } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java index dc57ed4997..13b8f72bd2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java @@ -275,16 +275,16 @@ public class HexActions { new ActionRegistryEntry(HexPattern.fromAngles("adaa", HexDir.WEST), OpBeep.INSTANCE)); public static final ActionRegistryEntry CRAFT$CYPHER = make("craft/cypher", new ActionRegistryEntry( - HexPattern.fromAngles("waqqqqq", HexDir.EAST), new OpMakePackagedSpell<>(HexItems.CYPHER, - MediaConstants.CRYSTAL_UNIT) + HexPattern.fromAngles("waqqqqq", HexDir.EAST), new OpMakePackagedSpell<>(s -> (s.is(HexItems.CYPHER)||s.is(HexItems.ANCIENT_CYPHER)), + HexItems.CYPHER, MediaConstants.CRYSTAL_UNIT) )); public static final ActionRegistryEntry CRAFT$TRINKET = make("craft/trinket", new ActionRegistryEntry( HexPattern.fromAngles( - "wwaqqqqqeaqeaeqqqeaeq", HexDir.EAST), new OpMakePackagedSpell<>(HexItems.TRINKET, - 5 * MediaConstants.CRYSTAL_UNIT))); + "wwaqqqqqeaqeaeqqqeaeq", HexDir.EAST), new OpMakePackagedSpell<>(s -> s.is(HexItems.TRINKET), + HexItems.TRINKET, 5 * MediaConstants.CRYSTAL_UNIT))); public static final ActionRegistryEntry CRAFT$ARTIFACT = make("craft/artifact", new ActionRegistryEntry( HexPattern.fromAngles("wwaqqqqqeawqwqwqwqwqwwqqeadaeqqeqqeadaeqq", HexDir.EAST), - new OpMakePackagedSpell<>(HexItems.ARTIFACT, 10 * MediaConstants.CRYSTAL_UNIT) + new OpMakePackagedSpell<>(s -> s.is(HexItems.ARTIFACT), HexItems.ARTIFACT, 10 * MediaConstants.CRYSTAL_UNIT) )); public static final ActionRegistryEntry CRAFT$BATTERY = make("craft/battery", new ActionRegistryEntry( HexPattern.fromAngles("aqqqaqwwaqqqqqeqaqqqawwqwqwqwqwqw", HexDir.SOUTH_WEST), OpMakeBattery.INSTANCE)); From 16a1e3af6629a903e8b1d9f3427726d70da60510 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 15 Jan 2025 13:54:13 -0500 Subject: [PATCH 35/81] Cypher-filling function --- .../common/lib/HexLootFunctions.java | 3 + .../loot/AddHexToAncientCypherFunc.java | 84 +++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java index bebc94ad42..409f5c979c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.common.lib; import at.petrak.hexcasting.common.loot.AddPerWorldPatternToScrollFunc; +import at.petrak.hexcasting.common.loot.AddHexToAncientCypherFunc; import at.petrak.hexcasting.common.loot.AmethystReducerFunc; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; @@ -22,6 +23,8 @@ public static void registerSerializers(BiConsumer + * The function itself is only used on Fabric but the behavior {@link AddHexToAncientCypherFunc#doStatic} + * is used on both sides + */ +public class AddHexToAncientCypherFunc extends LootItemConditionalFunction { + public AddHexToAncientCypherFunc(LootItemCondition[] lootItemConditions) { + super(lootItemConditions); + } + + /** + * This doesn't actually have any params so extract behaviour out for the benefit of forge + */ + public static ItemStack doStatic(ItemStack stack, RandomSource rand) { + var fullHex = HexConfig.server().getRandomLootHex(rand); + var patsTag = new ListTag(); + // skip first element since it's the name, not a pattern + for (var patString : fullHex.subList(1,fullHex.size())){ + var pieces = patString.split(" "); + var pat = HexPattern.fromAngles(pieces[1],HexDir.fromString(pieces[0])); + patsTag.add(IotaType.serialize(new PatternIota(pat))); + } + + var tag = new CompoundTag(); + tag.putString(ItemAncientCypher.TAG_HEX_NAME, fullHex.get(0)); + tag.putLong(ItemAncientCypher.TAG_MEDIA, 32*MediaConstants.SHARD_UNIT); + tag.putLong(ItemAncientCypher.TAG_MAX_MEDIA, 32*MediaConstants.SHARD_UNIT); + tag.putInt(VariantItem.TAG_VARIANT, rand.nextInt(8)); + tag.put(ItemAncientCypher.TAG_PATTERNS, patsTag); + stack.getOrCreateTag().merge(tag); + + return stack; + } + + @Override + protected ItemStack run(ItemStack stack, LootContext ctx) { + return doStatic(stack, ctx.getRandom()); + } + + @Override + public LootItemFunctionType getType() { + return HexLootFunctions.HEX_CYPHER; + } + + public static class Serializer extends LootItemConditionalFunction.Serializer { + @Override + public void serialize(JsonObject json, AddHexToAncientCypherFunc value, JsonSerializationContext ctx) { + super.serialize(json, value, ctx); + } + + @Override + public AddHexToAncientCypherFunc deserialize(JsonObject object, JsonDeserializationContext ctx, + LootItemCondition[] conditions) { + return new AddHexToAncientCypherFunc(conditions); + } + } +} From 0d8e1961a762af247842e847adc83621920203a3 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 15 Jan 2025 13:55:36 -0500 Subject: [PATCH 36/81] Loot injections --- .../petrak/hexcasting/api/mod/HexConfig.java | 3 ++ .../common/loot/HexLootHandler.java | 36 +++++++++++++- .../hexcasting/fabric/FabricHexConfig.java | 40 +++++++++++++++- .../fabric/loot/FabricHexLootModJankery.java | 15 +++++- .../hexcasting/forge/ForgeHexConfig.java | 14 ++++++ .../forge/datagen/ForgeHexLootModGen.java | 12 ++++- .../forge/lib/ForgeHexLootMods.java | 3 ++ .../forge/loot/ForgeHexCypherLootMod.java | 48 +++++++++++++++++++ 8 files changed, 165 insertions(+), 6 deletions(-) create mode 100644 Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 19458cbc8e..93b9dbba5b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -7,6 +7,7 @@ import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraft.world.level.Level; +import net.minecraft.util.RandomSource; import java.util.List; @@ -74,6 +75,8 @@ public interface ServerConfigAccess { boolean trueNameHasAmbit(); + List getRandomLootHex(RandomSource rand); + int DEFAULT_MAX_OP_COUNT = 100_000; int DEFAULT_MAX_SPELL_CIRCLE_LENGTH = 1024; int DEFAULT_OP_BREAK_HARVEST_LEVEL = 3; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java index e0788d5446..6cef0b5377 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java @@ -4,16 +4,18 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; +import java.util.List; + import static at.petrak.hexcasting.api.HexAPI.modLoc; // https://github.com/VazkiiMods/Botania/blob/1.18.x/Xplat/src/main/java/vazkii/botania/common/loot/LootHandler.java // We need to inject dungeon loot (scrolls and lore), make amethyst drop fewer shards, and the extra dust stuff. // On forge: -// - Scrolls and lore are done with a loot mod +// - Scrolls, lore, and cyphers are done with a loot mod // - Amethyst drop fiddling is done with another loot mod; the shard delta is in the loot mod data and the rest of // the stuff is loaded from TABLE_INJECT_AMETHYST_CLUSTER // On fabric: -// - Scrolls and lore are done with a lootLoad listener and the amounts are loaded from config +// - Scrolls, lore, and cyphers are done with a lootLoad listener and the amounts are loaded from config // - Amethyst shard reduction is done with a loot function mixed in to always be on amethyst clusters, god, cause I // don't think it's facile to use the loot pool api to try to figure out which pool is for the amethyst and reduce it // - Amethyst dust and crystals are done by adding the loot table Forge uses in directly via listener @@ -61,12 +63,42 @@ public class HexLootHandler { new ResourceLocation("minecraft", "chests/village/village_taiga_house") ); + public static final ImmutableList DEFAULT_CYPHER_INJECTS = ImmutableList.of( + new ResourceLocation("minecraft", "chests/simple_dungeon"), + new ResourceLocation("minecraft", "chests/abandoned_mineshaft"), + new ResourceLocation("minecraft", "chests/stronghold_corridor"), + new ResourceLocation("minecraft", "chests/jungle_temple"), + new ResourceLocation("minecraft", "chests/desert_pyramid"), + new ResourceLocation("minecraft", "chests/ancient_city"), + new ResourceLocation("minecraft", "chests/nether_bridge") + ); + + public static final ImmutableList> DEFAULT_LOOT_HEXES = ImmutableList.of( + List.of("hexcasting.loot_hex.shatter","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","EAST qaqqqqq"), + List.of("hexcasting.loot_hex.kindle","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","SOUTH_EAST aaqawawa"), + List.of("hexcasting.loot_hex.illuminate","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","NORTH_EAST qqd"), + List.of("hexcasting.loot_hex.growth","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","SOUTH_EAST aqaaedwd","EAST aadaadaa","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw"), + List.of("hexcasting.loot_hex.lunge","NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"), + List.of("hexcasting.loot_hex.sidestep","NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","NORTH_WEST eqqq","SOUTH_EAST aqaawd","SOUTH_EAST e","NORTH_WEST qqqqqew","SOUTH_WEST eeeeeqw","SOUTH_EAST awdd","NORTH_EAST wdedw","SOUTH_WEST awqqqwaqw"), + List.of("hexcasting.loot_hex.ascend","NORTH_EAST qaq","SOUTH_EAST aqaae","WEST qqqqqawwawawd"), + List.of("hexcasting.loot_hex.blink","NORTH_EAST qaq","EAST aadaa","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","NORTH_EAST qaq","EAST aa","NORTH_WEST wddw","NORTH_EAST wqaqw","SOUTH_EAST aqaaw","NORTH_WEST wddw","SOUTH_WEST awqqqwaq"), + List.of("hexcasting.loot_hex.blastoff","NORTH_EAST qaq","NORTH_WEST qqqqqew","SOUTH_EAST aqaawaa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"), + List.of("hexcasting.loot_hex.radar","WEST qqq","EAST aadaa","EAST aa","SOUTH_EAST aqaawa","SOUTH_WEST ewdqdwe","NORTH_EAST de","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaeaqq","SOUTH_EAST qqqqqwdeddwd","NORTH_EAST dadad"), + List.of("hexcasting.loot_hex.beckon","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST weaqa","EAST aadaa","EAST dd","NORTH_EAST qaq","EAST aa","EAST aawdd","NORTH_WEST wddw","EAST aadaa","NORTH_EAST wqaqw","NORTH_EAST wdedw","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"), + List.of("hexcasting.loot_hex.detonate","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaedwd","EAST ddwddwdd"), + List.of("hexcasting.loot_hex.shockwave","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaawaa","EAST aadaadaa","SOUTH_EAST aqawqadaq","SOUTH_EAST aqaaedwd","EAST aawaawaa","NORTH_EAST qqa","EAST qaqqqqq"), + List.of("hexcasting.loot_hex.heat_wave","WEST qqq","SOUTH_EAST aaqawawa","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwded","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"), + List.of("hexcasting.loot_hex.wither_wave","WEST qqq","SOUTH_EAST aqaae","SOUTH_EAST aqaaw","SOUTH_WEST qqqqqaewawawe","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwdeddwd","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"), + List.of("hexcasting.loot_hex.flight_zone","NORTH_EAST qaq","SOUTH_EAST aqaaq","SOUTH_WEST awawaawq") + ); + public static int getScrollCount(int range, RandomSource random) { return Math.max(random.nextIntBetweenInclusive(-range, range), 0); } public static final double DEFAULT_SHARD_MODIFICATION = -0.5; public static final double DEFAULT_LORE_CHANCE = 0.4; + public static final double DEFAULT_CYPHER_CHANCE = 0.4; public static final ResourceLocation TABLE_INJECT_AMETHYST_CLUSTER = modLoc("inject/amethyst_cluster"); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index a49ab760f3..003c774985 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -15,6 +15,7 @@ import me.shedaniel.autoconfig.serializer.PartitioningSerializer; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; @@ -209,6 +210,18 @@ public static final class Server implements HexConfig.ServerConfigAccess, Config @ConfigEntry.Gui.Tooltip private double loreChance = HexLootHandler.DEFAULT_LORE_CHANCE; + @ConfigEntry.Gui.Tooltip + private List cypherInjectionsRaw = HexLootHandler.DEFAULT_CYPHER_INJECTS + .stream() + .map(ResourceLocation::toString) + .toList(); + @ConfigEntry.Gui.Excluded + private transient List cypherInjections; + @ConfigEntry.Gui.Tooltip + private double cypherChance = HexLootHandler.DEFAULT_CYPHER_CHANCE; + @ConfigEntry.Gui.Tooltip + private List> lootHexList = HexLootHandler.DEFAULT_LOOT_HEXES; + @Override public void validatePostLoad() throws ValidationException { @@ -239,6 +252,18 @@ public void validatePostLoad() throws ValidationException { } this.loreChance = Mth.clamp(this.loreChance, 0.0, 1.0); + + this.cypherInjections = new ArrayList<>(); + try { + for (var table : this.cypherInjectionsRaw) { + ResourceLocation loc = new ResourceLocation(table); + this.cypherInjections.add(loc); + } + } catch (Exception e) { + throw new ValidationException("Bad parsing of cypher injects", e); + } + + this.cypherChance = Mth.clamp(this.cypherChance, 0.0, 1.0); } @Override @@ -292,8 +317,21 @@ public boolean shouldInjectLore(ResourceLocation lootTable) { return anyMatchResLoc(this.loreInjections, lootTable); } - public double getLoreChance() { + public double loreChance() { return loreChance; } + + public boolean shouldInjectCyphers(ResourceLocation lootTable) { + return anyMatchResLoc(this.cypherInjections, lootTable); + } + + public double cypherChance() { + return cypherChance; + } + + public List getRandomLootHex(RandomSource rand) { + var index = rand.nextInt(this.lootHexList.size()); + return this.lootHexList.get(index); + } } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java index 5aadc8df41..75b4410e43 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.loot.AddPerWorldPatternToScrollFunc; +import at.petrak.hexcasting.common.loot.AddHexToAncientCypherFunc; import at.petrak.hexcasting.fabric.FabricHexInitializer; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Blocks; @@ -33,7 +34,11 @@ public static void lootLoad(ResourceLocation id, Consumer addP } if (FabricHexInitializer.CONFIG.server.shouldInjectLore(id)) { - addPool.accept(makeLoreAddPool(FabricHexInitializer.CONFIG.server.getLoreChance())); + addPool.accept(makeLoreAddPool(FabricHexInitializer.CONFIG.server.loreChance())); + } + + if (FabricHexInitializer.CONFIG.server.shouldInjectCyphers(id)) { + addPool.accept(makeCypherAddPool(FabricHexInitializer.CONFIG.server.cypherChance())); } } @@ -56,4 +61,12 @@ private static LootPool.Builder makeLoreAddPool(double chance) { .setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(HexItems.LORE_FRAGMENT)); } + + private static LootPool.Builder makeCypherAddPool(double chance) { + return LootPool.lootPool() + .when(LootItemRandomChanceCondition.randomChance((float) chance)) + .setRolls(ConstantValue.exactly(1)) + .add(LootItem.lootTableItem(HexItems.ANCIENT_CYPHER)) + .apply(() -> new AddHexToAncientCypherFunc(new LootItemCondition[0])); + } } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index bf219312fc..95f4635572 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -1,10 +1,12 @@ package at.petrak.hexcasting.forge; import at.petrak.hexcasting.api.mod.HexConfig; +import at.petrak.hexcasting.common.loot.HexLootHandler; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraft.util.RandomSource; import java.util.List; @@ -148,6 +150,7 @@ public static class Server implements HexConfig.ServerConfigAccess { private static ForgeConfigSpec.ConfigValue> fewScrollTables; private static ForgeConfigSpec.ConfigValue> someScrollTables; private static ForgeConfigSpec.ConfigValue> manyScrollTables; + private static ForgeConfigSpec.ConfigValue>> lootHexList; public Server(ForgeConfigSpec.Builder builder) { @@ -171,6 +174,11 @@ public Server(ForgeConfigSpec.Builder builder) { .defineList("circleActionDenyList", List.of(), Server::isValidReslocArg); builder.pop(); + lootHexList = builder.comment( + "List of preset hexes found in loot cyphers. First element is the name, other elements are the patterns." + + "The default names use hardcoded translation keys, but custom ones should be human-readable.") + .defineList("lootHexList", HexLootHandler.DEFAULT_LOOT_HEXES, Server::isValidReslocArg); + actionDenyList = builder.comment( "Resource locations of disallowed actions. Trying to cast one of these will result in a mishap.") .defineList("actionDenyList", List.of(), Server::isValidReslocArg); @@ -227,6 +235,12 @@ public boolean trueNameHasAmbit() { return doesTrueNameHaveAmbit.get(); } + @Override + public List getRandomLootHex(RandomSource rand) { + var index = rand.nextInt(lootHexList.get().size()); + return lootHexList.get().get(index); + } + private static boolean isValidReslocArg(Object o) { return o instanceof String s && ResourceLocation.isValidResourceLocation(s); } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java b/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java index d1a85e93e7..26840ca6b6 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java @@ -5,7 +5,9 @@ import at.petrak.hexcasting.forge.loot.ForgeHexAmethystLootMod; import at.petrak.hexcasting.forge.loot.ForgeHexLoreLootMod; import at.petrak.hexcasting.forge.loot.ForgeHexScrollLootMod; +import at.petrak.hexcasting.forge.loot.ForgeHexCypherLootMod; import net.minecraft.data.PackOutput; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraftforge.common.data.GlobalLootModifierProvider; @@ -28,13 +30,19 @@ protected void start() { for (var injection : HexLootHandler.DEFAULT_LORE_INJECTS) { var name = "lore/%s/%s".formatted(injection.getNamespace(), injection.getPath()); add(name, new ForgeHexLoreLootMod(new LootItemCondition[]{ - LootTableIdCondition.builder(injection).build(), + LootTableIdCondition.builder(injection).build() }, HexLootHandler.DEFAULT_LORE_CHANCE)); } + for (var injection : HexLootHandler.DEFAULT_CYPHER_INJECTS) { + var name = "cypher/%s/%s".formatted(injection.getNamespace(), injection.getPath()); + add(name, new ForgeHexCypherLootMod(new LootItemCondition[]{ + LootTableIdCondition.builder(injection).build() + }, HexLootHandler.DEFAULT_CYPHER_CHANCE)); + } + add("amethyst_cluster", new ForgeHexAmethystLootMod(new LootItemCondition[]{ LootTableIdCondition.builder(Blocks.AMETHYST_CLUSTER.getLootTable()).build() }, HexLootHandler.DEFAULT_SHARD_MODIFICATION)); - } } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java b/Forge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java index a967358df2..7581f6aaab 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.forge.loot.ForgeHexAmethystLootMod; import at.petrak.hexcasting.forge.loot.ForgeHexLoreLootMod; import at.petrak.hexcasting.forge.loot.ForgeHexScrollLootMod; +import at.petrak.hexcasting.forge.loot.ForgeHexCypherLootMod; import com.mojang.serialization.Codec; import net.minecraftforge.common.loot.IGlobalLootModifier; import net.minecraftforge.registries.DeferredRegister; @@ -18,6 +19,8 @@ public class ForgeHexLootMods { "inject_scrolls", ForgeHexScrollLootMod.CODEC); public static final RegistryObject> INJECT_LORE = REGISTRY.register( "inject_lore", ForgeHexLoreLootMod.CODEC); + public static final RegistryObject> INJECT_CYPHERS = REGISTRY.register( + "inject_cyphers", ForgeHexCypherLootMod.CODEC); public static final RegistryObject> AMETHYST = REGISTRY.register( "amethyst_cluster", ForgeHexAmethystLootMod.CODEC); } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java b/Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java new file mode 100644 index 0000000000..385bf4a64e --- /dev/null +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java @@ -0,0 +1,48 @@ +package at.petrak.hexcasting.forge.loot; + +import at.petrak.hexcasting.common.lib.HexItems; +import at.petrak.hexcasting.common.loot.AddHexToAncientCypherFunc; +import at.petrak.hexcasting.forge.lib.ForgeHexLootMods; +import com.google.common.base.Suppliers; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import net.minecraftforge.common.loot.LootModifier; +import org.jetbrains.annotations.NotNull; + +import java.util.function.Supplier; + +public class ForgeHexCypherLootMod extends LootModifier { + public static final Supplier> CODEC = + Suppliers.memoize(() -> RecordCodecBuilder.create( + inst -> codecStart(inst).and( + Codec.DOUBLE.fieldOf("chance").forGetter(it -> it.chance) + ).apply(inst, ForgeHexCypherLootMod::new) + )); + + public final double chance; + + public ForgeHexCypherLootMod(LootItemCondition[] conditionsIn, double chance) { + super(conditionsIn); + this.chance = chance; + } + + @Override + protected @NotNull ObjectArrayList doApply(ObjectArrayList generatedLoot, + LootContext context) { + if (context.getRandom().nextDouble() < this.chance) { + var newStack = new ItemStack(HexItems.ANCIENT_CYPHER); + AddHexToAncientCypherFunc.doStatic(newStack, context.getRandom()); + generatedLoot.add(newStack); + } + return generatedLoot; + } + + @Override + public Codec codec() { + return ForgeHexLootMods.INJECT_CYPHERS.get(); + } +} From 85aa76305335d9971ac88c2aa543cde4cd52e42b Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 15 Jan 2025 13:56:00 -0500 Subject: [PATCH 37/81] Assorted lang --- .../hexcasting/lang/en_us.flatten.json5 | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 9e82f1cfd9..a72b00f14f 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -46,6 +46,11 @@ "": "Focus", sealed: "Sealed Focus", }, + + ancient_cypher: { + "": "Ancient Cypher", + preset: "Ancient Cypher: %s", + }, thought_knot: "Thought-Knot", spellbook: "Spellbook", @@ -376,6 +381,26 @@ "": "Scroll Injection Weights", "@Tooltip": "Maps the names of loot tables to the amount of per-world patterns on scrolls should go in them. There's about a 50% chance to get any scrolls in a given chest marked here; once that is met, between 1 and that many scrolls are generated.", }, + loreInjectionsRaw: { + "": "Lore Injection Sites", + "@Tooltip": "Lists the loot tables that lore fragments should be added to.", + }, + loreChance: { + "": "Lore Fragment Chance", + "@Tooltip": "The chance for lore fragments to appear in any of the above loot tables.", + }, + cypherInjectionsRaw: { + "": "Ancient Cypher Injection Sites", + "@Tooltip": "Lists the loot tables that ancient cyphers should be added to.", + }, + cypherChance: { + "": "Ancient Cypher Chance", + "@Tooltip": "The chance for ancient cyphers to appear in any of the above loot tables.", + }, + lootHexList: { + "": "Preset Loot Hex List", + "@Tooltip": "Lists the preset hexes that can be found in ancient cyphers. The first item in each list is the name of the hex, and the others are the patterns. The name is treated as a translation key if possible, but if you add your own they should be human-readable.", + }, amethystShardModification: { "": "Amethyst Shard Drop Rate Change", "@Tooltip": "How much the number of amethyst shards dropped from clusters is increased/decreased.", @@ -499,6 +524,25 @@ infinite_media: "Infinite", }, + loot_hex: { + "shatter": "Shatter", + "kindle": "Kindle", + "illuminate": "Illuminate", + "growth": "Growth", + "lunge": "Lunge", + "sidestep": "Sidestep", + "ascend": "Ascend", + "blink": "Blink", + "blastoff": "Blastoff", + "radar": "Radar", + "beckon": "Beckon", + "detonate": "Detonate", + "shockwave": "Shockwave", + "heat_wave": "Heat Wave", + "wither_wave": "Wither Wave", + "flight_zone": "Flight Zone", + }, + // TODO: post-eigengrau make these less anticlimactic message: { cant_overcast: "That Hex needed more media than I had... I should double-check my math.", @@ -562,6 +606,7 @@ media: "%d dust", media_amount: "Contains: %s (%s)", "media_amount.advanced": "Contains: %s/%s (%s)", + stored_hex: "Hex: ", list_contents: "[%s]", null_iota: "Null", @@ -1164,6 +1209,7 @@ // why is this called "hexcasting"? hexcasting: "Casting Items", + ancient_cyphers: "Ancient Cyphers", phials: "Phials of Media", potions: "Hex Potions", pigments: "Pigments", @@ -1480,7 +1526,7 @@ "2": "Like a $(l:items/focus)$(item)Focus/$, there exists a simple method to prevent accidental overwriting. Crafting it with a $(item)Honeycomb/$ will lacquer the current page, preventing $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$ from modifying its contents. Also like a $(l:items/focus)$(item)Focus/$, using $(l:patterns/spells/hexcasting#hexcasting:erase)$(action)Erase Item/$ will remove the lacquer along with the page's contents.$(br2)I can also name each page individually in an anvil. Naming it will change only the name of the currently selected page, for easy browsing.", "crafting.desc": "$(italic)Wizards love words. Most of them read a great deal, and indeed one strong sign of a potential wizard is the inability to get to sleep without reading something first.", }, - + scroll: { "1": "A $(l:items/scroll)$(item)Scroll/$ is a convenient method of sharing a pattern with others. I can copy a pattern onto one with $(l:patterns/readwrite#hexcasting:write)$(action)Scribe's Gambit/$, after which it will display in a tooltip.$(br2)I can also place them on the wall as decoration or edification, like a painting, in sizes from 1x1 to 3x3 blocks. Using $(l:items/amethyst)$(item)Amethyst Dust/$ on such a scroll will have it display the stroke order.", "2": "In addition, I can also find so-called $(l:items/scroll)$(item)Ancient Scrolls/$ in the dungeons and strongholds of the world. These contain the stroke order of $(thing)Great Spells/$, powerful magicks rumored to be too powerful for the hands and minds of mortals...$(br2)If those \"mortals\" couldn't cast them, I'm not sure they deserve to know them.", @@ -1503,6 +1549,11 @@ "5": "Each infusion spell requires an entity and a list of patterns on the stack. The entity must be a _media-holding item entity (i.e. $(l:items/amethyst)$(item)amethyst/$ crystals, dropped on the ground); the entity is consumed and forms the battery.$(br2)Usefully, it seems that the _media in the battery is not consumed in chunks as it is when casting with a $(l:items/staff)$(item)Staff/$-- rather, the _media \"melts down\" into one continuous pool. Thus, if I store a _Hex that only costs one $(l:items/amethyst)$(item)Amethyst Dust/$'s worth of media, a $(l:items/amethyst)$(item)Charged Crystal/$ used as the battery will allow me to cast it 10 times.", "crafting.desc": "$(italic)We have a saying in our field: \"Magic isn't\". It doesn't \"just work,\" it doesn't respond to your thoughts, you can't throw fireballs or create a roast dinner from thin air or turn a bunch of muggers into frogs and snails./$", }, + + ancient_cyphers: { + "1": "While adventuring, I've come across what appear to be $(l:items/hexcasting)$(item)Cyphers/$ created by the Hexcasters of the ancient past. These $(item)Ancient Cyphers/$ work just like the ones I can craft: they can't be recharged, and will break when their reserve of _Media runs out. However, unlike my own $(l:items/hexcasting)$(item)Cyphers/$, their decayed structure allows me to glimpse the _Hex stored within.", + "2": "These may be useful for learning new techniques - who better to teach me than ancient masters of the art?$(br2)Alternatively, I could erase the contents of one and store my own _Hex inside, creating a casting item that clearly displays its own function." + }, phials: { "1": "I find it quite ... irritating, how Nature refuses to give me change for my work. If all I have on hand is $(l:items/amethyst)$(item)Charged Amethyst/$, even the tiniest $(l:patterns/basics#hexcasting:raycast)$(action)Archer's Distillation/$ will consume the entire crystal, wasting the remaining _media.$(br2)Fortunately, it seems I've found a way to somewhat allay this problem.", From cd3495b74ac44ec4f2a7997777fd0970bd682d1c Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Wed, 15 Jan 2025 13:56:12 -0500 Subject: [PATCH 38/81] Datagen --- .../8f7cd5c924d3264b7777ef1696459761f9a70902 | 18 +- .../models/item/ancient_cypher.json | 120 +++++ .../models/item/ancient_cypher_0_filled.json | 7 + .../models/item/ancient_cypher_1.json | 6 + .../models/item/ancient_cypher_1_filled.json | 7 + .../models/item/ancient_cypher_2.json | 6 + .../models/item/ancient_cypher_2_filled.json | 7 + .../models/item/ancient_cypher_3.json | 6 + .../models/item/ancient_cypher_3_filled.json | 7 + .../models/item/ancient_cypher_4.json | 6 + .../models/item/ancient_cypher_4_filled.json | 7 + .../models/item/ancient_cypher_5.json | 6 + .../models/item/ancient_cypher_5_filled.json | 7 + .../models/item/ancient_cypher_6.json | 6 + .../models/item/ancient_cypher_6_filled.json | 7 + .../models/item/ancient_cypher_7.json | 6 + .../models/item/ancient_cypher_7_filled.json | 7 + .../en_us/entries/items/ancient_cyphers.json | 18 + .../19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 | 116 ++--- .../2ba8da2cf2d44ff18dc72cc891b094eca6836a5c | 50 +- .../3cb4ab563deee432e7d307024048f57946bafb1c | 8 +- .../812fdb58b7018b2d5c5af7da57a2b1857fa66794 | 68 +-- .../c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b | 440 +++++++++--------- .../d4b3e6634c30118e1127c02b727ea285752e5aac | 13 +- .../loot_modifiers/global_loot_modifiers.json | 9 + .../minecraft/chests/abandoned_mineshaft.json | 10 + .../cypher/minecraft/chests/ancient_city.json | 10 + .../minecraft/chests/desert_pyramid.json | 10 + .../minecraft/chests/jungle_temple.json | 10 + .../minecraft/chests/nether_bridge.json | 10 + .../minecraft/chests/simple_dungeon.json | 10 + .../minecraft/chests/stronghold_corridor.json | 10 + 32 files changed, 684 insertions(+), 344 deletions(-) create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json create mode 100644 Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json create mode 100644 Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json create mode 100644 Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json create mode 100644 Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json create mode 100644 Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json create mode 100644 Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json create mode 100644 Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json create mode 100644 Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json create mode 100644 Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json diff --git a/Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 b/Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 index 8cf64135d8..65cd7f4b28 100644 --- a/Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 +++ b/Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 @@ -1,4 +1,4 @@ -// 1.20.1 2023-12-24T17:59:13.7584156 Item Models: hexcasting +// 1.20.1 2024-12-10T14:26:44.916295 Item Models: hexcasting 2fc68dcd6d73da3deaa6a33240dd9160a2b79592 assets/hexcasting/models/block/deco/quenched_allay_bricks_0.json d59af7a48b20b210240b26115fb172d6202f9254 assets/hexcasting/models/block/deco/quenched_allay_bricks_1.json a62eeebbca2d145c22f25725bd848ed4d673cefa assets/hexcasting/models/block/deco/quenched_allay_bricks_2.json @@ -19,6 +19,22 @@ f2156b3a7041cf99891b528393db64c6b9ca1a4f assets/hexcasting/models/item/abacus.js 19730853397b109cfedd0c3bbda83d5de6cd15b9 assets/hexcasting/models/item/akashic_record.json 8c735feff09d46d00ed681311f46f61a50cfdc9b assets/hexcasting/models/item/amethyst_dust.json fbb8706993fbc3246c56b9f3eb274ff8968b70f8 assets/hexcasting/models/item/amethyst_pillar.json +533a859174052a332de069b2ffeaf0106d132b9a assets/hexcasting/models/item/ancient_cypher.json +71a7968e43fbb872ee52315a3ee738d0b3fd1a69 assets/hexcasting/models/item/ancient_cypher_0_filled.json +0f0c627d7ed0e8a7e3666ca80ddc13b280d6ce9f assets/hexcasting/models/item/ancient_cypher_1.json +097b8ecfb34df710ca4b396d3a5df7722ecc3596 assets/hexcasting/models/item/ancient_cypher_1_filled.json +9fdde927e7e8b06221aef34a6a6b22d0b790f297 assets/hexcasting/models/item/ancient_cypher_2.json +93257ad393b751931539a5641d4430a4631e95f9 assets/hexcasting/models/item/ancient_cypher_2_filled.json +4af6234e24031ee0989282c8435fe07e85b02771 assets/hexcasting/models/item/ancient_cypher_3.json +41760f3c89d8dc94c515b0ab8220ecf996710a3c assets/hexcasting/models/item/ancient_cypher_3_filled.json +4df83ae775400ca2d480bfb3621abcf58d4d7352 assets/hexcasting/models/item/ancient_cypher_4.json +d21eb7093c0231015808a8b51b27857da1748431 assets/hexcasting/models/item/ancient_cypher_4_filled.json +e2b4e2ac4ad4fa4b490e1774a565a26fb840c474 assets/hexcasting/models/item/ancient_cypher_5.json +4555e5de80047ffa4e72a4a98eb51437a95e7291 assets/hexcasting/models/item/ancient_cypher_5_filled.json +420840b5761fcddbdd10186f3127bc7589badc46 assets/hexcasting/models/item/ancient_cypher_6.json +55c08581a2e8c7134d63b38226bddafff0fba3ae assets/hexcasting/models/item/ancient_cypher_6_filled.json +2731192f0c7a9a8d45ba4fcd8d1de60bade0b49e assets/hexcasting/models/item/ancient_cypher_7.json +7ba3015d79601f1c8238dbac4a45e525e3589f16 assets/hexcasting/models/item/ancient_cypher_7_filled.json 87e7ee44cdd0808a3dd72babfd1db716df2bcdfe assets/hexcasting/models/item/artifact.json 1cd1b4d002d1a9a044ceab7cca842e4a2b7bd2f4 assets/hexcasting/models/item/artifact_0_filled.json 4709e65d8e74cf45b3ba014bdf70373728cccc78 assets/hexcasting/models/item/artifact_1.json diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json new file mode 100644 index 0000000000..ffc8b5e1cc --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json @@ -0,0 +1,120 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/ancient_cypher", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_0_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_1", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_1_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_2", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_2_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_3", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_3_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_4", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_4_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_5", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_5_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_6", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_6_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_7", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_7_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 7.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/cad/0_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json new file mode 100644 index 0000000000..b38ad18d6d --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_ancient_cypher", + "layer1": "hexcasting:item/cad/0_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json new file mode 100644 index 0000000000..e8b7b12d55 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json new file mode 100644 index 0000000000..856b0a26d7 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_ancient_cypher", + "layer1": "hexcasting:item/cad/1_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json new file mode 100644 index 0000000000..3badfcdd0f --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json new file mode 100644 index 0000000000..effb9e0198 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_ancient_cypher", + "layer1": "hexcasting:item/cad/2_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json new file mode 100644 index 0000000000..98aabd91e8 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json new file mode 100644 index 0000000000..2f19e9feea --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_ancient_cypher", + "layer1": "hexcasting:item/cad/3_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json new file mode 100644 index 0000000000..93318f7bc4 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json new file mode 100644 index 0000000000..081cfd65c4 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_ancient_cypher", + "layer1": "hexcasting:item/cad/4_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json new file mode 100644 index 0000000000..9d247cdd23 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json new file mode 100644 index 0000000000..0ed6accc2a --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_ancient_cypher", + "layer1": "hexcasting:item/cad/5_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json new file mode 100644 index 0000000000..bf9c9fe505 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json new file mode 100644 index 0000000000..199292d90f --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_ancient_cypher", + "layer1": "hexcasting:item/cad/6_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json new file mode 100644 index 0000000000..56e0653080 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_ancient_cypher" + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json new file mode 100644 index 0000000000..b408892c14 --- /dev/null +++ b/Common/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_ancient_cypher", + "layer1": "hexcasting:item/cad/7_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json new file mode 100644 index 0000000000..e3fc78bda9 --- /dev/null +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json @@ -0,0 +1,18 @@ +{ + "name": "hexcasting.entry.ancient_cyphers", + "category": "hexcasting:items", + "icon": "hexcasting:ancient_cypher", + "sortnum": 7, + "advancement": "hexcasting:root", + "pages": [ + { + "type": "patchouli:text", + "text": "hexcasting.page.ancient_cyphers.1" + }, + { + "type": "patchouli:spotlight", + "text": "hexcasting.page.ancient_cyphers.2", + "item": "hexcasting:ancient_cypher{variant:0},hexcasting:ancient_cypher{variant:1},hexcasting:ancient_cypher{variant:2},hexcasting:ancient_cypher{variant:3},hexcasting:ancient_cypher{variant:4},hexcasting:ancient_cypher{variant:5},hexcasting:ancient_cypher{variant:6},hexcasting:ancient_cypher{variant:7}" + } + ] + } \ No newline at end of file diff --git a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 b/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 index 6b6009aeea..a81ebceb63 100644 --- a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 +++ b/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 @@ -1,58 +1,58 @@ -// 1.20.1 2024-11-19T11:30:28.198417333 Hex Casting/Loot Tables -1dd4268edf7d6fa247013ab45541c7bfb915eef8 data/hexcasting/loot_tables/blocks/amethyst_bricks_small.json -601384d888edab27efe4a33027bb557eb7cb6ca2 data/hexcasting/loot_tables/blocks/edified_log_purple.json -2c9af74a82ca462e5986354966d5a0a1fd5a2083 data/hexcasting/loot_tables/blocks/slate_tiles.json -7c9c94d5b6b570d25eff32d4fa2ecc1e842e5231 data/hexcasting/loot_tables/blocks/quenched_allay_tiles.json -ecaeb4d5703a7aa206627ed38ee71aeb7e93d688 data/hexcasting/loot_tables/blocks/impetus/rightclick.json -a4e0194d8966a24531e43e04437cdb2a96456898 data/hexcasting/loot_tables/blocks/edified_tile.json -847bc3ead8a88a8f210a24e7732c28d50aa2f5dc data/hexcasting/loot_tables/blocks/edified_planks.json -92331eb19422730ffda0a3e52427a75aa1f7aff2 data/hexcasting/loot_tables/blocks/ancient_scroll_paper_lantern.json -4efd95d408d050c36ff21b18f3c37116491fef92 data/hexcasting/loot_tables/blocks/directrix/redstone.json -8c6c0486170537d73b923a2b9f83722107fc8716 data/hexcasting/loot_tables/blocks/edified_log_aventurine.json -ab86e126a704550d3f21c0b43f99fdc2665e4b09 data/hexcasting/loot_tables/blocks/slate_amethyst_tiles.json -7123b1a0469d7bd5bf8a2772182d222bf354df1a data/hexcasting/loot_tables/blocks/slate_bricks_small.json -b6c23fdde4f2c22c81f008604d5ff1c32ca8eb61 data/hexcasting/loot_tables/blocks/amethyst_tiles.json -b706c8a064f717c57104c48ea42aa860b45cf7a4 data/hexcasting/loot_tables/blocks/amethyst_dust_block.json -6eecc98b606d7ea5ec6f4c1fa4f63f7c1eba9223 data/hexcasting/loot_tables/blocks/slate_amethyst_bricks.json -b19ac49146149555038e6d2e06200d514df1ef43 data/hexcasting/loot_tables/blocks/akashic_bookshelf.json -9ff760d5db5628328ea9274c98e18a08f1ab983e data/hexcasting/loot_tables/blocks/slate_block.json -2ab674e834184b4e17dc002556d4473cac137445 data/hexcasting/loot_tables/blocks/edified_slab.json -df5496da8e48b61a171bc7a3936495c016cc002e data/hexcasting/loot_tables/blocks/directrix/empty.json -49940d1cb2599212e2837d7ed66c6c66e54f80f8 data/hexcasting/loot_tables/blocks/akashic_record.json -c81a5cb81141ab1fe09dd5dd3a0968b69dfffbd7 data/hexcasting/loot_tables/blocks/stripped_edified_log.json -10cb1b94596ac7131efe3bd5c36c1543ddba9302 data/hexcasting/loot_tables/blocks/impetus/redstone.json -499af9f15cf0a7f16fd2939e5d3af60a8089cc3e data/hexcasting/loot_tables/blocks/slate_bricks.json -147e0739a712a9050856cebcad1757b3f418f647 data/hexcasting/loot_tables/blocks/edified_trapdoor.json -2ad288784b0dc106ace2e6e0a40669f83476c414 data/hexcasting/loot_tables/blocks/slate.json -6c35afda4ca349f3506fe08f86f0afe58a6f2c44 data/hexcasting/loot_tables/blocks/quenched_allay.json -e6ff979aa47877c1b807075c448defd249cd3484 data/hexcasting/loot_tables/blocks/slate_amethyst_pillar.json -55f265961463a89c243ec8ac1970c70185f064a6 data/hexcasting/loot_tables/blocks/edified_button.json -c15d3ced89c882dfe552f84435fcdd560b729567 data/hexcasting/loot_tables/blocks/scroll_paper.json -1c6b077aae560e780be29e74ddcd4b0ca10ce3cf data/hexcasting/loot_tables/blocks/impetus/empty.json -dc4c6d270b8e93d05ac8ddeb1b9dd1d64828ac5d data/hexcasting/loot_tables/blocks/stripped_edified_wood.json -a62ffbcec2aa40172e05cd9fcd8e70e295d008e9 data/hexcasting/loot_tables/blocks/edified_fence_gate.json -cc7313cc33609fe1120baa7b4db631eaa29fbba1 data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json -6920654f50532b5e557646e34edc4872339eb79f data/hexcasting/loot_tables/blocks/edified_log_amethyst.json -849afa706e7479d1c11bb40ae223ae5833e71286 data/hexcasting/loot_tables/blocks/scroll_paper_lantern.json -9905b767be7849e02a8e4ec4170af1bdde4e7fab data/hexcasting/loot_tables/blocks/edified_stairs.json -92528799c8ee13ff26c3c505e4dfb286c30f97c7 data/hexcasting/loot_tables/blocks/akashic_connector.json -45dc91d820caa5c421fe6f2afc7f71e45d6acd4d data/hexcasting/loot_tables/blocks/slate_pillar.json -1a1236e54c24b5aeff05919c73c76151da2cf115 data/hexcasting/loot_tables/blocks/amethyst_sconce.json -74159c21634679a6ab1dde1c181433db8b31c6ae data/hexcasting/loot_tables/blocks/edified_log_citrine.json -30f06db8c1ea74c9f4d95474e412336d065ac888 data/hexcasting/loot_tables/blocks/edified_door.json -95be0cf7f277257671631929462131b6d611119a data/hexcasting/loot_tables/inject/amethyst_cluster.json -bedbc2bd04f79372aedea64214ba2ea49cde9640 data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json -44658abcf122575878834d276ebcf5d8a6b7b398 data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json -cf6ff1ed1ee6fdbb05af16468a0a0ced79ac334e data/hexcasting/loot_tables/blocks/amethyst_bricks.json -45ae0ec668a07aa5b33d491377b2978f69f9f019 data/hexcasting/loot_tables/blocks/edified_panel.json -5f8d09e8c759d05cf9c2265ae28ea942cfbbe2be data/hexcasting/loot_tables/blocks/edified_pressure_plate.json -c426245d51f1e0fa0db7c4bfb454284d75506c9c data/hexcasting/loot_tables/blocks/quenched_allay_bricks.json -0b734693c926045b60fb515814b7a6695d0295fc data/hexcasting/loot_tables/blocks/impetus/look.json -d16fa9e366d48646686470c2d1f9bda4db3a1afa data/hexcasting/loot_tables/blocks/ancient_scroll_paper.json -2ac70e3c3600c88b2544d9755fc634216a7a523c data/hexcasting/loot_tables/blocks/edified_wood.json -509ecbb9731e75b63638c6012b2f986f131fd42f data/hexcasting/loot_tables/blocks/slate_amethyst_bricks_small.json -2902c4dae60875a1b2daf0a948a49a3419d8ec9d data/hexcasting/loot_tables/blocks/edified_log.json -434c2a6d2645e56e9a6ca56249ffa84645558e3b data/hexcasting/loot_tables/blocks/quenched_allay_bricks_small.json -65fe724d4c4ba8b0ab7d7a11bf37687413d9119d data/hexcasting/loot_tables/blocks/edified_fence.json -f1145860d80ff053970b1ad4f3b2f5d9f28e7c73 data/hexcasting/loot_tables/blocks/directrix/boolean.json -8ea8fd68719a960c2e132df441564a70c0e376a8 data/hexcasting/loot_tables/blocks/amethyst_pillar.json +// 1.20.1 2024-12-12T01:28:26.4771358 Hex Casting/Loot Tables +4efd95d408d050c36ff21b18f3c37116491fef92 data\hexcasting\loot_tables\blocks\directrix\redstone.json +c81a5cb81141ab1fe09dd5dd3a0968b69dfffbd7 data\hexcasting\loot_tables\blocks\stripped_edified_log.json +a62ffbcec2aa40172e05cd9fcd8e70e295d008e9 data\hexcasting\loot_tables\blocks\edified_fence_gate.json +8ea8fd68719a960c2e132df441564a70c0e376a8 data\hexcasting\loot_tables\blocks\amethyst_pillar.json +9905b767be7849e02a8e4ec4170af1bdde4e7fab data\hexcasting\loot_tables\blocks\edified_stairs.json +0b734693c926045b60fb515814b7a6695d0295fc data\hexcasting\loot_tables\blocks\impetus\look.json +ab86e126a704550d3f21c0b43f99fdc2665e4b09 data\hexcasting\loot_tables\blocks\slate_amethyst_tiles.json +2c9af74a82ca462e5986354966d5a0a1fd5a2083 data\hexcasting\loot_tables\blocks\slate_tiles.json +bedbc2bd04f79372aedea64214ba2ea49cde9640 data\hexcasting\loot_tables\blocks\amethyst_edified_leaves.json +45dc91d820caa5c421fe6f2afc7f71e45d6acd4d data\hexcasting\loot_tables\blocks\slate_pillar.json +6c35afda4ca349f3506fe08f86f0afe58a6f2c44 data\hexcasting\loot_tables\blocks\quenched_allay.json +2902c4dae60875a1b2daf0a948a49a3419d8ec9d data\hexcasting\loot_tables\blocks\edified_log.json +95be0cf7f277257671631929462131b6d611119a data\hexcasting\loot_tables\inject\amethyst_cluster.json +b19ac49146149555038e6d2e06200d514df1ef43 data\hexcasting\loot_tables\blocks\akashic_bookshelf.json +c426245d51f1e0fa0db7c4bfb454284d75506c9c data\hexcasting\loot_tables\blocks\quenched_allay_bricks.json +6920654f50532b5e557646e34edc4872339eb79f data\hexcasting\loot_tables\blocks\edified_log_amethyst.json +6eecc98b606d7ea5ec6f4c1fa4f63f7c1eba9223 data\hexcasting\loot_tables\blocks\slate_amethyst_bricks.json +2ad288784b0dc106ace2e6e0a40669f83476c414 data\hexcasting\loot_tables\blocks\slate.json +49940d1cb2599212e2837d7ed66c6c66e54f80f8 data\hexcasting\loot_tables\blocks\akashic_record.json +d16fa9e366d48646686470c2d1f9bda4db3a1afa data\hexcasting\loot_tables\blocks\ancient_scroll_paper.json +cc7313cc33609fe1120baa7b4db631eaa29fbba1 data\hexcasting\loot_tables\blocks\citrine_edified_leaves.json +df5496da8e48b61a171bc7a3936495c016cc002e data\hexcasting\loot_tables\blocks\directrix\empty.json +92528799c8ee13ff26c3c505e4dfb286c30f97c7 data\hexcasting\loot_tables\blocks\akashic_connector.json +434c2a6d2645e56e9a6ca56249ffa84645558e3b data\hexcasting\loot_tables\blocks\quenched_allay_bricks_small.json +601384d888edab27efe4a33027bb557eb7cb6ca2 data\hexcasting\loot_tables\blocks\edified_log_purple.json +45ae0ec668a07aa5b33d491377b2978f69f9f019 data\hexcasting\loot_tables\blocks\edified_panel.json +55f265961463a89c243ec8ac1970c70185f064a6 data\hexcasting\loot_tables\blocks\edified_button.json +7123b1a0469d7bd5bf8a2772182d222bf354df1a data\hexcasting\loot_tables\blocks\slate_bricks_small.json +509ecbb9731e75b63638c6012b2f986f131fd42f data\hexcasting\loot_tables\blocks\slate_amethyst_bricks_small.json +74159c21634679a6ab1dde1c181433db8b31c6ae data\hexcasting\loot_tables\blocks\edified_log_citrine.json +1dd4268edf7d6fa247013ab45541c7bfb915eef8 data\hexcasting\loot_tables\blocks\amethyst_bricks_small.json +499af9f15cf0a7f16fd2939e5d3af60a8089cc3e data\hexcasting\loot_tables\blocks\slate_bricks.json +30f06db8c1ea74c9f4d95474e412336d065ac888 data\hexcasting\loot_tables\blocks\edified_door.json +7c9c94d5b6b570d25eff32d4fa2ecc1e842e5231 data\hexcasting\loot_tables\blocks\quenched_allay_tiles.json +65fe724d4c4ba8b0ab7d7a11bf37687413d9119d data\hexcasting\loot_tables\blocks\edified_fence.json +cf6ff1ed1ee6fdbb05af16468a0a0ced79ac334e data\hexcasting\loot_tables\blocks\amethyst_bricks.json +8c6c0486170537d73b923a2b9f83722107fc8716 data\hexcasting\loot_tables\blocks\edified_log_aventurine.json +dc4c6d270b8e93d05ac8ddeb1b9dd1d64828ac5d data\hexcasting\loot_tables\blocks\stripped_edified_wood.json +2ab674e834184b4e17dc002556d4473cac137445 data\hexcasting\loot_tables\blocks\edified_slab.json +e6ff979aa47877c1b807075c448defd249cd3484 data\hexcasting\loot_tables\blocks\slate_amethyst_pillar.json +9ff760d5db5628328ea9274c98e18a08f1ab983e data\hexcasting\loot_tables\blocks\slate_block.json +f1145860d80ff053970b1ad4f3b2f5d9f28e7c73 data\hexcasting\loot_tables\blocks\directrix\boolean.json +44658abcf122575878834d276ebcf5d8a6b7b398 data\hexcasting\loot_tables\blocks\aventurine_edified_leaves.json +849afa706e7479d1c11bb40ae223ae5833e71286 data\hexcasting\loot_tables\blocks\scroll_paper_lantern.json +b6c23fdde4f2c22c81f008604d5ff1c32ca8eb61 data\hexcasting\loot_tables\blocks\amethyst_tiles.json +10cb1b94596ac7131efe3bd5c36c1543ddba9302 data\hexcasting\loot_tables\blocks\impetus\redstone.json +147e0739a712a9050856cebcad1757b3f418f647 data\hexcasting\loot_tables\blocks\edified_trapdoor.json +5f8d09e8c759d05cf9c2265ae28ea942cfbbe2be data\hexcasting\loot_tables\blocks\edified_pressure_plate.json +ecaeb4d5703a7aa206627ed38ee71aeb7e93d688 data\hexcasting\loot_tables\blocks\impetus\rightclick.json +a4e0194d8966a24531e43e04437cdb2a96456898 data\hexcasting\loot_tables\blocks\edified_tile.json +1a1236e54c24b5aeff05919c73c76151da2cf115 data\hexcasting\loot_tables\blocks\amethyst_sconce.json +c15d3ced89c882dfe552f84435fcdd560b729567 data\hexcasting\loot_tables\blocks\scroll_paper.json +92331eb19422730ffda0a3e52427a75aa1f7aff2 data\hexcasting\loot_tables\blocks\ancient_scroll_paper_lantern.json +b706c8a064f717c57104c48ea42aa860b45cf7a4 data\hexcasting\loot_tables\blocks\amethyst_dust_block.json +2ac70e3c3600c88b2544d9755fc634216a7a523c data\hexcasting\loot_tables\blocks\edified_wood.json +1c6b077aae560e780be29e74ddcd4b0ca10ce3cf data\hexcasting\loot_tables\blocks\impetus\empty.json +847bc3ead8a88a8f210a24e7732c28d50aa2f5dc data\hexcasting\loot_tables\blocks\edified_planks.json diff --git a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c b/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c index 262e081e97..4388ede08c 100644 --- a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c +++ b/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c @@ -1,25 +1,25 @@ -// 1.20.1 2024-11-19T11:30:28.203782887 Hex Casting/Tags for minecraft:item -5928bad07d3872bb60f29ef4f3c885c8e1967c20 data/hexcasting/tags/items/phial_base.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data/minecraft/tags/items/wooden_doors.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data/minecraft/tags/items/doors.json -37cff4ce449b8069b59b2327d78e073fc026d348 data/minecraft/tags/items/wooden_pressure_plates.json -30780136e6469a01369d7e278998edb6d7f6a16b data/hexcasting/tags/items/staves.json -20183cd61968ff6548df2dde1100b6378d68d64b data/minecraft/tags/items/wooden_buttons.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data/hexcasting/tags/items/edified_logs.json -e186f43ed06770e698c886691f91b2c6acdb5a2a data/hexcasting/tags/items/seal_materials.json -4461ef6db41a675fd077dd833cfd0ea537e755be data/c/tags/items/amethyst_dusts.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data/minecraft/tags/items/trapdoors.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data/minecraft/tags/items/planks.json -c72a147bc65d26424df199388969ebd11119aed3 data/hexcasting/tags/items/brainswept_circle_components.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data/minecraft/tags/items/wooden_trapdoors.json -bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data/hexcasting/tags/items/impeti.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data/hexcasting/tags/items/edified_planks.json -20183cd61968ff6548df2dde1100b6378d68d64b data/minecraft/tags/items/buttons.json -38d781b60c5c37dc025d4c7e9ec5aa680f2a5835 data/c/tags/items/gems.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data/minecraft/tags/items/logs_that_burn.json -ef8ae066fea6277ba2ab43faf18757b88f7c4803 data/hexcasting/tags/items/grants_root_advancement.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data/minecraft/tags/items/leaves.json -9d18fb7a889031a704ca0e553600e1d6f8c3759d data/hexcasting/tags/items/directrices.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data/minecraft/tags/items/logs.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data/minecraft/tags/items/slabs.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data/minecraft/tags/items/wooden_slabs.json +// 1.20.1 2024-12-12T01:28:26.4883123 Hex Casting/Tags for minecraft:item +e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\items\planks.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs.json +20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\wooden_buttons.json +5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\slabs.json +ef8ae066fea6277ba2ab43faf18757b88f7c4803 data\hexcasting\tags\items\grants_root_advancement.json +e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\hexcasting\tags\items\edified_planks.json +fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\wooden_doors.json +4461ef6db41a675fd077dd833cfd0ea537e755be data\c\tags\items\amethyst_dusts.json +38d781b60c5c37dc025d4c7e9ec5aa680f2a5835 data\c\tags\items\gems.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\hexcasting\tags\items\edified_logs.json +c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\items\brainswept_circle_components.json +30780136e6469a01369d7e278998edb6d7f6a16b data\hexcasting\tags\items\staves.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\wooden_trapdoors.json +5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\wooden_slabs.json +9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\items\directrices.json +e186f43ed06770e698c886691f91b2c6acdb5a2a data\hexcasting\tags\items\seal_materials.json +5928bad07d3872bb60f29ef4f3c885c8e1967c20 data\hexcasting\tags\items\phial_base.json +fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\doors.json +37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\items\wooden_pressure_plates.json +bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\items\impeti.json +20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\buttons.json +5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\items\leaves.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\trapdoors.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs_that_burn.json diff --git a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c b/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c index 0177cee9a1..d295e46c6b 100644 --- a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c +++ b/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c @@ -1,4 +1,4 @@ -// 1.20.1 2024-11-19T11:30:28.208319781 Hex Casting/Tags for hexcasting:action -6fe30f41e2bcd48589caab26d210a513dce1ab7c data/hexcasting/tags/action/per_world_pattern.json -6fe30f41e2bcd48589caab26d210a513dce1ab7c data/hexcasting/tags/action/requires_enlightenment.json -6fe30f41e2bcd48589caab26d210a513dce1ab7c data/hexcasting/tags/action/can_start_enlighten.json +// 1.20.1 2024-12-12T01:28:26.4933098 Hex Casting/Tags for hexcasting:action +6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\per_world_pattern.json +6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\can_start_enlighten.json +6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\requires_enlightenment.json diff --git a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 b/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 index 82cfeba7fa..4a10315f10 100644 --- a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 +++ b/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 @@ -1,34 +1,34 @@ -// 1.20.1 2024-11-19T11:30:28.20228007 Hex Casting/Tags for minecraft:block -c72a147bc65d26424df199388969ebd11119aed3 data/hexcasting/tags/blocks/brainswept_circle_components.json -357eddf3cee6f16725bed0701d57b2ca3097d74d data/minecraft/tags/blocks/mineable/shovel.json -20183cd61968ff6548df2dde1100b6378d68d64b data/minecraft/tags/blocks/buttons.json -8cd7a960fd719f200b0bf38100cd17c73b66d39c data/minecraft/tags/blocks/mineable/pickaxe.json -643994ee757a533cfb5001689e0f0263956b8a35 data/minecraft/tags/blocks/mineable/axe.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data/minecraft/tags/blocks/mineable/hoe.json -6ae561f7399e39ffa0e97bd0569aeffa9eabff6a data/hexcasting/tags/blocks/water_plants.json -e8d5ef7eabb567228b279b2419e4f042082d7491 data/minecraft/tags/blocks/fences.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data/minecraft/tags/blocks/logs_that_burn.json -eba53f6c7645de4ef5ffb1e10ef34a4c23e98887 data/hexcasting/tags/blocks/cheap_to_break_block.json -7e1e353cb7f561f086898f991ece48e047991934 data/minecraft/tags/blocks/unstable_bottom_center.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data/minecraft/tags/blocks/leaves.json -281cb08b9b68ef049820c4f3f36b40820044681e data/minecraft/tags/blocks/wooden_stairs.json -6f52ca5e42991af6d7b829f626010ce304277464 data/minecraft/tags/blocks/crystal_sound_blocks.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data/minecraft/tags/blocks/trapdoors.json -37cff4ce449b8069b59b2327d78e073fc026d348 data/minecraft/tags/blocks/wooden_pressure_plates.json -20183cd61968ff6548df2dde1100b6378d68d64b data/minecraft/tags/blocks/wooden_buttons.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data/minecraft/tags/blocks/wooden_trapdoors.json -7acae0c88f5ead65339db1b11b16f60214434c86 data/minecraft/tags/blocks/wooden_fences.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data/minecraft/tags/blocks/wooden_doors.json -7e1e353cb7f561f086898f991ece48e047991934 data/minecraft/tags/blocks/fence_gates.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data/minecraft/tags/blocks/logs.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data/hexcasting/tags/blocks/edified_logs.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data/minecraft/tags/blocks/slabs.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data/minecraft/tags/blocks/planks.json -4b84fc8b7976df220be382bdda66ecf25ceee559 data/create/tags/blocks/brittle.json -281cb08b9b68ef049820c4f3f36b40820044681e data/minecraft/tags/blocks/stairs.json -bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data/hexcasting/tags/blocks/impeti.json -9d18fb7a889031a704ca0e553600e1d6f8c3759d data/hexcasting/tags/blocks/directrices.json -37cff4ce449b8069b59b2327d78e073fc026d348 data/minecraft/tags/blocks/pressure_plates.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data/minecraft/tags/blocks/doors.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data/minecraft/tags/blocks/wooden_slabs.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data/hexcasting/tags/blocks/edified_planks.json +// 1.20.1 2024-12-12T01:28:26.4847791 Hex Casting/Tags for minecraft:block +e8d5ef7eabb567228b279b2419e4f042082d7491 data\minecraft\tags\blocks\fences.json +7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\fence_gates.json +fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\doors.json +c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\blocks\brainswept_circle_components.json +5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\leaves.json +bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\blocks\impeti.json +37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\pressure_plates.json +8cd7a960fd719f200b0bf38100cd17c73b66d39c data\minecraft\tags\blocks\mineable\pickaxe.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\blocks\logs_that_burn.json +357eddf3cee6f16725bed0701d57b2ca3097d74d data\minecraft\tags\blocks\mineable\shovel.json +4b84fc8b7976df220be382bdda66ecf25ceee559 data\create\tags\blocks\brittle.json +5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\blocks\slabs.json +7acae0c88f5ead65339db1b11b16f60214434c86 data\minecraft\tags\blocks\wooden_fences.json +281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\wooden_stairs.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\blocks\trapdoors.json +643994ee757a533cfb5001689e0f0263956b8a35 data\minecraft\tags\blocks\mineable\axe.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\blocks\wooden_trapdoors.json +20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\blocks\wooden_buttons.json +37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\wooden_pressure_plates.json +6f52ca5e42991af6d7b829f626010ce304277464 data\minecraft\tags\blocks\crystal_sound_blocks.json +6ae561f7399e39ffa0e97bd0569aeffa9eabff6a data\hexcasting\tags\blocks\water_plants.json +9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\blocks\directrices.json +7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\unstable_bottom_center.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\blocks\logs.json +20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\blocks\buttons.json +e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\blocks\planks.json +e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\hexcasting\tags\blocks\edified_planks.json +5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\blocks\wooden_slabs.json +fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\wooden_doors.json +281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\stairs.json +eba53f6c7645de4ef5ffb1e10ef34a4c23e98887 data\hexcasting\tags\blocks\cheap_to_break_block.json +5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\mineable\hoe.json +c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\hexcasting\tags\blocks\edified_logs.json diff --git a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b b/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b index f29d046638..c85b073fc8 100644 --- a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b +++ b/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b @@ -1,220 +1,220 @@ -// 1.20.1 2024-11-19T11:30:28.205075318 Hex Casting/Recipes -f482a4349786388cc8f11d5550548f7d60265438 data/hexcasting/recipes/staff/mangrove.json -b10d590e918e35b16578a8b739a1c4e7e2202e16 data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json -7aa3bf4a3d6fb92743b29dfe89d50537fefc0db9 data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json -648f1862fde1dd8ade80b2991b8c8e3991389e95 data/hexcasting/recipes/dye_colorizer_light_blue.json -23eff6111b0385b66d3ad5fbabfc625f426517a6 data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json -a3130e3098e35b75afae4f31996d9ab7468e0bc3 data/hexcasting/advancements/recipes/tools/thought_knot.json -c8f2ad363e4d20054f4e56fde02c8775a45a7169 data/hexcasting/recipes/artifact.json -f80dbf59957be175fbcd63224005e09c4cd1a122 data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json -2fff80cd3dabd2bc1744eecd72b2364b0f91c7c1 data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json -9269b17eaae3217422352354fc6006c9808b398c data/hexcasting/recipes/dye_colorizer_black.json -441f336edb635e5d8c2a7183906fed1c501f06fd data/hexcasting/recipes/pride_colorizer_bisexual.json -a72a0fcc0f3a81d31b30a7a626aef537796ca73b data/hexcasting/advancements/recipes/tools/staff/quenched.json -2aa7d74e29a7c5ee4f1b8835cf7c6109eed81d77 data/hexcasting/recipes/brainsweep/quench_allay.json -2c292e12b5e85b1701740c222e5c5465799ad1dc data/hexcasting/recipes/pride_colorizer_aroace.json -5d6d73e16a36da5f9df6a7b8ac859181d401766d data/hexcasting/recipes/uuid_colorizer.json -49e706193bb57a957091e419bd0d8aa58135da1f data/hexcasting/recipes/dye_colorizer_green.json -2cea013887734cbc4971bcd57e7e4f6a2b25c8e1 data/hexcasting/advancements/recipes/tools/focus.json -36d26f34d0405ff2d1e728e5b5174502686e3590 data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json -daa7b13d5370f4306f8cdf3037fc346e8918950a data/hexcasting/recipes/dye_colorizer_brown.json -b94bc4dd4a63db10af86c524ba00eae157c1824b data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json -9ea4fe5272ce2241d98f30359f55cfc1936c7b48 data/hexcasting/advancements/recipes/tools/staff/cherry.json -e0609202271e402d8ae58e4f8eaf11dcdda10a9e data/hexcasting/recipes/brainsweep/akashic_record.json -c3f7b03fe184ed5e54a8ae06d130adf507b7683d data/hexcasting/recipes/staff/bamboo.json -7ca0f9fc6e8ae1ad08ef5c29a0b279b891f7d8d4 data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json -4aaefc65af5fe69d312247fdda7d983edf8dcd9a data/hexcasting/recipes/pride_colorizer_intersex.json -641d8c38b8109665314fccbebd9068ba10b04118 data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json -fd2f25b0a71806c96af5a307fad76f66de6210a4 data/hexcasting/advancements/recipes/building_blocks/slate_block.json -b1f8375aaf0d66035dee720ea59605f69fc0a154 data/hexcasting/recipes/edified_fence.json -ae88fcdecbfbdd0a0fe778467421a3b32d7ed735 data/create/recipes/crushing/amethyst_cluster.json -6ed61e03c51dc653cd66e643a6d33fe9105ff171 data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json -8b7136c206b799a2e394aa02316b0509674ff64f data/hexcasting/advancements/recipes/tools/staff/bamboo.json -fb852d8e4bcfa7b75f41a6ac7dc1e76b00d95fb1 data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json -5401828f85e709b5817ecc8464dc63e536a730dc data/hexcasting/recipes/staff/cherry.json -54335e0004423899ad37763a1d8456cc0a6e72a7 data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json -c1846dd794f5cc5814b8a839291e82512a02ba12 data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json -0ead307e47242ba140584f6bd20088a1fa7c2909 data/hexcasting/recipes/directrix/empty.json -b7084f131b0cdb9c2c698a3c5b3450d69e788d6e data/hexcasting/recipes/dye_colorizer_yellow.json -55ea553a96e1d6a54385890f7c48fe7b2bed6871 data/hexcasting/advancements/recipes/tools/trinket.json -2003fed3aa4eb622b6b07a9e65946fb40be14420 data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json -1b092acfc3115702c74e141492e649d58512f259 data/hexcasting/recipes/staff/oak.json -5a90084c03d6e8424872870c8b65f4771b447f03 data/hexcasting/recipes/brainsweep/budding_amethyst.json -61e53f02baefd31308e99407d56403dfc18e36e1 data/hexcasting/recipes/akashic_connector.json -93ed0491548920bc75797d18501c750ef07fe3ea data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json -0f2e63a9361d18aac764f6a4a4f13b9b862ac2ee data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json -c4b985635c3b1a519d7a83da65daba5bdd3a5f59 data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json -b6720c1c73455ad817bac9b5ca2ca045c5c4050c data/hexcasting/recipes/pride_colorizer_agender.json -5f216dbb7b89fd837e2dd73e3ed41c8d412de234 data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json -903cbe4d4c4e5abcd5e006f9d0237e8c596228ba data/hexcasting/recipes/edified_tile.json -fb486df96798724da2fcc0df5706f19bc1ff94dc data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json -410bfde90cb977db3f13814e94484fa11fca7cfc data/hexcasting/recipes/thought_knot.json -30352d8ad510768770bb1b2d378959b7a502f825 data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json -a8cab28cffdf495253a320094d202fccc5aeb113 data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json -af8fe74b624df4a31727347b9826614a66092b0a data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json -e765ee2bd324240e8ed3d625be431de3281f0070 data/hexcasting/recipes/dye_colorizer_gray.json -a0b87b1b21506708d09c9295b7afc13de6b1fce6 data/hexcasting/recipes/pride_colorizer_aromantic.json -4d941fc399c6b7a470513a572ecd88982823da84 data/hexcasting/advancements/recipes/building_blocks/edified_wood.json -aa1caae7eba6aede0f179619488e2253b3b723dd data/hexcasting/recipes/focus_rotated.json -505eb9192df0b48867e58e09ce36b2259dc6d3e8 data/hexcasting/advancements/recipes/decorations/scroll.json -1d1e73244fb3da633d8a5f84bad93c6022a94368 data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json -71d38559bf455ea343ac0237a57db4d3f0833a7c data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json -fd7c8325fcaa6a718e90c09251b447fb365523d4 data/hexcasting/recipes/pride_colorizer_demiboy.json -b5946314683e5a823b577a18d13fb437a35aafd5 data/hexcasting/recipes/decompose_quenched_shard/charged.json -011f8daf15148d4b77686c6d382d8f5c288a333d data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json -494aa470790ae46baebbf24ee5b76f5885c1af1a data/hexcasting/recipes/ageing_scroll_paper_lantern.json -c6228d72ca800a7dd336e82bbb9b4f20f89de29d data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json -5889e2df2fb4e1ea29f2590b96bb3aa94961a09a data/hexcasting/recipes/scroll.json -a9111ff52513200af47b79cf98b2e545699497bb data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json -e9166f40c8797cdbf3d8062dfa35c74f850f1000 data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json -2c56c267e23e75d5a3b9358d424d69642e001b50 data/hexcasting/recipes/decompose_quenched_shard/dust.json -ea87956c49dcfabb0d39af45c016130d258181da data/hexcasting/recipes/staff/birch.json -98c0843e6a83b91820f1c720e206295eec20ff95 data/hexcasting/recipes/ancient_scroll_paper.json -bc8fe4d2f55fe119b0b146a71782a3d4788380b1 data/create/recipes/crushing/amethyst_block.json -97062771a426f6e4b9e3bfd6daa62b1d4b3c7039 data/hexcasting/recipes/abacus.json -24c244e53c7e47b85845d2ee36b1665410cf495a data/hexcasting/recipes/edified_planks.json -417695497a95436186c1a4ed842d7975d754f9eb data/hexcasting/recipes/stripped_edified_wood.json -7f2f29981df2ca4464ee0250180e670f5331f65b data/hexcasting/recipes/dye_colorizer_pink.json -ea63e49709bd80cb9f4cd1fe13e9bd0281101c9a data/hexcasting/recipes/slate.json -f64fa00d85a9abb24e89b0d2c9f818001371f5e6 data/hexcasting/recipes/slate_block.json -14f3b217e150efbbff329d67aec96f818a1da99c data/hexcasting/recipes/dye_colorizer_purple.json -9b7c5220fbaf3e84fa9e81eae322eed5d37b22d3 data/hexcasting/recipes/pride_colorizer_transgender.json -17a1adf747b99848381ca8e7c5e2cd9dd96c014f data/hexcasting/advancements/recipes/misc/default_colorizer.json -a85cfbd7988f5df0b18d160591605aea8e6808d2 data/hexcasting/recipes/trinket.json -4003f297be29810cebde4995fb2838c2c68a25ea data/hexcasting/recipes/pride_colorizer_lesbian.json -41a570f970c9af8229cb1140a11a5220fac00957 data/hexcasting/advancements/recipes/tools/staff/spruce.json -b300f7729e75614fce412457f6717686680f81da data/hexcasting/recipes/sub_sandwich.json -0b951ce7b9d1bfb07ae012b12225b595d36c6e66 data/hexcasting/recipes/amethyst_dust_packing.json -2b64261bd4aefdc55d35400f25835434f88856cf data/hexcasting/recipes/amethyst_tiles.json -963d87d2738686e5398a178b8b369228ff067403 data/hexcasting/recipes/spellbook.json -6e2dc32f975d987b8dfd329507334f647bceadc0 data/hexcasting/advancements/recipes/tools/staff/mangrove.json -996c8361766377a70e0b5a5caff3076fc6031b0a data/hexcasting/recipes/impetus/empty.json -71f821f5d24b0bf9ecd860d51e055628fe4af50c data/hexcasting/recipes/edified_panel.json -7166cd4355d11c209bc7749bc862caddcfd795fb data/hexcasting/recipes/dye_colorizer_cyan.json -f347f4ce869207e62a7887df1252505a3432e12a data/hexcasting/recipes/pride_colorizer_genderfluid.json -1b570b35288be9f6faab1536d6e45cb52eb088c0 data/hexcasting/advancements/recipes/tools/staff/dark_oak.json -31ec6474ddae967a6c1dadf9be8292d375510364 data/hexcasting/advancements/recipes/building_blocks/edified_tile.json -5e66982df6a1074c81f381898033b521ca337695 data/hexcasting/recipes/staff/quenched.json -45915b542d8070f2502a4047218679b08033b12d data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json -946cde51bbfc2af344b078f6b39389ffc44462f4 data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json -1093cccc6b1c45eb91f7c1680ef575a7bffb2744 data/hexcasting/advancements/recipes/building_blocks/edified_planks.json -72447ac69a0d85f91064180d3c852040a9e33832 data/hexcasting/recipes/pride_colorizer_asexual.json -0e792d49c81d2164e827d1bdedaa0fa358dfc437 data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json -b84c113ef5321c9df9ac9080de03e8d8639feab2 data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json -e6a592721234448f2ee7ec402bca10a9b78b4677 data/hexcasting/advancements/recipes/decorations/slate.json -de38d15e7a91c77df24c1dc954b3e98ee197876f data/hexcasting/recipes/focus.json -157ee5fba985bbd01a87f44578890dab5489a8e5 data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json -c1541738df1ee41c362ad3b9c3a9f0e181bd5c62 data/hexcasting/recipes/pride_colorizer_plural.json -233aeedc73173427e7b2287772a4f914f97b072c data/hexcasting/recipes/dye_colorizer_red.json -12bd3d04c791ef16aad5e992f038d6726229a436 data/hexcasting/advancements/recipes/tools/artifact.json -862f1a61a296a834df8a93dbd5a6cdfa2df15721 data/hexcasting/advancements/recipes/tools/staff/acacia.json -a1f9df0537c0ef33a1164cf94e8ff4b1094f889f data/hexcasting/advancements/recipes/tools/staff/warped.json -b6e762c198b9632defd7f8b11287702abecd681d data/hexcasting/recipes/staff/mindsplice.json -7c479398bbc7185a2c3efd568ad266d8109245bf data/hexcasting/advancements/recipes/redstone/edified_door.json -5fab1b9c93304a53a4c305b511704458e4593444 data/hexcasting/recipes/pride_colorizer_demigirl.json -e536791d0c6fb48206e6e30d56879eaf0a9e4bd7 data/hexcasting/recipes/akashic_bookshelf.json -b90ad4cbffc2e3c01671dfe8bda5e42d9b8a685c data/hexcasting/advancements/recipes/tools/staff/crimson.json -68ab70e0b4e432a3492767c5597ecd836f106714 data/hexcasting/advancements/recipes/tools/staff/mindsplice.json -c2ef04b311251b4eb22320b2f5313c54533a9974 data/hexcasting/advancements/recipes/tools/staff/birch.json -1a0d55e6824c078453c1d44e885a1c51ba707a41 data/hexcasting/recipes/dye_colorizer_white.json -8f8773a541bc6a4a6c55a23f4f98b5da4f61a031 data/hexcasting/recipes/scroll_paper.json -bc729ac7cf84d29a99cd34d50c152c0b9d20bd7a data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json -4a803e049915fd3c7144155ae3a1b05a917ea290 data/hexcasting/recipes/pride_colorizer_pansexual.json -8bea75fdc5e64c464dcf5f85166e767ff44e6dc2 data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json -0654e70ed1ed8be20ae3dd9f4955cd14f9fa40d0 data/hexcasting/advancements/recipes/tools/staff/jungle.json -5e98cec2084f0cfbb959c3ec39bd85a3369f443b data/hexcasting/advancements/recipes/tools/abacus.json -0b172aef920da7ba63fe152903ce005c1f5df5f1 data/hexcasting/recipes/staff/acacia.json -7e1a5a873d655e0efba80f22ae9b1de4f248e67a data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json -3608f0ec056f2c5d29a9a89305218497fd2c4383 data/hexcasting/recipes/stonecutting/amethyst_tiles.json -2a2f60fb0f63ee278b74c418acf04575304c521f data/hexcasting/advancements/recipes/tools/jeweler_hammer.json -8c043c7f6a7911b67324e2fd42f0b3b19a792af3 data/hexcasting/recipes/ancient_scroll_paper_lantern.json -4680e9dafcf9b60b3485609519d66eefcfd539bc data/hexcasting/recipes/staff/dark_oak.json -095aeb2882c6849f10fb6536e7c780790778e5e7 data/hexcasting/recipes/staff/jungle.json -b624d103d944a8a1d4d8a9e85c198a5492b476f8 data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json -eb9ebf77f0daa32f665a60888fcda19c940f0b2f data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json -8f7b81add0153ad94900acc66cd8174ae7115f64 data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json -838b91c33a72a58aa286607eaaa17cdd6b4c90ba data/hexcasting/recipes/amethyst_sconce.json -664ce1a38c9b1c9ec21b7e078631e181fc0b2498 data/hexcasting/recipes/staff/edified.json -7522be58b09554a3f1a54d5b2343c3eab01447a3 data/hexcasting/recipes/dye_colorizer_magenta.json -ee5db13cbb33d9c62bcb1eb645e2c4bea97ad44a data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json -203b7035125390abb4ed77b3a4dca8f8f8f57bc5 data/hexcasting/recipes/dye_colorizer_light_gray.json -00853ec1885c1f72674c07caf6fd04904e248f8f data/hexcasting/recipes/brainsweep/directrix_boolean.json -f8ee073c1c03f1c11147e4801eeba1f86e5459ba data/hexcasting/recipes/dye_colorizer_blue.json -a366ea3750adc0d336ab8f318c40baed3f9c3eb7 data/hexcasting/recipes/brainsweep/impetus_storedplayer.json -51b047601368a103be166d907633b196d2d8a4e8 data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json -f4c56ea7143ce92a0ae0b663310e53644a7309f7 data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json -6f2634e5588aede8e29157ecc859652d8a9f4065 data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json -f1bae034d27d218bf262a8c777b787d232489f16 data/hexcasting/recipes/lens.json -06402fb37fe4bb05918d13dbfdb89f4c2b67f3ec data/hexcasting/advancements/recipes/tools/cypher.json -ed5c690324e3d9b55599f00f078ae225072a2e7f data/hexcasting/recipes/brainsweep/impetus_rightclick.json -c43fb770003c8d882fd9c1e7d1ecb5f196cba1ab data/hexcasting/recipes/cypher.json -4d5e4a6374731b2d0a90c70a5d489703fd966977 data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json -0864e8b86bdad0bf9ab2ddeb0cd5a182808b5a0a data/hexcasting/recipes/default_colorizer.json -7d71eb93bbb0856167cf4521283e39f0048078ee data/hexcasting/advancements/recipes/redstone/edified_button.json -72f70637aea1c11683e9ee91d83c2807c6ec33a9 data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json -1e51cd4f527b3aea4d61d91829e47c191c9c05bb data/hexcasting/recipes/pride_colorizer_gay.json -42b8e462de1d7006de3a7658757377450e773107 data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json -775560efa36581389c0319435bda035be262ed4f data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json -09096a40275b6c49d4b4e6984869aa43b34712c3 data/hexcasting/recipes/dynamicseal_focus.json -8f515bf8ccea70b3d88845ed83966dc0c66082f6 data/hexcasting/advancements/recipes/tools/staff/oak.json -b29f9d9c14e60ded1148680e2e0ef405b5a3c845 data/hexcasting/advancements/recipes/misc/uuid_colorizer.json -071e5875b13b60aac33bc97e408d2ca710ac5d02 data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json -3bf96944a8eed8b8d3f5d96b609297727c078cb7 data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json -846baaef37844216b57bb9b35e52b1bb6b56b413 data/hexcasting/advancements/recipes/decorations/scroll_small.json -db5ae3a2fda235cf1c83fd83e0026a262e668217 data/hexcasting/advancements/recipes/building_blocks/edified_slab.json -6493676f8ca93a7be8d70e25d69ddad935b3f16b data/hexcasting/advancements/recipes/tools/lens.json -a8d604ba059d54502837809815d3ac9bbcaa89bf data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json -0aaf55492e850d2bb1ec2f9986406ca61fde4cfd data/hexcasting/recipes/dye_colorizer_lime.json -dcc9bf721dd40724abcc69f1f7e8a1610dbf88f3 data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json -f81053a3269c1b371be3f8057bad4803056ee0f9 data/hexcasting/recipes/dye_colorizer_orange.json -f77518b6993fe8e31de10af286c33ab72c0f9077 data/hexcasting/advancements/recipes/redstone/impetus/empty.json -3b03fdae3896212a0b8b9b3a2d4880d197e67d2d data/hexcasting/recipes/jeweler_hammer.json -d7de5d626fd799a2522af36f0c62c52fe490e6d2 data/hexcasting/recipes/edified_door.json -aa7558ec1baf6070efbe448d886e20e964e33f96 data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json -cedc2889c4f327b18755bbe8c3c595d302e2a9d0 data/hexcasting/recipes/decompose_quenched_shard/shard.json -8c52917fc7041c483fb6dfe8d16c90f096f2beaf data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json -40ed21dc80d39236ca0e6d2cea60861c637cf931 data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json -ef96ae9709ec931ce6b6af8a539f9bc483236449 data/hexcasting/recipes/scroll_medium.json -61fafd43af83bdca6720d0993ab71f40a8bebd40 data/hexcasting/advancements/recipes/redstone/akashic_connector.json -f08a0aee92b281ae325d907e6fe4a3b03980f2aa data/hexcasting/advancements/recipes/tools/staff/edified.json -7552df3fc726cc4cdaa88aa4823eff6ce069fb75 data/hexcasting/recipes/slate_block_from_slates.json -77369113dc54d1c64b9101861dd8a1930bf1c1c4 data/hexcasting/recipes/edified_wood.json -1ad54df5eaee3d1e810d2c91bd03f626084e30b6 data/hexcasting/recipes/edified_trapdoor.json -ce9d0b976f7cc8ad4a0815bbea6c43115addb90f data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json -af9a260c24e0a65eea321f0dd9dd2fa7d648707f data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json -923e7cd200518042f11474713eca9ccad126dab7 data/hexcasting/recipes/staff/spruce.json -ad647a2078099344ea7f9836a68e1bf8e8119277 data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json -0038883bd294cc8a1b324d6782478d5e37b4dbf9 data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json -170af3c83a45f9550827cc48e4bb5a621d06d685 data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json -8815ea5d8d7379062e050adc5736cc579c3bdd9e data/hexcasting/recipes/edified_stairs.json -b6fa898369ac52cdd9d7f91e3b8a2cb881c3829f data/hexcasting/advancements/recipes/decorations/scroll_medium.json -04902d4eca30560bc601a8196d82f74f3fa5b191 data/hexcasting/recipes/dynamicseal_spellbook.json -d6b7a9392320c11866b3f139f97977dc9f55bc47 data/hexcasting/recipes/scroll_small.json -8e48c680b38666c2e7da71fbe4ceddf5d99a5cbc data/hexcasting/advancements/recipes/food/sub_sandwich.json -5e28e2c352366720ce91b73f8c8c38e217f7198d data/hexcasting/recipes/edified_fence_gate.json -004e0694b3bf53140be7df89a4defc255b800619 data/hexcasting/advancements/recipes/tools/focus_rotated.json -faaa9c39dbcdd131c5fbec9ac6a26d6dc5e72053 data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json -55602e415fc1b797439b674050887e9e388558c9 data/hexcasting/advancements/recipes/building_blocks/edified_panel.json -151875101066f7af5788c7a2e1c6b342971a546a data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json -0bd7c9f4a9bf29c1b63b2f9378f0a7e2f594b7b7 data/hexcasting/recipes/pride_colorizer_nonbinary.json -ea46e570a43cd3ea1cc78c51d9da45d93944730a data/hexcasting/advancements/recipes/redstone/directrix/empty.json -b20be6eb5a8b60567871444e65d773ec9a67ece1 data/hexcasting/recipes/staff/crimson.json -c03c81dc123294472e8bb6f836c319e96f8db4f5 data/hexcasting/advancements/recipes/building_blocks/edified_fence.json -92bdf87687d8823036fae6bd01782c653831286b data/hexcasting/recipes/brainsweep/impetus_look.json -06ca609ba1a32f094cf6edbc989bc9ddaf9d342c data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json -552c235dc58a46a3e57913c9b9faf3f21abeae32 data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json -c2a0a489967db4064dfbe1ee6367e132665f3c00 data/hexcasting/recipes/edified_slab.json -1a9dd55a24f56a4e9467f1117e0898f7e71ade67 data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json -27dc4a1647f264c45b27f5552fd9403a02853484 data/hexcasting/advancements/recipes/tools/spellbook.json -2eacf53894ae97712dc3874777e29dce0a0e5540 data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json -e11aeded7f5d3fdd224627c67661bbd993901703 data/hexcasting/recipes/edified_pressure_plate.json -e691130641b11c0a030a51c71dee0ba356f3b5bd data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json -7baf0777533737aef68bcac36944943b77138d29 data/hexcasting/recipes/edified_button.json -63189af501442318a90c16d6951e51c0c5d6d4f3 data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json -499c5c09e3772989350f9ab3264b8692449a6dea data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json -b16ff5314d457bc7e9e224e102d1e04ce3a62361 data/hexcasting/recipes/brainsweep/directrix_redstone.json -bd63b845e02ee4b1b9abe168a196335ccbed1ca5 data/hexcasting/recipes/scroll_paper_lantern.json -afb422ad4a918ee0161bf077f09475bb1da2b4eb data/hexcasting/recipes/amethyst_dust_unpacking.json -d47352426739a0fc500a385d820d767a307e1d16 data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json -f0e71ae8c6a9170669f44096a55a875d11497c56 data/hexcasting/recipes/staff/warped.json -78958099bf4337ad281580d90f434b3074ad18c8 data/hexcasting/recipes/pride_colorizer_genderqueer.json +// 1.20.1 2024-12-12T01:28:26.4893103 Hex Casting/Recipes +1d1e73244fb3da633d8a5f84bad93c6022a94368 data\hexcasting\advancements\recipes\misc\pride_colorizer_demiboy.json +49e706193bb57a957091e419bd0d8aa58135da1f data\hexcasting\recipes\dye_colorizer_green.json +071e5875b13b60aac33bc97e408d2ca710ac5d02 data\hexcasting\advancements\recipes\building_blocks\stonecutting\amethyst_tiles.json +fb852d8e4bcfa7b75f41a6ac7dc1e76b00d95fb1 data\hexcasting\advancements\recipes\misc\dye_colorizer_red.json +9269b17eaae3217422352354fc6006c9808b398c data\hexcasting\recipes\dye_colorizer_black.json +5d6d73e16a36da5f9df6a7b8ac859181d401766d data\hexcasting\recipes\uuid_colorizer.json +e11aeded7f5d3fdd224627c67661bbd993901703 data\hexcasting\recipes\edified_pressure_plate.json +8c52917fc7041c483fb6dfe8d16c90f096f2beaf data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_amethyst.json +d6b7a9392320c11866b3f139f97977dc9f55bc47 data\hexcasting\recipes\scroll_small.json +c1846dd794f5cc5814b8a839291e82512a02ba12 data\hexcasting\advancements\recipes\misc\pride_colorizer_plural.json +17a1adf747b99848381ca8e7c5e2cd9dd96c014f data\hexcasting\advancements\recipes\misc\default_colorizer.json +f347f4ce869207e62a7887df1252505a3432e12a data\hexcasting\recipes\pride_colorizer_genderfluid.json +f8ee073c1c03f1c11147e4801eeba1f86e5459ba data\hexcasting\recipes\dye_colorizer_blue.json +b16ff5314d457bc7e9e224e102d1e04ce3a62361 data\hexcasting\recipes\brainsweep\directrix_redstone.json +862f1a61a296a834df8a93dbd5a6cdfa2df15721 data\hexcasting\advancements\recipes\tools\staff\acacia.json +ea87956c49dcfabb0d39af45c016130d258181da data\hexcasting\recipes\staff\birch.json +5e66982df6a1074c81f381898033b521ca337695 data\hexcasting\recipes\staff\quenched.json +ee5db13cbb33d9c62bcb1eb645e2c4bea97ad44a data\hexcasting\advancements\recipes\building_blocks\amethyst_dust_unpacking.json +f4c56ea7143ce92a0ae0b663310e53644a7309f7 data\hexcasting\advancements\recipes\misc\pride_colorizer_pansexual.json +3b03fdae3896212a0b8b9b3a2d4880d197e67d2d data\hexcasting\recipes\jeweler_hammer.json +7ca0f9fc6e8ae1ad08ef5c29a0b279b891f7d8d4 data\hexcasting\advancements\recipes\misc\pride_colorizer_aroace.json +b6fa898369ac52cdd9d7f91e3b8a2cb881c3829f data\hexcasting\advancements\recipes\decorations\scroll_medium.json +0654e70ed1ed8be20ae3dd9f4955cd14f9fa40d0 data\hexcasting\advancements\recipes\tools\staff\jungle.json +1b570b35288be9f6faab1536d6e45cb52eb088c0 data\hexcasting\advancements\recipes\tools\staff\dark_oak.json +505eb9192df0b48867e58e09ce36b2259dc6d3e8 data\hexcasting\advancements\recipes\decorations\scroll.json +09096a40275b6c49d4b4e6984869aa43b34712c3 data\hexcasting\recipes\dynamicseal_focus.json +b7084f131b0cdb9c2c698a3c5b3450d69e788d6e data\hexcasting\recipes\dye_colorizer_yellow.json +55602e415fc1b797439b674050887e9e388558c9 data\hexcasting\advancements\recipes\building_blocks\edified_panel.json +a9111ff52513200af47b79cf98b2e545699497bb data\hexcasting\advancements\recipes\building_blocks\amethyst_tiles.json +ea63e49709bd80cb9f4cd1fe13e9bd0281101c9a data\hexcasting\recipes\slate.json +8e48c680b38666c2e7da71fbe4ceddf5d99a5cbc data\hexcasting\advancements\recipes\food\sub_sandwich.json +4d5e4a6374731b2d0a90c70a5d489703fd966977 data\hexcasting\advancements\recipes\misc\dye_colorizer_lime.json +7552df3fc726cc4cdaa88aa4823eff6ce069fb75 data\hexcasting\recipes\slate_block_from_slates.json +72f70637aea1c11683e9ee91d83c2807c6ec33a9 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_trapdoor.json +2cea013887734cbc4971bcd57e7e4f6a2b25c8e1 data\hexcasting\advancements\recipes\tools\focus.json +f1bae034d27d218bf262a8c777b787d232489f16 data\hexcasting\recipes\lens.json +963d87d2738686e5398a178b8b369228ff067403 data\hexcasting\recipes\spellbook.json +f0e71ae8c6a9170669f44096a55a875d11497c56 data\hexcasting\recipes\staff\warped.json +7c479398bbc7185a2c3efd568ad266d8109245bf data\hexcasting\advancements\recipes\redstone\edified_door.json +7baf0777533737aef68bcac36944943b77138d29 data\hexcasting\recipes\edified_button.json +daa7b13d5370f4306f8cdf3037fc346e8918950a data\hexcasting\recipes\dye_colorizer_brown.json +f08a0aee92b281ae325d907e6fe4a3b03980f2aa data\hexcasting\advancements\recipes\tools\staff\edified.json +61fafd43af83bdca6720d0993ab71f40a8bebd40 data\hexcasting\advancements\recipes\redstone\akashic_connector.json +00853ec1885c1f72674c07caf6fd04904e248f8f data\hexcasting\recipes\brainsweep\directrix_boolean.json +b90ad4cbffc2e3c01671dfe8bda5e42d9b8a685c data\hexcasting\advancements\recipes\tools\staff\crimson.json +ef96ae9709ec931ce6b6af8a539f9bc483236449 data\hexcasting\recipes\scroll_medium.json +552c235dc58a46a3e57913c9b9faf3f21abeae32 data\hexcasting\advancements\recipes\building_blocks\stripped_edified_wood.json +a0b87b1b21506708d09c9295b7afc13de6b1fce6 data\hexcasting\recipes\pride_colorizer_aromantic.json +ae88fcdecbfbdd0a0fe778467421a3b32d7ed735 data\create\recipes\crushing\amethyst_cluster.json +aa7558ec1baf6070efbe448d886e20e964e33f96 data\hexcasting\advancements\recipes\brainsweep\brainsweep\quench_allay.json +a8d604ba059d54502837809815d3ac9bbcaa89bf data\hexcasting\advancements\recipes\redstone\akashic_bookshelf.json +5889e2df2fb4e1ea29f2590b96bb3aa94961a09a data\hexcasting\recipes\scroll.json +0038883bd294cc8a1b324d6782478d5e37b4dbf9 data\hexcasting\advancements\recipes\misc\dye_colorizer_pink.json +71f821f5d24b0bf9ecd860d51e055628fe4af50c data\hexcasting\recipes\edified_panel.json +7e1a5a873d655e0efba80f22ae9b1de4f248e67a data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\shard.json +417695497a95436186c1a4ed842d7975d754f9eb data\hexcasting\recipes\stripped_edified_wood.json +92bdf87687d8823036fae6bd01782c653831286b data\hexcasting\recipes\brainsweep\impetus_look.json +3608f0ec056f2c5d29a9a89305218497fd2c4383 data\hexcasting\recipes\stonecutting\amethyst_tiles.json +8815ea5d8d7379062e050adc5736cc579c3bdd9e data\hexcasting\recipes\edified_stairs.json +f482a4349786388cc8f11d5550548f7d60265438 data\hexcasting\recipes\staff\mangrove.json +6e2dc32f975d987b8dfd329507334f647bceadc0 data\hexcasting\advancements\recipes\tools\staff\mangrove.json +5a90084c03d6e8424872870c8b65f4771b447f03 data\hexcasting\recipes\brainsweep\budding_amethyst.json +2eacf53894ae97712dc3874777e29dce0a0e5540 data\hexcasting\advancements\recipes\misc\pride_colorizer_asexual.json +af9a260c24e0a65eea321f0dd9dd2fa7d648707f data\hexcasting\advancements\recipes\building_blocks\amethyst_dust_packing.json +24c244e53c7e47b85845d2ee36b1665410cf495a data\hexcasting\recipes\edified_planks.json +b84c113ef5321c9df9ac9080de03e8d8639feab2 data\hexcasting\advancements\recipes\misc\pride_colorizer_genderqueer.json +97062771a426f6e4b9e3bfd6daa62b1d4b3c7039 data\hexcasting\recipes\abacus.json +41a570f970c9af8229cb1140a11a5220fac00957 data\hexcasting\advancements\recipes\tools\staff\spruce.json +2c56c267e23e75d5a3b9358d424d69642e001b50 data\hexcasting\recipes\decompose_quenched_shard\dust.json +4003f297be29810cebde4995fb2838c2c68a25ea data\hexcasting\recipes\pride_colorizer_lesbian.json +5f216dbb7b89fd837e2dd73e3ed41c8d412de234 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\dust.json +648f1862fde1dd8ade80b2991b8c8e3991389e95 data\hexcasting\recipes\dye_colorizer_light_blue.json +fb486df96798724da2fcc0df5706f19bc1ff94dc data\hexcasting\advancements\recipes\misc\dye_colorizer_light_blue.json +946cde51bbfc2af344b078f6b39389ffc44462f4 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_storedplayer.json +0b951ce7b9d1bfb07ae012b12225b595d36c6e66 data\hexcasting\recipes\amethyst_dust_packing.json +838b91c33a72a58aa286607eaaa17cdd6b4c90ba data\hexcasting\recipes\amethyst_sconce.json +8f515bf8ccea70b3d88845ed83966dc0c66082f6 data\hexcasting\advancements\recipes\tools\staff\oak.json +0f2e63a9361d18aac764f6a4a4f13b9b862ac2ee data\hexcasting\recipes\compat\create\crushing\amethyst_shard.json +cedc2889c4f327b18755bbe8c3c595d302e2a9d0 data\hexcasting\recipes\decompose_quenched_shard\shard.json +2003fed3aa4eb622b6b07a9e65946fb40be14420 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_rightclick.json +7d71eb93bbb0856167cf4521283e39f0048078ee data\hexcasting\advancements\recipes\redstone\edified_button.json +0bd7c9f4a9bf29c1b63b2f9378f0a7e2f594b7b7 data\hexcasting\recipes\pride_colorizer_nonbinary.json +157ee5fba985bbd01a87f44578890dab5489a8e5 data\hexcasting\advancements\recipes\misc\dye_colorizer_green.json +c2ef04b311251b4eb22320b2f5313c54533a9974 data\hexcasting\advancements\recipes\tools\staff\birch.json +2fff80cd3dabd2bc1744eecd72b2364b0f91c7c1 data\hexcasting\advancements\recipes\misc\dye_colorizer_yellow.json +e536791d0c6fb48206e6e30d56879eaf0a9e4bd7 data\hexcasting\recipes\akashic_bookshelf.json +faaa9c39dbcdd131c5fbec9ac6a26d6dc5e72053 data\hexcasting\advancements\recipes\misc\dye_colorizer_light_gray.json +e0609202271e402d8ae58e4f8eaf11dcdda10a9e data\hexcasting\recipes\brainsweep\akashic_record.json +3bf96944a8eed8b8d3f5d96b609297727c078cb7 data\hexcasting\advancements\recipes\misc\dye_colorizer_purple.json +203b7035125390abb4ed77b3a4dca8f8f8f57bc5 data\hexcasting\recipes\dye_colorizer_light_gray.json +e691130641b11c0a030a51c71dee0ba356f3b5bd data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_aventurine.json +8f7b81add0153ad94900acc66cd8174ae7115f64 data\hexcasting\advancements\recipes\building_blocks\slate_block_from_slates.json +06402fb37fe4bb05918d13dbfdb89f4c2b67f3ec data\hexcasting\advancements\recipes\tools\cypher.json +c8f2ad363e4d20054f4e56fde02c8775a45a7169 data\hexcasting\recipes\artifact.json +8bea75fdc5e64c464dcf5f85166e767ff44e6dc2 data\hexcasting\advancements\recipes\misc\pride_colorizer_lesbian.json +c6228d72ca800a7dd336e82bbb9b4f20f89de29d data\hexcasting\advancements\recipes\redstone\edified_pressure_plate.json +0aaf55492e850d2bb1ec2f9986406ca61fde4cfd data\hexcasting\recipes\dye_colorizer_lime.json +e6a592721234448f2ee7ec402bca10a9b78b4677 data\hexcasting\advancements\recipes\decorations\slate.json +e9166f40c8797cdbf3d8062dfa35c74f850f1000 data\hexcasting\advancements\recipes\misc\dye_colorizer_white.json +2aa7d74e29a7c5ee4f1b8835cf7c6109eed81d77 data\hexcasting\recipes\brainsweep\quench_allay.json +f81053a3269c1b371be3f8057bad4803056ee0f9 data\hexcasting\recipes\dye_colorizer_orange.json +bc729ac7cf84d29a99cd34d50c152c0b9d20bd7a data\hexcasting\advancements\recipes\brainsweep\brainsweep\akashic_record.json +1a9dd55a24f56a4e9467f1117e0898f7e71ade67 data\hexcasting\advancements\recipes\decorations\amethyst_sconce.json +d7de5d626fd799a2522af36f0c62c52fe490e6d2 data\hexcasting\recipes\edified_door.json +c3f7b03fe184ed5e54a8ae06d130adf507b7683d data\hexcasting\recipes\staff\bamboo.json +6f2634e5588aede8e29157ecc859652d8a9f4065 data\hexcasting\advancements\recipes\misc\dye_colorizer_orange.json +b10d590e918e35b16578a8b739a1c4e7e2202e16 data\hexcasting\advancements\recipes\misc\dye_colorizer_cyan.json +0e792d49c81d2164e827d1bdedaa0fa358dfc437 data\hexcasting\advancements\recipes\misc\pride_colorizer_aromantic.json +afb422ad4a918ee0161bf077f09475bb1da2b4eb data\hexcasting\recipes\amethyst_dust_unpacking.json +011f8daf15148d4b77686c6d382d8f5c288a333d data\hexcasting\advancements\recipes\building_blocks\ancient_scroll_paper.json +98c0843e6a83b91820f1c720e206295eec20ff95 data\hexcasting\recipes\ancient_scroll_paper.json +9b7c5220fbaf3e84fa9e81eae322eed5d37b22d3 data\hexcasting\recipes\pride_colorizer_transgender.json +a1f9df0537c0ef33a1164cf94e8ff4b1094f889f data\hexcasting\advancements\recipes\tools\staff\warped.json +54335e0004423899ad37763a1d8456cc0a6e72a7 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\charged.json +641d8c38b8109665314fccbebd9068ba10b04118 data\hexcasting\advancements\recipes\misc\dye_colorizer_gray.json +5e98cec2084f0cfbb959c3ec39bd85a3369f443b data\hexcasting\advancements\recipes\tools\abacus.json +b300f7729e75614fce412457f6717686680f81da data\hexcasting\recipes\sub_sandwich.json +1a0d55e6824c078453c1d44e885a1c51ba707a41 data\hexcasting\recipes\dye_colorizer_white.json +36d26f34d0405ff2d1e728e5b5174502686e3590 data\hexcasting\advancements\recipes\brainsweep\brainsweep\budding_amethyst.json +903cbe4d4c4e5abcd5e006f9d0237e8c596228ba data\hexcasting\recipes\edified_tile.json +1093cccc6b1c45eb91f7c1680ef575a7bffb2744 data\hexcasting\advancements\recipes\building_blocks\edified_planks.json +233aeedc73173427e7b2287772a4f914f97b072c data\hexcasting\recipes\dye_colorizer_red.json +2a2f60fb0f63ee278b74c418acf04575304c521f data\hexcasting\advancements\recipes\tools\jeweler_hammer.json +004e0694b3bf53140be7df89a4defc255b800619 data\hexcasting\advancements\recipes\tools\focus_rotated.json +ea46e570a43cd3ea1cc78c51d9da45d93944730a data\hexcasting\advancements\recipes\redstone\directrix\empty.json +4d941fc399c6b7a470513a572ecd88982823da84 data\hexcasting\advancements\recipes\building_blocks\edified_wood.json +aa1caae7eba6aede0f179619488e2253b3b723dd data\hexcasting\recipes\focus_rotated.json +b1f8375aaf0d66035dee720ea59605f69fc0a154 data\hexcasting\recipes\edified_fence.json +1b092acfc3115702c74e141492e649d58512f259 data\hexcasting\recipes\staff\oak.json +0864e8b86bdad0bf9ab2ddeb0cd5a182808b5a0a data\hexcasting\recipes\default_colorizer.json +40ed21dc80d39236ca0e6d2cea60861c637cf931 data\hexcasting\advancements\recipes\misc\pride_colorizer_nonbinary.json +04902d4eca30560bc601a8196d82f74f3fa5b191 data\hexcasting\recipes\dynamicseal_spellbook.json +bd63b845e02ee4b1b9abe168a196335ccbed1ca5 data\hexcasting\recipes\scroll_paper_lantern.json +996c8361766377a70e0b5a5caff3076fc6031b0a data\hexcasting\recipes\impetus\empty.json +8b7136c206b799a2e394aa02316b0509674ff64f data\hexcasting\advancements\recipes\tools\staff\bamboo.json +c1541738df1ee41c362ad3b9c3a9f0e181bd5c62 data\hexcasting\recipes\pride_colorizer_plural.json +4a803e049915fd3c7144155ae3a1b05a917ea290 data\hexcasting\recipes\pride_colorizer_pansexual.json +71d38559bf455ea343ac0237a57db4d3f0833a7c data\hexcasting\advancements\recipes\misc\dye_colorizer_magenta.json +9ea4fe5272ce2241d98f30359f55cfc1936c7b48 data\hexcasting\advancements\recipes\tools\staff\cherry.json +72447ac69a0d85f91064180d3c852040a9e33832 data\hexcasting\recipes\pride_colorizer_asexual.json +a8cab28cffdf495253a320094d202fccc5aeb113 data\hexcasting\advancements\recipes\decorations\ancient_scroll_paper_lantern.json +14f3b217e150efbbff329d67aec96f818a1da99c data\hexcasting\recipes\dye_colorizer_purple.json +1e51cd4f527b3aea4d61d91829e47c191c9c05bb data\hexcasting\recipes\pride_colorizer_gay.json +f64fa00d85a9abb24e89b0d2c9f818001371f5e6 data\hexcasting\recipes\slate_block.json +a85cfbd7988f5df0b18d160591605aea8e6808d2 data\hexcasting\recipes\trinket.json +63189af501442318a90c16d6951e51c0c5d6d4f3 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_purple.json +494aa470790ae46baebbf24ee5b76f5885c1af1a data\hexcasting\recipes\ageing_scroll_paper_lantern.json +bc8fe4d2f55fe119b0b146a71782a3d4788380b1 data\create\recipes\crushing\amethyst_block.json +7522be58b09554a3f1a54d5b2343c3eab01447a3 data\hexcasting\recipes\dye_colorizer_magenta.json +b624d103d944a8a1d4d8a9e85c198a5492b476f8 data\hexcasting\advancements\recipes\redstone\edified_trapdoor.json +a3130e3098e35b75afae4f31996d9ab7468e0bc3 data\hexcasting\advancements\recipes\tools\thought_knot.json +23eff6111b0385b66d3ad5fbabfc625f426517a6 data\hexcasting\advancements\recipes\brainsweep\brainsweep\directrix_redstone.json +c43fb770003c8d882fd9c1e7d1ecb5f196cba1ab data\hexcasting\recipes\cypher.json +2c292e12b5e85b1701740c222e5c5465799ad1dc data\hexcasting\recipes\pride_colorizer_aroace.json +dcc9bf721dd40724abcc69f1f7e8a1610dbf88f3 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_door.json +f77518b6993fe8e31de10af286c33ab72c0f9077 data\hexcasting\advancements\recipes\redstone\impetus\empty.json +93ed0491548920bc75797d18501c750ef07fe3ea data\hexcasting\advancements\recipes\misc\pride_colorizer_bisexual.json +27dc4a1647f264c45b27f5552fd9403a02853484 data\hexcasting\advancements\recipes\tools\spellbook.json +7166cd4355d11c209bc7749bc862caddcfd795fb data\hexcasting\recipes\dye_colorizer_cyan.json +b6720c1c73455ad817bac9b5ca2ca045c5c4050c data\hexcasting\recipes\pride_colorizer_agender.json +ed5c690324e3d9b55599f00f078ae225072a2e7f data\hexcasting\recipes\brainsweep\impetus_rightclick.json +c4b985635c3b1a519d7a83da65daba5bdd3a5f59 data\hexcasting\advancements\recipes\decorations\ageing_scroll_paper_lantern.json +846baaef37844216b57bb9b35e52b1bb6b56b413 data\hexcasting\advancements\recipes\decorations\scroll_small.json +441f336edb635e5d8c2a7183906fed1c501f06fd data\hexcasting\recipes\pride_colorizer_bisexual.json +f80dbf59957be175fbcd63224005e09c4cd1a122 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_citrine.json +a72a0fcc0f3a81d31b30a7a626aef537796ca73b data\hexcasting\advancements\recipes\tools\staff\quenched.json +8f8773a541bc6a4a6c55a23f4f98b5da4f61a031 data\hexcasting\recipes\scroll_paper.json +4680e9dafcf9b60b3485609519d66eefcfd539bc data\hexcasting\recipes\staff\dark_oak.json +77369113dc54d1c64b9101861dd8a1930bf1c1c4 data\hexcasting\recipes\edified_wood.json +45915b542d8070f2502a4047218679b08033b12d data\hexcasting\advancements\recipes\decorations\scroll_paper_lantern.json +a366ea3750adc0d336ab8f318c40baed3f9c3eb7 data\hexcasting\recipes\brainsweep\impetus_storedplayer.json +151875101066f7af5788c7a2e1c6b342971a546a data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_wood.json +b94bc4dd4a63db10af86c524ba00eae157c1824b data\hexcasting\advancements\recipes\building_blocks\edified_fence_gate.json +c2a0a489967db4064dfbe1ee6367e132665f3c00 data\hexcasting\recipes\edified_slab.json +5e28e2c352366720ce91b73f8c8c38e217f7198d data\hexcasting\recipes\edified_fence_gate.json +6493676f8ca93a7be8d70e25d69ddad935b3f16b data\hexcasting\advancements\recipes\tools\lens.json +b5946314683e5a823b577a18d13fb437a35aafd5 data\hexcasting\recipes\decompose_quenched_shard\charged.json +c03c81dc123294472e8bb6f836c319e96f8db4f5 data\hexcasting\advancements\recipes\building_blocks\edified_fence.json +b29f9d9c14e60ded1148680e2e0ef405b5a3c845 data\hexcasting\advancements\recipes\misc\uuid_colorizer.json +78958099bf4337ad281580d90f434b3074ad18c8 data\hexcasting\recipes\pride_colorizer_genderqueer.json +0b172aef920da7ba63fe152903ce005c1f5df5f1 data\hexcasting\recipes\staff\acacia.json +31ec6474ddae967a6c1dadf9be8292d375510364 data\hexcasting\advancements\recipes\building_blocks\edified_tile.json +d47352426739a0fc500a385d820d767a307e1d16 data\hexcasting\advancements\recipes\misc\dye_colorizer_black.json +095aeb2882c6849f10fb6536e7c780790778e5e7 data\hexcasting\recipes\staff\jungle.json +923e7cd200518042f11474713eca9ccad126dab7 data\hexcasting\recipes\staff\spruce.json +fd7c8325fcaa6a718e90c09251b447fb365523d4 data\hexcasting\recipes\pride_colorizer_demiboy.json +2b64261bd4aefdc55d35400f25835434f88856cf data\hexcasting\recipes\amethyst_tiles.json +12bd3d04c791ef16aad5e992f038d6726229a436 data\hexcasting\advancements\recipes\tools\artifact.json +de38d15e7a91c77df24c1dc954b3e98ee197876f data\hexcasting\recipes\focus.json +fd2f25b0a71806c96af5a307fad76f66de6210a4 data\hexcasting\advancements\recipes\building_blocks\slate_block.json +1ad54df5eaee3d1e810d2c91bd03f626084e30b6 data\hexcasting\recipes\edified_trapdoor.json +4aaefc65af5fe69d312247fdda7d983edf8dcd9a data\hexcasting\recipes\pride_colorizer_intersex.json +b20be6eb5a8b60567871444e65d773ec9a67ece1 data\hexcasting\recipes\staff\crimson.json +775560efa36581389c0319435bda035be262ed4f data\hexcasting\advancements\recipes\building_blocks\edified_stairs.json +ce9d0b976f7cc8ad4a0815bbea6c43115addb90f data\hexcasting\advancements\recipes\building_blocks\scroll_paper.json +db5ae3a2fda235cf1c83fd83e0026a262e668217 data\hexcasting\advancements\recipes\building_blocks\edified_slab.json +06ca609ba1a32f094cf6edbc989bc9ddaf9d342c data\hexcasting\advancements\recipes\misc\pride_colorizer_genderfluid.json +af8fe74b624df4a31727347b9826614a66092b0a data\hexcasting\advancements\recipes\misc\pride_colorizer_agender.json +664ce1a38c9b1c9ec21b7e078631e181fc0b2498 data\hexcasting\recipes\staff\edified.json +b6e762c198b9632defd7f8b11287702abecd681d data\hexcasting\recipes\staff\mindsplice.json +5401828f85e709b5817ecc8464dc63e536a730dc data\hexcasting\recipes\staff\cherry.json +51b047601368a103be166d907633b196d2d8a4e8 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log.json +42b8e462de1d7006de3a7658757377450e773107 data\hexcasting\advancements\recipes\misc\dye_colorizer_blue.json +499c5c09e3772989350f9ab3264b8692449a6dea data\hexcasting\advancements\recipes\misc\pride_colorizer_gay.json +30352d8ad510768770bb1b2d378959b7a502f825 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_look.json +6ed61e03c51dc653cd66e643a6d33fe9105ff171 data\hexcasting\advancements\recipes\brainsweep\brainsweep\directrix_boolean.json +0ead307e47242ba140584f6bd20088a1fa7c2909 data\hexcasting\recipes\directrix\empty.json +68ab70e0b4e432a3492767c5597ecd836f106714 data\hexcasting\advancements\recipes\tools\staff\mindsplice.json +5fab1b9c93304a53a4c305b511704458e4593444 data\hexcasting\recipes\pride_colorizer_demigirl.json +170af3c83a45f9550827cc48e4bb5a621d06d685 data\hexcasting\advancements\recipes\misc\pride_colorizer_transgender.json +7f2f29981df2ca4464ee0250180e670f5331f65b data\hexcasting\recipes\dye_colorizer_pink.json +61e53f02baefd31308e99407d56403dfc18e36e1 data\hexcasting\recipes\akashic_connector.json +7aa3bf4a3d6fb92743b29dfe89d50537fefc0db9 data\hexcasting\advancements\recipes\misc\pride_colorizer_intersex.json +eb9ebf77f0daa32f665a60888fcda19c940f0b2f data\hexcasting\advancements\recipes\misc\pride_colorizer_demigirl.json +410bfde90cb977db3f13814e94484fa11fca7cfc data\hexcasting\recipes\thought_knot.json +55ea553a96e1d6a54385890f7c48fe7b2bed6871 data\hexcasting\advancements\recipes\tools\trinket.json +e765ee2bd324240e8ed3d625be431de3281f0070 data\hexcasting\recipes\dye_colorizer_gray.json +ad647a2078099344ea7f9836a68e1bf8e8119277 data\hexcasting\advancements\recipes\misc\dye_colorizer_brown.json +8c043c7f6a7911b67324e2fd42f0b3b19a792af3 data\hexcasting\recipes\ancient_scroll_paper_lantern.json diff --git a/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac b/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac index c5701d8cb7..7e9cc6b47f 100644 --- a/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac +++ b/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac @@ -1,6 +1,14 @@ -// 1.20.1 2023-12-24T17:58:56.8940231 Global Loot Modifiers : hexcasting -fcf77123631746f3ee4e815183c0731c3ec206c9 data/forge/loot_modifiers/global_loot_modifiers.json +// 1.20.1 2024-12-11T19:01:35.255688 Global Loot Modifiers : hexcasting +aea957ba78a93cace2c9959df83ed396b66d732f data/forge/loot_modifiers/global_loot_modifiers.json 28ca895a27221312c2451f26646111a68aadbf6c data/hexcasting/loot_modifiers/amethyst_cluster.json +5dd05e6f8f0e406b529bc209b393410553584fdf data/hexcasting/loot_modifiers/cypher/hexcasting/random_cypher.json +009da1f70c3aaaa4f8474eb08217821638d8c02c data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json +27481d7099d4914cd97e4ed7da8fd69327bb376a data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json +9cc4deb22f8d70d600587a48f2a1243a8040cb94 data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json +1cd1a2c1276ade2d4141ee9b698948ba38e8c7ae data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json +a76a565a7d4fb07e4a713b1f9ef021e729ed69bb data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json +e8d2d9f35be1e4561b28f0bff9811cf1e68befe9 data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json +e1e5e0b90c5ccebd817d6983f671a5197f349e4b data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json f98707c91dc8712409833df1e5da245e9b14ebfa data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json 16b4bbb5358f2fcad31a8b796cdc3eef28caaf09 data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json 6d6a9fd35a8f4e94c7ae64bf8c130b40d0d7d0e4 data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json @@ -11,6 +19,7 @@ d1b282c57a8f5d1a37f3b87fbdba408b2a1b1415 data/hexcasting/loot_modifiers/lore/min e52b9cba9d685a2ca7ea7db629c7c0990f12be26 data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json a59a9c55b02b76c0e3f6a2ee4fa7bcf3ab538595 data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json 348688be7af2a3ea62c605428c958e62e449252d data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json +479260c4206a3f664f5077a7c43e3ac93e3fdc87 data/hexcasting/loot_modifiers/scroll/hexcasting/random_scroll.json a89a9e3113b83c6eb978f101aad42a6b37e7c1d8 data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json bfac0ff9e84cd974ccfb47edc9dce78476470103 data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json 0fcb299789a1b0162ab81a025a06b1aab5eb504b data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json diff --git a/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json index 978f1f8d21..5c64c0663d 100644 --- a/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json +++ b/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json @@ -3,27 +3,36 @@ "hexcasting:scroll/minecraft/chests/nether_bridge", "hexcasting:scroll/minecraft/chests/village/village_cartographer", "hexcasting:lore/minecraft/chests/village/village_taiga_house", + "hexcasting:cypher/minecraft/chests/ancient_city", + "hexcasting:cypher/minecraft/chests/jungle_temple", "hexcasting:scroll/minecraft/chests/shipwreck_map", "hexcasting:lore/minecraft/chests/village/village_snowy_house", "hexcasting:scroll/minecraft/chests/abandoned_mineshaft", + "hexcasting:cypher/minecraft/chests/simple_dungeon", + "hexcasting:cypher/minecraft/chests/desert_pyramid", "hexcasting:amethyst_cluster", "hexcasting:lore/minecraft/chests/village/village_plains_house", "hexcasting:lore/minecraft/chests/stronghold_library", "hexcasting:scroll/minecraft/chests/bastion_other", "hexcasting:lore/minecraft/chests/woodland_mansion", + "hexcasting:scroll/hexcasting/random_scroll", "hexcasting:lore/minecraft/chests/village/village_desert_house", "hexcasting:scroll/minecraft/chests/end_city_treasure", "hexcasting:scroll/minecraft/chests/jungle_temple", "hexcasting:scroll/minecraft/chests/bastion_treasure", + "hexcasting:cypher/hexcasting/random_cypher", "hexcasting:lore/minecraft/chests/village/village_savanna_house", "hexcasting:scroll/minecraft/chests/pillager_outpost", "hexcasting:scroll/minecraft/chests/desert_pyramid", "hexcasting:lore/minecraft/chests/abandoned_mineshaft", "hexcasting:lore/minecraft/chests/pillager_outpost", + "hexcasting:cypher/minecraft/chests/stronghold_corridor", "hexcasting:scroll/minecraft/chests/ancient_city", "hexcasting:scroll/minecraft/chests/stronghold_library", "hexcasting:lore/minecraft/chests/simple_dungeon", + "hexcasting:cypher/minecraft/chests/abandoned_mineshaft", "hexcasting:scroll/minecraft/chests/woodland_mansion", + "hexcasting:cypher/minecraft/chests/nether_bridge", "hexcasting:scroll/minecraft/chests/simple_dungeon" ], "replace": false diff --git a/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json new file mode 100644 index 0000000000..11a24e5644 --- /dev/null +++ b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "forge:loot_table_id", + "loot_table_id": "minecraft:chests/abandoned_mineshaft" + } + ] +} \ No newline at end of file diff --git a/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json new file mode 100644 index 0000000000..5be9854194 --- /dev/null +++ b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "forge:loot_table_id", + "loot_table_id": "minecraft:chests/ancient_city" + } + ] +} \ No newline at end of file diff --git a/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json new file mode 100644 index 0000000000..202e48915f --- /dev/null +++ b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "forge:loot_table_id", + "loot_table_id": "minecraft:chests/desert_pyramid" + } + ] +} \ No newline at end of file diff --git a/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json new file mode 100644 index 0000000000..20c453b205 --- /dev/null +++ b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "forge:loot_table_id", + "loot_table_id": "minecraft:chests/jungle_temple" + } + ] +} \ No newline at end of file diff --git a/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json new file mode 100644 index 0000000000..abc331648e --- /dev/null +++ b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "forge:loot_table_id", + "loot_table_id": "minecraft:chests/nether_bridge" + } + ] +} \ No newline at end of file diff --git a/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json new file mode 100644 index 0000000000..d792919658 --- /dev/null +++ b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "forge:loot_table_id", + "loot_table_id": "minecraft:chests/simple_dungeon" + } + ] +} \ No newline at end of file diff --git a/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json new file mode 100644 index 0000000000..e8d6069ad3 --- /dev/null +++ b/Forge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "forge:loot_table_id", + "loot_table_id": "minecraft:chests/stronghold_corridor" + } + ] +} \ No newline at end of file From c3bc9e22a74d900066072fe79fa19ccd2bbeac44 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Thu, 23 Jan 2025 15:53:20 -0500 Subject: [PATCH 39/81] Datagen but properly --- .../.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 | 2 +- .../.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c | 4 ++-- .../.cache/3cb4ab563deee432e7d307024048f57946bafb1c | 2 +- .../.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 | 2 +- .../.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b | 6 +++--- .../.cache/d4b3e6634c30118e1127c02b727ea285752e5aac | 6 ++---- .../data/forge/loot_modifiers/global_loot_modifiers.json | 2 -- 7 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 b/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 index a81ebceb63..a2a95b576a 100644 --- a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 +++ b/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 @@ -1,4 +1,4 @@ -// 1.20.1 2024-12-12T01:28:26.4771358 Hex Casting/Loot Tables +// 1.20.1 2025-01-23T15:50:44.3944222 Hex Casting/Loot Tables 4efd95d408d050c36ff21b18f3c37116491fef92 data\hexcasting\loot_tables\blocks\directrix\redstone.json c81a5cb81141ab1fe09dd5dd3a0968b69dfffbd7 data\hexcasting\loot_tables\blocks\stripped_edified_log.json a62ffbcec2aa40172e05cd9fcd8e70e295d008e9 data\hexcasting\loot_tables\blocks\edified_fence_gate.json diff --git a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c b/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c index 4388ede08c..0e1d57cba2 100644 --- a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c +++ b/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c @@ -1,4 +1,4 @@ -// 1.20.1 2024-12-12T01:28:26.4883123 Hex Casting/Tags for minecraft:item +// 1.20.1 2025-01-23T15:50:44.4049409 Hex Casting/Tags for minecraft:item e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\items\planks.json c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs.json 20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\wooden_buttons.json @@ -11,8 +11,8 @@ fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\wooden_doors. c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\hexcasting\tags\items\edified_logs.json c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\items\brainswept_circle_components.json 30780136e6469a01369d7e278998edb6d7f6a16b data\hexcasting\tags\items\staves.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\wooden_trapdoors.json 5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\wooden_slabs.json +5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\wooden_trapdoors.json 9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\items\directrices.json e186f43ed06770e698c886691f91b2c6acdb5a2a data\hexcasting\tags\items\seal_materials.json 5928bad07d3872bb60f29ef4f3c885c8e1967c20 data\hexcasting\tags\items\phial_base.json diff --git a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c b/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c index d295e46c6b..c7442d4c4d 100644 --- a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c +++ b/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c @@ -1,4 +1,4 @@ -// 1.20.1 2024-12-12T01:28:26.4933098 Hex Casting/Tags for hexcasting:action +// 1.20.1 2025-01-23T15:50:44.4152906 Hex Casting/Tags for hexcasting:action 6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\per_world_pattern.json 6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\can_start_enlighten.json 6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\requires_enlightenment.json diff --git a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 b/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 index 4a10315f10..657625c00a 100644 --- a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 +++ b/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 @@ -1,4 +1,4 @@ -// 1.20.1 2024-12-12T01:28:26.4847791 Hex Casting/Tags for minecraft:block +// 1.20.1 2025-01-23T15:50:44.400399 Hex Casting/Tags for minecraft:block e8d5ef7eabb567228b279b2419e4f042082d7491 data\minecraft\tags\blocks\fences.json 7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\fence_gates.json fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\doors.json diff --git a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b b/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b index c85b073fc8..c845076e2a 100644 --- a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b +++ b/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b @@ -1,4 +1,4 @@ -// 1.20.1 2024-12-12T01:28:26.4893103 Hex Casting/Recipes +// 1.20.1 2025-01-23T15:50:44.4089311 Hex Casting/Recipes 1d1e73244fb3da633d8a5f84bad93c6022a94368 data\hexcasting\advancements\recipes\misc\pride_colorizer_demiboy.json 49e706193bb57a957091e419bd0d8aa58135da1f data\hexcasting\recipes\dye_colorizer_green.json 071e5875b13b60aac33bc97e408d2ca710ac5d02 data\hexcasting\advancements\recipes\building_blocks\stonecutting\amethyst_tiles.json @@ -108,8 +108,8 @@ c3f7b03fe184ed5e54a8ae06d130adf507b7683d data\hexcasting\recipes\staff\bamboo.js b10d590e918e35b16578a8b739a1c4e7e2202e16 data\hexcasting\advancements\recipes\misc\dye_colorizer_cyan.json 0e792d49c81d2164e827d1bdedaa0fa358dfc437 data\hexcasting\advancements\recipes\misc\pride_colorizer_aromantic.json afb422ad4a918ee0161bf077f09475bb1da2b4eb data\hexcasting\recipes\amethyst_dust_unpacking.json -011f8daf15148d4b77686c6d382d8f5c288a333d data\hexcasting\advancements\recipes\building_blocks\ancient_scroll_paper.json 98c0843e6a83b91820f1c720e206295eec20ff95 data\hexcasting\recipes\ancient_scroll_paper.json +011f8daf15148d4b77686c6d382d8f5c288a333d data\hexcasting\advancements\recipes\building_blocks\ancient_scroll_paper.json 9b7c5220fbaf3e84fa9e81eae322eed5d37b22d3 data\hexcasting\recipes\pride_colorizer_transgender.json a1f9df0537c0ef33a1164cf94e8ff4b1094f889f data\hexcasting\advancements\recipes\tools\staff\warped.json 54335e0004423899ad37763a1d8456cc0a6e72a7 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\charged.json @@ -211,8 +211,8 @@ b6e762c198b9632defd7f8b11287702abecd681d data\hexcasting\recipes\staff\mindsplic 170af3c83a45f9550827cc48e4bb5a621d06d685 data\hexcasting\advancements\recipes\misc\pride_colorizer_transgender.json 7f2f29981df2ca4464ee0250180e670f5331f65b data\hexcasting\recipes\dye_colorizer_pink.json 61e53f02baefd31308e99407d56403dfc18e36e1 data\hexcasting\recipes\akashic_connector.json -7aa3bf4a3d6fb92743b29dfe89d50537fefc0db9 data\hexcasting\advancements\recipes\misc\pride_colorizer_intersex.json eb9ebf77f0daa32f665a60888fcda19c940f0b2f data\hexcasting\advancements\recipes\misc\pride_colorizer_demigirl.json +7aa3bf4a3d6fb92743b29dfe89d50537fefc0db9 data\hexcasting\advancements\recipes\misc\pride_colorizer_intersex.json 410bfde90cb977db3f13814e94484fa11fca7cfc data\hexcasting\recipes\thought_knot.json 55ea553a96e1d6a54385890f7c48fe7b2bed6871 data\hexcasting\advancements\recipes\tools\trinket.json e765ee2bd324240e8ed3d625be431de3281f0070 data\hexcasting\recipes\dye_colorizer_gray.json diff --git a/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac b/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac index 7e9cc6b47f..af96c4a883 100644 --- a/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac +++ b/Forge/src/generated/resources/.cache/d4b3e6634c30118e1127c02b727ea285752e5aac @@ -1,7 +1,6 @@ -// 1.20.1 2024-12-11T19:01:35.255688 Global Loot Modifiers : hexcasting -aea957ba78a93cace2c9959df83ed396b66d732f data/forge/loot_modifiers/global_loot_modifiers.json +// 1.20.1 2025-01-23T15:52:03.6220728 Global Loot Modifiers : hexcasting +ff299d5fca3672c5ca0684cf9db095de2bae279f data/forge/loot_modifiers/global_loot_modifiers.json 28ca895a27221312c2451f26646111a68aadbf6c data/hexcasting/loot_modifiers/amethyst_cluster.json -5dd05e6f8f0e406b529bc209b393410553584fdf data/hexcasting/loot_modifiers/cypher/hexcasting/random_cypher.json 009da1f70c3aaaa4f8474eb08217821638d8c02c data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json 27481d7099d4914cd97e4ed7da8fd69327bb376a data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json 9cc4deb22f8d70d600587a48f2a1243a8040cb94 data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json @@ -19,7 +18,6 @@ d1b282c57a8f5d1a37f3b87fbdba408b2a1b1415 data/hexcasting/loot_modifiers/lore/min e52b9cba9d685a2ca7ea7db629c7c0990f12be26 data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json a59a9c55b02b76c0e3f6a2ee4fa7bcf3ab538595 data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json 348688be7af2a3ea62c605428c958e62e449252d data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json -479260c4206a3f664f5077a7c43e3ac93e3fdc87 data/hexcasting/loot_modifiers/scroll/hexcasting/random_scroll.json a89a9e3113b83c6eb978f101aad42a6b37e7c1d8 data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json bfac0ff9e84cd974ccfb47edc9dce78476470103 data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json 0fcb299789a1b0162ab81a025a06b1aab5eb504b data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json diff --git a/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json index 5c64c0663d..46e71c9b97 100644 --- a/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json +++ b/Forge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json @@ -15,12 +15,10 @@ "hexcasting:lore/minecraft/chests/stronghold_library", "hexcasting:scroll/minecraft/chests/bastion_other", "hexcasting:lore/minecraft/chests/woodland_mansion", - "hexcasting:scroll/hexcasting/random_scroll", "hexcasting:lore/minecraft/chests/village/village_desert_house", "hexcasting:scroll/minecraft/chests/end_city_treasure", "hexcasting:scroll/minecraft/chests/jungle_temple", "hexcasting:scroll/minecraft/chests/bastion_treasure", - "hexcasting:cypher/hexcasting/random_cypher", "hexcasting:lore/minecraft/chests/village/village_savanna_house", "hexcasting:scroll/minecraft/chests/pillager_outpost", "hexcasting:scroll/minecraft/chests/desert_pyramid", From bff340dc4ce8df55f88153b8dfd50464e6ad3fcf Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Thu, 23 Jan 2025 18:15:23 -0500 Subject: [PATCH 40/81] Improve OpMakePackagedSpell a little --- .../casting/actions/spells/OpMakePackagedSpell.kt | 9 ++++++--- .../petrak/hexcasting/common/lib/hex/HexActions.java | 12 ++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt index c92b1f6d28..9420e53242 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt @@ -17,10 +17,13 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.item.ItemEntity import net.minecraft.world.item.ItemStack +import net.minecraft.network.chat.Component import java.util.function.Predicate; // TODO: How to handle in circles -class OpMakePackagedSpell(val isValid: Predicate, val expectedType: T, val cost: Long) : SpellAction { +class OpMakePackagedSpell(val isValid: Predicate, val expectedTypeDesc: Component, val cost: Long) : SpellAction { + constructor(itemType: ItemPackagedHex, cost: Long) : this({s -> s.`is`(itemType)}, itemType.description, cost) {} + override val argc = 2 override fun execute( args: List, @@ -33,11 +36,11 @@ class OpMakePackagedSpell(val isValid: Predicate val hexHolder = IXplatAbstractions.INSTANCE.findHexHolder(it) isValid.test(it) && hexHolder != null && !hexHolder.hasHex() } - ?: throw MishapBadOffhandItem(ItemStack.EMPTY.copy(), expectedType.description) // TODO: hack + ?: throw MishapBadOffhandItem(ItemStack.EMPTY.copy(), expectedTypeDesc) // TODO: hack val hexHolder = IXplatAbstractions.INSTANCE.findHexHolder(handStack) if (!isValid.test(handStack)) { - throw MishapBadOffhandItem(handStack, expectedType.description) + throw MishapBadOffhandItem(handStack, expectedTypeDesc) } else if (hexHolder == null || hexHolder.hasHex()) { throw MishapBadOffhandItem.of(handStack, "iota.write") } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java index 13b8f72bd2..e178b1e011 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java @@ -275,16 +275,16 @@ public class HexActions { new ActionRegistryEntry(HexPattern.fromAngles("adaa", HexDir.WEST), OpBeep.INSTANCE)); public static final ActionRegistryEntry CRAFT$CYPHER = make("craft/cypher", new ActionRegistryEntry( - HexPattern.fromAngles("waqqqqq", HexDir.EAST), new OpMakePackagedSpell<>(s -> (s.is(HexItems.CYPHER)||s.is(HexItems.ANCIENT_CYPHER)), - HexItems.CYPHER, MediaConstants.CRYSTAL_UNIT) + HexPattern.fromAngles("waqqqqq", HexDir.EAST), + new OpMakePackagedSpell(s -> (s.is(HexItems.CYPHER)||s.is(HexItems.ANCIENT_CYPHER)), HexItems.CYPHER.getDescription(), MediaConstants.CRYSTAL_UNIT) )); public static final ActionRegistryEntry CRAFT$TRINKET = make("craft/trinket", new ActionRegistryEntry( - HexPattern.fromAngles( - "wwaqqqqqeaqeaeqqqeaeq", HexDir.EAST), new OpMakePackagedSpell<>(s -> s.is(HexItems.TRINKET), - HexItems.TRINKET, 5 * MediaConstants.CRYSTAL_UNIT))); + HexPattern.fromAngles("wwaqqqqqeaqeaeqqqeaeq", HexDir.EAST), + new OpMakePackagedSpell(HexItems.TRINKET, 5 * MediaConstants.CRYSTAL_UNIT) + )); public static final ActionRegistryEntry CRAFT$ARTIFACT = make("craft/artifact", new ActionRegistryEntry( HexPattern.fromAngles("wwaqqqqqeawqwqwqwqwqwwqqeadaeqqeqqeadaeqq", HexDir.EAST), - new OpMakePackagedSpell<>(s -> s.is(HexItems.ARTIFACT), HexItems.ARTIFACT, 10 * MediaConstants.CRYSTAL_UNIT) + new OpMakePackagedSpell(HexItems.ARTIFACT, 10 * MediaConstants.CRYSTAL_UNIT) )); public static final ActionRegistryEntry CRAFT$BATTERY = make("craft/battery", new ActionRegistryEntry( HexPattern.fromAngles("aqqqaqwwaqqqqqeqaqqqawwqwqwqwqwqw", HexDir.SOUTH_WEST), OpMakeBattery.INSTANCE)); From f5cd0ff9f0991f84ced928a0cc5ef3e627d7b93b Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Thu, 23 Jan 2025 21:00:35 -0500 Subject: [PATCH 41/81] Remove config for loot hexes, hardcode for now --- .../petrak/hexcasting/api/mod/HexConfig.java | 2 -- .../loot/AddHexToAncientCypherFunc.java | 29 ++++++++++++++++--- .../common/loot/HexLootHandler.java | 21 -------------- .../hexcasting/lang/en_us.flatten.json5 | 4 --- .../hexcasting/fabric/FabricHexConfig.java | 7 ----- .../hexcasting/forge/ForgeHexConfig.java | 12 -------- 6 files changed, 25 insertions(+), 50 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 93b9dbba5b..2f7a9713b6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -75,8 +75,6 @@ public interface ServerConfigAccess { boolean trueNameHasAmbit(); - List getRandomLootHex(RandomSource rand); - int DEFAULT_MAX_OP_COUNT = 100_000; int DEFAULT_MAX_SPELL_CIRCLE_LENGTH = 1024; int DEFAULT_OP_BREAK_HARVEST_LEVEL = 3; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java index 3055d1020e..5fd960c834 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java @@ -22,7 +22,8 @@ import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import java.util.ArrayList; +import java.util.List; +import com.mojang.datafixers.util.Pair; /** * Add a random preset hex to the ancient cypher, and select a random variant. @@ -39,17 +40,17 @@ public AddHexToAncientCypherFunc(LootItemCondition[] lootItemConditions) { * This doesn't actually have any params so extract behaviour out for the benefit of forge */ public static ItemStack doStatic(ItemStack stack, RandomSource rand) { - var fullHex = HexConfig.server().getRandomLootHex(rand); + var hex = LOOT_HEXES.get(rand.nextInt(16)); var patsTag = new ListTag(); // skip first element since it's the name, not a pattern - for (var patString : fullHex.subList(1,fullHex.size())){ + for (var patString : hex.getSecond()){ var pieces = patString.split(" "); var pat = HexPattern.fromAngles(pieces[1],HexDir.fromString(pieces[0])); patsTag.add(IotaType.serialize(new PatternIota(pat))); } var tag = new CompoundTag(); - tag.putString(ItemAncientCypher.TAG_HEX_NAME, fullHex.get(0)); + tag.putString(ItemAncientCypher.TAG_HEX_NAME, hex.getFirst()); tag.putLong(ItemAncientCypher.TAG_MEDIA, 32*MediaConstants.SHARD_UNIT); tag.putLong(ItemAncientCypher.TAG_MAX_MEDIA, 32*MediaConstants.SHARD_UNIT); tag.putInt(VariantItem.TAG_VARIANT, rand.nextInt(8)); @@ -81,4 +82,24 @@ public AddHexToAncientCypherFunc deserialize(JsonObject object, JsonDeserializat return new AddHexToAncientCypherFunc(conditions); } } + + // TODO: make this datapackable + private static final List> LOOT_HEXES = List.of( + new Pair<>("hexcasting.loot_hex.shatter", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","EAST qaqqqqq"}), + new Pair<>("hexcasting.loot_hex.kindle", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","SOUTH_EAST aaqawawa"}), + new Pair<>("hexcasting.loot_hex.illuminate", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","NORTH_EAST qqd"}), + new Pair<>("hexcasting.loot_hex.growth", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","SOUTH_EAST aqaaedwd","EAST aadaadaa","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw"}), + new Pair<>("hexcasting.loot_hex.lunge", new String[] {"NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}), + new Pair<>("hexcasting.loot_hex.sidestep", new String[] {"NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","NORTH_WEST eqqq","SOUTH_EAST aqaawd","SOUTH_EAST e","NORTH_WEST qqqqqew","SOUTH_WEST eeeeeqw","SOUTH_EAST awdd","NORTH_EAST wdedw","SOUTH_WEST awqqqwaqw"}), + new Pair<>("hexcasting.loot_hex.ascend", new String[] {"NORTH_EAST qaq","SOUTH_EAST aqaae","WEST qqqqqawwawawd"}), + new Pair<>("hexcasting.loot_hex.blink", new String[] {"NORTH_EAST qaq","EAST aadaa","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","NORTH_EAST qaq","EAST aa","NORTH_WEST wddw","NORTH_EAST wqaqw","SOUTH_EAST aqaaw","NORTH_WEST wddw","SOUTH_WEST awqqqwaq"}), + new Pair<>("hexcasting.loot_hex.blastoff", new String[] {"NORTH_EAST qaq","NORTH_WEST qqqqqew","SOUTH_EAST aqaawaa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}), + new Pair<>("hexcasting.loot_hex.radar", new String[] {"WEST qqq","EAST aadaa","EAST aa","SOUTH_EAST aqaawa","SOUTH_WEST ewdqdwe","NORTH_EAST de","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaeaqq","SOUTH_EAST qqqqqwdeddwd","NORTH_EAST dadad"}), + new Pair<>("hexcasting.loot_hex.beckon", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST weaqa","EAST aadaa","EAST dd","NORTH_EAST qaq","EAST aa","EAST aawdd","NORTH_WEST wddw","EAST aadaa","NORTH_EAST wqaqw","NORTH_EAST wdedw","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"}), + new Pair<>("hexcasting.loot_hex.detonate", new String[] {"NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaedwd","EAST ddwddwdd"}), + new Pair<>("hexcasting.loot_hex.shockwave", new String[] {"NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaawaa","EAST aadaadaa","SOUTH_EAST aqawqadaq","SOUTH_EAST aqaaedwd","EAST aawaawaa","NORTH_EAST qqa","EAST qaqqqqq"}), + new Pair<>("hexcasting.loot_hex.heat_wave", new String[] {"WEST qqq","SOUTH_EAST aaqawawa","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwded","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"}), + new Pair<>("hexcasting.loot_hex.wither_wave", new String[] {"WEST qqq","SOUTH_EAST aqaae","SOUTH_EAST aqaaw","SOUTH_WEST qqqqqaewawawe","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwdeddwd","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"}), + new Pair<>("hexcasting.loot_hex.flight_zone", new String[] {"NORTH_EAST qaq","SOUTH_EAST aqaaq","SOUTH_WEST awawaawq"}) + ); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java index 6cef0b5377..5d38b52bda 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java @@ -4,8 +4,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; -import java.util.List; - import static at.petrak.hexcasting.api.HexAPI.modLoc; // https://github.com/VazkiiMods/Botania/blob/1.18.x/Xplat/src/main/java/vazkii/botania/common/loot/LootHandler.java @@ -73,25 +71,6 @@ public class HexLootHandler { new ResourceLocation("minecraft", "chests/nether_bridge") ); - public static final ImmutableList> DEFAULT_LOOT_HEXES = ImmutableList.of( - List.of("hexcasting.loot_hex.shatter","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","EAST qaqqqqq"), - List.of("hexcasting.loot_hex.kindle","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","SOUTH_EAST aaqawawa"), - List.of("hexcasting.loot_hex.illuminate","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","NORTH_EAST qqd"), - List.of("hexcasting.loot_hex.growth","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST aadadaaw","EAST wqaawdd","NORTH_EAST ddqdd","EAST weddwaa","NORTH_EAST waaw","SOUTH_EAST aqaaedwd","EAST aadaadaa","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw","NORTH_EAST wqaqwawqaqw"), - List.of("hexcasting.loot_hex.lunge","NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"), - List.of("hexcasting.loot_hex.sidestep","NORTH_EAST qaq","EAST aadaa","NORTH_EAST wa","NORTH_WEST eqqq","SOUTH_EAST aqaawd","SOUTH_EAST e","NORTH_WEST qqqqqew","SOUTH_WEST eeeeeqw","SOUTH_EAST awdd","NORTH_EAST wdedw","SOUTH_WEST awqqqwaqw"), - List.of("hexcasting.loot_hex.ascend","NORTH_EAST qaq","SOUTH_EAST aqaae","WEST qqqqqawwawawd"), - List.of("hexcasting.loot_hex.blink","NORTH_EAST qaq","EAST aadaa","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","NORTH_EAST qaq","EAST aa","NORTH_WEST wddw","NORTH_EAST wqaqw","SOUTH_EAST aqaaw","NORTH_WEST wddw","SOUTH_WEST awqqqwaq"), - List.of("hexcasting.loot_hex.blastoff","NORTH_EAST qaq","NORTH_WEST qqqqqew","SOUTH_EAST aqaawaa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"), - List.of("hexcasting.loot_hex.radar","WEST qqq","EAST aadaa","EAST aa","SOUTH_EAST aqaawa","SOUTH_WEST ewdqdwe","NORTH_EAST de","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaeaqq","SOUTH_EAST qqqqqwdeddwd","NORTH_EAST dadad"), - List.of("hexcasting.loot_hex.beckon","NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST weaqa","EAST aadaa","EAST dd","NORTH_EAST qaq","EAST aa","EAST aawdd","NORTH_WEST wddw","EAST aadaa","NORTH_EAST wqaqw","NORTH_EAST wdedw","SOUTH_EAST aqaawa","SOUTH_EAST waqaw","SOUTH_WEST awqqqwaqw"), - List.of("hexcasting.loot_hex.detonate","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaaedwd","EAST ddwddwdd"), - List.of("hexcasting.loot_hex.shockwave","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaawaa","EAST aadaadaa","SOUTH_EAST aqawqadaq","SOUTH_EAST aqaaedwd","EAST aawaawaa","NORTH_EAST qqa","EAST qaqqqqq"), - List.of("hexcasting.loot_hex.heat_wave","WEST qqq","SOUTH_EAST aaqawawa","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwded","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"), - List.of("hexcasting.loot_hex.wither_wave","WEST qqq","SOUTH_EAST aqaae","SOUTH_EAST aqaaw","SOUTH_WEST qqqqqaewawawe","EAST eee","NORTH_EAST qaq","EAST aa","SOUTH_EAST aqaae","SOUTH_EAST qqqqqwdeddwd","SOUTH_WEST aaqwqaa","SOUTH_EAST a","NORTH_EAST dadad"), - List.of("hexcasting.loot_hex.flight_zone","NORTH_EAST qaq","SOUTH_EAST aqaaq","SOUTH_WEST awawaawq") - ); - public static int getScrollCount(int range, RandomSource random) { return Math.max(random.nextIntBetweenInclusive(-range, range), 0); } diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index a72b00f14f..184276c8d5 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -397,10 +397,6 @@ "": "Ancient Cypher Chance", "@Tooltip": "The chance for ancient cyphers to appear in any of the above loot tables.", }, - lootHexList: { - "": "Preset Loot Hex List", - "@Tooltip": "Lists the preset hexes that can be found in ancient cyphers. The first item in each list is the name of the hex, and the others are the patterns. The name is treated as a translation key if possible, but if you add your own they should be human-readable.", - }, amethystShardModification: { "": "Amethyst Shard Drop Rate Change", "@Tooltip": "How much the number of amethyst shards dropped from clusters is increased/decreased.", diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index 003c774985..f79bd58361 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -219,8 +219,6 @@ public static final class Server implements HexConfig.ServerConfigAccess, Config private transient List cypherInjections; @ConfigEntry.Gui.Tooltip private double cypherChance = HexLootHandler.DEFAULT_CYPHER_CHANCE; - @ConfigEntry.Gui.Tooltip - private List> lootHexList = HexLootHandler.DEFAULT_LOOT_HEXES; @Override @@ -328,10 +326,5 @@ public boolean shouldInjectCyphers(ResourceLocation lootTable) { public double cypherChance() { return cypherChance; } - - public List getRandomLootHex(RandomSource rand) { - var index = rand.nextInt(this.lootHexList.size()); - return this.lootHexList.get(index); - } } } diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index 95f4635572..f321d2e017 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -150,7 +150,6 @@ public static class Server implements HexConfig.ServerConfigAccess { private static ForgeConfigSpec.ConfigValue> fewScrollTables; private static ForgeConfigSpec.ConfigValue> someScrollTables; private static ForgeConfigSpec.ConfigValue> manyScrollTables; - private static ForgeConfigSpec.ConfigValue>> lootHexList; public Server(ForgeConfigSpec.Builder builder) { @@ -174,11 +173,6 @@ public Server(ForgeConfigSpec.Builder builder) { .defineList("circleActionDenyList", List.of(), Server::isValidReslocArg); builder.pop(); - lootHexList = builder.comment( - "List of preset hexes found in loot cyphers. First element is the name, other elements are the patterns." + - "The default names use hardcoded translation keys, but custom ones should be human-readable.") - .defineList("lootHexList", HexLootHandler.DEFAULT_LOOT_HEXES, Server::isValidReslocArg); - actionDenyList = builder.comment( "Resource locations of disallowed actions. Trying to cast one of these will result in a mishap.") .defineList("actionDenyList", List.of(), Server::isValidReslocArg); @@ -235,12 +229,6 @@ public boolean trueNameHasAmbit() { return doesTrueNameHaveAmbit.get(); } - @Override - public List getRandomLootHex(RandomSource rand) { - var index = rand.nextInt(lootHexList.get().size()); - return lootHexList.get().get(index); - } - private static boolean isValidReslocArg(Object o) { return o instanceof String s && ResourceLocation.isValidResourceLocation(s); } From 5976e249f00112ea10fa5a4a306e1fd05e237003 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Mon, 3 Feb 2025 16:58:10 -0500 Subject: [PATCH 42/81] Cleanup --- .../src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java | 1 - .../hexcasting/common/loot/AddHexToAncientCypherFunc.java | 3 +-- .../main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 2f7a9713b6..19458cbc8e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -7,7 +7,6 @@ import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraft.world.level.Level; -import net.minecraft.util.RandomSource; import java.util.List; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java index 5fd960c834..aa0fa4af2b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java @@ -40,9 +40,8 @@ public AddHexToAncientCypherFunc(LootItemCondition[] lootItemConditions) { * This doesn't actually have any params so extract behaviour out for the benefit of forge */ public static ItemStack doStatic(ItemStack stack, RandomSource rand) { - var hex = LOOT_HEXES.get(rand.nextInt(16)); + var hex = LOOT_HEXES.get(rand.nextInt(LOOT_HEXES.size())); var patsTag = new ListTag(); - // skip first element since it's the name, not a pattern for (var patString : hex.getSecond()){ var pieces = patString.split(" "); var pat = HexPattern.fromAngles(pieces[1],HexDir.fromString(pieces[0])); diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index f321d2e017..a70691061d 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -1,7 +1,6 @@ package at.petrak.hexcasting.forge; import at.petrak.hexcasting.api.mod.HexConfig; -import at.petrak.hexcasting.common.loot.HexLootHandler; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; From c04d6d27c9a9cec7d26509ccfc66bb58cde549d6 Mon Sep 17 00:00:00 2001 From: Robotgiggle Date: Mon, 3 Feb 2025 17:37:11 -0500 Subject: [PATCH 43/81] Cleanup --- .../java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java | 2 +- .../data/hexcasting/patchouli_books/thehexbook/book.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java index c2dbcf67be..6ccfa837fc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java +++ b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java @@ -17,7 +17,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -// Adds ancient scrolls to the wandering trader by replacing one of the 5 junk trades +// Adds ancient scrolls to the wandering trader by replacing the special trade in the last slot @Mixin(WanderingTrader.class) public class MixinWanderingTrader { @Inject(method = "updateTrades", at = @At("RETURN")) diff --git a/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json b/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json index b99fbc81ce..146a1d2642 100644 --- a/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json +++ b/Common/src/main/resources/data/hexcasting/patchouli_books/thehexbook/book.json @@ -4,7 +4,7 @@ "version": 1, "show_progress": false, "nameplate_color": "00072b", - "creative_tab": "hexcasting:main", + "creative_tab": "hexcasting:hexcasting", "model": "hexcasting:patchouli_book", "book_texture": "hexcasting:textures/gui/patchi_book.png", "filler_texture": "hexcasting:textures/gui/patchi_filler.png", From 94bf712e10e3673306cd2251daa46b209cc5f8a5 Mon Sep 17 00:00:00 2001 From: TheDrawingCoding-Gamer Date: Wed, 29 Jan 2025 18:03:59 -0500 Subject: [PATCH 44/81] base config option for greater teleport splating --- .../java/at/petrak/hexcasting/api/mod/HexConfig.java | 3 +++ .../common/casting/actions/spells/great/OpTeleport.kt | 2 +- .../at/petrak/hexcasting/fabric/FabricHexConfig.java | 5 +++++ .../java/at/petrak/hexcasting/forge/ForgeHexConfig.java | 9 +++++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index b6e6d952bc..0bcc5a7fab 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -67,6 +67,8 @@ public interface ServerConfigAccess { boolean isActionAllowedInCircles(ResourceLocation actionID); + boolean doesGreaterTeleportSplatItems(); + boolean doVillagersTakeOffenseAtMindMurder(); // fun fact, although dimension keys are a RegistryHolder, they aren't a registry, so i can't do tags @@ -81,6 +83,7 @@ public interface ServerConfigAccess { int DEFAULT_OP_BREAK_HARVEST_LEVEL = 3; double DEFAULT_TRADER_SCROLL_CHANCE = 0.2; + boolean DEFAULT_GREATER_TELEPORT_SPLATS_ITEMS = true; boolean DEFAULT_VILLAGERS_DISLIKE_MIND_MURDER = true; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt index abd39e52e1..c349aa0bba 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt @@ -62,7 +62,7 @@ object OpTeleport : SpellAction { teleportRespectSticky(teleportee, delta, env.world) - if (teleportee is ServerPlayer && teleportee == env.castingEntity) { + if (HexConfig.server().doesGreaterTeleportSplatItems() && teleportee is ServerPlayer && teleportee == env.castingEntity) { // Drop items conditionally, based on distance teleported. // MOST IMPORTANT: Never drop main hand item, since if it's a trinket, it will get duplicated later. diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index c4d365cb17..a0ff01d315 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -182,6 +182,8 @@ public static final class Server implements HexConfig.ServerConfigAccess, Config @ConfigEntry.Gui.Tooltip private List circleActionDenyList = List.of(); @ConfigEntry.Gui.Tooltip + private boolean greaterTeleportSplatsItems = DEFAULT_GREATER_TELEPORT_SPLATS_ITEMS; + @ConfigEntry.Gui.Tooltip private boolean villagersOffendedByMindMurder = DEFAULT_VILLAGERS_DISLIKE_MIND_MURDER; @ConfigEntry.Gui.Tooltip private boolean doesTrueNameHaveAmbit = DEFAULT_TRUE_NAME_HAS_AMBIT; @@ -291,6 +293,9 @@ public boolean isActionAllowedInCircles(ResourceLocation actionID) { return noneMatch(circleActionDenyList, actionID); } + @Override + public boolean doesGreaterTeleportSplatItems() { return greaterTeleportSplatsItems; } + @Override public boolean doVillagersTakeOffenseAtMindMurder() { return villagersOffendedByMindMurder; diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index bacdece12a..121229bcfd 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -137,6 +137,8 @@ public static class Server implements HexConfig.ServerConfigAccess { private static ForgeConfigSpec.IntValue maxSpellCircleLength; private static ForgeConfigSpec.ConfigValue> actionDenyList; private static ForgeConfigSpec.ConfigValue> circleActionDenyList; + + private static ForgeConfigSpec.BooleanValue greaterTeleportSplatsItems; private static ForgeConfigSpec.BooleanValue villagersOffendedByMindMurder; private static ForgeConfigSpec.ConfigValue> tpDimDenyList; private static ForgeConfigSpec.BooleanValue doesTrueNameHaveAmbit; @@ -176,6 +178,10 @@ public Server(ForgeConfigSpec.Builder builder) { "Resource locations of disallowed actions. Trying to cast one of these will result in a mishap.") .defineList("actionDenyList", List.of(), Server::isValidReslocArg); + greaterTeleportSplatsItems = builder.comment( + "Should greater teleport splat players inventory?" + ).define("greaterTeleportSplatsItems", DEFAULT_GREATER_TELEPORT_SPLATS_ITEMS); + villagersOffendedByMindMurder = builder.comment( "Should villagers take offense when you flay the mind of their fellow villagers?") .define("villagersOffendedByMindMurder", true); @@ -213,6 +219,9 @@ public boolean isActionAllowedInCircles(ResourceLocation actionID) { return noneMatch(circleActionDenyList.get(), actionID); } + @Override + public boolean doesGreaterTeleportSplatItems() { return greaterTeleportSplatsItems.get(); } + @Override public boolean doVillagersTakeOffenseAtMindMurder() { return villagersOffendedByMindMurder.get(); From 0e20a38cc838c2753c6201326f73042465a445ff Mon Sep 17 00:00:00 2001 From: TheDrawingCoding-Gamer Date: Wed, 29 Jan 2025 18:13:19 -0500 Subject: [PATCH 45/81] Add lang string for greater teleport splat option --- .../main/resources/assets/hexcasting/lang/en_us.flatten.json5 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index af284b7a69..86c043ce36 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -373,6 +373,10 @@ "": "Circle Action Deny List", "@Tooltip": "Resource locations of disallowed actions within circles. Trying to cast one of these from a circle will result in a mishap.", }, + greaterTeleportSplatsItems: { + "": "Greater Teleport Splats Items", + "@Tooltip": "Whether items should fly out of the player's inventory when using Greater Teleport" + }, villagersOffendedByMindMurder: { "": "Villagers Offended By Mind Murder", "@Tooltip": "Whether villagers should be angry at the player when other villagers are mindflayed", From 72293dc810d23d01c6df2ec3d56d2971ed6d6fff Mon Sep 17 00:00:00 2001 From: TheDrawingCoding-Gamer Date: Mon, 3 Feb 2025 19:31:09 -0500 Subject: [PATCH 46/81] Edit wording on forge comment --- .../main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index 121229bcfd..518a81a2e1 100644 --- a/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Forge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -179,7 +179,7 @@ public Server(ForgeConfigSpec.Builder builder) { .defineList("actionDenyList", List.of(), Server::isValidReslocArg); greaterTeleportSplatsItems = builder.comment( - "Should greater teleport splat players inventory?" + "Should items fly out of the player's inventory when using Greater Teleport?" ).define("greaterTeleportSplatsItems", DEFAULT_GREATER_TELEPORT_SPLATS_ITEMS); villagersOffendedByMindMurder = builder.comment( From 9fb7d76a5fbd0b6c905f66996883bd3b4a83c8b7 Mon Sep 17 00:00:00 2001 From: bearofbusiness <61521224+bearofbusiness@users.noreply.github.com> Date: Fri, 28 Mar 2025 18:03:54 -0500 Subject: [PATCH 47/81] Update vectors.json to work with new psi domain --- .../thehexbook/en_us/entries/casting/vectors.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/vectors.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/vectors.json index 5823bfa7a3..bf28be0282 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/vectors.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/casting/vectors.json @@ -20,7 +20,7 @@ "type": "patchouli:link", "text": "hexcasting.page.vectors.3", "link_text": "hexcasting.page.vectors.3.link_text", - "url": "https://psi.vazkii.us/codex.php#vectorPrimer" + "url": "https://psi.vazkii.net/codex.php#vectorPrimer" } ] } From 2774bbb35fd2fce00eaf08bd3ee22c9e15ca904f Mon Sep 17 00:00:00 2001 From: slava110 Date: Sun, 15 Jun 2025 21:49:15 +0300 Subject: [PATCH 48/81] Fixed Gradle problems and turned off Fabric temporarily. Will come back later! --- Common/build.gradle | 8 +++++++- Neoforge/build.gradle | 14 +++++++++++++- Neoforge/gradle.properties | 4 ++-- build.gradle | 17 ++++++++++------- gradle.properties | 3 ++- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 2 +- 7 files changed, 36 insertions(+), 14 deletions(-) diff --git a/Common/build.gradle b/Common/build.gradle index 91a09e78b5..4143c84a2b 100644 --- a/Common/build.gradle +++ b/Common/build.gradle @@ -1,5 +1,5 @@ architectury { - common(["fabric", "neoforge"]) + common([/*"fabric", */"neoforge"]) } pkSubproj { @@ -9,6 +9,7 @@ pkSubproj { repositories { mavenCentral() + mavenLocal() maven { url 'https://maven.blamejared.com' } @@ -32,6 +33,11 @@ repositories { dependencies { // === MANDATORY DEPS === + // We depend on Fabric Loader here to use the Fabric @Environment annotations, + // which get remapped to the correct annotations on each platform. + // Do NOT use other classes from Fabric Loader. + //modImplementation "net.fabricmc:fabric-loader:$rootProject.fabric_loader_version" + compileOnly "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" // i do not know why the xplat and mod jars are in different coordinates compileOnly "vazkii.patchouli:Patchouli-xplat:1.21-$patchouliVersion-SNAPSHOT" diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index bea4ef7681..0632756cb7 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -1,3 +1,7 @@ +plugins { + id 'com.gradleup.shadow' +} + architectury { platformSetupLoomIde() neoForge() @@ -30,6 +34,7 @@ configurations { repositories { mavenCentral() + mavenLocal() // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: flatDir { @@ -138,4 +143,11 @@ processResources { } } -jar.finalizedBy('reobfJar') \ No newline at end of file +shadowJar { + configurations = [project.configurations.shadowBundle] + archiveClassifier = 'dev-shadow' +} + +remapJar { + inputFile.set shadowJar.archiveFile +} \ No newline at end of file diff --git a/Neoforge/gradle.properties b/Neoforge/gradle.properties index 83205facce..e1594fa813 100644 --- a/Neoforge/gradle.properties +++ b/Neoforge/gradle.properties @@ -1,8 +1,8 @@ -neoforgeVersion=21.1.81 +neoforgeVersion=21.1.172 loom.platform=neoforge -kotlinForForgeVersion=5.6.0 +kotlinForForgeVersion=5.8.0 curiosVersion=5.2.0-beta.3 caelusVersion=3.1.0+1.20 diff --git a/build.gradle b/build.gradle index 2b02304af4..df494b9824 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,11 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { // used for something?? - id 'dev.architectury.loom' version '1.7-SNAPSHOT' apply false + id 'dev.architectury.loom' version '1.10-SNAPSHOT' apply false // used for multi-loader stuff, NOT for the archi API id 'architectury-plugin' version '3.4-SNAPSHOT' + id 'com.gradleup.shadow' version '8.3.6' apply false id "org.jetbrains.kotlin.jvm" @@ -87,7 +90,7 @@ subprojects { // Disables Gradle's custom module metadata from being published to maven. The // metadata includes mapped dependencies which are not reasonably consumable by // other mod developers. - tasks.withType(GenerateModuleMetadata) { + tasks.withType(GenerateModuleMetadata).configureEach { enabled = false } @@ -99,7 +102,7 @@ allprojects { } gradle.projectsEvaluated { - tasks.withType(JavaCompile) { + tasks.withType(JavaCompile).configureEach { options.compilerArgs << "-Xmaxerrs" << "1000" } } @@ -109,13 +112,13 @@ allprojects { } compileKotlin { - kotlinOptions { - jvmTarget = "21" + compilerOptions { + jvmTarget = JvmTarget.JVM_21 } } compileTestKotlin { - kotlinOptions { - jvmTarget = "21" + compilerOptions { + jvmTarget = JvmTarget.JVM_21 } } diff --git a/gradle.properties b/gradle.properties index 94d51bc876..6d7a8871a4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,8 @@ kotlinVersion=2.0.21 modVersion=0.12.0-devel # this is the version published to modrinth/cf i swear -paucalVersion=0.7.1-pre-23 +# haha not anymore it's from mavenLocal +paucalVersion=0.7.2 patchouliVersion=88 accessoriesVersion=1.1.0-beta.16+1.21.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 9355b41557..ca025c83a7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index b4f6d8d642..d8e8add79f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -19,4 +19,4 @@ pluginManagement { } rootProject.name = 'Hex Casting' -include("Common", "Fabric", "Neoforge") +include("Common", /*"Fabric",*/ "Neoforge") From e3391a87e7d9e4d41993846c431e885f65144253 Mon Sep 17 00:00:00 2001 From: slava110 Date: Sun, 15 Jun 2025 23:09:46 +0300 Subject: [PATCH 49/81] Ported to 1.21 NeoForge, some Neo-specific stuff is on common package now :c --- Common/build.gradle | 15 +- .../java/at/petrak/hexcasting/api/HexAPI.java | 59 +--- .../hexcasting/api/addldata/ADIotaHolder.java | 11 +- .../ItemDelegatingEntityIotaHolder.java | 10 +- .../FailToCastGreatSpellTrigger.java | 39 ++- .../advancements/HexAdvancementTriggers.java | 38 ++- .../api/advancements/MinMaxLongs.java | 72 ++--- .../api/advancements/OvercastTrigger.java | 77 ++--- .../api/advancements/SpendMediaTrigger.java | 61 ++-- .../hexcasting/api/block/HexBlockEntity.java | 20 +- .../block/circle/BlockAbstractImpetus.java | 3 + .../hexcasting/api/casting/ActionUtils.kt | 36 ++- .../hexcasting/api/casting/ParticleSpray.kt | 15 + .../hexcasting/api/casting/SpellList.kt | 15 + .../api/casting/castables/SpellAction.kt | 13 +- .../circles/BlockEntityAbstractImpetus.java | 19 +- .../casting/circles/CircleExecutionState.java | 27 +- .../api/casting/eval/CastingEnvironment.java | 5 +- .../api/casting/eval/ExecutionClientView.kt | 32 +- .../api/casting/eval/ResolvedPattern.kt | 46 ++- .../api/casting/eval/env/CircleCastEnv.java | 3 +- .../casting/eval/env/PlayerBasedCastEnv.java | 18 +- .../api/casting/eval/env/StaffCastEnv.java | 3 +- .../api/casting/eval/vm/CastingImage.kt | 114 +++----- .../api/casting/eval/vm/CastingVM.kt | 21 +- .../api/casting/eval/vm/ContinuationFrame.kt | 76 ++--- .../api/casting/eval/vm/FrameEvaluate.kt | 41 +-- .../api/casting/eval/vm/FrameFinishEval.kt | 17 +- .../api/casting/eval/vm/FrameForEach.kt | 61 ++-- .../api/casting/eval/vm/SpellContinuation.kt | 69 +++-- .../api/casting/iota/BooleanIota.java | 40 ++- .../api/casting/iota/ContinuationIota.java | 41 ++- .../api/casting/iota/DoubleIota.java | 35 ++- .../api/casting/iota/EntityIota.java | 148 ++++++---- .../api/casting/iota/GarbageIota.java | 39 +-- .../hexcasting/api/casting/iota/Iota.java | 45 +-- .../hexcasting/api/casting/iota/IotaType.java | 185 +++--------- .../hexcasting/api/casting/iota/ListIota.java | 90 +++--- .../hexcasting/api/casting/iota/NullIota.java | 32 +- .../api/casting/iota/PatternIota.java | 51 ++-- .../hexcasting/api/casting/iota/Vec3Iota.java | 58 ++-- .../hexcasting/api/casting/math/HexDir.kt | 8 + .../hexcasting/api/casting/math/HexPattern.kt | 34 +-- .../mishaps/MishapAlreadyBrainswept.kt | 7 +- .../casting/mishaps/MishapBadBrainsweep.kt | 7 +- .../api/casting/mishaps/MishapBadEntity.kt | 2 +- .../api/casting/mishaps/MishapDivideByZero.kt | 2 +- .../casting/mishaps/MishapEntityTooFarAway.kt | 3 +- .../mishaps/MishapEntityUnavailable.kt | 20 ++ .../api/casting/mishaps/MishapImmuneEntity.kt | 4 +- .../api/casting/mishaps/MishapInvalidIota.kt | 2 +- .../mishaps/MishapInvalidOperatorArgs.kt | 2 +- .../casting/mishaps/MishapInvalidPattern.kt | 2 +- .../mishaps/MishapLocationInWrongDimension.kt | 2 +- .../casting/mishaps/MishapNotEnoughArgs.kt | 2 +- .../api/casting/mishaps/MishapOthersName.kt | 16 +- .../api/casting/mishaps/MishapStackSize.kt | 2 +- .../mishaps/circle/MishapNoSpellCircle.kt | 12 +- .../api/client/ClientCastingStack.kt | 5 + .../hexcasting/api/item/IotaHolderItem.java | 61 ++-- .../hexcasting/api/item/VariantItem.java | 7 +- .../petrak/hexcasting/api/mod/HexConfig.java | 8 +- .../at/petrak/hexcasting/api/mod/HexTags.java | 2 + .../hexcasting/api/pigment/FrozenPigment.java | 45 ++- .../hexcasting/api/player/AltioraAbility.java | 8 + .../hexcasting/api/player/Sentinel.java | 12 + .../petrak/hexcasting/api/utils/HexUtils.kt | 18 +- .../petrak/hexcasting/api/utils/NBTHelper.kt | 110 +------ .../client/RegisterClientStuff.java | 31 +- .../client/entity/WallScrollRenderer.java | 62 ++-- .../hexcasting/client/gui/GuiSpellcasting.kt | 25 +- .../client/ktxt/ClientAccessorWrappers.kt | 4 +- .../hexcasting/client/model/AltioraLayer.java | 5 +- ...yOwnArmorModelWithBlackjackAndHookers.java | 5 +- .../client/particles/ConjureParticle.java | 14 +- .../client/render/HexAdditionalRenderers.java | 26 +- .../hexcasting/client/render/RenderLib.kt | 19 +- .../client/render/ScryingLensOverlays.java | 6 +- .../hexcasting/client/render/VCDrawHelper.kt | 79 +++-- .../render/WorldlyPatternRenderHelpers.java | 2 +- .../be/BlockEntityQuenchedAllayRenderer.java | 2 +- .../common/blocks/BlockConjured.java | 5 +- .../blocks/akashic/BlockAkashicBookshelf.java | 35 ++- .../blocks/akashic/BlockAkashicRecord.java | 7 +- .../akashic/BlockEntityAkashicBookshelf.java | 39 ++- .../blocks/circles/BlockEntitySlate.java | 16 +- .../impetuses/BlockEntityLookingImpetus.java | 12 +- .../impetuses/BlockEntityRedstoneImpetus.java | 38 ++- .../impetuses/BlockLookingImpetus.java | 6 + .../impetuses/BlockRedstoneImpetus.java | 43 ++- .../impetuses/BlockRightClickImpetus.java | 19 +- .../decoration/BlockAmethystDirectional.java | 10 +- .../blocks/decoration/BlockHexDoor.java | 2 +- .../blocks/decoration/BlockHexFenceGate.java | 2 +- .../decoration/BlockHexPressurePlate.java | 4 +- .../blocks/decoration/BlockHexTrapdoor.java | 2 +- .../blocks/decoration/BlockHexWoodButton.java | 2 +- .../blocks/entity/BlockEntityConjured.java | 10 +- .../entity/BlockEntityQuenchedAllay.java | 5 +- .../casting/actions/akashic/OpAkashicRead.kt | 2 +- .../casting/actions/akashic/OpAkashicWrite.kt | 2 +- .../common/casting/actions/lists/OpIndex.kt | 2 +- .../common/casting/actions/lists/OpUnCons.kt | 2 +- .../casting/actions/local/OpPeekLocal.kt | 5 +- .../casting/actions/local/OpPushLocal.kt | 4 +- .../actions/queryentity/OpEntityHeight.kt | 2 +- .../actions/queryentity/OpEntityLook.kt | 2 +- .../actions/queryentity/OpEntityPos.kt | 2 +- .../actions/queryentity/OpEntityVelocity.kt | 2 +- .../actions/raycast/OpBlockAxisRaycast.kt | 2 +- .../casting/actions/raycast/OpBlockRaycast.kt | 2 +- .../actions/raycast/OpEntityRaycast.kt | 2 +- .../common/casting/actions/rw/OpRead.kt | 4 +- .../common/casting/actions/rw/OpReadable.kt | 2 +- .../casting/actions/rw/OpTheCoolerRead.kt | 4 +- .../casting/actions/rw/OpTheCoolerReadable.kt | 4 +- .../casting/actions/rw/OpTheCoolerWritable.kt | 4 +- .../casting/actions/rw/OpTheCoolerWrite.kt | 4 +- .../common/casting/actions/rw/OpWrite.kt | 2 +- .../casting/actions/spells/OpAddMotion.kt | 2 +- .../common/casting/actions/spells/OpBlink.kt | 7 +- .../casting/actions/spells/OpColorize.kt | 4 +- .../casting/actions/spells/OpDestroyFluid.kt | 6 +- .../common/casting/actions/spells/OpIgnite.kt | 19 +- .../actions/spells/OpMakePackagedSpell.kt | 2 +- .../casting/actions/spells/OpPlaceBlock.kt | 24 +- .../casting/actions/spells/OpPotionEffect.kt | 11 +- .../OpTheOnlyReasonAnyoneDownloadedPsi.kt | 14 +- .../actions/spells/great/OpBrainsweep.kt | 9 +- .../actions/spells/great/OpTeleport.kt | 11 +- .../spells/sentinel/OpGetSentinelPos.kt | 2 +- .../spells/sentinel/OpGetSentinelWayfind.kt | 2 +- .../arithmetic/operator/list/OperatorIndex.kt | 2 +- .../operator/list/OperatorUnCons.kt | 2 +- .../operator/list/OperatorUnappend.kt | 2 +- .../command/ListPerWorldPatternsCommand.java | 35 +-- .../common/command/PatternResKeyArgument.java | 83 ++++++ .../common/command/PatternResLocArgument.java | 1 + .../common/entities/EntityWallScroll.java | 51 ++-- .../hexcasting/common/impl/HexAPIImpl.java | 54 +--- .../common/items/HexBaubleItem.java | 3 +- .../common/items/ItemJewelerHammer.java | 6 +- .../hexcasting/common/items/ItemLens.java | 40 +-- .../common/items/ItemLoreFragment.java | 5 +- .../hexcasting/common/items/ItemStaff.java | 16 +- .../common/items/armor/ItemRobes.java | 3 +- .../items/magic/DebugUnlockerHolder.java | 5 +- .../common/items/magic/ItemAncientCypher.java | 30 +- .../items/magic/ItemCreativeUnlocker.java | 71 ++--- .../common/items/magic/ItemMediaHolder.java | 37 ++- .../common/items/magic/ItemPackagedHex.java | 41 +-- .../common/items/pigment/ItemUUIDPigment.java | 3 +- .../common/items/storage/ItemAbacus.java | 19 +- .../common/items/storage/ItemFocus.java | 29 +- .../common/items/storage/ItemScroll.java | 87 ++---- .../common/items/storage/ItemSlate.java | 60 ++-- .../common/items/storage/ItemSpellbook.java | 117 ++++---- .../common/items/storage/ItemThoughtKnot.java | 14 +- .../hexcasting/common/lib/HexAttributes.java | 2 - .../common/lib/HexBlockEntities.java | 2 +- .../hexcasting/common/lib/HexBlocks.java | 28 +- .../common/lib/HexConfiguredFeatures.java | 2 +- .../common/lib/HexCreativeTabs.java | 3 +- .../hexcasting/common/lib/HexDamageTypes.java | 3 +- .../common/lib/HexDataComponents.java | 165 +++++++++++ .../hexcasting/common/lib/HexItems.java | 58 +++- .../common/lib/HexLootFunctions.java | 22 +- .../hexcasting/common/lib/HexMobEffects.java | 10 +- .../hexcasting/common/lib/HexPotions.java | 44 ++- .../hexcasting/common/lib/HexRegistries.java | 4 + .../hexcasting/common/lib/hex/HexActions.java | 2 +- .../common/lib/hex/HexIotaTypes.java | 15 +- .../loot/AddHexToAncientCypherFunc.java | 57 ++-- .../loot/AddPerWorldPatternToScrollFunc.java | 37 +-- .../common/loot/AmethystReducerFunc.java | 42 ++- .../common/loot/HexLootHandler.java | 67 +++-- .../common/misc/AkashicTreeGrower.java | 57 +++- .../hexcasting/common/msgs/MsgBeepS2C.java | 67 ++--- .../hexcasting/common/msgs/MsgBlinkS2C.java | 33 +-- .../common/msgs/MsgCastParticleS2C.java | 108 +++---- .../msgs/MsgClearSpiralPatternsS2C.java | 46 ++- .../common/msgs/MsgNewSpellPatternC2S.java | 51 ++-- .../common/msgs/MsgNewSpellPatternS2C.java | 66 ++--- .../common/msgs/MsgNewSpiralPatternsS2C.java | 56 ++-- .../common/msgs/MsgNewWallScrollS2C.java | 62 ++-- .../common/msgs/MsgOpenSpellGuiS2C.java | 70 ++--- .../msgs/MsgRecalcWallScrollDisplayS2C.java | 49 ++-- .../common/msgs/MsgShiftScrollC2S.java | 62 ++-- .../particles/ConjureParticleOptions.java | 48 ++- .../common/recipe/BrainsweepRecipe.java | 67 +++-- .../common/recipe/SealSpellbookRecipe.java | 19 +- .../common/recipe/SealThingsRecipe.java | 31 +- .../recipe/ingredient/StateIngredient.java | 7 +- .../ingredient/StateIngredientBlock.java | 49 ++-- .../ingredient/StateIngredientBlockState.java | 49 ++-- .../ingredient/StateIngredientBlocks.java | 54 ++-- .../ingredient/StateIngredientHelper.java | 167 ----------- .../recipe/ingredient/StateIngredientTag.java | 47 ++- .../StateIngredientTagExcluding.java | 57 ++-- .../ingredient/StateIngredientType.java | 12 + .../recipe/ingredient/StateIngredients.java | 95 ++++++ .../brainsweep/BrainsweepeeIngredient.java | 47 +-- .../BrainsweepeeIngredientType.java | 12 + .../brainsweep/BrainsweepeeIngredients.java | 107 +++++++ .../brainsweep/EntityTagIngredient.java | 81 +++--- .../brainsweep/EntityTypeIngredient.java | 77 +++-- .../brainsweep/VillagerIngredient.java | 141 ++++----- .../hexcasting/datagen/HexAdvancements.java | 81 +++--- .../hexcasting/datagen/HexLootTables.java | 61 ++-- .../datagen/recipe/HexplatRecipes.java | 245 +++++++++++++--- .../builders/BrainsweepRecipeBuilder.java | 76 ++--- .../builders/CreateCrushingRecipeBuilder.java | 66 +---- .../FarmersDelightCuttingRecipeBuilder.java | 62 +--- .../recipe/builders/ItemProcessingOutput.java | 28 -- .../datagen/tag/HexActionTagProvider.java | 2 +- .../datagen/tag/HexBlockTagProvider.java | 17 +- .../datagen/tag/HexItemTagProvider.java | 11 +- .../interop/inline/InlinePatternData.java | 5 +- .../patchouli/AbstractPatternComponent.java | 3 +- .../patchouli/BrainsweepProcessor.java | 22 +- .../patchouli/CustomComponentTooltip.java | 6 +- .../patchouli/LookupPatternComponent.java | 5 +- .../patchouli/ManualPatternComponent.java | 9 +- .../patchouli/MultiCraftingProcessor.java | 19 +- .../interop/patchouli/PatchouliUtils.java | 26 +- .../interop/patchouli/PatternProcessor.java | 6 +- .../hexcasting/interop/pehkui/OpGetScale.kt | 2 +- .../hexcasting/interop/pehkui/OpSetScale.kt | 2 +- .../mixin/MixinWanderingTrader.java | 7 +- .../mixin/accessor/AccessorDamageSource.java | 17 -- .../mixin/accessor/AccessorLootTable.java | 5 +- .../mixin/accessor/AccessorPotionBrewing.java | 14 - .../accessor/CriteriaTriggersAccessor.java | 14 - .../accessor/client/AccessorMouseHandler.java | 8 +- .../server/ScrungledPatternsSave.java | 13 +- .../xplat/IClientXplatAbstractions.java | 3 +- .../hexcasting/xplat/IXplatAbstractions.java | 20 +- .../main/resources/architectury.common.json | 3 + .../src/main/resources/hexplat.accesswidener | 18 +- Neoforge/build.gradle | 16 +- .../forge/ForgeHexClientInitializer.java | 34 +-- .../hexcasting/forge/ForgeHexConfig.java | 61 ++-- .../hexcasting/forge/ForgeHexInitializer.java | 163 ++++++----- .../hexcasting/forge/cap/CapSyncers.java | 4 +- .../forge/cap/ForgeCapabilityHandler.java | 275 ++++++------------ .../forge/cap/ForgeImpetusCapability.java | 2 +- .../hexcasting/forge/cap/HexCapabilities.java | 35 ++- .../cap/adimpl/CapClientCastingStack.java | 21 +- .../forge/cap/adimpl/CapEntityIotaHolder.java | 10 +- .../forge/cap/adimpl/CapItemIotaHolder.java | 13 +- .../forge/cap/adimpl/CapStaticIotaHolder.java | 9 +- .../datagen/ForgeHexConditionsBuilder.java | 25 +- .../forge/datagen/ForgeHexDataGenerators.java | 39 +-- .../forge/datagen/ForgeHexLootModGen.java | 13 +- .../forge/datagen/TagsProviderEFHSetter.java | 2 +- .../xplat/HexBlockStatesAndModels.java | 15 +- .../forge/datagen/xplat/HexItemModels.java | 70 ++--- .../interop/curios/CuriosApiInterop.java | 43 +-- .../forge/interop/curios/CuriosRenderers.java | 5 +- .../interop/curios/LensCurioRenderer.java | 2 +- .../interop/jei/BrainsweepRecipeCategory.java | 24 +- .../interop/jei/EdifyRecipeCategory.java | 19 +- .../forge/interop/jei/HexJEIPlugin.java | 3 +- .../interop/jei/PhialRecipeCategory.java | 20 +- .../lib/ForgeHexArgumentTypeRegistry.java | 20 +- .../forge/lib/ForgeHexIngredientTypes.java | 22 ++ .../forge/lib/ForgeHexLootMods.java | 22 +- .../forge/loot/ForgeHexAmethystLootMod.java | 18 +- .../forge/loot/ForgeHexCypherLootMod.java | 9 +- .../forge/loot/ForgeHexLoreLootMod.java | 9 +- .../forge/loot/ForgeHexScrollLootMod.java | 11 +- .../mixin/ForgeAccessorBuiltInRegistries.java | 25 -- .../forge/mixin/ForgeMixinTagsProvider.java | 8 +- .../forge/network/ForgePacketHandler.java | 101 +++---- .../forge/network/MsgAltioraUpdateAck.java | 55 ++-- .../forge/network/MsgBrainsweepAck.java | 46 ++- .../forge/network/MsgPigmentUpdateAck.java | 41 ++- .../network/MsgSentinelStatusUpdateAck.java | 67 ++--- .../recipe/ForgeModConditionalIngredient.java | 105 +++---- .../forge/recipe/ForgeUnsealedIngredient.java | 70 ++--- .../forge/xplat/ForgeClientXplatImpl.java | 12 +- .../forge/xplat/ForgeXplatImpl.java | 248 ++++++++-------- gradle.properties | 2 + 283 files changed, 4388 insertions(+), 4483 deletions(-) create mode 100644 Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityUnavailable.kt create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/command/PatternResKeyArgument.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/lib/HexDataComponents.java delete mode 100644 Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientHelper.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientType.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredients.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredientType.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java delete mode 100644 Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/ItemProcessingOutput.java delete mode 100644 Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorDamageSource.java delete mode 100644 Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorPotionBrewing.java delete mode 100644 Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java create mode 100644 Common/src/main/resources/architectury.common.json create mode 100644 Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java delete mode 100644 Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeAccessorBuiltInRegistries.java diff --git a/Common/build.gradle b/Common/build.gradle index 4143c84a2b..2137b32843 100644 --- a/Common/build.gradle +++ b/Common/build.gradle @@ -2,6 +2,10 @@ architectury { common([/*"fabric", */"neoforge"]) } +loom { + accessWidenerPath = file("src/main/resources/hexplat.accesswidener") +} + pkSubproj { platform = "common" pkPublish = false @@ -36,17 +40,16 @@ dependencies { // We depend on Fabric Loader here to use the Fabric @Environment annotations, // which get remapped to the correct annotations on each platform. // Do NOT use other classes from Fabric Loader. - //modImplementation "net.fabricmc:fabric-loader:$rootProject.fabric_loader_version" + modImplementation "net.fabricmc:fabric-loader:$rootProject.fabric_loader_version" - compileOnly "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" + modCompileOnly "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" // i do not know why the xplat and mod jars are in different coordinates - compileOnly "vazkii.patchouli:Patchouli-xplat:1.21-$patchouliVersion-SNAPSHOT" - // inline isn't out for 1.21 yet shaking my sm my shaking smh head -// compileOnly "com.samsthenerd.inline:inline-forge:$minecraftVersion-$inlineVersion" + modCompileOnly "vazkii.patchouli:Patchouli-xplat:1.21-$patchouliVersion-SNAPSHOT" + modCompileOnly "com.samsthenerd.inline:inline-common:1.21.1-1.2.2-74" // === OPTIONAL DEPS === modCompileOnly "dev.emi:emi-xplat-intermediary:${emiVersion}:api" - compileOnly "io.wispforest:accessories-common:$accessoriesVersion" + modCompileOnly "io.wispforest:accessories-common:$accessoriesVersion" // === OTHER STUFF === compileOnly "org.jetbrains:annotations:$jetbrainsAnnotationsVersion" diff --git a/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java b/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java index 8ddde5669b..37a1f59371 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java @@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.function.Consumer; import java.util.function.Supplier; @@ -165,49 +166,15 @@ default FrozenPigment getColorizer(Player player) { return FrozenPigment.DEFAULT.get(); } - ArmorMaterial DUMMY_ARMOR_MATERIAL = new ArmorMaterial() { - @Override - public int getDurabilityForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getDefenseForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getEnchantmentValue() { - return 0; - } - - @NotNull - @Override - public SoundEvent getEquipSound() { - return SoundEvents.ARMOR_EQUIP_LEATHER; - } - - @NotNull - @Override - public Ingredient getRepairIngredient() { - return Ingredient.EMPTY; - } - - @Override - public String getName() { - return "missingno"; - } - - @Override - public float getToughness() { - return 0; - } - - @Override - public float getKnockbackResistance() { - return 0; - } - }; + ArmorMaterial DUMMY_ARMOR_MATERIAL = new ArmorMaterial( + Collections.emptyMap(), + 0, + SoundEvents.ARMOR_EQUIP_LEATHER, + () -> Ingredient.EMPTY, + Collections.emptyList(), + 0, + 0 + ); default ArmorMaterial robesMaterial() { return DUMMY_ARMOR_MATERIAL; @@ -217,10 +184,6 @@ default ArmorMaterial robesMaterial() { * Location in the userdata of the ravenmind */ String RAVENMIND_USERDATA = modLoc("ravenmind").toString(); - /** - * Location in the userdata of the number of ops executed - */ - String OP_COUNT_USERDATA = modLoc("op_count").toString(); String MARKED_MOVED_USERDATA = modLoc("impulsed").toString(); @@ -229,6 +192,6 @@ static HexAPI instance() { } static ResourceLocation modLoc(String s) { - return new ResourceLocation(MOD_ID, s); + return ResourceLocation.fromNamespaceAndPath(MOD_ID, s); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/addldata/ADIotaHolder.java b/Common/src/main/java/at/petrak/hexcasting/api/addldata/ADIotaHolder.java index 7b8fcc1c95..0ab8836c9f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/addldata/ADIotaHolder.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/addldata/ADIotaHolder.java @@ -7,18 +7,9 @@ import org.jetbrains.annotations.Nullable; public interface ADIotaHolder { - @Nullable - CompoundTag readIotaTag(); @Nullable - default Iota readIota(ServerLevel world) { - var tag = readIotaTag(); - if (tag != null) { - return IotaType.deserialize(tag, world); - } else { - return null; - } - } + Iota readIota(); @Nullable default Iota emptyIota() { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/addldata/ItemDelegatingEntityIotaHolder.java b/Common/src/main/java/at/petrak/hexcasting/api/addldata/ItemDelegatingEntityIotaHolder.java index 5af67a99ab..8bad581fcb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/addldata/ItemDelegatingEntityIotaHolder.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/addldata/ItemDelegatingEntityIotaHolder.java @@ -23,12 +23,6 @@ public ItemDelegatingEntityIotaHolder(Supplier stackSupplier, Consume this.save = save; } - @Override - public @Nullable CompoundTag readIotaTag() { - var delegate = IXplatAbstractions.INSTANCE.findDataHolder(this.stackSupplier.get()); - return delegate == null ? null : delegate.readIotaTag(); - } - @Override public boolean writeable() { var delegate = IXplatAbstractions.INSTANCE.findDataHolder(this.stackSupplier.get()); @@ -47,9 +41,9 @@ public boolean writeIota(@Nullable Iota datum, boolean simulate) { } @Override - public @Nullable Iota readIota(ServerLevel world) { + public @Nullable Iota readIota() { var delegate = IXplatAbstractions.INSTANCE.findDataHolder(this.stackSupplier.get()); - return delegate == null ? null : delegate.readIota(world); + return delegate == null ? null : delegate.readIota(); } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java index fe85fec5b3..f58dfab3a9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java @@ -1,39 +1,38 @@ package at.petrak.hexcasting.api.advancements; -import com.google.gson.JsonObject; -import net.minecraft.advancements.critereon.*; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.advancements.critereon.ContextAwarePredicate; +import net.minecraft.advancements.critereon.EntityPredicate; +import net.minecraft.advancements.critereon.SimpleCriterionTrigger; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; -public class FailToCastGreatSpellTrigger extends SimpleCriterionTrigger { - private static final ResourceLocation ID = new ResourceLocation("hexcasting", "fail_to_cast_great_spell"); +import java.util.Optional; - @Override - public ResourceLocation getId() { - return ID; - } +public class FailToCastGreatSpellTrigger extends SimpleCriterionTrigger { + private static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("hexcasting", "fail_to_cast_great_spell"); @Override - protected Instance createInstance(JsonObject json, ContextAwarePredicate predicate, DeserializationContext context) { - return new Instance(predicate); + public Codec codec() { + return Instance.CODEC; } public void trigger(ServerPlayer player) { super.trigger(player, e -> true); } - public static class Instance extends AbstractCriterionTriggerInstance { - public Instance(ContextAwarePredicate predicate) { - super(ID, predicate); - } + public static record Instance(Optional player) implements SimpleCriterionTrigger.SimpleInstance { + public static final Codec CODEC = RecordCodecBuilder.create( + p_337348_ -> p_337348_.group( + EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(FailToCastGreatSpellTrigger.Instance::player) + ) + .apply(p_337348_, FailToCastGreatSpellTrigger.Instance::new) + ); @Override - public ResourceLocation getCriterion() { - return ID; - } - - public JsonObject serializeToJson(SerializationContext pConditions) { - return new JsonObject(); + public Optional player() { + return player; } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/HexAdvancementTriggers.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/HexAdvancementTriggers.java index 16af02ab39..36d051ab96 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/HexAdvancementTriggers.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/HexAdvancementTriggers.java @@ -1,15 +1,35 @@ package at.petrak.hexcasting.api.advancements; -import at.petrak.hexcasting.mixin.accessor.CriteriaTriggersAccessor; +import net.minecraft.advancements.CriterionTrigger; +import net.minecraft.resources.ResourceLocation; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.BiConsumer; + +import static at.petrak.hexcasting.api.HexAPI.modLoc; public class HexAdvancementTriggers { - public static final OvercastTrigger OVERCAST_TRIGGER = new OvercastTrigger(); - public static final SpendMediaTrigger SPEND_MEDIA_TRIGGER = new SpendMediaTrigger(); - public static final FailToCastGreatSpellTrigger FAIL_GREAT_SPELL_TRIGGER = new FailToCastGreatSpellTrigger(); - - public static void registerTriggers() { - CriteriaTriggersAccessor.hex$register(OVERCAST_TRIGGER); - CriteriaTriggersAccessor.hex$register(SPEND_MEDIA_TRIGGER); - CriteriaTriggersAccessor.hex$register(FAIL_GREAT_SPELL_TRIGGER); + private static final Map> TRIGGERS = new LinkedHashMap<>(); + + public static final OvercastTrigger OVERCAST_TRIGGER = register("overcast", new OvercastTrigger()); + public static final SpendMediaTrigger SPEND_MEDIA_TRIGGER = register("spend_media", new SpendMediaTrigger()); + public static final FailToCastGreatSpellTrigger FAIL_GREAT_SPELL_TRIGGER = register("fail_to_cast_great_spell", new FailToCastGreatSpellTrigger()); + + public static void registerTriggers(BiConsumer, ResourceLocation> r) { + for (var e : TRIGGERS.entrySet()) { + r.accept(e.getValue(), e.getKey()); + } + } + + private static > T register( + String id, + T lift + ) { + var old = TRIGGERS.put(modLoc(id), lift); + if (old != null) { + throw new IllegalArgumentException("Typo? Duplicate id " + id); + } + return lift; } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java index 0be502c86e..e6ba6a91a1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java @@ -1,85 +1,65 @@ package at.petrak.hexcasting.api.advancements; -import com.google.gson.JsonElement; import com.mojang.brigadier.StringReader; -import com.mojang.brigadier.exceptions.BuiltInExceptionProvider; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.serialization.Codec; import net.minecraft.advancements.critereon.MinMaxBounds; -import net.minecraft.util.GsonHelper; -import javax.annotation.Nullable; -import java.util.Objects; +import java.util.Optional; import java.util.function.Function; -public class MinMaxLongs extends MinMaxBounds { - public static final MinMaxLongs ANY = new MinMaxLongs(null, null); - @Nullable - private final Long minSq; - @Nullable - private final Long maxSq; +public record MinMaxLongs(Optional min, Optional max, Optional minSq, Optional maxSq) implements MinMaxBounds { + public static final Codec CODEC = MinMaxBounds.createCodec(Codec.LONG, MinMaxLongs::new); - private static MinMaxLongs create(StringReader reader, @Nullable Long min, @Nullable Long max) throws CommandSyntaxException { - if (min != null && max != null && min > max) { + public static final MinMaxLongs ANY = new MinMaxLongs(Optional.empty(), Optional.empty()); + + private MinMaxLongs(Optional min, Optional max) { + this(min, max, squareOpt(min), squareOpt(max)); + } + + private static MinMaxLongs create(StringReader reader, Optional min, Optional max) throws CommandSyntaxException { + if (min.isPresent() && max.isPresent() && min.get() > max.get()) { throw ERROR_SWAPPED.createWithContext(reader); } else { return new MinMaxLongs(min, max); } } - @Nullable - private static Long squareOpt(@Nullable Long l) { - return l == null ? null : l * l; - } - - private MinMaxLongs(@Nullable Long min, @Nullable Long max) { - super(min, max); - this.minSq = squareOpt(min); - this.maxSq = squareOpt(max); + private static Optional squareOpt(Optional value) { + return value.map(p_297909_ -> p_297909_ * p_297909_); } public static MinMaxLongs exactly(long l) { - return new MinMaxLongs(l, l); + return new MinMaxLongs(Optional.of(l), Optional.of(l)); } public static MinMaxLongs between(long min, long max) { - return new MinMaxLongs(min, max); + return new MinMaxLongs(Optional.of(min), Optional.of(max)); } public static MinMaxLongs atLeast(long min) { - return new MinMaxLongs(min, null); + return new MinMaxLongs(Optional.of(min), Optional.empty()); } public static MinMaxLongs atMost(long max) { - return new MinMaxLongs(null, max); + return new MinMaxLongs(Optional.empty(), Optional.of(max)); } - public boolean matches(long l) { - if (this.min != null && this.min > l) { - return false; - } else { - return this.max == null || this.max >= l; - } - } - - public boolean matchesSqr(long l) { - if (this.minSq != null && this.minSq > l) { - return false; - } else { - return this.maxSq == null || this.maxSq >= l; - } + public boolean matches(long value) { + return (this.min.isEmpty() || this.min.get() <= value) && (this.max.isEmpty() || this.max.get() >= value); } - public static MinMaxLongs fromJson(@Nullable JsonElement json) { - return fromJson(json, ANY, GsonHelper::convertToLong, MinMaxLongs::new); + public boolean matchesSqr(long value) { + return (this.minSq.isEmpty() || this.minSq.get() <= value) && (this.maxSq.isEmpty() || this.maxSq.get() >= value); } public static MinMaxLongs fromReader(StringReader reader) throws CommandSyntaxException { return fromReader(reader, (l) -> l); } - public static MinMaxLongs fromReader(StringReader reader, Function map) throws CommandSyntaxException { - BuiltInExceptionProvider builtInExceptions = CommandSyntaxException.BUILT_IN_EXCEPTIONS; - Objects.requireNonNull(builtInExceptions); - return fromReader(reader, MinMaxLongs::create, Long::parseLong, builtInExceptions::readerInvalidInt, map); + public static MinMaxLongs fromReader(StringReader reader, Function formatter) throws CommandSyntaxException { + return MinMaxBounds.fromReader( + reader, MinMaxLongs::create, Long::parseLong, CommandSyntaxException.BUILT_IN_EXCEPTIONS::readerInvalidLong, formatter + ); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java index b1661e869e..d98f9ca773 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java @@ -2,34 +2,23 @@ import at.petrak.hexcasting.api.mod.HexConfig; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import java.util.Optional; + // https://github.com/TelepathicGrunt/Bumblezone/blob/latest-released/src/main/java/com/telepathicgrunt/the_bumblezone/advancements/CleanupStickyHoneyResidueTrigger.java // https://github.com/VazkiiMods/Botania/blob/b8706e2e0bba20f67f1e103559a4ce39d63d48f9/src/main/java/vazkii/botania/common/advancements/CorporeaRequestTrigger.java public class OvercastTrigger extends SimpleCriterionTrigger { - private static final ResourceLocation ID = new ResourceLocation("hexcasting", "overcast"); - - private static final String TAG_MEDIA_GENERATED = "media_generated"; - private static final String TAG_HEALTH_USED = "health_used"; - // HEY KIDS DID YOYU KNOW THERE'S NOT A CRITERIA FOR HOW MUCH ***HEALTH*** AN ENTITY HAS - private static final String TAG_HEALTH_LEFT = - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion"; - - @Override - public ResourceLocation getId() { - return ID; - } + private static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("hexcasting", "overcast"); @Override - protected Instance createInstance(JsonObject json, ContextAwarePredicate predicate, - DeserializationContext pContext) { - return new Instance(predicate, - MinMaxBounds.Ints.fromJson(json.get(TAG_MEDIA_GENERATED)), - MinMaxBounds.Doubles.fromJson(json.get(TAG_HEALTH_USED)), - MinMaxBounds.Doubles.fromJson(json.get(TAG_HEALTH_LEFT))); + public Codec codec() { + return Instance.CODEC; } public void trigger(ServerPlayer player, int mediaGenerated) { @@ -40,41 +29,25 @@ public void trigger(ServerPlayer player, int mediaGenerated) { }); } - public static class Instance extends AbstractCriterionTriggerInstance { - protected final MinMaxBounds.Ints mediaGenerated; - // This is the *proporttion* of the health bar. - protected final MinMaxBounds.Doubles healthUsed; - // DID YOU KNOW THERES ONE TO CHECK THE WORLD TIME, BUT NOT THE HEALTH!? - protected final MinMaxBounds.Doubles healthLeft; - - public Instance(ContextAwarePredicate predicate, MinMaxBounds.Ints mediaGenerated, - MinMaxBounds.Doubles healthUsed, MinMaxBounds.Doubles healthLeft) { - super(OvercastTrigger.ID, predicate); - this.mediaGenerated = mediaGenerated; - this.healthUsed = healthUsed; + public static record Instance( + Optional player, + MinMaxBounds.Ints mediaGenerated, + // This is the *proporttion* of the health bar. + MinMaxBounds.Doubles healthUsed, + // DID YOU KNOW THERES ONE TO CHECK THE WORLD TIME, BUT NOT THE HEALTH!? + MinMaxBounds.Doubles healthLeft // DID YOU KNOW THERE'S ONE TO CHECK THE FUCKING C A T T Y P E BUT NOT THE HEALTH - this.healthLeft = healthLeft; - } - - @Override - public ResourceLocation getCriterion() { - return ID; - } - - @Override - public JsonObject serializeToJson(SerializationContext ctx) { - JsonObject json = super.serializeToJson(ctx); - if (!this.mediaGenerated.isAny()) { - json.add(TAG_MEDIA_GENERATED, this.mediaGenerated.serializeToJson()); - } - if (!this.healthUsed.isAny()) { - json.add(TAG_HEALTH_USED, this.healthUsed.serializeToJson()); - } - if (!this.healthLeft.isAny()) { - json.add(TAG_HEALTH_LEFT, this.healthLeft.serializeToJson()); - } - return json; - } + ) implements SimpleCriterionTrigger.SimpleInstance { + public static final Codec CODEC = RecordCodecBuilder.create( + inst -> inst.group( + EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(Instance::player), + MinMaxBounds.Ints.CODEC.fieldOf("media_generated").forGetter(Instance::mediaGenerated), + MinMaxBounds.Doubles.CODEC.fieldOf("health_used").forGetter(Instance::healthUsed), + // HEY KIDS DID YOYU KNOW THERE'S NOT A CRITERIA FOR HOW MUCH ***HEALTH*** AN ENTITY HAS + MinMaxBounds.Doubles.CODEC.fieldOf("mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion").forGetter(Instance::healthLeft) + ) + .apply(inst, Instance::new) + ); private boolean test(int mediaGeneratedIn, double healthUsedIn, float healthLeftIn) { return this.mediaGenerated.matches(mediaGeneratedIn) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java index d610807f59..4d56e48828 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java @@ -1,60 +1,39 @@ package at.petrak.hexcasting.api.advancements; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; -public class SpendMediaTrigger extends SimpleCriterionTrigger { - private static final ResourceLocation ID = new ResourceLocation("hexcasting", "spend_media"); - - private static final String TAG_MEDIA_SPENT = "media_spent"; - private static final String TAG_MEDIA_WASTED = "media_wasted"; +import java.util.Optional; - @Override - public ResourceLocation getId() { - return ID; - } +public class SpendMediaTrigger extends SimpleCriterionTrigger { + private static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("hexcasting", "spend_media"); @Override - protected Instance createInstance(JsonObject json, ContextAwarePredicate predicate, - DeserializationContext context) { - return new Instance(predicate, - MinMaxLongs.fromJson(json.get(TAG_MEDIA_SPENT)), - MinMaxLongs.fromJson(json.get(TAG_MEDIA_WASTED))); + public Codec codec() { + return Instance.CODEC; } public void trigger(ServerPlayer player, long mediaSpent, long mediaWasted) { super.trigger(player, inst -> inst.test(mediaSpent, mediaWasted)); } - public static class Instance extends AbstractCriterionTriggerInstance { - protected final MinMaxLongs mediaSpent; - protected final MinMaxLongs mediaWasted; - - public Instance(ContextAwarePredicate predicate, MinMaxLongs mediaSpent, - MinMaxLongs mediaWasted) { - super(SpendMediaTrigger.ID, predicate); - this.mediaSpent = mediaSpent; - this.mediaWasted = mediaWasted; - } - - @Override - public ResourceLocation getCriterion() { - return ID; - } - - @Override - public JsonObject serializeToJson(SerializationContext ctx) { - JsonObject json = super.serializeToJson(ctx); - if (!this.mediaSpent.isAny()) { - json.add(TAG_MEDIA_SPENT, this.mediaSpent.serializeToJson()); - } - if (!this.mediaWasted.isAny()) { - json.add(TAG_MEDIA_WASTED, this.mediaWasted.serializeToJson()); - } - return json; - } + public static record Instance( + Optional player, + MinMaxLongs mediaSpent, + MinMaxLongs mediaWasted + ) implements SimpleCriterionTrigger.SimpleInstance { + public static final Codec CODEC = RecordCodecBuilder.create( + inst -> inst.group( + EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(Instance::player), + MinMaxLongs.CODEC.fieldOf("media_generated").forGetter(Instance::mediaSpent), + MinMaxLongs.CODEC.fieldOf("health_used").forGetter(Instance::mediaWasted) + ) + .apply(inst, Instance::new) + ); private boolean test(long mediaSpentIn, long mediaWastedIn) { return this.mediaSpent.matches(mediaSpentIn) && this.mediaWasted.matches(mediaWastedIn); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java b/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java index e531ddb12d..b7eb267b7c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.api.block; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -14,25 +15,26 @@ public HexBlockEntity(BlockEntityType pType, BlockPos pWorldPosition, BlockSt super(pType, pWorldPosition, pBlockState); } - protected abstract void saveModData(CompoundTag tag); + protected abstract void saveModData(CompoundTag tag, HolderLookup.Provider registries); - protected abstract void loadModData(CompoundTag tag); + protected abstract void loadModData(CompoundTag tag, HolderLookup.Provider registries); @Override - protected void saveAdditional(CompoundTag pTag) { - this.saveModData(pTag); + protected void saveAdditional(CompoundTag pTag, HolderLookup.Provider registries) { + super.saveAdditional(pTag, registries); + this.saveModData(pTag, registries); } @Override - public void load(CompoundTag pTag) { - super.load(pTag); - this.loadModData(pTag); + public void loadAdditional(CompoundTag pTag, HolderLookup.Provider registries) { + super.loadAdditional(pTag, registries); + this.loadModData(pTag, registries); } @Override - public CompoundTag getUpdateTag() { + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { CompoundTag tag = new CompoundTag(); - this.saveModData(tag); + this.saveModData(tag, registries); return tag; } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java b/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java index d5197fce68..1dbe8052d6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -30,6 +31,8 @@ public BlockAbstractImpetus(Properties p_49795_) { this.stateDefinition.any().setValue(ENERGIZED, false).setValue(FACING, Direction.NORTH)); } + public abstract BlockEntityType getBlockEntityType(); + @Override public ControlFlow acceptControlFlow(CastingImage imageIn, CircleCastEnv env, Direction enterDir, BlockPos pos, BlockState bs, ServerLevel world) { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt index c6dda37c9a..fc8efbb916 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt @@ -4,11 +4,13 @@ package at.petrak.hexcasting.api.casting import at.petrak.hexcasting.api.casting.iota.* import at.petrak.hexcasting.api.casting.math.HexPattern +import at.petrak.hexcasting.api.casting.mishaps.MishapEntityUnavailable import at.petrak.hexcasting.api.casting.mishaps.MishapInvalidIota import at.petrak.hexcasting.api.casting.mishaps.MishapNotEnoughArgs import at.petrak.hexcasting.api.utils.asTranslatedComponent import com.mojang.datafixers.util.Either import net.minecraft.core.BlockPos +import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.Entity import net.minecraft.world.entity.LivingEntity @@ -32,10 +34,28 @@ fun List.getDouble(idx: Int, argc: Int = 0): Double { } } -fun List.getEntity(idx: Int, argc: Int = 0): Entity { +fun List.getEntity(level: ServerLevel, idx: Int, argc: Int = 0): Entity { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - return x.entity + return x.getOrFindEntity(level) ?: throw MishapEntityUnavailable(x.entityId, x.cachedEntityName) + } else { + throw MishapInvalidIota.ofType(x, if (argc == 0) idx else argc - (idx + 1), "entity") + } +} + +fun List.getOrFindEntity(level: ServerLevel, idx: Int, argc: Int = 0): Entity? { + val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } + if (x is EntityIota) { + return x.getOrFindEntity(level) + } else { + throw MishapInvalidIota.ofType(x, if (argc == 0) idx else argc - (idx + 1), "entity") + } +} + +fun List.getCachedEntity(idx: Int, argc: Int = 0): Entity? { + val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } + if (x is EntityIota) { + return x.cachedEntity; } else { throw MishapInvalidIota.ofType(x, if (argc == 0) idx else argc - (idx + 1), "entity") } @@ -82,7 +102,7 @@ fun List.getBool(idx: Int, argc: Int = 0): Boolean { fun List.getItemEntity(idx: Int, argc: Int = 0): ItemEntity { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = x.entity + val e = TODO("replace entity references") if (e is ItemEntity) return e } @@ -92,7 +112,7 @@ fun List.getItemEntity(idx: Int, argc: Int = 0): ItemEntity { fun List.getPlayer(idx: Int, argc: Int = 0): ServerPlayer { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = x.entity + val e = TODO("replace entity references") if (e is ServerPlayer) return e } @@ -102,7 +122,7 @@ fun List.getPlayer(idx: Int, argc: Int = 0): ServerPlayer { fun List.getMob(idx: Int, argc: Int = 0): Mob { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = x.entity + val e = TODO("replace entity references") if (e is Mob) return e } @@ -112,7 +132,7 @@ fun List.getMob(idx: Int, argc: Int = 0): Mob { fun List.getLivingEntityButNotArmorStand(idx: Int, argc: Int = 0): LivingEntity { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = x.entity + val e = TODO("replace entity references") if (e is LivingEntity && e !is ArmorStand) return e } @@ -297,7 +317,7 @@ fun evaluatable(datum: Iota, reverseIdx: Int): Either = ) } -fun Iota?.orNull() = this ?: NullIota() +fun Iota?.orNull() = this ?: NullIota.INSTANCE // TODO do we make this work on lists // there should probably be some way to abstract function application over lists, vecs, and numbers, @@ -319,5 +339,5 @@ inline val BlockPos.asActionResult get() = listOf(Vec3Iota(Vec3.atCenterOf(this) inline val Vector3f.asActionResult get() = listOf(Vec3Iota(Vec3(this))) inline val Vec3.asActionResult get() = listOf(Vec3Iota(this)) -inline val Entity?.asActionResult get() = listOf(if (this == null) NullIota() else EntityIota(this)) +inline val Entity?.asActionResult get() = listOf(if (this == null) NullIota.INSTANCE else EntityIota(this)) inline val HexPattern.asActionResult get() = listOf(PatternIota(this)) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt index 88129e6bf8..966e6abe18 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt @@ -3,6 +3,11 @@ package at.petrak.hexcasting.api.casting import at.petrak.hexcasting.api.pigment.FrozenPigment import at.petrak.hexcasting.common.msgs.MsgCastParticleS2C import at.petrak.hexcasting.xplat.IXplatAbstractions +import at.petrak.paucal.api.PaucalCodecs +import io.netty.buffer.ByteBuf +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec import net.minecraft.server.level.ServerLevel import net.minecraft.world.phys.Vec3 @@ -12,6 +17,16 @@ import net.minecraft.world.phys.Vec3 */ data class ParticleSpray(val pos: Vec3, val vel: Vec3, val fuzziness: Double, val spread: Double, val count: Int = 20) { companion object { + @JvmStatic + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + PaucalCodecs.VEC3, ParticleSpray::pos, + PaucalCodecs.VEC3, ParticleSpray::vel, + ByteBufCodecs.DOUBLE, ParticleSpray::fuzziness, + ByteBufCodecs.DOUBLE, ParticleSpray::spread, + ByteBufCodecs.VAR_INT, ParticleSpray::count, + ::ParticleSpray + ) + @JvmStatic fun burst(pos: Vec3, size: Double, count: Int = 20): ParticleSpray { return ParticleSpray(pos, Vec3(size, 0.0, 0.0), 0.0, 3.14, count) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/SpellList.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/SpellList.kt index 2e76c18c76..f6e4090ed5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/SpellList.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/SpellList.kt @@ -1,6 +1,8 @@ package at.petrak.hexcasting.api.casting import at.petrak.hexcasting.api.casting.iota.Iota +import at.petrak.hexcasting.api.casting.iota.IotaType +import net.minecraft.network.codec.ByteBufCodecs /** * Restricted interface for functional lists. @@ -90,4 +92,17 @@ sealed class SpellList : Iterable { return car } } + + companion object { + @JvmStatic + val CODEC = IotaType.TYPED_CODEC.listOf().xmap( + { list -> LList(list) as SpellList }, + { b -> b.toList() } + ) + @JvmStatic + val STREAM_CODEC = IotaType.TYPED_STREAM_CODEC.apply(ByteBufCodecs.list()).map( + { list -> LList(list) as SpellList }, + { b -> b.toList() } + ) + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/SpellAction.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/SpellAction.kt index fcf17d08d0..75e3a246b0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/SpellAction.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/castables/SpellAction.kt @@ -20,17 +20,18 @@ interface SpellAction : Action { fun awardsCastingStat(ctx: CastingEnvironment): Boolean = true + fun executeWithUserdata( + args: List, + env: CastingEnvironment, + userData: CompoundTag + ): Result = + execute(args, env) + fun execute( args: List, env: CastingEnvironment ): Result - fun executeWithUserdata( - args: List, env: CastingEnvironment, userData: CompoundTag - ): Result { - return this.execute(args, env) - } - override fun operate(env: CastingEnvironment, image: CastingImage, continuation: SpellContinuation): OperationResult { val stack = image.stack.toMutableList() diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java index ac8bf92d0d..c37ed07f58 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.api.block.HexBlockEntity; import at.petrak.hexcasting.api.block.circle.BlockCircleComponent; +import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.api.misc.MediaConstants; import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.api.utils.MediaHelper; @@ -11,7 +12,9 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; @@ -284,7 +287,7 @@ public FrozenPigment getPigment() { } @Override - protected void saveModData(CompoundTag tag) { + protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { if (this.executionState != null) { tag.put(TAG_EXECUTION_STATE, this.executionState.save()); } @@ -292,17 +295,17 @@ protected void saveModData(CompoundTag tag) { tag.putLong(TAG_MEDIA, this.media); if (this.displayMsg != null && this.displayItem != null) { - tag.putString(TAG_ERROR_MSG, Component.Serializer.toJson(this.displayMsg)); + tag.putString(TAG_ERROR_MSG, Component.Serializer.toJson(this.displayMsg, registries)); var itemTag = new CompoundTag(); - this.displayItem.save(itemTag); + this.displayItem.save(registries, itemTag); tag.put(TAG_ERROR_DISPLAY, itemTag); } if (this.pigment != null) - tag.put(TAG_PIGMENT, this.pigment.serializeToNBT()); + tag.put(TAG_PIGMENT, FrozenPigment.CODEC.encodeStart(NbtOps.INSTANCE, pigment).getOrThrow()); } @Override - protected void loadModData(CompoundTag tag) { + protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { this.executionState = null; if (tag.contains(TAG_EXECUTION_STATE, Tag.TAG_COMPOUND)) { this.lazyExecutionState = tag.getCompound(TAG_EXECUTION_STATE); @@ -315,8 +318,8 @@ protected void loadModData(CompoundTag tag) { } if (tag.contains(TAG_ERROR_MSG, Tag.TAG_STRING) && tag.contains(TAG_ERROR_DISPLAY, Tag.TAG_COMPOUND)) { - var msg = Component.Serializer.fromJson(tag.getString(TAG_ERROR_MSG)); - var display = ItemStack.of(tag.getCompound(TAG_ERROR_DISPLAY)); + var msg = Component.Serializer.fromJson(tag.getString(TAG_ERROR_MSG), registries); + var display = ItemStack.parseOptional(registries, tag); this.displayMsg = msg; this.displayItem = display; } else { @@ -324,7 +327,7 @@ protected void loadModData(CompoundTag tag) { this.displayItem = null; } if (tag.contains(TAG_PIGMENT, Tag.TAG_COMPOUND)) - this.pigment = FrozenPigment.fromNBT(tag.getCompound(TAG_PIGMENT)); + this.pigment = FrozenPigment.CODEC.parse(NbtOps.INSTANCE, tag.getCompound(TAG_PIGMENT)).getOrThrow(); } public void applyScryingLensOverlay(List> lines, diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java index f95fa84f01..b62b4ec3c5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java @@ -10,10 +10,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.nbt.Tag; +import net.minecraft.nbt.*; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -166,35 +163,37 @@ public CompoundTag save() { out.put(TAG_CURRENT_POS, NbtUtils.writeBlockPos(this.currentPos)); out.putByte(TAG_ENTERED_FROM, (byte) this.enteredFrom.ordinal()); - out.put(TAG_IMAGE, this.currentImage.serializeToNbt()); + out.put(TAG_IMAGE, CastingImage.getCODEC().encodeStart(NbtOps.INSTANCE, currentImage).getOrThrow()); if (this.caster != null) out.putUUID(TAG_CASTER, this.caster); if (this.casterPigment != null) - out.put(TAG_PIGMENT, this.casterPigment.serializeToNBT()); + out.put(TAG_PIGMENT, FrozenPigment.CODEC.encodeStart(NbtOps.INSTANCE, casterPigment).getOrThrow()); return out; } public static CircleExecutionState load(CompoundTag nbt, ServerLevel world) { - var startPos = NbtUtils.readBlockPos(nbt.getCompound(TAG_IMPETUS_POS)); + var startPos = NbtUtils.readBlockPos(nbt, TAG_IMPETUS_POS).orElseThrow(); var startDir = Direction.values()[nbt.getByte(TAG_IMPETUS_DIR)]; var knownPositions = new HashSet(); var knownTag = nbt.getList(TAG_KNOWN_POSITIONS, Tag.TAG_COMPOUND); for (var tag : knownTag) { - knownPositions.add(NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE))); + var pos = readBlockPos(HexUtils.downcast(tag, IntArrayTag.TYPE).getAsIntArray()); + pos.ifPresent(knownPositions::add); } var reachedPositions = new ArrayList(); var reachedTag = nbt.getList(TAG_REACHED_POSITIONS, Tag.TAG_COMPOUND); for (var tag : reachedTag) { - reachedPositions.add(NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE))); + var pos = readBlockPos(HexUtils.downcast(tag, IntArrayTag.TYPE).getAsIntArray()); + pos.ifPresent(reachedPositions::add); } - var currentPos = NbtUtils.readBlockPos(nbt.getCompound(TAG_CURRENT_POS)); + var currentPos = NbtUtils.readBlockPos(nbt, TAG_CURRENT_POS).orElseThrow(); var enteredFrom = Direction.values()[nbt.getByte(TAG_ENTERED_FROM)]; - var image = CastingImage.loadFromNbt(nbt.getCompound(TAG_IMAGE), world); + var image = CastingImage.getCODEC().parse(NbtOps.INSTANCE, nbt.getCompound(TAG_IMAGE)).getOrThrow(); UUID caster = null; if (nbt.hasUUID(TAG_CASTER)) @@ -202,12 +201,16 @@ public static CircleExecutionState load(CompoundTag nbt, ServerLevel world) { FrozenPigment pigment = null; if (nbt.contains(TAG_PIGMENT, Tag.TAG_COMPOUND)) - pigment = FrozenPigment.fromNBT(nbt.getCompound(TAG_PIGMENT)); + pigment = FrozenPigment.CODEC.parse(NbtOps.INSTANCE, nbt.getCompound(TAG_PIGMENT)).getOrThrow(); return new CircleExecutionState(startPos, startDir, knownPositions, reachedPositions, currentPos, enteredFrom, image, caster, pigment); } + private static Optional readBlockPos(int[] aint) { + return aint.length == 3 ? Optional.of(new BlockPos(aint[0], aint[1], aint[2])) : Optional.empty(); + } + /** * Update this, also mutates the impetus. *

diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java index ebd47a1e65..2365a922ff 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java @@ -12,6 +12,7 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.HexAttributes; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -230,7 +231,7 @@ public void postCast(CastingImage image) { * Return whether this env can cast great spells. */ public boolean isEnlightened() { - var adv = this.world.getServer().getAdvancements().getAdvancement(modLoc("enlightenment")); + var adv = this.world.getServer().getAdvancements().get(modLoc("enlightenment")); if (adv == null) return false; @@ -249,7 +250,7 @@ public boolean isEnlightened() { */ public long extractMedia(long cost, boolean simulate) { if (this.getCastingEntity() != null){ - cost = (long) (cost * this.getCastingEntity().getAttributeValue(HexAttributes.MEDIA_CONSUMPTION_MODIFIER)); + cost = (long) (cost * this.getCastingEntity().getAttributeValue(Holder.direct(HexAttributes.MEDIA_CONSUMPTION_MODIFIER))); } for (var extractMediaComponent : preMediaExtract) cost = extractMediaComponent.onExtractMedia(cost, simulate); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ExecutionClientView.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ExecutionClientView.kt index 3fcf1bf766..90e7285b37 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ExecutionClientView.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ExecutionClientView.kt @@ -1,6 +1,13 @@ package at.petrak.hexcasting.api.casting.eval +import at.petrak.hexcasting.api.casting.iota.Iota +import at.petrak.hexcasting.api.casting.iota.IotaType import net.minecraft.nbt.CompoundTag +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import java.util.* +import kotlin.jvm.optionals.getOrNull /** * Information sent back to the client @@ -11,7 +18,26 @@ data class ExecutionClientView( // These must be tags so the wrapping of the text can happen on the client // otherwise we don't know when to stop rendering - val stackDescs: List, - val ravenmind: CompoundTag?, -) + val stackDescs: List, + val ravenmind: CompoundTag? +) { + + companion object { + @JvmStatic + val STREAM_CODEC: StreamCodec = + StreamCodec.composite( + ByteBufCodecs.BOOL, ExecutionClientView::isStackClear, + ByteBufCodecs.idMapper( + { ResolvedPatternType.entries[it] }, + ResolvedPatternType::ordinal + ), ExecutionClientView::resolutionType, + IotaType.TYPED_STREAM_CODEC.apply(ByteBufCodecs.list()), ExecutionClientView::stackDescs, + ByteBufCodecs.optional(ByteBufCodecs.COMPOUND_TAG).map( + { it.getOrNull() }, + Optional::ofNullable + ), ExecutionClientView::ravenmind, + ::ExecutionClientView + ) + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ResolvedPattern.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ResolvedPattern.kt index 6108850727..ac4ec14fbe 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ResolvedPattern.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/ResolvedPattern.kt @@ -2,26 +2,40 @@ package at.petrak.hexcasting.api.casting.eval import at.petrak.hexcasting.api.casting.math.HexCoord import at.petrak.hexcasting.api.casting.math.HexPattern -import at.petrak.hexcasting.api.utils.NBTBuilder -import net.minecraft.nbt.CompoundTag -import java.util.* +import com.mojang.serialization.Codec +import com.mojang.serialization.codecs.RecordCodecBuilder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec data class ResolvedPattern(val pattern: HexPattern, val origin: HexCoord, var type: ResolvedPatternType) { - fun serializeToNBT() = NBTBuilder { - "Pattern" %= pattern.serializeToNBT() - "OriginQ" %= origin.q - "OriginR" %= origin.r - "Valid" %= type.name.lowercase(Locale.ROOT) - } + + constructor(pattern: HexPattern, q: Int, r: Int, type: ResolvedPatternType): this(pattern, HexCoord(q, r), type) companion object { - @JvmStatic - fun fromNBT(tag: CompoundTag): ResolvedPattern { - val pattern = HexPattern.fromNBT(tag.getCompound("Pattern")) - val origin = HexCoord(tag.getInt("OriginQ"), tag.getInt("OriginR")) - val valid = ResolvedPatternType.fromString(tag.getString("Valid")) - return ResolvedPattern(pattern, origin, valid) - } + @JvmField + val CODEC: Codec = RecordCodecBuilder.create({instance -> instance.group( + HexPattern.CODEC.fieldOf("pattern").forGetter { it.pattern }, + Codec.INT.fieldOf("OriginQ").forGetter { it.origin.q }, + Codec.INT.fieldOf("OriginR").forGetter { it.origin.r }, + Codec.STRING.xmap( + { ResolvedPatternType.fromString(it) }, + { it.name.lowercase() } + ).fieldOf("Valid").forGetter { it.type } + ).apply(instance, ::ResolvedPattern) + }) + + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + HexPattern.STREAM_CODEC, ResolvedPattern::pattern, + ByteBufCodecs.VAR_INT, { it.origin.q }, + ByteBufCodecs.VAR_INT, { it.origin.r }, + ByteBufCodecs.STRING_UTF8.map( + { ResolvedPatternType.fromString(it) }, + { it.name.lowercase() } + ), ResolvedPattern::type, + ::ResolvedPattern + ) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java index 1fb6698bf7..f6059a9779 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java @@ -15,6 +15,7 @@ import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.common.lib.HexAttributes; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -132,7 +133,7 @@ public long extractMediaEnvironment(long cost, boolean simulate) { public boolean isVecInRangeEnvironment(Vec3 vec) { var caster = this.execState.getCaster(this.world); if (caster != null) { - double sentinelRadius = caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); + double sentinelRadius = caster.getAttributeValue(Holder.direct(HexAttributes.SENTINEL_RADIUS)); if (vec.distanceToSqr(caster.position()) <= caster.getBbHeight() * caster.getBbHeight()) { return true; } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java index 750a48fa23..433fc267ba 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java @@ -18,6 +18,7 @@ import at.petrak.hexcasting.common.lib.HexDamageTypes; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; import net.minecraft.util.Mth; @@ -48,8 +49,8 @@ protected PlayerBasedCastEnv(ServerPlayer caster, InteractionHand castingHand) { super(caster.serverLevel()); this.caster = caster; this.castingHand = castingHand; - this.ambitRadius = caster.getAttributeValue(HexAttributes.AMBIT_RADIUS); - this.sentinelRadius = caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); + this.ambitRadius = caster.getAttributeValue(Holder.direct(HexAttributes.AMBIT_RADIUS)); + this.sentinelRadius = caster.getAttributeValue(Holder.direct(HexAttributes.SENTINEL_RADIUS)); } @Override @@ -72,11 +73,11 @@ public void postExecution(CastResult result) { } } if (this.caster != null){ - double ambitAttribute = this.caster.getAttributeValue(HexAttributes.AMBIT_RADIUS); + double ambitAttribute = this.caster.getAttributeValue(Holder.direct(HexAttributes.AMBIT_RADIUS)); if (this.ambitRadius != ambitAttribute){ this.ambitRadius = ambitAttribute; } - double sentinelAttribute = this.caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); + double sentinelAttribute = this.caster.getAttributeValue(Holder.direct(HexAttributes.SENTINEL_RADIUS)); if (this.sentinelRadius != sentinelAttribute){ this.sentinelRadius = sentinelAttribute; } @@ -175,9 +176,12 @@ protected long extractMediaFromInventory(long costLeft, boolean allowOvercast, b } protected boolean canOvercast() { - var adv = this.world.getServer().getAdvancements().getAdvancement(modLoc("y_u_no_cast_angy")); - var advs = this.caster.getAdvancements(); - return advs.getOrStartProgress(adv).isDone(); + var adv = this.world.getServer().getAdvancements().get(modLoc("y_u_no_cast_angy")); + if(adv != null) { + var advs = this.caster.getAdvancements(); + return advs.getOrStartProgress(adv).isDone(); + } + return false; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java index 29e80d3817..537c146b71 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java @@ -14,6 +14,7 @@ import at.petrak.hexcasting.common.msgs.*; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; @@ -131,7 +132,7 @@ public static void handleNewPatternOnServer(ServerPlayer sender, MsgNewSpellPatt IXplatAbstractions.INSTANCE.sendPacketToPlayer(sender, new MsgNewSpellPatternS2C(clientInfo, resolvedPatterns.size() - 1)); - IMessage packet; + CustomPacketPayload packet; if (clientInfo.isStackClear()) { packet = new MsgClearSpiralPatternsS2C(sender.getUUID()); } else { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt index 3ffd771bcd..573f73fb61 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt @@ -1,57 +1,59 @@ package at.petrak.hexcasting.api.casting.eval.vm import at.petrak.hexcasting.api.HexAPI +import at.petrak.hexcasting.api.casting.eval.vm.CastingImage.ParenthesizedIota import at.petrak.hexcasting.api.casting.eval.vm.CastingImage.ParenthesizedIota.Companion.TAG_ESCAPED import at.petrak.hexcasting.api.casting.eval.vm.CastingImage.ParenthesizedIota.Companion.TAG_IOTAS import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.IotaType import at.petrak.hexcasting.api.casting.iota.ListIota import at.petrak.hexcasting.api.utils.* +import com.mojang.serialization.Codec +import com.mojang.serialization.codecs.RecordCodecBuilder import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.ListTag import net.minecraft.nbt.Tag +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec import net.minecraft.server.level.ServerLevel +import net.minecraft.util.ExtraCodecs import net.minecraft.world.entity.Entity +import java.util.Optional +import kotlin.jvm.optionals.getOrNull /** * The state of a casting VM, containing the stack and all */ -data class CastingImage private constructor( +data class CastingImage( val stack: List, val parenCount: Int, val parenthesized: List, val escapeNext: Boolean, val opsConsumed: Long, - val userData: CompoundTag ) { constructor() : this(listOf(), 0, listOf(), false, 0, CompoundTag()) data class ParenthesizedIota(val iota: Iota, val escaped: Boolean) { companion object { + val CODEC = RecordCodecBuilder.create { inst -> + inst.group( + IotaType.TYPED_CODEC.fieldOf("iota").forGetter { it.iota }, + Codec.BOOL.fieldOf("escaped").forGetter { it.escaped } + ).apply(inst, ::ParenthesizedIota) + } + val STREAM_CODEC = StreamCodec.composite( + IotaType.TYPED_STREAM_CODEC, ParenthesizedIota::iota, + ByteBufCodecs.BOOL, ParenthesizedIota::escaped, + ::ParenthesizedIota + ) + const val TAG_IOTAS = "iotas" const val TAG_ESCAPED = "escaped" } } - /** - * Returns an empty list if it's too complicated. - */ - private fun Iterable.serializeToNBT(): CompoundTag { - val tag = CompoundTag() - - if (IotaType.isTooLargeToSerialize(this.map { it.iota })) { - tag.put(TAG_IOTAS, ListTag()) - tag.put(TAG_ESCAPED, ListTag()) - } else { - tag.put(TAG_IOTAS, ListIota(this.map { it.iota }).serialize()) - tag.put(TAG_ESCAPED, this.map { it.escaped }.serializeToNBT()) - } - - return tag - } - /** * Return a copy of this with the given number of ops additionally exhausted */ @@ -72,60 +74,32 @@ data class CastingImage private constructor( */ fun withResetEscape() = this.copy(parenCount = 0, parenthesized = listOf(), escapeNext = false) - fun serializeToNbt() = NBTBuilder { - TAG_STACK %= stack.serializeToNBT() - - TAG_PAREN_COUNT %= parenCount - TAG_ESCAPE_NEXT %= escapeNext - TAG_PARENTHESIZED %= parenthesized.serializeToNBT() - TAG_OPS_CONSUMED %= opsConsumed - - TAG_USERDATA %= userData - } - companion object { - const val TAG_STACK = "stack" - const val TAG_PAREN_COUNT = "open_parens" - const val TAG_PARENTHESIZED = "parenthesized" - const val TAG_ESCAPE_NEXT = "escape_next" - const val TAG_OPS_CONSUMED = "ops_consumed" - const val TAG_USERDATA = "userdata" - @JvmStatic - fun loadFromNbt(tag: CompoundTag, world: ServerLevel): CastingImage { - return try { - val stack = mutableListOf() - val stackTag = tag.getList(TAG_STACK, Tag.TAG_COMPOUND) - for (subtag in stackTag) { - val datum = IotaType.deserialize(subtag.asCompound, world) - stack.add(datum) - } - - val userData = if (tag.contains(TAG_USERDATA)) { - tag.getCompound(TAG_USERDATA) - } else { - CompoundTag() - } - - val parenthesized = mutableListOf() - val parenTag = tag.getCompound(TAG_PARENTHESIZED) - val parenIotasTag = parenTag.getList(TAG_IOTAS, Tag.TAG_COMPOUND) - val parenEscapedTag = parenTag.getByteArray(TAG_ESCAPED) - - for ((subtag, isEscapedByte) in parenIotasTag.zipWithDefault(parenEscapedTag) { _ -> 0 }) { - parenthesized.add(ParenthesizedIota(IotaType.deserialize(subtag.downcast(CompoundTag.TYPE), world), isEscapedByte != 0.toByte())) - } - - val parenCount = tag.getInt(TAG_PAREN_COUNT) - val escapeNext = tag.getBoolean(TAG_ESCAPE_NEXT) - val opsUsed = tag.getLong(TAG_OPS_CONSUMED) - - CastingImage(stack, parenCount, parenthesized, escapeNext, opsUsed, userData) - } catch (exn: Exception) { - HexAPI.LOGGER.warn("error while loading a CastingImage", exn) - CastingImage() + val CODEC = RecordCodecBuilder.create { inst -> + inst.group( + IotaType.TYPED_CODEC.listOf().fieldOf("stack").forGetter { it.stack }, + Codec.INT.fieldOf("open_parens").forGetter { it.parenCount }, + ParenthesizedIota.CODEC.listOf().fieldOf("parenthesized").forGetter { it.parenthesized }, + Codec.BOOL.fieldOf("escape_next").forGetter { it.escapeNext }, + Codec.LONG.fieldOf("ops_consumed").forGetter { it.opsConsumed }, + CompoundTag.CODEC.fieldOf("userData").forGetter { it.userData } + ).apply(inst) { a, b, c, d, e, f -> + CastingImage(a, b, c, d, e, f) } - } + }.orElseGet(::CastingImage) + @JvmStatic + val STREAM_CODEC = StreamCodec.composite( + IotaType.TYPED_STREAM_CODEC.apply(ByteBufCodecs.list()), CastingImage::stack, + ByteBufCodecs.VAR_INT, CastingImage::parenCount, + ParenthesizedIota.STREAM_CODEC.apply(ByteBufCodecs.list()), CastingImage::parenthesized, + ByteBufCodecs.BOOL, CastingImage::escapeNext, + ByteBufCodecs.VAR_LONG, CastingImage::opsConsumed, + ByteBufCodecs.COMPOUND_TAG, { it.userData }, + { a, b, c, d, e, f -> + CastingImage(a, b, c, d, e, f) + } + ) @JvmStatic fun checkAndMarkGivenMotion(userData: CompoundTag, entity: Entity): Boolean { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt index 11503b0b6f..c6e4336a47 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingVM.kt @@ -1,7 +1,6 @@ package at.petrak.hexcasting.api.casting.eval.vm import at.petrak.hexcasting.api.HexAPI -import at.petrak.hexcasting.api.casting.PatternShapeMatch.* import at.petrak.hexcasting.api.casting.SpellList import at.petrak.hexcasting.api.casting.eval.* import at.petrak.hexcasting.api.casting.eval.sideeffects.OperatorSideEffect @@ -12,8 +11,10 @@ import at.petrak.hexcasting.api.casting.iota.ListIota import at.petrak.hexcasting.api.casting.iota.PatternIota import at.petrak.hexcasting.api.casting.math.HexDir import at.petrak.hexcasting.api.casting.math.HexPattern -import at.petrak.hexcasting.api.casting.mishaps.* -import at.petrak.hexcasting.api.utils.* +import at.petrak.hexcasting.api.casting.mishaps.Mishap +import at.petrak.hexcasting.api.casting.mishaps.MishapInternalException +import at.petrak.hexcasting.api.casting.mishaps.MishapStackSize +import at.petrak.hexcasting.api.casting.mishaps.MishapTooManyCloseParens import at.petrak.hexcasting.common.lib.hex.HexEvalSounds import net.minecraft.nbt.CompoundTag import net.minecraft.server.level.ServerLevel @@ -86,12 +87,14 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) { if (lastResolutionType.success) ResolvedPatternType.EVALUATED else ResolvedPatternType.ERRORED } - val (stackDescs, ravenmind) = generateDescs() + val ravenmind: CompoundTag? = image.userData + ?.takeIf { it.contains(HexAPI.RAVENMIND_USERDATA) } + ?.getCompound(HexAPI.RAVENMIND_USERDATA) val isStackClear = image.stack.isEmpty() && image.parenCount == 0 && !image.escapeNext && ravenmind == null this.env.postCast(image) - return ExecutionClientView(isStackClear, lastResolutionType, stackDescs, ravenmind) + return ExecutionClientView(isStackClear, lastResolutionType, image.stack, ravenmind) } /** @@ -158,14 +161,6 @@ class CastingVM(var image: CastingImage, val env: CastingEnvironment) { } } - fun generateDescs(): Pair, CompoundTag?> { - val stackDescs = this.image.stack.map { IotaType.serialize(it) } - val ravenmind = if (this.image.userData.contains(HexAPI.RAVENMIND_USERDATA)) { - this.image.userData.getCompound(HexAPI.RAVENMIND_USERDATA) - } else null - return Pair(stackDescs, ravenmind) - } - /** * Return a non-null value if we handled this in some sort of parenthesey way, * either escaping it onto the stack or changing the parenthese-handling state. diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/ContinuationFrame.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/ContinuationFrame.kt index f565135837..ff25b70b57 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/ContinuationFrame.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/ContinuationFrame.kt @@ -2,12 +2,24 @@ package at.petrak.hexcasting.api.casting.eval.vm import at.petrak.hexcasting.api.casting.SpellList import at.petrak.hexcasting.api.casting.eval.CastResult +import at.petrak.hexcasting.api.casting.iota.GarbageIota import at.petrak.hexcasting.api.casting.iota.Iota +import at.petrak.hexcasting.api.casting.iota.IotaType +import at.petrak.hexcasting.common.lib.HexRegistries import at.petrak.hexcasting.common.lib.hex.HexContinuationTypes +import at.petrak.hexcasting.xplat.IXplatAbstractions +import com.mojang.serialization.Codec +import com.mojang.serialization.DataResult +import com.mojang.serialization.MapCodec import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.Tag +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec import net.minecraft.resources.ResourceLocation import net.minecraft.server.level.ServerLevel +import java.util.function.Function +import java.util.function.Supplier /** * A single frame of evaluation during the execution of a spell. @@ -37,11 +49,6 @@ interface ContinuationFrame { */ fun breakDownwards(stack: List): Pair> - /** - * Serializes this frame. Used for things like delays, where we pause execution. - */ - fun serializeToNBT(): CompoundTag - /** * Return the number of iotas contained inside this frame, used for determining whether it is valid to serialise. */ @@ -50,41 +57,36 @@ interface ContinuationFrame { val type: Type<*> interface Type { - fun deserializeFromNBT(tag: CompoundTag, world: ServerLevel): U? - } - companion object { - /** - * Takes a tag containing the ContinuationFrame.Type resourcelocation and the serialized continuation frame, and returns - * the deserialized continuation frame. - */ - @JvmStatic - fun fromNBT(tag: CompoundTag, world: ServerLevel): ContinuationFrame { - val type = getTypeFromTag(tag) ?: return FrameEvaluate(SpellList.LList(0, listOf()), false) + fun codec(): MapCodec - return (tag.get(HexContinuationTypes.KEY_DATA) as? CompoundTag)?.let { type.deserializeFromNBT(it, world) } - ?: FrameEvaluate(SpellList.LList(0, listOf()), false) - } + fun streamCodec(): StreamCodec + + companion object { + //TODO if doesn't exist use `FrameEvaluate(SpellList.LList(0, listOf()), false)` as default value + @JvmStatic + val TYPED_CODEC: Codec = Codec.lazyInitialized { + IXplatAbstractions.INSTANCE + .continuationTypeRegistry + .byNameCodec() + .dispatch( + "type", + ContinuationFrame::type, + Type<*>::codec + ) + } - /** - * Takes a continuation frame and serializes it along with its type. - */ - @JvmStatic - fun toNBT(frame: ContinuationFrame): CompoundTag { - val type = frame.type - val typeId = HexContinuationTypes.REGISTRY.getKey(type) - ?: throw IllegalStateException( - "Tried to serialize an unregistered continuation type. Continuation: " + frame - + " ; Type" + type.javaClass.typeName + @JvmStatic + val TYPED_STREAM_CODEC: StreamCodec = ByteBufCodecs + .registry(HexRegistries.CONTINUATION_TYPE) + .dispatch( + ContinuationFrame::type, + Type<*>::streamCodec ) - - val data = frame.serializeToNBT() - - val out = CompoundTag() - out.putString(HexContinuationTypes.KEY_TYPE, typeId.toString()) - out.put(HexContinuationTypes.KEY_DATA, data) - return out } + } + + companion object { /** * This method attempts to find the type from the `type` key. @@ -98,9 +100,11 @@ interface ContinuationFrame { } val typeKey = tag.getString(HexContinuationTypes.KEY_TYPE) + val typeLoc = ResourceLocation.tryParse(typeKey) + ?: return null - return typeLoc?.let { HexContinuationTypes.REGISTRY[it] } + return HexContinuationTypes.REGISTRY[typeLoc] } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameEvaluate.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameEvaluate.kt index 141148dfdc..c67b2683ba 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameEvaluate.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameEvaluate.kt @@ -5,13 +5,13 @@ import at.petrak.hexcasting.api.casting.eval.CastResult import at.petrak.hexcasting.api.casting.eval.ResolvedPatternType import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.ListIota -import at.petrak.hexcasting.api.utils.NBTBuilder -import at.petrak.hexcasting.api.utils.getList -import at.petrak.hexcasting.api.utils.serializeToNBT import at.petrak.hexcasting.common.lib.hex.HexEvalSounds -import at.petrak.hexcasting.common.lib.hex.HexIotaTypes -import net.minecraft.nbt.CompoundTag -import net.minecraft.nbt.Tag +import com.mojang.serialization.Codec +import com.mojang.serialization.MapCodec +import com.mojang.serialization.codecs.RecordCodecBuilder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec import net.minecraft.server.level.ServerLevel /** @@ -48,27 +48,32 @@ data class FrameEvaluate(val list: SpellList, val isMetacasting: Boolean) : Cont } } - override fun serializeToNBT() = NBTBuilder { - "patterns" %= list.serializeToNBT() - "isMetacasting" %= isMetacasting - } - override fun size() = list.size() override val type: ContinuationFrame.Type<*> = TYPE companion object { + @JvmField val TYPE: ContinuationFrame.Type = object : ContinuationFrame.Type { - override fun deserializeFromNBT(tag: CompoundTag, world: ServerLevel): FrameEvaluate { - return FrameEvaluate( - HexIotaTypes.LIST.deserialize( - tag.getList("patterns", Tag.TAG_COMPOUND), - world - )!!.list, - tag.getBoolean("isMetacasting")) + val CODEC = RecordCodecBuilder.mapCodec { inst -> + inst.group( + SpellList.CODEC.fieldOf("patterns").forGetter { it.list }, + Codec.BOOL.fieldOf("isMetacasting").forGetter { it.isMetacasting } + ).apply(inst, ::FrameEvaluate) } + val STREAM_CODEC = StreamCodec.composite( + SpellList.STREAM_CODEC, FrameEvaluate::list, + ByteBufCodecs.BOOL, FrameEvaluate::isMetacasting, + ::FrameEvaluate + ) + + + override fun codec(): MapCodec = + CODEC + override fun streamCodec(): StreamCodec = + STREAM_CODEC } } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameFinishEval.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameFinishEval.kt index 72bbb8c80c..ed16b1768c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameFinishEval.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameFinishEval.kt @@ -6,7 +6,10 @@ import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.NullIota import at.petrak.hexcasting.api.utils.NBTBuilder import at.petrak.hexcasting.common.lib.hex.HexEvalSounds +import com.mojang.serialization.MapCodec import net.minecraft.nbt.CompoundTag +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.StreamCodec import net.minecraft.server.level.ServerLevel /** @@ -24,7 +27,7 @@ object FrameFinishEval : ContinuationFrame { harness: CastingVM ): CastResult { return CastResult( - NullIota(), + NullIota.INSTANCE, continuation, null, listOf(), @@ -33,13 +36,19 @@ object FrameFinishEval : ContinuationFrame { ) } - override fun serializeToNBT() = CompoundTag() - override fun size() = 0 @JvmField val TYPE: ContinuationFrame.Type = object : ContinuationFrame.Type { - override fun deserializeFromNBT(tag: CompoundTag, world: ServerLevel) = FrameFinishEval + val CODEC = MapCodec.unit(FrameFinishEval) + val STREAM_CODEC = StreamCodec.unit(FrameFinishEval) + + override fun codec(): MapCodec = + CODEC + + override fun streamCodec(): StreamCodec = + STREAM_CODEC + } override val type = TYPE diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt index 02d9612767..0017aeecf3 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/FrameForEach.kt @@ -4,16 +4,17 @@ import at.petrak.hexcasting.api.casting.SpellList import at.petrak.hexcasting.api.casting.eval.CastResult import at.petrak.hexcasting.api.casting.eval.ResolvedPatternType import at.petrak.hexcasting.api.casting.iota.Iota +import at.petrak.hexcasting.api.casting.iota.IotaType import at.petrak.hexcasting.api.casting.iota.ListIota -import at.petrak.hexcasting.api.utils.NBTBuilder -import at.petrak.hexcasting.api.utils.getList -import at.petrak.hexcasting.api.utils.hasList -import at.petrak.hexcasting.api.utils.serializeToNBT import at.petrak.hexcasting.common.lib.hex.HexEvalSounds -import at.petrak.hexcasting.common.lib.hex.HexIotaTypes -import net.minecraft.nbt.CompoundTag -import net.minecraft.nbt.Tag +import com.mojang.serialization.MapCodec +import com.mojang.serialization.codecs.RecordCodecBuilder +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec import net.minecraft.server.level.ServerLevel +import java.util.* +import kotlin.jvm.optionals.getOrNull /** * A frame representing all the state for a Thoth evaluation. @@ -81,14 +82,6 @@ data class FrameForEach( ) } - override fun serializeToNBT() = NBTBuilder { - "data" %= data.serializeToNBT() - "code" %= code.serializeToNBT() - if (baseStack != null) - "base" %= baseStack.serializeToNBT() - "accumulator" %= acc.serializeToNBT() - } - override fun size() = data.size() + code.size() + acc.size + (baseStack?.size ?: 0) override val type: ContinuationFrame.Type<*> = TYPE @@ -96,21 +89,33 @@ data class FrameForEach( companion object { @JvmField val TYPE: ContinuationFrame.Type = object : ContinuationFrame.Type { - override fun deserializeFromNBT(tag: CompoundTag, world: ServerLevel): FrameForEach { - return FrameForEach( - HexIotaTypes.LIST.deserialize(tag.getList("data", Tag.TAG_COMPOUND), world)!!.list, - HexIotaTypes.LIST.deserialize(tag.getList("code", Tag.TAG_COMPOUND), world)!!.list, - if (tag.hasList("base", Tag.TAG_COMPOUND)) - HexIotaTypes.LIST.deserialize(tag.getList("base", Tag.TAG_COMPOUND), world)!!.list.toList() - else - null, - HexIotaTypes.LIST.deserialize( - tag.getList("accumulator", Tag.TAG_COMPOUND), - world - )!!.list.toMutableList() - ) + val CODEC = RecordCodecBuilder.mapCodec { inst -> + inst.group( + SpellList.CODEC.fieldOf("data").forGetter { it.data }, + SpellList.CODEC.fieldOf("code").forGetter { it.code }, + IotaType.TYPED_CODEC.listOf().optionalFieldOf("base").forGetter { Optional.ofNullable(it.baseStack) }, + IotaType.TYPED_CODEC.listOf().fieldOf("accumulator").forGetter { it.acc } + ).apply(inst) { a, b, c, d -> + FrameForEach(a, b, c.getOrNull(), d) + } + } + val STREAM_CODEC = StreamCodec.composite( + SpellList.STREAM_CODEC, FrameForEach::data, + SpellList.STREAM_CODEC, FrameForEach::code, + ByteBufCodecs.optional(IotaType.TYPED_STREAM_CODEC + .apply(ByteBufCodecs.list())), { Optional.ofNullable(it.baseStack) }, + IotaType.TYPED_STREAM_CODEC + .apply(ByteBufCodecs.list()), FrameForEach::acc + ) { a, b, c, d -> + FrameForEach(a, b, c.getOrNull(), d) } + + override fun codec(): MapCodec = + CODEC + + override fun streamCodec(): StreamCodec = + STREAM_CODEC } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/SpellContinuation.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/SpellContinuation.kt index ec706c2858..774d9ea60d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/SpellContinuation.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/SpellContinuation.kt @@ -1,10 +1,13 @@ package at.petrak.hexcasting.api.casting.eval.vm -import at.petrak.hexcasting.api.utils.NBTBuilder -import at.petrak.hexcasting.api.utils.getList -import net.minecraft.nbt.CompoundTag -import net.minecraft.nbt.Tag -import net.minecraft.server.level.ServerLevel +import com.mojang.datafixers.util.Either +import com.mojang.serialization.Codec +import com.mojang.serialization.codecs.RecordCodecBuilder +import io.netty.buffer.ByteBuf +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import java.util.function.Function /** * A continuation during the execution of a spell. @@ -16,31 +19,43 @@ sealed interface SpellContinuation { fun pushFrame(frame: ContinuationFrame): SpellContinuation = NotDone(frame, this) - fun serializeToNBT() = NBTBuilder { - TAG_FRAME %= list(getNBTFrames()) - } - fun getNBTFrames(): List { - var self = this - val frames = mutableListOf() - while (self is NotDone) { - frames.add(ContinuationFrame.toNBT(self.frame)) - self = self.next - } - return frames - } companion object { - const val TAG_FRAME = "frame" - + // TODO port: maybe serialize to list like before? + // TODO port: maybe unit should be first @JvmStatic - fun fromNBT(nbt: CompoundTag, world: ServerLevel): SpellContinuation { - val frames = nbt.getList(TAG_FRAME, Tag.TAG_COMPOUND) - var result: SpellContinuation = Done - for (frame in frames.asReversed()) { - if (frame is CompoundTag) { - result = result.pushFrame(ContinuationFrame.fromNBT(frame, world)) + val CODEC = Codec.recursive( + SpellContinuation::class.java.simpleName + ) { recursed: Codec -> + Codec.withAlternative( + Codec.unit(Done), + RecordCodecBuilder.create { inst -> + inst.group( + ContinuationFrame.Type.TYPED_CODEC.fieldOf("frame").forGetter { it.frame }, + recursed.fieldOf("next").forGetter { it.next } + ).apply(inst, ::NotDone) } - } - return result + ) + } + @JvmStatic + val STREAM_CODEC = StreamCodec.recursive { recursed -> + withAlternative( + StreamCodec.unit(Done), + StreamCodec.composite( + ContinuationFrame.Type.TYPED_STREAM_CODEC, NotDone::frame, + recursed, NotDone::next, + ::NotDone + ).map(Function.identity()) { it as NotDone } + ) + } + + private fun withAlternative(primary: StreamCodec, alternative: StreamCodec): StreamCodec { + return ByteBufCodecs.either( + primary, + alternative + ).map( + Function { either: Either -> Either.unwrap(either) }, + Function { value: T -> Either.left(value) } + ) } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/BooleanIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/BooleanIota.java index 91cf0b339d..8b03fc33c9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/BooleanIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/BooleanIota.java @@ -2,21 +2,26 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import io.netty.buffer.ByteBuf; import net.minecraft.ChatFormatting; import net.minecraft.nbt.ByteTag; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerLevel; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; public class BooleanIota extends Iota { + private boolean value; public BooleanIota(boolean d) { - super(HexIotaTypes.BOOLEAN, d); + super(() -> HexIotaTypes.BOOLEAN); + this.value = d; } public boolean getBool() { - return (boolean) this.payload; + return value; } @Override @@ -32,21 +37,30 @@ public boolean toleratesOther(Iota that) { } @Override - public @NotNull Tag serialize() { - // there is no boolean tag :( - return ByteTag.valueOf(this.getBool()); + public int hashCode() { + return Boolean.hashCode(value); + } + + @Override + public Component display() { + return BooleanIota.display(getBool()); } public static IotaType TYPE = new IotaType<>() { - @Nullable + public static final MapCodec CODEC = Codec.BOOL + .xmap(BooleanIota::new, BooleanIota::getBool) + .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.BOOL.map(BooleanIota::new, BooleanIota::getBool).mapStream(buffer -> buffer); + @Override - public BooleanIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - return BooleanIota.deserialize(tag); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - return BooleanIota.display(BooleanIota.deserialize(tag).getBool()); + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ContinuationIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ContinuationIota.java index 13764c4675..7eca19aa6d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ContinuationIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ContinuationIota.java @@ -4,13 +4,17 @@ import at.petrak.hexcasting.api.casting.eval.ResolvedPatternType; import at.petrak.hexcasting.api.casting.eval.vm.CastingVM; import at.petrak.hexcasting.api.casting.eval.vm.SpellContinuation; +import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.server.level.ServerLevel; import org.jetbrains.annotations.NotNull; @@ -21,13 +25,15 @@ */ public class ContinuationIota extends Iota { public static final Component DISPLAY = Component.translatable("hexcasting.tooltip.jump_iota").withStyle(ChatFormatting.RED); + private SpellContinuation value; public ContinuationIota(SpellContinuation cont) { - super(HexIotaTypes.CONTINUATION, cont); + super(() -> HexIotaTypes.CONTINUATION); + this.value = cont; } public SpellContinuation getContinuation() { - return (SpellContinuation) this.payload; + return value; } @Override @@ -40,12 +46,6 @@ public boolean toleratesOther(Iota that) { return typesMatch(this, that) && that instanceof ContinuationIota cont && cont.getContinuation().equals(getContinuation()); } - @Override - public @NotNull - Tag serialize() { - return getContinuation().serializeToNBT(); - } - @Override public @NotNull CastResult execute(CastingVM vm, ServerLevel world, SpellContinuation continuation) { return new CastResult(this, this.getContinuation(), vm.getImage(), List.of(), ResolvedPatternType.EVALUATED, HexEvalSounds.HERMES); @@ -69,16 +69,31 @@ public int size() { return Math.min(size, 1); } + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public Component display() { + return DISPLAY; + } + public static IotaType TYPE = new IotaType<>() { + public static final MapCodec CODEC = SpellContinuation.getCODEC() + .xmap(ContinuationIota::new, ContinuationIota::getContinuation) + .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = + SpellContinuation.getSTREAM_CODEC().map(ContinuationIota::new, ContinuationIota::getContinuation); + @Override - public @NotNull ContinuationIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - var compoundTag = HexUtils.downcast(tag, CompoundTag.TYPE); - return new ContinuationIota(SpellContinuation.fromNBT(compoundTag, world)); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - return DISPLAY; + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/DoubleIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/DoubleIota.java index e9ff20f57c..229fded62a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/DoubleIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/DoubleIota.java @@ -2,23 +2,30 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.nbt.DoubleTag; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.server.level.ServerLevel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class DoubleIota extends Iota { public static final double TOLERANCE = 0.0001; + private double value; public DoubleIota(double d) { - super(HexIotaTypes.DOUBLE, d); + super(() -> HexIotaTypes.DOUBLE); + this.value = d; } public double getDouble() { - return HexUtils.fixNAN((Double) this.payload); + return HexUtils.fixNAN((Double) value); } @Override @@ -38,20 +45,30 @@ public static boolean tolerates(double a, double b) { } @Override - public @NotNull Tag serialize() { - return DoubleTag.valueOf(this.getDouble()); + public int hashCode() { + return Double.hashCode(value); + } + + @Override + public Component display() { + return DoubleIota.display(value); } public static IotaType TYPE = new IotaType<>() { - @Nullable + public static final MapCodec CODEC = Codec.DOUBLE + .xmap(DoubleIota::new, DoubleIota::getDouble) + .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.DOUBLE.map(DoubleIota::new, DoubleIota::getDouble).mapStream(buffer -> buffer); + @Override - public DoubleIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - return DoubleIota.deserialize(tag); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - return DoubleIota.display(DoubleIota.deserialize(tag).getDouble()); + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java index 2a8023cf01..9e55fed8b0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java @@ -1,36 +1,96 @@ package at.petrak.hexcasting.api.casting.iota; -import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import com.samsthenerd.inline.api.InlineAPI; import com.samsthenerd.inline.api.data.EntityInlineData; import com.samsthenerd.inline.api.data.PlayerHeadData; import net.minecraft.ChatFormatting; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.nbt.Tag; +import net.minecraft.core.UUIDUtil; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.component.ResolvableProfile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.lang.ref.WeakReference; +import java.util.Optional; +import java.util.UUID; + public class EntityIota extends Iota { + private final UUID entityId; + @Nullable + private WeakReference cachedEntity; + @Nullable + private Component entityName; + public EntityIota(@NotNull Entity e) { - super(HexIotaTypes.ENTITY, e); + this(e.getUUID(), getEntityNameWithInline(e)); + this.cachedEntity = new WeakReference<>(e); } - public Entity getEntity() { - return (Entity) this.payload; + public EntityIota(UUID entityId, @Nullable Component entityName) { + super(() -> HexIotaTypes.ENTITY); + this.entityId = entityId; + this.entityName = entityName; + } + + public UUID getEntityId() { + return entityId; + } + + @Nullable + public Entity getOrFindEntity(ServerLevel level) { + // First, let's try to get it from weak reference + var entity = getCachedEntity(); + if (entity != null) + return entity; + // Now let's try to fetch it from the world + entity = level.getEntity(entityId); + // Store in weak reference + if (entity != null) + cachedEntity = new WeakReference<>(entity); + return entity; + } + + @Nullable + public Entity getCachedEntity() { + if (cachedEntity != null) + if (!cachedEntity.refersTo(null)) + return cachedEntity.get(); + else + cachedEntity = null; // Clear weakref + return null; + } + + public @Nullable Component getEntityName() { + var ent = getCachedEntity(); + if(ent != null) { + var name = ent.getName(); + this.entityName = name; + return name; + } + + return getCachedEntityName(); + } + + public @Nullable Component getCachedEntityName() { + return entityName; } @Override public boolean toleratesOther(Iota that) { return typesMatch(this, that) - && that instanceof EntityIota dent - && this.getEntity() == dent.getEntity(); + && that instanceof EntityIota dent + && this.getEntityId() == dent.getEntityId(); } @Override @@ -39,63 +99,49 @@ public boolean isTruthy() { } @Override - public @NotNull - Tag serialize() { - var out = new CompoundTag(); - out.putUUID("uuid", this.getEntity().getUUID()); - out.putString("name", Component.Serializer.toJson(getEntityNameWithInline(true))); - return out; + public Component display() { + var name = getCachedEntityName(); + return name != null ? name.copy().withStyle(ChatFormatting.AQUA) : Component.translatable("hexcasting.spelldata.entity.whoknows"); } @Override - public Component display() { - return getEntityNameWithInline(false).copy().withStyle(ChatFormatting.AQUA); + public int hashCode() { + return entityId.hashCode(); } - private Component getEntityNameWithInline(boolean fearSerializer){ - MutableComponent baseName = this.getEntity().getName().copy(); - Component inlineEnt = null; - if(this.getEntity() instanceof Player player){ - inlineEnt = new PlayerHeadData(player.getGameProfile()).asText(!fearSerializer); + private static Component getEntityNameWithInline(Entity entity) { + MutableComponent baseName = entity.getName().copy(); + Component inlineEnt; + if(entity instanceof Player player){ + inlineEnt = new PlayerHeadData(new ResolvableProfile(player.getGameProfile())).asText(false); inlineEnt = inlineEnt.plainCopy().withStyle(InlineAPI.INSTANCE.withSizeModifier(inlineEnt.getStyle(), 1.5)); - } else{ - if(fearSerializer){ // we don't want to have to serialize an entity just to display it - inlineEnt = EntityInlineData.fromType(this.getEntity().getType()).asText(!fearSerializer); - } else { - inlineEnt = EntityInlineData.fromEntity(this.getEntity()).asText(!fearSerializer); - } + } else { + inlineEnt = EntityInlineData.fromType(entity.getType()).asText(false); } return baseName.append(Component.literal(": ")).append(inlineEnt); } public static IotaType TYPE = new IotaType<>() { - @Nullable + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> + inst.group( + UUIDUtil.CODEC.fieldOf("entityId").forGetter(EntityIota::getEntityId), + ComponentSerialization.CODEC.optionalFieldOf("entityName").forGetter(iota -> Optional.ofNullable(iota.getEntityName())) + ).apply(inst, (a, b) -> new EntityIota(a, b.orElse(null)))); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + UUIDUtil.STREAM_CODEC, EntityIota::getEntityId, + ByteBufCodecs.optional(ComponentSerialization.STREAM_CODEC), iota -> Optional.ofNullable(iota.getEntityName()), + (a, b) -> new EntityIota(a, b.orElse(null)) + ); + @Override - public EntityIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - var ctag = HexUtils.downcast(tag, CompoundTag.TYPE); - Tag uuidTag = ctag.get("uuid"); - if (uuidTag == null) { - return null; - } - var uuid = NbtUtils.loadUUID(uuidTag); - var entity = world.getEntity(uuid); - if (entity == null) { - return null; - } - return new EntityIota(entity); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - if (!(tag instanceof CompoundTag ctag)) { - return Component.translatable("hexcasting.spelldata.entity.whoknows"); - } - if (!ctag.contains("name", Tag.TAG_STRING)) { - return Component.translatable("hexcasting.spelldata.entity.whoknows"); - } - var nameJson = ctag.getString("name"); -// return Component.literal(nameJson); - return Component.Serializer.fromJsonLenient(nameJson).withStyle(ChatFormatting.AQUA); + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/GarbageIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/GarbageIota.java index 0824985852..f0c869b00c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/GarbageIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/GarbageIota.java @@ -1,31 +1,28 @@ package at.petrak.hexcasting.api.casting.iota; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; -import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerLevel; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Random; +import net.minecraft.network.codec.StreamCodec; /** * this is LITERALLY a copy of NullIota but I can't see how to do it any better, i hate java generics */ public class GarbageIota extends Iota { + public static final GarbageIota INSTANCE = new GarbageIota(); + private static final Object NULL_SUBSTITUTE = new Object(); public static final Component DISPLAY = Component.literal("arimfexendrapuse") .withStyle(ChatFormatting.DARK_GRAY, ChatFormatting.OBFUSCATED); - private static final Random RANDOM = new Random(); - - public GarbageIota() { + private GarbageIota() { // We have to pass *something* here, but there's nothing that actually needs to go there, // so we just do this i guess - super(HexIotaTypes.GARBAGE, NULL_SUBSTITUTE); + super(() -> HexIotaTypes.GARBAGE); } @Override @@ -39,20 +36,28 @@ public boolean toleratesOther(Iota that) { } @Override - public @NotNull Tag serialize() { - return new CompoundTag(); + public int hashCode() { + return NULL_SUBSTITUTE.hashCode(); + } + + @Override + public Component display() { + return DISPLAY; } public static IotaType TYPE = new IotaType<>() { - @Nullable + public static final MapCodec CODEC = MapCodec.unit(GarbageIota.INSTANCE); + public static final StreamCodec STREAM_CODEC = + StreamCodec.unit(GarbageIota.INSTANCE); + @Override - public GarbageIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - return new GarbageIota(); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - return DISPLAY; + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java index cad6baee82..287ea80391 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java @@ -11,27 +11,27 @@ import at.petrak.hexcasting.api.casting.mishaps.MishapUnescapedValue; import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; -import net.minecraft.nbt.Tag; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.Font; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.FormattedCharSequence; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.function.Supplier; public abstract class Iota { @NotNull - protected final Object payload; - @NotNull - protected final IotaType type; + protected final Supplier> type; - protected Iota(@NotNull IotaType type, @NotNull Object payload) { + protected Iota(@NotNull Supplier> type) { this.type = type; - this.payload = payload; } - public @NotNull IotaType getType() { - return this.type; + public @NotNull IotaType getType() { + return this.type.get(); } abstract public boolean isTruthy(); @@ -41,13 +41,6 @@ protected Iota(@NotNull IotaType type, @NotNull Object payload) { */ abstract protected boolean toleratesOther(Iota that); - /** - * Serialize this under the {@code data} tag. - *

- * You probably don't want to call this directly; use {@link IotaType#serialize}. - */ - abstract public @NotNull Tag serialize(); - /** * This method is called when this iota is executed (i.e. Hermes is run on a list containing it, unescaped). * By default it will return a {@link CastResult} indicating an error has occurred. @@ -100,8 +93,19 @@ public int depth() { return 1; } - public Component display() { - return this.type.display(this.serialize()); + public abstract Component display(); + + public FormattedCharSequence displayWithMaxWidth(int maxWidth, Font font) { + var splitted = font.split(display(), maxWidth - font.width("...")); + if (splitted.isEmpty()) + return FormattedCharSequence.EMPTY; + else if (splitted.size() == 1) + return splitted.getFirst(); + else { + var first = splitted.getFirst(); + return FormattedCharSequence.fromPair(first, + Component.literal("...").withStyle(ChatFormatting.GRAY).getVisualOrderText()); + } } /** @@ -120,8 +124,9 @@ public static boolean tolerates(Iota a, Iota b) { return a.toleratesOther(b) || b.toleratesOther(a); } + /** + * Require overriding hashCode + */ @Override - public int hashCode() { - return payload.hashCode(); - } + public abstract int hashCode(); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java index c0167ae5df..66e4130482 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java @@ -1,78 +1,52 @@ package at.petrak.hexcasting.api.casting.iota; -import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.utils.HexUtils; +import at.petrak.hexcasting.common.lib.HexRegistries; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; -import com.mojang.datafixers.util.Pair; +import at.petrak.hexcasting.xplat.IXplatAbstractions; +import com.mojang.serialization.Codec; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.TextColor; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.util.FormattedCharSequence; -import javax.annotation.Nullable; import java.util.List; -import java.util.Objects; +import java.util.function.Function; // Take notes from ForgeRegistryEntry public abstract class IotaType { - - /** - * Spell datums are stored as such: {@code { "type": "modid:type", "datum": a_tag }}. - *

- * The {@code type} key is given when registering the spell datum type; this method - * deserializes the tag associated with {@code "datum"}. - *

- * Returning {@code null} makes the resulting datum be {@link NullIota}. - * Throwing an exception raises a mishap. - */ - @Nullable - public abstract T deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException; - - /** - * Get a display of this datum from the {@code data} tag, without the world. - * This is for use on the client. - */ - public abstract Component display(Tag tag); - - /** - * Get the color associated with this datum type. - */ - public abstract int color(); - - /** - * Get a display component that's the name of this iota type. - */ - public Component typeName() { - var key = HexIotaTypes.REGISTRY.getKey(this); - return Component.translatable("hexcasting.iota." + key) - .withStyle(style -> style.withColor(TextColor.fromRgb(color()))); - } - - public static CompoundTag serialize(Iota iota) { - var type = iota.getType(); - var typeId = HexIotaTypes.REGISTRY.getKey(type); - if (typeId == null) { - throw new IllegalStateException( - "Tried to serialize an unregistered iota type. Iota: " + iota - + " ; Type" + type.getClass().getTypeName()); - } - - // We check if it's too big on serialization; if it is we just return a garbage. - if (isTooLargeToSerialize(List.of(iota), 0)) { - // Garbage will never be too large so we just recurse - return serialize(new GarbageIota()); - } - var dataTag = iota.serialize(); - var out = new CompoundTag(); - out.putString(HexIotaTypes.KEY_TYPE, typeId.toString()); - out.put(HexIotaTypes.KEY_DATA, dataTag); - return out; - } + public static final Codec TYPED_CODEC = Codec.lazyInitialized(() -> IXplatAbstractions.INSTANCE + .getIotaTypeRegistry() + .byNameCodec() + .dispatch("type", Iota::getType, IotaType::codec) + .comapFlatMap( + iota -> { + if (isTooLargeToSerialize(List.of(iota), 0)) { + return DataResult.success(GarbageIota.INSTANCE); + } + return DataResult.success(iota); + }, + Function.identity() + ).orElse(GarbageIota.INSTANCE) + ); + public static final StreamCodec TYPED_STREAM_CODEC = ByteBufCodecs + .registry(HexRegistries.IOTA_TYPE) + .dispatch(Iota::getType, IotaType::streamCodec); + + + public abstract MapCodec codec(); + + public abstract StreamCodec streamCodec(); public static boolean isTooLargeToSerialize(Iterable examinee) { return isTooLargeToSerialize(examinee, 1); @@ -88,99 +62,10 @@ private static boolean isTooLargeToSerialize(Iterable examinee, int starti return totalSize >= HexIotaTypes.MAX_SERIALIZATION_TOTAL; } - /** - * This method attempts to find the type from the {@code type} key. - * See {@link IotaType#serialize(Iota)} for the storage format. - * - * @return {@code null} if it cannot get the type. - */ - @org.jetbrains.annotations.Nullable - public static IotaType getTypeFromTag(CompoundTag tag) { - if (!tag.contains(HexIotaTypes.KEY_TYPE, Tag.TAG_STRING)) { - return null; - } - var typeKey = tag.getString(HexIotaTypes.KEY_TYPE); - if (!ResourceLocation.isValidResourceLocation(typeKey)) { - return null; - } - var typeLoc = new ResourceLocation(typeKey); - return HexIotaTypes.REGISTRY.get(typeLoc); - } - - /** - * Attempt to deserialize an iota from a tag. - *
- * Iotas are saved as such: - * - * { - * "type": "hexcasting:atype", - * "data": {...} - * } - * - */ - public static Iota deserialize(CompoundTag tag, ServerLevel world) { - var type = getTypeFromTag(tag); - if (type == null) { - return new GarbageIota(); - } - var data = tag.get(HexIotaTypes.KEY_DATA); - if (data == null) { - return new GarbageIota(); - } - Iota deserialized; - try { - deserialized = Objects.requireNonNullElse(type.deserialize(data, world), new NullIota()); - } catch (IllegalArgumentException exn) { - HexAPI.LOGGER.warn("Caught an exception deserializing an iota", exn); - deserialized = new GarbageIota(); - } - return deserialized; - } - - private static Component brokenIota() { + public static Component brokenIota() { return Component.translatable("hexcasting.spelldata.unknown") .withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC); } - public static Component getDisplay(CompoundTag tag) { - var type = getTypeFromTag(tag); - if (type == null) { - return brokenIota(); - } - var data = tag.get(HexIotaTypes.KEY_DATA); - if (data == null) { - return brokenIota(); - } - return type.display(data); - } - - public static FormattedCharSequence getDisplayWithMaxWidth(CompoundTag tag, int maxWidth, Font font) { - var type = getTypeFromTag(tag); - if (type == null) { - return brokenIota().getVisualOrderText(); - } - var data = tag.get(HexIotaTypes.KEY_DATA); - if (data == null) { - return brokenIota().getVisualOrderText(); - } - var display = type.display(data); - var splitted = font.split(display, maxWidth - font.width("...")); - if (splitted.isEmpty()) - return FormattedCharSequence.EMPTY; - else if (splitted.size() == 1) - return splitted.get(0); - else { - var first = splitted.get(0); - return FormattedCharSequence.fromPair(first, - Component.literal("...").withStyle(ChatFormatting.GRAY).getVisualOrderText()); - } - } - - public static int getColor(CompoundTag tag) { - var type = getTypeFromTag(tag); - if (type == null) { - return HexUtils.ERROR_COLOR; - } - return type.color(); - } + public abstract int color(); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ListIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ListIota.java index d3eb9455bf..ab41d887c4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ListIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/ListIota.java @@ -1,18 +1,15 @@ package at.petrak.hexcasting.api.casting.iota; import at.petrak.hexcasting.api.casting.SpellList; -import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; -import net.minecraft.server.level.ServerLevel; +import net.minecraft.network.codec.StreamCodec; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; import static java.lang.Math.max; @@ -21,11 +18,13 @@ * This is a wrapper for {@link SpellList}. */ public class ListIota extends Iota { + private SpellList list; private final int depth; private final int size; public ListIota(@NotNull SpellList list) { - super(HexIotaTypes.LIST, list); + super(() -> HexIotaTypes.LIST); + this.list = list; int maxChildDepth = 0; int totalSize = 1; for (Iota iota : list) { @@ -41,7 +40,7 @@ public ListIota(@NotNull List list) { } public SpellList getList() { - return (SpellList) this.payload; + return list; } @Override @@ -77,15 +76,6 @@ public boolean toleratesOther(Iota that) { } } - @Override - public @NotNull Tag serialize() { - var out = new ListTag(); - for (var subdatum : this.getList()) { - out.add(IotaType.serialize(subdatum)); - } - return out; - } - @Override public @Nullable Iterable subIotas() { return this.getList(); @@ -101,43 +91,45 @@ public int depth() { return depth; } - public static IotaType TYPE = new IotaType<>() { - @Nullable - @Override - public ListIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - var listTag = HexUtils.downcast(tag, ListTag.TYPE); - var out = new ArrayList(listTag.size()); - - for (var sub : listTag) { - var csub = HexUtils.downcast(sub, CompoundTag.TYPE); - var subiota = IotaType.deserialize(csub, world); - if (subiota == null) { - return null; - } - out.add(subiota); + @Override + public int hashCode() { + return list.hashCode(); + } + + @Override + public Component display() { + var out = Component.empty(); + + for (int i = 0; i < list.size(); i++) { + var sub = list.getAt(i); + + out.append(sub.display()); + + // only add a comma between 2 non-patterns (commas don't look good with Inline patterns) + // TODO: maybe add a config? maybe add a method on IotaType to allow it to opt out of commas + if (i < list.size() - 1 && (sub.type != PatternIota.TYPE + || list.getAt(i + 1).type != PatternIota.TYPE)) { + out.append(", "); } + } + return Component.translatable("hexcasting.tooltip.list_contents", out).withStyle(ChatFormatting.DARK_PURPLE); + } - return new ListIota(out); + public static IotaType TYPE = new IotaType<>() { + public static final MapCodec CODEC = SpellList.getCODEC() + .xmap(ListIota::new, ListIota::getList) + .fieldOf("list"); + public static final StreamCodec STREAM_CODEC = + SpellList.getSTREAM_CODEC().map(ListIota::new, ListIota::getList); + + @Override + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - var out = Component.empty(); - var list = HexUtils.downcast(tag, ListTag.TYPE); - for (int i = 0; i < list.size(); i++) { - Tag sub = list.get(i); - var csub = HexUtils.downcast(sub, CompoundTag.TYPE); - - out.append(IotaType.getDisplay(csub)); - - // only add a comma between 2 non-patterns (commas don't look good with Inline patterns) - // TODO: maybe add a config? maybe add a method on IotaType to allow it to opt out of commas - if (i < list.size() - 1 && (IotaType.getTypeFromTag(csub) != PatternIota.TYPE - || IotaType.getTypeFromTag(HexUtils.downcast(list.get(i+1), CompoundTag.TYPE)) != PatternIota.TYPE)) { - out.append(", "); - } - } - return Component.translatable("hexcasting.tooltip.list_contents", out).withStyle(ChatFormatting.DARK_PURPLE); + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/NullIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/NullIota.java index 525e6b22a9..73bde5b4fb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/NullIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/NullIota.java @@ -1,10 +1,13 @@ package at.petrak.hexcasting.api.casting.iota; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.server.level.ServerLevel; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -13,15 +16,14 @@ * An iota with no data associated with it. */ public class NullIota extends Iota { + public static final NullIota INSTANCE = new NullIota(); private static final Object NULL_SUBSTITUTE = new Object(); public static final Component DISPLAY = Component.translatable("hexcasting.tooltip.null_iota").withStyle(ChatFormatting.GRAY); - public NullIota() { - // We have to pass *something* here, but there's nothing that actually needs to go there, - // so we just do this i guess - super(HexIotaTypes.NULL, NULL_SUBSTITUTE); + private NullIota() { + super(() -> HexIotaTypes.NULL); } @Override @@ -35,20 +37,28 @@ public boolean toleratesOther(Iota that) { } @Override - public @NotNull Tag serialize() { - return new CompoundTag(); + public int hashCode() { + return NULL_SUBSTITUTE.hashCode(); + } + + @Override + public Component display() { + return DISPLAY; } public static IotaType TYPE = new IotaType<>() { - @Nullable + public static final MapCodec CODEC = MapCodec.unit(NullIota.INSTANCE); + public static final StreamCodec STREAM_CODEC = + StreamCodec.unit(NullIota.INSTANCE); + @Override - public NullIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - return new NullIota(); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - return DISPLAY; + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java index b86e8541ce..91fa4fe2f2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/PatternIota.java @@ -21,11 +21,16 @@ import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.interop.inline.InlinePatternData; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Style; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerLevel; import org.jetbrains.annotations.NotNull; @@ -38,16 +43,15 @@ import static at.petrak.hexcasting.api.utils.HexUtils.isOfTag; public class PatternIota extends Iota { + private HexPattern value; + public PatternIota(@NotNull HexPattern pattern) { - super(HexIotaTypes.PATTERN, pattern); + super(() -> HexIotaTypes.PATTERN); + this.value = pattern; } public HexPattern getPattern() { - return (HexPattern) this.payload; - } - - protected PatternIota(@NotNull IotaType type, @NotNull Object payload) { - super(type, payload); + return value; } @Override @@ -62,11 +66,6 @@ public boolean toleratesOther(Iota that) { && this.getPattern().getAngles().equals(piota.getPattern().getAngles()); } - @Override - public @NotNull Tag serialize() { - return this.getPattern().serializeToNBT(); - } - @Override public @NotNull CastResult execute(CastingVM vm, ServerLevel world, SpellContinuation continuation) { Supplier<@Nullable Component> castedName = () -> null; @@ -140,15 +139,31 @@ public boolean executable() { return true; } + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public Component display() { + return PatternIota.display(getPattern()); + } + public static IotaType TYPE = new IotaType<>() { + public static final MapCodec CODEC = HexPattern.CODEC + .xmap(PatternIota::new, PatternIota::getPattern) + .fieldOf("value"); + public static final StreamCodec STREAM_CODEC = + HexPattern.STREAM_CODEC.map(PatternIota::new, PatternIota::getPattern); + @Override - public PatternIota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - return PatternIota.deserialize(tag); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - return PatternIota.display(PatternIota.deserialize(tag).getPattern()); + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override @@ -157,12 +172,6 @@ public int color() { } }; - public static PatternIota deserialize(Tag tag) throws IllegalArgumentException { - var patTag = HexUtils.downcast(tag, CompoundTag.TYPE); - HexPattern pat = HexPattern.fromNBT(patTag); - return new PatternIota(pat); - } - public static Component display(HexPattern pat) { Component text = (new InlinePatternData(pat)).asText(true); return text.copy().withStyle(text.getStyle().applyTo(Style.EMPTY.withColor(ChatFormatting.WHITE))); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Vec3Iota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Vec3Iota.java index 9d9d7fbf67..8836869fce 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Vec3Iota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Vec3Iota.java @@ -2,27 +2,35 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.LongArrayTag; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + public class Vec3Iota extends Iota { + private Vec3 value; public Vec3Iota(@NotNull Vec3 datum) { - super(HexIotaTypes.VEC3, datum); + super(() -> HexIotaTypes.VEC3); + this.value = datum; } public Vec3 getVec3() { - var v = (Vec3) this.payload; return new Vec3( - HexUtils.fixNAN(v.x), - HexUtils.fixNAN(v.y), - HexUtils.fixNAN(v.z) + HexUtils.fixNAN(value.x), + HexUtils.fixNAN(value.y), + HexUtils.fixNAN(value.z) ); } @@ -40,20 +48,36 @@ public boolean toleratesOther(Iota that) { } @Override - public @NotNull Tag serialize() { - return HexUtils.serializeToNBT(this.getVec3()); + public int hashCode() { + return value.hashCode(); + } + + @Override + public Component display() { + return Vec3Iota.display(getVec3()); } public static IotaType TYPE = new IotaType<>() { - @Nullable + public static final MapCodec CODEC = Vec3.CODEC + .xmap(Vec3Iota::new, Vec3Iota::getVec3) + .fieldOf("value"); + // TODO replace with Vec3 codec if it will appear somewhere + public static final StreamCodec STREAM_CODEC = + ByteBufCodecs.DOUBLE.apply(ByteBufCodecs.list()) + .map( + l -> new Vec3Iota(new Vec3(l.get(0), l.get(1), l.get(2))), + iota -> List.of(iota.getVec3().x, iota.getVec3().y, iota.getVec3().z) + ) + .mapStream(b -> b); + @Override - public Vec3Iota deserialize(Tag tag, ServerLevel world) throws IllegalArgumentException { - return Vec3Iota.deserialize(tag); + public MapCodec codec() { + return CODEC; } @Override - public Component display(Tag tag) { - return Vec3Iota.display(Vec3Iota.deserialize(tag).getVec3()); + public StreamCodec streamCodec() { + return STREAM_CODEC; } @Override @@ -62,16 +86,6 @@ public int color() { } }; - public static Vec3Iota deserialize(Tag tag) throws IllegalArgumentException { - Vec3 vec; - if (tag.getType() == LongArrayTag.TYPE) { - var lat = HexUtils.downcast(tag, LongArrayTag.TYPE); - vec = HexUtils.vecFromNBT(lat.getAsLongArray()); - } else - vec = HexUtils.vecFromNBT(HexUtils.downcast(tag, CompoundTag.TYPE)); - return new Vec3Iota(vec); - } - public static Component display(double x, double y, double z) { return Component.literal(String.format("(%.2f, %.2f, %.2f)", x, y, z)) .withStyle(ChatFormatting.RED); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexDir.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexDir.kt index 03f4ca5a56..b11ba185a0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexDir.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexDir.kt @@ -2,6 +2,10 @@ package at.petrak.hexcasting.api.casting.math import at.petrak.hexcasting.api.utils.getSafe import com.mojang.serialization.Codec +import io.netty.buffer.ByteBuf +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec enum class HexDir { NORTH_EAST, EAST, SOUTH_EAST, SOUTH_WEST, WEST, NORTH_WEST; @@ -31,6 +35,10 @@ enum class HexDir { HexDir::fromString, HexDir::name ) + val STREAM_CODEC: StreamCodec = ByteBufCodecs.STRING_UTF8.map( + HexDir::fromString, + HexDir::name + ) @JvmStatic fun fromString(key: String): HexDir { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt index 001cfdeab4..9dea87f1bc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/math/HexPattern.kt @@ -8,6 +8,9 @@ import com.mojang.serialization.Codec import com.mojang.serialization.codecs.RecordCodecBuilder import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.Tag +import net.minecraft.network.RegistryFriendlyByteBuf +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec import net.minecraft.world.phys.Vec2 /** @@ -73,12 +76,6 @@ data class HexPattern(val startDir: HexDir, val angles: MutableList = fun finalDir(): HexDir = this.angles.fold(this.startDir) { acc, angle -> acc * angle } - - fun serializeToNBT() = NBTBuilder { - TAG_START_DIR %= byte(startDir.ordinal) - TAG_ANGLES %= byteArray(angles.map(HexAngle::ordinal)) - } - // Terrible shorthand method for easy matching fun anglesSignature(): String { return buildString { @@ -126,28 +123,19 @@ data class HexPattern(val startDir: HexDir, val angles: MutableList = } companion object { - const val TAG_START_DIR = "start_dir" - const val TAG_ANGLES = "angles" - @JvmField val CODEC: Codec = RecordCodecBuilder.create({instance -> instance.group( - Codec.STRING.fieldOf(TAG_START_DIR).forGetter(HexPattern::anglesSignature), - HexDir.CODEC.fieldOf(TAG_ANGLES).forGetter(HexPattern::startDir) + Codec.STRING.fieldOf("start_dir").forGetter(HexPattern::anglesSignature), + HexDir.CODEC.fieldOf("angles").forGetter(HexPattern::startDir) ).apply(instance, HexPattern::fromAngles) }) - @JvmStatic - fun isPattern(tag: CompoundTag): Boolean { - return tag.contains(TAG_START_DIR, Tag.TAG_ANY_NUMERIC.toInt()) - && tag.contains(TAG_ANGLES, Tag.TAG_BYTE_ARRAY.toInt()) - } - - @JvmStatic - fun fromNBT(tag: CompoundTag): HexPattern { - val startDir = HexDir.values().getSafe(tag.getByte(TAG_START_DIR)) - val angles = tag.getByteArray(TAG_ANGLES).map(HexAngle.values()::getSafe) - return HexPattern(startDir, angles.toMutableList()) - } + @JvmField + val STREAM_CODEC: StreamCodec = StreamCodec.composite( + ByteBufCodecs.STRING_UTF8, HexPattern::anglesSignature, + HexDir.STREAM_CODEC, HexPattern::startDir, + HexPattern::fromAngles + ) @JvmStatic fun fromAngles(signature: String, startDir: HexDir): HexPattern { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapAlreadyBrainswept.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapAlreadyBrainswept.kt index d076dd36e2..fcfe86b2d7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapAlreadyBrainswept.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapAlreadyBrainswept.kt @@ -5,7 +5,6 @@ import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.pigment.FrozenPigment import at.petrak.hexcasting.common.lib.HexDamageTypes -import at.petrak.hexcasting.mixin.accessor.AccessorDamageSource import net.minecraft.world.entity.Mob import net.minecraft.world.item.DyeColor @@ -14,11 +13,7 @@ class MishapAlreadyBrainswept(val mob: Mob) : Mishap() { dyeColor(DyeColor.GREEN) override fun execute(ctx: CastingEnvironment, errorCtx: Context, stack: MutableList) { - trulyHurt( - mob, - (mob.damageSources() as AccessorDamageSource).`hex$source`(HexDamageTypes.OVERCAST, ctx.castingEntity)!!, - mob.health - ) + mob.hurt(mob.damageSources().source(HexDamageTypes.OVERCAST, ctx.castingEntity), mob.health) } override fun particleSpray(ctx: CastingEnvironment) = diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadBrainsweep.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadBrainsweep.kt index 7054802563..601273fbb0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadBrainsweep.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadBrainsweep.kt @@ -5,7 +5,6 @@ import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.pigment.FrozenPigment import at.petrak.hexcasting.common.lib.HexDamageTypes -import at.petrak.hexcasting.mixin.accessor.AccessorDamageSource import net.minecraft.core.BlockPos import net.minecraft.world.entity.Mob import net.minecraft.world.item.DyeColor @@ -16,11 +15,7 @@ class MishapBadBrainsweep(val mob: Mob, val pos: BlockPos) : Mishap() { dyeColor(DyeColor.GREEN) override fun execute(ctx: CastingEnvironment, errorCtx: Context, stack: MutableList) { - trulyHurt( - mob, - (mob.damageSources() as AccessorDamageSource).`hex$source`(HexDamageTypes.OVERCAST, ctx.castingEntity)!!, - 1f - ) + trulyHurt(mob, mob.damageSources().source(HexDamageTypes.OVERCAST, ctx.castingEntity), 1f) } override fun particleSpray(ctx: CastingEnvironment): ParticleSpray { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadEntity.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadEntity.kt index a9334f0137..f176e62769 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadEntity.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapBadEntity.kt @@ -19,7 +19,7 @@ class MishapBadEntity(val entity: Entity, val wanted: Component) : Mishap() { } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = - error("bad_entity", wanted, entity.displayName!!.plainCopy().aqua) + error("bad_entity", wanted, entity.displayName?.plainCopy()?.aqua ?: entity.type.description.plainCopy().aqua) companion object { @JvmStatic diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapDivideByZero.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapDivideByZero.kt index 98050ee244..b31a0c84f3 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapDivideByZero.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapDivideByZero.kt @@ -17,7 +17,7 @@ class MishapDivideByZero(val operand1: Component, val operand2: Component, val s dyeColor(DyeColor.RED) override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { - stack.add(GarbageIota()) + stack.add(GarbageIota.INSTANCE) env.mishapEnvironment.damage(0.5f) } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityTooFarAway.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityTooFarAway.kt index d486bff74d..5f196d376f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityTooFarAway.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityTooFarAway.kt @@ -3,6 +3,7 @@ package at.petrak.hexcasting.api.casting.mishaps import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.pigment.FrozenPigment +import at.petrak.hexcasting.api.utils.aqua import net.minecraft.network.chat.Component import net.minecraft.world.entity.Entity import net.minecraft.world.item.DyeColor @@ -16,5 +17,5 @@ class MishapEntityTooFarAway(val entity: Entity) : Mishap() { } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context): Component = - error("entity_too_far", entity.displayName!!) + error("entity_too_far", entity.displayName?.plainCopy() ?: entity.type.description) } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityUnavailable.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityUnavailable.kt new file mode 100644 index 0000000000..9ec7232fb9 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapEntityUnavailable.kt @@ -0,0 +1,20 @@ +package at.petrak.hexcasting.api.casting.mishaps + +import at.petrak.hexcasting.api.casting.eval.CastingEnvironment +import at.petrak.hexcasting.api.casting.iota.Iota +import at.petrak.hexcasting.api.pigment.FrozenPigment +import at.petrak.hexcasting.api.utils.aqua +import net.minecraft.ChatFormatting +import net.minecraft.network.chat.Component +import net.minecraft.world.item.DyeColor +import java.util.* + +class MishapEntityUnavailable(val entityId: UUID, val entityName: Component?) : Mishap() { + override fun accentColor(ctx: CastingEnvironment, errorCtx: Context): FrozenPigment = + dyeColor(DyeColor.BROWN) + + override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) {} + + override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = + error("unavailable_entity", entityName?.plainCopy()?.aqua ?: Component.literal(entityId.toString()).withStyle(ChatFormatting.AQUA)) +} diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapImmuneEntity.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapImmuneEntity.kt index 1a027a1a77..ca2622947a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapImmuneEntity.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapImmuneEntity.kt @@ -4,6 +4,8 @@ import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.pigment.FrozenPigment import at.petrak.hexcasting.api.utils.aqua +import net.minecraft.core.registries.Registries +import net.minecraft.network.chat.Component import net.minecraft.world.entity.Entity import net.minecraft.world.item.DyeColor @@ -16,5 +18,5 @@ class MishapImmuneEntity(val entity: Entity) : Mishap() { } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = - error("immune_entity", entity.displayName!!.plainCopy().aqua) + error("immune_entity", entity.displayName?.plainCopy()?.aqua ?: entity.type.description.plainCopy().aqua) } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidIota.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidIota.kt index 17e71d6044..3645a95ab7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidIota.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidIota.kt @@ -20,7 +20,7 @@ class MishapInvalidIota( dyeColor(DyeColor.GRAY) override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { - stack[stack.size - 1 - reverseIdx] = GarbageIota(); + stack[stack.size - 1 - reverseIdx] = GarbageIota.INSTANCE; } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidOperatorArgs.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidOperatorArgs.kt index a16c083f4c..187ecd8dac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidOperatorArgs.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidOperatorArgs.kt @@ -18,7 +18,7 @@ class MishapInvalidOperatorArgs(val perpetrators: List) : Mishap() { override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { for (i in perpetrators.indices) { - stack[stack.size - 1 - i] = GarbageIota() + stack[stack.size - 1 - i] = GarbageIota.INSTANCE } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidPattern.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidPattern.kt index 20fbd31fb5..e52b71a2cc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidPattern.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapInvalidPattern.kt @@ -14,7 +14,7 @@ class MishapInvalidPattern : Mishap() { override fun resolutionType(ctx: CastingEnvironment) = ResolvedPatternType.INVALID override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { - stack.add(GarbageIota()) + stack.add(GarbageIota.INSTANCE) } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapLocationInWrongDimension.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapLocationInWrongDimension.kt index 2d0e721838..c13b88af58 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapLocationInWrongDimension.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapLocationInWrongDimension.kt @@ -13,7 +13,7 @@ class MishapLocationInWrongDimension(val properDimension: ResourceLocation) : Mi dyeColor(DyeColor.MAGENTA) override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { - stack.add(GarbageIota()) + stack.add(GarbageIota.INSTANCE) } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context): Component = diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapNotEnoughArgs.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapNotEnoughArgs.kt index 646f42c927..beed34a8de 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapNotEnoughArgs.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapNotEnoughArgs.kt @@ -11,7 +11,7 @@ class MishapNotEnoughArgs(val expected: Int, val got: Int) : Mishap() { dyeColor(DyeColor.LIGHT_GRAY) override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { - repeat(expected - got) { stack.add(GarbageIota()) } + repeat(expected - got) { stack.add(GarbageIota.INSTANCE) } } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOthersName.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOthersName.kt index e6ea0326ed..629ed69189 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOthersName.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOthersName.kt @@ -5,6 +5,7 @@ import at.petrak.hexcasting.api.casting.iota.EntityIota import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.ListIota import at.petrak.hexcasting.api.pigment.FrozenPigment +import net.minecraft.server.level.ServerLevel import net.minecraft.world.entity.player.Player import net.minecraft.world.item.DyeColor @@ -33,14 +34,19 @@ class MishapOthersName(val confidant: Player) : Mishap() { * If `caster` is non-null, it will ignore that when checking. */ @JvmStatic - fun getTrueNameFromDatum(datum: Iota, caster: Player?): Player? { + fun getTrueNameFromDatum(level: ServerLevel, datum: Iota, caster: Player?): Player? { val poolToSearch = ArrayDeque() poolToSearch.addLast(datum) while (poolToSearch.isNotEmpty()) { val datumToCheck = poolToSearch.removeFirst() - if (datumToCheck is EntityIota && datumToCheck.entity is Player && datumToCheck.entity != caster) - return datumToCheck.entity as Player + + if(datumToCheck is EntityIota) { + var ent = datumToCheck.getOrFindEntity(level) + if(ent is Player && ent != caster) + return ent + } + val datumSubIotas = datumToCheck.subIotas() if (datumSubIotas != null) poolToSearch.addAll(datumSubIotas) @@ -50,8 +56,8 @@ class MishapOthersName(val confidant: Player) : Mishap() { } @JvmStatic - fun getTrueNameFromArgs(datums: List, caster: Player?): Player? { - return datums.firstNotNullOfOrNull { getTrueNameFromDatum(it, caster) } + fun getTrueNameFromArgs(level: ServerLevel, datums: List, caster: Player?): Player? { + return datums.firstNotNullOfOrNull { getTrueNameFromDatum(level, it, caster) } } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapStackSize.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapStackSize.kt index 571e39bcd9..87dc91a010 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapStackSize.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapStackSize.kt @@ -16,7 +16,7 @@ class MishapStackSize() : Mishap() { override fun execute(env: CastingEnvironment, errorCtx: Context, stack: MutableList) { stack.clear() - stack.add(GarbageIota()) + stack.add(GarbageIota.INSTANCE) } override fun errorMessage(ctx: CastingEnvironment, errorCtx: Context) = diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/circle/MishapNoSpellCircle.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/circle/MishapNoSpellCircle.kt index ba8fe81034..b1615fe604 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/circle/MishapNoSpellCircle.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/circle/MishapNoSpellCircle.kt @@ -4,22 +4,20 @@ import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.mishaps.Mishap import at.petrak.hexcasting.api.pigment.FrozenPigment -import net.minecraft.resources.ResourceLocation +import net.minecraft.core.component.DataComponents import net.minecraft.server.level.ServerPlayer import net.minecraft.world.entity.player.Player import net.minecraft.world.item.DyeColor import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.enchantment.EnchantmentHelper +import net.minecraft.world.item.enchantment.Enchantments class MishapNoSpellCircle : Mishap() { override fun accentColor(ctx: CastingEnvironment, errorCtx: Context): FrozenPigment = dyeColor(DyeColor.LIGHT_BLUE) // FIXME: make me work with any entity and not just players - private inline fun dropAll( - player: Player, - stacks: MutableList, - filter: (ItemStack) -> Boolean = { true } - ) { + private inline fun dropAll(player: Player, stacks: MutableList, filter: (ItemStack) -> Boolean = { true }) { for (index in stacks.indices) { val item = stacks[index] if (!item.isEmpty && filter(item)) { @@ -36,7 +34,7 @@ class MishapNoSpellCircle : Mishap() { dropAll(caster, caster.inventory.items) dropAll(caster, caster.inventory.offhand) dropAll(caster, caster.inventory.armor) { - it.enchantments.keySet().any { ench -> ench.`is`(ResourceLocation.parse("minecraft:binding_curse")) } + it.get(DataComponents.ENCHANTMENTS)?.keySet()?.any { e -> e.`is`(Enchantments.BINDING_CURSE) } != true } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt b/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt index 249adc092b..3d825e44df 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt @@ -58,4 +58,9 @@ class ClientCastingStack { patterns.removeAll(toRemove) toRemove.clear() } + + fun interface Provider { + + fun provide(): ClientCastingStack + } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/item/IotaHolderItem.java b/Common/src/main/java/at/petrak/hexcasting/api/item/IotaHolderItem.java index c312383129..db7e60859c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/item/IotaHolderItem.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/item/IotaHolderItem.java @@ -5,6 +5,7 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.client.ClientTickCounter; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import net.minecraft.ChatFormatting; import net.minecraft.nbt.CompoundTag; @@ -26,30 +27,15 @@ * and the appropriate cap/CC will be attached. */ public interface IotaHolderItem { - /** - * If this key is set on the item, we ignore the rest of the item and render this as if it were of the - * {@link at.petrak.hexcasting.api.casting.iota.IotaType IotaType} given by the resource location. - *

- * This is not useful to the player at all. - */ - String TAG_OVERRIDE_VISUALLY = "VisualOverride"; - - @Nullable - CompoundTag readIotaTag(ItemStack stack); @Nullable - default Iota readIota(ItemStack stack, ServerLevel world) { - if (!(stack.getItem() instanceof IotaHolderItem dh)) { + default Iota readIota(ItemStack stack) { + if (!(stack.getItem() instanceof IotaHolderItem)) { // this should be checked via mishap beforehand throw new IllegalArgumentException("stack's item must be an IotaHolderItem but was " + stack.getItem()); } - var tag = dh.readIotaTag(stack); - if (tag != null) { - return IotaType.deserialize(tag, world); - } else { - return null; - } + return stack.get(HexDataComponents.IOTA); } /** @@ -61,28 +47,18 @@ default Iota emptyIota(ItemStack stack) { } default int getColor(ItemStack stack) { - if (NBTHelper.hasString(stack, TAG_OVERRIDE_VISUALLY)) { - var override = NBTHelper.getString(stack, TAG_OVERRIDE_VISUALLY); - - if (override != null && ResourceLocation.isValidResourceLocation(override)) { - var key = new ResourceLocation(override); - if (HexIotaTypes.REGISTRY.containsKey(key)) { - var iotaType = HexIotaTypes.REGISTRY.get(key); - if (iotaType != null) { - return iotaType.color(); - } - } - } - - return 0xFF000000 | Mth.hsvToRgb(ClientTickCounter.getTotal() * 2 % 360 / 360F, 0.75F, 1F); + var override = stack.get(HexDataComponents.VISUAL_OVERRIDE); + //noinspection OptionalAssignedToNull + if (override != null) { + return override.map(IotaType::color).orElseGet(() -> 0xFF000000 | Mth.hsvToRgb(ClientTickCounter.getTotal() * 2 % 360 / 360F, 0.75F, 1F)); } - var tag = this.readIotaTag(stack); - if (tag == null) { + var iota = this.readIota(stack); + if (iota == null) { return HexUtils.ERROR_COLOR; } - return IotaType.getColor(tag); + return iota.getType().color(); } /** @@ -102,15 +78,16 @@ default int getColor(ItemStack stack) { static void appendHoverText(IotaHolderItem self, ItemStack stack, List components, TooltipFlag flag) { - var datumTag = self.readIotaTag(stack); - if (datumTag != null) { - var cmp = IotaType.getDisplay(datumTag); + var datum = self.readIota(stack); + if (datum != null) { + var cmp = datum.display(); components.add(Component.translatable("hexcasting.spelldata.onitem", cmp)); - if (flag.isAdvanced()) { - components.add(Component.literal("").append(NbtUtils.toPrettyComponent(datumTag))); - } - } else if (NBTHelper.hasString(stack, IotaHolderItem.TAG_OVERRIDE_VISUALLY)) { + //TODO port: show NBT in advanced display + /*if (flag.isAdvanced()) { + components.add(Component.literal("").append(NbtUtils.toPrettyComponent(datum))); + }*/ + } else if (stack.has(HexDataComponents.VISUAL_OVERRIDE)) { components.add(Component.translatable("hexcasting.spelldata.onitem", Component.translatable("hexcasting.spelldata.anything").withStyle(ChatFormatting.LIGHT_PURPLE))); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/item/VariantItem.java b/Common/src/main/java/at/petrak/hexcasting/api/item/VariantItem.java index 6bdca2d2d7..d242fe9edb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/item/VariantItem.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/item/VariantItem.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.api.item; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.world.item.ItemStack; /** @@ -10,16 +11,16 @@ * and the appropriate cap/CC will be attached. */ public interface VariantItem { - String TAG_VARIANT = "variant"; int numVariants(); default int getVariant(ItemStack stack) { - return NBTHelper.getInt(stack, TAG_VARIANT, 0); + var variant = stack.get(HexDataComponents.VARIANT); + return variant != null ? variant : 0; } default void setVariant(ItemStack stack, int variant) { - NBTHelper.putInt(stack, TAG_VARIANT, clampVariant(variant)); + stack.set(HexDataComponents.VARIANT, clampVariant(variant)); } default int clampVariant(int variant) { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 0bcc5a7fab..f22b1b82a2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -106,11 +106,9 @@ default Tier opBreakHarvestLevel() { // Simple extensions for resource location configs public static boolean anyMatch(List keys, ResourceLocation key) { for (String s : keys) { - if (ResourceLocation.isValidResourceLocation(s)) { - var rl = new ResourceLocation(s); - if (rl.equals(key)) { - return true; - } + var rl = ResourceLocation.tryParse(s); + if (rl != null && rl.equals(key)) { + return true; } } return false; diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java index 238afae719..a9c5b2d4e7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexTags.java @@ -47,6 +47,8 @@ public static final class Blocks { public static final TagKey CHEAP_TO_BREAK_BLOCK = create("cheap_to_break_block"); + public static final TagKey HEX_UNBREAKABLE = create("hex_unbreakable"); + public static TagKey create(String name) { return TagKey.create(Registries.BLOCK, modLoc(name)); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java b/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java index f5cd478e0e..b9a42d6680 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java @@ -2,8 +2,14 @@ import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.Util; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.UUIDUtil; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import java.util.UUID; @@ -16,33 +22,20 @@ * Get it once, and then query it a lot. */ public record FrozenPigment(ItemStack item, UUID owner) { - - public static final String TAG_STACK = "stack"; - public static final String TAG_OWNER = "owner"; - public static final Supplier DEFAULT = - () -> new FrozenPigment(new ItemStack(HexItems.DEFAULT_PIGMENT), Util.NIL_UUID); - - public CompoundTag serializeToNBT() { - var out = new CompoundTag(); - out.put(TAG_STACK, this.item.save(new CompoundTag())); - out.putUUID(TAG_OWNER, this.owner); - return out; - } - - public static FrozenPigment fromNBT(CompoundTag tag) { - if (tag.isEmpty()) { - return FrozenPigment.DEFAULT.get(); - } - try { - CompoundTag stackTag = tag.getCompound(TAG_STACK); - var stack = ItemStack.of(stackTag); - var uuid = tag.getUUID(TAG_OWNER); - return new FrozenPigment(stack, uuid); - } catch (NullPointerException exn) { - return FrozenPigment.DEFAULT.get(); - } - } + () -> new FrozenPigment(new ItemStack(HexItems.DEFAULT_PIGMENT), Util.NIL_UUID); + + public static Codec CODEC = RecordCodecBuilder.create(inst -> + inst.group( + ItemStack.CODEC.fieldOf("stack").forGetter(FrozenPigment::item), + UUIDUtil.CODEC.fieldOf("owner").forGetter(FrozenPigment::owner) + ).apply(inst, FrozenPigment::new)).orElseGet(FrozenPigment.DEFAULT); + //TODO port: maybe default here too somehow?.. + public static StreamCodec STREAM_CODEC = StreamCodec.composite( + ItemStack.STREAM_CODEC, FrozenPigment::item, + UUIDUtil.STREAM_CODEC, FrozenPigment::owner, + FrozenPigment::new + ); public ColorProvider getColorProvider() { return IXplatAbstractions.INSTANCE.getColorProvider(this); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/player/AltioraAbility.java b/Common/src/main/java/at/petrak/hexcasting/api/player/AltioraAbility.java index 304a02121d..b16c295711 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/player/AltioraAbility.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/player/AltioraAbility.java @@ -1,5 +1,9 @@ package at.petrak.hexcasting.api.player; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + /** * Note that this just keeps track of state, actually giving the player the elytra ability is handled * differently per platform @@ -7,4 +11,8 @@ * @param gracePeriod so the flight isn't immediately removed because the player started on the ground */ public record AltioraAbility(int gracePeriod) { + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.VAR_INT.map( + AltioraAbility::new, + AltioraAbility::gracePeriod + ).mapStream(b -> b); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/player/Sentinel.java b/Common/src/main/java/at/petrak/hexcasting/api/player/Sentinel.java index 867b4fca34..189a88b74a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/player/Sentinel.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/player/Sentinel.java @@ -1,5 +1,10 @@ package at.petrak.hexcasting.api.player; +import at.petrak.paucal.api.PaucalCodecs; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; @@ -8,4 +13,11 @@ * A null sentinel means no sentinel */ public record Sentinel(boolean extendsRange, Vec3 position, ResourceKey dimension) { + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL, Sentinel::extendsRange, + PaucalCodecs.VEC3, Sentinel::position, + ResourceKey.streamCodec(Registries.DIMENSION), Sentinel::dimension, + Sentinel::new + ); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt index 7629783a56..a4302bd3c4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt @@ -16,6 +16,7 @@ import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey import net.minecraft.world.InteractionHand +import net.minecraft.world.item.ItemStack import net.minecraft.world.phys.Vec2 import net.minecraft.world.phys.Vec3 import java.lang.ref.WeakReference @@ -43,7 +44,6 @@ fun vecFromNBT(tag: LongArray): Vec3 = if (tag.size != 3) Vec3.ZERO else Double.fromBits(tag[1]), Double.fromBits(tag[2]) ) - fun vecFromNBT(tag: CompoundTag): Vec3 { return if (!tag.contains("x") || !tag.contains("y") || !tag.contains("z")) Vec3.ZERO @@ -258,15 +258,6 @@ inline operator fun WeakValue.setValue(thisRef: Any?, property: KProperty this.value = value } -/** - * Returns an empty list if it's too complicated. - */ -fun Iterable.serializeToNBT() = - if (IotaType.isTooLargeToSerialize(this)) - ListTag() - else - ListIota(this.toList()).serialize() - fun Iterable.serializeToNBT(): ByteArrayTag { val out = ByteArray(if (this is Collection<*>) this.size else 10) for ((i, b) in this.withIndex()) { @@ -282,13 +273,6 @@ fun List.zipWithDefault(array: ByteArray, default: (idx: Int) -> Byte): L return list } -// -//// Copy the impl from forge -//fun ItemStack.serializeToNBT(): CompoundTag { -// val out = CompoundTag() -// this.save(out) -// return out -//} @Suppress("UNCHECKED_CAST") @Throws(IllegalArgumentException::class) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt index f72ee92e31..5d33a71992 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt @@ -1,7 +1,5 @@ @file:JvmName("NBTHelper") -// TODO this entire file needs to be HEAVILY refactored. also i need to understand components - package at.petrak.hexcasting.api.utils import net.minecraft.nbt.* @@ -117,12 +115,9 @@ fun CompoundTag.getList(key: String, objType: Byte): ListTag = getList(key, objT // Get-or-create -fun CompoundTag.getOrCreateCompound(key: String): CompoundTag = - getCompound(key) ?: CompoundTag().also { putCompound(key, it) } - +fun CompoundTag.getOrCreateCompound(key: String): CompoundTag = getCompound(key) ?: CompoundTag().also { putCompound(key, it) } fun CompoundTag.getOrCreateList(key: String, objType: Byte) = getOrCreateList(key, objType.toInt()) -fun CompoundTag.getOrCreateList(key: String, objType: Int): ListTag = - if (hasList(key, objType)) getList(key, objType) else ListTag().also { putList(key, it) } +fun CompoundTag.getOrCreateList(key: String, objType: Int): ListTag = if (hasList(key, objType)) getList(key, objType) else ListTag().also { putList(key, it) } // ================================================================================================================ Tag @@ -141,12 +136,10 @@ val Tag.asLongArray: LongArray val array = this.asIntArray LongArray(array.size) { array[it].toLong() } } - is ByteArrayTag -> { val array = this.asByteArray LongArray(array.size) { array[it].toLong() } } - else -> LongArray(0) } @@ -157,12 +150,10 @@ val Tag.asIntArray: IntArray val array = this.asLongArray IntArray(array.size) { array[it].toInt() } } - is ByteArrayTag -> { val array = this.asByteArray IntArray(array.size) { array[it].toInt() } } - else -> IntArray(0) } @@ -173,12 +164,10 @@ val Tag.asByteArray: ByteArray val array = this.asLongArray ByteArray(array.size) { array[it].toByte() } } - is IntArrayTag -> { val array = this.asIntArray ByteArray(array.size) { array[it].toByte() } } - else -> ByteArray(0) } @@ -187,98 +176,3 @@ val Tag.asCompound get() = this as? CompoundTag ?: CompoundTag() // asString is defined in Tag val Tag.asList get() = this as? ListTag ?: ListTag() val Tag.asUUID: UUID get() = if (this is IntArrayTag && this.size == 4) NbtUtils.loadUUID(this) else UUID(0, 0) - -// ========================================================================================================== ItemStack - -// Checks for containment - -fun ItemStack.hasNumber(key: String) = tag.hasNumber(key) -fun ItemStack.hasByte(key: String) = tag.hasByte(key) -fun ItemStack.hasShort(key: String) = tag.hasShort(key) -fun ItemStack.hasInt(key: String) = tag.hasInt(key) -fun ItemStack.hasLong(key: String) = tag.hasLong(key) -fun ItemStack.hasFloat(key: String) = tag.hasFloat(key) -fun ItemStack.hasDouble(key: String) = tag.hasDouble(key) -fun ItemStack.hasLongArray(key: String) = tag.hasLongArray(key) -fun ItemStack.hasIntArray(key: String) = tag.hasIntArray(key) -fun ItemStack.hasByteArray(key: String) = tag.hasByteArray(key) -fun ItemStack.hasCompound(key: String) = tag.hasCompound(key) -fun ItemStack.hasString(key: String) = tag.hasString(key) -fun ItemStack.hasList(key: String) = tag.hasList(key) -fun ItemStack.hasList(key: String, objType: Int) = tag.hasList(key, objType) -fun ItemStack.hasList(key: String, objType: Byte) = tag.hasList(key, objType) -fun ItemStack.hasUUID(key: String) = tag.hasUUID(key) - -@JvmName("contains") -fun ItemStack.containsTag(key: String) = tag.contains(key) - -@JvmName("contains") -fun ItemStack.containsTag(key: String, id: Byte) = tag.contains(key, id) - -@JvmName("contains") -fun ItemStack.containsTag(key: String, id: Int) = tag.contains(key, id) - -// Puts - -fun ItemStack.putBoolean(key: String, value: Boolean) = orCreateTag.putBoolean(key, value) -fun ItemStack.putByte(key: String, value: Byte) = orCreateTag.putByte(key, value) -fun ItemStack.putShort(key: String, value: Short) = orCreateTag.putShort(key, value) -fun ItemStack.putInt(key: String, value: Int) = orCreateTag.putInt(key, value) -fun ItemStack.putLong(key: String, value: Long) = orCreateTag.putLong(key, value) -fun ItemStack.putFloat(key: String, value: Float) = orCreateTag.putFloat(key, value) -fun ItemStack.putDouble(key: String, value: Double) = orCreateTag.putDouble(key, value) - -fun ItemStack.putLongArray(key: String, value: LongArray) = orCreateTag.putLongArray(key, value) -fun ItemStack.putIntArray(key: String, value: IntArray) = orCreateTag.putIntArray(key, value) -fun ItemStack.putByteArray(key: String, value: ByteArray) = orCreateTag.putByteArray(key, value) -fun ItemStack.putCompound(key: String, value: CompoundTag) = putTag(key, value) -fun ItemStack.putString(key: String, value: String) = orCreateTag.putString(key, value) -fun ItemStack.putList(key: String, value: ListTag) = putTag(key, value) -fun ItemStack.putUUID(key: String, value: UUID) = orCreateTag.putUUID(key, value) - -@JvmName("put") -fun ItemStack.putTag(key: String, value: Tag) = orCreateTag.put(key, value) - -// Remove - -fun ItemStack.remove(key: String) = removeTagKey(key) - -// Gets - -@JvmOverloads -fun ItemStack.getBoolean(key: String, defaultExpected: Boolean = false) = tag.getBoolean(key, defaultExpected) - -@JvmOverloads -fun ItemStack.getByte(key: String, defaultExpected: Byte = 0) = tag.getByte(key, defaultExpected) - -@JvmOverloads -fun ItemStack.getShort(key: String, defaultExpected: Short = 0) = tag.getShort(key, defaultExpected) - -@JvmOverloads -fun ItemStack.getInt(key: String, defaultExpected: Int = 0) = tag.getInt(key, defaultExpected) - -@JvmOverloads -fun ItemStack.getLong(key: String, defaultExpected: Long = 0) = tag.getLong(key, defaultExpected) - -@JvmOverloads -fun ItemStack.getFloat(key: String, defaultExpected: Float = 0f) = tag.getFloat(key, defaultExpected) - -@JvmOverloads -fun ItemStack.getDouble(key: String, defaultExpected: Double = 0.0) = tag.getDouble(key, defaultExpected) - -fun ItemStack.getLongArray(key: String) = tag.getLongArray(key) -fun ItemStack.getIntArray(key: String) = tag.getIntArray(key) -fun ItemStack.getByteArray(key: String) = tag.getByteArray(key) -fun ItemStack.getCompound(key: String) = tag.getCompound(key) -fun ItemStack.getString(key: String) = tag.getString(key) -fun ItemStack.getList(key: String, objType: Int) = tag.getList(key, objType) -fun ItemStack.getUUID(key: String) = tag.getUUID(key) - -@JvmName("get") -fun ItemStack.getTag(key: String) = tag.get(key) - -// Get-or-create - -fun ItemStack.getOrCreateCompound(key: String): CompoundTag = getOrCreateTagElement(key) -fun ItemStack.getOrCreateList(key: String, objType: Byte) = orCreateTag.getOrCreateList(key, objType) -fun ItemStack.getOrCreateList(key: String, objType: Int) = orCreateTag.getOrCreateList(key, objType) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java index 14ce4e1d22..1d4967d6c7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java @@ -22,6 +22,7 @@ import at.petrak.hexcasting.common.items.storage.*; import at.petrak.hexcasting.common.lib.HexBlockEntities; import at.petrak.hexcasting.common.lib.HexBlocks; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.xplat.IClientXplatAbstractions; import net.minecraft.client.color.block.BlockColor; @@ -30,7 +31,9 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.core.Registry; +import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; @@ -56,10 +59,10 @@ public class RegisterClientStuff { public static void init() { registerSealableDataHolderOverrides(HexItems.FOCUS, - stack -> HexItems.FOCUS.readIotaTag(stack) != null, + stack -> stack.has(HexDataComponents.IOTA), ItemFocus::isSealed); registerSealableDataHolderOverrides(HexItems.SPELLBOOK, - stack -> HexItems.SPELLBOOK.readIotaTag(stack) != null, + stack -> HexItems.SPELLBOOK.readIota(stack) != null, ItemSpellbook::isSealed); registerVariantOverrides(HexItems.FOCUS, HexItems.FOCUS::getVariant); registerVariantOverrides(HexItems.SPELLBOOK, HexItems.SPELLBOOK::getVariant); @@ -69,7 +72,7 @@ public static void init() { registerVariantOverrides(HexItems.ARTIFACT, HexItems.ARTIFACT::getVariant); IClientXplatAbstractions.INSTANCE.registerItemProperty(HexItems.THOUGHT_KNOT, ItemThoughtKnot.WRITTEN_PRED, (stack, level, holder, holderID) -> { - if (NBTHelper.contains(stack, ItemThoughtKnot.TAG_DATA)) { + if (stack.has(HexDataComponents.IOTA)) { return 1; } else { return 0; @@ -134,7 +137,7 @@ public static void init() { x.registerEntityRenderer(HexEntities.WALL_SCROLL, WallScrollRenderer::new); -// for (var tex : new ResourceLocation[]{ +// for (var tex : ResourceLocation.fromNamespaceAndPath[]{ // PatternTooltipComponent.PRISTINE_BG, // PatternTooltipComponent.ANCIENT_BG, // PatternTooltipComponent.SLATE_BG @@ -166,11 +169,11 @@ public static void registerColorProviders(BiConsumer itemColorR // this gets called for particles for some irritating reason return 0xff_ffffff; } - var iotaTag = beas.getIotaTag(); - if (iotaTag == null) { + var iota = beas.getIota(); + if (iota == null) { return 0xff_ffffff; } - return IotaType.getColor(iotaTag); + return iota.getType().color(); }, HexBlocks.AKASHIC_BOOKSHELF); } @@ -192,7 +195,7 @@ private static void registerSealableDataHolderOverrides(IotaHolderItem item, Pre Predicate isSealed) { IClientXplatAbstractions.INSTANCE.registerItemProperty((Item) item, ItemFocus.OVERLAY_PRED, (stack, level, holder, holderID) -> { - if (!hasIota.test(stack) && !NBTHelper.hasString(stack, IotaHolderItem.TAG_OVERRIDE_VISUALLY)) { + if (!hasIota.test(stack) && !stack.has(HexDataComponents.VISUAL_OVERRIDE)) { return 0; } if (!isSealed.test(stack)) { @@ -209,7 +212,7 @@ private static void registerVariantOverrides(VariantItem item, Function NBTHelper.hasString(stack, ItemScroll.TAG_OP_ID) ? 1f : 0f); + (stack, level, holder, holderID) -> stack.has(HexDataComponents.ACTION) ? 1f : 0f); } private static void registerPackagedSpellOverrides(ItemPackagedHex item) { @@ -222,7 +225,7 @@ private static void registerPackagedSpellOverrides(ItemPackagedHex item) { private static void registerWandOverrides(ItemStaff item) { IClientXplatAbstractions.INSTANCE.registerItemProperty(item, ItemStaff.FUNNY_LEVEL_PREDICATE, (stack, level, holder, holderID) -> { - if (!stack.hasCustomHoverName()) { + if (!stack.has(DataComponents.CUSTOM_NAME)) { return 0; } var name = stack.getHoverName().getString().toLowerCase(Locale.ROOT); @@ -256,7 +259,7 @@ void registerBlockEntityRenderer(BlockEntityType type BlockEntityRendererProvider berp); } - public static void onModelRegister(ResourceManager recMan, Consumer extraModels) { + public static void onModelRegister(ResourceManager recMan, Consumer extraModels) { for (var type : QUENCHED_ALLAY_TYPES.entrySet()) { var blockLoc = BuiltInRegistries.BLOCK.getKey(type.getKey()); var locStart = "block/"; @@ -264,12 +267,12 @@ public static void onModelRegister(ResourceManager recMan, Consumer map) { + public static void onModelBake(ModelBakery loader, Map map) { for (var type : QUENCHED_ALLAY_TYPES.entrySet()) { var blockLoc = BuiltInRegistries.BLOCK.getKey(type.getKey()); var locStart = "block/"; @@ -278,7 +281,7 @@ public static void onModelBake(ModelBakery loader, Map(); for (int i = 0; i < BlockQuenchedAllay.VARIANTS; i++) { - var variantLoc = modLoc(locStart + blockLoc.getPath() + "_" + i); + var variantLoc = new ModelResourceLocation(modLoc(locStart + blockLoc.getPath() + "_" + i), ModelResourceLocation.STANDALONE_VARIANT); var model = map.get(variantLoc); list.add(model); } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/entity/WallScrollRenderer.java b/Common/src/main/java/at/petrak/hexcasting/client/entity/WallScrollRenderer.java index d17e617cd9..9e88bcf384 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/entity/WallScrollRenderer.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/entity/WallScrollRenderer.java @@ -56,42 +56,41 @@ public void render(EntityWallScroll wallScroll, float yaw, float partialTicks, P float margin = 1f / 48f; var last = ps.last(); var mat = last.pose(); - var norm = last.normal(); RenderType layer = RenderType.entityCutout(this.getTextureLocation(wallScroll)); var verts = bufSource.getBuffer(layer); // Remember: CCW // Front face - vertex(mat, norm, light, verts, 0, 0, dz, 0, 0, 0, 0, -1); - vertex(mat, norm, light, verts, 0, dy, dz, 0, 1, 0, 0, -1); - vertex(mat, norm, light, verts, dx, dy, dz, 1, 1, 0, 0, -1); - vertex(mat, norm, light, verts, dx, 0, dz, 1, 0, 0, 0, -1); + vertex(mat, last, light, verts, 0, 0, dz, 0, 0, 0, 0, -1); + vertex(mat, last, light, verts, 0, dy, dz, 0, 1, 0, 0, -1); + vertex(mat, last, light, verts, dx, dy, dz, 1, 1, 0, 0, -1); + vertex(mat, last, light, verts, dx, 0, dz, 1, 0, 0, 0, -1); // Back face - vertex(mat, norm, light, verts, 0, 0, 0, 0, 0, 0, 0, 1); - vertex(mat, norm, light, verts, dx, 0, 0, 1, 0, 0, 0, 1); - vertex(mat, norm, light, verts, dx, dy, 0, 1, 1, 0, 0, 1); - vertex(mat, norm, light, verts, 0, dy, 0, 0, 1, 0, 0, 1); + vertex(mat, last, light, verts, 0, 0, 0, 0, 0, 0, 0, 1); + vertex(mat, last, light, verts, dx, 0, 0, 1, 0, 0, 0, 1); + vertex(mat, last, light, verts, dx, dy, 0, 1, 1, 0, 0, 1); + vertex(mat, last, light, verts, 0, dy, 0, 0, 1, 0, 0, 1); // Top face - vertex(mat, norm, light, verts, 0, 0, 0, 0, 0, 0, -1, 0); - vertex(mat, norm, light, verts, 0, 0, dz, 0, margin, 0, -1, 0); - vertex(mat, norm, light, verts, dx, 0, dz, 1, margin, 0, -1, 0); - vertex(mat, norm, light, verts, dx, 0, 0, 1, 0, 0, -1, 0); + vertex(mat, last, light, verts, 0, 0, 0, 0, 0, 0, -1, 0); + vertex(mat, last, light, verts, 0, 0, dz, 0, margin, 0, -1, 0); + vertex(mat, last, light, verts, dx, 0, dz, 1, margin, 0, -1, 0); + vertex(mat, last, light, verts, dx, 0, 0, 1, 0, 0, -1, 0); // Left face - vertex(mat, norm, light, verts, 0, 0, 0, 0, 0, -1, 0, 0); - vertex(mat, norm, light, verts, 0, dy, 0, 0, 1, -1, 0, 0); - vertex(mat, norm, light, verts, 0, dy, dz, margin, 1, -1, 0, 0); - vertex(mat, norm, light, verts, 0, 0, dz, margin, 0, -1, 0, 0); + vertex(mat, last, light, verts, 0, 0, 0, 0, 0, -1, 0, 0); + vertex(mat, last, light, verts, 0, dy, 0, 0, 1, -1, 0, 0); + vertex(mat, last, light, verts, 0, dy, dz, margin, 1, -1, 0, 0); + vertex(mat, last, light, verts, 0, 0, dz, margin, 0, -1, 0, 0); // Right face - vertex(mat, norm, light, verts, dx, 0, dz, 1 - margin, 0, 1, 0, 0); - vertex(mat, norm, light, verts, dx, dy, dz, 1 - margin, 1, 1, 0, 0); - vertex(mat, norm, light, verts, dx, dy, 0, 1, 1, 1, 0, 0); - vertex(mat, norm, light, verts, dx, 0, 0, 1, 0, 1, 0, 0); + vertex(mat, last, light, verts, dx, 0, dz, 1 - margin, 0, 1, 0, 0); + vertex(mat, last, light, verts, dx, dy, dz, 1 - margin, 1, 1, 0, 0); + vertex(mat, last, light, verts, dx, dy, 0, 1, 1, 1, 0, 0); + vertex(mat, last, light, verts, dx, 0, 0, 1, 0, 1, 0, 0); // Bottom face - vertex(mat, norm, light, verts, 0, dy, dz, 0, 1 - margin, 0, 1, 0); - vertex(mat, norm, light, verts, 0, dy, 0, 0, 1, 0, 1, 0); - vertex(mat, norm, light, verts, dx, dy, 0, 1, 1, 0, 1, 0); - vertex(mat, norm, light, verts, dx, dy, dz, 1, 1 - margin, 0, 1, 0); + vertex(mat, last, light, verts, 0, dy, dz, 0, 1 - margin, 0, 1, 0); + vertex(mat, last, light, verts, 0, dy, 0, 0, 1, 0, 1, 0); + vertex(mat, last, light, verts, dx, dy, 0, 1, 1, 0, 1, 0); + vertex(mat, last, light, verts, dx, dy, dz, 1, 1 - margin, 0, 1, 0); ps.popPose(); @@ -124,13 +123,14 @@ public ResourceLocation getTextureLocation(EntityWallScroll wallScroll) { } } - private static void vertex(Matrix4f mat, Matrix3f normal, int light, VertexConsumer verts, float x, float y, + private static void vertex(Matrix4f mat, PoseStack.Pose last, int light, VertexConsumer verts, float x, float y, float z, float u, float v, float nx, float ny, float nz) { - verts.vertex(mat, x, y, z) - .color(0xffffffff) - .uv(u, v).overlayCoords(OverlayTexture.NO_OVERLAY).uv2(light) - .normal(normal, nx, ny, nz) - .endVertex(); + verts.addVertex(mat, x, y, z) + .setColor(0xffffffff) + .setUv(u, v) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(light) + .setNormal(last, nx, ny, nz); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt index df0c5acb60..8e3aee4052 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt @@ -3,6 +3,7 @@ package at.petrak.hexcasting.client.gui import at.petrak.hexcasting.api.casting.eval.ExecutionClientView import at.petrak.hexcasting.api.casting.eval.ResolvedPattern import at.petrak.hexcasting.api.casting.eval.ResolvedPatternType +import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.IotaType import at.petrak.hexcasting.api.casting.math.HexAngle import at.petrak.hexcasting.api.casting.math.HexCoord @@ -28,7 +29,9 @@ import net.minecraft.client.gui.screens.Screen import net.minecraft.client.renderer.GameRenderer import net.minecraft.client.resources.sounds.SimpleSoundInstance import net.minecraft.client.resources.sounds.SoundInstance +import net.minecraft.core.Holder import net.minecraft.nbt.CompoundTag +import net.minecraft.nbt.NbtOps import net.minecraft.sounds.SoundSource import net.minecraft.util.FormattedCharSequence import net.minecraft.util.Mth @@ -40,7 +43,7 @@ import kotlin.math.* class GuiSpellcasting constructor( private val handOpenedWith: InteractionHand, private var patterns: MutableList, - private var cachedStack: List, + private var cachedStack: List, private var cachedRavenmind: CompoundTag?, private var parenCount: Int, ) : Screen("gui.hexcasting.spellcasting".asTranslatedComponent) { @@ -85,7 +88,7 @@ class GuiSpellcasting constructor( val mc = Minecraft.getInstance() val width = (this.width * LHS_IOTAS_ALLOCATION).toInt() this.stackDescs = - this.cachedStack.map { IotaType.getDisplayWithMaxWidth(it, width, mc.font) } + this.cachedStack.map { it.displayWithMaxWidth(width, mc.font) } .asReversed() // this.parenDescs = if (this.cachedParens.isNotEmpty()) // this.cachedParens.flatMap { HexIotaTypes.getDisplayWithMaxWidth(it, width, mc.font) } @@ -96,8 +99,8 @@ class GuiSpellcasting constructor( this.parenDescs = emptyList() this.ravenmind = this.cachedRavenmind?.let { - IotaType.getDisplayWithMaxWidth( - it, + val iota = IotaType.TYPED_CODEC.parse(NbtOps.INSTANCE, it).getOrThrow() + iota.displayWithMaxWidth( (this.width * RHS_IOTAS_ALLOCATION).toInt(), mc.font ) @@ -122,7 +125,7 @@ class GuiSpellcasting constructor( val player = minecraft.player if (player != null) { val heldItem = player.getItemInHand(handOpenedWith) - if (heldItem.isEmpty || !heldItem.`is`(HexTags.Items.STAVES) || player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0) + if (heldItem.isEmpty || !heldItem.`is`(HexTags.Items.STAVES) || player.getAttributeValue(Holder.direct(HexAttributes.FEEBLE_MIND)) > 0) closeForReal() } } @@ -291,16 +294,16 @@ class GuiSpellcasting constructor( return false } - override fun mouseScrolled(pMouseX: Double, pMouseY: Double, pDelta: Double): Boolean { - super.mouseScrolled(pMouseX, pMouseY, pDelta) + override fun mouseScrolled(mouseX: Double, mouseY: Double, scrollX: Double, scrollY: Double): Boolean { + super.mouseScrolled(mouseX, mouseY, scrollX, scrollY) val mouseHandler = Minecraft.getInstance().mouseHandler - if (mouseHandler.accumulatedScroll != 0.0 && sign(pDelta) != sign(mouseHandler.accumulatedScroll)) { + if (mouseHandler.accumulatedScroll != 0.0 && sign(scrollY) != sign(mouseHandler.accumulatedScroll)) { mouseHandler.accumulatedScroll = 0.0 } - mouseHandler.accumulatedScroll += pDelta + mouseHandler.accumulatedScroll += scrollY val accumulation: Int = mouseHandler.accumulatedScroll.toInt() if (accumulation == 0) { return true @@ -308,7 +311,7 @@ class GuiSpellcasting constructor( mouseHandler.accumulatedScroll -= accumulation.toDouble() - ShiftScrollListener.onScroll(pDelta, false) + ShiftScrollListener.onScroll(scrollY, false) return true } @@ -492,7 +495,7 @@ class GuiSpellcasting constructor( /** Distance between adjacent hex centers */ fun hexSize(): Float { - val scaleModifier = Minecraft.getInstance().player!!.getAttributeValue(HexAttributes.GRID_ZOOM) + val scaleModifier = Minecraft.getInstance().player!!.getAttributeValue(Holder.direct(HexAttributes.GRID_ZOOM)) // Originally, we allowed 32 dots across. Assuming a 1920x1080 screen this allowed like 500-odd area. // Let's be generous and give them 512. diff --git a/Common/src/main/java/at/petrak/hexcasting/client/ktxt/ClientAccessorWrappers.kt b/Common/src/main/java/at/petrak/hexcasting/client/ktxt/ClientAccessorWrappers.kt index 5863d7f050..94dc5b0d13 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/ktxt/ClientAccessorWrappers.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/ktxt/ClientAccessorWrappers.kt @@ -5,5 +5,5 @@ import at.petrak.hexcasting.mixin.accessor.client.AccessorMouseHandler import net.minecraft.client.MouseHandler var MouseHandler.accumulatedScroll: Double - get() = (this as AccessorMouseHandler).`hex$getAccumulatedScroll`() - set(value) = (this as AccessorMouseHandler).`hex$setAccumulatedScroll`(value) + get() = (this as AccessorMouseHandler).`hex$getAccumulatedScrollY`() + set(value) = (this as AccessorMouseHandler).`hex$setAccumulatedScrollY`(value) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/model/AltioraLayer.java b/Common/src/main/java/at/petrak/hexcasting/client/model/AltioraLayer.java index a354d6eba3..07cbcd3d6f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/model/AltioraLayer.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/model/AltioraLayer.java @@ -43,8 +43,9 @@ public void render(PoseStack ps, MultiBufferSource buffer, int packedLight, Abst this.getParentModel().copyPropertiesTo(this.elytraModel); this.elytraModel.setupAnim(player, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); VertexConsumer verts = ItemRenderer.getArmorFoilBuffer( - buffer, RenderType.armorCutoutNoCull(TEX_LOC), false, true); - this.elytraModel.renderToBuffer(ps, verts, packedLight, OverlayTexture.NO_OVERLAY, 1.0F, 1.0F, 1.0F, 1.0F); + buffer, RenderType.armorCutoutNoCull(TEX_LOC), true); + // TODO port: check color + this.elytraModel.renderToBuffer(ps, verts, packedLight, OverlayTexture.NO_OVERLAY, -1); ps.popPose(); } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/model/MyOwnArmorModelWithBlackjackAndHookers.java b/Common/src/main/java/at/petrak/hexcasting/client/model/MyOwnArmorModelWithBlackjackAndHookers.java index fc63fcdf72..0bdd3fb2d1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/model/MyOwnArmorModelWithBlackjackAndHookers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/model/MyOwnArmorModelWithBlackjackAndHookers.java @@ -52,10 +52,9 @@ public void setupAnim(LivingEntity entity, float limbSwing, float limbSwingAmoun } @Override - public void renderToBuffer(PoseStack ms, VertexConsumer buffer, int light, int overlay, float r, float g, float b - , float a) { + public void renderToBuffer(PoseStack ms, VertexConsumer buffer, int light, int overlay, int color) { setPartVisibility(slot); - super.renderToBuffer(ms, buffer, light, overlay, r, g, b, a); + super.renderToBuffer(ms, buffer, light, overlay, color); } // [VanillaCopy] HumanoidArmorLayer diff --git a/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java b/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java index 122e536e75..411b089535 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java @@ -91,7 +91,7 @@ public Particle createParticle(ConjureParticleOptions type, ClientLevel level, // https://github.com/VazkiiMods/Botania/blob/db85d778ab23f44c11181209319066d1f04a9e3d/Xplat/src/main/java/vazkii/botania/client/fx/FXWisp.java private record ConjureRenderType() implements ParticleRenderType { @Override - public void begin(BufferBuilder buf, TextureManager texMan) { + public BufferBuilder begin(Tesselator tess, TextureManager texMan) { Minecraft.getInstance().gameRenderer.lightTexture().turnOnLightLayer(); RenderSystem.depthMask(false); RenderSystem.enableBlend(); @@ -100,18 +100,8 @@ public void begin(BufferBuilder buf, TextureManager texMan) { RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_PARTICLES); var tex = texMan.getTexture(TextureAtlas.LOCATION_PARTICLES); IClientXplatAbstractions.INSTANCE.setFilterSave(tex, true, false); - buf.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE); RenderSystem.enableDepthTest(); - } - - @Override - public void end(Tesselator tess) { - tess.end(); - IClientXplatAbstractions.INSTANCE.restoreLastFilter( - Minecraft.getInstance().getTextureManager().getTexture(TextureAtlas.LOCATION_PARTICLES) - ); - RenderSystem.disableBlend(); - RenderSystem.depthMask(true); + return tess.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE); } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java index 0e96540a91..a78383bbc5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java @@ -19,6 +19,7 @@ import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.Holder; import net.minecraft.locale.Language; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.Style; @@ -75,7 +76,6 @@ private static void renderSentinel(Sentinel sentinel, LocalPlayer owner, var tess = Tesselator.getInstance(); - var buf = tess.getBuilder(); var neo = ps.last().pose(); RenderSystem.enableBlend(); RenderSystem.setShader(GameRenderer::getRendertypeLinesShader); @@ -86,23 +86,23 @@ private static void renderSentinel(Sentinel sentinel, LocalPlayer owner, var pigment = IXplatAbstractions.INSTANCE.getPigment(owner); var colProvider = pigment.getColorProvider(); + + // Icosahedron inscribed inside the unit sphere + var buf = tess.begin(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL); + BiConsumer v = (l, r) -> { int lcolor = colProvider.getColor(time, new Vec3(l[0], l[1], l[2])), rcolor = colProvider.getColor(time, new Vec3(r[0], r[1], r[2])); var normal = new Vector3f(r[0] - l[0], r[1] - l[1], r[2] - l[2]); normal.normalize(); - buf.vertex(neo, l[0], l[1], l[2]) - .color(lcolor) - .normal(ps.last().normal(), normal.x(), normal.y(), normal.z()) - .endVertex(); - buf.vertex(neo, r[0], r[1], r[2]) - .color(rcolor) - .normal(ps.last().normal(), -normal.x(), -normal.y(), -normal.z()) - .endVertex(); + buf.addVertex(neo, l[0], l[1], l[2]) + .setColor(lcolor) + .setNormal(ps.last(), normal.x(), normal.y(), normal.z()); + buf.addVertex(neo, r[0], r[1], r[2]) + .setColor(rcolor) + .setNormal(ps.last(), -normal.x(), -normal.y(), -normal.z()); }; - // Icosahedron inscribed inside the unit sphere - buf.begin(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL); for (int side = 0; side <= 1; side++) { var ring = (side == 0) ? Icos.BOTTOM_RING : Icos.TOP_RING; var apex = (side == 0) ? Icos.BOTTOM : Icos.TOP; @@ -123,7 +123,7 @@ private static void renderSentinel(Sentinel sentinel, LocalPlayer owner, v.accept(Icos.TOP_RING[(i + 2) % 5], bottom); v.accept(bottom, Icos.TOP_RING[(i + 3) % 5]); } - tess.end(); + //tess.end(); RenderSystem.enableDepthTest(); RenderSystem.enableCull(); @@ -159,7 +159,7 @@ private static void tryRenderScryingLensOverlay(GuiGraphics graphics, float part return; } - if (player.getAttributeValue(HexAttributes.SCRY_SIGHT) <= 0.0 || player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0) + if (player.getAttributeValue(Holder.direct(HexAttributes.SCRY_SIGHT)) <= 0.0 || player.getAttributeValue(Holder.direct(HexAttributes.FEEBLE_MIND)) > 0) return; var hitRes = mc.hitResult; diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt b/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt index 8603befcf1..73f9a3f44a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt @@ -112,10 +112,8 @@ fun drawLineSeq( val normal = Vec2(-tangent.y, tangent.x) fun color(time: Float): Int = - FastColor.ARGB32.color( - Mth.lerp(time, a1, a2).toInt(), Mth.lerp(time, r1, r2).toInt(), - Mth.lerp(time, g1, g2).toInt(), Mth.lerp(time, b1, b2).toInt() - ) + FastColor.ARGB32.color(Mth.lerp(time, a1, a2).toInt(), Mth.lerp(time, r1, r2).toInt(), + Mth.lerp(time, g1, g2).toInt(), Mth.lerp(time, b1, b2).toInt()) val color1 = color(i.toFloat() / n) val color2 = color((i + 1f) / n) @@ -222,8 +220,7 @@ fun drawPatternFromPoints( lastSegmentLenProportion: Float, seed: Double ) { - val zappyPts = - makeZappy(points, dupIndices, 10, 2.5f, 0.1f, flowIrregular, readabilityOffset, lastSegmentLenProportion, seed) + val zappyPts = makeZappy(points, dupIndices, 10, 2.5f, 0.1f, flowIrregular, readabilityOffset, lastSegmentLenProportion, seed) val nodes = if (drawLast) { points } else { @@ -356,13 +353,7 @@ fun findDupIndices(pts: Iterable): Set { * include primitive drawing code... */ fun drawSpot(mat: Matrix4f, point: Vec2, radius: Float, r: Float, g: Float, b: Float, a: Float) { - drawSpot( - mat, - point, - radius, - ARGB32.color((a * 255).toInt(), (r * 255).toInt(), (g * 255).toInt(), (b * 255).toInt()), - VCDrawHelper.Basic(1f) - ) + drawSpot(mat, point, radius, ARGB32.color((a*255).toInt(), (r*255).toInt(), (g*255).toInt(), (b*255).toInt()), VCDrawHelper.Basic(1f)) } fun drawSpot(mat: Matrix4f, point: Vec2, radius: Float, color: Int, vcHelper: VCDrawHelper) { @@ -465,5 +456,5 @@ fun renderQuad( .setColor(color) buf.addVertex(mat, x + w, y, 0f) .setColor(color) - buf.buildOrThrow() + // TODO port: test rendering works } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/ScryingLensOverlays.java b/Common/src/main/java/at/petrak/hexcasting/client/render/ScryingLensOverlays.java index 32aed05c7a..7aac8fe1af 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/ScryingLensOverlays.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/ScryingLensOverlays.java @@ -61,9 +61,9 @@ public static void addScryingLensStuff() { ScryingLensOverlayRegistry.addDisplayer(HexBlocks.AKASHIC_BOOKSHELF, (lines, state, pos, observer, world, direction) -> { if (world.getBlockEntity(pos) instanceof BlockEntityAkashicBookshelf tile) { - var iotaTag = tile.getIotaTag(); - if (iotaTag != null) { - var display = IotaType.getDisplay(iotaTag); + var iota = tile.getIota(); + if (iota != null) { + var display = iota.display(); lines.add(new Pair<>(new ItemStack(Items.BOOK), display)); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/VCDrawHelper.kt b/Common/src/main/java/at/petrak/hexcasting/client/render/VCDrawHelper.kt index 5076ad45b3..5fa673b252 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/VCDrawHelper.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/VCDrawHelper.kt @@ -18,13 +18,11 @@ import net.minecraft.world.phys.Vec3 import org.joml.Matrix4f -// TODO sam you're going to need to fix this, i have no idea what is going on here interface VCDrawHelper { fun vcSetupAndSupply(vertMode: VertexFormat.Mode): VertexConsumer fun vertex(vc: VertexConsumer, color: Int, pos: Vec2, matrix: Matrix4f) { - vertex(vc, color, pos, Vec2(0f, 0f), matrix) + vertex(vc, color, pos, Vec2(0f,0f), matrix) } - fun vertex(vc: VertexConsumer, color: Int, pos: Vec2, uv: Vec2, matrix: Matrix4f) fun vcEndDrawer(vc: VertexConsumer) @@ -35,15 +33,15 @@ interface VCDrawHelper { val WHITE: ResourceLocation = HexAPI.modLoc("textures/entity/white.png") @JvmStatic - fun getHelper(worldlyBits: WorldlyBits?, ps: PoseStack, z: Float, texture: ResourceLocation): VCDrawHelper { - if (worldlyBits != null) { + fun getHelper(worldlyBits: WorldlyBits?, ps: PoseStack, z: Float, texture: ResourceLocation) : VCDrawHelper { + if(worldlyBits != null){ return Worldly(worldlyBits, ps, z, texture) } return Basic(z, texture) } @JvmStatic - fun getHelper(worldlyBits: WorldlyBits?, ps: PoseStack, z: Float): VCDrawHelper { + fun getHelper(worldlyBits: WorldlyBits?, ps: PoseStack, z: Float) : VCDrawHelper { return getHelper(worldlyBits, ps, z, WHITE) } } @@ -53,32 +51,27 @@ interface VCDrawHelper { override fun vcSetupAndSupply(vertMode: VertexFormat.Mode): VertexConsumer { val tess = Tesselator.getInstance() val buf = tess.begin(vertMode, DefaultVertexFormat.POSITION_TEX_COLOR) - RenderSystem.setShader(GameRenderer::getPositionTexColorShader); + RenderSystem.setShader(GameRenderer::getPositionTexColorShader) RenderSystem.disableCull() RenderSystem.enableDepthTest() RenderSystem.enableBlend() - RenderSystem.blendFunc( - GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA - ) + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, + GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA) RenderSystem.setShaderTexture(0, texture) return buf } - - override fun vertex(vc: VertexConsumer, color: Int, pos: Vec2, uv: Vec2, matrix: Matrix4f) { - vc.vertex(matrix, pos.x, pos.y, z).color(color).uv(uv.x, uv.y).endVertex() + override fun vertex(vc: VertexConsumer, color: Int, pos: Vec2, uv: Vec2, matrix: Matrix4f){ + vc.addVertex(matrix, pos.x, pos.y, z).setColor(color).setUv(uv.x, uv.y) } - override fun vcEndDrawer(vc: VertexConsumer) { - Tesselator.getInstance().end() + if(vc is BufferBuilder) + BufferUploader.drawWithShader(vc.buildOrThrow()) } } - class Worldly(val worldlyBits: WorldlyBits, val ps: PoseStack, val z: Float, val texture: ResourceLocation) : - VCDrawHelper { + class Worldly(val worldlyBits: WorldlyBits, val ps: PoseStack, val z: Float, val texture: ResourceLocation) : VCDrawHelper { - var lastVertMode: VertexFormat.Mode? = - null // i guess this assumes that the vcHelper is only used once at a time? maybe reconsider that + var lastVertMode: VertexFormat.Mode ?= null // i guess this assumes that the vcHelper is only used once at a time? maybe reconsider that override fun vcSetupAndSupply(vertMode: VertexFormat.Mode): VertexConsumer { val provider = worldlyBits.provider @@ -87,57 +80,53 @@ interface VCDrawHelper { provider.endBatch() } lastVertMode = vertMode - val buf = Tesselator.getInstance().builder - if (vertMode == VertexFormat.Mode.QUADS) { + val tess = Tesselator.getInstance() + if(vertMode == VertexFormat.Mode.QUADS){ val layer = RenderType.entityTranslucentCull(texture) layer.setupRenderState() if (provider == null) { - buf.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.NEW_ENTITY) + val buf = tess.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.NEW_ENTITY) RenderSystem.setShader { GameRenderer.getRendertypeEntityTranslucentCullShader() } return buf } else { return provider.getBuffer(layer) } } - buf.begin(vertMode, DefaultVertexFormat.NEW_ENTITY) + val buf = tess.begin( vertMode, DefaultVertexFormat.NEW_ENTITY ) // Generally this would be handled by a RenderLayer, but that doesn't seem to actually work here,, RenderSystem.setShaderTexture(0, texture) RenderSystem.enableDepthTest() RenderSystem.disableCull() Minecraft.getInstance().gameRenderer.lightTexture().turnOnLightLayer() RenderSystem.enableBlend() - RenderSystem.blendFuncSeparate( - GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, - GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA - ) + RenderSystem.blendFuncSeparate( GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, + GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA ) RenderSystem.setShaderColor(1f, 1f, 1f, 1f); if (Minecraft.useShaderTransparency()) { Minecraft.getInstance().levelRenderer.translucentTarget!!.bindWrite(false) } - RenderSystem.setShader(GameRenderer::getRendertypeEntityTranslucentCullShader) + RenderSystem.setShader( GameRenderer::getRendertypeEntityTranslucentCullShader ) return buf } - override fun vertex(vc: VertexConsumer, color: Int, pos: Vec2, uv: Vec2, matrix: Matrix4f) { - val nv = worldlyBits.normal ?: Vec3(1.0, 1.0, 1.0) - vc.vertex(matrix, pos.x, pos.y, z) - .color(color) - .uv(uv.x, uv.y) - .overlayCoords(OverlayTexture.NO_OVERLAY) - .uv2(worldlyBits.light ?: LightTexture.FULL_BRIGHT) - .normal(ps.last().normal(), nv.x.toFloat(), nv.y.toFloat(), nv.z.toFloat()) - - vc.endVertex() + override fun vertex(vc: VertexConsumer, color: Int, pos: Vec2, uv: Vec2, matrix: Matrix4f){ + val nv = worldlyBits.normal?: Vec3(1.0, 1.0, 1.0) + vc.addVertex(matrix, pos.x, pos.y, z) + .setColor(color) + .setUv(uv.x, uv.y) + .setOverlay(OverlayTexture.NO_OVERLAY) + .setLight(worldlyBits.light?: LightTexture.FULL_BRIGHT ) + .setNormal(ps.last(), nv.x.toFloat(), nv.y.toFloat(), nv.z.toFloat()) } - - override fun vcEndDrawer(vc: VertexConsumer) { - if (lastVertMode == VertexFormat.Mode.QUADS) { - if (provider == null) { + override fun vcEndDrawer(vc: VertexConsumer){ + if(lastVertMode == VertexFormat.Mode.QUADS){ + if (provider == null && vc is BufferBuilder) { val layer = RenderType.entityTranslucentCull(texture) - layer.end(Tesselator.getInstance().builder, VertexSorting.ORTHOGRAPHIC_Z) + layer.draw(vc.buildOrThrow()) //TODO port: , VertexSorting.ORTHOGRAPHIC_Z } } else { - Tesselator.getInstance().end() + if(vc is BufferBuilder) + BufferUploader.drawWithShader(vc.buildOrThrow()) Minecraft.getInstance().gameRenderer.lightTexture().turnOffLightLayer() RenderSystem.disableBlend() RenderSystem.defaultBlendFunc() diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java b/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java index 68c00d5d92..b1da11a2a9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java @@ -140,7 +140,7 @@ public static void renderPattern(HexPattern pattern, PatternSettings patSets, Pa PoseStack noNormalInv = new PoseStack(); noNormalInv.scale(1, 1, -1); - ps.mulPoseMatrix(noNormalInv.last().pose()); + ps.mulPose(noNormalInv.last().pose()); PatternRenderer.renderPattern(pattern, ps, new PatternRenderer.WorldlyBits(bufSource, light, normal), patSets, patColors, seed, blockSize * 512); diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/be/BlockEntityQuenchedAllayRenderer.java b/Common/src/main/java/at/petrak/hexcasting/client/render/be/BlockEntityQuenchedAllayRenderer.java index 15f89ad049..0d107bcebd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/be/BlockEntityQuenchedAllayRenderer.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/be/BlockEntityQuenchedAllayRenderer.java @@ -42,7 +42,7 @@ public void render(BlockEntityQuenchedAllay blockEntity, float partialTick, Pose // Forge fixes BEs rendering offscreen; Fabric doesn't! // So we do a special check on Fabric only var pos = blockEntity.getBlockPos(); - var aabb = new AABB(pos.offset(-1, 0, -1), pos.offset(1, 1, 1)); + var aabb = new AABB(pos.offset(-1, 0, -1).getCenter(), pos.offset(1, 1, 1).getCenter()); if (IClientXplatAbstractions.INSTANCE.fabricAdditionalQuenchFrustumCheck(aabb)) { doRender((BlockQuenchedAllay) blockEntity.getBlockState().getBlock(), this.ctx.getBlockRenderDispatcher(), poseStack, bufferSource, packedLight, packedOverlay); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java index 078b819a3c..616880da50 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java @@ -33,10 +33,11 @@ public BlockConjured(Properties properties) { } @Override - public void playerWillDestroy(Level pLevel, BlockPos pPos, BlockState pState, Player pPlayer) { - super.playerWillDestroy(pLevel, pPos, pState, pPlayer); + public BlockState playerWillDestroy(Level pLevel, BlockPos pPos, BlockState pState, Player pPlayer) { + var res = super.playerWillDestroy(pLevel, pPos, pState, pPlayer); // For some reason the block doesn't play breaking noises. So we fix that! pPlayer.playSound(SoundEvents.AMETHYST_BLOCK_BREAK, 1f, 1f); + return res; } @Nullable diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java index 39545fd968..d36dff4297 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java @@ -10,7 +10,9 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; @@ -39,24 +41,33 @@ public BlockAkashicBookshelf(Properties p_49795_) { } @Override - public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, - BlockHitResult pHit) { - if (pLevel.getBlockEntity(pPos) instanceof BlockEntityAkashicBookshelf shelf) { - var stack = pPlayer.getItemInHand(pHand); + protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { + if (level.getBlockEntity(pos) instanceof BlockEntityAkashicBookshelf shelf) { if (stack.getItem() instanceof ItemScroll scroll) { - if (!pLevel.isClientSide()) { + if (!level.isClientSide()) { scroll.writeDatum(stack, new PatternIota(shelf.getPattern())); } - pLevel.playSound(pPlayer, pPos, HexSounds.SCROLL_SCRIBBLE, SoundSource.BLOCKS, 1f, 1f); - return InteractionResult.sidedSuccess(pLevel.isClientSide); - } else if (pPlayer.isDiscrete() && pHand == InteractionHand.MAIN_HAND && stack.isEmpty()) { - if (!pLevel.isClientSide()) { + level.playSound(player, pos, HexSounds.SCROLL_SCRIBBLE, SoundSource.BLOCKS, 1f, 1f); + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + } + + return stack.isEmpty() && hand == InteractionHand.MAIN_HAND + ? ItemInteractionResult.SKIP_DEFAULT_BLOCK_INTERACTION + : ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; + } + + @Override + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + if (level.getBlockEntity(pos) instanceof BlockEntityAkashicBookshelf shelf) { + if (player.isDiscrete()) { + if (!level.isClientSide()) { shelf.clearIota(); } - pLevel.playSound(pPlayer, pPos, HexSounds.SCROLL_SCRIBBLE, SoundSource.BLOCKS, - 1f, 0.8f); - return InteractionResult.sidedSuccess(pLevel.isClientSide); + level.playSound(player, pos, HexSounds.SCROLL_SCRIBBLE, SoundSource.BLOCKS, + 1f, 0.8f); + return InteractionResult.sidedSuccess(level.isClientSide); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicRecord.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicRecord.java index db3f96ac14..dc14338edd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicRecord.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicRecord.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.casting.iota.IotaType; import at.petrak.hexcasting.api.casting.math.HexPattern; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.NbtOps; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -45,8 +46,7 @@ BlockPos addNewDatum(BlockPos herePos, Level level, HexPattern key, Iota datum) } } - public @Nullable - Iota lookupPattern(BlockPos herePos, HexPattern key, ServerLevel slevel) { + public @Nullable Iota lookupPattern(BlockPos herePos, HexPattern key, ServerLevel slevel) { var foundPos = AkashicFloodfiller.floodFillFor(herePos, slevel, (pos, bs, world) -> world.getBlockEntity(pos) instanceof BlockEntityAkashicBookshelf tile @@ -56,8 +56,7 @@ Iota lookupPattern(BlockPos herePos, HexPattern key, ServerLevel slevel) { } var tile = (BlockEntityAkashicBookshelf) slevel.getBlockEntity(foundPos); - var tag = tile.getIotaTag(); - return tag == null ? null : IotaType.deserialize(tag, slevel); + return tile != null ? tile.getIota() : null; } // TODO get comparators working again and also cache the number of iotas somehow? diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockEntityAkashicBookshelf.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockEntityAkashicBookshelf.java index d6e4cd8041..2e5569dd4c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockEntityAkashicBookshelf.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockEntityAkashicBookshelf.java @@ -7,7 +7,10 @@ import at.petrak.hexcasting.client.render.HexPatternPoints; import at.petrak.hexcasting.common.lib.HexBlockEntities; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -18,10 +21,11 @@ public class BlockEntityAkashicBookshelf extends HexBlockEntity { // This is only not null if this stores any data. private HexPattern pattern = null; + // TODO port: check if it works // When the world is first loading we can sometimes try to deser this from nbt without the world existing yet. // We also need a way to display the iota to the client. // For both these cases we save just the tag of the iota. - private CompoundTag iotaTag = null; + private Iota iota = null; public HexPatternPoints points; @@ -35,14 +39,20 @@ public HexPattern getPattern() { } @Nullable - public CompoundTag getIotaTag() { - return iotaTag; + public Iota getIota() { + return iota; } + /*@Nullable + public Tag getIotaTag() { + return iotaTag; + }*/ + public void setNewMapping(HexPattern pattern, Iota iota) { var previouslyEmpty = this.pattern == null; this.pattern = pattern; - this.iotaTag = IotaType.serialize(iota); + this.iota = iota; + //this.iotaTag = IotaType.TYPED_CODEC.encodeStart(NbtOps.INSTANCE, iota).getOrThrow(); if (previouslyEmpty) { var oldBs = this.getBlockState(); @@ -57,7 +67,8 @@ public void setNewMapping(HexPattern pattern, Iota iota) { public void clearIota() { var previouslyEmpty = this.pattern == null; this.pattern = null; - this.iotaTag = null; + //this.iotaTag = null; + this.iota = null; if (!previouslyEmpty) { var oldBs = this.getBlockState(); @@ -70,23 +81,25 @@ public void clearIota() { } @Override - protected void saveModData(CompoundTag compoundTag) { - if (this.pattern != null && this.iotaTag != null) { - compoundTag.put(TAG_PATTERN, this.pattern.serializeToNBT()); - compoundTag.put(TAG_IOTA, this.iotaTag); + protected void saveModData(CompoundTag compoundTag, HolderLookup.Provider registries) { + if (this.pattern != null && this.iota != null) { + compoundTag.put(TAG_PATTERN, HexPattern.CODEC.encodeStart(NbtOps.INSTANCE, pattern).getOrThrow()); + compoundTag.put(TAG_IOTA, IotaType.TYPED_CODEC.encodeStart(NbtOps.INSTANCE, iota).getOrThrow()); } else { compoundTag.putBoolean(TAG_DUMMY, false); } } @Override - protected void loadModData(CompoundTag tag) { + protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { if (tag.contains(TAG_PATTERN) && tag.contains(TAG_IOTA)) { - this.pattern = HexPattern.fromNBT(tag.getCompound(TAG_PATTERN)); - this.iotaTag = tag.getCompound(TAG_IOTA); + this.pattern = HexPattern.CODEC.parse(NbtOps.INSTANCE, tag.getCompound(TAG_PATTERN)).getOrThrow(); + //this.iotaTag = tag.getCompound(TAG_IOTA); + this.iota = IotaType.TYPED_CODEC.parse(NbtOps.INSTANCE, tag.getCompound(TAG_IOTA)).getOrThrow(); } else if (tag.contains(TAG_DUMMY)) { this.pattern = null; - this.iotaTag = null; + //this.iotaTag = null; + this.iota = null; } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java index 9a0ec965bc..acb0c4ca4b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java @@ -4,7 +4,9 @@ import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.common.lib.HexBlockEntities; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -20,23 +22,19 @@ public BlockEntitySlate(BlockPos pos, BlockState state) { } @Override - protected void saveModData(CompoundTag tag) { + protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { if (this.pattern != null) { - tag.put(TAG_PATTERN, this.pattern.serializeToNBT()); + tag.put(TAG_PATTERN, HexPattern.CODEC.encodeStart(NbtOps.INSTANCE, pattern).getOrThrow()); } else { tag.put(TAG_PATTERN, new CompoundTag()); } } @Override - protected void loadModData(CompoundTag tag) { + protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { if (tag.contains(TAG_PATTERN, Tag.TAG_COMPOUND)) { - CompoundTag patternTag = tag.getCompound(TAG_PATTERN); - if (HexPattern.isPattern(patternTag)) { - this.pattern = HexPattern.fromNBT(patternTag); - } else { - this.pattern = null; - } + Tag patternTag = tag.get(TAG_PATTERN); + this.pattern = HexPattern.CODEC.parse(NbtOps.INSTANCE, patternTag).result().orElse(null); } else { this.pattern = null; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java index 963d62a649..6355f37fc5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java @@ -5,6 +5,7 @@ import at.petrak.hexcasting.common.lib.HexBlockEntities; import at.petrak.hexcasting.common.lib.HexSounds; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; @@ -35,8 +36,9 @@ public static void serverTick(Level level, BlockPos pos, BlockState bs, BlockEnt int prevLookAmt = self.lookAmount; int range = 20; + //TODO port: test AABB check, it's Vec3 now instead of BlockPos var players = level.getEntitiesOfClass(ServerPlayer.class, - new AABB(pos.offset(-range, -range, -range), pos.offset(range, range, range))); + new AABB(pos.offset(-range, -range, -range).getCenter(), pos.offset(range, range, range).getCenter())); ServerPlayer looker = null; for (var player : players) { @@ -84,14 +86,14 @@ public static void serverTick(Level level, BlockPos pos, BlockState bs, BlockEnt } @Override - protected void saveModData(CompoundTag tag) { - super.saveModData(tag); + protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { + super.saveModData(tag, registries); tag.putInt(TAG_LOOK_AMOUNT, this.lookAmount); } @Override - protected void loadModData(CompoundTag tag) { - super.loadModData(tag); + protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { + super.loadModData(tag, registries); this.lookAmount = tag.getInt(TAG_LOOK_AMOUNT); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java index b776d156ce..385b591e8a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java @@ -8,15 +8,20 @@ import com.mojang.datafixers.util.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.ExtraCodecs; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.component.ResolvableProfile; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -31,15 +36,14 @@ public class BlockEntityRedstoneImpetus extends BlockEntityAbstractImpetus { private GameProfile storedPlayerProfile = null; private UUID storedPlayer = null; - private GameProfile cachedDisplayProfile = null; + private ResolvableProfile cachedDisplayProfile = null; private ItemStack cachedDisplayStack = null; public BlockEntityRedstoneImpetus(BlockPos pWorldPosition, BlockState pBlockState) { super(HexBlockEntities.IMPETUS_REDSTONE_TILE, pWorldPosition, pBlockState); } - protected @Nullable - GameProfile getPlayerName() { + protected @Nullable GameProfile getPlayerName() { if (this.level instanceof ServerLevel) { Player player = getStoredPlayer(); if (player != null) { @@ -61,6 +65,7 @@ public void clearPlayer() { this.storedPlayer = null; } + //TODO port: test player profiles public void updatePlayerProfile() { ServerPlayer player = getStoredPlayer(); if (player != null) { @@ -99,17 +104,18 @@ public void applyScryingLensOverlay(List> lines, Direction hitFace) { super.applyScryingLensOverlay(lines, state, pos, observer, world, hitFace); - var name = this.getPlayerName(); - if (name != null) { - if (!name.equals(cachedDisplayProfile) || cachedDisplayStack == null) { - cachedDisplayProfile = name; + var plProfile = this.getPlayerName(); + if (plProfile != null) { + var resolvableProfile = new ResolvableProfile(plProfile); + if (!plProfile.equals(resolvableProfile) || cachedDisplayStack == null) { + cachedDisplayProfile = resolvableProfile; var head = new ItemStack(Items.PLAYER_HEAD); - NBTHelper.put(head, "SkullOwner", NbtUtils.writeGameProfile(new CompoundTag(), name)); - head.getItem().verifyTagAfterLoad(head.getOrCreateTag()); + head.set(DataComponents.PROFILE, resolvableProfile); + head.getItem().verifyComponentsAfterLoad(head); cachedDisplayStack = head; } lines.add(new Pair<>(cachedDisplayStack, - Component.translatable("hexcasting.tooltip.lens.impetus.redstone.bound", name.getName()))); + Component.translatable("hexcasting.tooltip.lens.impetus.redstone.bound", plProfile.getName()))); } else { lines.add(new Pair<>(new ItemStack(Items.BARRIER), Component.translatable("hexcasting.tooltip.lens.impetus.redstone.bound.none"))); @@ -117,26 +123,26 @@ public void applyScryingLensOverlay(List> lines, } @Override - protected void saveModData(CompoundTag tag) { - super.saveModData(tag); + protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { + super.saveModData(tag, registries); if (this.storedPlayer != null) { tag.putUUID(TAG_STORED_PLAYER, this.storedPlayer); } if (this.storedPlayerProfile != null) { - tag.put(TAG_STORED_PLAYER_PROFILE, NbtUtils.writeGameProfile(new CompoundTag(), storedPlayerProfile)); + tag.put(TAG_STORED_PLAYER_PROFILE, ExtraCodecs.GAME_PROFILE.encodeStart(NbtOps.INSTANCE, storedPlayerProfile).getOrThrow()); } } @Override - protected void loadModData(CompoundTag tag) { - super.loadModData(tag); + protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { + super.loadModData(tag, registries); if (tag.contains(TAG_STORED_PLAYER, Tag.TAG_INT_ARRAY)) { this.storedPlayer = tag.getUUID(TAG_STORED_PLAYER); } else { this.storedPlayer = null; } if (tag.contains(TAG_STORED_PLAYER_PROFILE, Tag.TAG_COMPOUND)) { - this.storedPlayerProfile = NbtUtils.readGameProfile(tag.getCompound(TAG_STORED_PLAYER_PROFILE)); + this.storedPlayerProfile = ExtraCodecs.GAME_PROFILE.parse(NbtOps.INSTANCE, tag.getCompound(TAG_STORED_PLAYER_PROFILE)).getOrThrow(); } else { this.storedPlayerProfile = null; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java index 6cb5a1c245..b84a5d052c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.common.blocks.circles.impetuses; import at.petrak.hexcasting.api.block.circle.BlockAbstractImpetus; +import at.petrak.hexcasting.api.casting.circles.BlockEntityAbstractImpetus; import at.petrak.hexcasting.common.lib.HexBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; @@ -16,6 +17,11 @@ public BlockLookingImpetus(Properties p_49795_) { super(p_49795_); } + @Override + public BlockEntityType getBlockEntityType() { + return HexBlockEntities.IMPETUS_LOOK_TILE; + } + @Nullable @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java index fe4fb73e1b..168fb42a9c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java @@ -1,7 +1,9 @@ package at.petrak.hexcasting.common.blocks.circles.impetuses; import at.petrak.hexcasting.api.block.circle.BlockAbstractImpetus; +import at.petrak.hexcasting.api.casting.circles.BlockEntityAbstractImpetus; import at.petrak.hexcasting.api.casting.iota.EntityIota; +import at.petrak.hexcasting.common.lib.HexBlockEntities; import at.petrak.hexcasting.common.lib.HexSounds; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.core.BlockPos; @@ -10,10 +12,13 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -28,6 +33,11 @@ public BlockRedstoneImpetus(Properties p_49795_) { super(p_49795_); } + @Override + public BlockEntityType getBlockEntityType() { + return HexBlockEntities.IMPETUS_REDSTONE_TILE; + } + @Nullable @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { @@ -41,37 +51,38 @@ protected void createBlockStateDefinition(StateDefinition.Builder getBlockEntityType() { + return HexBlockEntities.IMPETUS_RIGHTCLICK_TILE; + } + @Nullable @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { @@ -24,14 +32,13 @@ public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { } @Override - public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, - BlockHitResult pHit) { - if (!pPlayer.isShiftKeyDown()) { - var tile = pLevel.getBlockEntity(pPos); + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + if (!player.isShiftKeyDown()) { + var tile = level.getBlockEntity(pos); if (tile instanceof BlockEntityRightClickImpetus impetus) { - if (pPlayer instanceof ServerPlayer serverPlayer) { + if (player instanceof ServerPlayer sPlayer) { // impetus.activateSpellCircle(serverPlayer); - impetus.startExecution(serverPlayer); + impetus.startExecution(sPlayer); } return InteractionResult.SUCCESS; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java index 8206a583a7..8eaea34e68 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java @@ -1,5 +1,6 @@ package at.petrak.hexcasting.common.blocks.decoration; +import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -8,11 +9,14 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DirectionalBlock; +import net.minecraft.world.level.block.EndRodBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.BlockHitResult; public class BlockAmethystDirectional extends DirectionalBlock { + public static final MapCodec CODEC = simpleCodec(BlockAmethystDirectional::new); + public BlockAmethystDirectional(Properties properties) { super(properties); } @@ -23,7 +27,6 @@ public void onProjectileHit(Level level, BlockState state, BlockHitResult result level.playSound(null, pos, SoundEvents.AMETHYST_BLOCK_HIT, SoundSource.BLOCKS, 1.0F, 0.5F + level.random.nextFloat() * 1.2F); level.playSound(null, pos, SoundEvents.AMETHYST_BLOCK_CHIME, SoundSource.BLOCKS, 1.0F, 0.5F + level.random.nextFloat() * 1.2F); } - } protected void createBlockStateDefinition(StateDefinition.Builder $$0) { @@ -33,4 +36,9 @@ protected void createBlockStateDefinition(StateDefinition.Builder codec() { + return CODEC; + } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java index 6bc4459c00..c94970d4fb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java @@ -10,7 +10,7 @@ public class BlockHexDoor extends DoorBlock { public BlockHexDoor(Properties $$0) { - super($$0, HexBlockSetTypes.EDIFIED_WOOD); + super(HexBlockSetTypes.EDIFIED_WOOD, $$0); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java index 10fc89230e..a36a2a6c3f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java @@ -12,7 +12,7 @@ public class BlockHexFenceGate extends FenceGateBlock { public BlockHexFenceGate(Properties $$0) { - super($$0, WoodType.DARK_OAK); + super(WoodType.DARK_OAK, $$0); } @SoftImplement("forge") diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java index 5e6a517b1d..0017c066b1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java @@ -9,8 +9,8 @@ import net.minecraft.world.level.block.state.BlockState; public class BlockHexPressurePlate extends PressurePlateBlock { - public BlockHexPressurePlate(Sensitivity $$0, Properties $$1) { - super($$0, $$1, HexBlockSetTypes.EDIFIED_WOOD); + public BlockHexPressurePlate(Properties $$0) { + super(HexBlockSetTypes.EDIFIED_WOOD, $$0); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java index 3e2620c59b..62d49a6eeb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java @@ -10,7 +10,7 @@ public class BlockHexTrapdoor extends TrapDoorBlock { public BlockHexTrapdoor(Properties $$0) { - super($$0, HexBlockSetTypes.EDIFIED_WOOD); + super(HexBlockSetTypes.EDIFIED_WOOD, $$0); } @SoftImplement("forge") diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java index 355f9edb9a..3676b5a009 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java @@ -10,7 +10,7 @@ public class BlockHexWoodButton extends ButtonBlock { public BlockHexWoodButton(Properties $$0) { - super($$0, BlockSetType.DARK_OAK, 30, true); + super(BlockSetType.DARK_OAK, 30, $$0); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityConjured.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityConjured.java index 5ac5004b91..e9caf5c417 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityConjured.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityConjured.java @@ -7,7 +7,9 @@ import at.petrak.hexcasting.common.lib.HexBlockEntities; import at.petrak.hexcasting.common.particles.ConjureParticleOptions; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; @@ -89,13 +91,13 @@ public void landParticle(Entity entity, int number) { } @Override - protected void saveModData(CompoundTag tag) { - tag.put(TAG_COLORIZER, this.colorizer.serializeToNBT()); + protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { + tag.put(TAG_COLORIZER, FrozenPigment.CODEC.encodeStart(NbtOps.INSTANCE, colorizer).getOrThrow()); } @Override - protected void loadModData(CompoundTag tag) { - this.colorizer = FrozenPigment.fromNBT(tag.getCompound(TAG_COLORIZER)); + protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { + this.colorizer = FrozenPigment.CODEC.parse(NbtOps.INSTANCE, tag.getCompound(TAG_COLORIZER)).getOrThrow(); } public FrozenPigment getColorizer() { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityQuenchedAllay.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityQuenchedAllay.java index dac5512a58..186bc613ab 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityQuenchedAllay.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/entity/BlockEntityQuenchedAllay.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.common.blocks.BlockQuenchedAllay; import at.petrak.hexcasting.common.lib.HexBlockEntities; import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.block.state.BlockState; @@ -22,12 +23,12 @@ public static BiFunction fromKno } @Override - protected void saveModData(CompoundTag tag) { + protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { } @Override - protected void loadModData(CompoundTag tag) { + protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicRead.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicRead.kt index 34a28f0d26..552ba4e5ac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicRead.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicRead.kt @@ -24,6 +24,6 @@ object OpAkashicRead : ConstMediaAction { } val datum = record.lookupPattern(pos, key, env.world) - return listOf(datum ?: NullIota()) + return listOf(datum ?: NullIota.INSTANCE) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicWrite.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicWrite.kt index 2089965835..5ee2cf655a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicWrite.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/akashic/OpAkashicWrite.kt @@ -34,7 +34,7 @@ object OpAkashicWrite : SpellAction { throw MishapNoAkashicRecord(pos) } - val trueName = MishapOthersName.getTrueNameFromDatum(datum, env.castingEntity as? ServerPlayer) + val trueName = MishapOthersName.getTrueNameFromDatum(env.world, datum, env.castingEntity as? ServerPlayer) if (trueName != null) throw MishapOthersName(trueName) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpIndex.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpIndex.kt index dacaa022a8..261cf0f696 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpIndex.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpIndex.kt @@ -13,7 +13,7 @@ object OpIndex : ConstMediaAction { override fun execute(args: List, env: CastingEnvironment): List { val list = args.getList(0, argc).toMutableList() val index = args.getDouble(1, argc) - val x = list.getOrElse(index.roundToInt()) { NullIota() } + val x = list.getOrElse(index.roundToInt()) { NullIota.INSTANCE } return listOf(x) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpUnCons.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpUnCons.kt index 211e91283d..5156595309 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpUnCons.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/lists/OpUnCons.kt @@ -14,6 +14,6 @@ object OpUnCons : ConstMediaAction { if (list.nonEmpty) { return listOf(ListIota(list.cdr), list.car) } - return listOf(args[0], NullIota()) + return listOf(args[0], NullIota.INSTANCE) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPeekLocal.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPeekLocal.kt index 375b5bbcc0..f0e4b994c6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPeekLocal.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPeekLocal.kt @@ -9,15 +9,16 @@ import at.petrak.hexcasting.api.casting.eval.vm.SpellContinuation import at.petrak.hexcasting.api.casting.iota.IotaType import at.petrak.hexcasting.api.casting.iota.NullIota import at.petrak.hexcasting.common.lib.hex.HexEvalSounds +import net.minecraft.nbt.NbtOps object OpPeekLocal : Action { override fun operate(env: CastingEnvironment, image: CastingImage, continuation: SpellContinuation): OperationResult { val stack = image.stack.toMutableList() val rm = if (image.userData.contains(HexAPI.RAVENMIND_USERDATA)) { - IotaType.deserialize(image.userData.getCompound(HexAPI.RAVENMIND_USERDATA), env.world) + IotaType.TYPED_CODEC.parse(NbtOps.INSTANCE, image.userData.getCompound(HexAPI.RAVENMIND_USERDATA)).getOrThrow() } else { - NullIota() + NullIota.INSTANCE } stack.add(rm) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPushLocal.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPushLocal.kt index 59c8a7e078..0346451238 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPushLocal.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/local/OpPushLocal.kt @@ -10,6 +10,8 @@ import at.petrak.hexcasting.api.casting.iota.IotaType import at.petrak.hexcasting.api.casting.mishaps.MishapNotEnoughArgs import at.petrak.hexcasting.common.lib.hex.HexEvalSounds import at.petrak.hexcasting.common.lib.hex.HexIotaTypes +import net.minecraft.nbt.NbtOps +import net.minecraft.nbt.Tag object OpPushLocal : Action { override fun operate(env: CastingEnvironment, image: CastingImage, continuation: SpellContinuation): OperationResult { @@ -22,7 +24,7 @@ object OpPushLocal : Action { if (newLocal.type == HexIotaTypes.NULL) image.userData.remove(HexAPI.RAVENMIND_USERDATA) else - image.userData.put(HexAPI.RAVENMIND_USERDATA, IotaType.serialize(newLocal)) + image.userData.put(HexAPI.RAVENMIND_USERDATA, IotaType.TYPED_CODEC.encodeStart(NbtOps.INSTANCE, newLocal).getOrThrow()) val image2 = image.withUsedOp().copy(stack = stack) return OperationResult(image2, listOf(), continuation, HexEvalSounds.NORMAL_EXECUTE) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityHeight.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityHeight.kt index 5e84528387..d8907cc416 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityHeight.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityHeight.kt @@ -10,7 +10,7 @@ object OpEntityHeight : ConstMediaAction { override val argc = 1 override fun execute(args: List, env: CastingEnvironment): List { - val e = args.getEntity(0, argc) + val e = args.getEntity(env.world, 0, argc) env.assertEntityInRange(e) return e.bbHeight.asActionResult } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityLook.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityLook.kt index 23e47e9076..b1eaed2c6f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityLook.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityLook.kt @@ -10,7 +10,7 @@ object OpEntityLook : ConstMediaAction { override val argc = 1 override fun execute(args: List, env: CastingEnvironment): List { - val e = args.getEntity(0, argc) + val e = args.getEntity(env.world, 0, argc) env.assertEntityInRange(e) return e.lookAngle.asActionResult } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityPos.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityPos.kt index 06a6e1cb36..2cb8188297 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityPos.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityPos.kt @@ -10,7 +10,7 @@ class OpEntityPos(val feet: Boolean) : ConstMediaAction { override val argc = 1 override fun execute(args: List, env: CastingEnvironment): List { - val e = args.getEntity(0, argc) + val e = args.getEntity(env.world, 0, argc) env.assertEntityInRange(e) return (if (this.feet) e.position() else e.eyePosition).asActionResult } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityVelocity.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityVelocity.kt index 8ce1097d56..293329a8bc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityVelocity.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpEntityVelocity.kt @@ -11,7 +11,7 @@ object OpEntityVelocity : ConstMediaAction { override val argc = 1 override fun execute(args: List, env: CastingEnvironment): List { - val e = args.getEntity(0, argc) + val e = args.getEntity(env.world, 0, argc) env.assertEntityInRange(e) val vel = HexAPI.instance().getEntityVelocitySpecial(e) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockAxisRaycast.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockAxisRaycast.kt index 2aa68ecf28..37d7aa33e9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockAxisRaycast.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockAxisRaycast.kt @@ -35,7 +35,7 @@ object OpBlockAxisRaycast : ConstMediaAction { return if (blockHitResult.type == HitResult.Type.BLOCK && env.isVecInRange(Vec3.atCenterOf(blockHitResult.blockPos))) { blockHitResult.direction.step().asActionResult } else { - listOf(NullIota()) + listOf(NullIota.INSTANCE) } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockRaycast.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockRaycast.kt index 33a2e990eb..34bd19b8aa 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockRaycast.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpBlockRaycast.kt @@ -39,7 +39,7 @@ object OpBlockRaycast : ConstMediaAction { // TODO some action that has the "weird" version? blockHitResult.blockPos.asActionResult } else { - listOf(NullIota()) + listOf(NullIota.INSTANCE) } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpEntityRaycast.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpEntityRaycast.kt index 64ea54525a..75ea1d5adf 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpEntityRaycast.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/raycast/OpEntityRaycast.kt @@ -38,7 +38,7 @@ object OpEntityRaycast : ConstMediaAction { return if (entityHitResult != null && env.isEntityInRange(entityHitResult.entity)) { entityHitResult.entity.asActionResult } else { - listOf(NullIota()) + listOf(NullIota.INSTANCE) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpRead.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpRead.kt index 51791b6d26..0c8087b4b3 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpRead.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpRead.kt @@ -12,7 +12,7 @@ object OpRead : ConstMediaAction { override fun execute(args: List, env: CastingEnvironment): List { val (handStack) = env.getHeldItemToOperateOn { val dataHolder = IXplatAbstractions.INSTANCE.findDataHolder(it) - dataHolder != null && (dataHolder.readIota(env.world) != null || dataHolder.emptyIota() != null) + dataHolder != null && (dataHolder.readIota() != null || dataHolder.emptyIota() != null) } // If there are no data holders that are readable, find a data holder that isn't readable // so that the error message is more helpful. @@ -24,7 +24,7 @@ object OpRead : ConstMediaAction { val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(handStack) ?: throw MishapBadOffhandItem.of(handStack, "iota.read") - val datum = datumHolder.readIota(env.world) + val datum = datumHolder.readIota() ?: datumHolder.emptyIota() ?: throw MishapBadOffhandItem.of(handStack, "iota.read") diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpReadable.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpReadable.kt index d368b9d87b..93d234dfc0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpReadable.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpReadable.kt @@ -18,7 +18,7 @@ object OpReadable : ConstMediaAction { ?: return false.asActionResult // If the datum contains no iota, return whether it has a default empty iota. - datumHolder.readIota(env.world) + datumHolder.readIota() ?: return (datumHolder.emptyIota() != null).asActionResult return true.asActionResult diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerRead.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerRead.kt index 4fd4a69f8b..060ebe9d77 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerRead.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerRead.kt @@ -14,14 +14,14 @@ object OpTheCoolerRead : ConstMediaAction { args: List, env: CastingEnvironment ): List { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) env.assertEntityInRange(target) val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(target) ?: throw MishapBadEntity.of(target, "iota.read") - val datum = datumHolder.readIota(env.world) + val datum = datumHolder.readIota() ?: datumHolder.emptyIota() ?: throw MishapBadEntity.of(target, "iota.read") return listOf(datum) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerReadable.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerReadable.kt index aa118182af..2b191da486 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerReadable.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerReadable.kt @@ -14,13 +14,13 @@ object OpTheCoolerReadable : ConstMediaAction { args: List, env: CastingEnvironment ): List { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) env.assertEntityInRange(target) val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(target) ?: return false.asActionResult - datumHolder.readIota(env.world) + datumHolder.readIota() ?: datumHolder.emptyIota() ?: return false.asActionResult diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWritable.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWritable.kt index 598ae8b145..e76a6dba84 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWritable.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWritable.kt @@ -15,13 +15,13 @@ object OpTheCoolerWritable : ConstMediaAction { args: List, env: CastingEnvironment ): List { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) env.assertEntityInRange(target) val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(target) ?: return false.asActionResult - val success = datumHolder.writeIota(NullIota(), true) + val success = datumHolder.writeIota(NullIota.INSTANCE, true) return success.asActionResult } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWrite.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWrite.kt index 27e02a8f97..326705b32a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWrite.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpTheCoolerWrite.kt @@ -19,7 +19,7 @@ object OpTheCoolerWrite : SpellAction { args: List, env: CastingEnvironment ): SpellAction.Result { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) val datum = args[1] env.assertEntityInRange(target) @@ -32,7 +32,7 @@ object OpTheCoolerWrite : SpellAction { // We pass null here so that even the own caster won't be allowed into a focus. // Otherwise, you could sentinel scout to people and remotely write their names into things using a cleric circle. - val trueName = MishapOthersName.getTrueNameFromDatum(datum, null) + val trueName = MishapOthersName.getTrueNameFromDatum(env.world, datum, null) if (trueName != null) throw MishapOthersName(trueName) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpWrite.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpWrite.kt index 317dbc0453..66407097a7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpWrite.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/rw/OpWrite.kt @@ -37,7 +37,7 @@ object OpWrite : SpellAction { if (!datumHolder.writeIota(datum, true)) throw MishapBadOffhandItem.of(handStack, "iota.readonly", datum.display()) - val trueName = MishapOthersName.getTrueNameFromDatum(datum, env.castingEntity as? ServerPlayer) + val trueName = MishapOthersName.getTrueNameFromDatum(env.world, datum, env.castingEntity as? ServerPlayer) if (trueName != null) throw MishapOthersName(trueName) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpAddMotion.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpAddMotion.kt index 7f45168f85..90c1d15a0b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpAddMotion.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpAddMotion.kt @@ -25,7 +25,7 @@ object OpAddMotion : SpellAction { env: CastingEnvironment, userData: CompoundTag ): SpellAction.Result { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) val motion = args.getVec3(1, argc) env.assertEntityInRange(target) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpBlink.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpBlink.kt index a26f460d74..34a9862be8 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpBlink.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpBlink.kt @@ -20,14 +20,13 @@ import kotlin.math.roundToLong object OpBlink : SpellAction { override val argc = 2 override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) val delta = args.getDouble(1, argc) env.assertEntityInRange(target) - // TODO: is this the same as canChangeDimensions? and what does that boolean do anyways if (!target.canUsePortal(true) || target.type.`is`(HexTags.Entities.CANNOT_TELEPORT)) throw MishapImmuneEntity(target) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpColorize.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpColorize.kt index 1011420536..0c7da5c6f4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpColorize.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpColorize.kt @@ -15,8 +15,8 @@ object OpColorize : SpellAction { override val argc = 0 override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { val (handStack) = env.getHeldItemToOperateOn(IXplatAbstractions.INSTANCE::isPigment) ?: throw MishapBadOffhandItem.of(ItemStack.EMPTY, "colorizer") // TODO: hack diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpDestroyFluid.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpDestroyFluid.kt index 17c1aa43a2..7f6da8e60d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpDestroyFluid.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpDestroyFluid.kt @@ -23,8 +23,8 @@ import net.minecraft.world.phys.Vec3 object OpDestroyFluid : SpellAction { override val argc = 1 override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { val vecPos = args.getVec3(0, argc) val pos = BlockPos.containing(vecPos) @@ -79,7 +79,7 @@ object OpDestroyFluid : SpellAction { ) { val success = if (blockstate.block is BucketPickup && !(blockstate.block as BucketPickup).pickupBlock( - env.caster, + env.castingEntity as? ServerPlayer, env.world, here, blockstate diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpIgnite.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpIgnite.kt index 4ad9a736f7..10e55fa507 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpIgnite.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpIgnite.kt @@ -27,12 +27,12 @@ import net.minecraft.world.phys.Vec3 object OpIgnite : SpellAction { override val argc = 1 override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { when (val target = args[0]) { is EntityIota -> { - val entity = args.getEntity(0, argc) + val entity = args.getEntity(env.world, 0, argc) env.assertEntityInRange(entity) return SpellAction.Result( EntitySpell(entity), @@ -40,7 +40,6 @@ object OpIgnite : SpellAction { listOf(ParticleSpray.burst(entity.position(), 1.0)) ) } - is Vec3Iota -> { val block = args.getBlockPos(0, argc) env.assertPosInRangeForEditing(block) @@ -50,7 +49,6 @@ object OpIgnite : SpellAction { listOf(ParticleSpray.burst(Vec3.atCenterOf(BlockPos(block)), 1.0)) ) } - else -> throw MishapInvalidIota.ofType(target, 0, "entity_or_vector") } } @@ -64,12 +62,7 @@ object OpIgnite : SpellAction { } fun tryToClick(ctx: CastingEnvironment, pos: BlockPos, item: Item): Boolean { - return IXplatAbstractions.INSTANCE.isPlacingAllowed( - ctx.world, - pos, - ItemStack(item), - ctx.castingEntity as? ServerPlayer - ) && + return IXplatAbstractions.INSTANCE.isPlacingAllowed(ctx.world, pos, ItemStack(item), ctx.castingEntity as? ServerPlayer) && item.useOn( UseOnContext( ctx.world, @@ -84,7 +77,9 @@ object OpIgnite : SpellAction { private data class EntitySpell(val entity: Entity) : RenderedSpell { override fun cast(env: CastingEnvironment) { - entity.igniteForSeconds(8f) + if (!entity.fireImmune()) { + entity.igniteForSeconds(8.0f) + } } } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt index 9420e53242..c62d816844 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt @@ -58,7 +58,7 @@ class OpMakePackagedSpell(val isValid: Predicate, val expectedTypeDes ) } - val trueName = MishapOthersName.getTrueNameFromArgs(patterns, env.castingEntity as? ServerPlayer) + val trueName = MishapOthersName.getTrueNameFromArgs(env.world, patterns, env.castingEntity as? ServerPlayer) if (trueName != null) throw MishapOthersName(trueName) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt index 88c3113e68..16a7dcc247 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPlaceBlock.kt @@ -9,7 +9,6 @@ import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.mishaps.MishapBadBlock import at.petrak.hexcasting.api.casting.mishaps.MishapBadOffhandItem import at.petrak.hexcasting.api.misc.MediaConstants -import at.petrak.hexcasting.mixin.accessor.AccessorUseOnContext import at.petrak.hexcasting.xplat.IXplatAbstractions import net.minecraft.core.BlockPos import net.minecraft.core.Direction @@ -21,6 +20,7 @@ import net.minecraft.world.InteractionResult import net.minecraft.world.item.BlockItem import net.minecraft.world.item.ItemStack import net.minecraft.world.item.context.BlockPlaceContext +import net.minecraft.world.item.context.UseOnContext import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.Vec3 @@ -40,15 +40,7 @@ object OpPlaceBlock : SpellAction { ) val itemUseCtx = env .queryForMatchingStack { it.item is BlockItem } - ?.let { - AccessorUseOnContext.`hex$new`( - env.world, - env.castingEntity as? ServerPlayer, - env.castingHand, - it, - blockHit - ) - } + ?.let { UseOnContext(env.world, env.castingEntity as? ServerPlayer, env.castingHand, it, blockHit) } ?: throw MishapBadOffhandItem.of(ItemStack.EMPTY, "placeable") val placeContext = BlockPlaceContext(itemUseCtx) @@ -85,20 +77,14 @@ object OpPlaceBlock : SpellAction { spoofedStack.count = 1 val itemUseCtx = - AccessorUseOnContext.`hex$new`( - env.world, - caster as? ServerPlayer, - env.otherHand, - spoofedStack, - blockHit - ) + UseOnContext(env.world, caster as? ServerPlayer, env.otherHand, spoofedStack, blockHit) val placeContext = BlockPlaceContext(itemUseCtx) if (bstate.canBeReplaced(placeContext)) { - if (env.withdrawItem({ ItemStack.isSameItemSameTags(it, placeeStack) }, 1, false)) { + if (env.withdrawItem({ ItemStack.isSameItemSameComponents(it, placeeStack) }, 1, false)) { val res = spoofedStack.useOn(placeContext) if (res != InteractionResult.FAIL) { - env.withdrawItem({ ItemStack.isSameItemSameTags(it, placeeStack) }, 1, true) + env.withdrawItem({ ItemStack.isSameItemSameComponents(it, placeeStack) }, 1, true) env.world.playSound( caster as? ServerPlayer, diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt index a6a565d8d8..543053cfeb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt @@ -19,8 +19,8 @@ class OpPotionEffect( get() = if (this.allowPotency) 3 else 2 override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { val target = args.getLivingEntityButNotArmorStand(0, argc) val duration = args.getPositiveDouble(1, argc) @@ -42,12 +42,7 @@ class OpPotionEffect( ) } - private class Spell( - val effect: Holder, - val target: LivingEntity, - val duration: Double, - val potency: Double - ) : + private class Spell(val effect: Holder, val target: LivingEntity, val duration: Double, val potency: Double) : RenderedSpell { override fun cast(env: CastingEnvironment) { if (duration > 1.0 / 20.0) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpTheOnlyReasonAnyoneDownloadedPsi.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpTheOnlyReasonAnyoneDownloadedPsi.kt index 623caf778b..0b663b871c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpTheOnlyReasonAnyoneDownloadedPsi.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpTheOnlyReasonAnyoneDownloadedPsi.kt @@ -7,13 +7,13 @@ import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.getBlockPos import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.misc.MediaConstants -import at.petrak.hexcasting.mixin.accessor.AccessorUseOnContext import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.server.level.ServerPlayer import net.minecraft.world.InteractionHand import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items +import net.minecraft.world.item.context.UseOnContext import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.Vec3 @@ -21,8 +21,8 @@ import net.minecraft.world.phys.Vec3 object OpTheOnlyReasonAnyoneDownloadedPsi : SpellAction { override val argc = 1 override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { val target = args.getBlockPos(0, argc) env.assertPosInRangeForEditing(target) @@ -38,13 +38,7 @@ object OpTheOnlyReasonAnyoneDownloadedPsi : SpellAction { override fun cast(env: CastingEnvironment) { // https://github.com/VazkiiMods/Psi/blob/master/src/main/java/vazkii/psi/common/spell/trick/PieceTrickOvergrow.java val hit = BlockHitResult(Vec3.ZERO, Direction.UP, pos, false) - val fakeContext = AccessorUseOnContext.`hex$new`( - env.world, - env.castingEntity as? ServerPlayer, - InteractionHand.MAIN_HAND, - ItemStack(Items.BONE_MEAL), - hit - ) + val fakeContext = UseOnContext(env.world, env.castingEntity as? ServerPlayer, InteractionHand.MAIN_HAND, ItemStack(Items.BONE_MEAL), hit) Items.BONE_MEAL.useOn(fakeContext) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt index 256ccc703a..5166795c0a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt @@ -32,8 +32,8 @@ object OpBrainsweep : SpellAction { override fun hasCastingSound(ctx: CastingEnvironment) = false override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { val sacrifice = args.getMob(0, argc) val vecPos = args.getVec3(1, argc) @@ -54,9 +54,10 @@ object OpBrainsweep : SpellAction { val state = env.world.getBlockState(pos) val recman = env.world.recipeManager - // TODO they changed recipes again val recipes = recman.getAllRecipesFor(HexRecipeStuffRegistry.BRAINSWEEP_TYPE) - val recipe = recipes.find { it.matches(state, sacrifice, env.world) } + val recipe = recipes.asSequence() + .map { it.value } + .find { it.matches(state, sacrifice, env.world) } ?: throw MishapBadBrainsweep(sacrifice, pos) return SpellAction.Result( diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt index f0bf4812d0..dbe42846ea 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpTeleport.kt @@ -15,11 +15,13 @@ import at.petrak.hexcasting.api.mod.HexTags import at.petrak.hexcasting.common.msgs.MsgBlinkS2C import at.petrak.hexcasting.xplat.IXplatAbstractions import net.minecraft.core.BlockPos +import net.minecraft.core.component.DataComponents import net.minecraft.server.level.ServerLevel import net.minecraft.server.level.ServerPlayer import net.minecraft.server.level.TicketType import net.minecraft.world.entity.Entity import net.minecraft.world.item.enchantment.EnchantmentHelper +import net.minecraft.world.item.enchantment.Enchantments import net.minecraft.world.level.ChunkPos import net.minecraft.world.phys.Vec3 @@ -28,15 +30,14 @@ import net.minecraft.world.phys.Vec3 object OpTeleport : SpellAction { override val argc = 2 override fun execute( - args: List, - env: CastingEnvironment + args: List, + env: CastingEnvironment ): SpellAction.Result { - val teleportee = args.getEntity(0, argc) + val teleportee = args.getEntity(env.world, 0, argc) val delta = args.getVec3(1, argc) env.assertEntityInRange(teleportee) - // TODO: see todos on blink if (!teleportee.canUsePortal(true) || teleportee.type.`is`(HexTags.Entities.CANNOT_TELEPORT)) throw MishapImmuneEntity(teleportee) @@ -73,7 +74,7 @@ object OpTeleport : SpellAction { // having to rearrange those. Also it makes sense for LORE REASONS probably, since the caster is more // aware of items they use often. for (armorItem in teleportee.inventory.armor) { - if (EnchantmentHelper.hasBindingCurse(armorItem)) + if (armorItem.get(DataComponents.ENCHANTMENTS)?.keySet()?.any { e -> e.`is`(Enchantments.BINDING_CURSE) } == true) continue if (Math.random() < baseDropChance * 0.25) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelPos.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelPos.kt index fa56812ca5..1363ed9528 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelPos.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelPos.kt @@ -18,7 +18,7 @@ object OpGetSentinelPos : ConstMediaAction { if (env.castingEntity !is ServerPlayer) throw MishapBadCaster() - val sentinel = IXplatAbstractions.INSTANCE.getSentinel(env.castingEntity as? ServerPlayer) ?: return listOf(NullIota()) + val sentinel = IXplatAbstractions.INSTANCE.getSentinel(env.castingEntity as? ServerPlayer) ?: return listOf(NullIota.INSTANCE) if (sentinel.dimension != env.world.dimension()) throw MishapLocationInWrongDimension(sentinel.dimension.location()) return sentinel.position.asActionResult diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelWayfind.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelWayfind.kt index cad52447ed..aacc6ea486 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelWayfind.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/sentinel/OpGetSentinelWayfind.kt @@ -23,7 +23,7 @@ object OpGetSentinelWayfind : ConstMediaAction { val from = args.getVec3(0, argc) - val sentinel = IXplatAbstractions.INSTANCE.getSentinel(env.castingEntity as? ServerPlayer) ?: return listOf(NullIota()) + val sentinel = IXplatAbstractions.INSTANCE.getSentinel(env.castingEntity as? ServerPlayer) ?: return listOf(NullIota.INSTANCE) if (sentinel.dimension != env.world.dimension()) throw MishapLocationInWrongDimension(sentinel.dimension.location()) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorIndex.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorIndex.kt index 2ecb5fc140..e08265b4e0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorIndex.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorIndex.kt @@ -15,7 +15,7 @@ object OperatorIndex : OperatorBasic(2, IotaMultiPredicate.pair(IotaPredicate.of val it = iotas.iterator() val list = downcast(it.next(), LIST).list.toMutableList() val index = downcast(it.next(), DOUBLE).double - val x = list.getOrElse(index.roundToInt()) { NullIota() } + val x = list.getOrElse(index.roundToInt()) { NullIota.INSTANCE } return listOf(x) } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnCons.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnCons.kt index 54f0de69c2..be234fd5b7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnCons.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnCons.kt @@ -17,6 +17,6 @@ object OperatorUnCons : OperatorBasic(1, IotaMultiPredicate.all(IotaPredicate.of val list = it.nextList(arity) if (list.nonEmpty) return listOf(ListIota(list.cdr), list.car) - return listOf(ListIota(list), NullIota()) + return listOf(ListIota(list), NullIota.INSTANCE) } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnappend.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnappend.kt index 6d60362b0d..d318ff21a4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnappend.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/arithmetic/operator/list/OperatorUnappend.kt @@ -15,7 +15,7 @@ object OperatorUnappend : OperatorBasic(1, IotaMultiPredicate.all(IotaPredicate. override fun apply(iotas: Iterable, env: CastingEnvironment): Iterable { val it = iotas.iterator().withIndex() val list = it.nextList(arity).toMutableList() - val last = list.removeLastOrNull() ?: NullIota() + val last = list.removeLastOrNull() ?: NullIota.INSTANCE return listOf(ListIota(list), last) } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java b/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java index f39e14d47f..27c50f072f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java @@ -7,7 +7,9 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.casting.PatternRegistryManifest; import at.petrak.hexcasting.common.items.storage.ItemScroll; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; +import at.petrak.hexcasting.common.lib.HexRegistries; import at.petrak.hexcasting.server.ScrungledPatternsSave; import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.mojang.brigadier.builder.LiteralArgumentBuilder; @@ -18,6 +20,7 @@ import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; @@ -32,18 +35,18 @@ public static void add(LiteralArgumentBuilder cmd) { .then(Commands.literal("list") .executes(ctx -> list(ctx.getSource()))) .then(Commands.literal("give") - .then(Commands.argument("patternName", PatternResLocArgument.id()) + .then(Commands.argument("patternName", PatternResKeyArgument.id()) .executes(ctx -> giveOne(ctx.getSource(), getDefaultTarget(ctx.getSource()), - ResourceLocationArgument.getId(ctx, "patternName"), - PatternResLocArgument.getPattern(ctx, "patternName"))) + PatternResKeyArgument.getPatternKey(ctx, "patternName"), + PatternResKeyArgument.getPattern(ctx, "patternName"))) .then(Commands.argument("targets", EntityArgument.players()) .executes(ctx -> giveOne(ctx.getSource(), EntityArgument.getPlayers(ctx, "targets"), - ResourceLocationArgument.getId(ctx, "patternName"), - PatternResLocArgument.getPattern(ctx, "patternName")))))) + PatternResKeyArgument.getPatternKey(ctx, "patternName"), + PatternResKeyArgument.getPattern(ctx, "patternName")))))) .then(Commands.literal("giveAll") .executes(ctx -> giveAll(ctx.getSource(), @@ -98,18 +101,15 @@ private static int giveAll(CommandSourceStack source, Collection t var startDir = found.getSecond().canonicalStartDir(); var pat = HexPattern.fromAngles(signature, startDir); - var tag = new CompoundTag(); - tag.putString(ItemScroll.TAG_OP_ID, key.location().toString()); - tag.put(ItemScroll.TAG_PATTERN, pat.serializeToNBT()); - var stack = new ItemStack(HexItems.SCROLL_LARGE); - stack.setTag(tag); + stack.set(HexDataComponents.ACTION, key); + stack.set(HexDataComponents.PATTERN, pat); for (var player : targets) { var stackEntity = player.drop(stack, false); if (stackEntity != null) { stackEntity.setNoPickUpDelay(); - stackEntity.setThrower(player.getUUID()); + stackEntity.setThrower(player); } count++; @@ -130,20 +130,17 @@ private static int giveAll(CommandSourceStack source, Collection t } private static int giveOne(CommandSourceStack source, Collection targets, - ResourceLocation patternName, HexPattern pat) { + ResourceKey actionKey, HexPattern pat) { if (!targets.isEmpty()) { - var tag = new CompoundTag(); - tag.putString(ItemScroll.TAG_OP_ID, patternName.toString()); - tag.put(ItemScroll.TAG_PATTERN, pat.serializeToNBT()); - var stack = new ItemStack(HexItems.SCROLL_LARGE); - stack.setTag(tag); + stack.set(HexDataComponents.ACTION, actionKey); + stack.set(HexDataComponents.PATTERN, pat); source.sendSuccess(() -> Component.translatable( "command.hexcasting.pats.specific.success", stack.getDisplayName(), - patternName, + actionKey.location(), targets.size() == 1 ? targets.iterator().next().getDisplayName() : targets.size()), true); @@ -151,7 +148,7 @@ private static int giveOne(CommandSourceStack source, Collection t var stackEntity = player.drop(stack, false); if (stackEntity != null) { stackEntity.setNoPickUpDelay(); - stackEntity.setThrower(player.getUUID()); + stackEntity.setThrower(player); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/command/PatternResKeyArgument.java b/Common/src/main/java/at/petrak/hexcasting/common/command/PatternResKeyArgument.java new file mode 100644 index 0000000000..4413203b37 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/command/PatternResKeyArgument.java @@ -0,0 +1,83 @@ +package at.petrak.hexcasting.common.command; + +import at.petrak.hexcasting.api.casting.ActionRegistryEntry; +import at.petrak.hexcasting.api.casting.math.HexPattern; +import at.petrak.hexcasting.api.mod.HexTags; +import at.petrak.hexcasting.api.utils.HexUtils; +import at.petrak.hexcasting.common.casting.PatternRegistryManifest; +import at.petrak.hexcasting.common.lib.HexRegistries; +import at.petrak.hexcasting.xplat.IXplatAbstractions; +import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; +import com.mojang.brigadier.suggestion.Suggestions; +import com.mojang.brigadier.suggestion.SuggestionsBuilder; +import net.minecraft.commands.CommandSourceStack; +import net.minecraft.commands.SharedSuggestionProvider; +import net.minecraft.commands.arguments.ResourceKeyArgument; +import net.minecraft.commands.arguments.ResourceLocationArgument; +import net.minecraft.core.Registry; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeHolder; +import net.minecraft.world.item.crafting.RecipeManager; + +import java.util.ArrayList; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +public class PatternResKeyArgument extends ResourceKeyArgument { + private static final DynamicCommandExceptionType ERROR_UNKNOWN_PATTERN = new DynamicCommandExceptionType( + (errorer) -> + Component.translatable("hexcasting.pattern.unknown", errorer) + ); + + public PatternResKeyArgument() { + super(HexRegistries.ACTION); + } + + public static PatternResKeyArgument id() { + return new PatternResKeyArgument(); + } + + @Override + public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { + var suggestions = new ArrayList(); + var registry = IXplatAbstractions.INSTANCE.getActionRegistry(); + for (var key : registry.registryKeySet()) { + if (HexUtils.isOfTag(registry, key, HexTags.Actions.PER_WORLD_PATTERN)) { + suggestions.add(key.location().toString()); + } + } + + return SharedSuggestionProvider.suggest(suggestions, builder); + } + + public static ResourceKey getResourceKey( + CommandContext context, + String argumentName, + ResourceKey> registryKey, + DynamicCommandExceptionType exceptionType + ) throws CommandSyntaxException { + ResourceKey key = context.getArgument(argumentName, ResourceKey.class); + Optional> optional = key.cast(registryKey); + return optional.orElseThrow(() -> exceptionType.create(key.location())); + } + + public static ResourceKey getPatternKey( + CommandContext ctx, String argumentName) throws CommandSyntaxException { + return getResourceKey(ctx, argumentName, HexRegistries.ACTION, ERROR_UNKNOWN_PATTERN); + } + + public static HexPattern getPattern( + CommandContext ctx, String argumentName) throws CommandSyntaxException { + var targetKey = getPatternKey(ctx, argumentName); + var foundPat = PatternRegistryManifest.getCanonicalStrokesPerWorld(targetKey, ctx.getSource().getServer().overworld()); + if (foundPat == null) { + throw ERROR_UNKNOWN_PATTERN.create(targetKey.location()); + } else { + return foundPat; + } + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/command/PatternResLocArgument.java b/Common/src/main/java/at/petrak/hexcasting/common/command/PatternResLocArgument.java index 6403a422c9..d3a8813238 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/command/PatternResLocArgument.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/command/PatternResLocArgument.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.concurrent.CompletableFuture; +@Deprecated public class PatternResLocArgument extends ResourceLocationArgument { private static final DynamicCommandExceptionType ERROR_UNKNOWN_PATTERN = new DynamicCommandExceptionType( (errorer) -> diff --git a/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java index 03d916c8f7..0d3de91530 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.common.items.storage.ItemScroll; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexSounds; import at.petrak.hexcasting.common.msgs.MsgNewWallScrollS2C; @@ -13,11 +14,13 @@ import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.ClientCommonPacketListener; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerEntity; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -26,10 +29,12 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.decoration.HangingEntity; +import net.minecraft.world.entity.decoration.PaintingVariant; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -61,20 +66,13 @@ public EntityWallScroll(Level world, BlockPos pos, Direction dir, ItemStack scro } public void recalculateDisplay() { - CompoundTag patternTag = NBTHelper.getCompound(scroll, ItemScroll.TAG_PATTERN); - if (patternTag != null) { - this.pattern = HexPattern.fromNBT(patternTag); - this.isAncient = NBTHelper.hasString(scroll, ItemScroll.TAG_OP_ID); - } else { - this.pattern = null; - this.isAncient = false; - } + this.pattern = scroll.get(HexDataComponents.PATTERN); + this.isAncient = scroll.has(HexDataComponents.ACTION); } @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(SHOWS_STROKE_ORDER, false); + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(SHOWS_STROKE_ORDER, false); } public boolean getShowsStrokeOrder() { @@ -86,13 +84,17 @@ public void setShowsStrokeOrder(boolean b) { } @Override - public int getWidth() { - return 16 * blockSize; - } - - @Override - public int getHeight() { - return 16 * blockSize; + protected AABB calculateBoundingBox(BlockPos pos, Direction p_direction) { + float f = 0.46875F; + Vec3 vec3 = Vec3.atCenterOf(pos).relative(p_direction, -0.46875); + double d0 = blockSize % 2 == 0 ? 0.5 : 0.0; + Direction direction = p_direction.getCounterClockWise(); + Vec3 vec31 = vec3.relative(direction, d0).relative(Direction.UP, d0); + Direction.Axis direction$axis = p_direction.getAxis(); + double d2 = direction$axis == Direction.Axis.X ? 0.0625 : blockSize; + double d3 = blockSize; + double d4 = direction$axis == Direction.Axis.Z ? 0.0625 : blockSize; + return AABB.ofSize(vec31, d2, d3, d4); } @Override @@ -138,9 +140,9 @@ public void playPlacementSound() { } @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket(ServerEntity entity) { return IXplatAbstractions.INSTANCE.toVanillaClientboundPacket( - new MsgNewWallScrollS2C(new ClientboundAddEntityPacket(this), + new MsgNewWallScrollS2C(new ClientboundAddEntityPacket(this, this.direction.get3DDataValue(), this.getPos()), pos, direction, scroll, getShowsStrokeOrder(), blockSize)); } @@ -160,7 +162,7 @@ public void readSpawnData(BlockPos pos, Direction dir, ItemStack scrollItem, @Override public void addAdditionalSaveData(CompoundTag tag) { tag.putByte("direction", (byte) this.direction.ordinal()); - tag.put("scroll", HexUtils.serializeToNBT(this.scroll)); + tag.put("scroll", this.scroll.save(registryAccess())); tag.putBoolean("showsStrokeOrder", this.getShowsStrokeOrder()); tag.putInt("blockSize", this.blockSize); super.addAdditionalSaveData(tag); @@ -169,7 +171,7 @@ public void addAdditionalSaveData(CompoundTag tag) { @Override public void readAdditionalSaveData(CompoundTag tag) { this.direction = Direction.values()[tag.getByte("direction")]; - this.scroll = ItemStack.of(tag.getCompound("scroll")); + this.scroll = ItemStack.parse(registryAccess(), tag.getCompound("scroll")).orElse(ItemStack.EMPTY); this.blockSize = tag.getInt("blockSize"); this.setDirection(this.direction); @@ -187,9 +189,8 @@ public void moveTo(double pX, double pY, double pZ, float pYaw, float pPitch) { } @Override - public void lerpTo(double pX, double pY, double pZ, float pYaw, float pPitch, int pPosRotationIncrements, - boolean pTeleport) { - BlockPos blockpos = this.pos.offset((int) (pX - this.getX()), (int) (pY - this.getY()), (int) (pZ - this.getZ())); + public void lerpTo(double x, double y, double z, float yRot, float xRot, int steps) { + BlockPos blockpos = this.pos.offset((int) (x - this.getX()), (int) (y - this.getY()), (int) (z - this.getZ())); this.setPos(blockpos.getX(), blockpos.getY(), blockpos.getZ()); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java index 0ff996b907..c80424c0a5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.function.Consumer; @@ -96,50 +97,15 @@ public FrozenPigment getColorizer(Player player) { return IXplatAbstractions.INSTANCE.getPigment(player); } - ArmorMaterial ARMOR_MATERIAL = new ArmorMaterial() { - - @Override - public int getDurabilityForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getDefenseForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getEnchantmentValue() { - return 0; - } - - @NotNull - @Override - public SoundEvent getEquipSound() { - return SoundEvents.ARMOR_EQUIP_LEATHER; - } - - @NotNull - @Override - public Ingredient getRepairIngredient() { - return Ingredient.EMPTY; - } - - @Override - public String getName() { - return "robes"; - } - - @Override - public float getToughness() { - return 0; - } - - @Override - public float getKnockbackResistance() { - return 0; - } - }; + ArmorMaterial ARMOR_MATERIAL = new ArmorMaterial( + Collections.emptyMap(), + 0, + SoundEvents.ARMOR_EQUIP_LEATHER, + () -> Ingredient.EMPTY, + Collections.emptyList(), // TODO check textures. If not - use robes here from original code + 0, + 0 + ); @Override public ArmorMaterial robesMaterial() { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/HexBaubleItem.java b/Common/src/main/java/at/petrak/hexcasting/common/items/HexBaubleItem.java index ed208b1b64..fc84afbeb4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/HexBaubleItem.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/HexBaubleItem.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.common.items; import com.google.common.collect.Multimap; +import net.minecraft.core.Holder; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; @@ -10,5 +11,5 @@ * I feel like botnia probably does it this way becase it's older than xplat curios */ public interface HexBaubleItem { - Multimap getHexBaubleAttrs(ItemStack stack); + Multimap, AttributeModifier> getHexBaubleAttrs(ItemStack stack); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java index d5b059f5f7..f1d6135e74 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java @@ -2,16 +2,18 @@ import at.petrak.hexcasting.common.lib.HexItems; import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.PickaxeItem; import net.minecraft.world.item.Tier; +import net.minecraft.world.item.component.ItemAttributeModifiers; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; public class ItemJewelerHammer extends PickaxeItem { - public ItemJewelerHammer(Tier tier, int damageMod, float attackSpeedMod, Properties props) { - super(tier, damageMod, attackSpeedMod, props); + public ItemJewelerHammer(Tier tier, Properties props) { + super(tier, props); } public static boolean shouldFailToBreak(Player player, BlockState state, BlockPos pos) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java index 4b77873f29..cce4e2bf9d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java @@ -1,18 +1,22 @@ package at.petrak.hexcasting.common.items; import at.petrak.hexcasting.annotations.SoftImplement; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.common.lib.HexAttributes; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import net.minecraft.core.BlockSource; +import net.minecraft.core.Holder; +import net.minecraft.core.dispenser.BlockSource; import net.minecraft.core.dispenser.OptionalDispenseItemBehavior; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.EquipmentSlotGroup; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; //import net.minecraft.world.item.Wearable; +import net.minecraft.world.item.component.ItemAttributeModifiers; import net.minecraft.world.level.block.DispenserBlock; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,18 +28,15 @@ public class ItemLens extends Item implements HexBaubleItem { // Wearable, // The 0.1 is *additive* public static final AttributeModifier GRID_ZOOM = new AttributeModifier( - UUID.fromString("59d739b8-d419-45f7-a4ea-0efee0e3adf5"), - "Scrying Lens Zoom", 0.33, AttributeModifier.Operation.MULTIPLY_BASE); + HexAPI.modLoc("scrying_lens_zoom"), 0.33, AttributeModifier.Operation.ADD_MULTIPLIED_BASE); public static final AttributeModifier SCRY_SIGHT = new AttributeModifier( - UUID.fromString("e2e6e5d4-f978-4c11-8fdc-82a5af83385c"), - "Scrying Lens Sight", 1.0, AttributeModifier.Operation.ADDITION); + HexAPI.modLoc("scrying_lens_sight"), 1.0, AttributeModifier.Operation.ADD_VALUE); public ItemLens(Properties pProperties) { super(pProperties); DispenserBlock.registerBehavior(this, new OptionalDispenseItemBehavior() { - protected @NotNull - ItemStack execute(@NotNull BlockSource world, @NotNull ItemStack stack) { + protected @NotNull ItemStack execute(@NotNull BlockSource world, @NotNull ItemStack stack) { this.setSuccess(ArmorItem.dispenseArmor(world, stack)); return stack; } @@ -43,20 +44,23 @@ ItemStack execute(@NotNull BlockSource world, @NotNull ItemStack stack) { } @Override - public Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { - var out = HashMultimap.create(super.getDefaultAttributeModifiers(slot)); - if (slot == EquipmentSlot.HEAD || slot == EquipmentSlot.MAINHAND || slot == EquipmentSlot.OFFHAND) { - out.put(HexAttributes.GRID_ZOOM, GRID_ZOOM); - out.put(HexAttributes.SCRY_SIGHT, SCRY_SIGHT); - } - return out; + public ItemAttributeModifiers getDefaultAttributeModifiers() { + return ItemAttributeModifiers.builder() + .add(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM, EquipmentSlotGroup.HEAD) + .add(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM, EquipmentSlotGroup.MAINHAND) + .add(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM, EquipmentSlotGroup.OFFHAND) + + .add(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT, EquipmentSlotGroup.HEAD) + .add(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT, EquipmentSlotGroup.MAINHAND) + .add(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT, EquipmentSlotGroup.OFFHAND) + .build(); } @Override - public Multimap getHexBaubleAttrs(ItemStack stack) { - HashMultimap out = HashMultimap.create(); - out.put(HexAttributes.GRID_ZOOM, GRID_ZOOM); - out.put(HexAttributes.SCRY_SIGHT, SCRY_SIGHT); + public Multimap, AttributeModifier> getHexBaubleAttrs(ItemStack stack) { + HashMultimap, AttributeModifier> out = HashMultimap.create(); + out.put(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM); + out.put(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT); return out; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java index 3d2f347bee..52e88072fd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.common.lib.HexSounds; import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementHolder; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -49,11 +50,11 @@ public InteractionResultHolder use(Level level, Player player, Intera return InteractionResultHolder.success(handStack); } - Advancement unfoundLore = null; + AdvancementHolder unfoundLore = null; var shuffled = new ArrayList<>(NAMES); Collections.shuffle(shuffled); for (var advID : shuffled) { - var adv = splayer.server.getAdvancements().getAdvancement(advID); + var adv = splayer.server.getAdvancements().get(advID); if (adv == null) { continue; // uh oh } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java index 558f716dc5..c9d4a6a42c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java @@ -6,6 +6,8 @@ import at.petrak.hexcasting.common.msgs.MsgClearSpiralPatternsS2C; import at.petrak.hexcasting.common.msgs.MsgOpenSpellGuiS2C; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import net.minecraft.core.Holder; +import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.stats.Stats; @@ -18,7 +20,7 @@ public class ItemStaff extends Item { // 0 = normal. 1 = old. 2 = cherry preview - public static final ResourceLocation FUNNY_LEVEL_PREDICATE = new ResourceLocation(HexAPI.MOD_ID, "funny_level"); + public static final ResourceLocation FUNNY_LEVEL_PREDICATE = ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, "funny_level"); public ItemStaff(Properties pProperties) { super(pProperties); @@ -26,7 +28,7 @@ public ItemStaff(Properties pProperties) { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { - if (player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0){ + if (player.getAttributeValue(Holder.direct(HexAttributes.FEEBLE_MIND)) > 0){ return InteractionResultHolder.fail(player.getItemInHand(hand)); } if (player.isShiftKeyDown()) { @@ -43,10 +45,16 @@ public InteractionResultHolder use(Level world, Player player, Intera if (!world.isClientSide() && player instanceof ServerPlayer serverPlayer) { var vm = IXplatAbstractions.INSTANCE.getStaffcastVM(serverPlayer, hand); var patterns = IXplatAbstractions.INSTANCE.getPatternsSavedInUi(serverPlayer); - var descs = vm.generateDescs(); + + var userData = vm.getImage().getUserData(); + CompoundTag ravenmind = null; + if(userData.contains(HexAPI.RAVENMIND_USERDATA)) + ravenmind = userData.getCompound(HexAPI.RAVENMIND_USERDATA); + else + ravenmind = new CompoundTag(); IXplatAbstractions.INSTANCE.sendPacketToPlayer(serverPlayer, - new MsgOpenSpellGuiS2C(hand, patterns, descs.getFirst(), descs.getSecond(), + new MsgOpenSpellGuiS2C(hand, patterns, vm.getImage().getStack(), ravenmind, 0)); // TODO: Fix! } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java b/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java index 3ec73cbdc6..9ddef43531 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.common.items.armor; import at.petrak.hexcasting.api.HexAPI; +import net.minecraft.core.Holder; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ArmorItem; @@ -13,7 +14,7 @@ public class ItemRobes extends ArmorItem { public final ArmorItem.Type type; public ItemRobes(ArmorItem.Type type, Properties properties) { - super(HexAPI.instance().robesMaterial(), type, properties); + super(Holder.direct(HexAPI.instance().robesMaterial()), type, properties); this.type = type; } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/DebugUnlockerHolder.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/DebugUnlockerHolder.java index 045a6eeb76..a3bc73ded4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/DebugUnlockerHolder.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/DebugUnlockerHolder.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.common.items.magic; import at.petrak.hexcasting.api.addldata.ADMediaHolder; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.world.item.ItemStack; public record DebugUnlockerHolder(ItemStack creativeUnlocker) implements ADMediaHolder { @@ -41,14 +42,14 @@ public boolean canConstructBattery() { @Override public long withdrawMedia(long cost, boolean simulate) { - ItemCreativeUnlocker.addToLongArray(creativeUnlocker, ItemCreativeUnlocker.TAG_EXTRACTIONS, cost); + ItemCreativeUnlocker.addToLongArray(creativeUnlocker, HexDataComponents.MEDIA_EXTRACTIONS, cost); return cost < 0 ? getMedia() : cost; } @Override public long insertMedia(long amount, boolean simulate) { - ItemCreativeUnlocker.addToLongArray(creativeUnlocker, ItemCreativeUnlocker.TAG_INSERTIONS, amount); + ItemCreativeUnlocker.addToLongArray(creativeUnlocker, HexDataComponents.MEDIA_INSERTIONS, amount); return amount; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java index 44568c1f8e..b6e8d2ef02 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemAncientCypher.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.api.casting.iota.IotaType; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.ChatFormatting; @@ -14,7 +15,6 @@ import java.util.List; public class ItemAncientCypher extends ItemCypher { - public static final String TAG_PATTERNS = "patterns"; public static final String TAG_HEX_NAME = "hex_name"; public ItemAncientCypher(Properties pProperties) { @@ -24,13 +24,13 @@ public ItemAncientCypher(Properties pProperties) { @Override public void clearHex(ItemStack stack) { super.clearHex(stack); - NBTHelper.remove(stack, TAG_HEX_NAME); + stack.remove(HexDataComponents.HEX_NAME); } @Override - public Component getName(ItemStack pStack) { - var descID = this.getDescriptionId(pStack); - var hexName = NBTHelper.getString(pStack, TAG_HEX_NAME); + public Component getName(ItemStack stack) { + var descID = this.getDescriptionId(stack); + var hexName = stack.get(HexDataComponents.HEX_NAME); if (hexName != null) { return Component.translatable(descID + ".preset", Component.translatable(hexName)); } else { @@ -39,21 +39,21 @@ public Component getName(ItemStack pStack) { } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, - TooltipFlag pIsAdvanced) { + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { // display media fullness as usual - super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + + var patterns = stack.get(HexDataComponents.PATTERNS); // also show contained spell - var patternsTag = NBTHelper.getList(pStack, TAG_PATTERNS, Tag.TAG_COMPOUND); - if (patternsTag != null) { + if(patterns != null) { var storedHex = Component.translatable("hexcasting.tooltip.stored_hex"); - for (var iotaTag : patternsTag) { - var iotaTagC = NBTHelper.getAsCompound(iotaTag); - var iotaComponent = IotaType.getDisplay(iotaTagC).copy(); - storedHex.append(iotaComponent.withStyle(ChatFormatting.DARK_PURPLE)); + + for(var iota : patterns) { + storedHex.append(iota.display().plainCopy().withStyle(ChatFormatting.DARK_PURPLE)); } - pTooltipComponents.add(storedHex); + + tooltipComponents.add(storedHex); } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java index 586f8b2c02..8697b5ac42 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java @@ -4,12 +4,14 @@ import at.petrak.hexcasting.api.item.MediaHolderItem; import at.petrak.hexcasting.api.misc.DiscoveryHandlers; import at.petrak.hexcasting.api.misc.MediaConstants; -import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.common.items.ItemLoreFragment; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexSounds; import net.minecraft.ChatFormatting; -import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementNode; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.DataComponents; import net.minecraft.locale.Language; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; @@ -27,7 +29,6 @@ import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; @@ -70,7 +71,7 @@ public static boolean isDebug(ItemStack stack) { } public static boolean isDebug(ItemStack stack, String flag) { - if (!stack.is(HexItems.CREATIVE_UNLOCKER) || !stack.hasCustomHoverName()) { + if (!stack.is(HexItems.CREATIVE_UNLOCKER) || !stack.has(DataComponents.CUSTOM_NAME)) { return false; } var keywords = Arrays.asList(stack.getHoverName().getString().toLowerCase(Locale.ROOT).split(" ")); @@ -124,31 +125,17 @@ public boolean canRecharge(ItemStack stack) { return true; } - public static void addToIntArray(ItemStack stack, String tag, int n) { - int[] arr = NBTHelper.getIntArray(stack, tag); - if (arr == null) { - arr = new int[0]; - } - int[] newArr = Arrays.copyOf(arr, arr.length + 1); - newArr[newArr.length - 1] = n; - NBTHelper.putIntArray(stack, tag, newArr); - } - - public static void addToLongArray(ItemStack stack, String tag, long n) { - long[] arr = NBTHelper.getLongArray(stack, tag); - if (arr == null) { - arr = new long[0]; - } - long[] newArr = Arrays.copyOf(arr, arr.length + 1); - newArr[newArr.length - 1] = n; - NBTHelper.putLongArray(stack, tag, newArr); + public static void addToLongArray(ItemStack stack, DataComponentType> type, long n) { + var list = stack.getOrDefault(type, new ArrayList()); + list.add(n); + stack.set(type, list); } @Override public long withdrawMedia(ItemStack stack, long cost, boolean simulate) { // In case it's withdrawn through other means if (!simulate && isDebug(stack, DISPLAY_MEDIA)) { - addToLongArray(stack, TAG_EXTRACTIONS, cost); + addToLongArray(stack, HexDataComponents.MEDIA_EXTRACTIONS, cost); } return cost < 0 ? getMedia(stack) : cost; @@ -158,7 +145,7 @@ public long withdrawMedia(ItemStack stack, long cost, boolean simulate) { public long insertMedia(ItemStack stack, long amount, boolean simulate) { // In case it's inserted through other means if (!simulate && isDebug(stack, DISPLAY_MEDIA)) { - addToLongArray(stack, TAG_INSERTIONS, amount); + addToLongArray(stack, HexDataComponents.MEDIA_INSERTIONS, amount); } return amount < 0 ? getMaxMedia(stack) : amount; @@ -172,16 +159,16 @@ public boolean isFoil(ItemStack stack) { @Override public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) { if (isDebug(stack, DISPLAY_MEDIA) && !level.isClientSide) { - debugDisplay(stack, TAG_EXTRACTIONS, "withdrawn", "all_media", entity); - debugDisplay(stack, TAG_INSERTIONS, "inserted", "infinite_media", entity); + debugDisplay(stack, HexDataComponents.MEDIA_EXTRACTIONS, "withdrawn", "all_media", entity); + debugDisplay(stack, HexDataComponents.MEDIA_INSERTIONS, "inserted", "infinite_media", entity); } } - private void debugDisplay(ItemStack stack, String tag, String langKey, String allKey, Entity entity) { - long[] arr = NBTHelper.getLongArray(stack, tag); - if (arr != null) { - NBTHelper.remove(stack, tag); - for (long i : arr) { + private void debugDisplay(ItemStack stack, DataComponentType> type, String langKey, String allKey, Entity entity) { + var list = stack.get(type); + if (list != null) { + stack.remove(type); + for (long i : list) { if (i < 0) { entity.sendSystemMessage(Component.translatable("hexcasting.debug.media_" + langKey, stack.getDisplayName(), @@ -217,19 +204,21 @@ public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity cons var names = new ArrayList<>(ItemLoreFragment.NAMES); names.add(0, modLoc("root")); for (var name : names) { - var rootAdv = slevel.getServer().getAdvancements().getAdvancement(name); + var rootAdv = slevel.getServer().getAdvancements().tree().get(name); if (rootAdv != null) { - var children = new ArrayList(); + var children = new ArrayList(); children.add(rootAdv); - addChildren(rootAdv, children); + collectChildrenRecursively(rootAdv, children); var adman = player.getAdvancements(); + + for (var kid : children) { - var progress = adman.getOrStartProgress(kid); + var progress = adman.getOrStartProgress(kid.holder()); if (!progress.isDone()) { for (String crit : progress.getRemainingCriteria()) { - adman.award(kid, crit); + adman.award(kid.holder(), crit); } } } @@ -252,9 +241,9 @@ private static MutableComponent rainbow(MutableComponent component, int shift, L } @Override - public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag isAdvanced) { - Component emphasized = infiniteMedia(level); + Component emphasized = infiniteMedia(context.level()); MutableComponent modName = Component.translatable("item.hexcasting.creative_unlocker.mod_name").withStyle( (s) -> s.withColor(ItemMediaHolder.HEX_COLOR)); @@ -264,10 +253,10 @@ public void appendHoverText(ItemStack stack, @Nullable Level level, List out) { - for (Advancement kiddo : root.getChildren()) { + private static void collectChildrenRecursively(AdvancementNode root, List out) { + for (AdvancementNode kiddo : root.children()) { out.add(kiddo); - addChildren(kiddo, out); + collectChildrenRecursively(kiddo, out); } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java index 5bc736a2fa..8603d61e98 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java @@ -5,6 +5,7 @@ import at.petrak.hexcasting.api.utils.MathUtils; import at.petrak.hexcasting.api.utils.MediaHelper; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextColor; import net.minecraft.util.Mth; @@ -39,8 +40,8 @@ public ItemMediaHolder(Properties pProperties) { public static ItemStack withMedia(ItemStack stack, long media, long maxMedia) { Item item = stack.getItem(); if (item instanceof ItemMediaHolder) { - NBTHelper.putLong(stack, TAG_MEDIA, media); - NBTHelper.putLong(stack, TAG_MAX_MEDIA, maxMedia); + stack.set(HexDataComponents.MEDIA, media); + stack.set(HexDataComponents.MEDIA_MAX, media); } return stack; @@ -48,23 +49,19 @@ public static ItemStack withMedia(ItemStack stack, long media, long maxMedia) { @Override public long getMedia(ItemStack stack) { - if (NBTHelper.hasInt(stack, TAG_MEDIA)) - return NBTHelper.getInt(stack, TAG_MEDIA); - - return NBTHelper.getLong(stack, TAG_MEDIA); + var media = stack.get(HexDataComponents.MEDIA); + return media != null ? media : 0L; } @Override public long getMaxMedia(ItemStack stack) { - if (NBTHelper.hasInt(stack, TAG_MAX_MEDIA)) - return NBTHelper.getInt(stack, TAG_MAX_MEDIA); - - return NBTHelper.getLong(stack, TAG_MAX_MEDIA); + var maxMedia = stack.get(HexDataComponents.MEDIA_MAX); + return maxMedia != null ? maxMedia : 0L; } @Override public void setMedia(ItemStack stack, long media) { - NBTHelper.putLong(stack, TAG_MEDIA, MathUtils.clamp(media, 0, getMaxMedia(stack))); + stack.set(HexDataComponents.MEDIA, MathUtils.clamp(media, 0, getMaxMedia(stack))); } @Override @@ -86,18 +83,18 @@ public int getBarWidth(ItemStack pStack) { return MediaHelper.mediaBarWidth(media, maxMedia); } - @Override + // TODO port: where did it came from? + /*@Override public boolean canBeDepleted() { return false; - } + }*/ @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, - TooltipFlag pIsAdvanced) { - var maxMedia = getMaxMedia(pStack); + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + var maxMedia = getMaxMedia(stack); if (maxMedia > 0) { - var media = getMedia(pStack); - var fullness = getMediaFullness(pStack); + var media = getMedia(stack); + var fullness = getMediaFullness(stack); var color = TextColor.fromRgb(MediaHelper.mediaBarColor(media, maxMedia)); @@ -109,11 +106,11 @@ public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List style.withColor(HEX_COLOR)); percentFull.withStyle(style -> style.withColor(color)); - pTooltipComponents.add( + tooltipComponents.add( Component.translatable("hexcasting.tooltip.media_amount.advanced", mediamount, maxCapacity, percentFull)); } - super.appendHoverText(pStack, pLevel, pTooltipComponents, pIsAdvanced); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java index 1c8886f999..5f976f86d8 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java @@ -9,6 +9,7 @@ import at.petrak.hexcasting.api.item.HexHolderItem; import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.msgs.MsgNewSpiralPatternsS2C; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.nbt.CompoundTag; @@ -22,6 +23,7 @@ import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.UseAnim; @@ -62,53 +64,34 @@ public boolean canProvideMedia(ItemStack stack) { @Override public boolean hasHex(ItemStack stack) { - return NBTHelper.hasList(stack, TAG_PROGRAM, Tag.TAG_COMPOUND); + return stack.has(HexDataComponents.PATTERNS); } @Override public @Nullable List getHex(ItemStack stack, ServerLevel level) { - var patsTag = NBTHelper.getList(stack, TAG_PROGRAM, Tag.TAG_COMPOUND); - - if (patsTag == null) { - return null; - } - - var out = new ArrayList(); - for (var patTag : patsTag) { - CompoundTag tag = NBTHelper.getAsCompound(patTag); - out.add(IotaType.deserialize(tag, level)); - } - return out; + return stack.get(HexDataComponents.PATTERNS); } @Override public void writeHex(ItemStack stack, List program, @Nullable FrozenPigment pigment, long media) { - ListTag patsTag = new ListTag(); - for (Iota pat : program) { - patsTag.add(IotaType.serialize(pat)); - } - - NBTHelper.putList(stack, TAG_PROGRAM, patsTag); + stack.set(HexDataComponents.PATTERNS, program); if (pigment != null) - NBTHelper.putCompound(stack, TAG_PIGMENT, pigment.serializeToNBT()); + stack.set(HexDataComponents.PIGMENT, pigment); withMedia(stack, media, media); } @Override public void clearHex(ItemStack stack) { - NBTHelper.remove(stack, TAG_PROGRAM); - NBTHelper.remove(stack, TAG_PIGMENT); - NBTHelper.remove(stack, TAG_MEDIA); - NBTHelper.remove(stack, TAG_MAX_MEDIA); + stack.remove(HexDataComponents.PATTERNS); + stack.remove(HexDataComponents.PIGMENT); + stack.remove(HexDataComponents.MEDIA); + stack.remove(HexDataComponents.MEDIA_MAX); } @Override public @Nullable FrozenPigment getPigment(ItemStack stack) { - var ctag = NBTHelper.getCompound(stack, TAG_PIGMENT); - if (ctag == null) - return null; - return FrozenPigment.fromNBT(ctag); + return stack.get(HexDataComponents.PIGMENT); } @Override @@ -167,7 +150,7 @@ public InteractionResultHolder use(Level world, Player player, Intera if (broken) { stack.shrink(1); - player.broadcastBreakEvent(usedHand); + sPlayer.onEquippedItemBroken(stack.getItem(), usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND); return InteractionResultHolder.consume(stack); } else { return InteractionResultHolder.success(stack); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java b/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java index c895177f47..6ce75671e9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.item.PigmentItem; import at.petrak.hexcasting.api.pigment.ColorProvider; import at.petrak.paucal.api.PaucalAPI; +import at.petrak.paucal.xplat.common.ContributorsManifest; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import net.minecraft.world.item.Item; @@ -28,7 +29,7 @@ protected static class MyColorProvider extends ColorProvider { private final int[] colors; MyColorProvider(UUID owner) { - var contributor = PaucalAPI.instance().getContributor(owner); + var contributor = ContributorsManifest.getContributor(owner); if (contributor != null) { var colorList = contributor.otherVals().getAsJsonArray("hexcasting:colorizer"); if (colorList != null) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java index ad8527581f..0bfb1bd2f1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java @@ -5,6 +5,7 @@ import at.petrak.hexcasting.api.casting.iota.IotaType; import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexSounds; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; @@ -26,13 +27,6 @@ public ItemAbacus(Properties pProperties) { super(pProperties); } - @Override - public @Nullable - CompoundTag readIotaTag(ItemStack stack) { - var datum = new DoubleIota(NBTHelper.getDouble(stack, TAG_VALUE)); - return IotaType.serialize(datum); - } - @Override public boolean writeable(ItemStack stack) { return false; @@ -52,13 +46,13 @@ public void writeDatum(ItemStack stack, Iota datum) { public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { var stack = player.getItemInHand(hand); if (player.isShiftKeyDown()) { - double oldNum = NBTHelper.getDouble(stack, TAG_VALUE); - stack.removeTagKey(TAG_VALUE); + Double oldNum = stack.get(HexDataComponents.ABACUS_VALUE); + stack.remove(HexDataComponents.ABACUS_VALUE); player.playSound(HexSounds.ABACUS_SHAKE, 1f, 1f); var key = "hexcasting.tooltip.abacus.reset"; - if (oldNum == 69) { + if (oldNum != null && oldNum == 69) { key += ".nice"; } player.displayClientMessage(Component.translatable(key), true); @@ -70,8 +64,7 @@ public InteractionResultHolder use(Level world, Player player, Intera } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, - TooltipFlag pIsAdvanced) { - IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + IotaHolderItem.appendHoverText(this, stack, tooltipComponents, tooltipFlag); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java index 8d08c9923f..e713477d43 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java @@ -5,9 +5,11 @@ import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.item.VariantItem; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Unit; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; @@ -26,21 +28,13 @@ public class ItemFocus extends Item implements IotaHolderItem, VariantItem { public static final ResourceLocation VARIANT_PRED = modLoc("variant"); public static final int NUM_VARIANTS = 8; - public static final String TAG_DATA = "data"; - public static final String TAG_SEALED = "sealed"; - public ItemFocus(Properties pProperties) { super(pProperties); } - @Override - public @Nullable CompoundTag readIotaTag(ItemStack stack) { - return NBTHelper.getCompound(stack, TAG_DATA); - } - @Override public String getDescriptionId(ItemStack stack) { - return super.getDescriptionId(stack) + (NBTHelper.getBoolean(stack, TAG_SEALED) ? ".sealed" : ""); + return super.getDescriptionId(stack) + (stack.has(HexDataComponents.SEALED) ? ".sealed" : ""); } @Override @@ -56,25 +50,24 @@ public boolean canWrite(ItemStack stack, Iota datum) { @Override public void writeDatum(ItemStack stack, Iota datum) { if (datum == null) { - stack.removeTagKey(TAG_DATA); - stack.removeTagKey(TAG_SEALED); + stack.remove(HexDataComponents.IOTA); + stack.remove(HexDataComponents.SEALED); } else if (!isSealed(stack)) { - NBTHelper.put(stack, TAG_DATA, IotaType.serialize(datum)); + stack.set(HexDataComponents.IOTA, datum); } } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, - TooltipFlag pIsAdvanced) { - IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + IotaHolderItem.appendHoverText(this, stack, tooltipComponents, tooltipFlag); } public static boolean isSealed(ItemStack stack) { - return NBTHelper.getBoolean(stack, TAG_SEALED); + return stack.has(HexDataComponents.SEALED); } public static void seal(ItemStack stack) { - NBTHelper.putBoolean(stack, TAG_SEALED, true); + stack.set(HexDataComponents.SEALED, Unit.INSTANCE); } @Override @@ -85,6 +78,6 @@ public int numVariants() { @Override public void setVariant(ItemStack stack, int variant) { if (!isSealed(stack)) - NBTHelper.putInt(stack, TAG_VARIANT, clampVariant(variant)); + VariantItem.super.setVariant(stack, variant); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java index 1bea5dfec5..b9d5ca6003 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java @@ -1,5 +1,6 @@ package at.petrak.hexcasting.common.items.storage; +import at.petrak.hexcasting.api.casting.ActionRegistryEntry; import at.petrak.hexcasting.api.casting.iota.Iota; import at.petrak.hexcasting.api.casting.iota.PatternIota; import at.petrak.hexcasting.api.casting.math.HexPattern; @@ -7,6 +8,7 @@ import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.client.gui.PatternTooltipComponent; import at.petrak.hexcasting.common.entities.EntityWallScroll; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.common.misc.PatternTooltip; import at.petrak.hexcasting.common.casting.PatternRegistryManifest; @@ -15,6 +17,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -47,9 +50,6 @@ * (none): "Empty Scroll" */ public class ItemScroll extends Item implements IotaHolderItem { - public static final String TAG_OP_ID = "op_id"; - public static final String TAG_PATTERN = "pattern"; - public static final String TAG_NEEDS_PURCHASE = "needs_purchase"; public static final ResourceLocation ANCIENT_PREDICATE = modLoc("ancient"); public final int blockSize; @@ -60,28 +60,15 @@ public ItemScroll(Properties pProperties, int blockSize) { } // this produces a scroll that will load the correct pattern for your world once it ticks - public static ItemStack withPerWorldPattern(ItemStack stack, String op_id) { + public static ItemStack withPerWorldPattern(ItemStack stack, ResourceKey action) { Item item = stack.getItem(); - if (item instanceof ItemScroll) - NBTHelper.putString(stack, TAG_OP_ID, op_id); + if (item instanceof ItemScroll) { + stack.set(HexDataComponents.ACTION, action); + } return stack; } - @Override - public @Nullable - CompoundTag readIotaTag(ItemStack stack) { - CompoundTag pattern = NBTHelper.getCompound(stack, TAG_PATTERN); - if (pattern == null) { - return null; - } - // We store only the data part of the iota; pretend the rest of it's there - var out = new CompoundTag(); - out.putString(HexIotaTypes.KEY_TYPE, "hexcasting:pattern"); - out.put(HexIotaTypes.KEY_DATA, pattern); - return out; - } - @Override public boolean writeable(ItemStack stack) { return true; @@ -96,9 +83,9 @@ public boolean canWrite(ItemStack stack, Iota datum) { public void writeDatum(ItemStack stack, Iota datum) { if (this.canWrite(stack, datum)) { if (datum instanceof PatternIota pat) { - NBTHelper.putCompound(stack, TAG_PATTERN, pat.getPattern().serializeToNBT()); + stack.set(HexDataComponents.PATTERN, pat.getPattern()); } else if (datum == null) { - NBTHelper.remove(stack, TAG_PATTERN); + stack.remove(HexDataComponents.PATTERN); } } } @@ -119,9 +106,9 @@ public InteractionResult useOn(UseOnContext ctx) { var scrollEntity = new EntityWallScroll(level, posInFront, direction, scrollStack, false, this.blockSize); // i guess - var stackTag = itemstack.getTag(); - if (stackTag != null) { - EntityType.updateCustomEntityTag(level, player, scrollEntity, stackTag); + var customData = itemstack.get(DataComponents.CUSTOM_DATA); + if (customData != null) { + EntityType.updateCustomEntityTag(level, player, scrollEntity, customData); } if (scrollEntity.survives()) { @@ -146,15 +133,14 @@ protected boolean mayPlace(Player pPlayer, Direction pDirection, ItemStack pHang @Override public Component getName(ItemStack pStack) { var descID = this.getDescriptionId(pStack); - var ancientId = NBTHelper.getString(pStack, TAG_OP_ID); - if (ancientId != null) { + var ancientAction = pStack.get(HexDataComponents.ACTION); + if (ancientAction != null) { return Component.translatable(descID + ".of", - Component.translatable("hexcasting.action." + ResourceLocation.tryParse(ancientId))); - } else if (NBTHelper.hasCompound(pStack, TAG_PATTERN)) { - var compound = NBTHelper.getCompound(pStack, TAG_PATTERN); + Component.translatable("hexcasting.action." + ancientAction.location())); + } else if (pStack.has(HexDataComponents.PATTERN)) { + var pattern = pStack.get(HexDataComponents.PATTERN); var patternLabel = Component.literal(""); - if (compound != null) { - var pattern = HexPattern.fromNBT(compound); + if (pattern != null) { patternLabel = Component.literal(": ").append(new InlinePatternData(pattern).asText(false)); } return Component.translatable(descID).append(patternLabel); @@ -167,43 +153,34 @@ public Component getName(ItemStack pStack) { public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pSlotId, boolean pIsSelected) { // the needs_purchase tag is used so you can't see the pattern on scrolls sold by a wandering trader // once you put the scroll into your inventory, this removes the tag to reveal the pattern - if (NBTHelper.getBoolean(pStack, TAG_NEEDS_PURCHASE)) { - NBTHelper.remove(pStack, TAG_NEEDS_PURCHASE); - } + if(pStack.has(HexDataComponents.NEEDS_PURCHASE)) + pStack.remove(HexDataComponents.NEEDS_PURCHASE); // if op_id is set but there's no stored pattern, attempt to load the pattern on inv tick - if (NBTHelper.hasString(pStack, TAG_OP_ID) && !NBTHelper.hasCompound(pStack, TAG_PATTERN) && pEntity.getServer() != null) { - var opID = ResourceLocation.tryParse(NBTHelper.getString(pStack, TAG_OP_ID)); - if (opID == null) { - // if the provided op_id is invalid, remove it so we don't keep trying every tick - NBTHelper.remove(pStack, TAG_OP_ID); - return; - } - var patternKey = ResourceKey.create(IXplatAbstractions.INSTANCE.getActionRegistry().key(), opID); - var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, pEntity.getServer().overworld()); - NBTHelper.put(pStack, TAG_PATTERN, pat.serializeToNBT()); + if (pStack.has(HexDataComponents.ACTION) && !pStack.has(HexDataComponents.PATTERN) && pEntity.getServer() != null) { + var action = pStack.get(HexDataComponents.ACTION); + var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(action, pEntity.getServer().overworld()); + pStack.set(HexDataComponents.PATTERN, pat); } } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, - TooltipFlag pIsAdvanced) { - if (NBTHelper.getBoolean(pStack, TAG_NEEDS_PURCHASE)) { + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + if (stack.has(HexDataComponents.NEEDS_PURCHASE)) { var needsPurchase = Component.translatable("hexcasting.tooltip.scroll.needs_purchase"); - pTooltipComponents.add(needsPurchase.withStyle(ChatFormatting.GRAY)); - } else if (NBTHelper.hasString(pStack, TAG_OP_ID) && !NBTHelper.hasCompound(pStack, TAG_PATTERN)) { + tooltipComponents.add(needsPurchase.withStyle(ChatFormatting.GRAY)); + } else if (stack.has(HexDataComponents.ACTION) && !stack.has(HexDataComponents.PATTERN)) { var notLoaded = Component.translatable("hexcasting.tooltip.scroll.pattern_not_loaded"); - pTooltipComponents.add(notLoaded.withStyle(ChatFormatting.GRAY)); + tooltipComponents.add(notLoaded.withStyle(ChatFormatting.GRAY)); } } @Override public Optional getTooltipImage(ItemStack stack) { - var compound = NBTHelper.getCompound(stack, TAG_PATTERN); - if (compound != null && !NBTHelper.getBoolean(stack, TAG_NEEDS_PURCHASE)) { - var pattern = HexPattern.fromNBT(compound); + var pattern = stack.get(HexDataComponents.PATTERN); + if (pattern != null && !stack.has(HexDataComponents.NEEDS_PURCHASE)) { return Optional.of(new PatternTooltip( pattern, - NBTHelper.hasString(stack, TAG_OP_ID) + stack.has(HexDataComponents.ACTION) ? PatternTooltipComponent.ANCIENT_BG : PatternTooltipComponent.PRISTINE_BG)); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java index 98227d1eab..e01858f660 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java @@ -12,7 +12,9 @@ import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.common.misc.PatternTooltip; import at.petrak.hexcasting.interop.inline.InlinePatternData; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -21,6 +23,7 @@ import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import org.jetbrains.annotations.Nullable; @@ -46,14 +49,11 @@ public Component getName(ItemStack pStack) { } public static Optional getPattern(ItemStack stack){ - var bet = NBTHelper.getCompound(stack, "BlockEntityTag"); + var bet = stack.get(DataComponents.BLOCK_ENTITY_DATA); - if (bet != null && bet.contains(BlockEntitySlate.TAG_PATTERN, Tag.TAG_COMPOUND)) { - var patTag = bet.getCompound(BlockEntitySlate.TAG_PATTERN); - if (!patTag.isEmpty()) { - var pattern = HexPattern.fromNBT(patTag); - return Optional.of(pattern); - } + if (bet != null && bet.contains(BlockEntitySlate.TAG_PATTERN)) { + var pattern = bet.read(HexPattern.CODEC.fieldOf(BlockEntitySlate.TAG_PATTERN)).result().orElse(null); + return Optional.ofNullable(pattern); } return Optional.empty(); } @@ -65,7 +65,7 @@ public static boolean hasPattern(ItemStack stack) { @SoftImplement("IForgeItem") public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) { if (!hasPattern(stack)) { - NBTHelper.remove(stack, "BlockEntityTag"); + stack.remove(DataComponents.BLOCK_ENTITY_DATA); } return false; } @@ -73,27 +73,22 @@ public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) { @Override public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pSlotId, boolean pIsSelected) { if (!hasPattern(pStack)) { - NBTHelper.remove(pStack, "BlockEntityTag"); + pStack.remove(DataComponents.BLOCK_ENTITY_DATA); } } @Override - public @Nullable - CompoundTag readIotaTag(ItemStack stack) { - var bet = NBTHelper.getCompound(stack, "BlockEntityTag"); + public @Nullable Iota readIota(ItemStack stack) { + var bet = stack.get(DataComponents.BLOCK_ENTITY_DATA);; - if (bet == null || !bet.contains(BlockEntitySlate.TAG_PATTERN, Tag.TAG_COMPOUND)) { + if (bet == null || !bet.contains(BlockEntitySlate.TAG_PATTERN)) { return null; } - var patTag = bet.getCompound(BlockEntitySlate.TAG_PATTERN); - if (patTag.isEmpty()) { - return null; - } - var out = new CompoundTag(); - out.putString(HexIotaTypes.KEY_TYPE, "hexcasting:pattern"); - out.put(HexIotaTypes.KEY_DATA, patTag); - return out; + return bet.read(HexPattern.CODEC.fieldOf(BlockEntitySlate.TAG_PATTERN)) + .result() + .map(PatternIota::new) + .orElse(null); } @Override @@ -110,14 +105,23 @@ public boolean canWrite(ItemStack stack, Iota datum) { public void writeDatum(ItemStack stack, Iota datum) { if (this.canWrite(stack, datum)) { if (datum == null) { - var beTag = NBTHelper.getOrCreateCompound(stack, "BlockEntityTag"); - beTag.remove(BlockEntitySlate.TAG_PATTERN); - if (beTag.isEmpty()) { - NBTHelper.remove(stack, "BlockEntityTag"); - } + var beData = stack.get(DataComponents.BLOCK_ENTITY_DATA); + beData.update(tag -> { + tag.remove(BlockEntitySlate.TAG_PATTERN); + }); + + if(beData.isEmpty()) + stack.remove(DataComponents.BLOCK_ENTITY_DATA); } else if (datum instanceof PatternIota pat) { - var beTag = NBTHelper.getOrCreateCompound(stack, "BlockEntityTag"); - beTag.put(BlockEntitySlate.TAG_PATTERN, pat.getPattern().serializeToNBT()); + stack.update(DataComponents.BLOCK_ENTITY_DATA, CustomData.of(new CompoundTag()), data -> { + data.update(tag -> + tag.put(BlockEntitySlate.TAG_PATTERN, HexPattern.CODEC + .encodeStart(NbtOps.INSTANCE, pat.getPattern()) + .getOrThrow() + ) + ); + return data; + }); } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java index b7521f7619..9949f9b184 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java @@ -5,7 +5,9 @@ import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.item.VariantItem; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.ChatFormatting; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; @@ -17,28 +19,14 @@ import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.stream.Stream; import static at.petrak.hexcasting.common.items.storage.ItemFocus.NUM_VARIANTS; public class ItemSpellbook extends Item implements IotaHolderItem, VariantItem { - public static String TAG_SELECTED_PAGE = "page_idx"; - // this is a CompoundTag of string numerical keys to SpellData - // it is 1-indexed, so that 0/0 can be the special case of "it is empty" - public static String TAG_PAGES = "pages"; - - // this stores the names of pages, to be restored when you scroll - // it is 1-indexed, and the 0-case for TAG_PAGES will be treated as 1 - public static String TAG_PAGE_NAMES = "page_names"; - - // this stores the sealed status of each page, to be restored when you scroll - // it is 1-indexed, and the 0-case for TAG_PAGES will be treated as 1 - public static String TAG_SEALED = "sealed_pages"; - - // this stores which variant of the spellbook should be rendered - public static final String TAG_VARIANT = "variant"; - public static final int MAX_PAGES = 64; public ItemSpellbook(Properties properties) { @@ -46,12 +34,11 @@ public ItemSpellbook(Properties properties) { } @Override - public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, - TooltipFlag isAdvanced) { + public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag isAdvanced) { boolean sealed = isSealed(stack); boolean empty = false; - if (NBTHelper.hasNumber(stack, TAG_SELECTED_PAGE)) { - var pageIdx = NBTHelper.getInt(stack, TAG_SELECTED_PAGE); + if (stack.has(HexDataComponents.SELECTED_PAGE)) { + var pageIdx = stack.get(HexDataComponents.SELECTED_PAGE); int highest = highestPage(stack); if (highest != 0) { if (sealed) { @@ -74,7 +61,7 @@ public void appendHoverText(ItemStack stack, @Nullable Level level, List()); + if (stack.has(DataComponents.CUSTOM_NAME)) { + names.put(nameKey, stack.getHoverName()); + stack.set(HexDataComponents.PAGE_NAMES, names); } else { names.remove(nameKey); + stack.set(HexDataComponents.PAGE_NAMES, names); } } public static boolean arePagesEmpty(ItemStack stack) { - CompoundTag tag = NBTHelper.getCompound(stack, TAG_PAGES); - return tag == null || tag.isEmpty(); + var pages = stack.get(HexDataComponents.PAGES); + return pages == null || pages.isEmpty(); } @Override - public @Nullable - CompoundTag readIotaTag(ItemStack stack) { + public @Nullable Iota readIota(ItemStack stack) { int idx = getPage(stack, 1); var key = String.valueOf(idx); - var tag = NBTHelper.getCompound(stack, TAG_PAGES); - if (tag != null && tag.contains(key, Tag.TAG_COMPOUND)) { - return tag.getCompound(key); + var pages = stack.get(HexDataComponents.PAGES); + if (pages != null && pages.containsKey(key)) { + return pages.get(key); } else { return null; } @@ -146,30 +134,42 @@ public void writeDatum(ItemStack stack, Iota datum) { int idx = getPage(stack, 1); var key = String.valueOf(idx); - CompoundTag pages = NBTHelper.getCompound(stack, TAG_PAGES); + + var pages = stack.get(HexDataComponents.PAGES); + if (pages != null) { if (datum == null) { pages.remove(key); - NBTHelper.remove(NBTHelper.getCompound(stack, TAG_SEALED), key); + stack.set(HexDataComponents.PAGES, pages); + var seals = stack.get(HexDataComponents.PAGE_SEALS); + if(seals != null) + seals.remove(key); } else { - pages.put(key, IotaType.serialize(datum)); + pages.put(key, datum); + stack.set(HexDataComponents.PAGES, pages); } if (pages.isEmpty()) { - NBTHelper.remove(stack, TAG_PAGES); + stack.remove(HexDataComponents.PAGES); } } else if (datum != null) { - NBTHelper.getOrCreateCompound(stack, TAG_PAGES).put(key, IotaType.serialize(datum)); + var map = new HashMap(); + map.put(key, datum); + stack.set(HexDataComponents.PAGES, map); } else { - NBTHelper.remove(NBTHelper.getCompound(stack, TAG_SEALED), key); + var seals = stack.get(HexDataComponents.PAGE_SEALS); + if(seals != null) + seals.remove(key); } } public static int getPage(ItemStack stack, int ifEmpty) { if (arePagesEmpty(stack)) { return ifEmpty; - } else if (NBTHelper.hasNumber(stack, TAG_SELECTED_PAGE)) { - int index = NBTHelper.getInt(stack, TAG_SELECTED_PAGE); + } else if (stack.has(HexDataComponents.SELECTED_PAGE)) { + var index = stack.get(HexDataComponents.SELECTED_PAGE); + if(index == null) + return 1; if (index == 0) { index = 1; } @@ -183,18 +183,18 @@ public static void setSealed(ItemStack stack, boolean sealed) { int index = getPage(stack, 1); String nameKey = String.valueOf(index); - CompoundTag names = NBTHelper.getOrCreateCompound(stack, TAG_SEALED); + var names = stack.getOrDefault(HexDataComponents.PAGE_SEALS, new HashMap()); if (!sealed) { names.remove(nameKey); } else { - names.putBoolean(nameKey, true); + names.put(nameKey, true); } if (names.isEmpty()) { - NBTHelper.remove(stack, TAG_SEALED); + stack.remove(HexDataComponents.PAGE_SEALS); } else { - NBTHelper.putCompound(stack, TAG_SEALED, names); + stack.set(HexDataComponents.PAGE_SEALS, names); } } @@ -203,16 +203,19 @@ public static boolean isSealed(ItemStack stack) { int index = getPage(stack, 1); String nameKey = String.valueOf(index); - CompoundTag names = NBTHelper.getCompound(stack, TAG_SEALED); - return NBTHelper.getBoolean(names, nameKey); + var seals = stack.get(HexDataComponents.PAGE_SEALS); + if(seals == null) + return false; + var v = seals.get(nameKey); + return v != null && v; } public static int highestPage(ItemStack stack) { - CompoundTag tag = NBTHelper.getCompound(stack, TAG_PAGES); - if (tag == null) { + var pages = stack.get(HexDataComponents.PAGES); + if (pages == null) { return 0; } - return tag.getAllKeys().stream().flatMap(s -> { + return pages.keySet().stream().flatMap(s -> { try { return Stream.of(Integer.parseInt(s)); } catch (NumberFormatException e) { @@ -228,16 +231,16 @@ public static int rotatePageIdx(ItemStack stack, boolean increase) { idx = Math.max(1, idx); } idx = Mth.clamp(idx, 0, MAX_PAGES); - NBTHelper.putInt(stack, TAG_SELECTED_PAGE, idx); + stack.set(HexDataComponents.SELECTED_PAGE, idx); - CompoundTag names = NBTHelper.getCompound(stack, TAG_PAGE_NAMES); + var names = stack.getOrDefault(HexDataComponents.PAGE_NAMES, Collections.emptyMap()); int shiftedIdx = Math.max(1, idx); String nameKey = String.valueOf(shiftedIdx); - String name = NBTHelper.getString(names, nameKey); + Component name = names.get(nameKey); if (name != null) { - stack.setHoverName(Component.Serializer.fromJson(name)); + stack.set(DataComponents.CUSTOM_NAME, name); } else { - stack.resetHoverName(); + stack.remove(DataComponents.CUSTOM_NAME); } return idx; @@ -251,6 +254,6 @@ public int numVariants() { @Override public void setVariant(ItemStack stack, int variant) { if (!isSealed(stack)) - NBTHelper.putInt(stack, TAG_VARIANT, clampVariant(variant)); + stack.set(HexDataComponents.VARIANT, clampVariant(variant)); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java index 9e867cc250..2cc1ec3033 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.casting.iota.IotaType; import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -21,20 +22,13 @@ public class ItemThoughtKnot extends Item implements IotaHolderItem { public static final ResourceLocation WRITTEN_PRED = modLoc("written"); - public static final String TAG_DATA = "data"; - public ItemThoughtKnot(Properties properties) { super(properties); } - @Override - public @Nullable CompoundTag readIotaTag(ItemStack stack) { - return NBTHelper.getCompound(stack, TAG_DATA); - } - @Override public boolean writeable(ItemStack stack) { - return !NBTHelper.contains(stack, TAG_DATA); + return !stack.has(HexDataComponents.IOTA); } @Override @@ -45,12 +39,12 @@ public boolean canWrite(ItemStack stack, @Nullable Iota iota) { @Override public void writeDatum(ItemStack stack, @Nullable Iota iota) { if (iota != null) { - NBTHelper.putCompound(stack, TAG_DATA, IotaType.serialize(iota)); + stack.set(HexDataComponents.IOTA, iota); } } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, + public void appendHoverText(ItemStack pStack, TooltipContext context, List pTooltipComponents, TooltipFlag pIsAdvanced) { IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java index 3f70ddbd40..097c305ad9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java @@ -15,8 +15,6 @@ /** * On forge: these are setup in ForgeHexInit * On fabric: it's a mixin - *

- * TODO how to do this in 1.21 */ public class HexAttributes { public static void register(BiConsumer r) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java index 6e22920668..e29584155a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java @@ -80,7 +80,7 @@ public static BlockEntityType typeForQuenchedAllay(Blo private static BlockEntityType register(String id, BiFunction func, Block... blocks) { var ret = IXplatAbstractions.INSTANCE.createBlockEntityType(func, blocks); - var old = BLOCK_ENTITIES.put(new ResourceLocation(HexAPI.MOD_ID, id), ret); + var old = BLOCK_ENTITIES.put(ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, id), ret); if (old != null) { throw new IllegalArgumentException("Duplicate id " + id); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java index 97e58a75e4..3f5e4e3f8e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java @@ -19,6 +19,7 @@ import at.petrak.hexcasting.common.blocks.decoration.*; import com.mojang.datafixers.util.Pair; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.ColorRGBA; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.CreativeModeTab; @@ -65,7 +66,7 @@ public static void registerBlockCreativeTab(Consumer r, CreativeModeTab t private static BlockBehaviour.Properties slateish() { return BlockBehaviour.Properties - .copy(Blocks.DEEPSLATE_TILES) + .ofFullCopy(Blocks.DEEPSLATE_TILES) .strength(4f, 4f); } @@ -85,7 +86,7 @@ private static BlockBehaviour.Properties akashicWoodyHard() { private static BlockBehaviour.Properties woodyHard(MapColor color) { return BlockBehaviour.Properties - .copy(Blocks.OAK_LOG) + .ofFullCopy(Blocks.OAK_LOG) .mapColor(color) .sound(SoundType.WOOD) .strength(3f, 4f); @@ -97,7 +98,7 @@ private static BlockBehaviour.Properties edifiedWoody() { private static BlockBehaviour.Properties woody(MapColor color) { return BlockBehaviour.Properties - .copy(Blocks.OAK_LOG) + .ofFullCopy(Blocks.OAK_LOG) .mapColor(color) .sound(SoundType.WOOD) .strength(2f); @@ -105,7 +106,7 @@ private static BlockBehaviour.Properties woody(MapColor color) { private static BlockBehaviour.Properties leaves(MapColor color) { return BlockBehaviour.Properties - .copy(Blocks.OAK_LEAVES) + .ofFullCopy(Blocks.OAK_LEAVES) .strength(0.2F) .randomTicks() .sound(SoundType.GRASS) @@ -118,7 +119,7 @@ private static BlockBehaviour.Properties leaves(MapColor color) { // we have to make it emit light because otherwise it occludes itself and is always dark private static BlockBehaviour.Properties quenched() { return BlockBehaviour.Properties - .copy(Blocks.AMETHYST_BLOCK) + .ofFullCopy(Blocks.AMETHYST_BLOCK) .lightLevel($ -> 4) .noOcclusion(); } @@ -189,7 +190,7 @@ private static BlockBehaviour.Properties quenched() { public static final BlockAkashicBookshelf AKASHIC_BOOKSHELF = blockItem("akashic_bookshelf", new BlockAkashicBookshelf(akashicWoodyHard() .lightLevel(bs -> (bs.getValue(BlockAkashicBookshelf.HAS_BOOKS)) ? 4 : 0))); - public static final BlockAkashicLigature AKASHIC_LIGATURE = blockItem("akashic_connector", + public static final BlockAkashicLigature AKASHIC_LIGATURE = blockItem("akashic_ligature", new BlockAkashicLigature(akashicWoodyHard().lightLevel(bs -> 4))); public static final BlockQuenchedAllay QUENCHED_ALLAY = blockItem("quenched_allay", new BlockQuenchedAllay(quenched())); @@ -203,17 +204,17 @@ private static BlockBehaviour.Properties quenched() { public static final Block SLATE_BRICKS = blockItem("slate_bricks", new Block(slateish().strength(2f, 4f))); public static final Block SLATE_BRICKS_SMALL = blockItem("slate_bricks_small", new Block(slateish().strength(2f, 4f))); public static final RotatedPillarBlock SLATE_PILLAR = blockItem("slate_pillar", new RotatedPillarBlock(slateish().strength(2f, 4f))); - public static final SandBlock AMETHYST_DUST_BLOCK = blockItem("amethyst_dust_block", - new SandBlock(0xff_b38ef3, BlockBehaviour.Properties.copy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE) + public static final ColoredFallingBlock AMETHYST_DUST_BLOCK = blockItem("amethyst_dust_block", + new ColoredFallingBlock(new ColorRGBA(0xb38ef3_ff), BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE) .strength(0.5f).sound(SoundType.SAND))); public static final AmethystBlock AMETHYST_TILES = blockItem("amethyst_tiles", - new AmethystBlock(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new AmethystBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final AmethystBlock AMETHYST_BRICKS = blockItem("amethyst_bricks", - new AmethystBlock(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new AmethystBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final AmethystBlock AMETHYST_BRICKS_SMALL = blockItem("amethyst_bricks_small", - new AmethystBlock(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new AmethystBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final BlockAmethystDirectional AMETHYST_PILLAR = blockItem("amethyst_pillar", - new BlockAmethystDirectional(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new BlockAmethystDirectional(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final Block SLATE_AMETHYST_TILES = blockItem("slate_amethyst_tiles", new Block(slateish().strength(2f, 4f))); public static final Block SLATE_AMETHYST_BRICKS = blockItem("slate_amethyst_bricks", new Block(slateish().strength(2f, 4f))); public static final Block SLATE_AMETHYST_BRICKS_SMALL = blockItem("slate_amethyst_bricks_small", new Block(slateish().strength(2f, 4f))); @@ -275,8 +276,7 @@ private static BlockBehaviour.Properties quenched() { public static final ButtonBlock EDIFIED_BUTTON = blockItem("edified_button", new BlockHexWoodButton(edifiedWoody().noOcclusion().noCollission())); public static final PressurePlateBlock EDIFIED_PRESSURE_PLATE = blockItem("edified_pressure_plate", - new BlockHexPressurePlate(PressurePlateBlock.Sensitivity.EVERYTHING, - edifiedWoody().noOcclusion().noCollission())); + new BlockHexPressurePlate(edifiedWoody().noOcclusion().noCollission())); public static final BlockAkashicLeaves AMETHYST_EDIFIED_LEAVES = blockItem("amethyst_edified_leaves", new BlockAkashicLeaves(leaves(MapColor.COLOR_PURPLE))); public static final BlockAkashicLeaves AVENTURINE_EDIFIED_LEAVES = blockItem("aventurine_edified_leaves", diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java index 05f06de4e8..391b9cac1b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java @@ -12,6 +12,6 @@ public class HexConfiguredFeatures { public static final ResourceKey> CITRINE_EDIFIED_TREE = createKey("citrine_edified_tree"); private static ResourceKey> createKey(String name) { - return ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation(HexAPI.MOD_ID, name)); + return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, name)); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java index 03d8b26615..07c1a08bcd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java @@ -24,8 +24,9 @@ public static void registerCreativeTabs(BiConsumer new ItemStack(HexItems.SPELLBOOK))); + // TODO port: check creative tab icon display public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) - .icon(() -> ItemScroll.withPerWorldPattern(new ItemStack(HexItems.SCROLL_LARGE),""))); + .icon(() -> new ItemStack(HexItems.SCROLL_LARGE))); private static CreativeModeTab register(String name, CreativeModeTab.Builder tabBuilder) { var tab = tabBuilder.title(Component.translatable("itemGroup.hexcasting." + name)).build(); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java index 6eb7c8f1fa..6bd0f900fc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDamageTypes.java @@ -9,8 +9,7 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public class HexDamageTypes { - public static final ResourceKey OVERCAST = ResourceKey.create(Registries.DAMAGE_TYPE, modLoc( - "overcast")); + public static final ResourceKey OVERCAST = ResourceKey.create(Registries.DAMAGE_TYPE, modLoc("overcast")); public static void bootstrap(BootstrapContext ctx) { ctx.register(OVERCAST, new DamageType( diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDataComponents.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDataComponents.java new file mode 100644 index 0000000000..9c81dff7c9 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexDataComponents.java @@ -0,0 +1,165 @@ +package at.petrak.hexcasting.common.lib; + +import at.petrak.hexcasting.api.casting.ActionRegistryEntry; +import at.petrak.hexcasting.api.casting.iota.Iota; +import at.petrak.hexcasting.api.casting.iota.IotaType; +import at.petrak.hexcasting.api.casting.math.HexPattern; +import at.petrak.hexcasting.api.pigment.FrozenPigment; +import com.mojang.serialization.Codec; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Unit; + +import java.util.*; +import java.util.function.BiConsumer; + +import static at.petrak.hexcasting.api.HexAPI.modLoc; + +public class HexDataComponents { + public static void registerDataComponents(BiConsumer, ResourceLocation> r) { + for (var e : DATA_COMPONENTS.entrySet()) { + r.accept(e.getValue(), e.getKey()); + } + } + + private static final Map> DATA_COMPONENTS = new LinkedHashMap<>(); + + public static final DataComponentType PATTERN = register("pattern", + DataComponentType.builder() + .persistent(HexPattern.CODEC) + .networkSynchronized(HexPattern.STREAM_CODEC) + .build()); + public static final DataComponentType> ACTION = register("op_id", + DataComponentType.>builder() + .persistent(ResourceKey.codec(HexRegistries.ACTION)) + .networkSynchronized(ResourceKey.streamCodec(HexRegistries.ACTION)) + .build()); + public static final DataComponentType NEEDS_PURCHASE = register("needs_purchase", + DataComponentType.builder() + .networkSynchronized(StreamCodec.unit(Unit.INSTANCE)) + .build()); + /** + * If this datacomponent is set on the item, we ignore the rest of the item and render this as if it were of the + * {@link at.petrak.hexcasting.api.casting.iota.IotaType IotaType} given by the resource location. + *

+ * This is not useful to the player at all. + */ + public static final DataComponentType>> VISUAL_OVERRIDE = register("visual_override", + DataComponentType.>>builder() + .networkSynchronized(ByteBufCodecs.optional(ByteBufCodecs.registry(HexRegistries.IOTA_TYPE))) + .build()); + public static final DataComponentType VARIANT = register("variant", + DataComponentType.builder() + .persistent(Codec.intRange(0, Integer.MAX_VALUE)) + .networkSynchronized(ByteBufCodecs.VAR_INT) + .build()); + public static final DataComponentType SEALED = register("sealed", + DataComponentType.builder() + .persistent(Codec.unit(Unit.INSTANCE)) + .networkSynchronized(StreamCodec.unit(Unit.INSTANCE)) + .build()); + // TODO port: Data components must implement equals and hashCode. Keep in mind they must also be immutable + public static final DataComponentType IOTA = register("iota", + DataComponentType.builder() + .persistent(IotaType.TYPED_CODEC) + .networkSynchronized(IotaType.TYPED_STREAM_CODEC) + .build()); + + public static final DataComponentType> PATTERNS = register("patterns", + DataComponentType.>builder() + .persistent(IotaType.TYPED_CODEC.listOf()) + .networkSynchronized(IotaType.TYPED_STREAM_CODEC.apply(ByteBufCodecs.list())) + .build()); + public static final DataComponentType MEDIA = register("media", + DataComponentType.builder() + .persistent(Codec.LONG) + .networkSynchronized(ByteBufCodecs.VAR_LONG) + .build()); + public static final DataComponentType MEDIA_MAX = register("start_media", + DataComponentType.builder() + .persistent(Codec.LONG) + .networkSynchronized(ByteBufCodecs.VAR_LONG) + .build()); + public static final DataComponentType HEX_NAME = register("hex_name", + DataComponentType.builder() + .persistent(Codec.STRING) + .networkSynchronized(ByteBufCodecs.STRING_UTF8) + .build()); + + public static final DataComponentType PIGMENT = register("pigment", + DataComponentType.builder() + .persistent(FrozenPigment.CODEC) + .networkSynchronized(FrozenPigment.STREAM_CODEC) + .build()); + + public static final DataComponentType ABACUS_VALUE = register("abacus_value", + DataComponentType.builder() + .persistent(Codec.DOUBLE) + .networkSynchronized(ByteBufCodecs.DOUBLE) + .build()); + + public static final DataComponentType SELECTED_PAGE = register("page_idx", + DataComponentType.builder() + .persistent(Codec.INT) + .networkSynchronized(ByteBufCodecs.INT) + .build()); + + public static final DataComponentType> PAGES = register("pages", + DataComponentType.>builder() + .persistent(Codec.unboundedMap(Codec.STRING, IotaType.TYPED_CODEC)) + .networkSynchronized(ByteBufCodecs.map( + HashMap::newHashMap, + ByteBufCodecs.STRING_UTF8, + IotaType.TYPED_STREAM_CODEC + )) + .build()); + + public static final DataComponentType> PAGE_NAMES = register("page_names", + DataComponentType.>builder() + .persistent(Codec.unboundedMap(Codec.STRING, ComponentSerialization.CODEC)) + .networkSynchronized(ByteBufCodecs.map( + HashMap::newHashMap, + ByteBufCodecs.STRING_UTF8, + ComponentSerialization.STREAM_CODEC + )) + .build()); + + public static final DataComponentType> PAGE_SEALS = register("sealed_pages", + DataComponentType.>builder() + .persistent(Codec.unboundedMap(Codec.STRING, Codec.BOOL)) + .networkSynchronized(ByteBufCodecs.map( + HashMap::newHashMap, + ByteBufCodecs.STRING_UTF8, + ByteBufCodecs.BOOL + )) + .build()); + + public static final DataComponentType> MEDIA_EXTRACTIONS = register("media_extractions", + DataComponentType.>builder() + .persistent(Codec.LONG.listOf()) + .networkSynchronized(ByteBufCodecs.VAR_LONG.apply(ByteBufCodecs.list())) + .build()); + + public static final DataComponentType> MEDIA_INSERTIONS = register("media_insertions", + DataComponentType.>builder() + .persistent(Codec.LONG.listOf()) + .networkSynchronized(ByteBufCodecs.VAR_LONG.apply(ByteBufCodecs.list())) + .build()); + + + private static DataComponentType register( + String id, + DataComponentType lift + ) { + var old = DATA_COMPONENTS.put(modLoc(id), lift); + if (old != null) { + throw new IllegalArgumentException("Typo? Duplicate id " + id); + } + return lift; + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index aa05c96c8a..6a727536af 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -21,8 +21,12 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.*; +import net.minecraft.world.item.component.ItemAttributeModifiers; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -40,14 +44,15 @@ public static void registerItems(BiConsumer r) { } public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeModeTab tab) { - if (tab == HexCreativeTabs.SCROLLS) generateScrollEntries(); - for (var item : ITEM_TABS.getOrDefault(tab, List.of())) { + if (tab == HexCreativeTabs.SCROLLS) + generateScrollEntries(r); + for (var item : ITEM_TABS.getOrDefault(tab, Collections.emptySet())) { item.register(r); } } private static final Map ITEMS = new LinkedHashMap<>(); // preserve insertion order - private static final Map> ITEM_TABS = new LinkedHashMap<>(); + private static final Map> ITEM_TABS = new LinkedHashMap<>(); public static final Item AMETHYST_DUST = make("amethyst_dust", new Item(props())); @@ -86,7 +91,19 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemArtifact ARTIFACT = make("artifact", new ItemArtifact(unstackable().rarity(Rarity.RARE))); public static final ItemJewelerHammer JEWELER_HAMMER = make("jeweler_hammer", - new ItemJewelerHammer(Tiers.IRON, 0, -2.8F, props().stacksTo(1).defaultDurability(Tiers.DIAMOND.getUses()))); + new ItemJewelerHammer(Tiers.IRON, props() + .stacksTo(1) + .durability(Tiers.DIAMOND.getUses()) + .attributes(ItemAttributeModifiers.builder() + .add(Attributes.ATTACK_SPEED, new AttributeModifier( + modLoc("jeweler_hammer_speed"), + -2.8, + AttributeModifier.Operation.ADD_VALUE + ), EquipmentSlotGroup.ANY) + .build() + ) + ) + ); public static final ItemScroll SCROLL_SMOL = make("scroll_small", new ItemScroll(props(), 1)); public static final ItemScroll SCROLL_MEDIUM = make("scroll_medium", new ItemScroll(props(), 2)); @@ -140,7 +157,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod // BUFF SANDVICH public static final Item SUBMARINE_SANDWICH = make("sub_sandwich", - new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationMod(1.2f).build()))); + new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationModifier(1.2f).build()))); public static final ItemLoreFragment LORE_FRAGMENT = make("lore_fragment", new ItemLoreFragment(unstackable() @@ -149,7 +166,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemCreativeUnlocker CREATIVE_UNLOCKER = make("creative_unlocker", new ItemCreativeUnlocker(unstackable() .rarity(Rarity.EPIC) - .food(new FoodProperties.Builder().nutrition(20).saturationMod(1f).alwaysEat().build()))); + .food(new FoodProperties.Builder().nutrition(20).saturationModifier(1f).alwaysEdible().build()))); // @@ -161,18 +178,18 @@ public static Item.Properties unstackable() { return props().stacksTo(1); } - private static void generateScrollEntries() { + private static void generateScrollEntries(CreativeModeTab.Output r) { var keyList = new ArrayList>(); Registry regi = IXplatAbstractions.INSTANCE.getActionRegistry(); for (var key : regi.registryKeySet()) if (HexUtils.isOfTag(regi, key, HexTags.Actions.PER_WORLD_PATTERN)) keyList.add(key); - keyList.sort( (a, b) -> a.location().compareTo(b.location()) ); + keyList.sort(Comparator.comparing(ResourceKey::location)); for (var key : keyList) { - addToTab(() -> ItemScroll.withPerWorldPattern( - new ItemStack(HexItems.SCROLL_LARGE), - key.location().toString() - ),HexCreativeTabs.SCROLLS); + r.accept(ItemScroll.withPerWorldPattern( + new ItemStack(HexItems.SCROLL_LARGE), + key + )); } } @@ -182,7 +199,7 @@ private static T make(ResourceLocation id, T item, @Nullable Cr throw new IllegalArgumentException("Typo? Duplicate id " + id); } if (tab != null) { - ITEM_TABS.computeIfAbsent(tab, t -> new ArrayList<>()).add(new TabEntry.ItemEntry(item)); + ITEM_TABS.computeIfAbsent(tab, t -> new HashSet<>()).add(new TabEntry.ItemEntry(item)); } return item; } @@ -197,13 +214,16 @@ private static T make(String id, T item) { private static Supplier addToTab(Supplier stack, CreativeModeTab tab) { var memoised = Suppliers.memoize(stack::get); - ITEM_TABS.computeIfAbsent(tab, t -> new ArrayList<>()).add(new TabEntry.StackEntry(memoised)); + ITEM_TABS.computeIfAbsent(tab, t -> new HashSet<>()).add(new TabEntry.StackEntry(memoised)); return memoised; } private static abstract class TabEntry { abstract void register(CreativeModeTab.Output r); + @Override + public abstract int hashCode(); + static class ItemEntry extends TabEntry { private final Item item; @@ -215,6 +235,11 @@ static class ItemEntry extends TabEntry { void register(CreativeModeTab.Output r) { r.accept(item); } + + @Override + public int hashCode() { + return Objects.hashCode(item); + } } static class StackEntry extends TabEntry { @@ -228,6 +253,11 @@ static class StackEntry extends TabEntry { void register(CreativeModeTab.Output r) { r.accept(stack.get()); } + + @Override + public int hashCode() { + return Objects.hashCode(stack); + } } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java index 409f5c979c..a8b813d5ba 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexLootFunctions.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.common.loot.AddHexToAncientCypherFunc; import at.petrak.hexcasting.common.loot.AmethystReducerFunc; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import java.util.LinkedHashMap; @@ -13,22 +14,25 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public class HexLootFunctions { - public static void registerSerializers(BiConsumer r) { + public static void registerSerializers(BiConsumer, ResourceLocation> r) { for (var e : LOOT_FUNCS.entrySet()) { r.accept(e.getValue(), e.getKey()); } } - private static final Map LOOT_FUNCS = new LinkedHashMap<>(); + private static final Map> LOOT_FUNCS = new LinkedHashMap<>(); - public static final LootItemFunctionType PATTERN_SCROLL = register("pattern_scroll", - new LootItemFunctionType(new AddPerWorldPatternToScrollFunc.Serializer())); - public static final LootItemFunctionType HEX_CYPHER = register("hex_cypher", - new LootItemFunctionType(new AddHexToAncientCypherFunc.Serializer())); - public static final LootItemFunctionType AMETHYST_SHARD_REDUCER = register("amethyst_shard_reducer", - new LootItemFunctionType(new AmethystReducerFunc.Serializer())); + public static final LootItemFunctionType PATTERN_SCROLL = register("pattern_scroll", + new LootItemFunctionType<>(AddPerWorldPatternToScrollFunc.CODEC)); + public static final LootItemFunctionType HEX_CYPHER = register("hex_cypher", + new LootItemFunctionType<>(AddHexToAncientCypherFunc.CODEC)); + public static final LootItemFunctionType AMETHYST_SHARD_REDUCER = register("amethyst_shard_reducer", + new LootItemFunctionType<>(AmethystReducerFunc.CODEC)); - private static LootItemFunctionType register(String id, LootItemFunctionType lift) { + private static LootItemFunctionType register( + String id, + LootItemFunctionType lift + ) { var old = LOOT_FUNCS.put(modLoc(id), lift); if (old != null) { throw new IllegalArgumentException("Typo? Duplicate id " + id); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java index 6398bfea27..2f476ef1ef 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java @@ -1,6 +1,8 @@ package at.petrak.hexcasting.common.lib; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.common.misc.HexMobEffect; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; @@ -23,12 +25,12 @@ public static void register(BiConsumer r) { public static final MobEffect ENLARGE_GRID = make("enlarge_grid", new HexMobEffect(MobEffectCategory.BENEFICIAL, 0xc875ff)) - .addAttributeModifier(HexAttributes.GRID_ZOOM, "d4afaf0f-df37-4253-9fa7-029e8e4415d9", - 0.25, AttributeModifier.Operation.MULTIPLY_TOTAL); + .addAttributeModifier(Holder.direct(HexAttributes.GRID_ZOOM), HexAPI.modLoc("enlarge_grid"), + 0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); public static final MobEffect SHRINK_GRID = make("shrink_grid", new HexMobEffect(MobEffectCategory.HARMFUL, 0xc0e660)) - .addAttributeModifier(HexAttributes.GRID_ZOOM, "1ce492a9-8bf5-4091-a482-c6d9399e448a", - -0.2, AttributeModifier.Operation.MULTIPLY_TOTAL); + .addAttributeModifier(Holder.direct(HexAttributes.GRID_ZOOM), HexAPI.modLoc("shrink_grid"), + -0.2, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); private static T make(String id, T effect) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java index e86409e77c..91145ee691 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java @@ -1,8 +1,12 @@ package at.petrak.hexcasting.common.lib; +import net.minecraft.core.Holder; +import net.minecraft.core.RegistryAccess; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.item.alchemy.Potion; +import net.minecraft.world.item.alchemy.PotionBrewing; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.Items; @@ -11,43 +15,37 @@ import java.util.function.BiConsumer; import static at.petrak.hexcasting.api.HexAPI.modLoc; -import at.petrak.hexcasting.mixin.accessor.AccessorPotionBrewing; public class HexPotions { - public static void register(BiConsumer r) { - for (var e : POTIONS.entrySet()) { - r.accept(e.getValue(), e.getKey()); - } - HexPotions.addRecipes(); - } - private static final Map POTIONS = new LinkedHashMap<>(); public static final Potion ENLARGE_GRID = make("enlarge_grid", - new Potion("enlarge_grid", new MobEffectInstance(HexMobEffects.ENLARGE_GRID, 3600))); + new Potion("enlarge_grid", new MobEffectInstance(Holder.direct(HexMobEffects.ENLARGE_GRID), 3600))); public static final Potion ENLARGE_GRID_LONG = make("enlarge_grid_long", - new Potion("enlarge_grid_long", new MobEffectInstance(HexMobEffects.ENLARGE_GRID, 9600))); + new Potion("enlarge_grid_long", new MobEffectInstance(Holder.direct(HexMobEffects.ENLARGE_GRID), 9600))); public static final Potion ENLARGE_GRID_STRONG = make("enlarge_grid_strong", - new Potion("enlarge_grid_strong", new MobEffectInstance(HexMobEffects.ENLARGE_GRID, 1800, 1))); + new Potion("enlarge_grid_strong", new MobEffectInstance(Holder.direct(HexMobEffects.ENLARGE_GRID), 1800, 1))); public static final Potion SHRINK_GRID = make("shrink_grid", - new Potion("shrink_grid", new MobEffectInstance(HexMobEffects.SHRINK_GRID, 3600))); + new Potion("shrink_grid", new MobEffectInstance(Holder.direct(HexMobEffects.SHRINK_GRID), 3600))); public static final Potion SHRINK_GRID_LONG = make("shrink_grid_long", - new Potion("shrink_grid_long", new MobEffectInstance(HexMobEffects.SHRINK_GRID, 9600))); + new Potion("shrink_grid_long", new MobEffectInstance(Holder.direct(HexMobEffects.SHRINK_GRID), 9600))); public static final Potion SHRINK_GRID_STRONG = make("shrink_grid_strong", - new Potion("shrink_grid_strong", new MobEffectInstance(HexMobEffects.SHRINK_GRID, 1800, 1))); + new Potion("shrink_grid_strong", new MobEffectInstance(Holder.direct(HexMobEffects.SHRINK_GRID), 1800, 1))); + + public static void addRecipes(PotionBrewing.Builder builder, RegistryAccess registryAccess) { + var potionRegistry = registryAccess.registryOrThrow(Registries.POTION); - public static void addRecipes() { - AccessorPotionBrewing.addMix(Potions.AWKWARD, HexItems.AMETHYST_DUST, ENLARGE_GRID); - AccessorPotionBrewing.addMix(ENLARGE_GRID, Items.REDSTONE, ENLARGE_GRID_LONG); - AccessorPotionBrewing.addMix(ENLARGE_GRID, Items.GLOWSTONE_DUST, ENLARGE_GRID_STRONG); + builder.addMix(Potions.AWKWARD, HexItems.AMETHYST_DUST, potionRegistry.wrapAsHolder(ENLARGE_GRID)); + builder.addMix(potionRegistry.wrapAsHolder(ENLARGE_GRID), Items.REDSTONE, potionRegistry.wrapAsHolder(ENLARGE_GRID_LONG)); + builder.addMix(potionRegistry.wrapAsHolder(ENLARGE_GRID), Items.GLOWSTONE_DUST, potionRegistry.wrapAsHolder(ENLARGE_GRID_STRONG)); - AccessorPotionBrewing.addMix(ENLARGE_GRID, Items.FERMENTED_SPIDER_EYE, SHRINK_GRID); - AccessorPotionBrewing.addMix(ENLARGE_GRID_LONG, Items.FERMENTED_SPIDER_EYE, SHRINK_GRID_LONG); - AccessorPotionBrewing.addMix(ENLARGE_GRID_STRONG, Items.FERMENTED_SPIDER_EYE, SHRINK_GRID_STRONG); + builder.addMix(potionRegistry.wrapAsHolder(ENLARGE_GRID), Items.FERMENTED_SPIDER_EYE, potionRegistry.wrapAsHolder(SHRINK_GRID)); + builder.addMix(potionRegistry.wrapAsHolder(ENLARGE_GRID_LONG), Items.FERMENTED_SPIDER_EYE, potionRegistry.wrapAsHolder(SHRINK_GRID_LONG)); + builder.addMix(potionRegistry.wrapAsHolder(ENLARGE_GRID_STRONG), Items.FERMENTED_SPIDER_EYE, potionRegistry.wrapAsHolder(SHRINK_GRID_STRONG)); - AccessorPotionBrewing.addMix(SHRINK_GRID, Items.REDSTONE, SHRINK_GRID_LONG); - AccessorPotionBrewing.addMix(SHRINK_GRID, Items.GLOWSTONE_DUST, SHRINK_GRID_STRONG); + builder.addMix(potionRegistry.wrapAsHolder(SHRINK_GRID), Items.REDSTONE, potionRegistry.wrapAsHolder(SHRINK_GRID_LONG)); + builder.addMix(potionRegistry.wrapAsHolder(SHRINK_GRID), Items.GLOWSTONE_DUST, potionRegistry.wrapAsHolder(SHRINK_GRID_STRONG)); } private static T make(String id, T potion) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java index e529e9b889..be0851967a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java @@ -6,6 +6,8 @@ import at.petrak.hexcasting.api.casting.eval.sideeffects.EvalSound; import at.petrak.hexcasting.api.casting.eval.vm.ContinuationFrame; import at.petrak.hexcasting.api.casting.iota.IotaType; +import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientType; +import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; @@ -18,4 +20,6 @@ public class HexRegistries { public static final ResourceKey> ARITHMETIC = ResourceKey.createRegistryKey(modLoc("arithmetic")); public static final ResourceKey>> CONTINUATION_TYPE = ResourceKey.createRegistryKey(modLoc("continuation_type")); public static final ResourceKey> EVAL_SOUND = ResourceKey.createRegistryKey(modLoc("eval_sound")); + public static final ResourceKey>> STATE_INGREDIENT = ResourceKey.createRegistryKey(modLoc("state_ingredient")); + public static final ResourceKey>> BRAINSWEEPEE_INGREDIENT = ResourceKey.createRegistryKey(modLoc("brainsweepee_ingredient")); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java index e178b1e011..634a0b4ef5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexActions.java @@ -423,7 +423,7 @@ public class HexActions { // == Consts == public static final ActionRegistryEntry CONST$NULL = make("const/null", - new ActionRegistryEntry(HexPattern.fromAngles("d", HexDir.EAST), Action.makeConstantOp(new NullIota()))); + new ActionRegistryEntry(HexPattern.fromAngles("d", HexDir.EAST), Action.makeConstantOp(NullIota.INSTANCE))); public static final ActionRegistryEntry CONST$TRUE = make("const/true", new ActionRegistryEntry(HexPattern.fromAngles("aqae", diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexIotaTypes.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexIotaTypes.java index 0526e9ac56..e103d7720e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexIotaTypes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/hex/HexIotaTypes.java @@ -19,18 +19,9 @@ @ParametersAreNonnullByDefault public class HexIotaTypes { public static final Registry> REGISTRY = IXplatAbstractions.INSTANCE.getIotaTypeRegistry(); - public static final String - KEY_TYPE = HexAPI.MOD_ID + ":type", - KEY_DATA = HexAPI.MOD_ID + ":data"; public static final int MAX_SERIALIZATION_DEPTH = 256; public static final int MAX_SERIALIZATION_TOTAL = 1024; - public static void registerTypes(BiConsumer, ResourceLocation> r) { - for (var e : TYPES.entrySet()) { - r.accept(e.getValue(), e.getKey()); - } - } - private static final Map> TYPES = new LinkedHashMap<>(); public static final IotaType NULL = type("null", NullIota.TYPE); @@ -43,6 +34,12 @@ public static void registerTypes(BiConsumer, ResourceLocation> r) { public static final IotaType VEC3 = type("vec3", Vec3Iota.TYPE); public static final IotaType CONTINUATION = type("continuation", ContinuationIota.TYPE); + public static void registerTypes(BiConsumer, ResourceLocation> r) { + for (var e : TYPES.entrySet()) { + r.accept(e.getValue(), e.getKey()); + } + } + private static > T type(String name, T type) { var old = TYPES.put(modLoc(name), type); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java index aa0fa4af2b..a82f688389 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddHexToAncientCypherFunc.java @@ -4,15 +4,13 @@ import at.petrak.hexcasting.api.casting.iota.IotaType; import at.petrak.hexcasting.api.casting.math.HexDir; import at.petrak.hexcasting.api.casting.math.HexPattern; -import at.petrak.hexcasting.api.mod.HexConfig; -import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.api.item.VariantItem; import at.petrak.hexcasting.api.misc.MediaConstants; import at.petrak.hexcasting.common.items.magic.ItemAncientCypher; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexLootFunctions; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.RandomSource; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.CompoundTag; @@ -22,7 +20,11 @@ import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import com.mojang.datafixers.util.Pair; /** @@ -32,7 +34,12 @@ * is used on both sides */ public class AddHexToAncientCypherFunc extends LootItemConditionalFunction { - public AddHexToAncientCypherFunc(LootItemCondition[] lootItemConditions) { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + p_344674_ -> commonFields(p_344674_) + .apply(p_344674_, AddHexToAncientCypherFunc::new) + ); + + public AddHexToAncientCypherFunc(List lootItemConditions) { super(lootItemConditions); } @@ -41,20 +48,15 @@ public AddHexToAncientCypherFunc(LootItemCondition[] lootItemConditions) { */ public static ItemStack doStatic(ItemStack stack, RandomSource rand) { var hex = LOOT_HEXES.get(rand.nextInt(LOOT_HEXES.size())); - var patsTag = new ListTag(); - for (var patString : hex.getSecond()){ - var pieces = patString.split(" "); - var pat = HexPattern.fromAngles(pieces[1],HexDir.fromString(pieces[0])); - patsTag.add(IotaType.serialize(new PatternIota(pat))); - } - - var tag = new CompoundTag(); - tag.putString(ItemAncientCypher.TAG_HEX_NAME, hex.getFirst()); - tag.putLong(ItemAncientCypher.TAG_MEDIA, 32*MediaConstants.SHARD_UNIT); - tag.putLong(ItemAncientCypher.TAG_MAX_MEDIA, 32*MediaConstants.SHARD_UNIT); - tag.putInt(VariantItem.TAG_VARIANT, rand.nextInt(8)); - tag.put(ItemAncientCypher.TAG_PATTERNS, patsTag); - stack.getOrCreateTag().merge(tag); + + stack.set(HexDataComponents.HEX_NAME, hex.getFirst()); + stack.set(HexDataComponents.MEDIA, 32 * MediaConstants.SHARD_UNIT); + stack.set(HexDataComponents.MEDIA_MAX, 32 * MediaConstants.SHARD_UNIT); + stack.set(HexDataComponents.VARIANT, rand.nextInt(8)); + stack.set(HexDataComponents.PATTERNS, Arrays.stream(hex.getSecond()).map(el -> { + var pieces = el.split(" "); + return new PatternIota(HexPattern.fromAngles(pieces[1],HexDir.fromString(pieces[0]))); + }).collect(Collectors.toList())); return stack; } @@ -65,23 +67,10 @@ protected ItemStack run(ItemStack stack, LootContext ctx) { } @Override - public LootItemFunctionType getType() { + public LootItemFunctionType getType() { return HexLootFunctions.HEX_CYPHER; } - public static class Serializer extends LootItemConditionalFunction.Serializer { - @Override - public void serialize(JsonObject json, AddHexToAncientCypherFunc value, JsonSerializationContext ctx) { - super.serialize(json, value, ctx); - } - - @Override - public AddHexToAncientCypherFunc deserialize(JsonObject object, JsonDeserializationContext ctx, - LootItemCondition[] conditions) { - return new AddHexToAncientCypherFunc(conditions); - } - } - // TODO: make this datapackable private static final List> LOOT_HEXES = List.of( new Pair<>("hexcasting.loot_hex.shatter", new String[] {"NORTH_EAST qaq","EAST aa","NORTH_EAST qaq","NORTH_EAST wa","EAST wqaawdd","EAST qaqqqqq"}), diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java index 0d45634db4..870714dd87 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AddPerWorldPatternToScrollFunc.java @@ -6,24 +6,25 @@ import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.common.casting.PatternRegistryManifest; import at.petrak.hexcasting.common.items.storage.ItemScroll; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexLootFunctions; import at.petrak.hexcasting.xplat.IXplatAbstractions; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.util.RandomSource; import net.minecraft.core.Registry; -import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount; import net.minecraft.world.level.storage.loot.functions.LootItemConditionalFunction; import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import java.util.ArrayList; +import java.util.List; /** * Slap a random per-world pattern on the scroll. @@ -32,7 +33,12 @@ * is used on both sides */ public class AddPerWorldPatternToScrollFunc extends LootItemConditionalFunction { - public AddPerWorldPatternToScrollFunc(LootItemCondition[] lootItemConditions) { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + p_344674_ -> commonFields(p_344674_) + .apply(p_344674_, AddPerWorldPatternToScrollFunc::new) + ); + + public AddPerWorldPatternToScrollFunc(List lootItemConditions) { super(lootItemConditions); } @@ -49,8 +55,8 @@ public static ItemStack doStatic(ItemStack stack, RandomSource rand, ServerLevel } var patternKey = perWorldKeys.get(rand.nextInt(perWorldKeys.size())); var pat = PatternRegistryManifest.getCanonicalStrokesPerWorld(patternKey, overworld); - NBTHelper.putString(stack, ItemScroll.TAG_OP_ID, patternKey.location().toString()); - NBTHelper.put(stack, ItemScroll.TAG_PATTERN, pat.serializeToNBT()); + stack.set(HexDataComponents.ACTION, patternKey); + stack.set(HexDataComponents.PATTERN, pat); return stack; } @@ -60,20 +66,7 @@ protected ItemStack run(ItemStack stack, LootContext ctx) { } @Override - public LootItemFunctionType getType() { + public LootItemFunctionType getType() { return HexLootFunctions.PATTERN_SCROLL; } - - public static class Serializer extends LootItemConditionalFunction.Serializer { - @Override - public void serialize(JsonObject json, AddPerWorldPatternToScrollFunc value, JsonSerializationContext ctx) { - super.serialize(json, value, ctx); - } - - @Override - public AddPerWorldPatternToScrollFunc deserialize(JsonObject object, JsonDeserializationContext ctx, - LootItemCondition[] conditions) { - return new AddPerWorldPatternToScrollFunc(conditions); - } - } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/AmethystReducerFunc.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/AmethystReducerFunc.java index cee38be6dd..26c9be0992 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/AmethystReducerFunc.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/AmethystReducerFunc.java @@ -1,10 +1,9 @@ package at.petrak.hexcasting.common.loot; import at.petrak.hexcasting.common.lib.HexLootFunctions; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonSerializationContext; -import net.minecraft.util.GsonHelper; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.storage.loot.LootContext; @@ -12,14 +11,28 @@ import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; +import java.util.List; + public class AmethystReducerFunc extends LootItemConditionalFunction { - public final double delta; + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + p_344674_ -> commonFields(p_344674_) + .and( + Codec.DOUBLE.fieldOf("delta").forGetter(AmethystReducerFunc::getDelta) + ) + .apply(p_344674_, AmethystReducerFunc::new) + ); + + private final double delta; - public AmethystReducerFunc(LootItemCondition[] lootItemConditions, double delta) { + public AmethystReducerFunc(List lootItemConditions, double delta) { super(lootItemConditions); this.delta = delta; } + public double getDelta() { + return delta; + } + public static ItemStack doStatic(ItemStack stack, LootContext ctx, double amount) { if (stack.is(Items.AMETHYST_SHARD)) { stack.setCount((int) (stack.getCount() * (1 + amount))); @@ -33,22 +46,7 @@ protected ItemStack run(ItemStack stack, LootContext ctx) { } @Override - public LootItemFunctionType getType() { + public LootItemFunctionType getType() { return HexLootFunctions.AMETHYST_SHARD_REDUCER; } - - public static class Serializer extends LootItemConditionalFunction.Serializer { - @Override - public void serialize(JsonObject json, AmethystReducerFunc value, JsonSerializationContext ctx) { - super.serialize(json, value, ctx); - json.addProperty("delta", value.delta); - } - - @Override - public AmethystReducerFunc deserialize(JsonObject object, JsonDeserializationContext ctx, - LootItemCondition[] conditions) { - var delta = GsonHelper.getAsDouble(object, "delta"); - return new AmethystReducerFunc(conditions, delta); - } - } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java b/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java index 5d38b52bda..a8d8679f15 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/loot/HexLootHandler.java @@ -1,8 +1,11 @@ package at.petrak.hexcasting.common.loot; import com.google.common.collect.ImmutableList; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; +import net.minecraft.world.level.storage.loot.LootTable; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -24,51 +27,51 @@ public class HexLootHandler { // In places where it doesn't really make sense to have them lore-wise just put them rarely anyways // to make it less of a PITA for new players - new ScrollInjection(new ResourceLocation("minecraft", "chests/simple_dungeon"), 1), - new ScrollInjection(new ResourceLocation("minecraft", "chests/abandoned_mineshaft"), 1), - new ScrollInjection(new ResourceLocation("minecraft", "chests/bastion_other"), 1), - new ScrollInjection(new ResourceLocation("minecraft", "chests/nether_bridge"), 1), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/simple_dungeon"), 1), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/abandoned_mineshaft"), 1), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/bastion_other"), 1), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/nether_bridge"), 1), - new ScrollInjection(new ResourceLocation("minecraft", "chests/jungle_temple"), 2), - new ScrollInjection(new ResourceLocation("minecraft", "chests/desert_pyramid"), 2), - new ScrollInjection(new ResourceLocation("minecraft", "chests/village/village_cartographer"), 2), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/jungle_temple"), 2), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/desert_pyramid"), 2), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/village/village_cartographer"), 2), - new ScrollInjection(new ResourceLocation("minecraft", "chests/shipwreck_map"), 3), - new ScrollInjection(new ResourceLocation("minecraft", "chests/bastion_treasure"), 3), - new ScrollInjection(new ResourceLocation("minecraft", "chests/end_city_treasure"), 3), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/shipwreck_map"), 3), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/bastion_treasure"), 3), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/end_city_treasure"), 3), // ancient city chests have amethyst in them, thinking emoji - new ScrollInjection(new ResourceLocation("minecraft", "chests/ancient_city"), 4), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/ancient_city"), 4), // wonder what those pillagers are up to with those scrolls - new ScrollInjection(new ResourceLocation("minecraft", "chests/pillager_outpost"), 4), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/pillager_outpost"), 4), // if you manage to find one of these things you deserve a lot of scrolls - new ScrollInjection(new ResourceLocation("minecraft", "chests/woodland_mansion"), 5), - new ScrollInjection(new ResourceLocation("minecraft", "chests/stronghold_library"), 5) + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/woodland_mansion"), 5), + new ScrollInjection(ResourceLocation.fromNamespaceAndPath("minecraft", "chests/stronghold_library"), 5) ); public static final ImmutableList DEFAULT_LORE_INJECTS = ImmutableList.of( - new ResourceLocation("minecraft", "chests/simple_dungeon"), - new ResourceLocation("minecraft", "chests/abandoned_mineshaft"), - new ResourceLocation("minecraft", "chests/pillager_outpost"), - new ResourceLocation("minecraft", "chests/woodland_mansion"), - new ResourceLocation("minecraft", "chests/stronghold_library"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/simple_dungeon"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/abandoned_mineshaft"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/pillager_outpost"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/woodland_mansion"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/stronghold_library"), // >:) - new ResourceLocation("minecraft", "chests/village/village_desert_house"), - new ResourceLocation("minecraft", "chests/village/village_plains_house"), - new ResourceLocation("minecraft", "chests/village/village_savanna_house"), - new ResourceLocation("minecraft", "chests/village/village_snowy_house"), - new ResourceLocation("minecraft", "chests/village/village_taiga_house") + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/village/village_desert_house"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/village/village_plains_house"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/village/village_savanna_house"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/village/village_snowy_house"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/village/village_taiga_house") ); public static final ImmutableList DEFAULT_CYPHER_INJECTS = ImmutableList.of( - new ResourceLocation("minecraft", "chests/simple_dungeon"), - new ResourceLocation("minecraft", "chests/abandoned_mineshaft"), - new ResourceLocation("minecraft", "chests/stronghold_corridor"), - new ResourceLocation("minecraft", "chests/jungle_temple"), - new ResourceLocation("minecraft", "chests/desert_pyramid"), - new ResourceLocation("minecraft", "chests/ancient_city"), - new ResourceLocation("minecraft", "chests/nether_bridge") + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/simple_dungeon"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/abandoned_mineshaft"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/stronghold_corridor"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/jungle_temple"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/desert_pyramid"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/ancient_city"), + ResourceLocation.fromNamespaceAndPath("minecraft", "chests/nether_bridge") ); public static int getScrollCount(int range, RandomSource random) { @@ -79,7 +82,7 @@ public static int getScrollCount(int range, RandomSource random) { public static final double DEFAULT_LORE_CHANCE = 0.4; public static final double DEFAULT_CYPHER_CHANCE = 0.4; - public static final ResourceLocation TABLE_INJECT_AMETHYST_CLUSTER = modLoc("inject/amethyst_cluster"); + public static final ResourceKey TABLE_INJECT_AMETHYST_CLUSTER = ResourceKey.create(Registries.LOOT_TABLE, modLoc("inject/amethyst_cluster")); public record ScrollInjection(ResourceLocation injectee, int countRange) { } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java b/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java index d346979600..7dbfe1fa90 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java @@ -2,15 +2,21 @@ import at.petrak.hexcasting.common.lib.HexConfiguredFeatures; import com.google.common.collect.Lists; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.BlockTags; import net.minecraft.util.RandomSource; -import net.minecraft.world.level.block.grower.AbstractTreeGrower; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import java.util.List; -// TODO they fucking changed the trees AGAIN -public class AkashicTreeGrower extends AbstractTreeGrower { +public class AkashicTreeGrower { public static final AkashicTreeGrower INSTANCE = new AkashicTreeGrower(); public static final List>> GROWERS = Lists.newArrayList(); @@ -21,8 +27,49 @@ public static void init() { GROWERS.add(HexConfiguredFeatures.CITRINE_EDIFIED_TREE); } - @Override - protected ResourceKey> getConfiguredFeature(RandomSource pRandom, boolean pLargeHive) { + private ResourceKey> getConfiguredFeature(RandomSource pRandom, boolean pLargeHive) { return GROWERS.get(pRandom.nextInt(GROWERS.size())); } + + public boolean growTree(ServerLevel level, ChunkGenerator chunkGenerator, BlockPos pos, BlockState state, RandomSource random) { + ResourceKey> treeFeatureKey = getConfiguredFeature(random, hasFlowers(level, pos)); + if (treeFeatureKey == null) { + return false; + } else { + Holder> holder1 = level.registryAccess() + .registryOrThrow(Registries.CONFIGURED_FEATURE) + .getHolder(treeFeatureKey) + .orElse(null); + var event = net.neoforged.neoforge.event.EventHooks.fireBlockGrowFeature(level, random, pos, holder1); + holder1 = event.getFeature(); + if (event.isCanceled()) return false; + if (holder1 == null) { + return false; + } else { + ConfiguredFeature configuredfeature1 = holder1.value(); + BlockState blockstate1 = level.getFluidState(pos).createLegacyBlock(); + level.setBlock(pos, blockstate1, 4); + if (configuredfeature1.place(level, chunkGenerator, random, pos)) { + if (level.getBlockState(pos) == blockstate1) { + level.sendBlockUpdated(pos, state, blockstate1, 2); + } + + return true; + } else { + level.setBlock(pos, state, 4); + return false; + } + } + } + } + + private boolean hasFlowers(LevelAccessor level, BlockPos pos) { + for (BlockPos blockpos : BlockPos.MutableBlockPos.betweenClosed(pos.below().north(2).west(2), pos.above().south(2).east(2))) { + if (level.getBlockState(blockpos).is(BlockTags.FLOWERS)) { + return true; + } + } + + return false; + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java index 852fc675af..946d2c4aa2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java @@ -1,56 +1,45 @@ package at.petrak.hexcasting.common.msgs; -import io.netty.buffer.ByteBuf; +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.paucal.api.PaucalCodecs; import net.minecraft.client.Minecraft; import net.minecraft.core.particles.ParticleTypes; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import net.minecraft.world.phys.Vec3; -import static at.petrak.hexcasting.api.HexAPI.modLoc; +public record MsgBeepS2C(Vec3 target, int note, NoteBlockInstrument instrument) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("beep")); -public record MsgBeepS2C(Vec3 target, int note, NoteBlockInstrument instrument) implements IMessage { - public static final ResourceLocation ID = modLoc("beep"); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + PaucalCodecs.VEC3, MsgBeepS2C::target, + ByteBufCodecs.VAR_INT, MsgBeepS2C::note, + ByteBufCodecs.idMapper( + (num) -> NoteBlockInstrument.values()[num], + NoteBlockInstrument::ordinal + ), MsgBeepS2C::instrument, + MsgBeepS2C::new + ); @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgBeepS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var x = buf.readDouble(); - var y = buf.readDouble(); - var z = buf.readDouble(); - var note = buf.readInt(); - var instrument = buf.readEnum(NoteBlockInstrument.class); - return new MsgBeepS2C(new Vec3(x, y, z), note, instrument); - } - - @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.target.x); - buf.writeDouble(this.target.y); - buf.writeDouble(this.target.z); - buf.writeInt(this.note); - buf.writeEnum(instrument); + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgBeepS2C msg) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var minecraft = Minecraft.getInstance(); - var world = minecraft.level; - if (world != null) { - float pitch = (float) Math.pow(2, (msg.note() - 12) / 12.0); - world.playLocalSound(msg.target().x, msg.target().y, msg.target().z, - msg.instrument().getSoundEvent().value(), SoundSource.PLAYERS, 3, pitch, false); - world.addParticle(ParticleTypes.NOTE, msg.target().x, msg.target().y + 0.2, msg.target().z, - msg.note() / 24.0, 0, 0); - } + Minecraft.getInstance().execute(() -> { + var minecraft = Minecraft.getInstance(); + var world = minecraft.level; + if (world != null) { + float pitch = (float) Math.pow(2, (msg.note() - 12) / 12.0); + world.playLocalSound(msg.target().x, msg.target().y, msg.target().z, + msg.instrument().getSoundEvent().value(), SoundSource.PLAYERS, 3, pitch, false); + world.addParticle(ParticleTypes.NOTE, msg.target().x, msg.target().y + 0.2, msg.target().z, + msg.note() / 24.0, 0, 0); } }); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java index ab75bc20ed..df770313ee 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java @@ -1,8 +1,15 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.casting.eval.ExecutionClientView; +import at.petrak.paucal.api.PaucalCodecs; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; @@ -11,27 +18,17 @@ /** * Sent server->client to synchronize OpBlink when the target is a player. */ -public record MsgBlinkS2C(Vec3 addedPosition) implements IMessage { - public static final ResourceLocation ID = modLoc("blink"); +public record MsgBlinkS2C(Vec3 addedPosition) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("blink")); - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgBlinkS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var x = buf.readDouble(); - var y = buf.readDouble(); - var z = buf.readDouble(); - return new MsgBlinkS2C(new Vec3(x, y, z)); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + PaucalCodecs.VEC3, MsgBlinkS2C::addedPosition, + MsgBlinkS2C::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.addedPosition.x); - buf.writeDouble(this.addedPosition.y); - buf.writeDouble(this.addedPosition.z); + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgBlinkS2C self) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java index 9ec659b8b6..1b64420ffe 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java @@ -1,5 +1,6 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.casting.ParticleSpray; import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.client.ClientTickCounter; @@ -7,6 +8,9 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec3; @@ -18,47 +22,20 @@ /** * Sent server->client to spray particles everywhere. */ -public record MsgCastParticleS2C(ParticleSpray spray, FrozenPigment colorizer) implements IMessage { - public static final ResourceLocation ID = modLoc("cprtcl"); +public record MsgCastParticleS2C(ParticleSpray spray, FrozenPigment colorizer) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("cprtcl")); - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgCastParticleS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var posX = buf.readDouble(); - var posY = buf.readDouble(); - var posZ = buf.readDouble(); - var velX = buf.readDouble(); - var velY = buf.readDouble(); - var velZ = buf.readDouble(); - var fuzziness = buf.readDouble(); - var spread = buf.readDouble(); - var count = buf.readInt(); - var tag = buf.readAnySizeNbt(); - var colorizer = FrozenPigment.fromNBT(tag); - return new MsgCastParticleS2C( - new ParticleSpray(new Vec3(posX, posY, posZ), new Vec3(velX, velY, velZ), fuzziness, spread, count), - colorizer); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ParticleSpray.getSTREAM_CODEC(), MsgCastParticleS2C::spray, + FrozenPigment.STREAM_CODEC, MsgCastParticleS2C::colorizer, + MsgCastParticleS2C::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.spray.getPos().x); - buf.writeDouble(this.spray.getPos().y); - buf.writeDouble(this.spray.getPos().z); - buf.writeDouble(this.spray.getVel().x); - buf.writeDouble(this.spray.getVel().y); - buf.writeDouble(this.spray.getVel().z); - buf.writeDouble(this.spray.getFuzziness()); - buf.writeDouble(this.spray.getSpread()); - buf.writeInt(this.spray.getCount()); - buf.writeNbt(this.colorizer.serializeToNBT()); + public Type type() { + return TYPE; } - private static final Random RANDOM = new Random(); // https://math.stackexchange.com/questions/44689/how-to-find-a-random-axis-or-unit-vector-in-3d @@ -69,41 +46,38 @@ private static Vec3 randomInCircle(double maxTh) { } public static void handle(MsgCastParticleS2C msg) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var colProvider = msg.colorizer().getColorProvider(); - for (int i = 0; i < msg.spray().getCount(); i++) { - // For the colors, pick any random time to get a mix of colors + Minecraft.getInstance().execute(() -> { + var colProvider = msg.colorizer().getColorProvider(); + for (int i = 0; i < msg.spray().getCount(); i++) { + // For the colors, pick any random time to get a mix of colors - var offset = randomInCircle(Mth.TWO_PI).normalize() - .scale(RANDOM.nextFloat() * msg.spray().getFuzziness() / 2); - var pos = msg.spray().getPos().add(offset); + var offset = randomInCircle(Mth.TWO_PI).normalize() + .scale(RANDOM.nextFloat() * msg.spray().getFuzziness() / 2); + var pos = msg.spray().getPos().add(offset); - var phi = Math.acos(1.0 - RANDOM.nextDouble() * (1.0 - Math.cos(msg.spray().getSpread()))); - var theta = Math.PI * 2.0 * RANDOM.nextDouble(); - var v = msg.spray().getVel().normalize(); - // pick any old vector to get a vector normal to v with - Vec3 k; - if (v.x == 0.0 && v.y == 0.0) { - // oops, pick a *different* normal - k = new Vec3(1.0, 0.0, 0.0); - } else { - k = v.cross(new Vec3(0.0, 0.0, 1.0)); - } - var velUnlen = v.scale(Math.cos(phi)) - .add(k.scale(Math.sin(phi) * Math.cos(theta))) - .add(v.cross(k).scale(Math.sin(phi) * Math.sin(theta))); - var vel = velUnlen.scale(msg.spray().getVel().length() / 20); + var phi = Math.acos(1.0 - RANDOM.nextDouble() * (1.0 - Math.cos(msg.spray().getSpread()))); + var theta = Math.PI * 2.0 * RANDOM.nextDouble(); + var v = msg.spray().getVel().normalize(); + // pick any old vector to get a vector normal to v with + Vec3 k; + if (v.x == 0.0 && v.y == 0.0) { + // oops, pick a *different* normal + k = new Vec3(1.0, 0.0, 0.0); + } else { + k = v.cross(new Vec3(0.0, 0.0, 1.0)); + } + var velUnlen = v.scale(Math.cos(phi)) + .add(k.scale(Math.sin(phi) * Math.cos(theta))) + .add(v.cross(k).scale(Math.sin(phi) * Math.sin(theta))); + var vel = velUnlen.scale(msg.spray().getVel().length() / 20); - var color = colProvider.getColor(ClientTickCounter.getTotal(), velUnlen); + var color = colProvider.getColor(ClientTickCounter.getTotal(), velUnlen); - Minecraft.getInstance().level.addParticle( - new ConjureParticleOptions(color), - pos.x, pos.y, pos.z, - vel.x, vel.y, vel.z - ); - } + Minecraft.getInstance().level.addParticle( + new ConjureParticleOptions(color), + pos.x, pos.y, pos.z, + vel.x, vel.y, vel.z + ); } }); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java index 1f454ba700..ef4d539a6e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java @@ -1,46 +1,42 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.xplat.IClientXplatAbstractions; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; +import net.minecraft.core.UUIDUtil; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import java.util.UUID; import static at.petrak.hexcasting.api.HexAPI.modLoc; -public record MsgClearSpiralPatternsS2C(UUID playerUUID) implements IMessage { - public static final ResourceLocation ID = modLoc("clr_spi_pats_sc"); +public record MsgClearSpiralPatternsS2C(UUID playerUUID) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("clr_spi_pats_sc")); - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgClearSpiralPatternsS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var player = buf.readUUID(); - - return new MsgClearSpiralPatternsS2C(player); - } + public static final StreamCodec STREAM_CODEC = UUIDUtil.STREAM_CODEC.map( + MsgClearSpiralPatternsS2C::new, + MsgClearSpiralPatternsS2C::playerUUID + ).mapStream(b -> b); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeUUID(playerUUID); + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgClearSpiralPatternsS2C self) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var mc = Minecraft.getInstance(); - assert mc.level != null; - var player = mc.level.getPlayerByUUID(self.playerUUID); - var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); - stack.slowClear(); - } + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + assert mc.level != null; + var player = mc.level.getPlayerByUUID(self.playerUUID); + var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); + stack.slowClear(); }); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java index ce19d966b3..06440b01b6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java @@ -1,11 +1,16 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.casting.eval.ResolvedPattern; import at.petrak.hexcasting.api.casting.eval.env.StaffCastEnv; import at.petrak.hexcasting.api.casting.math.HexPattern; +import at.petrak.hexcasting.api.pigment.FrozenPigment; import io.netty.buffer.ByteBuf; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; @@ -13,43 +18,27 @@ import java.util.ArrayList; import java.util.List; -import static at.petrak.hexcasting.api.HexAPI.modLoc; - /** * Sent client->server when the player finishes drawing a pattern. * Server will send back a {@link MsgNewSpellPatternS2C} packet */ public record MsgNewSpellPatternC2S(InteractionHand handUsed, HexPattern pattern, - List resolvedPatterns) - implements IMessage { - public static final ResourceLocation ID = modLoc("pat_cs"); - - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgNewSpellPatternC2S deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var hand = buf.readEnum(InteractionHand.class); - var pattern = HexPattern.fromNBT(buf.readNbt()); - - var resolvedPatternsLen = buf.readInt(); - var resolvedPatterns = new ArrayList(resolvedPatternsLen); - for (int i = 0; i < resolvedPatternsLen; i++) { - resolvedPatterns.add(ResolvedPattern.fromNBT(buf.readNbt())); - } - return new MsgNewSpellPatternC2S(hand, pattern, resolvedPatterns); - } + List resolvedPatterns) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("pat_cs")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL.map( + isMain -> isMain ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND, + hand -> hand == InteractionHand.MAIN_HAND + ), MsgNewSpellPatternC2S::handUsed, + HexPattern.STREAM_CODEC, MsgNewSpellPatternC2S::pattern, + ResolvedPattern.STREAM_CODEC.apply(ByteBufCodecs.list()), MsgNewSpellPatternC2S::resolvedPatterns, + MsgNewSpellPatternC2S::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeEnum(handUsed); - buf.writeNbt(this.pattern.serializeToNBT()); - buf.writeInt(this.resolvedPatterns.size()); - for (var pat : this.resolvedPatterns) { - buf.writeNbt(pat.serializeToNBT()); - } + public Type type() { + return TYPE; } public void handle(MinecraftServer server, ServerPlayer sender) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java index cadf3dd100..bb0af803ac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java @@ -1,13 +1,21 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.casting.eval.ExecutionClientView; +import at.petrak.hexcasting.api.casting.eval.ResolvedPattern; import at.petrak.hexcasting.api.casting.eval.ResolvedPatternType; +import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.client.gui.GuiSpellcasting; import at.petrak.hexcasting.common.lib.HexSounds; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionHand; import java.util.Optional; @@ -16,52 +24,30 @@ /** * Sent server->client when the player finishes casting a spell. */ -public record MsgNewSpellPatternS2C(ExecutionClientView info, int index) implements IMessage { - public static final ResourceLocation ID = modLoc("pat_sc"); +public record MsgNewSpellPatternS2C(ExecutionClientView info, int index) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("pat_sc")); - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgNewSpellPatternS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var isStackEmpty = buf.readBoolean(); - var resolutionType = buf.readEnum(ResolvedPatternType.class); - var index = buf.readInt(); - - var stack = buf.readList(FriendlyByteBuf::readNbt); - var raven = buf.readOptional(FriendlyByteBuf::readNbt).orElse(null); - - return new MsgNewSpellPatternS2C( - new ExecutionClientView(isStackEmpty, resolutionType, stack, raven), index - ); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ExecutionClientView.getSTREAM_CODEC(), MsgNewSpellPatternS2C::info, + ByteBufCodecs.VAR_INT, MsgNewSpellPatternS2C::index, + MsgNewSpellPatternS2C::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeBoolean(this.info.isStackClear()); - buf.writeEnum(this.info.getResolutionType()); - buf.writeInt(this.index); - - buf.writeCollection(this.info.getStackDescs(), FriendlyByteBuf::writeNbt); - buf.writeOptional(Optional.ofNullable(this.info.getRavenmind()), FriendlyByteBuf::writeNbt); + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgNewSpellPatternS2C self) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var mc = Minecraft.getInstance(); - if (self.info().isStackClear()) { - // don't pay attention to the screen, so it also stops when we die - mc.getSoundManager().stop(HexSounds.CASTING_AMBIANCE.getLocation(), null); - } - var screen = Minecraft.getInstance().screen; - if (screen instanceof GuiSpellcasting spellGui) { - spellGui.recvServerUpdate(self.info(), self.index()); - } + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + if (self.info().isStackClear()) { + // don't pay attention to the screen, so it also stops when we die + mc.getSoundManager().stop(HexSounds.CASTING_AMBIANCE.getLocation(), null); + } + var screen = Minecraft.getInstance().screen; + if (screen instanceof GuiSpellcasting spellGui) { + spellGui.recvServerUpdate(self.info(), self.index()); } }); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java index 9c5a02180c..9b1a844353 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java @@ -1,10 +1,16 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.xplat.IClientXplatAbstractions; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; +import net.minecraft.core.UUIDUtil; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import java.util.ArrayList; @@ -13,44 +19,30 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; -public record MsgNewSpiralPatternsS2C(UUID playerUUID, List patterns, int lifetime) implements IMessage { - public static final ResourceLocation ID = modLoc("spi_pats_sc"); +public record MsgNewSpiralPatternsS2C(UUID playerUUID, List patterns, int lifetime) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("spi_pats_sc")); - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgNewSpiralPatternsS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var player = buf.readUUID(); - var patterns = buf.readCollection(ArrayList::new, buff -> HexPattern.fromNBT(buf.readNbt())); - var lifetime = buf.readInt(); - - - return new MsgNewSpiralPatternsS2C(player, patterns, lifetime); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + UUIDUtil.STREAM_CODEC, MsgNewSpiralPatternsS2C::playerUUID, + HexPattern.STREAM_CODEC.apply(ByteBufCodecs.list()), MsgNewSpiralPatternsS2C::patterns, + ByteBufCodecs.VAR_INT, MsgNewSpiralPatternsS2C::lifetime, + MsgNewSpiralPatternsS2C::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeUUID(playerUUID); - buf.writeCollection(patterns, (buff, pattern) -> buff.writeNbt(pattern.serializeToNBT())); - buf.writeInt(lifetime); + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgNewSpiralPatternsS2C self) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var mc = Minecraft.getInstance(); - assert mc.level != null; - var player = mc.level.getPlayerByUUID(self.playerUUID); - var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); - - for (var pattern : self.patterns) - stack.addPattern(pattern, self.lifetime); - } + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + assert mc.level != null; + var player = mc.level.getPlayerByUUID(self.playerUUID); + var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); + + for (var pattern : self.patterns) + stack.addPattern(pattern, self.lifetime); }); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java index 67e77248cc..6cdd30003c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java @@ -1,59 +1,53 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.entities.EntityWallScroll; +import at.petrak.paucal.api.PaucalCodecs; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import static at.petrak.hexcasting.api.HexAPI.modLoc; // https://github.com/VazkiiMods/Botania/blob/1.18.x/Xplat/src/main/java/vazkii/botania/network/clientbound/PacketSpawnDoppleganger.java public record MsgNewWallScrollS2C(ClientboundAddEntityPacket inner, BlockPos pos, Direction dir, ItemStack scrollItem, - boolean showsStrokeOrder, int blockSize) implements IMessage { - public static final ResourceLocation ID = modLoc("wallscr"); + boolean showsStrokeOrder, int blockSize) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("wallscr")); - @Override - public ResourceLocation getFabricId() { - return ID; - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ClientboundAddEntityPacket.STREAM_CODEC, MsgNewWallScrollS2C::inner, + BlockPos.STREAM_CODEC, MsgNewWallScrollS2C::pos, + Direction.STREAM_CODEC, MsgNewWallScrollS2C::dir, + ItemStack.STREAM_CODEC, MsgNewWallScrollS2C::scrollItem, + ByteBufCodecs.BOOL, MsgNewWallScrollS2C::showsStrokeOrder, + ByteBufCodecs.VAR_INT, MsgNewWallScrollS2C::blockSize, + MsgNewWallScrollS2C::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - inner.write(buf); - buf.writeBlockPos(pos); - buf.writeByte(dir.ordinal()); - buf.writeItem(scrollItem); - buf.writeBoolean(showsStrokeOrder); - buf.writeVarInt(blockSize); - } - - public static MsgNewWallScrollS2C deserialize(FriendlyByteBuf buf) { - var inner = new ClientboundAddEntityPacket(buf); - var pos = buf.readBlockPos(); - var dir = HexUtils.getSafe(Direction.values(), buf.readByte()); - var scroll = buf.readItem(); - var strokeOrder = buf.readBoolean(); - var blockSize = buf.readVarInt(); - return new MsgNewWallScrollS2C(inner, pos, dir, scroll, strokeOrder, blockSize); + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgNewWallScrollS2C self) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var player = Minecraft.getInstance().player; - if (player != null) { - player.connection.handleAddEntity(self.inner); - var e = player.level().getEntity(self.inner.getId()); - if (e instanceof EntityWallScroll scroll) { - scroll.readSpawnData(self.pos, self.dir, self.scrollItem, self.showsStrokeOrder, - self.blockSize); - } + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + player.connection.handleAddEntity(self.inner); + var e = player.level().getEntity(self.inner.getId()); + if (e instanceof EntityWallScroll scroll) { + scroll.readSpawnData(self.pos, self.dir, self.scrollItem, self.showsStrokeOrder, + self.blockSize); } } }); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java index a06e608bdb..5b5d77fdcb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java @@ -1,12 +1,21 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.casting.eval.ResolvedPattern; +import at.petrak.hexcasting.api.casting.iota.Iota; +import at.petrak.hexcasting.api.casting.iota.IotaType; +import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.client.gui.GuiSpellcasting; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.ExtraCodecs; import net.minecraft.world.InteractionHand; import java.util.List; @@ -17,53 +26,36 @@ * Sent server->client when the player opens the spell gui to request the server provide the current stack. */ public record MsgOpenSpellGuiS2C(InteractionHand hand, List patterns, - List stack, + List stack, CompoundTag ravenmind, int parenCount ) - implements IMessage { - public static final ResourceLocation ID = modLoc("cgui"); + implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("cgui")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.BOOL.map( + isMain -> isMain ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND, + hand -> hand == InteractionHand.MAIN_HAND + ), MsgOpenSpellGuiS2C::hand, + ResolvedPattern.STREAM_CODEC.apply(ByteBufCodecs.list()), MsgOpenSpellGuiS2C::patterns, + IotaType.TYPED_STREAM_CODEC.apply(ByteBufCodecs.list()), MsgOpenSpellGuiS2C::stack, + ByteBufCodecs.COMPOUND_TAG, MsgOpenSpellGuiS2C::ravenmind, + ByteBufCodecs.VAR_INT, MsgOpenSpellGuiS2C::parenCount, + MsgOpenSpellGuiS2C::new + ); @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgOpenSpellGuiS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var hand = buf.readEnum(InteractionHand.class); - - var patterns = buf.readList(fbb -> ResolvedPattern.fromNBT(fbb.readAnySizeNbt())); - - var stack = buf.readList(FriendlyByteBuf::readNbt); - var raven = buf.readAnySizeNbt(); - - var parenCount = buf.readVarInt(); - - return new MsgOpenSpellGuiS2C(hand, patterns, stack, raven, parenCount); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeEnum(this.hand); - - buf.writeCollection(this.patterns, (fbb, pat) -> fbb.writeNbt(pat.serializeToNBT())); - - buf.writeCollection(this.stack, FriendlyByteBuf::writeNbt); - buf.writeNbt(this.ravenmind); - - buf.writeVarInt(this.parenCount); + public Type type() { + return TYPE; } public static void handle(MsgOpenSpellGuiS2C msg) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var mc = Minecraft.getInstance(); - mc.setScreen( - new GuiSpellcasting(msg.hand(), msg.patterns(), msg.stack, msg.ravenmind, - msg.parenCount)); - } + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + mc.setScreen( + new GuiSpellcasting(msg.hand(), msg.patterns(), msg.stack, msg.ravenmind, + msg.parenCount)); }); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java index 137c97f534..44ee8f9b21 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java @@ -1,47 +1,46 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.common.entities.EntityWallScroll; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; import static at.petrak.hexcasting.api.HexAPI.modLoc; /** * Sent S->C to have a wall scroll recalculate its pattern, to get readability offset. */ -public record MsgRecalcWallScrollDisplayS2C(int entityId, boolean showStrokeOrder) implements IMessage { - public static final ResourceLocation ID = modLoc("redoscroll"); +public record MsgRecalcWallScrollDisplayS2C(int entityId, boolean showStrokeOrder) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("redoscroll")); - public static MsgRecalcWallScrollDisplayS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var id = buf.readVarInt(); - var showStrokeOrder = buf.readBoolean(); - return new MsgRecalcWallScrollDisplayS2C(id, showStrokeOrder); - } - - @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeVarInt(entityId); - buf.writeBoolean(showStrokeOrder); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT, MsgRecalcWallScrollDisplayS2C::entityId, + ByteBufCodecs.BOOL, MsgRecalcWallScrollDisplayS2C::showStrokeOrder, + MsgRecalcWallScrollDisplayS2C::new + ); @Override - public ResourceLocation getFabricId() { - return ID; + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgRecalcWallScrollDisplayS2C msg) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var mc = Minecraft.getInstance(); - var entity = mc.level.getEntity(msg.entityId); - if (entity instanceof EntityWallScroll scroll - && scroll.getShowsStrokeOrder() != msg.showStrokeOrder) { - scroll.recalculateDisplay(); - } + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + var entity = mc.level.getEntity(msg.entityId); + if (entity instanceof EntityWallScroll scroll + && scroll.getShowsStrokeOrder() != msg.showStrokeOrder) { + scroll.recalculateDisplay(); } }); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java index e1f4d354a6..fb487a0c96 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java @@ -1,16 +1,25 @@ package at.petrak.hexcasting.common.msgs; +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.casting.eval.ResolvedPattern; import at.petrak.hexcasting.api.casting.iota.IotaType; +import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.common.items.storage.ItemAbacus; import at.petrak.hexcasting.common.items.storage.ItemSpellbook; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexSounds; import io.netty.buffer.ByteBuf; import net.minecraft.ChatFormatting; +import net.minecraft.core.component.DataComponents; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; @@ -25,30 +34,21 @@ * or scrolls in the spellcasting UI. */ public record MsgShiftScrollC2S(double mainHandDelta, double offHandDelta, boolean isCtrl, boolean invertSpellbook, - boolean invertAbacus) implements IMessage { - public static final ResourceLocation ID = modLoc("scroll"); + boolean invertAbacus) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("scroll")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.DOUBLE, MsgShiftScrollC2S::mainHandDelta, + ByteBufCodecs.DOUBLE, MsgShiftScrollC2S::offHandDelta, + ByteBufCodecs.BOOL, MsgShiftScrollC2S::isCtrl, + ByteBufCodecs.BOOL, MsgShiftScrollC2S::invertSpellbook, + ByteBufCodecs.BOOL, MsgShiftScrollC2S::invertAbacus, + MsgShiftScrollC2S::new + ); @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgShiftScrollC2S deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var mainHandDelta = buf.readDouble(); - var offHandDelta = buf.readDouble(); - var isCtrl = buf.readBoolean(); - var invertSpellbook = buf.readBoolean(); - var invertAbacus = buf.readBoolean(); - return new MsgShiftScrollC2S(mainHandDelta, offHandDelta, isCtrl, invertSpellbook, invertAbacus); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.mainHandDelta); - buf.writeDouble(this.offHandDelta); - buf.writeBoolean(this.isCtrl); - buf.writeBoolean(this.invertSpellbook); - buf.writeBoolean(this.invertAbacus); + public Type type() { + return TYPE; } public void handle(MinecraftServer server, ServerPlayer sender) { @@ -82,19 +82,19 @@ private void spellbook(ServerPlayer sender, InteractionHand hand, ItemStack stac var sealed = ItemSpellbook.isSealed(stack); MutableComponent component; - if (hand == InteractionHand.OFF_HAND && stack.hasCustomHoverName()) { + if (hand == InteractionHand.OFF_HAND && stack.has(DataComponents.CUSTOM_NAME)) { if (sealed) { component = Component.translatable("hexcasting.tooltip.spellbook.page_with_name.sealed", Component.literal(String.valueOf(newIdx)).withStyle(ChatFormatting.WHITE), Component.literal(String.valueOf(len)).withStyle(ChatFormatting.WHITE), - Component.literal("").withStyle(stack.getRarity().color, ChatFormatting.ITALIC) + Component.literal("").withStyle(stack.getRarity().getStyleModifier()).withStyle(ChatFormatting.ITALIC) .append(stack.getHoverName()), Component.translatable("hexcasting.tooltip.spellbook.sealed").withStyle(ChatFormatting.GOLD)); } else { component = Component.translatable("hexcasting.tooltip.spellbook.page_with_name", Component.literal(String.valueOf(newIdx)).withStyle(ChatFormatting.WHITE), Component.literal(String.valueOf(len)).withStyle(ChatFormatting.WHITE), - Component.literal("").withStyle(stack.getRarity().color, ChatFormatting.ITALIC) + Component.literal("").withStyle(stack.getRarity().getStyleModifier()).withStyle(ChatFormatting.ITALIC) .append(stack.getHoverName())); } @@ -120,7 +120,9 @@ private void abacus(ServerPlayer sender, InteractionHand hand, ItemStack stack, } var increase = delta < 0; - double num = NBTHelper.getDouble(stack, ItemAbacus.TAG_VALUE); + Double num = stack.get(HexDataComponents.ABACUS_VALUE); + if(num == null) + num = 0.0; double shiftDelta; float pitch; @@ -135,16 +137,16 @@ private void abacus(ServerPlayer sender, InteractionHand hand, ItemStack stack, int scale = Math.max((int) Math.floor(Math.abs(delta)), 1); num += scale * shiftDelta * (increase ? 1 : -1); - NBTHelper.putDouble(stack, ItemAbacus.TAG_VALUE, num); + stack.set(HexDataComponents.ABACUS_VALUE, num); pitch *= (increase ? 1.05f : 0.95f); pitch += (Math.random() - 0.5) * 0.1; sender.level().playSound(null, sender.getX(), sender.getY(), sender.getZ(), HexSounds.ABACUS, SoundSource.PLAYERS, 0.5f, pitch); - var datumTag = HexItems.ABACUS.readIotaTag(stack); - if (datumTag != null) { - var popup = IotaType.getDisplay(datumTag); + var datum = HexItems.ABACUS.readIota(stack); + if (datum != null) { + var popup = datum.display(); sender.displayClientMessage( Component.translatable("hexcasting.tooltip.abacus", popup).withStyle(ChatFormatting.GREEN), true); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/particles/ConjureParticleOptions.java b/Common/src/main/java/at/petrak/hexcasting/common/particles/ConjureParticleOptions.java index 79df382994..f5696edbe4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/particles/ConjureParticleOptions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/particles/ConjureParticleOptions.java @@ -4,10 +4,14 @@ import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import java.util.Locale; @@ -17,50 +21,32 @@ public ParticleType getType() { return HexParticles.CONJURE_PARTICLE; } - @Override - public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeInt(this.color); - } - - @Override - public String writeToString() { - return String.format(Locale.ROOT, "%s %s", this.color); - } - - public static final Deserializer DESERIALIZER = new Deserializer<>() { - @Override - public ConjureParticleOptions fromCommand(ParticleType type, - StringReader reader) throws CommandSyntaxException { - - reader.expect(' '); - var color = reader.readInt(); - return new ConjureParticleOptions(color); - } - - @Override - public ConjureParticleOptions fromNetwork(ParticleType type, - FriendlyByteBuf buf) { - var col = buf.readInt(); - return new ConjureParticleOptions(col); - } - }; - public static class Type extends ParticleType { public Type(boolean pOverrideLimiter) { - super(pOverrideLimiter, DESERIALIZER); + super(pOverrideLimiter); } - public static final Codec CODEC = RecordCodecBuilder.create( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( instance -> instance.group( Codec.INT.fieldOf("color") .forGetter((ConjureParticleOptions o) -> o.color) ) .apply(instance, ConjureParticleOptions::new) ); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.VAR_INT, ConjureParticleOptions::color, + ConjureParticleOptions::new + ); @Override - public Codec codec() { + public MapCodec codec() { return CODEC; } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java index 8f6db1efb0..e989dcbe6e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java @@ -1,18 +1,26 @@ package at.petrak.hexcasting.common.recipe; import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper; +import at.petrak.hexcasting.common.recipe.ingredient.StateIngredients; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; +import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredients; import com.google.gson.JsonObject; -import net.minecraft.core.RegistryAccess; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.HolderLookup; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.GsonHelper; -import net.minecraft.world.Container; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ai.Brain; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; @@ -23,21 +31,15 @@ // God I am a horrible person public record BrainsweepRecipe( - ResourceLocation id, StateIngredient blockIn, BrainsweepeeIngredient entityIn, long mediaCost, BlockState result -) implements Recipe { +) implements Recipe { public boolean matches(BlockState blockIn, Entity victim, ServerLevel level) { return this.blockIn.test(blockIn) && this.entityIn.test(victim, level); } - @Override - public ResourceLocation getId() { - return id; - } - @Override public RecipeType getType() { return HexRecipeStuffRegistry.BRAINSWEEP_TYPE; @@ -51,12 +53,12 @@ public RecipeSerializer getSerializer() { // in order to get this to be a "Recipe" we need to do a lot of bending-over-backwards // to get the implementation to be satisfied even though we never use it @Override - public boolean matches(Container pContainer, Level pLevel) { + public boolean matches(RecipeInput input, Level level) { return false; } @Override - public ItemStack assemble(Container pContainer, RegistryAccess access) { + public ItemStack assemble(RecipeInput input, HolderLookup.Provider registries) { return ItemStack.EMPTY; } @@ -66,7 +68,7 @@ public boolean canCraftInDimensions(int pWidth, int pHeight) { } @Override - public ItemStack getResultItem(RegistryAccess registryAccess) { + public ItemStack getResultItem(HolderLookup.Provider registries) { return ItemStack.EMPTY.copy(); } @@ -84,30 +86,31 @@ public static BlockState copyProperties(BlockState original, BlockState copyTo) } public static class Serializer extends RecipeSerializerBase { - @Override - public @NotNull BrainsweepRecipe fromJson(ResourceLocation recipeID, JsonObject json) { - var blockIn = StateIngredientHelper.deserialize(GsonHelper.getAsJsonObject(json, "blockIn")); - var villagerIn = BrainsweepeeIngredient.deserialize(GsonHelper.getAsJsonObject(json, "entityIn")); - var cost = GsonHelper.getAsInt(json, "cost"); - var result = StateIngredientHelper.readBlockState(GsonHelper.getAsJsonObject(json, "result")); - return new BrainsweepRecipe(recipeID, blockIn, villagerIn, cost, result); - } + public static MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> + inst.group( + StateIngredients.TYPED_CODEC.fieldOf("blockIn").forGetter(BrainsweepRecipe::blockIn), + BrainsweepeeIngredients.TYPED_CODEC.fieldOf("entityIn").forGetter(BrainsweepRecipe::entityIn), + Codec.LONG.fieldOf("cost").forGetter(BrainsweepRecipe::mediaCost), + BlockState.CODEC.fieldOf("result").forGetter(BrainsweepRecipe::result) + ).apply(inst, BrainsweepRecipe::new) + ); + public static StreamCodec STREAM_CODEC = StreamCodec.composite( + StateIngredients.TYPED_STREAM_CODEC, BrainsweepRecipe::blockIn, + BrainsweepeeIngredients.TYPED_STREAM_CODEC, BrainsweepRecipe::entityIn, + ByteBufCodecs.VAR_LONG, BrainsweepRecipe::mediaCost, + ByteBufCodecs.VAR_INT, (recipe) -> Block.getId(recipe.result), + (state, ent, cost, stateId) -> + new BrainsweepRecipe(state, ent, cost, Block.stateById(stateId)) + ); @Override - public void toNetwork(FriendlyByteBuf buf, BrainsweepRecipe recipe) { - recipe.blockIn.write(buf); - recipe.entityIn.wrapWrite(buf); - buf.writeVarLong(recipe.mediaCost); - buf.writeVarInt(Block.getId(recipe.result)); + public @NotNull MapCodec codec() { + return CODEC; } @Override - public @NotNull BrainsweepRecipe fromNetwork(ResourceLocation recipeID, FriendlyByteBuf buf) { - var blockIn = StateIngredientHelper.read(buf); - var brainsweepeeIn = BrainsweepeeIngredient.read(buf); - var cost = buf.readVarLong(); - var result = Block.stateById(buf.readVarInt()); - return new BrainsweepRecipe(recipeID, blockIn, brainsweepeeIn, cost, result); + public @NotNull StreamCodec streamCodec() { + return STREAM_CODEC; } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java index 570d6631be..52797baf6c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java @@ -1,19 +1,18 @@ package at.petrak.hexcasting.common.recipe; -import at.petrak.hexcasting.api.item.IotaHolderItem; -import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.common.items.storage.ItemSpellbook; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; -import net.minecraft.core.RegistryAccess; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.*; import org.jetbrains.annotations.NotNull; +import java.util.Optional; + public class SealSpellbookRecipe extends ShapelessRecipe { public static final SimpleCraftingRecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(SealSpellbookRecipe::new); @@ -21,7 +20,7 @@ public class SealSpellbookRecipe extends ShapelessRecipe { private static ItemStack getSealedStack() { ItemStack output = new ItemStack(HexItems.SPELLBOOK); ItemSpellbook.setSealed(output, true); - NBTHelper.putString(output, IotaHolderItem.TAG_OVERRIDE_VISUALLY, "any"); + output.set(HexDataComponents.VISUAL_OVERRIDE, Optional.empty()); return output; } @@ -32,15 +31,15 @@ private static NonNullList createIngredients() { return ingredients; } - public SealSpellbookRecipe(ResourceLocation id, CraftingBookCategory category) { - super(id, "", category, getSealedStack(), createIngredients()); + public SealSpellbookRecipe(CraftingBookCategory category) { + super("", category, getSealedStack(), createIngredients()); } @Override - public @NotNull ItemStack assemble(CraftingContainer inv, RegistryAccess access) { + public @NotNull ItemStack assemble(CraftingInput inv, HolderLookup.RegistryLookup.@NotNull Provider registryProvider) { ItemStack out = ItemStack.EMPTY; - for (int i = 0; i < inv.getContainerSize(); i++) { + for (int i = 0; i < inv.size(); i++) { var stack = inv.getItem(i); if (stack.is(HexItems.SPELLBOOK)) { out = stack.copy(); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java index 365d68fe59..0da1e86001 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java @@ -3,16 +3,15 @@ import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.common.items.storage.ItemFocus; import at.petrak.hexcasting.common.items.storage.ItemSpellbook; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; +import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.StringRepresentable; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.CraftingBookCategory; -import net.minecraft.world.item.crafting.CustomRecipe; -import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; @@ -26,8 +25,8 @@ public class SealThingsRecipe extends CustomRecipe { public static final SimpleCraftingRecipeSerializer SPELLBOOK_SERIALIZER = new SimpleCraftingRecipeSerializer<>(SealThingsRecipe::spellbook); - public SealThingsRecipe(ResourceLocation id, CraftingBookCategory category, Sealee sealee) { - super(id, category); + public SealThingsRecipe(CraftingBookCategory category, Sealee sealee) { + super(category); this.sealee = sealee; } @@ -38,11 +37,11 @@ public boolean canCraftInDimensions(int width, int height) { } @Override - public boolean matches(CraftingContainer container, Level level) { + public boolean matches(CraftingInput container, Level level) { boolean foundComb = false; boolean foundSealee = false; - for (int i = 0; i < container.getContainerSize(); i++) { + for (int i = 0; i < container.size(); i++) { var stack = container.getItem(i); if (this.sealee.isCorrectSealee(stack)) { if (foundSealee) return false; @@ -57,10 +56,10 @@ public boolean matches(CraftingContainer container, Level level) { } @Override - public ItemStack assemble(CraftingContainer inv, RegistryAccess registryAccess) { + public @NotNull ItemStack assemble(CraftingInput inv, HolderLookup.RegistryLookup.@NotNull Provider registryProvider) { ItemStack sealee = ItemStack.EMPTY; - for (int i = 0; i < inv.getContainerSize(); i++) { + for (int i = 0; i < inv.size(); i++) { var stack = inv.getItem(i); if (this.sealee.isCorrectSealee(stack)) { sealee = stack.copy(); @@ -84,12 +83,12 @@ public ItemStack assemble(CraftingContainer inv, RegistryAccess registryAccess) }; } - public static SealThingsRecipe focus(ResourceLocation id, CraftingBookCategory category) { - return new SealThingsRecipe(id, category, Sealee.FOCUS); + public static SealThingsRecipe focus(CraftingBookCategory category) { + return new SealThingsRecipe(category, Sealee.FOCUS); } - public static SealThingsRecipe spellbook(ResourceLocation id, CraftingBookCategory category) { - return new SealThingsRecipe(id, category, Sealee.SPELLBOOK); + public static SealThingsRecipe spellbook(CraftingBookCategory category) { + return new SealThingsRecipe(category, Sealee.SPELLBOOK); } public enum Sealee implements StringRepresentable { @@ -104,10 +103,10 @@ public String getSerializedName() { public boolean isCorrectSealee(ItemStack stack) { return switch (this) { case FOCUS -> stack.is(HexItems.FOCUS) - && HexItems.FOCUS.readIotaTag(stack) != null + && stack.has(HexDataComponents.IOTA) && !ItemFocus.isSealed(stack); case SPELLBOOK -> stack.is(HexItems.SPELLBOOK) - && HexItems.SPELLBOOK.readIotaTag(stack) != null + && HexItems.SPELLBOOK.readIota(stack) != null && !ItemSpellbook.isSealed(stack); }; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredient.java index cd2cca2268..ff86ad8923 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredient.java @@ -15,15 +15,14 @@ // https://github.com/VazkiiMods/Botania/blob/1.18.x/Common/src/main/java/vazkii/botania/api/recipe/StateIngredient.java // good artists copy and all public interface StateIngredient extends Predicate { + + StateIngredientType getType(); + @Override boolean test(BlockState state); BlockState pick(Random random); - JsonObject serialize(); - - void write(FriendlyByteBuf buffer); - List getDisplayedStacks(); /** diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlock.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlock.java index ac9febaf7f..c3b0f9aae1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlock.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlock.java @@ -1,9 +1,12 @@ package at.petrak.hexcasting.common.recipe.ingredient; -import com.google.gson.JsonObject; -import net.minecraft.core.Registry; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; @@ -20,6 +23,11 @@ public StateIngredientBlock(Block block) { this.block = block; } + @Override + public StateIngredientType getType() { + return StateIngredients.BLOCK_TYPE; + } + @Override public boolean test(BlockState blockState) { return block == blockState.getBlock(); @@ -30,20 +38,6 @@ public BlockState pick(Random random) { return block.defaultBlockState(); } - @Override - public JsonObject serialize() { - JsonObject object = new JsonObject(); - object.addProperty("type", "block"); - object.addProperty("block", BuiltInRegistries.BLOCK.getKey(block).toString()); - return object; - } - - @Override - public void write(FriendlyByteBuf buffer) { - buffer.writeVarInt(1); - buffer.writeVarInt(BuiltInRegistries.BLOCK.getId(block)); - } - @Override public List getDisplayedStacks() { if (block.asItem() == Items.AIR) { @@ -81,4 +75,25 @@ public int hashCode() { public String toString() { return "StateIngredientBlock{" + block + "}"; } + + + public static class Type implements StateIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + BuiltInRegistries.BLOCK.byNameCodec().fieldOf("block").forGetter(StateIngredientBlock::getBlock) + ).apply(instance, StateIngredientBlock::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.registry(Registries.BLOCK), StateIngredientBlock::getBlock, + StateIngredientBlock::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlockState.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlockState.java index c1018f47df..61066ff647 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlockState.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlockState.java @@ -1,10 +1,12 @@ package at.petrak.hexcasting.common.recipe.ingredient; -import com.google.common.collect.ImmutableMap; -import com.google.gson.JsonObject; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; @@ -21,6 +23,11 @@ public StateIngredientBlockState(BlockState state) { this.state = state; } + @Override + public StateIngredientType getType() { + return StateIngredients.BLOCK_STATE; + } + @Override public boolean test(BlockState blockState) { return this.state == blockState; @@ -31,19 +38,6 @@ public BlockState pick(Random random) { return state; } - @Override - public JsonObject serialize() { - JsonObject object = StateIngredientHelper.serializeBlockState(state); - object.addProperty("type", "state"); - return object; - } - - @Override - public void write(FriendlyByteBuf buffer) { - buffer.writeVarInt(2); - buffer.writeVarInt(Block.getId(state)); - } - @Override public List getDisplayedStacks() { Block block = state.getBlock(); @@ -56,7 +50,7 @@ public List getDisplayedStacks() { @Nullable @Override public List descriptionTooltip() { - ImmutableMap, Comparable> map = state.getValues(); + Map, Comparable> map = state.getValues(); if (map.isEmpty()) { return StateIngredient.super.descriptionTooltip(); } @@ -100,4 +94,25 @@ public int hashCode() { public String toString() { return "StateIngredientBlockState{" + state + "}"; } + + + public static class Type implements StateIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + BlockState.CODEC.fieldOf("state").forGetter(StateIngredientBlockState::getState) + ).apply(instance, StateIngredientBlockState::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_INT.map(Block::stateById, Block::getId), StateIngredientBlockState::getState, + StateIngredientBlockState::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlocks.java index eb0291709f..d203fd8fc9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlocks.java @@ -3,9 +3,15 @@ import com.google.common.collect.ImmutableSet; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; @@ -25,6 +31,11 @@ public StateIngredientBlocks(Collection blocks) { this.blocks = ImmutableSet.copyOf(blocks); } + @Override + public StateIngredientType getType() { + return StateIngredients.BLOCKS; + } + @Override public boolean test(BlockState state) { return blocks.contains(state.getBlock()); @@ -35,28 +46,6 @@ public BlockState pick(Random random) { return blocks.asList().get(random.nextInt(blocks.size())).defaultBlockState(); } - @Override - public JsonObject serialize() { - JsonObject object = new JsonObject(); - object.addProperty("type", "blocks"); - JsonArray array = new JsonArray(); - for (Block block : blocks) { - array.add(BuiltInRegistries.BLOCK.getKey(block).toString()); - } - object.add("blocks", array); - return object; - } - - @Override - public void write(FriendlyByteBuf buffer) { - List blocks = getBlocks(); - buffer.writeVarInt(0); - buffer.writeVarInt(blocks.size()); - for (Block block : blocks) { - buffer.writeVarInt(BuiltInRegistries.BLOCK.getId(block)); - } - } - @Override public List getDisplayedStacks() { return blocks.stream() @@ -95,4 +84,25 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(blocks); } + + + public static class Type implements StateIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + BuiltInRegistries.BLOCK.byNameCodec().listOf().fieldOf("block").forGetter(StateIngredientBlocks::getBlocks) + ).apply(instance, StateIngredientBlocks::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.registry(Registries.BLOCK).apply(ByteBufCodecs.list()), StateIngredientBlocks::getBlocks, + StateIngredientBlocks::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientHelper.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientHelper.java deleted file mode 100644 index 97e09d9d36..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientHelper.java +++ /dev/null @@ -1,167 +0,0 @@ -package at.petrak.hexcasting.common.recipe.ingredient; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.mojang.serialization.Dynamic; -import com.mojang.serialization.JsonOps; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.util.GsonHelper; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.*; - -public class StateIngredientHelper { - public static StateIngredient of(Block block) { - return new StateIngredientBlock(block); - } - - public static StateIngredient of(BlockState state) { - return new StateIngredientBlockState(state); - } - - public static StateIngredient of(TagKey tag) { - return of(tag.location()); - } - - public static StateIngredient of(ResourceLocation id) { - return new StateIngredientTag(id); - } - - public static StateIngredient of(Collection blocks) { - return new StateIngredientBlocks(blocks); - } - - public static StateIngredient tagExcluding(TagKey tag, StateIngredient... excluded) { - return new StateIngredientTagExcluding(tag.location(), List.of(excluded)); - } - - public static StateIngredient deserialize(JsonObject object) { - switch (GsonHelper.getAsString(object, "type")) { - case "tag": - return new StateIngredientTag(new ResourceLocation(GsonHelper.getAsString(object, "tag"))); - case "block": - return new StateIngredientBlock( - BuiltInRegistries.BLOCK.get(new ResourceLocation(GsonHelper.getAsString(object, "block")))); - case "state": - return new StateIngredientBlockState(readBlockState(object)); - case "blocks": - List blocks = new ArrayList<>(); - for (JsonElement element : GsonHelper.getAsJsonArray(object, "blocks")) { - blocks.add(BuiltInRegistries.BLOCK.get(new ResourceLocation(element.getAsString()))); - } - return new StateIngredientBlocks(blocks); - case "tag_excluding": - ResourceLocation tag = new ResourceLocation(GsonHelper.getAsString(object, "tag")); - List ingr = new ArrayList<>(); - for (JsonElement element : GsonHelper.getAsJsonArray(object, "exclude")) { - ingr.add(deserialize(GsonHelper.convertToJsonObject(element, "exclude entry"))); - } - return new StateIngredientTagExcluding(tag, ingr); - default: - throw new JsonParseException("Unknown type!"); - } - } - - /** - * Deserializes a state ingredient, but removes air from its data, - * and returns null if the ingredient only matched air. - */ - @Nullable - public static StateIngredient tryDeserialize(JsonObject object) { - StateIngredient ingr = deserialize(object); - if (ingr instanceof StateIngredientTag sit) { - if (sit.resolve().findAny().isEmpty()) { - return null; - } - return ingr; - } - if (ingr instanceof StateIngredientBlock || ingr instanceof StateIngredientBlockState) { - if (ingr.test(Blocks.AIR.defaultBlockState())) { - return null; - } - } else if (ingr instanceof StateIngredientBlocks sib) { - Collection blocks = sib.blocks; - List list = new ArrayList<>(blocks); - if (list.removeIf(b -> b == Blocks.AIR)) { - if (list.size() == 0) { - return null; - } - return of(list); - } - } - return ingr; - } - - public static StateIngredient read(FriendlyByteBuf buffer) { - switch (buffer.readVarInt()) { - case 0: - int count = buffer.readVarInt(); - Set set = new HashSet<>(); - for (int i = 0; i < count; i++) { - int id = buffer.readVarInt(); - Block block = BuiltInRegistries.BLOCK.byId(id); - set.add(block); - } - return new StateIngredientBlocks(set); - case 1: - return new StateIngredientBlock(BuiltInRegistries.BLOCK.byId(buffer.readVarInt())); - case 2: - return new StateIngredientBlockState(Block.stateById(buffer.readVarInt())); - default: - throw new IllegalArgumentException("Unknown input discriminator!"); - } - } - - /** - * Writes data about the block state to the provided json object. - */ - public static JsonObject serializeBlockState(BlockState state) { - CompoundTag nbt = NbtUtils.writeBlockState(state); - renameTag(nbt, "Name", "name"); - renameTag(nbt, "Properties", "properties"); - Dynamic dyn = new Dynamic<>(NbtOps.INSTANCE, nbt); - return dyn.convert(JsonOps.INSTANCE).getValue().getAsJsonObject(); - } - - /** - * Reads the block state from the provided json object. - */ - public static BlockState readBlockState(JsonObject object) { - CompoundTag nbt = (CompoundTag) new Dynamic<>(JsonOps.INSTANCE, object).convert(NbtOps.INSTANCE).getValue(); - renameTag(nbt, "name", "Name"); - renameTag(nbt, "properties", "Properties"); - String name = nbt.getString("Name"); - ResourceLocation id = ResourceLocation.tryParse(name); - if (id == null || !BuiltInRegistries.BLOCK.getOptional(id).isPresent()) { - throw new IllegalArgumentException("Invalid or unknown block ID: " + name); - } - return NbtUtils.readBlockState(BuiltInRegistries.BLOCK.asLookup(), nbt); - } - - @Deprecated - @Nonnull - public static List toStackList(StateIngredient input) { - return input.getDisplayedStacks(); - } - - private static void renameTag(CompoundTag tag, String from, String to) { - var t = tag.get(from); - if (t != null) { - tag.remove(from); - tag.put(to, t); - } - } -} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTag.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTag.java index 5850bd1bf2..8e1d4f3c43 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTag.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTag.java @@ -2,10 +2,15 @@ import com.google.common.collect.ImmutableSet; import com.google.gson.JsonObject; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.ItemStack; @@ -23,9 +28,14 @@ public class StateIngredientTag extends StateIngredientBlocks { private final TagKey tag; - public StateIngredientTag(ResourceLocation tag) { + public StateIngredientTag(TagKey tag) { super(ImmutableSet.of()); - this.tag = TagKey.create(Registries.BLOCK, tag); + this.tag = tag; + } + + @Override + public StateIngredientType getType() { + return StateIngredients.TAG; } public Stream resolve() { @@ -47,14 +57,6 @@ public BlockState pick(Random random) { return values.get(random.nextInt(values.size())).defaultBlockState(); } - @Override - public JsonObject serialize() { - JsonObject object = new JsonObject(); - object.addProperty("type", "tag"); - object.addProperty("tag", tag.location().toString()); - return object; - } - @Override public List getDisplayedStacks() { return resolve() @@ -74,8 +76,8 @@ public List getDisplayed() { return resolve().map(Block::defaultBlockState).collect(Collectors.toList()); } - public ResourceLocation getTagId() { - return tag.location(); + public TagKey getTag() { + return tag; } @Override @@ -98,4 +100,25 @@ public int hashCode() { public String toString() { return "StateIngredientTag{" + tag + "}"; } + + + public static class Type implements StateIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + TagKey.hashedCodec(Registries.BLOCK).fieldOf("tag").forGetter(StateIngredientTag::getTag) + ).apply(instance, StateIngredientTag::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceLocation.STREAM_CODEC.map(id -> TagKey.create(Registries.BLOCK, id), TagKey::location), StateIngredientTag::getTag, + StateIngredientTag::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTagExcluding.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTagExcluding.java index b77dd7ddc3..3a98e24de3 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTagExcluding.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTagExcluding.java @@ -1,8 +1,13 @@ package at.petrak.hexcasting.common.recipe.ingredient; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; @@ -16,11 +21,16 @@ public class StateIngredientTagExcluding extends StateIngredientTag { private final List excludes; - public StateIngredientTagExcluding(ResourceLocation id, Collection excludes) { - super(id); + public StateIngredientTagExcluding(TagKey tag, Collection excludes) { + super(tag); this.excludes = List.copyOf(excludes); } + @Override + public StateIngredientType getType() { + return StateIngredients.TAG_EXCLUDING; + } + @Override public boolean test(BlockState state) { if (!super.test(state)) { @@ -57,19 +67,6 @@ public int hashCode() { return super.hashCode(); } - @Override - public JsonObject serialize() { - JsonObject object = new JsonObject(); - object.addProperty("type", "tag_excluding"); - object.addProperty("tag", getTagId().toString()); - JsonArray array = new JsonArray(); - for (StateIngredient exclude : excludes) { - array.add(exclude.serialize()); - } - object.add("exclude", array); - return object; - } - @Override public List getDisplayedStacks() { return getBlocks().stream() @@ -92,4 +89,30 @@ public List getDisplayed() { .filter(this::isNotExcluded) .toList(); } + + public List getExcludes() { + return excludes; + } + + public static class Type implements StateIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + TagKey.hashedCodec(Registries.BLOCK).fieldOf("tag").forGetter(StateIngredientTagExcluding::getTag), + StateIngredients.TYPED_CODEC.listOf().fieldOf("excludes").forGetter(StateIngredientTagExcluding::getExcludes) + ).apply(instance, StateIngredientTagExcluding::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceLocation.STREAM_CODEC.map(id -> TagKey.create(Registries.BLOCK, id), TagKey::location), StateIngredientTagExcluding::getTag, + StateIngredients.TYPED_STREAM_CODEC.apply(ByteBufCodecs.list()), StateIngredientTagExcluding::getExcludes, + StateIngredientTagExcluding::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientType.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientType.java new file mode 100644 index 0000000000..33d0ecfd8b --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientType.java @@ -0,0 +1,12 @@ +package at.petrak.hexcasting.common.recipe.ingredient; + +import com.mojang.serialization.MapCodec; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; + +public interface StateIngredientType { + + MapCodec codec(); + + StreamCodec streamCodec(); +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredients.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredients.java new file mode 100644 index 0000000000..6c39c20f24 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredients.java @@ -0,0 +1,95 @@ +package at.petrak.hexcasting.common.recipe.ingredient; + +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.common.lib.HexRegistries; +import at.petrak.hexcasting.xplat.IXplatAbstractions; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +import java.util.List; +import java.util.Random; +import java.util.function.BiConsumer; + +public class StateIngredients { + public static final Codec TYPED_CODEC = Codec.lazyInitialized(() -> IXplatAbstractions.INSTANCE + .getStateIngredientRegistry() + .byNameCodec() + .dispatch("type", StateIngredient::getType, StateIngredientType::codec)); + public static final StreamCodec TYPED_STREAM_CODEC = ByteBufCodecs + .registry(HexRegistries.STATE_INGREDIENT) + .dispatch(StateIngredient::getType, StateIngredientType::streamCodec); + + public static final StateIngredientType BLOCK_TYPE = new StateIngredientBlock.Type(); + public static final StateIngredientType BLOCK_STATE = new StateIngredientBlockState.Type(); + public static final StateIngredientType BLOCKS = new StateIngredientBlocks.Type(); + public static final StateIngredientType TAG = new StateIngredientTag.Type(); + public static final StateIngredientType TAG_EXCLUDING = new StateIngredientTagExcluding.Type(); + + public static final StateIngredientType NONE_TYPE = new StateIngredientType<>() { + @Override + public MapCodec codec() { + return MapCodec.unit(NONE); + } + + @Override + public StreamCodec streamCodec() { + return StreamCodec.unit(NONE); + } + }; + + public static final StateIngredient NONE = new StateIngredient() { + @Override + public boolean test(BlockState state) { + return true; + } + + @Override + public BlockState pick(Random random) { + throw new UnsupportedOperationException("Should never try to pick from NONE state ingredient"); + } + + @Override + public StateIngredientType getType() { + return NONE_TYPE; + } + + @Override + public List getDisplayedStacks() { + return List.of(); + } + + @Override + public List getDisplayed() { + return List.of(); + } + }; + + public static void register(BiConsumer, ResourceLocation> r) { + r.accept(NONE_TYPE, HexAPI.modLoc("none")); + r.accept(BLOCK_TYPE, HexAPI.modLoc("block")); + r.accept(BLOCK_STATE, HexAPI.modLoc("state")); + r.accept(BLOCKS, HexAPI.modLoc("blocks")); + r.accept(TAG, HexAPI.modLoc("tag")); + r.accept(TAG_EXCLUDING, HexAPI.modLoc("tag_excluding")); + } + + public static StateIngredient of(Block block) { + return new StateIngredientBlock(block); + } + + public static StateIngredient of(BlockState state) { + return new StateIngredientBlockState(state); + } + + public static StateIngredient of(TagKey tag) { + return new StateIngredientTag(tag); + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java index 6e777cc2d0..16cc965a18 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java @@ -21,21 +21,15 @@ // // .equals must make sense public abstract class BrainsweepeeIngredient { + + public abstract BrainsweepeeIngredientType getType(); + public abstract boolean test(Entity entity, ServerLevel level); public abstract Component getName(); public abstract List getTooltip(boolean advanced); - public abstract JsonObject serialize(); - - public void wrapWrite(FriendlyByteBuf buf) { - buf.writeEnum(this.ingrType()); - this.write(buf); - } - - public abstract void write(FriendlyByteBuf buf); - /** * For the benefit of showing to the client, return an example of the entity. *

@@ -44,41 +38,6 @@ public void wrapWrite(FriendlyByteBuf buf) { @Nullable public abstract Entity exampleEntity(Level level); - public abstract Type ingrType(); - - public abstract String getSomeKindOfReasonableIDForEmi(); - - public static BrainsweepeeIngredient read(FriendlyByteBuf buf) { - var type = buf.readEnum(Type.class); - return switch (type) { - case VILLAGER -> VillagerIngredient.read(buf); - case ENTITY_TYPE -> EntityTypeIngredient.read(buf); - case ENTITY_TAG -> EntityTagIngredient.read(buf); - }; - } - - public static BrainsweepeeIngredient deserialize(JsonObject json) { - var typestr = GsonHelper.getAsString(json, "type"); - var type = Type.valueOf(typestr.toUpperCase(Locale.ROOT)); - return switch (type) { - case VILLAGER -> VillagerIngredient.deserialize(json); - case ENTITY_TYPE -> EntityTypeIngredient.deserialize(json); - case ENTITY_TAG -> EntityTagIngredient.deserialize(json); - }; - } - - // TODO: make this a registry? - public enum Type implements StringRepresentable { - VILLAGER, - ENTITY_TYPE, - ENTITY_TAG; - - @Override - public String getSerializedName() { - return this.name().toLowerCase(Locale.ROOT); - } - } - public static Component getModNameComponent(String namespace) { String mod = IXplatAbstractions.INSTANCE.getModName(namespace); return Component.literal(mod).withStyle(ChatFormatting.BLUE, ChatFormatting.ITALIC); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredientType.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredientType.java new file mode 100644 index 0000000000..1b493d7141 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredientType.java @@ -0,0 +1,12 @@ +package at.petrak.hexcasting.common.recipe.ingredient.brainsweep; + +import com.mojang.serialization.MapCodec; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; + +public interface BrainsweepeeIngredientType { + + MapCodec codec(); + + StreamCodec streamCodec(); +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java new file mode 100644 index 0000000000..d1e4674fe7 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java @@ -0,0 +1,107 @@ +package at.petrak.hexcasting.common.recipe.ingredient.brainsweep; + +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.common.lib.HexRegistries; +import at.petrak.hexcasting.common.recipe.ingredient.*; +import at.petrak.hexcasting.xplat.IXplatAbstractions; +import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.npc.VillagerProfession; +import net.minecraft.world.entity.npc.VillagerType; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.Random; +import java.util.function.BiConsumer; + +public class BrainsweepeeIngredients { + public static final Codec TYPED_CODEC = Codec.lazyInitialized(() -> IXplatAbstractions.INSTANCE + .getBrainsweepeeIngredientRegistry() + .byNameCodec() + .dispatch("type", BrainsweepeeIngredient::getType, BrainsweepeeIngredientType::codec)); + public static final StreamCodec TYPED_STREAM_CODEC = ByteBufCodecs + .registry(HexRegistries.BRAINSWEEPEE_INGREDIENT) + .dispatch(BrainsweepeeIngredient::getType, BrainsweepeeIngredientType::streamCodec); + + public static final BrainsweepeeIngredientType ENTITY_TYPE = new EntityTypeIngredient.Type(); + public static final BrainsweepeeIngredientType TAG = new EntityTagIngredient.Type(); + public static final BrainsweepeeIngredientType VILLAGER = new VillagerIngredient.Type(); + + public static final BrainsweepeeIngredientType NONE_TYPE = new BrainsweepeeIngredientType<>() { + @Override + public MapCodec codec() { + return MapCodec.unit(NONE); + } + + @Override + public StreamCodec streamCodec() { + return StreamCodec.unit(NONE); + } + }; + + public static final BrainsweepeeIngredient NONE = new BrainsweepeeIngredient() { + + @Override + public BrainsweepeeIngredientType getType() { + return NONE_TYPE; + } + + @Override + public boolean test(Entity entity, ServerLevel level) { + return false; + } + + @Override + public Component getName() { + return Component.literal("none"); + } + + @Override + public List getTooltip(boolean advanced) { + return List.of(); + } + + @Override + public @Nullable Entity exampleEntity(Level level) { + return null; + } + }; + + public static void register(BiConsumer, ResourceLocation> r) { + r.accept(NONE_TYPE, HexAPI.modLoc("none")); + r.accept(ENTITY_TYPE, HexAPI.modLoc("entity_type")); + r.accept(TAG, HexAPI.modLoc("entity_tag")); + r.accept(VILLAGER, HexAPI.modLoc("villager")); + } + + public static BrainsweepeeIngredient of(EntityType entityType) { + return new EntityTypeIngredient(entityType); + } + + public static BrainsweepeeIngredient of(TagKey> tagKey) { + return new EntityTagIngredient(tagKey); + } + + public static BrainsweepeeIngredient of( + @Nullable VillagerProfession profession, + @Nullable VillagerType biome, + int minLevel + ) { + return new VillagerIngredient(profession, biome, minLevel); + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java index cb6b0a0912..978b0d4cce 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java @@ -1,17 +1,17 @@ package at.petrak.hexcasting.common.recipe.ingredient.brainsweep; -import com.google.gson.JsonObject; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.client.resources.language.I18n; -import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.TagKey; -import net.minecraft.util.GsonHelper; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.Level; @@ -27,6 +27,15 @@ public EntityTagIngredient(TagKey> tag) { this.entityTypeTag = tag; } + @Override + public BrainsweepeeIngredientType getType() { + return BrainsweepeeIngredients.TAG; + } + + public TagKey> getTag() { + return entityTypeTag; + } + @Override public boolean test(Entity entity, ServerLevel level) { return entity.getType().is(this.entityTypeTag); @@ -79,49 +88,6 @@ public Entity exampleEntity(Level level) { } } - @Override - public JsonObject serialize() { - var obj = new JsonObject(); - obj.addProperty("type", Type.ENTITY_TAG.getSerializedName()); - - obj.addProperty("tag", this.entityTypeTag.location().toString()); - - return obj; - } - - @Override - public void write(FriendlyByteBuf buf) { - buf.writeResourceLocation(this.entityTypeTag.location()); - } - - public static EntityTagIngredient deserialize(JsonObject obj) { - var tagLoc = ResourceLocation.tryParse(GsonHelper.getAsString(obj, "tag")); - if (tagLoc == null) { - throw new IllegalArgumentException("unknown tag " + obj); - } - var type = TagKey.create(Registries.ENTITY_TYPE, tagLoc); - return new EntityTagIngredient(type); - } - - public static EntityTagIngredient read(FriendlyByteBuf buf) { - var typeLoc = buf.readResourceLocation(); - var type = TagKey.create(Registries.ENTITY_TYPE, typeLoc); - return new EntityTagIngredient(type); - } - - @Override - public Type ingrType() { - return Type.ENTITY_TAG; - } - - @Override - public String getSomeKindOfReasonableIDForEmi() { - var resloc = this.entityTypeTag.location(); - return resloc.getNamespace() - + "//" - + resloc.getPath(); - } - @Override public boolean equals(Object o) { if (this == o) return true; @@ -134,4 +100,25 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(this.entityTypeTag); } + + + public static class Type implements BrainsweepeeIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + TagKey.hashedCodec(Registries.ENTITY_TYPE).fieldOf("tag").forGetter(EntityTagIngredient::getTag) + ).apply(instance, EntityTagIngredient::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceLocation.STREAM_CODEC.map(id -> TagKey.create(Registries.ENTITY_TYPE, id), TagKey::location), EntityTagIngredient::getTag, + EntityTagIngredient::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java index f510c17d2e..68383eda31 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java @@ -1,10 +1,15 @@ package at.petrak.hexcasting.common.recipe.ingredient.brainsweep; import com.google.gson.JsonObject; -import net.minecraft.core.Registry; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.GsonHelper; @@ -22,6 +27,15 @@ public EntityTypeIngredient(EntityType entityType) { this.entityType = entityType; } + @Override + public BrainsweepeeIngredientType getType() { + return BrainsweepeeIngredients.ENTITY_TYPE; + } + + public EntityType getEntityType() { + return entityType; + } + @Override public boolean test(Entity entity, ServerLevel level) { // entity types are singletons @@ -46,46 +60,6 @@ public Entity exampleEntity(Level level) { return this.entityType.create(level); } - @Override - public JsonObject serialize() { - var obj = new JsonObject(); - obj.addProperty("type", Type.ENTITY_TYPE.getSerializedName()); - obj.addProperty("entityType", BuiltInRegistries.ENTITY_TYPE.getKey(this.entityType).toString()); - - return obj; - } - - @Override - public void write(FriendlyByteBuf buf) { - buf.writeVarInt(BuiltInRegistries.ENTITY_TYPE.getId(this.entityType)); - } - - public static EntityTypeIngredient deserialize(JsonObject obj) { - var typeLoc = ResourceLocation.tryParse(GsonHelper.getAsString(obj, "entityType")); - if (typeLoc == null || !BuiltInRegistries.ENTITY_TYPE.containsKey(typeLoc)) { - throw new IllegalArgumentException("unknown entity type " + typeLoc); - } - return new EntityTypeIngredient(BuiltInRegistries.ENTITY_TYPE.get(typeLoc)); - } - - public static EntityTypeIngredient read(FriendlyByteBuf buf) { - var tyId = buf.readVarInt(); - return new EntityTypeIngredient(BuiltInRegistries.ENTITY_TYPE.byId(tyId)); - } - - @Override - public Type ingrType() { - return Type.ENTITY_TYPE; - } - - @Override - public String getSomeKindOfReasonableIDForEmi() { - var resloc = BuiltInRegistries.ENTITY_TYPE.getKey(this.entityType); - return resloc.getNamespace() - + "//" - + resloc.getPath(); - } - @Override public boolean equals(Object o) { if (this == o) return true; @@ -98,4 +72,25 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(entityType); } + + + public static class Type implements BrainsweepeeIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + BuiltInRegistries.ENTITY_TYPE.byNameCodec().fieldOf("entityType").forGetter(EntityTypeIngredient::getEntityType) + ).apply(instance, EntityTypeIngredient::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.registry(Registries.ENTITY_TYPE), EntityTypeIngredient::getEntityType, + EntityTypeIngredient::new + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java index d3cf2e63ef..ab91129415 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java @@ -1,13 +1,20 @@ package at.petrak.hexcasting.common.recipe.ingredient.brainsweep; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.ChatFormatting; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.GsonHelper; @@ -22,6 +29,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; /** * Special case for villagers so we can have biome/profession/level reqs @@ -41,6 +49,23 @@ public VillagerIngredient( this.minLevel = minLevel; } + @Override + public BrainsweepeeIngredientType getType() { + return BrainsweepeeIngredients.VILLAGER; + } + + public @Nullable VillagerProfession getProfession() { + return profession; + } + + public @Nullable VillagerType getBiome() { + return biome; + } + + public int getMinLevel() { + return minLevel; + } + @Override public boolean test(Entity entity, ServerLevel level) { if (!(entity instanceof Villager villager)) return false; @@ -149,97 +174,6 @@ public Component getName() { return component; } - @Override - public JsonObject serialize() { - var obj = new JsonObject(); - obj.addProperty("type", Type.VILLAGER.getSerializedName()); - - if (this.profession != null) { - obj.addProperty("profession", this.profession.toString()); - } - if (this.biome != null) { - obj.addProperty("biome", this.biome.toString()); - } - obj.addProperty("minLevel", this.minLevel); - return obj; - } - - @Override - public void write(FriendlyByteBuf buf) { - if (this.profession != null) { - buf.writeVarInt(1); - buf.writeVarInt(BuiltInRegistries.VILLAGER_PROFESSION.getId(this.profession)); - } else { - buf.writeVarInt(0); - } - if (this.biome != null) { - buf.writeVarInt(1); - buf.writeVarInt(BuiltInRegistries.VILLAGER_TYPE.getId(this.biome)); - } else { - buf.writeVarInt(0); - } - buf.writeInt(this.minLevel); - } - - public static VillagerIngredient deserialize(JsonObject json) { - VillagerProfession profession = null; - if (json.has("profession") && !json.get("profession").isJsonNull()) { - profession = BuiltInRegistries.VILLAGER_PROFESSION.get(new ResourceLocation(GsonHelper.getAsString(json, - "profession"))); - } - VillagerType biome = null; - if (json.has("biome") && !json.get("biome").isJsonNull()) { - biome = BuiltInRegistries.VILLAGER_TYPE.get(new ResourceLocation(GsonHelper.getAsString(json, "biome"))); - } - int minLevel = GsonHelper.getAsInt(json, "minLevel"); - return new VillagerIngredient(profession, biome, minLevel); - } - - public static VillagerIngredient read(FriendlyByteBuf buf) { - VillagerProfession profession = null; - var hasProfession = buf.readVarInt(); - if (hasProfession != 0) { - profession = BuiltInRegistries.VILLAGER_PROFESSION.byId(buf.readVarInt()); - } - VillagerType biome = null; - var hasBiome = buf.readVarInt(); - if (hasBiome != 0) { - biome = BuiltInRegistries.VILLAGER_TYPE.byId(buf.readVarInt()); - } - int minLevel = buf.readInt(); - return new VillagerIngredient(profession, biome, minLevel); - } - - @Override - public Type ingrType() { - return Type.VILLAGER; - } - - @Override - public String getSomeKindOfReasonableIDForEmi() { - var bob = new StringBuilder(); - if (this.profession != null) { - var profLoc = BuiltInRegistries.VILLAGER_PROFESSION.getKey(this.profession); - bob.append(profLoc.getNamespace()) - .append("//") - .append(profLoc.getPath()); - } else { - bob.append("null"); - } - bob.append("_"); - if (this.biome != null) { - var biomeLoc = BuiltInRegistries.VILLAGER_TYPE.getKey(this.biome); - bob.append(biomeLoc.getNamespace()) - .append("//") - .append(biomeLoc.getPath()); - } else { - bob.append("null"); - } - - bob.append(this.minLevel); - return bob.toString(); - } - @Override public boolean equals(Object o) { if (this == o) return true; @@ -253,4 +187,29 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(profession, biome, minLevel); } + + + public static class Type implements BrainsweepeeIngredientType { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + BuiltInRegistries.VILLAGER_PROFESSION.byNameCodec().optionalFieldOf("profession").forGetter(ing -> Optional.ofNullable(ing.getProfession())), + BuiltInRegistries.VILLAGER_TYPE.byNameCodec().optionalFieldOf("biome").forGetter(ing -> Optional.ofNullable(ing.getBiome())), + Codec.INT.fieldOf("minLevel").forGetter(VillagerIngredient::getMinLevel) + ).apply(instance, (a, b, c) -> new VillagerIngredient(a.orElse(null), b.orElse(null), c))); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.optional(ByteBufCodecs.registry(Registries.VILLAGER_PROFESSION)), ing -> Optional.ofNullable(ing.getProfession()), + ByteBufCodecs.optional(ByteBufCodecs.registry(Registries.VILLAGER_TYPE)), ing -> Optional.ofNullable(ing.getBiome()), + ByteBufCodecs.VAR_INT, VillagerIngredient::getMinLevel, + (a, b, c) -> new VillagerIngredient(a.orElse(null), b.orElse(null), c) + ); + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public StreamCodec streamCodec() { + return STREAM_CODEC; + } + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java index d095b06044..9aa505a229 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java @@ -1,31 +1,28 @@ package at.petrak.hexcasting.datagen; import at.petrak.hexcasting.api.HexAPI; -import at.petrak.hexcasting.api.advancements.FailToCastGreatSpellTrigger; -import at.petrak.hexcasting.api.advancements.MinMaxLongs; -import at.petrak.hexcasting.api.advancements.OvercastTrigger; -import at.petrak.hexcasting.api.advancements.SpendMediaTrigger; +import at.petrak.hexcasting.api.advancements.*; import at.petrak.hexcasting.api.misc.MediaConstants; import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.common.items.ItemLoreFragment; import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.paucal.api.datagen.PaucalAdvancementSubProvider; -import net.minecraft.advancements.Advancement; -import net.minecraft.advancements.DisplayInfo; -import net.minecraft.advancements.FrameType; +import net.minecraft.advancements.*; import net.minecraft.advancements.critereon.*; import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import java.util.Optional; import java.util.function.Consumer; public class HexAdvancements extends PaucalAdvancementSubProvider { public static final OvercastTrigger.Instance ENLIGHTEN = - new OvercastTrigger.Instance(ContextAwarePredicate.ANY, + new OvercastTrigger.Instance(Optional.empty(), MinMaxBounds.Ints.ANY, // add a little bit of slop here. use 80% or more health ... MinMaxBounds.Doubles.atLeast(0.8), @@ -39,15 +36,15 @@ public HexAdvancements() { } @Override - public void generate(HolderLookup.Provider provider, Consumer consumer) { + public void generate(HolderLookup.Provider provider, Consumer consumer) { var root = Advancement.Builder.advancement() // what an ergonomic design decision // i am so happy that data generators are the future .display(new DisplayInfo(new ItemStack(Items.BUDDING_AMETHYST), Component.translatable("advancement.hexcasting:root"), Component.translatable("advancement.hexcasting:root.desc"), - new ResourceLocation("minecraft", "textures/block/calcite.png"), - FrameType.TASK, true, true, true)) + Optional.of(ResourceLocation.withDefaultNamespace("textures/block/calcite.png")), + AdvancementType.TASK, true, true, true)) // the only thing making this vaguely tolerable is the knowledge the json files are worse somehow .addCriterion("has_charged_amethyst", InventoryChangeTrigger.TriggerInstance.hasItems( ItemPredicate.Builder.item().of(HexTags.Items.GRANTS_ROOT_ADVANCEMENT).build())) @@ -58,8 +55,8 @@ public void generate(HolderLookup.Provider provider, Consumer consu .display(new DisplayInfo(new ItemStack(HexItems.CREATIVE_UNLOCKER), Component.translatable("advancement.hexcasting:creative_unlocker"), Component.translatable("advancement.hexcasting:creative_unlocker.desc"), - new ResourceLocation("minecraft", "textures/block/calcite.png"), - FrameType.TASK, true, false, true)) + Optional.of(ResourceLocation.withDefaultNamespace("textures/block/calcite.png")), + AdvancementType.TASK, true, false, true)) .parent(root) .addCriterion("has_creative_unlocker", InventoryChangeTrigger.TriggerInstance.hasItems( ItemPredicate.Builder.item().of(HexItems.CREATIVE_UNLOCKER).build())) @@ -67,62 +64,72 @@ public void generate(HolderLookup.Provider provider, Consumer consu // weird names so we have alphabetical parity Advancement.Builder.advancement() - .display(simpleDisplay(Items.GLISTERING_MELON_SLICE, "wasteful_cast", FrameType.TASK)) + .display(simpleDisplay(Items.GLISTERING_MELON_SLICE, "wasteful_cast", AdvancementType.TASK)) .parent(root) - .addCriterion("waste_amt", new SpendMediaTrigger.Instance(ContextAwarePredicate.ANY, - MinMaxLongs.ANY, - MinMaxLongs.atLeast(89 * MediaConstants.DUST_UNIT / 10))) + .addCriterion("waste_amt", new Criterion<>( + HexAdvancementTriggers.SPEND_MEDIA_TRIGGER, + new SpendMediaTrigger.Instance(Optional.empty(), + MinMaxLongs.ANY, + MinMaxLongs.atLeast(89 * MediaConstants.DUST_UNIT / 10)) + )) .save(consumer, prefix("aaa_wasteful_cast")); Advancement.Builder.advancement() - .display(simpleDisplay(HexItems.CHARGED_AMETHYST, "big_cast", FrameType.TASK)) + .display(simpleDisplay(HexItems.CHARGED_AMETHYST, "big_cast", AdvancementType.TASK)) .parent(root) - .addCriterion("cast_amt", new SpendMediaTrigger.Instance(ContextAwarePredicate.ANY, - MinMaxLongs.atLeast(64 * MediaConstants.CRYSTAL_UNIT), - MinMaxLongs.ANY)) + .addCriterion("cast_amt", new Criterion<>( + HexAdvancementTriggers.SPEND_MEDIA_TRIGGER, + new SpendMediaTrigger.Instance(Optional.empty(), + MinMaxLongs.atLeast(64 * MediaConstants.CRYSTAL_UNIT), + MinMaxLongs.ANY) + )) .save(consumer, prefix("aab_big_cast")); var impotence = Advancement.Builder.advancement() - .display(simpleDisplay(Items.BLAZE_POWDER, "y_u_no_cast_angy", FrameType.TASK)) + .display(simpleDisplay(Items.BLAZE_POWDER, "y_u_no_cast_angy", AdvancementType.TASK)) .parent(root) .addCriterion("did_the_thing", - new FailToCastGreatSpellTrigger.Instance(ContextAwarePredicate.ANY)) + new Criterion<>(HexAdvancementTriggers.FAIL_GREAT_SPELL_TRIGGER, + new FailToCastGreatSpellTrigger.Instance(Optional.empty()))) .save(consumer, prefix("y_u_no_cast_angy")); var opened_eyes = Advancement.Builder.advancement() - .display(simpleDisplay(Items.ENDER_EYE, "opened_eyes", FrameType.TASK)) + .display(simpleDisplay(Items.ENDER_EYE, "opened_eyes", AdvancementType.TASK)) .parent(impotence) .addCriterion("health_used", - new OvercastTrigger.Instance(ContextAwarePredicate.ANY, - MinMaxBounds.Ints.ANY, - MinMaxBounds.Doubles.ANY, - // you can't just kill yourself - MinMaxBounds.Doubles.atLeast(0.0))) + new Criterion<>( + HexAdvancementTriggers.OVERCAST_TRIGGER, + new OvercastTrigger.Instance(Optional.empty(), + MinMaxBounds.Ints.ANY, + MinMaxBounds.Doubles.ANY, + // you can't just kill yourself + MinMaxBounds.Doubles.atLeast(0.0))) + ) .save(consumer, prefix("opened_eyes")); Advancement.Builder.advancement() .display(new DisplayInfo(new ItemStack(Items.MUSIC_DISC_11), Component.translatable("advancement.hexcasting:enlightenment"), Component.translatable("advancement.hexcasting:enlightenment.desc"), - null, - FrameType.CHALLENGE, true, true, true)) + Optional.empty(), + AdvancementType.CHALLENGE, true, true, true)) .parent(opened_eyes) - .addCriterion("health_used", ENLIGHTEN) + .addCriterion("health_used", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, ENLIGHTEN)) .save(consumer, prefix("enlightenment")); var loreRoot = Advancement.Builder.advancement() - .display(simpleDisplayWithBackground(HexBlocks.AKASHIC_LIGATURE, "lore", FrameType.GOAL, + .display(simpleDisplayWithBackground(HexBlocks.AKASHIC_LIGATURE, "lore", AdvancementType.GOAL, modLoc("textures/block/slate.png"))) - .addCriterion("used_item", new ConsumeItemTrigger.TriggerInstance(ContextAwarePredicate.ANY, - ItemPredicate.Builder.item().of(HexItems.LORE_FRAGMENT).build())) + .addCriterion("used_item", new Criterion<>(CriteriaTriggers.CONSUME_ITEM, new ConsumeItemTrigger.TriggerInstance(Optional.empty(), + Optional.of(ItemPredicate.Builder.item().of(HexItems.LORE_FRAGMENT).build())))) .save(consumer, prefix("lore")); for (var advId : ItemLoreFragment.NAMES) { Advancement.Builder.advancement() .display(new DisplayInfo(new ItemStack(HexItems.LORE_FRAGMENT), Component.translatable("advancement." + advId), Component.empty(), - null, FrameType.TASK, true, true, true)) + Optional.empty(), AdvancementType.TASK, true, true, true)) .parent(loreRoot) - .addCriterion(ItemLoreFragment.CRITEREON_KEY, new ImpossibleTrigger.TriggerInstance()) + .addCriterion(ItemLoreFragment.CRITEREON_KEY, new Criterion<>(CriteriaTriggers.IMPOSSIBLE, new ImpossibleTrigger.TriggerInstance())) .save(consumer, advId.toString()); } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java b/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java index 386320703c..071842dd0d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java @@ -3,17 +3,21 @@ import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.common.blocks.circles.BlockEntitySlate; import at.petrak.hexcasting.common.lib.HexBlocks; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.loot.HexLootHandler; import at.petrak.hexcasting.xplat.IXplatAbstractions; import at.petrak.paucal.api.datagen.PaucalLootTableSubProvider; -import net.minecraft.advancements.critereon.EnchantmentPredicate; -import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.advancements.critereon.MinMaxBounds; -import net.minecraft.advancements.critereon.StatePropertiesPredicate; +import net.minecraft.advancements.critereon.*; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentPredicate; +import net.minecraft.core.component.DataComponents; +import net.minecraft.core.registries.Registries; import net.minecraft.data.DataProvider; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DoorBlock; @@ -26,23 +30,27 @@ import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount; import net.minecraft.world.level.storage.loot.functions.ApplyExplosionDecay; -import net.minecraft.world.level.storage.loot.functions.CopyNbtFunction; +import net.minecraft.world.level.storage.loot.functions.CopyComponentsFunction; import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction; import net.minecraft.world.level.storage.loot.predicates.*; import net.minecraft.world.level.storage.loot.providers.nbt.ContextNbtProvider; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +import java.util.List; import java.util.Map; public class HexLootTables extends PaucalLootTableSubProvider { - public HexLootTables() { + private final HolderLookup.Provider registries; + + public HexLootTables(HolderLookup.Provider registries) { super(HexAPI.MOD_ID); + this.registries = registries; } @Override protected void makeLootTables(Map blockTables, - Map lootTables) { + Map, LootTable.Builder> lootTables) { dropSelf(blockTables, HexBlocks.IMPETUS_EMPTY, HexBlocks.IMPETUS_RIGHTCLICK, HexBlocks.IMPETUS_LOOK, HexBlocks.IMPETUS_REDSTONE, HexBlocks.EMPTY_DIRECTRIX, HexBlocks.DIRECTRIX_REDSTONE, HexBlocks.DIRECTRIX_BOOLEAN, @@ -61,17 +69,20 @@ protected void makeLootTables(Map blockTables, HexBlocks.EDIFIED_TRAPDOOR, HexBlocks.EDIFIED_STAIRS, HexBlocks.EDIFIED_FENCE, HexBlocks.EDIFIED_FENCE_GATE, HexBlocks.EDIFIED_PRESSURE_PLATE, HexBlocks.EDIFIED_BUTTON); + HolderLookup.RegistryLookup enchRegistryLookup = this.registries.lookupOrThrow(Registries.ENCHANTMENT); + makeSlabTable(blockTables, HexBlocks.EDIFIED_SLAB); - makeLeafTable(blockTables, HexBlocks.AMETHYST_EDIFIED_LEAVES); - makeLeafTable(blockTables, HexBlocks.AVENTURINE_EDIFIED_LEAVES); - makeLeafTable(blockTables, HexBlocks.CITRINE_EDIFIED_LEAVES); + makeLeafTable(blockTables, HexBlocks.AMETHYST_EDIFIED_LEAVES, enchRegistryLookup); + makeLeafTable(blockTables, HexBlocks.AVENTURINE_EDIFIED_LEAVES, enchRegistryLookup); + makeLeafTable(blockTables, HexBlocks.CITRINE_EDIFIED_LEAVES, enchRegistryLookup); var slatePool = LootPool.lootPool() .setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(HexBlocks.SLATE) - .apply(CopyNbtFunction.copyData(ContextNbtProvider.BLOCK_ENTITY) - .copy(BlockEntitySlate.TAG_PATTERN, "BlockEntityTag." + BlockEntitySlate.TAG_PATTERN))); + .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .include(HexDataComponents.PATTERN) + )); blockTables.put(HexBlocks.SLATE, LootTable.lootTable().withPool(slatePool)); var doorPool = dropThisPool(HexBlocks.EDIFIED_DOOR, 1) @@ -80,10 +91,13 @@ protected void makeLootTables(Map blockTables, )); blockTables.put(HexBlocks.EDIFIED_DOOR, LootTable.lootTable().withPool(doorPool)); - var silkTouchCond = MatchTool.toolMatches( - ItemPredicate.Builder.item().hasEnchantment( - new EnchantmentPredicate(Enchantments.SILK_TOUCH, MinMaxBounds.Ints.ANY))); + ItemPredicate.Builder.item().withSubPredicate( + ItemSubPredicates.ENCHANTMENTS, + ItemEnchantmentsPredicate.enchantments( + List.of(new EnchantmentPredicate(enchRegistryLookup.getOrThrow(Enchantments.SILK_TOUCH), MinMaxBounds.Ints.atLeast(1))) + ) + )); var noSilkTouchCond = silkTouchCond.invert(); var goodAtAmethystingCond = MatchTool.toolMatches( ItemPredicate.Builder.item().of(ItemTags.CLUSTER_MAX_HARVESTABLES) @@ -92,7 +106,7 @@ protected void makeLootTables(Map blockTables, var dustPoolWhenGood = LootPool.lootPool() .add(LootItem.lootTableItem(HexItems.AMETHYST_DUST)) .apply(SetItemCountFunction.setCount(UniformGenerator.between(1, 4))) - .apply(ApplyBonusCount.addOreBonusCount(Enchantments.BLOCK_FORTUNE)) + .apply(ApplyBonusCount.addOreBonusCount(enchRegistryLookup.getOrThrow(Enchantments.FORTUNE))) .when(noSilkTouchCond).when(goodAtAmethystingCond); var dustPoolWhenBad = LootPool.lootPool() @@ -104,7 +118,7 @@ protected void makeLootTables(Map blockTables, .add(LootItem.lootTableItem(HexItems.CHARGED_AMETHYST)) .apply(SetItemCountFunction.setCount(ConstantValue.exactly(1))) .when(noSilkTouchCond).when(goodAtAmethystingCond) - .when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, + .when(BonusLevelTableCondition.bonusLevelFlatChance(enchRegistryLookup.getOrThrow(Enchantments.FORTUNE), 0.25f, 0.35f, 0.5f, 0.75f, 1.0f)); var isThatAnMFingBadBrandonSandersonReference = LootPool.lootPool() @@ -126,19 +140,24 @@ protected void makeLootTables(Map blockTables, LootItem.lootTableItem(HexItems.QUENCHED_SHARD) .apply(SetItemCountFunction.setCount(UniformGenerator.between(2f, 4f))) .apply(SetItemCountFunction.setCount(ConstantValue.exactly(1), true) - .when(BonusLevelTableCondition.bonusLevelFlatChance(Enchantments.BLOCK_FORTUNE, + .when(BonusLevelTableCondition.bonusLevelFlatChance(enchRegistryLookup.getOrThrow(Enchantments.FORTUNE), 0.25f, 0.5f, 0.75f, 1.0f))) )); blockTables.put(HexBlocks.QUENCHED_ALLAY, LootTable.lootTable().withPool(quenchedPool)); } - private void makeLeafTable(Map lootTables, Block block) { + private void makeLeafTable(Map lootTables, Block block, HolderLookup.RegistryLookup enchRegistryLookup) { var leafPool = dropThisPool(block, 1) .when(AnyOfCondition.anyOf( IXplatAbstractions.INSTANCE.isShearsCondition(), MatchTool.toolMatches(ItemPredicate.Builder.item() - .hasEnchantment(new EnchantmentPredicate(Enchantments.SILK_TOUCH, MinMaxBounds.Ints.atLeast(1)))) - )); + .withSubPredicate( + ItemSubPredicates.ENCHANTMENTS, + ItemEnchantmentsPredicate.enchantments( + List.of(new EnchantmentPredicate(enchRegistryLookup.getOrThrow(Enchantments.SILK_TOUCH), MinMaxBounds.Ints.atLeast(1))) + ) + ) + ))); lootTables.put(block, LootTable.lootTable().withPool(leafPool)); } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java index 828c8ad92f..3952657bfe 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.datagen.recipe; import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.advancements.HexAdvancementTriggers; import at.petrak.hexcasting.api.misc.MediaConstants; import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.common.blocks.decoration.BlockAkashicLog; @@ -9,7 +10,7 @@ import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.recipe.SealThingsRecipe; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper; +import at.petrak.hexcasting.common.recipe.ingredient.StateIngredients; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.EntityTypeIngredient; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.VillagerIngredient; import at.petrak.hexcasting.datagen.HexAdvancements; @@ -17,32 +18,42 @@ import at.petrak.hexcasting.datagen.IXplatIngredients; import at.petrak.hexcasting.datagen.recipe.builders.BrainsweepRecipeBuilder; import at.petrak.hexcasting.datagen.recipe.builders.CompatIngredientValue; -import at.petrak.hexcasting.datagen.recipe.builders.CreateCrushingRecipeBuilder; -import at.petrak.hexcasting.datagen.recipe.builders.FarmersDelightCuttingRecipeBuilder; -import at.petrak.paucal.api.datagen.PaucalRecipeProvider; +import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.Criterion; +import net.minecraft.advancements.CriterionTriggerInstance; +import net.minecraft.advancements.critereon.InventoryChangeTrigger; +import net.minecraft.advancements.critereon.ItemPredicate; +import net.minecraft.advancements.critereon.MinMaxBounds; +import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.PackOutput; import net.minecraft.data.recipes.*; import net.minecraft.resources.ResourceLocation; -import net.minecraft.sounds.SoundEvents; +import net.minecraft.server.packs.resources.Resource; import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.DyeItem; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Blocks; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; -import java.util.function.Consumer; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; import java.util.function.Function; +import java.util.function.Supplier; + +import static at.petrak.hexcasting.api.HexAPI.modLoc; // TODO: need to do a big refactor of this class cause it's giant and unwieldy, probably as part of #360 -public class HexplatRecipes extends PaucalRecipeProvider { +public class HexplatRecipes extends RecipeProvider { private final IXplatIngredients ingredients; private final Function conditions; @@ -61,17 +72,17 @@ public class HexplatRecipes extends PaucalRecipeProvider { Map.entry(HexBlocks.STRIPPED_EDIFIED_LOG, HexBlocks.STRIPPED_EDIFIED_WOOD) ); - public HexplatRecipes(PackOutput output, IXplatIngredients ingredients, + public HexplatRecipes(PackOutput output, CompletableFuture registries, IXplatIngredients ingredients, Function conditions) { - super(output, HexAPI.MOD_ID); + super(output, registries); this.ingredients = ingredients; this.conditions = conditions; } @Override - public void buildRecipes(Consumer recipes) { - specialRecipe(recipes, SealThingsRecipe.FOCUS_SERIALIZER); - specialRecipe(recipes, SealThingsRecipe.SPELLBOOK_SERIALIZER); + public void buildRecipes(RecipeOutput recipes) { + specialRecipe(recipes, SealThingsRecipe.FOCUS_SERIALIZER, SealThingsRecipe::focus); + specialRecipe(recipes, SealThingsRecipe.SPELLBOOK_SERIALIZER, SealThingsRecipe::spellbook); staffRecipe(recipes, HexItems.STAFF_OAK, Items.OAK_PLANKS); staffRecipe(recipes, HexItems.STAFF_BIRCH, Items.BIRCH_PLANKS); @@ -142,7 +153,8 @@ public void buildRecipes(Consumer recipes) { .define('F', ingredients.goldIngot()) .define('A', HexItems.CHARGED_AMETHYST) // why in god's name does minecraft have two different places for item tags - .define('D', ItemTags.MUSIC_DISCS) + // TODO port: check if good for music discs + .define('D', ItemTags.CREEPER_DROP_MUSIC_DISCS) .pattern(" F ") .pattern("FAF") .pattern(" D ") @@ -195,11 +207,12 @@ public void buildRecipes(Consumer recipes) { gayRecipe(recipes, ItemPridePigment.Type.INTERSEX, Ingredient.of(Items.AZALEA)); gayRecipe(recipes, ItemPridePigment.Type.LESBIAN, Ingredient.of(Items.HONEYCOMB)); gayRecipe(recipes, ItemPridePigment.Type.NONBINARY, Ingredient.of(Items.MOSS_BLOCK)); - gayRecipe(recipes, ItemPridePigment.Type.PANSEXUAL, ingredients.whenModIngredient( + // TODO port: This is neither an item value nor a tag value. + /*gayRecipe(recipes, ItemPridePigment.Type.PANSEXUAL, ingredients.whenModIngredient( Ingredient.of(Items.CARROT), "farmersdelight", CompatIngredientValue.of("farmersdelight:skillet") - )); + ));*/ gayRecipe(recipes, ItemPridePigment.Type.PLURAL, Ingredient.of(Items.REPEATER)); gayRecipe(recipes, ItemPridePigment.Type.TRANSGENDER, Ingredient.of(Items.EGG)); @@ -395,7 +408,7 @@ public void buildRecipes(Consumer recipes) { .pattern("PSS") .pattern("BAB") .pattern("SSP") - .unlockedBy("enlightenment", enlightenment).save(recipes); + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)).save(recipes); ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, HexBlocks.EMPTY_DIRECTRIX) .define('C', Items.COMPARATOR) @@ -405,7 +418,7 @@ public void buildRecipes(Consumer recipes) { .pattern("CSS") .pattern("OAO") .pattern("SSC") - .unlockedBy("enlightenment", enlightenment).save(recipes); + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)).save(recipes); ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, HexBlocks.AKASHIC_BOOKSHELF) .define('L', HexTags.Items.EDIFIED_LOGS) @@ -414,7 +427,7 @@ public void buildRecipes(Consumer recipes) { /*this is the*/.pattern("LPL") // and what i have for you today is .pattern("CCC") .pattern("LPL") - .unlockedBy("enlightenment", enlightenment).save(recipes); + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)).save(recipes); ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, HexBlocks.AKASHIC_LIGATURE, 4) .define('L', HexTags.Items.EDIFIED_LOGS) @@ -425,66 +438,66 @@ public void buildRecipes(Consumer recipes) { .pattern("LPL") .pattern("123") .pattern("LPL") - .unlockedBy("enlightenment", enlightenment).save(recipes); + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)).save(recipes); - new BrainsweepRecipeBuilder(StateIngredientHelper.of(Blocks.AMETHYST_BLOCK), + new BrainsweepRecipeBuilder(StateIngredients.of(Blocks.AMETHYST_BLOCK), new VillagerIngredient(null, null, 3), Blocks.BUDDING_AMETHYST.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/budding_amethyst")); - new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.IMPETUS_EMPTY), + new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.IMPETUS_EMPTY), new VillagerIngredient(VillagerProfession.TOOLSMITH, null, 2), HexBlocks.IMPETUS_RIGHTCLICK.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/impetus_rightclick")); - new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.IMPETUS_EMPTY), + new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.IMPETUS_EMPTY), new VillagerIngredient(VillagerProfession.FLETCHER, null, 2), HexBlocks.IMPETUS_LOOK.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/impetus_look")); - new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.IMPETUS_EMPTY), + new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.IMPETUS_EMPTY), new VillagerIngredient(VillagerProfession.CLERIC, null, 2), HexBlocks.IMPETUS_REDSTONE.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/impetus_storedplayer")); - new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.EMPTY_DIRECTRIX), + new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.EMPTY_DIRECTRIX), new VillagerIngredient(VillagerProfession.MASON, null, 1), HexBlocks.DIRECTRIX_REDSTONE.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/directrix_redstone")); - new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.EMPTY_DIRECTRIX), + new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.EMPTY_DIRECTRIX), new VillagerIngredient(VillagerProfession.SHEPHERD, null, 1), HexBlocks.DIRECTRIX_BOOLEAN.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/directrix_boolean")); - new BrainsweepRecipeBuilder(StateIngredientHelper.of(HexBlocks.AKASHIC_LIGATURE), + new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.AKASHIC_LIGATURE), new VillagerIngredient(VillagerProfession.LIBRARIAN, null, 5), HexBlocks.AKASHIC_RECORD.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/akashic_record")); // Temporary tests - new BrainsweepRecipeBuilder(StateIngredientHelper.of(Blocks.AMETHYST_BLOCK), + new BrainsweepRecipeBuilder(StateIngredients.of(Blocks.AMETHYST_BLOCK), new EntityTypeIngredient(EntityType.ALLAY), HexBlocks.QUENCHED_ALLAY.defaultBlockState(), MediaConstants.CRYSTAL_UNIT) - .unlockedBy("enlightenment", enlightenment) + .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) .save(recipes, modLoc("brainsweep/quench_allay")); // Create compat - this.conditions.apply(new CreateCrushingRecipeBuilder() + /*this.conditions.apply(new CreateCrushingRecipeBuilder() .withInput(Blocks.AMETHYST_CLUSTER) .duration(150) .withOutput(Items.AMETHYST_SHARD, 7) .withOutput(HexItems.AMETHYST_DUST, 5) .withOutput(0.25f, HexItems.CHARGED_AMETHYST)) .whenModLoaded("create") - .save(recipes, new ResourceLocation("create", "crushing/amethyst_cluster")); + .save(recipes, ResourceLocation.fromNamespaceAndPath("create", "crushing/amethyst_cluster")); this.conditions.apply(new CreateCrushingRecipeBuilder() .withInput(Blocks.AMETHYST_BLOCK) @@ -492,7 +505,7 @@ public void buildRecipes(Consumer recipes) { .withOutput(Items.AMETHYST_SHARD, 3) .withOutput(0.5f, HexItems.AMETHYST_DUST, 4)) .whenModLoaded("create") - .save(recipes, new ResourceLocation("create", "crushing/amethyst_block")); + .save(recipes, ResourceLocation.fromNamespaceAndPath("create", "crushing/amethyst_block")); this.conditions.apply(new CreateCrushingRecipeBuilder() .withInput(Items.AMETHYST_SHARD) @@ -535,14 +548,14 @@ public void buildRecipes(Consumer recipes) { .withTool(ingredients.axeDig()) .withOutput(HexBlocks.EDIFIED_PLANKS)) .whenModLoaded("farmersdelight") - .save(recipes, modLoc("compat/farmersdelight/cutting/akashic_door")); + .save(recipes, modLoc("compat/farmersdelight/cutting/akashic_door"));*/ } - private void staffRecipe(Consumer recipes, ItemStaff staff, Item plank) { + private void staffRecipe(RecipeOutput recipes, ItemStaff staff, Item plank) { staffRecipe(recipes, staff, Ingredient.of(plank)); } - private void staffRecipe(Consumer recipes, ItemStaff staff, Ingredient plank) { + private void staffRecipe(RecipeOutput recipes, ItemStaff staff, Ingredient plank) { ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, staff) .define('W', plank) .define('S', Items.STICK) @@ -554,7 +567,7 @@ private void staffRecipe(Consumer recipes, ItemStaff staff, Ingr .save(recipes); } - private void gayRecipe(Consumer recipes, ItemPridePigment.Type type, Ingredient material) { + private void gayRecipe(RecipeOutput recipes, ItemPridePigment.Type type, Ingredient material) { var colorizer = HexItems.PRIDE_PIGMENTS.get(type); ShapedRecipeBuilder.shaped(RecipeCategory.MISC, colorizer) .define('D', HexItems.AMETHYST_DUST) @@ -566,8 +579,148 @@ private void gayRecipe(Consumer recipes, ItemPridePigment.Type t .save(recipes); } - private void specialRecipe(Consumer consumer, SimpleCraftingRecipeSerializer serializer) { + private > void specialRecipe(RecipeOutput consumer, RecipeSerializer serializer, Function recipeFunc) { var name = BuiltInRegistries.RECIPE_SERIALIZER.getKey(serializer); - SpecialRecipeBuilder.special(serializer).save(consumer, HexAPI.MOD_ID + ":dynamic" + name.getPath()); + SpecialRecipeBuilder.special(recipeFunc::apply).save(consumer, HexAPI.MOD_ID + ":dynamic" + name.getPath()); + } + + protected static Criterion hasItem(ItemLike p_125978_) { + return paucalInventoryTrigger(ItemPredicate.Builder.item().of(p_125978_).build()); + } + + protected static Criterion hasItem(TagKey p_206407_) { + return paucalInventoryTrigger(ItemPredicate.Builder.item().of(p_206407_).build()); + } + + /** + * Prefixed with {@code paucal} to avoid collisions when Forge ATs {@link RecipeProvider#inventoryTrigger}. + */ + protected static Criterion paucalInventoryTrigger(ItemPredicate... $$0) { + return new Criterion<>( + CriteriaTriggers.INVENTORY_CHANGED, + new InventoryChangeTrigger.TriggerInstance(Optional.empty(), InventoryChangeTrigger.TriggerInstance.Slots.ANY, List.of($$0)) + ); + } + + // ================================= From PAUCAL 1.20 + + protected ShapedRecipeBuilder ring(RecipeCategory category, ItemLike out, int count, Ingredient outer, @Nullable Ingredient inner) { + return ringCornered(category, out, count, outer, outer, inner); + } + + protected ShapedRecipeBuilder ring(RecipeCategory category, ItemLike out, int count, ItemLike outer, @Nullable ItemLike inner) { + return ring(category, out, count, Ingredient.of(outer), ingredientOf(inner)); + } + + protected ShapedRecipeBuilder ring(RecipeCategory category, ItemLike out, int count, TagKey outer, @Nullable TagKey inner) { + return ring(category, out, count, Ingredient.of(outer), ingredientOf(inner)); + } + + protected ShapedRecipeBuilder ringCornerless(RecipeCategory category, ItemLike out, int count, Ingredient outer, + @Nullable Ingredient inner) { + return ringCornered(category, out, count, outer, null, inner); + } + + protected ShapedRecipeBuilder ringCornerless(RecipeCategory category, ItemLike out, int count, ItemLike outer, @Nullable ItemLike inner) { + return ringCornerless(category, out, count, Ingredient.of(outer), ingredientOf(inner)); + } + + protected ShapedRecipeBuilder ringAll(RecipeCategory category, ItemLike out, int count, Ingredient outer, @Nullable Ingredient inner) { + return ringCornered(category, out, count, outer, outer, inner); + } + + protected ShapedRecipeBuilder ringAll(RecipeCategory category, ItemLike out, int count, ItemLike outer, @Nullable ItemLike inner) { + return ringAll(category, out, count, Ingredient.of(outer), ingredientOf(inner)); + } + + protected ShapedRecipeBuilder ringCornered(RecipeCategory category, ItemLike out, int count, @Nullable Ingredient cardinal, + @Nullable Ingredient diagonal, @Nullable Ingredient inner) { + if (cardinal == null && diagonal == null && inner == null) { + throw new IllegalArgumentException("at least one ingredient must be non-null"); + } + if (inner != null && cardinal == null && diagonal == null) { + throw new IllegalArgumentException("if inner is non-null, either cardinal or diagonal must not be"); + } + + var builder = ShapedRecipeBuilder.shaped(category, out, count); + var C = ' '; + if (cardinal != null) { + builder.define('C', cardinal); + C = 'C'; + } + var D = ' '; + if (diagonal != null) { + builder.define('D', diagonal); + D = 'D'; + } + var I = ' '; + if (inner != null) { + builder.define('I', inner); + I = 'I'; + } + + builder + .pattern(String.format("%c%c%c", D, C, D)) + .pattern(String.format("%c%c%c", C, I, C)) + .pattern(String.format("%c%c%c", D, C, D)); + + return builder; + } + + protected ShapedRecipeBuilder stack(RecipeCategory category, ItemLike out, int count, Ingredient top, Ingredient bottom) { + return ShapedRecipeBuilder.shaped(category, out, count) + .define('T', top) + .define('B', bottom) + .pattern("T") + .pattern("B"); + } + + protected ShapedRecipeBuilder stack(RecipeCategory category, ItemLike out, int count, ItemLike top, ItemLike bottom) { + return stack(category, out, count, Ingredient.of(top), Ingredient.of(bottom)); + } + + protected ShapedRecipeBuilder stack(RecipeCategory category, ItemLike out, int count, TagKey top, TagKey bottom) { + return stack(category, out, count, Ingredient.of(top), Ingredient.of(bottom)); + } + + + protected ShapedRecipeBuilder stick(RecipeCategory category, ItemLike out, int count, Ingredient input) { + return stack(category, out, count, input, input); + } + + protected ShapedRecipeBuilder stick(RecipeCategory category, ItemLike out, int count, ItemLike input) { + return stick(category, out, count, Ingredient.of(input)); + } + + protected ShapedRecipeBuilder stick(RecipeCategory category, ItemLike out, int count, TagKey input) { + return stick(category, out, count, Ingredient.of(input)); + } + + /** + * @param largeSize True for a 3x3, false for a 2x2 + */ + protected void packing(RecipeCategory category, ItemLike free, ItemLike compressed, String freeName, boolean largeSize, RecipeOutput recipes) { + var pack = ShapedRecipeBuilder.shaped(category, compressed) + .define('X', free); + if (largeSize) { + pack.pattern("XXX").pattern("XXX").pattern("XXX"); + } else { + pack.pattern("XX").pattern("XX"); + } + pack.unlockedBy("has_item", hasItem(free)).save(recipes, modLoc(freeName + "_packing")); + + ShapelessRecipeBuilder.shapeless(category, free, largeSize ? 9 : 4) + .requires(compressed) + .unlockedBy("has_item", hasItem(free)).save(recipes, modLoc(freeName + "_unpacking")); + } + + @Nullable + protected Ingredient ingredientOf(@Nullable ItemLike item) { + return item == null ? null : Ingredient.of(item); + } + + @Nullable + protected Ingredient ingredientOf(@Nullable TagKey item) { + return item == null ? null : Ingredient.of(item); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java index 09465dfd03..8b243f229d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java @@ -1,24 +1,22 @@ package at.petrak.hexcasting.datagen.recipe.builders; -import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry; +import at.petrak.hexcasting.common.recipe.BrainsweepRecipe; import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; -import com.google.gson.JsonObject; import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementRequirements; import net.minecraft.advancements.AdvancementRewards; -import net.minecraft.advancements.CriterionTriggerInstance; -import net.minecraft.advancements.RequirementsStrategy; +import net.minecraft.advancements.Criterion; import net.minecraft.advancements.critereon.RecipeUnlockedTrigger; -import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; -import java.util.function.Consumer; +import java.util.LinkedHashMap; +import java.util.Map; public class BrainsweepRecipeBuilder implements RecipeBuilder { private final StateIngredient blockIn; @@ -26,7 +24,7 @@ public class BrainsweepRecipeBuilder implements RecipeBuilder { private final long mediaCost; private final BlockState result; - private final Advancement.Builder advancement; + private final Map> criteria = new LinkedHashMap<>(); public BrainsweepRecipeBuilder(StateIngredient blockIn, BrainsweepeeIngredient entityIn, BlockState result, long mediaCost) { @@ -34,12 +32,11 @@ public BrainsweepRecipeBuilder(StateIngredient blockIn, BrainsweepeeIngredient e this.entityIn = entityIn; this.result = result; this.mediaCost = mediaCost; - this.advancement = Advancement.Builder.advancement(); } @Override - public RecipeBuilder unlockedBy(String pCriterionName, CriterionTriggerInstance pCriterionTrigger) { - this.advancement.addCriterion(pCriterionName, pCriterionTrigger); + public RecipeBuilder unlockedBy(String pCriterionName, Criterion pCriterionTrigger) { + criteria.put(pCriterionName, pCriterionTrigger); return this; } @@ -54,53 +51,14 @@ public Item getResult() { } @Override - public void save(Consumer pFinishedRecipeConsumer, ResourceLocation pRecipeId) { - if (this.advancement.getCriteria().isEmpty()) { - throw new IllegalStateException("No way of obtaining recipe " + pRecipeId); - } + public void save(RecipeOutput recipeOutput, ResourceLocation id) { + Advancement.Builder advancement = recipeOutput.advancement() + .addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id)) + .rewards(AdvancementRewards.Builder.recipe(id)) + .requirements(AdvancementRequirements.Strategy.OR); + this.criteria.forEach(advancement::addCriterion); - this.advancement.parent(new ResourceLocation("recipes/root")) - .addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(pRecipeId)) - .rewards(AdvancementRewards.Builder.recipe(pRecipeId)) - .requirements(RequirementsStrategy.OR); - pFinishedRecipeConsumer.accept(new Result( - pRecipeId, - this.blockIn, this.entityIn, this.mediaCost, this.result, - this.advancement, - new ResourceLocation(pRecipeId.getNamespace(), "recipes/brainsweep/" + pRecipeId.getPath()))); - } - - public record Result(ResourceLocation id, StateIngredient blockIn, BrainsweepeeIngredient villagerIn, - long mediaCost, BlockState result, Advancement.Builder advancement, - ResourceLocation advancementId) implements FinishedRecipe { - @Override - public void serializeRecipeData(JsonObject json) { - json.add("blockIn", this.blockIn.serialize()); - json.add("entityIn", this.villagerIn.serialize()); - json.addProperty("cost", this.mediaCost); - json.add("result", StateIngredientHelper.serializeBlockState(this.result)); - } - - @Override - public ResourceLocation getId() { - return this.id; - } - - @Override - public RecipeSerializer getType() { - return HexRecipeStuffRegistry.BRAINSWEEP; - } - - @Nullable - @Override - public JsonObject serializeAdvancement() { - return this.advancement.serializeToJson(); - } - - @Nullable - @Override - public ResourceLocation getAdvancementId() { - return this.advancementId; - } + var recipe = new BrainsweepRecipe(blockIn, entityIn, mediaCost, result); + recipeOutput.accept(id.withPrefix("recipes/brainsweep/"), recipe, advancement.build(id.withPrefix("recipes/"))); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/CreateCrushingRecipeBuilder.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/CreateCrushingRecipeBuilder.java index 77743d9a31..ed66b649cd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/CreateCrushingRecipeBuilder.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/CreateCrushingRecipeBuilder.java @@ -2,9 +2,9 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import net.minecraft.advancements.CriterionTriggerInstance; -import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.advancements.Criterion; import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -31,7 +31,7 @@ public class CreateCrushingRecipeBuilder implements RecipeBuilder { private int processingTime = 100; @Override - public @NotNull CreateCrushingRecipeBuilder unlockedBy(@NotNull String name, @NotNull CriterionTriggerInstance trigger) { + public RecipeBuilder unlockedBy(String name, Criterion criterion) { return this; } @@ -76,7 +76,7 @@ public CreateCrushingRecipeBuilder withOutput(float chance, ItemLike output, int } public CreateCrushingRecipeBuilder withOutput(ItemStack output, float chance) { - this.results.add(new ItemProcessingOutput(output, chance)); + //this.results.add(new ItemProcessingOutput(output, chance)); return this; } @@ -93,7 +93,7 @@ public CreateCrushingRecipeBuilder withOutput(float chance, String name) { } public CreateCrushingRecipeBuilder withOutput(float chance, String name, int count) { - this.results.add(new CompatProcessingOutput(name, count, chance)); + //this.results.add(new CompatProcessingOutput(name, count, chance)); return this; } @@ -103,61 +103,7 @@ public CreateCrushingRecipeBuilder withOutput(float chance, String name, int cou } @Override - public void save(@NotNull Consumer consumer, @NotNull ResourceLocation resourceLocation) { - consumer.accept(new CrushingRecipe(resourceLocation)); - } - - public class CrushingRecipe implements FinishedRecipe { - - private final ResourceLocation id; - - public CrushingRecipe(ResourceLocation id) { - this.id = id; - } - - @Override - public void serializeRecipeData(@NotNull JsonObject json) { - json.addProperty("type", "create:crushing"); - - if (!group.isEmpty()) { - json.addProperty("group", group); - } - - JsonArray jsonIngredients = new JsonArray(); - JsonArray jsonOutputs = new JsonArray(); - - jsonIngredients.add(input.toJson()); + public void save(RecipeOutput recipeOutput, ResourceLocation id) { - results.forEach(o -> jsonOutputs.add(o.serialize())); - - json.add("ingredients", jsonIngredients); - json.add("results", jsonOutputs); - - int processingDuration = processingTime; - if (processingDuration > 0) { - json.addProperty("processingTime", processingDuration); - } - } - - @Override - public @NotNull ResourceLocation getId() { - return id; - } - - @Override - public @NotNull RecipeSerializer getType() { - return RecipeSerializer.SHAPELESS_RECIPE; // Irrelevant, we implement serialization ourselves - } - - @Override - public JsonObject serializeAdvancement() { - return null; - } - - @Override - public ResourceLocation getAdvancementId() { - return null; - } } - } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/FarmersDelightCuttingRecipeBuilder.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/FarmersDelightCuttingRecipeBuilder.java index 8fbc4e7be1..a5daeb205e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/FarmersDelightCuttingRecipeBuilder.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/FarmersDelightCuttingRecipeBuilder.java @@ -3,11 +3,12 @@ import com.google.common.collect.Lists; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import net.minecraft.advancements.Criterion; import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.item.Item; @@ -30,7 +31,7 @@ public class FarmersDelightCuttingRecipeBuilder implements RecipeBuilder { private SoundEvent sound; @Override - public FarmersDelightCuttingRecipeBuilder unlockedBy(String s, CriterionTriggerInstance criterionTriggerInstance) { + public FarmersDelightCuttingRecipeBuilder unlockedBy(String s, Criterion criterionTriggerInstance) { return this; } @@ -75,7 +76,7 @@ public FarmersDelightCuttingRecipeBuilder withOutput(float chance, ItemLike outp } public FarmersDelightCuttingRecipeBuilder withOutput(ItemStack output, float chance) { - this.outputs.add(new ItemProcessingOutput(output, chance)); + //this.outputs.add(new ItemProcessingOutput(output, chance)); return this; } @@ -107,60 +108,7 @@ public FarmersDelightCuttingRecipeBuilder withSound(SoundEvent sound) { } @Override - public void save(Consumer consumer, ResourceLocation resourceLocation) { - consumer.accept(new CuttingRecipe(resourceLocation)); - } - - public class CuttingRecipe implements FinishedRecipe { - - private final ResourceLocation id; - - public CuttingRecipe(ResourceLocation id) { - this.id = id; - } - - @Override - public void serializeRecipeData(@NotNull JsonObject json) { - json.addProperty("type", "farmersdelight:cutting"); - - if (!group.isEmpty()) { - json.addProperty("group", group); - } - - JsonArray jsonIngredients = new JsonArray(); - JsonArray jsonOutputs = new JsonArray(); - - jsonIngredients.add(input.toJson()); - - outputs.forEach(o -> jsonOutputs.add(o.serialize())); - - json.add("ingredients", jsonIngredients); - json.add("tool", toolAction.serialize()); - json.add("result", jsonOutputs); - - if (sound != null) { - json.addProperty("sound", BuiltInRegistries.SOUND_EVENT.getKey(sound).toString()); - } - } - - @Override - public @NotNull ResourceLocation getId() { - return id; - } - - @Override - public @NotNull RecipeSerializer getType() { - return RecipeSerializer.SHAPELESS_RECIPE; // Irrelevant, we implement serialization ourselves - } - - @Override - public JsonObject serializeAdvancement() { - return null; - } + public void save(RecipeOutput recipeOutput, ResourceLocation id) { - @Override - public ResourceLocation getAdvancementId() { - return null; - } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/ItemProcessingOutput.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/ItemProcessingOutput.java deleted file mode 100644 index 245c3d607b..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/ItemProcessingOutput.java +++ /dev/null @@ -1,28 +0,0 @@ -package at.petrak.hexcasting.datagen.recipe.builders; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; - -public record ItemProcessingOutput(ItemStack stack, float chance) implements ProcessingOutput { - @Override - public JsonObject serialize() { - JsonObject json = new JsonObject(); - ResourceLocation resourceLocation = BuiltInRegistries.ITEM.getKey(stack.getItem()); - json.addProperty("item", resourceLocation.toString()); - int count = stack.getCount(); - if (count != 1) { - json.addProperty("count", count); - } - if (stack.hasTag()) { - json.add("nbt", JsonParser.parseString(stack.getTag().toString())); - } - if (chance != 1) { - json.addProperty("chance", chance); - } - return json; - } -} diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexActionTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexActionTagProvider.java index 4b083c5731..e3ef8bc1a1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexActionTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexActionTagProvider.java @@ -43,7 +43,7 @@ private static TagKey ersatzActionTag(TagKeycreateRegistryKey( - new ResourceLocation("foobar", "hexcasting/tags/action")); + ResourceLocation.fromNamespaceAndPath("foobar", "hexcasting/tags/action")); return TagKey.create(fakeKey, real.location()); } else { return real; diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java index c354a0464e..dc1e2f4d9c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java @@ -1,13 +1,14 @@ package at.petrak.hexcasting.datagen.tag; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.xplat.IXplatTags; -import at.petrak.paucal.api.datagen.PaucalBlockTagProvider; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.TagsProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.tags.TagKey; @@ -16,12 +17,11 @@ import java.util.concurrent.CompletableFuture; -public class HexBlockTagProvider extends PaucalBlockTagProvider { +public class HexBlockTagProvider extends TagsProvider { public final IXplatTags xtags; - public HexBlockTagProvider(PackOutput output, CompletableFuture lookupProvider, - IXplatTags xtags) { - super(output, lookupProvider); + public HexBlockTagProvider(PackOutput output, CompletableFuture lookupProvider, IXplatTags xtags) { + super(output, Registries.BLOCK, lookupProvider, HexAPI.MOD_ID, null); this.xtags = xtags; } @@ -35,6 +35,9 @@ protected void addTags(HolderLookup.Provider provider) { .addTag(HexTags.Blocks.IMPETI) .addTag(HexTags.Blocks.DIRECTRICES); + tag(HexTags.Blocks.HEX_UNBREAKABLE) + .addTag(BlockTags.NEEDS_DIAMOND_TOOL); + add(tag(BlockTags.MINEABLE_WITH_PICKAXE), HexBlocks.SLATE_BLOCK, HexBlocks.SLATE_TILES, HexBlocks.SLATE_BRICKS, HexBlocks.SLATE_BRICKS_SMALL, HexBlocks.SLATE_PILLAR, HexBlocks.SLATE, @@ -134,11 +137,11 @@ protected void addTags(HolderLookup.Provider provider) { HexBlocks.CONJURED_BLOCK, HexBlocks.CONJURED_LIGHT); // this is a hack but fixes #532 - var createBrittle = TagKey.create(Registries.BLOCK, new ResourceLocation("create", "brittle")); + var createBrittle = TagKey.create(Registries.BLOCK, ResourceLocation.fromNamespaceAndPath("create", "brittle")); tag(createBrittle).addOptionalTag(BuiltInRegistries.BLOCK.getKey(HexBlocks.SLATE)); } - void add(TagAppender appender, Block... blocks) { + void add(TagsProvider.TagAppender appender, Block... blocks) { for (Block block : blocks) { appender.add(BuiltInRegistries.BLOCK.getResourceKey(block).orElseThrow()); } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java index 520df8a48c..2a55206672 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java @@ -4,12 +4,13 @@ import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.xplat.IXplatTags; -import at.petrak.paucal.api.datagen.PaucalItemTagProvider; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; +import net.minecraft.data.tags.ItemTagsProvider; import net.minecraft.data.tags.TagsProvider; +import net.minecraft.data.tags.VanillaItemTagsProvider; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.Item; @@ -18,16 +19,14 @@ import java.util.concurrent.CompletableFuture; -public class HexItemTagProvider extends PaucalItemTagProvider { +public class HexItemTagProvider extends ItemTagsProvider { private final IXplatTags xtags; - public HexItemTagProvider(PackOutput output, CompletableFuture lookup, TagsProvider pBlockTagsProvider, IXplatTags xtags) { - super(output, lookup, HexAPI.MOD_ID, pBlockTagsProvider); + public HexItemTagProvider(PackOutput output, CompletableFuture lookup, CompletableFuture> pBlockTagsProvider, IXplatTags xtags) { + super(output, lookup, pBlockTagsProvider, HexAPI.MOD_ID, null); this.xtags = xtags; } - - @Override protected void addTags(HolderLookup.Provider provider) { add(tag(xtags.gems()), diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternData.java b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternData.java index 5dc2dba2ff..f8d4f7c425 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternData.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternData.java @@ -9,6 +9,7 @@ import com.mojang.serialization.Codec; import com.samsthenerd.inline.api.InlineData; import net.minecraft.ChatFormatting; +import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.ClickEvent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; @@ -42,7 +43,7 @@ public ResourceLocation getRendererId(){ public Style getExtraStyle() { ItemStack scrollStack = new ItemStack(HexItems.SCROLL_MEDIUM); HexItems.SCROLL_MEDIUM.writeDatum(scrollStack, new PatternIota(pattern)); - scrollStack.setHoverName(getPatternName(pattern).copy().withStyle(ChatFormatting.WHITE)); + scrollStack.set(DataComponents.ITEM_NAME, getPatternName(pattern).copy().withStyle(ChatFormatting.WHITE)); HoverEvent he = new HoverEvent(HoverEvent.Action.SHOW_ITEM, new HoverEvent.ItemStackInfo(scrollStack)); ClickEvent ce = new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, pattern.toString()); return Style.EMPTY.withHoverEvent(he).withClickEvent(ce); @@ -70,7 +71,7 @@ public Component asText(boolean withExtra) { } public static class InlinePatternDataType implements InlineDataType { - private static final ResourceLocation ID = new ResourceLocation(HexAPI.MOD_ID, "pattern"); + private static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, "pattern"); public static final InlinePatternDataType INSTANCE = new InlinePatternDataType(); @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/AbstractPatternComponent.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/AbstractPatternComponent.java index 997bb09411..531bb2a85e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/AbstractPatternComponent.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/AbstractPatternComponent.java @@ -6,6 +6,7 @@ import at.petrak.hexcasting.client.render.PatternSettings; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.HolderLookup; import vazkii.patchouli.api.IComponentRenderContext; import vazkii.patchouli.api.ICustomComponent; import vazkii.patchouli.api.IVariable; @@ -77,7 +78,7 @@ public void render(GuiGraphics graphics, IComponentRenderContext context, float } @Override - public void onVariablesAvailable(UnaryOperator lookup) { + public void onVariablesAvailable(UnaryOperator lookup, HolderLookup.RegistryLookup.Provider registries) { this.patterns = this.getPatterns(lookup); } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/BrainsweepProcessor.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/BrainsweepProcessor.java index 576e82bb42..98ced2a109 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/BrainsweepProcessor.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/BrainsweepProcessor.java @@ -26,13 +26,13 @@ public class BrainsweepProcessor implements IComponentProcessor { @Override public void setup(Level level, IVariableProvider vars) { - var id = new ResourceLocation(vars.get("recipe").asString()); + var id = ResourceLocation.parse(vars.get("recipe", level.registryAccess()).asString()); var recman = level.getRecipeManager(); var brainsweepings = recman.getAllRecipesFor(HexRecipeStuffRegistry.BRAINSWEEP_TYPE); for (var poisonApples : brainsweepings) { - if (poisonApples.getId().equals(id)) { - this.recipe = poisonApples; + if (poisonApples.id().equals(id)) { + this.recipe = poisonApples.value(); break; } } @@ -46,14 +46,14 @@ public IVariable process(Level level, String key) { switch (key) { case "header" -> { - return IVariable.from(this.recipe.result().getBlock().getName()); + return IVariable.from(this.recipe.result().getBlock().getName(), level.registryAccess()); } case "input" -> { var inputStacks = this.recipe.blockIn().getDisplayedStacks(); - return IVariable.from(inputStacks.toArray(new ItemStack[0])); + return IVariable.from(inputStacks.toArray(new ItemStack[0]), level.registryAccess()); } case "result" -> { - return IVariable.from(new ItemStack(this.recipe.result().getBlock())); + return IVariable.from(new ItemStack(this.recipe.result().getBlock()), level.registryAccess()); } case "entity" -> { @@ -79,8 +79,8 @@ public IVariable process(Level level, String key) { return IVariable.wrapList(this.recipe.entityIn() .getTooltip(mc.options.advancedItemTooltips) .stream() - .map(IVariable::from) - .toList()); + .map(v -> IVariable.from(v, level.registryAccess())) + .toList(), level.registryAccess()); } case "mediaCost" -> { record ItemCost(Item item, int cost) { @@ -98,14 +98,14 @@ public boolean dividesEvenly (int dividend) { List validItemStacks = Arrays.stream(costs) .filter(itemCost -> itemCost.dividesEvenly((int)this.recipe.mediaCost())) .map(validItemCost -> new ItemStack(validItemCost.item, (int) this.recipe.mediaCost() / validItemCost.cost)) - .map(IVariable::from) + .map(v -> IVariable.from(v, level.registryAccess())) .toList(); if (!validItemStacks.isEmpty()) { - return IVariable.wrapList(validItemStacks); + return IVariable.wrapList(validItemStacks, level.registryAccess()); } // fallback: display in terms of dust - return IVariable.from(new ItemStack(HexItems.AMETHYST_DUST, (int) (this.recipe.mediaCost() / MediaConstants.DUST_UNIT))); + return IVariable.from(new ItemStack(HexItems.AMETHYST_DUST, (int) (this.recipe.mediaCost() / MediaConstants.DUST_UNIT)), level.registryAccess()); } default -> { return null; diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java index 13972ce372..4741f0c466 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java @@ -3,6 +3,7 @@ import com.google.gson.annotations.SerializedName; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.HolderLookup; import net.minecraft.network.chat.Component; import vazkii.patchouli.api.IComponentRenderContext; import vazkii.patchouli.api.ICustomComponent; @@ -19,6 +20,7 @@ public class CustomComponentTooltip implements ICustomComponent { IVariable tooltipReference; transient IVariable tooltipVar; + transient HolderLookup.Provider registries; transient List tooltip; transient int x, y; @@ -28,7 +30,7 @@ public void build(int componentX, int componentY, int pageNum) { x = componentX; y = componentY; tooltip = new ArrayList<>(); - for (IVariable s : tooltipVar.asListOrSingleton()) { + for (IVariable s : tooltipVar.asListOrSingleton(registries)) { tooltip.add(s.as(Component.class)); } } @@ -41,7 +43,7 @@ public void render(GuiGraphics graphics, IComponentRenderContext context, float } @Override - public void onVariablesAvailable(UnaryOperator lookup) { + public void onVariablesAvailable(UnaryOperator lookup, HolderLookup.Provider registries) { tooltipVar = lookup.apply(tooltipReference); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/LookupPatternComponent.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/LookupPatternComponent.java index 632c7abf79..9692f573dc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/LookupPatternComponent.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/LookupPatternComponent.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.google.gson.annotations.SerializedName; +import net.minecraft.core.HolderLookup; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import vazkii.patchouli.api.IVariable; @@ -37,10 +38,10 @@ public boolean showStrokeOrder() { } @Override - public void onVariablesAvailable(UnaryOperator lookup) { + public void onVariablesAvailable(UnaryOperator lookup, HolderLookup.Provider registries) { var opName = lookup.apply(IVariable.wrap(this.opNameRaw)).asString(); this.opName = ResourceLocation.tryParse(opName); - super.onVariablesAvailable(lookup); + super.onVariablesAvailable(lookup, registries); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/ManualPatternComponent.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/ManualPatternComponent.java index 06f77903ba..768bc855fd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/ManualPatternComponent.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/ManualPatternComponent.java @@ -5,6 +5,7 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.annotations.SerializedName; +import net.minecraft.core.HolderLookup; import vazkii.patchouli.api.IVariable; import java.util.ArrayList; @@ -21,11 +22,12 @@ public class ManualPatternComponent extends AbstractPatternComponent { public String strokeOrderRaw; protected transient boolean strokeOrder; + private transient HolderLookup.RegistryLookup.Provider registries; @Override public List getPatterns(UnaryOperator lookup) { this.strokeOrder = lookup.apply(IVariable.wrap(this.strokeOrderRaw)).asBoolean(true); - var patsRaw = lookup.apply(IVariable.wrap(patternsRaw)).asListOrSingleton(); + var patsRaw = lookup.apply(IVariable.wrap(patternsRaw)).asListOrSingleton(registries); var out = new ArrayList(); for (var ivar : patsRaw) { @@ -46,9 +48,10 @@ public boolean showStrokeOrder() { } @Override - public void onVariablesAvailable(UnaryOperator lookup) { + public void onVariablesAvailable(UnaryOperator lookup, HolderLookup.RegistryLookup.Provider registries) { this.strokeOrder = IVariable.wrap(this.strokeOrderRaw).asBoolean(true); + this.registries = registries; - super.onVariablesAvailable(lookup); + super.onVariablesAvailable(lookup, registries); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/MultiCraftingProcessor.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/MultiCraftingProcessor.java index 055128b7a5..8311181fe6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/MultiCraftingProcessor.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/MultiCraftingProcessor.java @@ -16,6 +16,8 @@ import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.item.crafting.ShapedRecipe; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import vazkii.patchouli.api.IComponentProcessor; import vazkii.patchouli.api.IVariable; import vazkii.patchouli.api.IVariableProvider; @@ -32,10 +34,10 @@ public class MultiCraftingProcessor implements IComponentProcessor { @Override public void setup(Level level, IVariableProvider vars) { - List names = vars.get("recipes").asStream().map(IVariable::asString).collect(Collectors.toList()); + List names = vars.get("recipes", level.registryAccess()).asStream(level.registryAccess()).map(IVariable::asString).toList(); this.recipes = new ArrayList<>(); for (String name : names) { - CraftingRecipe recipe = PatchouliUtils.getRecipe(RecipeType.CRAFTING, new ResourceLocation(name)); + CraftingRecipe recipe = PatchouliUtils.getRecipe(RecipeType.CRAFTING, ResourceLocation.parse(name)); if (recipe != null) { recipes.add(recipe); if (shapeless) { @@ -55,13 +57,13 @@ public void setup(Level level, IVariableProvider vars) { } @Override - public IVariable process(Level level, String key) { + public @Nullable IVariable process(Level level, String key) { if (recipes.isEmpty()) { return null; } if (key.equals("heading")) { if (!hasCustomHeading) { - return IVariable.from(recipes.get(0).getResultItem(level.registryAccess()).getHoverName()); + return IVariable.from(recipes.getFirst().getResultItem(level.registryAccess()).getHoverName(), level.registryAccess()); } return null; } @@ -85,14 +87,17 @@ public IVariable process(Level level, String key) { ingredients.add(list.size() > index ? list.get(index) : Ingredient.EMPTY); } } - return PatchouliUtils.interweaveIngredients(ingredients, longestIngredientSize); + return PatchouliUtils.interweaveIngredients(ingredients, longestIngredientSize, level.registryAccess()); } if (key.equals("output")) { return IVariable.wrapList( - recipes.stream().map(recipe -> recipe.getResultItem(level.registryAccess())).map(IVariable::from).collect(Collectors.toList())); + recipes.stream() + .map(recipe -> recipe.getResultItem(level.registryAccess())) + .map(v -> IVariable.from(v, level.registryAccess())) + .collect(Collectors.toList()), level.registryAccess()); } if (key.equals("shapeless")) { - return IVariable.wrap(shapeless); + return IVariable.wrap(shapeless, level.registryAccess()); } return null; } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatchouliUtils.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatchouliUtils.java index 574b296e1b..e149dd62c9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatchouliUtils.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatchouliUtils.java @@ -1,12 +1,10 @@ package at.petrak.hexcasting.interop.patchouli; import net.minecraft.client.Minecraft; +import net.minecraft.core.HolderLookup; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.Container; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.*; import vazkii.patchouli.api.IVariable; import java.util.ArrayList; @@ -22,13 +20,15 @@ */ public class PatchouliUtils { @SuppressWarnings("unchecked") - public static , C extends Container> T getRecipe(RecipeType type, ResourceLocation id) { + public static , I extends RecipeInput> T getRecipe(RecipeType type, ResourceLocation id) { // PageDoubleRecipeRegistry if (Minecraft.getInstance().level == null) { return null; } else { var manager = Minecraft.getInstance().level.getRecipeManager(); + return (T) manager.byKey(id) + .map(RecipeHolder::value) .filter((recipe) -> recipe.getType() == type).orElse(null); } } @@ -42,10 +42,11 @@ public static , C extends Container> T getRecipe(RecipeType< * @param longestIngredientSize Longest ingredient in the entire recipe * @return Serialized Patchouli ingredient string */ - public static IVariable interweaveIngredients(List ingredients, int longestIngredientSize) { + public static IVariable interweaveIngredients(List ingredients, int longestIngredientSize, HolderLookup.RegistryLookup.Provider registries) { if (ingredients.size() == 1) { - return IVariable.wrapList(Arrays.stream(ingredients.get(0).getItems()).map(IVariable::from).collect( - Collectors.toList())); + return IVariable.wrapList(Arrays.stream(ingredients.get(0).getItems()) + .map(v -> IVariable.from(v, registries)) + .collect(Collectors.toList()), registries); } ItemStack[] empty = {ItemStack.EMPTY}; @@ -60,17 +61,18 @@ public static IVariable interweaveIngredients(List ingredients, int List list = new ArrayList<>(stacks.size() * longestIngredientSize); for (int i = 0; i < longestIngredientSize; i++) { for (ItemStack[] stack : stacks) { - list.add(IVariable.from(stack[i % stack.length])); + list.add(IVariable.from(stack[i % stack.length], registries)); } } - return IVariable.wrapList(list); + return IVariable.wrapList(list, registries); } /** * Overload of the method above that uses the provided list's longest ingredient size. */ - public static IVariable interweaveIngredients(List ingredients) { + public static IVariable interweaveIngredients(List ingredients, HolderLookup.RegistryLookup.Provider registries) { return interweaveIngredients(ingredients, - ingredients.stream().mapToInt(ingr -> ingr.getItems().length).max().orElse(1)); + ingredients.stream().mapToInt(ingr -> ingr.getItems().length).max().orElse(1), registries + ); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatternProcessor.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatternProcessor.java index 94e9e258b8..3c474040fc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatternProcessor.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/PatternProcessor.java @@ -12,9 +12,9 @@ public class PatternProcessor implements IComponentProcessor { @Override public void setup(Level level, IVariableProvider vars) { if (vars.has("header")) - translationKey = vars.get("header").asString(); + translationKey = vars.get("header", level.registryAccess()).asString(); else { - IVariable key = vars.get("op_id"); + IVariable key = vars.get("op_id", level.registryAccess()); String opName = key.asString(); String prefix = "hexcasting.action."; @@ -26,7 +26,7 @@ public void setup(Level level, IVariableProvider vars) { @Override public IVariable process(Level level, String key) { if (key.equals("translation_key")) { - return IVariable.wrap(translationKey); + return IVariable.wrap(translationKey, level.registryAccess()); } return null; diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpGetScale.kt b/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpGetScale.kt index d1a9868c51..83f9e9de20 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpGetScale.kt +++ b/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpGetScale.kt @@ -11,7 +11,7 @@ object OpGetScale : ConstMediaAction { override val argc = 1 override fun execute(args: List, env: CastingEnvironment): List { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) env.assertEntityInRange(target) return IXplatAbstractions.INSTANCE.pehkuiApi.getScale(target).toDouble().asActionResult } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpSetScale.kt b/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpSetScale.kt index 9c171c5784..80883870ac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpSetScale.kt +++ b/Common/src/main/java/at/petrak/hexcasting/interop/pehkui/OpSetScale.kt @@ -17,7 +17,7 @@ object OpSetScale : SpellAction { args: List, env: CastingEnvironment ): SpellAction.Result { - val target = args.getEntity(0, argc) + val target = args.getEntity(env.world, 0, argc) val scale = args.getDoubleBetween(1, 1.0 / 32.0, 8.0, argc) env.assertEntityInRange(target) diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java index 6ccfa837fc..f8172dc5b2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java +++ b/Common/src/main/java/at/petrak/hexcasting/mixin/MixinWanderingTrader.java @@ -1,6 +1,9 @@ package at.petrak.hexcasting.mixin; +import at.petrak.hexcasting.common.lib.HexDataComponents; +import net.minecraft.util.Unit; import net.minecraft.world.entity.npc.WanderingTrader; +import net.minecraft.world.item.trading.ItemCost; import net.minecraft.world.item.trading.MerchantOffers; import net.minecraft.world.item.trading.MerchantOffer; import net.minecraft.world.item.ItemStack; @@ -30,8 +33,8 @@ private void addNewTrades(CallbackInfo ci) { if (rand.nextFloat() < HexConfig.server().traderScrollChance() && self.getServer() != null) { ItemStack scroll = new ItemStack(HexItems.SCROLL_LARGE); AddPerWorldPatternToScrollFunc.doStatic(scroll, rand, self.getServer().overworld()); - NBTHelper.putBoolean(scroll, ItemScroll.TAG_NEEDS_PURCHASE, true); - offerList.set(5, new MerchantOffer(new ItemStack(Items.EMERALD, 12), scroll, 1, 1, 1)); + scroll.set(HexDataComponents.NEEDS_PURCHASE, Unit.INSTANCE); + offerList.set(5, new MerchantOffer(new ItemCost(Items.EMERALD, 12), scroll, 1, 1, 1)); } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorDamageSource.java b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorDamageSource.java deleted file mode 100644 index bf64c438fc..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorDamageSource.java +++ /dev/null @@ -1,17 +0,0 @@ -package at.petrak.hexcasting.mixin.accessor; - -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.damagesource.DamageSources; -import net.minecraft.world.damagesource.DamageType; -import net.minecraft.world.entity.Entity; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(DamageSources.class) -public interface AccessorDamageSource { - @Invoker("source") - @Nullable - DamageSource hex$source(ResourceKey key, @Nullable Entity entity); -} diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorLootTable.java b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorLootTable.java index d2be3c734d..b5661c8e97 100644 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorLootTable.java +++ b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorLootTable.java @@ -8,16 +8,17 @@ import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; +import java.util.List; import java.util.function.BiFunction; @Mixin(LootTable.class) public interface AccessorLootTable { @Accessor("functions") - LootItemFunction[] hex$getFunctions(); + List hex$getFunctions(); @Accessor("functions") @Mutable - void hex$setFunctions(LootItemFunction[] lifs); + void hex$setFunctions(List lifs); @Accessor("compositeFunction") @Mutable diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorPotionBrewing.java b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorPotionBrewing.java deleted file mode 100644 index 88fe176a12..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/AccessorPotionBrewing.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.petrak.hexcasting.mixin.accessor; - -import net.minecraft.world.item.Item; -import net.minecraft.world.item.alchemy.Potion; -import net.minecraft.world.item.alchemy.PotionBrewing; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(PotionBrewing.class) -public interface AccessorPotionBrewing { - @Invoker("addMix") - static void addMix(Potion p_43514_, Item p_43515_, Potion p_43516_) { - } -} diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java deleted file mode 100644 index 5aaf071208..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package at.petrak.hexcasting.mixin.accessor; - -import net.minecraft.advancements.CriteriaTriggers; -import net.minecraft.advancements.CriterionTrigger; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(CriteriaTriggers.class) -public interface CriteriaTriggersAccessor { - @Invoker("register") - static > T hex$register(T trigger) { - throw new UnsupportedOperationException(); - } -} diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/client/AccessorMouseHandler.java b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/client/AccessorMouseHandler.java index 54343bb81c..80e30a5dff 100644 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/client/AccessorMouseHandler.java +++ b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/client/AccessorMouseHandler.java @@ -6,9 +6,9 @@ @Mixin(MouseHandler.class) public interface AccessorMouseHandler { - @Accessor("accumulatedScroll") - double hex$getAccumulatedScroll(); + @Accessor("accumulatedScrollY") + double hex$getAccumulatedScrollY(); - @Accessor("accumulatedScroll") - void hex$setAccumulatedScroll(double scroll); + @Accessor("accumulatedScrollY") + void hex$setAccumulatedScrollY(double scroll); } diff --git a/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java b/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java index 2407d3571a..569e74d8d8 100644 --- a/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java +++ b/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java @@ -7,6 +7,7 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.mojang.datafixers.util.Pair; +import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -61,7 +62,7 @@ public Pair lookupReverse(ResourceKey { var inner = new CompoundTag(); @@ -72,7 +73,7 @@ public CompoundTag save(CompoundTag tag) { return tag; } - private static ScrungledPatternsSave load(CompoundTag tag) { + private static ScrungledPatternsSave load(CompoundTag tag, HolderLookup.Provider lookup) { var registryKey = IXplatAbstractions.INSTANCE.getActionRegistry().key(); var map = new HashMap(); @@ -83,7 +84,7 @@ private static ScrungledPatternsSave load(CompoundTag tag) { var rawKey = inner.getString(TAG_KEY); var dir = HexDir.values()[rawDir]; - var key = ResourceKey.create(registryKey, new ResourceLocation(rawKey)); + var key = ResourceKey.create(registryKey, ResourceLocation.parse(rawKey)); map.put(sig, new PerWorldEntry(key, dir)); } @@ -116,8 +117,10 @@ public static ScrungledPatternsSave createFromScratch(long seed) { public static ScrungledPatternsSave open(ServerLevel overworld) { return overworld.getDataStorage().computeIfAbsent( - ScrungledPatternsSave::load, - () -> ScrungledPatternsSave.createFromScratch(overworld.getSeed()), + new SavedData.Factory<>( + () -> ScrungledPatternsSave.createFromScratch(overworld.getSeed()), + ScrungledPatternsSave::load + ), TAG_SAVED_DATA); } diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java index 81806255b3..53ad1b5536 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java @@ -7,6 +7,7 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.item.ItemPropertyFunction; import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -19,7 +20,7 @@ import java.util.stream.Collectors; public interface IClientXplatAbstractions { - void sendPacketToServer(IMessage packet); + void sendPacketToServer(CustomPacketPayload packet); void setRenderLayer(Block block, RenderType type); diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java index 86dbc24586..d0bb2c0469 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java @@ -20,11 +20,16 @@ import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.player.Sentinel; import at.petrak.hexcasting.common.msgs.IMessage; +import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; +import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientType; +import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; import com.mojang.authlib.GameProfile; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.ClientCommonPacketListener; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -65,14 +70,14 @@ public interface IXplatAbstractions { void initPlatformSpecific(); - void sendPacketToPlayer(ServerPlayer target, IMessage packet); + void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet); - void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, IMessage packet); + void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, CustomPacketPayload packet); - void sendPacketTracking(Entity entity, IMessage packet); + void sendPacketTracking(Entity entity, CustomPacketPayload packet); // https://github.com/VazkiiMods/Botania/blob/13b7bcd9cbb6b1a418b0afe455662d29b46f1a7f/Xplat/src/main/java/vazkii/botania/xplat/IXplatAbstractions.java#L157 - Packet toVanillaClientboundPacket(IMessage message); + Packet toVanillaClientboundPacket(CustomPacketPayload message); // double getReachDistance(Player player); @@ -115,9 +120,6 @@ public interface IXplatAbstractions { @Nullable ADMediaHolder findMediaHolder(ItemStack stack); - @Nullable - ADMediaHolder findMediaHolder(ServerPlayer player); - @Nullable ADIotaHolder findDataHolder(ItemStack stack); @@ -180,6 +182,10 @@ BlockEntityType createBlockEntityType(BiFunction getEvalSoundRegistry(); + Registry> getStateIngredientRegistry(); + + Registry> getBrainsweepeeIngredientRegistry(); + GameProfile HEXCASTING = new GameProfile(UUID.fromString("8BE7E9DA-1667-11EE-BE56-0242AC120002"), "[HexCasting]"); boolean isBreakingAllowed(ServerLevel world, BlockPos pos, BlockState state, @Nullable Player player); diff --git a/Common/src/main/resources/architectury.common.json b/Common/src/main/resources/architectury.common.json new file mode 100644 index 0000000000..e4a0a01454 --- /dev/null +++ b/Common/src/main/resources/architectury.common.json @@ -0,0 +1,3 @@ +{ + "accessWidener": "hexplat.accesswidener" +} \ No newline at end of file diff --git a/Common/src/main/resources/hexplat.accesswidener b/Common/src/main/resources/hexplat.accesswidener index d8a1955d13..d60621d9cf 100644 --- a/Common/src/main/resources/hexplat.accesswidener +++ b/Common/src/main/resources/hexplat.accesswidener @@ -1,10 +1,10 @@ accessWidener v1 named -accessible class net/minecraft/client/renderer/RenderType$CompositeRenderType -accessible class net/minecraft/client/renderer/RenderType$CompositeState -accessible field net/minecraft/client/renderer/RenderType$CompositeState textureState Lnet/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard; -accessible class net/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard -accessible class net/minecraft/world/item/crafting/Ingredient$Value -accessible method net/minecraft/world/item/crafting/Ingredient (Ljava/util/stream/Stream;)V -accessible method net/minecraft/world/item/context/UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V -accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; -accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; \ No newline at end of file +accessible class net/minecraft/client/renderer/RenderType$CompositeRenderType +accessible class net/minecraft/client/renderer/RenderType$CompositeState +accessible field net/minecraft/client/renderer/RenderType$CompositeState textureState Lnet/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard; +accessible class net/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard +accessible class net/minecraft/world/item/crafting/Ingredient$Value +accessible method net/minecraft/world/item/crafting/Ingredient (Ljava/util/stream/Stream;)V +#accessible method net/minecraft/world/item/context/UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V +#accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; +#accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; \ No newline at end of file diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 0632756cb7..59a78e9373 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -68,24 +68,24 @@ dependencies { neoForge "net.neoforged:neoforge:${neoforgeVersion}" common(project(path: ':Common', configuration: 'namedElements')) { transitive false } shadowBundle(project(path: ':Common', configuration: 'transformProductionNeoForge')) { transitive false } - implementation "thedarkcolour:kotlinforforge:$kotlinForForgeVersion" + modImplementation "thedarkcolour:kotlinforforge:$kotlinForForgeVersion" // === MANDATORY DEPS === - implementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" - implementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-NEOFORGE-SNAPSHOT" - implementation "top.theillusivec4.caelus:caelus-forge:$caelusVersion" -// implementation("com.samsthenerd.inline:inline-forge:$minecraftVersion-$inlineVersion") + modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" + modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-NEOFORGE-SNAPSHOT" + modImplementation "top.theillusivec4.caelus:caelus-forge:$caelusVersion" + modImplementation "com.samsthenerd.inline:inline-common:1.21.1-1.2.2-74" // needed for inline to run runtimeOnly("me.shedaniel.cloth:cloth-config-forge:$clothConfigVersion") // === OPTIONAL DEPS === - compileOnly "dev.emi:emi-neoforge:${emiVersion}:api" - runtimeOnly "dev.emi:emi-neoforge:${emiVersion}" + modCompileOnly "dev.emi:emi-neoforge:${emiVersion}:api" + modRuntimeOnly "dev.emi:emi-neoforge:${emiVersion}" modImplementation "io.wispforest:accessories-neoforge:$accessoriesVersion" - api("com.github.Virtuoel:Pehkui:${pehkuiVersion}-1.21-neoforge") + modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}-1.21-neoforge") // "Required due to issues with JIJ dependency resolving in arch or something" // https://github.com/wisp-forest/accessories diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java index 30e0e2a53e..ebfa19737b 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java @@ -23,11 +23,10 @@ import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; -import net.minecraftforge.client.event.*; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.client.event.*; +import net.neoforged.neoforge.common.NeoForge; import java.io.IOException; import java.util.function.Function; @@ -48,37 +47,34 @@ public static void clientInit(FMLClientSetupEvent evt) { (colorizer, block) -> GLOBAL_BLOCK_COLORS.register(colorizer, block)); }); - var evBus = MinecraftForge.EVENT_BUS; + var evBus = NeoForge.EVENT_BUS; evBus.addListener((ClientPlayerNetworkEvent.LoggingIn e) -> PatternRegistryManifest.processRegistry(null)); + // TODO port: check if gametimedelta is the right one evBus.addListener((RenderLevelStageEvent e) -> { if (e.getStage().equals(RenderLevelStageEvent.Stage.AFTER_PARTICLES)) { - HexAdditionalRenderers.overlayLevel(e.getPoseStack(), e.getPartialTick()); + HexAdditionalRenderers.overlayLevel(e.getPoseStack(), e.getPartialTick().getGameTimeDeltaTicks()); } }); evBus.addListener((RenderGuiEvent.Post e) -> { - HexAdditionalRenderers.overlayGui(e.getGuiGraphics(), e.getPartialTick()); + HexAdditionalRenderers.overlayGui(e.getGuiGraphics(), e.getPartialTick().getGameTimeDeltaTicks()); }); - - evBus.addListener((TickEvent.RenderTickEvent e) -> { - if (e.phase == TickEvent.Phase.START) { - ClientTickCounter.renderTickStart(e.renderTickTime); - } + //TODO port: maybe replace with DeltaTracker from Mojang? + evBus.addListener((RenderFrameEvent.Pre e) -> { + ClientTickCounter.renderTickStart(e.getPartialTick().getGameTimeDeltaTicks()); }); - evBus.addListener((TickEvent.ClientTickEvent e) -> { - if (e.phase == TickEvent.Phase.END) { - ClientTickCounter.clientTickEnd(); - ShiftScrollListener.clientTickEnd(); - } + evBus.addListener((ClientTickEvent.Post e) -> { + ClientTickCounter.clientTickEnd(); + ShiftScrollListener.clientTickEnd(); }); evBus.addListener((InputEvent.MouseScrollingEvent e) -> { - var cancel = ShiftScrollListener.onScrollInGameplay(e.getScrollDelta()); + var cancel = ShiftScrollListener.onScrollInGameplay(e.getScrollDeltaY()); e.setCanceled(cancel); }); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index 518a81a2e1..203f067aec 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -4,24 +4,23 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraft.util.RandomSource; +import net.neoforged.neoforge.common.ModConfigSpec; import java.util.List; import static at.petrak.hexcasting.api.mod.HexConfig.noneMatch; public class ForgeHexConfig implements HexConfig.CommonConfigAccess { - private static ForgeConfigSpec.LongValue dustMediaAmount; - private static ForgeConfigSpec.LongValue shardMediaAmount; - private static ForgeConfigSpec.LongValue chargedCrystalMediaAmount; - private static ForgeConfigSpec.DoubleValue mediaToHealthRate; + private static ModConfigSpec.LongValue dustMediaAmount; + private static ModConfigSpec.LongValue shardMediaAmount; + private static ModConfigSpec.LongValue chargedCrystalMediaAmount; + private static ModConfigSpec.DoubleValue mediaToHealthRate; - private static ForgeConfigSpec.IntValue cypherCooldown; - private static ForgeConfigSpec.IntValue trinketCooldown; - private static ForgeConfigSpec.IntValue artifactCooldown; + private static ModConfigSpec.IntValue cypherCooldown; + private static ModConfigSpec.IntValue trinketCooldown; + private static ModConfigSpec.IntValue artifactCooldown; - public ForgeHexConfig(ForgeConfigSpec.Builder builder) { + public ForgeHexConfig(ModConfigSpec.Builder builder) { builder.push("Media Amounts"); dustMediaAmount = builder.comment("How much media a single Amethyst Dust item is worth") .defineInRange("dustMediaAmount", DEFAULT_DUST_MEDIA_AMOUNT, 0, Integer.MAX_VALUE); @@ -79,13 +78,13 @@ public int artifactCooldown() { } public static class Client implements HexConfig.ClientConfigAccess { - private static ForgeConfigSpec.BooleanValue ctrlTogglesOffStrokeOrder; - private static ForgeConfigSpec.BooleanValue invertSpellbookScrollDirection; - private static ForgeConfigSpec.BooleanValue invertAbacusScrollDirection; - private static ForgeConfigSpec.DoubleValue gridSnapThreshold; - private static ForgeConfigSpec.BooleanValue clickingTogglesDrawing; + private static ModConfigSpec.BooleanValue ctrlTogglesOffStrokeOrder; + private static ModConfigSpec.BooleanValue invertSpellbookScrollDirection; + private static ModConfigSpec.BooleanValue invertAbacusScrollDirection; + private static ModConfigSpec.DoubleValue gridSnapThreshold; + private static ModConfigSpec.BooleanValue clickingTogglesDrawing; - public Client(ForgeConfigSpec.Builder builder) { + public Client(ModConfigSpec.Builder builder) { ctrlTogglesOffStrokeOrder = builder.comment( "Whether the ctrl key will instead turn *off* the color gradient on patterns") .define("ctrlTogglesOffStrokeOrder", DEFAULT_CTRL_TOGGLES_OFF_STROKE_ORDER); @@ -132,24 +131,24 @@ public boolean clickingTogglesDrawing() { } public static class Server implements HexConfig.ServerConfigAccess { - private static ForgeConfigSpec.IntValue opBreakHarvestLevel; - private static ForgeConfigSpec.IntValue maxOpCount; - private static ForgeConfigSpec.IntValue maxSpellCircleLength; - private static ForgeConfigSpec.ConfigValue> actionDenyList; - private static ForgeConfigSpec.ConfigValue> circleActionDenyList; + private static ModConfigSpec.IntValue opBreakHarvestLevel; + private static ModConfigSpec.IntValue maxOpCount; + private static ModConfigSpec.IntValue maxSpellCircleLength; + private static ModConfigSpec.ConfigValue> actionDenyList; + private static ModConfigSpec.ConfigValue> circleActionDenyList; - private static ForgeConfigSpec.BooleanValue greaterTeleportSplatsItems; - private static ForgeConfigSpec.BooleanValue villagersOffendedByMindMurder; - private static ForgeConfigSpec.ConfigValue> tpDimDenyList; - private static ForgeConfigSpec.BooleanValue doesTrueNameHaveAmbit; - private static ForgeConfigSpec.DoubleValue traderScrollChance; + private static ModConfigSpec.BooleanValue greaterTeleportSplatsItems; + private static ModConfigSpec.BooleanValue villagersOffendedByMindMurder; + private static ModConfigSpec.ConfigValue> tpDimDenyList; + private static ModConfigSpec.BooleanValue doesTrueNameHaveAmbit; + private static ModConfigSpec.DoubleValue traderScrollChance; - private static ForgeConfigSpec.ConfigValue> fewScrollTables; - private static ForgeConfigSpec.ConfigValue> someScrollTables; - private static ForgeConfigSpec.ConfigValue> manyScrollTables; + private static ModConfigSpec.ConfigValue> fewScrollTables; + private static ModConfigSpec.ConfigValue> someScrollTables; + private static ModConfigSpec.ConfigValue> manyScrollTables; - public Server(ForgeConfigSpec.Builder builder) { + public Server(ModConfigSpec.Builder builder) { builder.push("Spells"); maxOpCount = builder.comment("The maximum number of actions that can be executed in one tick, to avoid " + "hanging the server.") @@ -243,7 +242,7 @@ public double traderScrollChance() { } private static boolean isValidReslocArg(Object o) { - return o instanceof String s && ResourceLocation.isValidResourceLocation(s); + return o instanceof String s && ResourceLocation.tryParse(s) != null; } } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index 39bd896580..f598754ff5 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -18,6 +18,8 @@ import at.petrak.hexcasting.common.misc.PlayerPositionRecorder; import at.petrak.hexcasting.common.misc.RegisterMisc; import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry; +import at.petrak.hexcasting.common.recipe.ingredient.StateIngredients; +import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredients; import at.petrak.hexcasting.forge.cap.CapSyncers; import at.petrak.hexcasting.forge.cap.ForgeCapabilityHandler; import at.petrak.hexcasting.forge.cap.adimpl.CapClientCastingStack; @@ -25,6 +27,7 @@ import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; import at.petrak.hexcasting.forge.interop.curios.CuriosRenderers; import at.petrak.hexcasting.forge.lib.ForgeHexArgumentTypeRegistry; +import at.petrak.hexcasting.forge.lib.ForgeHexIngredientTypes; import at.petrak.hexcasting.forge.lib.ForgeHexLootMods; import at.petrak.hexcasting.forge.network.ForgePacketHandler; import at.petrak.hexcasting.forge.network.MsgBrainsweepAck; @@ -32,6 +35,7 @@ import at.petrak.hexcasting.forge.recipe.ForgeUnsealedIngredient; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import net.minecraft.core.Holder; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; @@ -47,69 +51,69 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockSetType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.ToolActions; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.EntityAttributeModificationEvent; -import net.minecraftforge.event.entity.living.LivingConversionEvent; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.level.BlockEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.registries.RegisterEvent; -import thedarkcolour.kotlinforforge.KotlinModLoadingContext; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.common.ItemAbilities; +import net.neoforged.neoforge.common.ModConfigSpec; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent; +import net.neoforged.neoforge.event.entity.EntityAttributeModificationEvent; +import net.neoforged.neoforge.event.entity.living.LivingConversionEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.tick.EntityTickEvent; +import net.neoforged.neoforge.event.tick.LevelTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.registries.NewRegistryEvent; +import net.neoforged.neoforge.registries.RegisterEvent; +import thedarkcolour.kotlinforforge.neoforge.KotlinModLoadingContext; import java.util.function.BiConsumer; import java.util.function.Consumer; @Mod(HexAPI.MOD_ID) public class ForgeHexInitializer { - public ForgeHexInitializer() { - initConfig(); + public ForgeHexInitializer(ModContainer modContainer) { + initConfig(modContainer); initRegistries(); initRegistry(); initListeners(); } - private static void initConfig() { - var config = new ForgeConfigSpec.Builder().configure(ForgeHexConfig::new); - var clientConfig = new ForgeConfigSpec.Builder().configure(ForgeHexConfig.Client::new); - var serverConfig = new ForgeConfigSpec.Builder().configure(ForgeHexConfig.Server::new); + private static void initConfig(ModContainer modContainer) { + var config = new ModConfigSpec.Builder().configure(ForgeHexConfig::new); + var clientConfig = new ModConfigSpec.Builder().configure(ForgeHexConfig.Client::new); + var serverConfig = new ModConfigSpec.Builder().configure(ForgeHexConfig.Server::new); HexConfig.setCommon(config.getLeft()); HexConfig.setClient(clientConfig.getLeft()); HexConfig.setServer(serverConfig.getLeft()); - var mlc = ModLoadingContext.get(); - mlc.registerConfig(ModConfig.Type.COMMON, config.getRight()); - mlc.registerConfig(ModConfig.Type.CLIENT, clientConfig.getRight()); - mlc.registerConfig(ModConfig.Type.SERVER, serverConfig.getRight()); + modContainer.registerConfig(ModConfig.Type.COMMON, config.getRight()); + modContainer.registerConfig(ModConfig.Type.CLIENT, clientConfig.getRight()); + modContainer.registerConfig(ModConfig.Type.SERVER, serverConfig.getRight()); } public static void initRegistries() { - if (!(BuiltInRegistries.REGISTRY instanceof MappedRegistry rootRegistry)) return; - rootRegistry.unfreeze(); - - IXplatAbstractions.INSTANCE.getActionRegistry(); - IXplatAbstractions.INSTANCE.getSpecialHandlerRegistry(); - IXplatAbstractions.INSTANCE.getIotaTypeRegistry(); - IXplatAbstractions.INSTANCE.getArithmeticRegistry(); - IXplatAbstractions.INSTANCE.getContinuationTypeRegistry(); - IXplatAbstractions.INSTANCE.getEvalSoundRegistry(); - - rootRegistry.freeze(); + getModEventBus().addListener(NewRegistryEvent.class, ev -> { + ev.register(IXplatAbstractions.INSTANCE.getActionRegistry()); + ev.register(IXplatAbstractions.INSTANCE.getSpecialHandlerRegistry()); + ev.register(IXplatAbstractions.INSTANCE.getIotaTypeRegistry()); + ev.register(IXplatAbstractions.INSTANCE.getArithmeticRegistry()); + ev.register(IXplatAbstractions.INSTANCE.getContinuationTypeRegistry()); + ev.register(IXplatAbstractions.INSTANCE.getEvalSoundRegistry()); + ev.register(IXplatAbstractions.INSTANCE.getStateIngredientRegistry()); + ev.register(IXplatAbstractions.INSTANCE.getBrainsweepeeIngredientRegistry()); + }); } private static void initRegistry() { @@ -123,6 +127,7 @@ private static void initRegistry() { bind(Registries.ITEM, HexBlocks::registerBlockItems); bind(Registries.BLOCK_ENTITY_TYPE, HexBlockEntities::registerTiles); bind(Registries.ITEM, HexItems::registerItems); + bind(Registries.DATA_COMPONENT_TYPE, HexDataComponents::registerDataComponents); bind(Registries.RECIPE_SERIALIZER, HexRecipeStuffRegistry::registerSerializers); bind(Registries.RECIPE_TYPE, HexRecipeStuffRegistry::registerTypes); @@ -130,44 +135,51 @@ private static void initRegistry() { bind(Registries.ENTITY_TYPE, HexEntities::registerEntities); bind(Registries.ATTRIBUTE, HexAttributes::register); bind(Registries.MOB_EFFECT, HexMobEffects::register); - bind(Registries.POTION, HexPotions::register); - bind(Registries.PARTICLE_TYPE, HexParticles::registerParticles); + bind(Registries.TRIGGER_TYPE, HexAdvancementTriggers::registerTriggers); + bind(HexRegistries.IOTA_TYPE, HexIotaTypes::registerTypes); bind(HexRegistries.ACTION, HexActions::register); bind(HexRegistries.SPECIAL_HANDLER, HexSpecialHandlers::register); bind(HexRegistries.ARITHMETIC, HexArithmetics::register); bind(HexRegistries.CONTINUATION_TYPE, HexContinuationTypes::registerContinuations); bind(HexRegistries.EVAL_SOUND, HexEvalSounds::register); + bind(HexRegistries.STATE_INGREDIENT, StateIngredients::register); + bind(HexRegistries.BRAINSWEEPEE_INGREDIENT, BrainsweepeeIngredients::register); ForgeHexArgumentTypeRegistry.ARGUMENT_TYPES.register(getModEventBus()); ForgeHexLootMods.REGISTRY.register(getModEventBus()); - - HexAdvancementTriggers.registerTriggers(); + ForgeHexIngredientTypes.INGREDIENT_TYPES.register(getModEventBus()); RegisterMisc.register(); } // https://github.com/VazkiiMods/Botania/blob/1.18.x/Forge/src/main/java/vazkii/botania/forge/ForgeCommonInitializer.java - private static void bind(ResourceKey> registry, - Consumer> source) { + private static void bind(ResourceKey> registry, Consumer> source) { getModEventBus().addListener((RegisterEvent event) -> { if (registry.equals(event.getRegistryKey())) { - source.accept((t, rl) -> event.register(registry, rl, () -> t)); + source.accept((t, rl) -> { + if(t == null) + System.out.println("OBJ " + rl + " is null! (" + registry + ")"); + + event.register(registry, rl, () -> t); + }); } }); } private static void initListeners() { var modBus = getModEventBus(); - var evBus = MinecraftForge.EVENT_BUS; + var evBus = NeoForge.EVENT_BUS; + + if(FMLEnvironment.dist == Dist.CLIENT) + modBus.register(ForgeHexClientInitializer.class); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> modBus.register(ForgeHexClientInitializer.class)); + ForgePacketHandler.init(modBus); modBus.addListener((FMLCommonSetupEvent evt) -> evt.enqueueWork(() -> { - ForgePacketHandler.init(); HexComposting.setup(); HexStrippables.init(); // Forge does not strictly require TreeGrowers to initialize during early game stages, unlike Fabric @@ -190,9 +202,6 @@ private static void initListeners() { // We have to do these at some point when the registries are still open modBus.addListener((RegisterEvent evt) -> { if (evt.getRegistryKey().equals(Registries.ITEM)) { - CraftingHelper.register(ForgeUnsealedIngredient.ID, ForgeUnsealedIngredient.Serializer.INSTANCE); - CraftingHelper.register(ForgeModConditionalIngredient.ID, - ForgeModConditionalIngredient.Serializer.INSTANCE); HexStatistics.register(); HexLootFunctions.registerSerializers((lift, id) -> Registry.register(BuiltInRegistries.LOOT_FUNCTION_TYPE, id, lift)); @@ -212,15 +221,15 @@ private static void initListeners() { evBus.addListener((LivingConversionEvent.Post evt) -> BrainsweepingEvents.copyBrainsweepPostTransformation(evt.getEntity(), evt.getOutcome())); - evBus.addListener((LivingEvent.LivingTickEvent evt) -> { + evBus.addListener((EntityTickEvent.Post evt) -> { if (evt.getEntity() instanceof ServerPlayer splayer) { OpFlight.tickDownFlight(splayer); OpAltiora.checkPlayerCollision(splayer); } }); - evBus.addListener((TickEvent.LevelTickEvent evt) -> { - if (evt.phase == TickEvent.Phase.END && evt.level instanceof ServerLevel world) { + evBus.addListener((LevelTickEvent.Post evt) -> { + if (evt.getLevel() instanceof ServerLevel world) { PlayerPositionRecorder.updateAllPlayers(world); } }); @@ -248,14 +257,13 @@ private static void initListeners() { Entity target = evt.getTarget(); if (evt.getTarget() instanceof ServerPlayer serverPlayer && target instanceof Mob mob && IXplatAbstractions.INSTANCE.isBrainswept(mob)) { - ForgePacketHandler.getNetwork() - .send(PacketDistributor.PLAYER.with(() -> serverPlayer), MsgBrainsweepAck.of(mob)); + PacketDistributor.sendToPlayer(serverPlayer, MsgBrainsweepAck.of(mob)); } }); // Implemented with a mixin on Farbc evBus.addListener((BlockEvent.BlockToolModificationEvent evt) -> { - if (!evt.isSimulated() && evt.getToolAction() == ToolActions.AXE_STRIP) { + if (!evt.isSimulated() && evt.getItemAbility() == ItemAbilities.AXE_STRIP) { BlockState bs = evt.getState(); var output = HexStrippables.STRIPPABLES.get(bs.getBlock()); if (output != null) { @@ -264,30 +272,29 @@ private static void initListeners() { } }); + evBus.addListener(RegisterBrewingRecipesEvent.class, ev -> { + HexPotions.addRecipes(ev.getBuilder(), ev.getRegistryAccess()); + }); + // Caps are cardinal components on farbc modBus.addListener(ForgeCapabilityHandler::registerCaps); - evBus.addGenericListener(ItemStack.class, ForgeCapabilityHandler::attachItemCaps); - evBus.addGenericListener(BlockEntity.class, ForgeCapabilityHandler::attachBlockEntityCaps); - evBus.addGenericListener(Entity.class, ForgeCapabilityHandler::attachEntityCaps); modBus.register(ForgeHexDataGenerators.class); - modBus.register(ForgeCapabilityHandler.class); evBus.register(CapSyncers.class); modBus.addListener((EntityAttributeModificationEvent e) -> { - e.add(EntityType.PLAYER, HexAttributes.GRID_ZOOM); - e.add(EntityType.PLAYER, HexAttributes.SCRY_SIGHT); - e.add(EntityType.PLAYER, HexAttributes.FEEBLE_MIND); - e.add(EntityType.PLAYER, HexAttributes.MEDIA_CONSUMPTION_MODIFIER); - e.add(EntityType.PLAYER, HexAttributes.AMBIT_RADIUS); - e.add(EntityType.PLAYER, HexAttributes.SENTINEL_RADIUS); + e.add(EntityType.PLAYER, Holder.direct(HexAttributes.GRID_ZOOM)); + e.add(EntityType.PLAYER, Holder.direct(HexAttributes.SCRY_SIGHT)); + e.add(EntityType.PLAYER, Holder.direct(HexAttributes.FEEBLE_MIND)); + e.add(EntityType.PLAYER, Holder.direct(HexAttributes.MEDIA_CONSUMPTION_MODIFIER)); + e.add(EntityType.PLAYER, Holder.direct(HexAttributes.AMBIT_RADIUS)); + e.add(EntityType.PLAYER, Holder.direct(HexAttributes.SENTINEL_RADIUS)); }); if (ModList.get().isLoaded(HexInterop.Forge.CURIOS_API_ID)) { - modBus.addListener(CuriosApiInterop::onInterModEnqueue); modBus.addListener(CuriosApiInterop::onClientSetup); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, - () -> () -> modBus.addListener(CuriosRenderers::onLayerRegister)); + if(FMLEnvironment.dist == Dist.CLIENT) + modBus.addListener(CuriosRenderers::onLayerRegister); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/CapSyncers.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/CapSyncers.java index 89e26d4474..a5a3952072 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/CapSyncers.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/CapSyncers.java @@ -6,8 +6,8 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; public class CapSyncers { @SubscribeEvent diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java index 502357ab3a..d29734c196 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java @@ -1,13 +1,14 @@ package at.petrak.hexcasting.forge.cap; -import at.petrak.hexcasting.api.addldata.*; -import at.petrak.hexcasting.api.casting.circles.BlockEntityAbstractImpetus; +import at.petrak.hexcasting.api.addldata.ADMediaHolder; +import at.petrak.hexcasting.api.addldata.ItemDelegatingEntityIotaHolder; +import at.petrak.hexcasting.api.block.circle.BlockAbstractImpetus; import at.petrak.hexcasting.api.casting.iota.DoubleIota; import at.petrak.hexcasting.api.client.ClientCastingStack; import at.petrak.hexcasting.api.item.*; import at.petrak.hexcasting.api.misc.MediaConstants; import at.petrak.hexcasting.api.mod.HexConfig; -import at.petrak.hexcasting.common.entities.EntityWallScroll; +import at.petrak.hexcasting.common.entities.HexEntities; import at.petrak.hexcasting.common.items.HexBaubleItem; import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; @@ -15,202 +16,100 @@ import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; -import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.decoration.ItemFrame; -import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.common.util.NonNullSupplier; -import net.minecraftforge.event.AttachCapabilitiesEvent; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.BooleanSupplier; -import java.util.function.Function; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import static at.petrak.hexcasting.api.HexAPI.modLoc; public class ForgeCapabilityHandler { - /** - * Items that store an iota to their tag. - */ - public static final ResourceLocation IOTA_STORAGE_CAP = modLoc("iota_holder"); - /** - * Items that intrinsically store an iota. - */ - public static final ResourceLocation IOTA_STATIC_CAP = modLoc("iota_item"); - /** - * Items that store a variable amount of media to their tag. - */ - public static final ResourceLocation MEDIA_STORAGE_CAP = modLoc("media_holder"); - /** - * Items that statically provide media. - */ - public static final ResourceLocation MEDIA_STATIC_CAP = modLoc("media_item"); - /** - * Items that store a packaged Hex. - */ - public static final ResourceLocation HEX_HOLDER_CAP = modLoc("hex_item"); - /** - * Items that have multiple visual variants. - */ - public static final ResourceLocation VARIANT_ITEM_CAP = modLoc("variant_item"); - /** - * Items that work as pigments. - */ - public static final ResourceLocation PIGMENT_CAP = modLoc("pigment"); - public static final ResourceLocation CURIO_CAP = modLoc("curio"); - - public static final ResourceLocation IMPETUS_HANDLER = modLoc("impetus_items"); - - /** - * Used to render the pattern spiral around players while casting. - */ - public static final ResourceLocation PATTERN_SPIRAL = modLoc("pattern_spiral"); public static void registerCaps(RegisterCapabilitiesEvent evt) { - evt.register(ADMediaHolder.class); - evt.register(ADIotaHolder.class); - evt.register(ADHexHolder.class); - evt.register(ADPigment.class); - } - - public static void attachItemCaps(AttachCapabilitiesEvent evt) { - ItemStack stack = evt.getObject(); - - if (stack.getItem() instanceof MediaHolderItem holder) { - evt.addCapability(MEDIA_STORAGE_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapItemMediaHolder(holder, stack))); - } else if (stack.is(HexItems.AMETHYST_DUST)) { - evt.addCapability(MEDIA_STATIC_CAP, provide(stack, HexCapabilities.MEDIA, () -> - new CapStaticMediaHolder(HexConfig.common()::dustMediaAmount, ADMediaHolder.AMETHYST_DUST_PRIORITY, - stack))); - } else if (stack.is(Items.AMETHYST_SHARD)) { - evt.addCapability(MEDIA_STATIC_CAP, provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - HexConfig.common()::shardMediaAmount, ADMediaHolder.AMETHYST_SHARD_PRIORITY, stack))); - } else if (stack.is(HexItems.CHARGED_AMETHYST)) { - evt.addCapability(MEDIA_STATIC_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - HexConfig.common()::chargedCrystalMediaAmount, ADMediaHolder.CHARGED_AMETHYST_PRIORITY, stack))); - } else if (stack.is(HexItems.QUENCHED_SHARD)) { - // no one uses the config - evt.addCapability(MEDIA_STATIC_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - () -> MediaConstants.QUENCHED_SHARD_UNIT, ADMediaHolder.QUENCHED_SHARD_PRIORITY, stack))); - } else if (stack.is(HexBlocks.QUENCHED_ALLAY.asItem())) { - // no one uses the config - evt.addCapability(MEDIA_STATIC_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - () -> MediaConstants.QUENCHED_BLOCK_UNIT, ADMediaHolder.QUENCHED_ALLAY_PRIORITY, stack))); - } - - if (stack.getItem() instanceof IotaHolderItem holder) { - evt.addCapability(IOTA_STORAGE_CAP, - provide(stack, HexCapabilities.IOTA, () -> new CapItemIotaHolder(holder, stack))); - } else if (stack.is(Items.PUMPKIN_PIE)) { - // haha yes - evt.addCapability(IOTA_STATIC_CAP, provide(stack, HexCapabilities.IOTA, () -> - new CapStaticIotaHolder((s) -> new DoubleIota(Math.PI * s.getCount()), stack))); - } - - if (stack.getItem() instanceof HexHolderItem holder) { - evt.addCapability(HEX_HOLDER_CAP, - provide(stack, HexCapabilities.STORED_HEX, () -> new CapItemHexHolder(holder, stack))); + for(Item item : BuiltInRegistries.ITEM) { + if(item instanceof MediaHolderItem holder) + evt.registerItem(HexCapabilities.Item.MEDIA, (stack, ctx) -> new CapItemMediaHolder(holder, stack), item); + if(item instanceof IotaHolderItem holder) + evt.registerItem(HexCapabilities.Item.IOTA, (stack, ctx) -> new CapItemIotaHolder(holder, stack), item); + if(item instanceof HexHolderItem holder) + evt.registerItem(HexCapabilities.Item.STORED_HEX, (stack, ctx) -> new CapItemHexHolder(holder, stack), item); + if(item instanceof VariantItem holder) + evt.registerItem(HexCapabilities.Item.VARIANT_ITEM, (stack, ctx) -> new CapItemVariantItem(holder, stack), item); + if(item instanceof PigmentItem holder) + evt.registerItem(HexCapabilities.Item.COLOR, (stack, ctx) -> new CapItemPigment(holder, stack), item); + if(item instanceof HexBaubleItem && IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Forge.CURIOS_API_ID)) + CuriosApiInterop.registerCap(evt, item); } - if (stack.getItem() instanceof VariantItem variantItem) { - evt.addCapability(VARIANT_ITEM_CAP, - provide(stack, HexCapabilities.VARIANT_ITEM, () -> new CapItemVariantItem(variantItem, stack))); - } - - if (stack.getItem() instanceof PigmentItem pigment) { - evt.addCapability(PIGMENT_CAP, - provide(stack, HexCapabilities.COLOR, () -> new CapItemPigment(pigment, stack))); - } - - if (IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Forge.CURIOS_API_ID) - && stack.getItem() instanceof HexBaubleItem) { - evt.addCapability(CURIO_CAP, CuriosApiInterop.curioCap(stack)); - } - } - - public static void attachEntityCaps(AttachCapabilitiesEvent evt) { - var entity = evt.getObject(); - if (entity instanceof ItemEntity item) { - evt.addCapability(IOTA_STORAGE_CAP, wrapItemEntityDelegate(item, - ItemDelegatingEntityIotaHolder.ToItemEntity::new)); - } else if (entity instanceof ItemFrame frame) { - evt.addCapability(IOTA_STORAGE_CAP, wrapItemEntityDelegate(frame, - ItemDelegatingEntityIotaHolder.ToItemFrame::new)); - } else if (entity instanceof EntityWallScroll scroll) { - evt.addCapability(IOTA_STORAGE_CAP, wrapItemEntityDelegate(scroll, - ItemDelegatingEntityIotaHolder.ToWallScroll::new)); - } else if (entity instanceof Player player) { - evt.addCapability(PATTERN_SPIRAL, provide(player, HexCapabilities.CLIENT_CASTING_STACK, - () -> new CapClientCastingStack(player, new ClientCastingStack()))); - } - } - public static void attachBlockEntityCaps(AttachCapabilitiesEvent evt) { - if (evt.getObject() instanceof BlockEntityAbstractImpetus impetus) { - evt.addCapability(IMPETUS_HANDLER, provide(impetus, ForgeCapabilities.ITEM_HANDLER, - () -> new ForgeImpetusCapability(impetus))); - } - } - - // i do not know why we need super here - private static SimpleProvider wrapItemEntityDelegate(E entity, - Function make) { - return provide(entity, HexCapabilities.IOTA, - () -> new CapEntityIotaHolder.Wrapper(make.apply(entity))); - } - - private static SimpleProvider provide(Entity entity, Capability capability, - NonNullSupplier supplier) { - return provide(entity::isRemoved, capability, supplier); - } - - private static SimpleProvider provide(BlockEntity be, Capability capability, - NonNullSupplier supplier) { - return provide(be::isRemoved, capability, supplier); - } - - public static SimpleProvider provide(ItemStack stack, Capability capability, - NonNullSupplier supplier) { - return provide(stack::isEmpty, capability, supplier); - } - - private static SimpleProvider provide(BooleanSupplier invalidated, Capability capability, - NonNullSupplier supplier) { - return new SimpleProvider<>(invalidated, capability, LazyOptional.of(supplier)); - } - - public static ICapabilityProvider makeProvider(Capability cap, U instance) { - LazyOptional lazyInstanceButNotReally = LazyOptional.of(() -> instance); - return new SimpleProvider<>(() -> false, cap, lazyInstanceButNotReally); - } - - public record SimpleProvider(BooleanSupplier invalidated, - Capability capability, - LazyOptional instance) implements ICapabilityProvider { - - @NotNull - @Override - public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { - if (invalidated.getAsBoolean()) { - return LazyOptional.empty(); + // TODO port: amethyst is static, holders aren't. Modifiable media amount. UPD: I don't remember why I left that comment + evt.registerItem( + HexCapabilities.Item.MEDIA, + (stack, ctx) -> new CapStaticMediaHolder(HexConfig.common()::dustMediaAmount, ADMediaHolder.AMETHYST_DUST_PRIORITY, stack), + HexItems.AMETHYST_DUST + ); + evt.registerItem( + HexCapabilities.Item.MEDIA, + (stack, ctx) -> new CapStaticMediaHolder(HexConfig.common()::shardMediaAmount, ADMediaHolder.AMETHYST_SHARD_PRIORITY, stack), + Items.AMETHYST_SHARD + ); + evt.registerItem( + HexCapabilities.Item.MEDIA, + (stack, ctx) -> new CapStaticMediaHolder(HexConfig.common()::chargedCrystalMediaAmount, ADMediaHolder.CHARGED_AMETHYST_PRIORITY, stack), + HexItems.CHARGED_AMETHYST + ); + evt.registerItem( + HexCapabilities.Item.MEDIA, + (stack, ctx) -> new CapStaticMediaHolder(() -> MediaConstants.QUENCHED_SHARD_UNIT, ADMediaHolder.QUENCHED_SHARD_PRIORITY, stack), + HexItems.QUENCHED_SHARD + ); + evt.registerItem( + HexCapabilities.Item.MEDIA, + (stack, ctx) -> new CapStaticMediaHolder(() -> MediaConstants.QUENCHED_BLOCK_UNIT, ADMediaHolder.QUENCHED_ALLAY_PRIORITY, stack), + HexBlocks.QUENCHED_ALLAY.asItem() + ); + + // haha yes + evt.registerItem( + HexCapabilities.Item.IOTA, + (stack, ctx) -> new CapStaticIotaHolder((s) -> new DoubleIota(Math.PI * s.getCount()), stack), + Items.PUMPKIN_PIE + ); + + evt.registerEntity( + HexCapabilities.Entity.IOTA, + EntityType.ITEM, + (ent, ctx) -> new ItemDelegatingEntityIotaHolder.ToItemEntity(ent) + ); + evt.registerEntity( + HexCapabilities.Entity.IOTA, + EntityType.ITEM_FRAME, + (ent, ctx) -> new ItemDelegatingEntityIotaHolder.ToItemFrame(ent) + ); + evt.registerEntity( + HexCapabilities.Entity.IOTA, + HexEntities.WALL_SCROLL, + (ent, ctx) -> new ItemDelegatingEntityIotaHolder.ToWallScroll(ent) + ); + evt.registerEntity( + HexCapabilities.Entity.CLIENT_CASTING_STACK, + EntityType.PLAYER, + (player, ctx) -> new CapClientCastingStack(player, new ClientCastingStack()) + ); + + // TODO port: maybe use tag or impetus registry + for(Block block : BuiltInRegistries.BLOCK) { + if(block instanceof BlockAbstractImpetus imBlock) { + evt.registerBlockEntity( + Capabilities.ItemHandler.BLOCK, + imBlock.getBlockEntityType(), + (be, dir) -> new ForgeImpetusCapability(be) + ); } - - return cap == capability ? instance.cast() : LazyOptional.empty(); } } - } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java index 9da53fa9a5..45d22e2eb8 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java @@ -2,7 +2,7 @@ import at.petrak.hexcasting.api.casting.circles.BlockEntityAbstractImpetus; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandler; +import net.neoforged.neoforge.items.IItemHandler; import org.jetbrains.annotations.NotNull; public record ForgeImpetusCapability(BlockEntityAbstractImpetus impetus) implements IItemHandler { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java index 9db3e48d0a..89121c0f8d 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java @@ -2,24 +2,29 @@ import at.petrak.hexcasting.api.addldata.*; import at.petrak.hexcasting.api.client.ClientCastingStack; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.common.capabilities.CapabilityToken; +import net.neoforged.neoforge.capabilities.EntityCapability; +import net.neoforged.neoforge.capabilities.ItemCapability; import java.util.function.Supplier; +import static at.petrak.hexcasting.api.HexAPI.modLoc; + public final class HexCapabilities { - public static final Capability MEDIA = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability IOTA = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability STORED_HEX = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability VARIANT_ITEM = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability COLOR = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability> CLIENT_CASTING_STACK = CapabilityManager.get(new CapabilityToken<>() { - }); + public static final class Item { + public static final ItemCapability MEDIA = ItemCapability.createVoid(modLoc("media_holder"), ADMediaHolder.class); + public static final ItemCapability IOTA = ItemCapability.createVoid(modLoc("iota_holder"), ADIotaHolder.class); + public static final ItemCapability STORED_HEX = ItemCapability.createVoid(modLoc("hex_holder"), ADHexHolder.class); + public static final ItemCapability VARIANT_ITEM = ItemCapability.createVoid(modLoc("variant"), ADVariantItem.class); + public static final ItemCapability COLOR = ItemCapability.createVoid(modLoc("color"), ADPigment.class); + } + + public static final class Entity { + public static final EntityCapability MEDIA = EntityCapability.createVoid(modLoc("media_holder"), ADMediaHolder.class); + public static final EntityCapability IOTA = EntityCapability.createVoid(modLoc("iota_holder"), ADIotaHolder.class); + public static final EntityCapability STORED_HEX = EntityCapability.createVoid(modLoc("hex_holder"), ADHexHolder.class); + public static final EntityCapability VARIANT_ITEM = EntityCapability.createVoid(modLoc("variant"), ADVariantItem.class); + public static final EntityCapability COLOR = EntityCapability.createVoid(modLoc("color"), ADPigment.class); + public static final EntityCapability CLIENT_CASTING_STACK = EntityCapability.createVoid(modLoc("client_casting"), ClientCastingStack.Provider.class); + } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java index bdba8678ca..3895a724aa 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java @@ -3,22 +3,25 @@ import at.petrak.hexcasting.api.client.ClientCastingStack; import at.petrak.hexcasting.forge.cap.HexCapabilities; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.LogicalSide; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.event.tick.PlayerTickEvent; +import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; -public record CapClientCastingStack(Player player, ClientCastingStack clientCastingStack) implements Supplier { +public record CapClientCastingStack(Player player, ClientCastingStack clientCastingStack) implements ClientCastingStack.Provider { + @Override - public ClientCastingStack get() { + public @NotNull ClientCastingStack provide() { return clientCastingStack; } @SubscribeEvent - public static void tickClientPlayer(TickEvent.PlayerTickEvent evt) { - if (evt.side == LogicalSide.CLIENT && !evt.player.isDeadOrDying()) - evt.player.getCapability(HexCapabilities.CLIENT_CASTING_STACK).resolve() - .ifPresent(CastingStack -> CastingStack.get().tick()); + public static void tickClientPlayer(PlayerTickEvent.Pre evt) { + if (evt.getEntity().level().isClientSide() && !evt.getEntity().isDeadOrDying()) { + var clientStack = evt.getEntity().getCapability(HexCapabilities.Entity.CLIENT_CASTING_STACK); + if(clientStack != null) + clientStack.provide().tick(); + } } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapEntityIotaHolder.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapEntityIotaHolder.java index a8623e6249..a8e0e77ba8 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapEntityIotaHolder.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapEntityIotaHolder.java @@ -15,12 +15,6 @@ public Wrapper(ItemDelegatingEntityIotaHolder inner) { this.inner = inner; } - - @Override - public @Nullable CompoundTag readIotaTag() { - return inner.readIotaTag(); - } - @Override public boolean writeable() { return inner.writeable(); @@ -32,8 +26,8 @@ public boolean writeIota(@Nullable Iota iota, boolean simulate) { } @Override - public @Nullable Iota readIota(ServerLevel world) { - return inner.readIota(world); + public @Nullable Iota readIota() { + return inner.readIota(); } @Override diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapItemIotaHolder.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapItemIotaHolder.java index 29caaeb0d0..603742bf3c 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapItemIotaHolder.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapItemIotaHolder.java @@ -8,19 +8,12 @@ import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; -public record CapItemIotaHolder(IotaHolderItem holder, - ItemStack stack) implements ADIotaHolder { +public record CapItemIotaHolder(IotaHolderItem holder, ItemStack stack) implements ADIotaHolder { @Override public @Nullable - CompoundTag readIotaTag() { - return holder.readIotaTag(stack); - } - - @Override - public @Nullable - Iota readIota(ServerLevel world) { - return holder.readIota(stack, world); + Iota readIota() { + return holder.readIota(stack); } @Override diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapStaticIotaHolder.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapStaticIotaHolder.java index f94cd93455..c0e5f947c8 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapStaticIotaHolder.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapStaticIotaHolder.java @@ -15,14 +15,7 @@ public record CapStaticIotaHolder(Function provider, @Override public @Nullable - CompoundTag readIotaTag() { - var iota = provider.apply(stack); - return iota == null ? null : IotaType.serialize(iota); - } - - @Override - public @Nullable - Iota readIota(ServerLevel world) { + Iota readIota() { return provider.apply(stack); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexConditionsBuilder.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexConditionsBuilder.java index 93b1cfe529..ac7cac67af 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexConditionsBuilder.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexConditionsBuilder.java @@ -1,20 +1,18 @@ package at.petrak.hexcasting.forge.datagen; import at.petrak.hexcasting.datagen.IXplatConditionsBuilder; -import net.minecraft.advancements.CriterionTriggerInstance; -import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.advancements.Criterion; import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import net.minecraftforge.common.crafting.ConditionalRecipe; -import net.minecraftforge.common.crafting.conditions.ICondition; -import net.minecraftforge.common.crafting.conditions.IConditionBuilder; +import net.neoforged.neoforge.common.conditions.ICondition; +import net.neoforged.neoforge.common.conditions.IConditionBuilder; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; public class ForgeHexConditionsBuilder implements IXplatConditionsBuilder, IConditionBuilder { private final List conditions = new ArrayList<>(); @@ -38,8 +36,8 @@ public IXplatConditionsBuilder whenModMissing(String modid) { @Override public @NotNull RecipeBuilder unlockedBy(@NotNull String string, - @NotNull CriterionTriggerInstance criterionTriggerInstance) { - return parent.unlockedBy(string, criterionTriggerInstance); + @NotNull Criterion criterion) { + return parent.unlockedBy(string, criterion); } @Override @@ -53,12 +51,9 @@ public IXplatConditionsBuilder whenModMissing(String modid) { } @Override - public void save(@NotNull Consumer consumer, @NotNull ResourceLocation resourceLocation) { - var conditionalBuilder = ConditionalRecipe.builder(); - for (ICondition condition : conditions) { - conditionalBuilder.addCondition(condition); - } - conditionalBuilder.addRecipe(recipeConsumer -> parent.save(recipeConsumer, resourceLocation)) - .build(consumer, resourceLocation); + public void save(RecipeOutput recipeOutput, ResourceLocation id) { + var out = recipeOutput.withConditions(conditions.toArray(ICondition[]::new)); + + parent.save(out, id); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java index c5ed351ea7..0598ab7110 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java @@ -28,12 +28,12 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; -import net.minecraftforge.common.Tags; -import net.minecraftforge.common.ToolActions; -import net.minecraftforge.common.data.DatapackBuiltinEntriesProvider; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.data.event.GatherDataEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.common.ItemAbilities; +import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.data.event.GatherDataEvent; import java.util.EnumMap; import java.util.List; @@ -43,12 +43,12 @@ public class ForgeHexDataGenerators { @SubscribeEvent public static void generateData(GatherDataEvent ev) { - if (System.getProperty("hexcasting.xplat_datagen") != null) { + //if (System.getProperty("hexcasting.xplat_datagen") != null) { configureXplatDatagen(ev); - } - if (System.getProperty("hexcasting.forge_datagen") != null) { + //} + //if (System.getProperty("hexcasting.forge_datagen") != null) { configureForgeDatagen(ev); - } + //} } private static void configureXplatDatagen(GatherDataEvent ev) { @@ -88,23 +88,24 @@ private static void configureForgeDatagen(GatherDataEvent ev) { var lookup = ev.getLookupProvider(); ExistingFileHelper efh = ev.getExistingFileHelper(); gen.addProvider(ev.includeServer(), new LootTableProvider( - output, Set.of(), List.of(new LootTableProvider.SubProviderEntry(HexLootTables::new, LootContextParamSets.ALL_PARAMS)) + output, Set.of(), List.of(new LootTableProvider.SubProviderEntry(HexLootTables::new, LootContextParamSets.ALL_PARAMS)), ev.getLookupProvider() )); - gen.addProvider(ev.includeServer(), new HexplatRecipes(output, INGREDIENTS, ForgeHexConditionsBuilder::new)); + gen.addProvider(ev.includeServer(), new HexplatRecipes(output, lookup, INGREDIENTS, ForgeHexConditionsBuilder::new)); // TODO: refactor? var xtags = IXplatAbstractions.INSTANCE.tags(); + var blockTagProvider = new HexBlockTagProvider(output, lookup, xtags); ((TagsProviderEFHSetter) blockTagProvider).setEFH(efh); gen.addProvider(ev.includeServer(), blockTagProvider); - var itemTagProvider = new HexItemTagProvider(output, lookup, blockTagProvider, IXplatAbstractions.INSTANCE.tags()); + var itemTagProvider = new HexItemTagProvider(output, lookup, blockTagProvider.contentsGetter(), IXplatAbstractions.INSTANCE.tags()); ((TagsProviderEFHSetter) itemTagProvider).setEFH(efh); gen.addProvider(ev.includeServer(), itemTagProvider); var hexTagProvider = new HexActionTagProvider(output, lookup); ((TagsProviderEFHSetter) hexTagProvider).setEFH(efh); gen.addProvider(ev.includeServer(), hexTagProvider); - gen.addProvider(ev.includeServer(), new ForgeHexLootModGen(output)); + gen.addProvider(ev.includeServer(), new ForgeHexLootModGen(output, ev.getLookupProvider())); } private static final IXplatIngredients INGREDIENTS = new IXplatIngredients() { @@ -115,7 +116,7 @@ public Ingredient glowstoneDust() { @Override public Ingredient leather() { - return Ingredient.of(Tags.Items.LEATHER); + return Ingredient.of(Tags.Items.LEATHERS); } @Override @@ -156,13 +157,13 @@ public EnumMap dyes() { public Ingredient stick() { return Ingredient.fromValues(Stream.of( new Ingredient.ItemValue(new ItemStack(Items.STICK)), - new Ingredient.TagValue(ItemTags.create(new ResourceLocation("forge", "rods/wooden"))) + new Ingredient.TagValue(ItemTags.create(ResourceLocation.fromNamespaceAndPath("forge", "rods/wooden"))) )); } @Override public Ingredient whenModIngredient(Ingredient defaultIngredient, String modid, Ingredient modIngredient) { - return ForgeModConditionalIngredient.of(defaultIngredient, modid, modIngredient); + return ForgeModConditionalIngredient.of(defaultIngredient, modid, modIngredient).toVanilla(); } // https://github.com/vectorwing/FarmersDelight/blob/1.18.2/src/generated/resources/data/farmersdelight/recipes/cutting/amethyst_block.json @@ -171,7 +172,7 @@ public FarmersDelightToolIngredient axeStrip() { return () -> { JsonObject object = new JsonObject(); object.addProperty("type", "farmersdelight:tool_action"); - object.addProperty("action", ToolActions.AXE_STRIP.name()); + object.addProperty("action", ItemAbilities.AXE_STRIP.name()); return object; }; } @@ -181,7 +182,7 @@ public FarmersDelightToolIngredient axeDig() { return () -> { JsonObject object = new JsonObject(); object.addProperty("type", "farmersdelight:tool_action"); - object.addProperty("action", ToolActions.AXE_DIG.name()); + object.addProperty("action", ItemAbilities.AXE_DIG.name()); return object; }; } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java index 26840ca6b6..210c098ad5 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexLootModGen.java @@ -6,16 +6,19 @@ import at.petrak.hexcasting.forge.loot.ForgeHexLoreLootMod; import at.petrak.hexcasting.forge.loot.ForgeHexScrollLootMod; import at.petrak.hexcasting.forge.loot.ForgeHexCypherLootMod; +import net.minecraft.core.HolderLookup; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraftforge.common.data.GlobalLootModifierProvider; -import net.minecraftforge.common.loot.LootTableIdCondition; +import net.neoforged.neoforge.common.data.GlobalLootModifierProvider; +import net.neoforged.neoforge.common.loot.LootTableIdCondition; + +import java.util.concurrent.CompletableFuture; public class ForgeHexLootModGen extends GlobalLootModifierProvider { - public ForgeHexLootModGen(PackOutput output) { - super(output, HexAPI.MOD_ID); + public ForgeHexLootModGen(PackOutput output, CompletableFuture registries) { + super(output, registries, HexAPI.MOD_ID); } @Override @@ -42,7 +45,7 @@ protected void start() { } add("amethyst_cluster", new ForgeHexAmethystLootMod(new LootItemCondition[]{ - LootTableIdCondition.builder(Blocks.AMETHYST_CLUSTER.getLootTable()).build() + LootTableIdCondition.builder(Blocks.AMETHYST_CLUSTER.getLootTable().location()).build() }, HexLootHandler.DEFAULT_SHARD_MODIFICATION)); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/TagsProviderEFHSetter.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/TagsProviderEFHSetter.java index ddda7d2966..d7a14b6358 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/TagsProviderEFHSetter.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/TagsProviderEFHSetter.java @@ -1,6 +1,6 @@ package at.petrak.hexcasting.forge.datagen; -import net.minecraftforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.common.data.ExistingFileHelper; public interface TagsProviderEFHSetter { void setEFH(ExistingFileHelper efh); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java index f4e30e8a42..063845abf8 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java @@ -7,19 +7,18 @@ import at.petrak.hexcasting.common.blocks.circles.directrix.BlockBooleanDirectrix; import at.petrak.hexcasting.common.blocks.circles.directrix.BlockRedstoneDirectrix; import at.petrak.hexcasting.common.lib.HexBlocks; -import at.petrak.paucal.api.forge.datagen.PaucalBlockStateAndModelProvider; +import at.petrak.paucal.forge.api.datagen.PaucalBlockStateAndModelProvider; import net.minecraft.core.Direction; -import net.minecraft.data.DataGenerator; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.properties.BlockStateProperties; -import net.minecraftforge.client.model.generators.BlockModelBuilder; -import net.minecraftforge.client.model.generators.ConfiguredModel; -import net.minecraftforge.client.model.generators.ModelBuilder; -import net.minecraftforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; +import net.neoforged.neoforge.client.model.generators.ConfiguredModel; +import net.neoforged.neoforge.client.model.generators.ModelBuilder; +import net.neoforged.neoforge.common.data.ExistingFileHelper; -import static net.minecraftforge.client.model.generators.ModelProvider.BLOCK_FOLDER; +import static net.neoforged.neoforge.client.model.generators.ModelProvider.BLOCK_FOLDER; public class HexBlockStatesAndModels extends PaucalBlockStateAndModelProvider { public HexBlockStatesAndModels(PackOutput output, ExistingFileHelper exFileHelper) { @@ -186,7 +185,7 @@ protected void registerStatesAndModels() { blockAndItem(HexBlocks.EDIFIED_PANEL, models().cubeAll("edified_panel", modLoc("block/edified_panel"))); blockAndItem(HexBlocks.EDIFIED_TILE, models().cubeAll("edified_tile", modLoc("block/edified_tile"))); - ResourceLocation leavesParent = new ResourceLocation("block/leaves"); + ResourceLocation leavesParent = ResourceLocation.withDefaultNamespace("block/leaves"); blockAndItem(HexBlocks.AMETHYST_EDIFIED_LEAVES, models().withExistingParent("amethyst_edified_leaves", leavesParent) .texture("all", modLoc("block/amethyst_edified_leaves")) diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java index f8a988459f..8704d66482 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexItemModels.java @@ -13,35 +13,37 @@ import at.petrak.hexcasting.common.items.storage.ItemThoughtKnot; import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; -import at.petrak.paucal.api.forge.datagen.PaucalItemModelProvider; -import net.minecraft.client.renderer.block.model.ItemTransforms; -import net.minecraft.data.DataGenerator; +import at.petrak.paucal.forge.api.datagen.PaucalItemModelProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.level.block.Block; -import net.minecraftforge.client.model.generators.ModelFile; -import net.minecraftforge.common.data.ExistingFileHelper; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.client.model.generators.ModelFile; +import net.neoforged.neoforge.common.data.ExistingFileHelper; import java.util.Objects; +import java.util.concurrent.CompletableFuture; import java.util.function.BiFunction; public class HexItemModels extends PaucalItemModelProvider { + public HexItemModels(PackOutput output, ExistingFileHelper existingFileHelper) { super(output, HexAPI.MOD_ID, existingFileHelper); } private static final String[] PHIAL_SIZES = {"small", "medium", "large", "larger", "largest"}; - private static String getPath(Item item) { - return Objects.requireNonNull(ForgeRegistries.ITEMS.getKey(item)).getPath(); + // TODO port: maybe consider using registry lookup? But it's completable future... Not sure + private String getPath(Item item) { + return Objects.requireNonNull(BuiltInRegistries.ITEM.getKey(item)).getPath(); } - private static String getPath(Block block) { - return Objects.requireNonNull(ForgeRegistries.BLOCKS.getKey(block)).getPath(); + private String getPath(Block block) { + return Objects.requireNonNull(BuiltInRegistries.BLOCK.getKey(block)).getPath(); } @Override @@ -55,11 +57,11 @@ protected void registerModels() { simpleItem(HexItems.LORE_FRAGMENT); singleTexture(getPath(HexBlocks.CONJURED_BLOCK), - new ResourceLocation("item/generated"), - "layer0", new ResourceLocation("item/amethyst_shard")); + ResourceLocation.withDefaultNamespace("item/generated"), + "layer0", ResourceLocation.withDefaultNamespace("item/amethyst_shard")); singleTexture(getPath(HexBlocks.CONJURED_LIGHT), - new ResourceLocation("item/generated"), - "layer0", new ResourceLocation("item/amethyst_shard")); + ResourceLocation.withDefaultNamespace("item/generated"), + "layer0", ResourceLocation.withDefaultNamespace("item/amethyst_shard")); for (var age : new String[]{"pristine", "ancient"}) { for (var size : new String[]{"small", "medium", "large"}) { @@ -78,9 +80,9 @@ protected void registerModels() { .translation(-2.5f, 0f, -8f) .scale(0.4f); - singleTexture("old_staff", new ResourceLocation("item/handheld_rod"), + singleTexture("old_staff", ResourceLocation.withDefaultNamespace("item/handheld_rod"), "layer0", modLoc("item/staff/old")); - singleTexture("cherry_staff", new ResourceLocation("item/handheld_rod"), + singleTexture("cherry_staff", ResourceLocation.withDefaultNamespace("item/handheld_rod"), "layer0", modLoc("item/staff/cherry")); buildStaff(HexItems.STAFF_OAK, "oak"); @@ -99,10 +101,10 @@ protected void registerModels() { // again, doesn't like paths with slashes in them, so we do it manually buildFourVariantGaslight("item/staff/quenched", "item/staff/quenched", (name, path) -> - singleTexture(path.getPath(), new ResourceLocation("item/handheld_rod"), + singleTexture(path.getPath(), ResourceLocation.withDefaultNamespace("item/handheld_rod"), "layer0", modLoc(path.getPath()))); buildFourVariantGaslight(getPath(HexItems.QUENCHED_SHARD), "item/quenched_shard", (name, path) -> - singleTexture(path.getPath(), new ResourceLocation("item/handheld"), + singleTexture(path.getPath(), ResourceLocation.withDefaultNamespace("item/handheld"), "layer0", modLoc(path.getPath()))); buildFourVariantGaslight(getPath(HexBlocks.QUENCHED_ALLAY), "block/quenched_allay", (name, path) -> cubeAll(path.getPath(), path)); @@ -130,7 +132,7 @@ protected void registerModels() { String name = "phial_" + PHIAL_SIZES[size] + "_" + fill; singleTexture( name, - new ResourceLocation("item/generated"), + ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/phial/" + name)); float fillProp = (float) fill / maxFill; @@ -144,17 +146,17 @@ protected void registerModels() { for (var dye : DyeColor.values()) { singleTexture(getPath(HexItems.DYE_PIGMENTS.get(dye)), - new ResourceLocation("item/generated"), + ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/colorizer/dye_" + dye.getName())); } for (var type : ItemPridePigment.Type.values()) { singleTexture(getPath(HexItems.PRIDE_PIGMENTS.get(type)), - new ResourceLocation("item/generated"), + ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/colorizer/pride_" + type.getName())); } - singleTexture(getPath(HexItems.UUID_PIGMENT), new ResourceLocation("item/generated"), + singleTexture(getPath(HexItems.UUID_PIGMENT), ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/colorizer/uuid")); - singleTexture(getPath(HexItems.DEFAULT_PIGMENT), new ResourceLocation("item/generated"), + singleTexture(getPath(HexItems.DEFAULT_PIGMENT), ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/colorizer/uuid")); simpleItem(modLoc("slate_blank")); @@ -205,16 +207,16 @@ protected void registerModels() { getBuilder(getPath(HexBlocks.EDIFIED_SLAB)).parent( new ModelFile.UncheckedModelFile(modLoc("block/edified_slab"))); getBuilder(getPath(HexBlocks.EDIFIED_BUTTON)).parent( - new ModelFile.UncheckedModelFile(new ResourceLocation("block/button_inventory"))) + new ModelFile.UncheckedModelFile(ResourceLocation.withDefaultNamespace("block/button_inventory"))) .texture("texture", modLoc("block/edified_planks")); getBuilder(getPath(HexBlocks.EDIFIED_PRESSURE_PLATE)) .parent(new ModelFile.UncheckedModelFile(modLoc("block/edified_pressure_plate"))); } private void buildThoughtKnot() { - var unwritten = singleTexture("thought_knot", new ResourceLocation("item/generated"), + var unwritten = singleTexture("thought_knot", ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/thought_knot")); - var written = withExistingParent("thought_knot_written", new ResourceLocation("item/generated")) + var written = withExistingParent("thought_knot_written", ResourceLocation.withDefaultNamespace("item/generated")) .texture("layer0", modLoc("item/thought_knot")) .texture("layer1", modLoc("item/thought_knot_overlay")); getBuilder("thought_knot") @@ -228,14 +230,14 @@ private void buildSealableIotaHolder(Item item, String stub, int numVariants) { var name = getPath(item); var builder = getBuilder(name); for (int i = 0; i < numVariants; i++) { - var plain = i == 0 ? singleTexture(name, new ResourceLocation("item/generated"), + var plain = i == 0 ? singleTexture(name, ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/cad/" + i + "_" + stub + "_empty")) - : withExistingParent(name + "_" + i, new ResourceLocation("item/generated")) + : withExistingParent(name + "_" + i, ResourceLocation.withDefaultNamespace("item/generated")) .texture("layer0", modLoc("item/cad/" + i + "_" + stub + "_empty")); - var unsealed = withExistingParent(name + "_" + i + "_filled", new ResourceLocation("item/generated")) + var unsealed = withExistingParent(name + "_" + i + "_filled", ResourceLocation.withDefaultNamespace("item/generated")) .texture("layer0", modLoc("item/cad/" + i + "_" + stub + "_filled")) .texture("layer1", modLoc("item/cad/" + i + "_" + stub + "_filled_overlay")); - var sealed = withExistingParent(name + "_" + i + "_sealed", new ResourceLocation("item/generated")) + var sealed = withExistingParent(name + "_" + i + "_sealed", ResourceLocation.withDefaultNamespace("item/generated")) .texture("layer0", modLoc("item/cad/" + i + "_" + stub + "_sealed")) .texture("layer1", modLoc("item/cad/" + i + "_" + stub + "_sealed_overlay")); builder.override().predicate(ItemFocus.VARIANT_PRED, i).predicate(ItemFocus.OVERLAY_PRED, 0f) @@ -258,7 +260,7 @@ private void buildScroll(Item item, String size) { } private void buildStaff(Item item, String name) { - singleTexture("item/" + getPath(item), new ResourceLocation("item/handheld_rod"), + singleTexture("item/" + getPath(item), ResourceLocation.withDefaultNamespace("item/handheld_rod"), "layer0", modLoc("item/staff/" + name)); getBuilder(getPath(item)) .override() @@ -276,11 +278,11 @@ private void buildPackagedSpell(Item item, String stub, int numVariants) { var name = getPath(item); var builder = getBuilder(name); for (int i = 0; i < numVariants; i++) { - var plain = i == 0 ? singleTexture(name, new ResourceLocation("item/generated"), + var plain = i == 0 ? singleTexture(name, ResourceLocation.withDefaultNamespace("item/generated"), "layer0", modLoc("item/cad/" + i + "_" + stub)) - : withExistingParent(name + "_" + i, new ResourceLocation("item/generated")) + : withExistingParent(name + "_" + i, ResourceLocation.withDefaultNamespace("item/generated")) .texture("layer0", modLoc("item/cad/" + i + "_" + stub)); - var filled = withExistingParent(name + "_" + i + "_filled", new ResourceLocation("item/generated")) + var filled = withExistingParent(name + "_" + i + "_filled", ResourceLocation.withDefaultNamespace("item/generated")) .texture("layer0", modLoc("item/cad/" + i + "_" + stub)) .texture("layer1", modLoc("item/cad/" + i + "_" + stub + "_overlay")); builder.override().predicate(ItemFocus.VARIANT_PRED, i).predicate(ItemPackagedHex.HAS_PATTERNS_PRED, -0.01f) diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java index dfb750c35a..2d13ccb6d9 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java @@ -3,25 +3,19 @@ import at.petrak.hexcasting.api.misc.DiscoveryHandlers; import at.petrak.hexcasting.common.items.HexBaubleItem; import at.petrak.hexcasting.common.items.magic.ItemCreativeUnlocker; -import at.petrak.hexcasting.forge.cap.ForgeCapabilityHandler; -import at.petrak.hexcasting.interop.HexInterop; import com.google.common.collect.Multimap; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.fml.InterModComms; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import top.theillusivec4.curios.api.CuriosCapability; import top.theillusivec4.curios.api.SlotContext; -import top.theillusivec4.curios.api.SlotTypeMessage; -import top.theillusivec4.curios.api.SlotTypePreset; import top.theillusivec4.curios.api.type.capability.ICurio; -import java.util.UUID; -import java.util.concurrent.atomic.AtomicReference; - public class CuriosApiInterop { static class Wrapper implements ICurio { private final ItemStack stack; @@ -42,40 +36,35 @@ public ItemStack getStack() { } @Override - public Multimap getAttributeModifiers(SlotContext slotContext, UUID uuid) { - var map = ICurio.super.getAttributeModifiers(slotContext, uuid); + public Multimap, AttributeModifier> getAttributeModifiers(SlotContext slotContext, ResourceLocation id) { + var map = ICurio.super.getAttributeModifiers(slotContext, id); map.putAll(this.bauble.getHexBaubleAttrs(this.stack)); return map; } } - public static ICapabilityProvider curioCap(ItemStack stack) { - return ForgeCapabilityHandler.makeProvider(CuriosCapability.ITEM, new Wrapper(stack)); - } - public static void init() { DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { - AtomicReference result = new AtomicReference<>(ItemStack.EMPTY); - player.getCapability(CuriosCapability.INVENTORY).ifPresent(handler -> { - for (var stacksHandler : handler.getCurios().values()) { + var inv = player.getCapability(CuriosCapability.INVENTORY); + + if(inv != null) { + for (var stacksHandler : inv.getCurios().values()) { var stacks = stacksHandler.getStacks(); for (int i = 0; i < stacks.getSlots(); i++) { var stack = stacks.getStackInSlot(i); if (ItemCreativeUnlocker.isDebug(stack, type)) { - result.set(stack); - return; + return stack; } } } - }); - return result.get(); + } + return ItemStack.EMPTY; }); } - public static void onInterModEnqueue(final InterModEnqueueEvent event) { - InterModComms.sendTo(HexInterop.Forge.CURIOS_API_ID, SlotTypeMessage.REGISTER_TYPE, - () -> SlotTypePreset.HEAD.getMessageBuilder().build()); + public static void registerCap(RegisterCapabilitiesEvent evt, Item item) { + evt.registerItem(CuriosCapability.ITEM, (stack, ctx) -> new Wrapper(stack), item); } public static void onClientSetup(final FMLClientSetupEvent event) { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosRenderers.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosRenderers.java index 3ec7edd483..a7785611ee 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosRenderers.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosRenderers.java @@ -8,12 +8,9 @@ import net.minecraft.client.model.geom.builders.CubeListBuilder; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraft.client.model.geom.builders.MeshDefinition; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.event.EntityRenderersEvent; +import net.neoforged.neoforge.client.event.EntityRenderersEvent; import top.theillusivec4.curios.api.client.CuriosRendererRegistry; -@OnlyIn(Dist.CLIENT) public class CuriosRenderers { public static void register() { CuriosRendererRegistry.register(HexItems.SCRYING_LENS, () -> new LensCurioRenderer(Minecraft.getInstance().getEntityModels().bakeLayer(LensCurioRenderer.LAYER))); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/LensCurioRenderer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/LensCurioRenderer.java index 38f5ff065f..a9f590d950 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/LensCurioRenderer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/LensCurioRenderer.java @@ -19,7 +19,7 @@ import top.theillusivec4.curios.api.client.ICurioRenderer; public class LensCurioRenderer implements ICurioRenderer { - public static final ModelLayerLocation LAYER = new ModelLayerLocation(new ResourceLocation(HexAPI.MOD_ID, "lens"), "lens"); + public static final ModelLayerLocation LAYER = new ModelLayerLocation(ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, "lens"), "lens"); private final HumanoidModel model; diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/BrainsweepRecipeCategory.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/BrainsweepRecipeCategory.java index 6dddb8015a..9c739a32a0 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/BrainsweepRecipeCategory.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/BrainsweepRecipeCategory.java @@ -1,9 +1,11 @@ package at.petrak.hexcasting.forge.interop.jei; import at.petrak.hexcasting.client.ClientTickCounter; +import at.petrak.hexcasting.common.casting.actions.spells.OpEdifySapling; import at.petrak.hexcasting.common.recipe.BrainsweepRecipe; import com.mojang.blaze3d.systems.RenderSystem; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; +import mezz.jei.api.gui.builder.ITooltipBuilder; import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.drawable.IDrawableStatic; import mezz.jei.api.gui.ingredient.IRecipeSlotsView; @@ -18,8 +20,6 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; import java.util.Collections; @@ -44,16 +44,19 @@ public BrainsweepRecipeCategory(IGuiHelper guiHelper) { } @Override - @OnlyIn(Dist.CLIENT) public @NotNull Component getTitle() { return localizedName; } @Override - public @NotNull - IDrawable getBackground() { - return background; + public int getWidth() { + return background.getWidth(); + } + + @Override + public int getHeight() { + return background.getHeight(); } @Override @@ -63,19 +66,16 @@ IDrawable getIcon() { } @Override - public @NotNull - List getTooltipStrings(@NotNull BrainsweepRecipe recipe, - @NotNull IRecipeSlotsView recipeSlotsView, double mouseX, double mouseY) { + public void getTooltip(ITooltipBuilder tooltip, BrainsweepRecipe recipe, IRecipeSlotsView recipeSlotsView, double mouseX, double mouseY) { if (37 <= mouseX && mouseX <= 37 + 26 && 19 <= mouseY && mouseY <= 19 + 48) { Minecraft mc = Minecraft.getInstance(); - return recipe.entityIn().getTooltip(mc.options.advancedItemTooltips); + tooltip.addAll(recipe.entityIn().getTooltip(mc.options.advancedItemTooltips)); } - - return Collections.emptyList(); } @Override public void draw(@NotNull BrainsweepRecipe recipe, @NotNull IRecipeSlotsView recipeSlotsView, @NotNull GuiGraphics graphics, double mouseX, double mouseY) { + background.draw(graphics); ClientLevel level = Minecraft.getInstance().level; if (level != null) { var example = recipe.entityIn().exampleEntity(level); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/EdifyRecipeCategory.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/EdifyRecipeCategory.java index 84ab9bab31..10c8d91a44 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/EdifyRecipeCategory.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/EdifyRecipeCategory.java @@ -5,18 +5,18 @@ import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.helpers.IGuiHelper; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -37,14 +37,23 @@ public EdifyRecipeCategory(IGuiHelper guiHelper) { } @Override - @OnlyIn(Dist.CLIENT) public @NotNull Component getTitle() { return localizedName; } @Override - public @NotNull IDrawable getBackground() { - return background; + public int getWidth() { + return background.getWidth(); + } + + @Override + public int getHeight() { + return background.getHeight(); + } + + @Override + public void draw(OpEdifySapling recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { + background.draw(guiGraphics); } @Override diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/HexJEIPlugin.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/HexJEIPlugin.java index 32572ba10c..6e708cfacd 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/HexJEIPlugin.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/HexJEIPlugin.java @@ -17,6 +17,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; @@ -57,7 +58,7 @@ public void registerRecipes(@NotNull IRecipeRegistration registration) { Level level = Minecraft.getInstance().level; if (level != null) { registration.addRecipes(BRAINSWEEPING, - level.getRecipeManager().getAllRecipesFor(HexRecipeStuffRegistry.BRAINSWEEP_TYPE)); + level.getRecipeManager().getAllRecipesFor(HexRecipeStuffRegistry.BRAINSWEEP_TYPE).stream().map(RecipeHolder::value).toList()); } if (PhialRecipeStackBuilder.shouldAddRecipe()) { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/PhialRecipeCategory.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/PhialRecipeCategory.java index 23a4272a4e..46d1645998 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/PhialRecipeCategory.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/jei/PhialRecipeCategory.java @@ -1,21 +1,22 @@ package at.petrak.hexcasting.forge.interop.jei; import at.petrak.hexcasting.api.mod.HexTags; +import at.petrak.hexcasting.common.casting.actions.spells.OpEdifySapling; import at.petrak.hexcasting.common.casting.actions.spells.OpMakeBattery; import at.petrak.hexcasting.interop.utils.PhialRecipeStackBuilder; import mezz.jei.api.gui.builder.IRecipeLayoutBuilder; import mezz.jei.api.gui.drawable.IDrawable; import mezz.jei.api.gui.drawable.IDrawableStatic; +import mezz.jei.api.gui.ingredient.IRecipeSlotsView; import mezz.jei.api.helpers.IGuiHelper; import mezz.jei.api.recipe.IFocusGroup; import mezz.jei.api.recipe.RecipeIngredientRole; import mezz.jei.api.recipe.RecipeType; import mezz.jei.api.recipe.category.IRecipeCategory; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; import org.jetbrains.annotations.NotNull; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -36,14 +37,23 @@ public PhialRecipeCategory(IGuiHelper guiHelper) { } @Override - @OnlyIn(Dist.CLIENT) public @NotNull Component getTitle() { return localizedName; } @Override - public @NotNull IDrawable getBackground() { - return background; + public int getWidth() { + return background.getWidth(); + } + + @Override + public int getHeight() { + return background.getHeight(); + } + + @Override + public void draw(OpMakeBattery recipe, IRecipeSlotsView recipeSlotsView, GuiGraphics guiGraphics, double mouseX, double mouseY) { + background.draw(guiGraphics); } @Override diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexArgumentTypeRegistry.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexArgumentTypeRegistry.java index 4a3450372a..4dfa83695f 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexArgumentTypeRegistry.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexArgumentTypeRegistry.java @@ -1,30 +1,30 @@ package at.petrak.hexcasting.forge.lib; import at.petrak.hexcasting.api.HexAPI; -import at.petrak.hexcasting.common.command.PatternResLocArgument; +import at.petrak.hexcasting.common.command.PatternResKeyArgument; import com.mojang.brigadier.arguments.ArgumentType; import net.minecraft.commands.synchronization.ArgumentTypeInfo; import net.minecraft.commands.synchronization.ArgumentTypeInfos; import net.minecraft.commands.synchronization.SingletonArgumentInfo; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; // ArgumentTypeInfos.java public class ForgeHexArgumentTypeRegistry { public static final DeferredRegister> ARGUMENT_TYPES = DeferredRegister.create( - ForgeRegistries.COMMAND_ARGUMENT_TYPES, HexAPI.MOD_ID); + Registries.COMMAND_ARGUMENT_TYPE, HexAPI.MOD_ID); // how fucking ergonomic - public static final RegistryObject.Template>> - PATTERN_RESLOC = register(PatternResLocArgument.class, + public static final DeferredHolder, ArgumentTypeInfo.Template>> + PATTERN_RESLOC = register(PatternResKeyArgument.class, "pattern", - SingletonArgumentInfo.contextFree(PatternResLocArgument::id) + SingletonArgumentInfo.contextFree(PatternResKeyArgument::id) ); private static , T extends ArgumentTypeInfo.Template, I extends ArgumentTypeInfo> - RegistryObject> register( + DeferredHolder, ArgumentTypeInfo> register( Class clazz, String name, ArgumentTypeInfo ati) { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java new file mode 100644 index 0000000000..4338e18751 --- /dev/null +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java @@ -0,0 +1,22 @@ +package at.petrak.hexcasting.forge.lib; + +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.forge.recipe.ForgeModConditionalIngredient; +import at.petrak.hexcasting.forge.recipe.ForgeUnsealedIngredient; +import net.neoforged.neoforge.common.crafting.IngredientType; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; + +import java.util.function.Supplier; + +public class ForgeHexIngredientTypes { + public static final DeferredRegister> INGREDIENT_TYPES = + DeferredRegister.create(NeoForgeRegistries.Keys.INGREDIENT_TYPES, HexAPI.MOD_ID); + + public static final Supplier> UNSEALED_INGREDIENT = + INGREDIENT_TYPES.register("unsealed", + () -> new IngredientType<>(ForgeUnsealedIngredient.CODEC, ForgeUnsealedIngredient.STREAM_CODEC)); + public static final Supplier> MOD_CONDITIONAL_INGREDIENT = + INGREDIENT_TYPES.register("mod_conditional", + () -> new IngredientType<>(ForgeModConditionalIngredient.CODEC, ForgeModConditionalIngredient.STREAM_CODEC)); +} diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java index 7581f6aaab..e6e36db9b4 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexLootMods.java @@ -6,21 +6,23 @@ import at.petrak.hexcasting.forge.loot.ForgeHexScrollLootMod; import at.petrak.hexcasting.forge.loot.ForgeHexCypherLootMod; import com.mojang.serialization.Codec; -import net.minecraftforge.common.loot.IGlobalLootModifier; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.registries.Registries; +import net.neoforged.neoforge.common.loot.IGlobalLootModifier; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; public class ForgeHexLootMods { - public static final DeferredRegister> REGISTRY = DeferredRegister.create( - ForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, HexAPI.MOD_ID); + public static final DeferredRegister> REGISTRY = DeferredRegister.create( + NeoForgeRegistries.Keys.GLOBAL_LOOT_MODIFIER_SERIALIZERS, HexAPI.MOD_ID); - public static final RegistryObject> INJECT_SCROLLS = REGISTRY.register( + public static final DeferredHolder, MapCodec> INJECT_SCROLLS = REGISTRY.register( "inject_scrolls", ForgeHexScrollLootMod.CODEC); - public static final RegistryObject> INJECT_LORE = REGISTRY.register( + public static final DeferredHolder, MapCodec> INJECT_LORE = REGISTRY.register( "inject_lore", ForgeHexLoreLootMod.CODEC); - public static final RegistryObject> INJECT_CYPHERS = REGISTRY.register( + public static final DeferredHolder, MapCodec> INJECT_CYPHERS = REGISTRY.register( "inject_cyphers", ForgeHexCypherLootMod.CODEC); - public static final RegistryObject> AMETHYST = REGISTRY.register( + public static final DeferredHolder, MapCodec> AMETHYST = REGISTRY.register( "amethyst_cluster", ForgeHexAmethystLootMod.CODEC); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java index 671e9cec5b..47ea0dad38 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java @@ -5,19 +5,21 @@ import at.petrak.hexcasting.forge.lib.ForgeHexLootMods; import com.google.common.base.Suppliers; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import net.minecraft.core.registries.Registries; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraftforge.common.loot.LootModifier; +import net.neoforged.neoforge.common.loot.LootModifier; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; public class ForgeHexAmethystLootMod extends LootModifier { - public static final Supplier> CODEC = - Suppliers.memoize(() -> RecordCodecBuilder.create( + public static final Supplier> CODEC = + Suppliers.memoize(() -> RecordCodecBuilder.mapCodec( inst -> codecStart(inst).and( Codec.DOUBLE.fieldOf("shardDelta").forGetter(it -> it.shardDelta) ).apply(inst, ForgeHexAmethystLootMod::new) @@ -33,8 +35,12 @@ public ForgeHexAmethystLootMod(LootItemCondition[] conditionsIn, double shardDel @Override protected @NotNull ObjectArrayList doApply(ObjectArrayList generatedLoot, LootContext context) { - var injectPool = context.getResolver().getLootTable(HexLootHandler.TABLE_INJECT_AMETHYST_CLUSTER); - injectPool.getRandomItemsRaw(context, generatedLoot::add); + var injectPool = context.getResolver() + .lookupOrThrow(Registries.LOOT_TABLE) + .getOrThrow(HexLootHandler.TABLE_INJECT_AMETHYST_CLUSTER) + .value(); + //TODO check if should be raw with modifiers applied or not + injectPool.getRandomItems(context, generatedLoot::add); for (var stack : generatedLoot) { AmethystReducerFunc.doStatic(stack, context, this.shardDelta); @@ -44,7 +50,7 @@ public ForgeHexAmethystLootMod(LootItemCondition[] conditionsIn, double shardDel } @Override - public Codec codec() { + public MapCodec codec() { return ForgeHexLootMods.AMETHYST.get(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java index 385bf4a64e..ad5e2d13c7 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexCypherLootMod.java @@ -5,19 +5,20 @@ import at.petrak.hexcasting.forge.lib.ForgeHexLootMods; import com.google.common.base.Suppliers; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraftforge.common.loot.LootModifier; +import net.neoforged.neoforge.common.loot.LootModifier; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; public class ForgeHexCypherLootMod extends LootModifier { - public static final Supplier> CODEC = - Suppliers.memoize(() -> RecordCodecBuilder.create( + public static final Supplier> CODEC = + Suppliers.memoize(() -> RecordCodecBuilder.mapCodec( inst -> codecStart(inst).and( Codec.DOUBLE.fieldOf("chance").forGetter(it -> it.chance) ).apply(inst, ForgeHexCypherLootMod::new) @@ -42,7 +43,7 @@ public ForgeHexCypherLootMod(LootItemCondition[] conditionsIn, double chance) { } @Override - public Codec codec() { + public MapCodec codec() { return ForgeHexLootMods.INJECT_CYPHERS.get(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexLoreLootMod.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexLoreLootMod.java index e5de13a237..b12b8a85df 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexLoreLootMod.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexLoreLootMod.java @@ -4,19 +4,20 @@ import at.petrak.hexcasting.forge.lib.ForgeHexLootMods; import com.google.common.base.Suppliers; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraftforge.common.loot.LootModifier; +import net.neoforged.neoforge.common.loot.LootModifier; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; public class ForgeHexLoreLootMod extends LootModifier { - public static final Supplier> CODEC = - Suppliers.memoize(() -> RecordCodecBuilder.create( + public static final Supplier> CODEC = + Suppliers.memoize(() -> RecordCodecBuilder.mapCodec( inst -> codecStart(inst).and( Codec.DOUBLE.fieldOf("chance").forGetter(it -> it.chance) ).apply(inst, ForgeHexLoreLootMod::new) @@ -39,7 +40,7 @@ public ForgeHexLoreLootMod(LootItemCondition[] conditionsIn, double chance) { } @Override - public Codec codec() { + public MapCodec codec() { return ForgeHexLootMods.INJECT_LORE.get(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java index fe1a2dda87..107c95a647 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexScrollLootMod.java @@ -6,20 +6,21 @@ import at.petrak.hexcasting.forge.lib.ForgeHexLootMods; import com.google.common.base.Suppliers; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; -import net.minecraftforge.common.loot.IGlobalLootModifier; -import net.minecraftforge.common.loot.LootModifier; +import net.neoforged.neoforge.common.loot.IGlobalLootModifier; +import net.neoforged.neoforge.common.loot.LootModifier; import org.jetbrains.annotations.NotNull; import java.util.function.Supplier; public class ForgeHexScrollLootMod extends LootModifier { - public static final Supplier> CODEC = - Suppliers.memoize(() -> RecordCodecBuilder.create( + public static final Supplier> CODEC = + Suppliers.memoize(() -> RecordCodecBuilder.mapCodec( inst -> codecStart(inst).and( Codec.INT.fieldOf("countRange").forGetter(it -> it.countRange) ).apply(inst, ForgeHexScrollLootMod::new) @@ -45,7 +46,7 @@ public ForgeHexScrollLootMod(LootItemCondition[] conditionsIn, int countRange) { } @Override - public Codec codec() { + public MapCodec codec() { return ForgeHexLootMods.INJECT_SCROLLS.get(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeAccessorBuiltInRegistries.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeAccessorBuiltInRegistries.java deleted file mode 100644 index b086d8714d..0000000000 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeAccessorBuiltInRegistries.java +++ /dev/null @@ -1,25 +0,0 @@ -package at.petrak.hexcasting.forge.mixin; - -import net.minecraft.core.DefaultedRegistry; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceKey; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -@Mixin(BuiltInRegistries.class) -public interface ForgeAccessorBuiltInRegistries { - @Invoker("registerDefaulted") - static DefaultedRegistry hex$registerDefaulted(ResourceKey> registryName, - String defaultId, - BuiltInRegistries.RegistryBootstrap bootstrap) { - throw new IllegalStateException(); - } - - @Invoker("registerSimple") - static Registry hex$registerSimple(ResourceKey> registryName, - BuiltInRegistries.RegistryBootstrap bootstrap) { - throw new IllegalStateException(); - } -} - diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeMixinTagsProvider.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeMixinTagsProvider.java index e815506337..4d731fac7e 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeMixinTagsProvider.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/mixin/ForgeMixinTagsProvider.java @@ -2,7 +2,7 @@ import at.petrak.hexcasting.forge.datagen.TagsProviderEFHSetter; import net.minecraft.data.tags.TagsProvider; -import net.minecraftforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.common.data.ExistingFileHelper; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -25,7 +25,7 @@ public void setEFH(ExistingFileHelper efh) { @Redirect(method = "missing(Lnet/minecraft/tags/TagEntry;)Z", at = @At( value = "FIELD", - target = "Lnet/minecraft/data/tags/TagsProvider;existingFileHelper:Lnet/minecraftforge/common/data/ExistingFileHelper;", + target = "Lnet/minecraft/data/tags/TagsProvider;existingFileHelper:Lnet/neoforged/neoforge/common/data/ExistingFileHelper;", opcode = Opcodes.GETFIELD), remap = false) private ExistingFileHelper hex$missingRedirect(TagsProvider instance) { @@ -34,9 +34,9 @@ public void setEFH(ExistingFileHelper efh) { return actualFileHelper; } - @Redirect(method = "lambda$getOrCreateRawBuilder$9(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/tags/TagBuilder;", at = @At( + @Redirect(method = "getOrCreateRawBuilder", at = @At( value = "FIELD", - target = "Lnet/minecraft/data/tags/TagsProvider;existingFileHelper:Lnet/minecraftforge/common/data/ExistingFileHelper;", + target = "Lnet/minecraft/data/tags/TagsProvider;existingFileHelper:Lnet/neoforged/neoforge/common/data/ExistingFileHelper;", opcode = Opcodes.GETFIELD), remap = false) private ExistingFileHelper hex$getOrCreateRawBuilderRedirect(TagsProvider instance) { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java index 78485aa6f9..5245c0c3a0 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java @@ -1,82 +1,69 @@ package at.petrak.hexcasting.forge.network; import at.petrak.hexcasting.common.msgs.*; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.simple.SimpleChannel; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.handling.IPayloadHandler; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; import org.apache.logging.log4j.util.TriConsumer; -import java.util.function.BiConsumer; import java.util.function.Consumer; -import java.util.function.Supplier; - -import static at.petrak.hexcasting.api.HexAPI.modLoc; public class ForgePacketHandler { - private static final String PROTOCOL_VERSION = "1"; - private static final SimpleChannel NETWORK = NetworkRegistry.newSimpleChannel( - modLoc("main"), - () -> PROTOCOL_VERSION, - PROTOCOL_VERSION::equals, - PROTOCOL_VERSION::equals - ); - - public static SimpleChannel getNetwork() { - return NETWORK; - } - public static void init() { - int messageIdx = 0; + public static void init(IEventBus modBus) { + modBus.addListener(RegisterPayloadHandlersEvent.class, ev -> { + final PayloadRegistrar registar = ev.registrar("1"); - // Client -> server - NETWORK.registerMessage(messageIdx++, MsgNewSpellPatternC2S.class, MsgNewSpellPatternC2S::serialize, - MsgNewSpellPatternC2S::deserialize, makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); - NETWORK.registerMessage(messageIdx++, MsgShiftScrollC2S.class, MsgShiftScrollC2S::serialize, - MsgShiftScrollC2S::deserialize, makeServerBoundHandler(MsgShiftScrollC2S::handle)); + // Client -> server + registar.playToServer(MsgNewSpellPatternC2S.TYPE, MsgNewSpellPatternC2S.STREAM_CODEC, + makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); + registar.playToServer(MsgShiftScrollC2S.TYPE, MsgShiftScrollC2S.STREAM_CODEC, + makeServerBoundHandler(MsgShiftScrollC2S::handle)); - // Server -> client - NETWORK.registerMessage(messageIdx++, MsgNewSpellPatternS2C.class, MsgNewSpellPatternS2C::serialize, - MsgNewSpellPatternS2C::deserialize, makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgBlinkS2C.class, MsgBlinkS2C::serialize, - MsgBlinkS2C::deserialize, makeClientBoundHandler(MsgBlinkS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgSentinelStatusUpdateAck.class, MsgSentinelStatusUpdateAck::serialize, - MsgSentinelStatusUpdateAck::deserialize, makeClientBoundHandler(MsgSentinelStatusUpdateAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgPigmentUpdateAck.class, MsgPigmentUpdateAck::serialize, - MsgPigmentUpdateAck::deserialize, makeClientBoundHandler(MsgPigmentUpdateAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgAltioraUpdateAck.class, MsgAltioraUpdateAck::serialize, - MsgAltioraUpdateAck::deserialize, makeClientBoundHandler(MsgAltioraUpdateAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgCastParticleS2C.class, MsgCastParticleS2C::serialize, - MsgCastParticleS2C::deserialize, makeClientBoundHandler(MsgCastParticleS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgOpenSpellGuiS2C.class, MsgOpenSpellGuiS2C::serialize, - MsgOpenSpellGuiS2C::deserialize, makeClientBoundHandler(MsgOpenSpellGuiS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgBeepS2C.class, MsgBeepS2C::serialize, - MsgBeepS2C::deserialize, makeClientBoundHandler(MsgBeepS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgBrainsweepAck.class, MsgBrainsweepAck::serialize, - MsgBrainsweepAck::deserialize, makeClientBoundHandler(MsgBrainsweepAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgNewWallScrollS2C.class, MsgNewWallScrollS2C::serialize, - MsgNewWallScrollS2C::deserialize, makeClientBoundHandler(MsgNewWallScrollS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgRecalcWallScrollDisplayS2C.class, MsgRecalcWallScrollDisplayS2C::serialize, - MsgRecalcWallScrollDisplayS2C::deserialize, makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgNewSpiralPatternsS2C.class, MsgNewSpiralPatternsS2C::serialize, - MsgNewSpiralPatternsS2C::deserialize, makeClientBoundHandler(MsgNewSpiralPatternsS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgClearSpiralPatternsS2C.class, MsgClearSpiralPatternsS2C::serialize, - MsgClearSpiralPatternsS2C::deserialize, makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); + // Server -> client + registar.playToClient(MsgNewSpellPatternS2C.TYPE, MsgNewSpellPatternS2C.STREAM_CODEC, + makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); + registar.playToClient(MsgBlinkS2C.TYPE, MsgBlinkS2C.STREAM_CODEC, + makeClientBoundHandler(MsgBlinkS2C::handle)); + registar.playToClient(MsgSentinelStatusUpdateAck.TYPE, MsgSentinelStatusUpdateAck.STREAM_CODEC, + makeClientBoundHandler(MsgSentinelStatusUpdateAck::handle)); + registar.playToClient(MsgPigmentUpdateAck.TYPE, MsgPigmentUpdateAck.STREAM_CODEC, + makeClientBoundHandler(MsgPigmentUpdateAck::handle)); + registar.playToClient(MsgAltioraUpdateAck.TYPE, MsgAltioraUpdateAck.STREAM_CODEC, + makeClientBoundHandler(MsgAltioraUpdateAck::handle)); + registar.playToClient(MsgCastParticleS2C.TYPE, MsgCastParticleS2C.STREAM_CODEC, + makeClientBoundHandler(MsgCastParticleS2C::handle)); + registar.playToClient(MsgOpenSpellGuiS2C.TYPE, MsgOpenSpellGuiS2C.STREAM_CODEC, + makeClientBoundHandler(MsgOpenSpellGuiS2C::handle)); + registar.playToClient(MsgBeepS2C.TYPE, MsgBeepS2C.STREAM_CODEC, + makeClientBoundHandler(MsgBeepS2C::handle)); + registar.playToClient(MsgBrainsweepAck.TYPE, MsgBrainsweepAck.STREAM_CODEC, + makeClientBoundHandler(MsgBrainsweepAck::handle)); + registar.playToClient(MsgNewWallScrollS2C.TYPE, MsgNewWallScrollS2C.STREAM_CODEC, + makeClientBoundHandler(MsgNewWallScrollS2C::handle)); + registar.playToClient(MsgRecalcWallScrollDisplayS2C.TYPE, MsgRecalcWallScrollDisplayS2C.STREAM_CODEC, + makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::handle)); + registar.playToClient(MsgNewSpiralPatternsS2C.TYPE, MsgNewSpiralPatternsS2C.STREAM_CODEC, + makeClientBoundHandler(MsgNewSpiralPatternsS2C::handle)); + registar.playToClient(MsgClearSpiralPatternsS2C.TYPE, MsgClearSpiralPatternsS2C.STREAM_CODEC, + makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); + }); } - private static BiConsumer> makeServerBoundHandler( + private static IPayloadHandler makeServerBoundHandler( TriConsumer handler) { return (m, ctx) -> { - handler.accept(m, ctx.get().getSender().getServer(), ctx.get().getSender()); - ctx.get().setPacketHandled(true); + handler.accept(m, ctx.player().getServer(), (ServerPlayer) ctx.player()); }; } - private static BiConsumer> makeClientBoundHandler(Consumer consumer) { + private static IPayloadHandler makeClientBoundHandler(Consumer consumer) { return (m, ctx) -> { consumer.accept(m); - ctx.get().setPacketHandled(true); }; } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java index 0e932b55ea..b3934d0342 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java @@ -1,51 +1,38 @@ package at.petrak.hexcasting.forge.network; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.player.AltioraAbility; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.xplat.IXplatAbstractions; -import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import org.jetbrains.annotations.Nullable; -import static at.petrak.hexcasting.api.HexAPI.modLoc; +import java.util.Optional; -public record MsgAltioraUpdateAck(@Nullable AltioraAbility altiora) implements IMessage { - public static final ResourceLocation ID = modLoc("altiora"); +public record MsgAltioraUpdateAck(@Nullable AltioraAbility altiora) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("altiora")); - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgAltioraUpdateAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var extant = buf.readBoolean(); - if (!extant) { - return new MsgAltioraUpdateAck(null); - } - var grace = buf.readVarInt(); - return new MsgAltioraUpdateAck(new AltioraAbility(grace)); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.optional(AltioraAbility.STREAM_CODEC).map( + opt -> opt.orElse(null), + Optional::ofNullable + ), MsgAltioraUpdateAck::altiora, + MsgAltioraUpdateAck::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeBoolean(this.altiora != null); - if (this.altiora != null) { - buf.writeVarInt(this.altiora.gracePeriod()); - } + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgAltioraUpdateAck self) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var player = Minecraft.getInstance().player; - if (player != null) { - IXplatAbstractions.INSTANCE.setAltiora(player, self.altiora); - } + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + IXplatAbstractions.INSTANCE.setAltiora(player, self.altiora); } }); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java index c9d24606fc..4471de9948 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java @@ -1,37 +1,38 @@ package at.petrak.hexcasting.forge.network; +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.player.Sentinel; import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.xplat.IXplatAbstractions; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Mob; +import java.util.Optional; + import static at.petrak.hexcasting.api.HexAPI.modLoc; /** * Sent server->client to synchronize the status of a brainswept mob. */ -public record MsgBrainsweepAck(int target) implements IMessage { - public static final ResourceLocation ID = modLoc("sweep"); - - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgBrainsweepAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); +public record MsgBrainsweepAck(int target) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("sweep")); - var target = buf.readInt(); - return new MsgBrainsweepAck(target); - } + public static final StreamCodec STREAM_CODEC = ByteBufCodecs.INT.map( + MsgBrainsweepAck::new, + MsgBrainsweepAck::target + ).mapStream(b -> b); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeInt(target); + public CustomPacketPayload.Type type() { + return TYPE; } public static MsgBrainsweepAck of(Entity target) { @@ -39,15 +40,12 @@ public static MsgBrainsweepAck of(Entity target) { } public static void handle(MsgBrainsweepAck msg) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var level = Minecraft.getInstance().level; - if (level != null) { - Entity entity = level.getEntity(msg.target()); - if (entity instanceof Mob living) { - IXplatAbstractions.INSTANCE.setBrainsweepAddlData(living); - } + Minecraft.getInstance().execute(() -> { + var level = Minecraft.getInstance().level; + if (level != null) { + Entity entity = level.getEntity(msg.target()); + if (entity instanceof Mob living) { + IXplatAbstractions.INSTANCE.setBrainsweepAddlData(living); } } }); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java index c38266b1ae..77e413b16f 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java @@ -1,11 +1,17 @@ package at.petrak.hexcasting.forge.network; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.common.msgs.IMessage; +import at.petrak.hexcasting.common.msgs.MsgBlinkS2C; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import at.petrak.paucal.api.PaucalCodecs; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -13,35 +19,24 @@ /** * Sent server->client to synchronize the status of the sentinel. */ -public record MsgPigmentUpdateAck(FrozenPigment update) implements IMessage { - public static final ResourceLocation ID = modLoc("color"); +public record MsgPigmentUpdateAck(FrozenPigment update) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("color")); - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgPigmentUpdateAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var tag = buf.readAnySizeNbt(); - var colorizer = FrozenPigment.fromNBT(tag); - return new MsgPigmentUpdateAck(colorizer); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + FrozenPigment.STREAM_CODEC, MsgPigmentUpdateAck::update, + MsgPigmentUpdateAck::new + ); @Override - public void serialize(FriendlyByteBuf buf) { - buf.writeNbt(this.update.serializeToNBT()); + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgPigmentUpdateAck self) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var player = Minecraft.getInstance().player; - if (player != null) { - IXplatAbstractions.INSTANCE.setPigment(player, self.update()); - } + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + IXplatAbstractions.INSTANCE.setPigment(player, self.update()); } }); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java index dc8f712d8e..f0971773ae 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java @@ -1,70 +1,53 @@ package at.petrak.hexcasting.forge.network; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.player.Sentinel; import at.petrak.hexcasting.common.msgs.IMessage; +import at.petrak.hexcasting.common.msgs.MsgBlinkS2C; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import at.petrak.paucal.api.PaucalCodecs; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; import javax.annotation.Nullable; +import java.util.Optional; + import static at.petrak.hexcasting.api.HexAPI.modLoc; /** * Sent server->client to synchronize the status of the sentinel. */ -public record MsgSentinelStatusUpdateAck(@Nullable Sentinel update) implements IMessage { - public static final ResourceLocation ID = modLoc("sntnl"); - - @Override - public ResourceLocation getFabricId() { - return ID; - } - - public static MsgSentinelStatusUpdateAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); +public record MsgSentinelStatusUpdateAck(@Nullable Sentinel update) implements CustomPacketPayload { + public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("sntnl")); - var exists = buf.readBoolean(); - if (!exists) { - return new MsgSentinelStatusUpdateAck(null); - } + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.optional(Sentinel.STREAM_CODEC).map( + opt -> opt.orElse(null), + Optional::ofNullable + ), MsgSentinelStatusUpdateAck::update, + MsgSentinelStatusUpdateAck::new + ); - var greater = buf.readBoolean(); - var origin = new Vec3(buf.readDouble(), buf.readDouble(), buf.readDouble()); - var dimension = ResourceKey.create(Registries.DIMENSION, buf.readResourceLocation()); - - var sentinel = new Sentinel(greater, origin, dimension); - return new MsgSentinelStatusUpdateAck(sentinel); - } - - public void serialize(FriendlyByteBuf buf) { - if (update == null) { - buf.writeBoolean(false); - return; - } - - buf.writeBoolean(true); - buf.writeBoolean(update.extendsRange()); - buf.writeDouble(update.position().x); - buf.writeDouble(update.position().y); - buf.writeDouble(update.position().z); - buf.writeResourceLocation(update.dimension().location()); + @Override + public CustomPacketPayload.Type type() { + return TYPE; } public static void handle(MsgSentinelStatusUpdateAck self) { - //noinspection Convert2Lambda - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { - var player = Minecraft.getInstance().player; - if (player != null) { - IXplatAbstractions.INSTANCE.setSentinel(player, self.update()); - } + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + IXplatAbstractions.INSTANCE.setSentinel(player, self.update()); } }); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeModConditionalIngredient.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeModConditionalIngredient.java index 0969291d47..2d82273ca8 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeModConditionalIngredient.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeModConditionalIngredient.java @@ -1,25 +1,43 @@ package at.petrak.hexcasting.forge.recipe; +import at.petrak.hexcasting.forge.lib.ForgeHexIngredientTypes; import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraftforge.common.crafting.AbstractIngredient; -import net.minecraftforge.common.crafting.IIngredientSerializer; +import net.neoforged.neoforge.common.crafting.ICustomIngredient; +import net.neoforged.neoforge.common.crafting.IngredientType; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; import java.util.Arrays; import java.util.Objects; +import java.util.stream.Stream; import static at.petrak.hexcasting.api.HexAPI.modLoc; -public class ForgeModConditionalIngredient extends AbstractIngredient { - public static final ResourceLocation ID = modLoc("mod_conditional"); +public class ForgeModConditionalIngredient implements ICustomIngredient { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( + Ingredient.CODEC.fieldOf("if_loaded").forGetter(ForgeModConditionalIngredient::getMain), + Codec.STRING.fieldOf("modid").forGetter(ForgeModConditionalIngredient::getModid), + Ingredient.CODEC.fieldOf("default").forGetter(ForgeModConditionalIngredient::getIfModLoaded) + ).apply(inst, ForgeModConditionalIngredient::of)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, ForgeModConditionalIngredient::getMain, + ByteBufCodecs.STRING_UTF8, ForgeModConditionalIngredient::getModid, + Ingredient.CONTENTS_STREAM_CODEC, ForgeModConditionalIngredient::getIfModLoaded, + ForgeModConditionalIngredient::new + ); private final Ingredient main; private final String modid; @@ -28,14 +46,28 @@ public class ForgeModConditionalIngredient extends AbstractIngredient { private final Ingredient toUse; protected ForgeModConditionalIngredient(Ingredient main, String modid, Ingredient ifModLoaded) { - super(IXplatAbstractions.INSTANCE.isModPresent(modid) ? Arrays.stream(ifModLoaded.values) : Arrays.stream(main.values)); this.main = main; this.modid = modid; this.ifModLoaded = ifModLoaded; - this.toUse = IXplatAbstractions.INSTANCE.isModPresent(modid) ? ifModLoaded : main; } + public String getModid() { + return modid; + } + + public Ingredient getMain() { + return main; + } + + public Ingredient getIfModLoaded() { + return ifModLoaded; + } + + public Ingredient getToUse() { + return toUse; + } + /** * Creates a new ingredient matching the given stack */ @@ -49,66 +81,17 @@ public boolean test(@Nullable ItemStack input) { } @Override - public boolean isSimple() { - return toUse.isSimple(); + public Stream getItems() { + return Arrays.stream(toUse.getItems()); } @Override - public @NotNull JsonElement toJson() { - JsonObject json = new JsonObject(); - json.addProperty("type", Objects.toString(ID)); - json.add("default", main.toJson()); - json.addProperty("modid", modid); - json.add("if_loaded", ifModLoaded.toJson()); - return json; + public boolean isSimple() { + return toUse.isSimple(); } @Override - public @NotNull IIngredientSerializer getSerializer() { - return Serializer.INSTANCE; - } - - public static @NotNull Ingredient fromNetwork(FriendlyByteBuf friendlyByteBuf) { - return Ingredient.fromNetwork(friendlyByteBuf); // Just send the actual ingredient - } - - public static Ingredient fromJson(JsonObject object) { - if (object.has("type") && object.getAsJsonPrimitive("type").getAsString().equals(ID.toString())) { - if (object.has("modid") && IXplatAbstractions.INSTANCE.isModPresent(object.getAsJsonPrimitive("modid").getAsString())) { - try { - Ingredient ingredient = Ingredient.fromJson(object.get("if_loaded")); - if (!ingredient.isEmpty()) { - return ingredient; - } - } catch (JsonParseException e) { - // NO-OP - } - } - - return Ingredient.fromJson(object.get("default")); - } - - return Ingredient.of(); - } - - public static class Serializer implements IIngredientSerializer { - public static final Serializer INSTANCE = new Serializer(); - - @Override - public @NotNull Ingredient parse(@NotNull FriendlyByteBuf buffer) { - return fromNetwork(buffer); - } - - @Override - public @NotNull Ingredient parse(@NotNull JsonObject json) { - return fromJson(json); - } - - @Override - public void write(@NotNull FriendlyByteBuf buffer, @NotNull Ingredient ingredient) { - if (ingredient instanceof ForgeModConditionalIngredient conditionalIngredient) - conditionalIngredient.toUse.toNetwork(buffer); - // It shouldn't be possible to not be a ForgeModConditionalIngredient here - } + public IngredientType getType() { + return ForgeHexIngredientTypes.MOD_CONDITIONAL_INGREDIENT.get(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java index 434104aa9b..f0f77e1cce 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java @@ -4,42 +4,56 @@ import at.petrak.hexcasting.api.casting.iota.NullIota; import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.lib.HexDataComponents; +import at.petrak.hexcasting.forge.lib.ForgeHexIngredientTypes; import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Unit; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraftforge.common.crafting.AbstractIngredient; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.common.crafting.IIngredientSerializer; -import net.minecraftforge.common.crafting.PartialNBTIngredient; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.crafting.ICustomIngredient; +import net.neoforged.neoforge.common.crafting.IngredientType; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; import java.util.Objects; +import java.util.Optional; import java.util.stream.Stream; import static at.petrak.hexcasting.api.HexAPI.modLoc; -public class ForgeUnsealedIngredient extends AbstractIngredient { - public static final ResourceLocation ID = modLoc("unsealed"); +public class ForgeUnsealedIngredient implements ICustomIngredient { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( + ItemStack.CODEC.fieldOf("stack").forGetter(ForgeUnsealedIngredient::getStack) + ).apply(inst, ForgeUnsealedIngredient::new)); + public static final StreamCodec STREAM_CODEC = ItemStack.STREAM_CODEC.map( + ForgeUnsealedIngredient::of, + ForgeUnsealedIngredient::getStack + ); private final ItemStack stack; private static ItemStack createStack(ItemStack base) { ItemStack newStack = base.copy(); - NBTHelper.putString(newStack, IotaHolderItem.TAG_OVERRIDE_VISUALLY, "any"); + base.set(HexDataComponents.VISUAL_OVERRIDE, Optional.empty()); return newStack; } protected ForgeUnsealedIngredient(ItemStack stack) { - super(Stream.of(new Ingredient.ItemValue(createStack(stack)))); this.stack = stack; } + public ItemStack getStack() { + return stack; + } + /** * Creates a new ingredient matching the given stack */ @@ -55,7 +69,7 @@ public boolean test(@Nullable ItemStack input) { if (this.stack.getItem() == input.getItem() && this.stack.getDamageValue() == input.getDamageValue()) { ADIotaHolder holder = IXplatAbstractions.INSTANCE.findDataHolder(this.stack); if (holder != null) { - return holder.readIotaTag() != null && holder.writeIota(new NullIota(), true); + return holder.readIota() != null && holder.writeIota(NullIota.INSTANCE, true); } } @@ -63,41 +77,17 @@ public boolean test(@Nullable ItemStack input) { } @Override - public boolean isSimple() { - return false; + public Stream getItems() { + return Stream.of(createStack(stack)); } @Override - public @NotNull IIngredientSerializer getSerializer() { - return ForgeUnsealedIngredient.Serializer.INSTANCE; + public boolean isSimple() { + return false; } @Override - public @NotNull JsonElement toJson() { - JsonObject json = new JsonObject(); - // TODO: should this be Partial or Strict - json.addProperty("type", Objects.toString(CraftingHelper.getID(PartialNBTIngredient.Serializer.INSTANCE))); - json.addProperty("item", Objects.toString(ForgeRegistries.ITEMS.getKey(stack.getItem()))); - return json; - } - - - public static class Serializer implements IIngredientSerializer { - public static final ForgeUnsealedIngredient.Serializer INSTANCE = new ForgeUnsealedIngredient.Serializer(); - - @Override - public @NotNull ForgeUnsealedIngredient parse(FriendlyByteBuf buffer) { - return new ForgeUnsealedIngredient(buffer.readItem()); - } - - @Override - public @NotNull ForgeUnsealedIngredient parse(@NotNull JsonObject json) { - return new ForgeUnsealedIngredient(CraftingHelper.getItemStack(json, true)); - } - - @Override - public void write(FriendlyByteBuf buffer, ForgeUnsealedIngredient ingredient) { - buffer.writeItem(ingredient.stack); - } + public IngredientType getType() { + return ForgeHexIngredientTypes.UNSEALED_INGREDIENT.get(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java index d33c2654b0..9dc21cbd25 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java @@ -11,6 +11,7 @@ import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.client.renderer.item.ItemPropertyFunction; import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -18,11 +19,12 @@ import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.phys.AABB; +import net.neoforged.neoforge.network.PacketDistributor; public class ForgeClientXplatImpl implements IClientXplatAbstractions { @Override - public void sendPacketToServer(IMessage packet) { - ForgePacketHandler.getNetwork().sendToServer(packet); + public void sendPacketToServer(CustomPacketPayload packet) { + PacketDistributor.sendToServer(packet); } @Override @@ -49,10 +51,10 @@ public void registerItemProperty(Item item, ResourceLocation id, ItemPropertyFun @Override public ClientCastingStack getClientCastingStack(Player player) { - var maybeCap = player.getCapability(HexCapabilities.CLIENT_CASTING_STACK).resolve(); - if (maybeCap.isEmpty()) + var clientCastingStack = player.getCapability(HexCapabilities.Entity.CLIENT_CASTING_STACK); + if (clientCastingStack == null) return new ClientCastingStack(); // lie - return maybeCap.get().get(); + return clientCastingStack.provide(); } @Override diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java index d39a71e857..90f6a2d320 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java @@ -22,15 +22,11 @@ import at.petrak.hexcasting.api.player.Sentinel; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.HexRegistries; -import at.petrak.hexcasting.common.lib.hex.HexContinuationTypes; -import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; -import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; -import at.petrak.hexcasting.common.msgs.IMessage; +import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientType; +import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import at.petrak.hexcasting.forge.cap.CapSyncers; import at.petrak.hexcasting.forge.cap.HexCapabilities; import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; -import at.petrak.hexcasting.forge.mixin.ForgeAccessorBuiltInRegistries; -import at.petrak.hexcasting.forge.network.ForgePacketHandler; import at.petrak.hexcasting.forge.network.MsgBrainsweepAck; import at.petrak.hexcasting.forge.recipe.ForgeUnsealedIngredient; import at.petrak.hexcasting.interop.HexInterop; @@ -38,15 +34,16 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions; import at.petrak.hexcasting.xplat.IXplatTags; import at.petrak.hexcasting.xplat.Platform; -import com.google.common.base.Suppliers; +import com.illusivesoulworks.caelus.api.CaelusApi; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -72,33 +69,30 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.*; -import net.minecraftforge.common.loot.CanToolPerformAction; -import net.minecraftforge.common.util.FakePlayerFactory; -import net.minecraftforge.event.level.BlockEvent; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidType; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.PacketDistributor; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.neoforge.common.CommonHooks; +import net.neoforged.neoforge.common.ItemAbilities; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.common.loot.CanItemPerformAbility; +import net.neoforged.neoforge.common.util.FakePlayerFactory; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.fluids.FluidType; +import net.neoforged.neoforge.fluids.FluidUtil; +import net.neoforged.neoforge.fluids.capability.IFluidHandler; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.registries.RegistryBuilder; import org.jetbrains.annotations.Nullable; -import top.theillusivec4.caelus.api.CaelusApi; import virtuoel.pehkui.api.ScaleTypes; -import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.UUID; import java.util.function.BiFunction; -import java.util.function.Supplier; import static at.petrak.hexcasting.api.HexAPI.modLoc; -import static net.minecraftforge.fluids.capability.IFluidHandler.FluidAction.EXECUTE; public class ForgeXplatImpl implements IXplatAbstractions { @Override @@ -133,8 +127,7 @@ public void setBrainsweepAddlData(Mob mob) { mob.getPersistentData().putBoolean(TAG_BRAINSWEPT, true); if (mob.level() instanceof ServerLevel) { - ForgePacketHandler.getNetwork() - .send(PacketDistributor.TRACKING_ENTITY.with(() -> mob), MsgBrainsweepAck.of(mob)); + PacketDistributor.sendToPlayersTrackingEntity(mob, MsgBrainsweepAck.of(mob)); } } @@ -166,15 +159,17 @@ public void setAltiora(Player player, @Nullable AltioraAbility altiora) { } // The elytra ability is done with an event on fabric - var elytraing = CaelusApi.getInstance().getFlightAttribute(); + // TODO port: added null check, test if still works + var elytraing = CaelusApi.getInstance().getFallFlyingAttribute(); var inst = player.getAttributes().getInstance(elytraing); if (altiora != null) { - if (inst.getModifier(ALTIORA_ATTRIBUTE_ID) == null) { - inst.addTransientModifier(new AttributeModifier(ALTIORA_ATTRIBUTE_ID, "Altiora", 1.0, - AttributeModifier.Operation.ADDITION)); + if (inst != null && !inst.hasModifier(ALTIORA_ATTRIBUTE_ID)) { + inst.addTransientModifier(new AttributeModifier(ALTIORA_ATTRIBUTE_ID, 1.0, + AttributeModifier.Operation.ADD_VALUE)); } } else { - inst.removeModifier(ALTIORA_ATTRIBUTE_ID); + if(inst != null) + inst.removeModifier(ALTIORA_ATTRIBUTE_ID); } if (player instanceof ServerPlayer serverPlayer) { @@ -188,7 +183,7 @@ public void setAltiora(Player player, @Nullable AltioraAbility altiora) { CompoundTag tag = player.getPersistentData(); if (pigment != null) - tag.put(TAG_PIGMENT, pigment.serializeToNBT()); + tag.put(TAG_PIGMENT, FrozenPigment.CODEC.encodeStart(NbtOps.INSTANCE, pigment).getOrThrow()); else tag.remove(TAG_PIGMENT); @@ -220,16 +215,12 @@ public void setSentinel(Player player, @Nullable Sentinel sentinel) { @Override public void setStaffcastImage(ServerPlayer player, @Nullable CastingImage image) { - player.getPersistentData().put(TAG_VM, image == null ? new CompoundTag() : image.serializeToNbt()); + player.getPersistentData().put(TAG_VM, image == null ? new CompoundTag() : CastingImage.getCODEC().encodeStart(NbtOps.INSTANCE, image).getOrThrow()); } @Override public void setPatterns(ServerPlayer player, List patterns) { - var listTag = new ListTag(); - for (ResolvedPattern pattern : patterns) { - listTag.add(pattern.serializeToNBT()); - } - player.getPersistentData().put(TAG_PATTERNS, listTag); + player.getPersistentData().put(TAG_PATTERNS, ResolvedPattern.CODEC.listOf().encodeStart(NbtOps.INSTANCE, patterns).getOrThrow()); } @Override @@ -246,7 +237,7 @@ public FlightAbility getFlight(ServerPlayer player) { var origin = HexUtils.vecFromNBT(tag.getCompound(TAG_FLIGHT_ORIGIN)); var radius = tag.getDouble(TAG_FLIGHT_RADIUS); var dimension = ResourceKey.create(Registries.DIMENSION, - new ResourceLocation(tag.getString(TAG_FLIGHT_DIMENSION))); + ResourceLocation.parse(tag.getString(TAG_FLIGHT_DIMENSION))); return new FlightAbility(timeLeft, dimension, origin, radius); } return null; @@ -265,9 +256,10 @@ public AltioraAbility getAltiora(Player player) { @Override public FrozenPigment getPigment(Player player) { - return FrozenPigment.fromNBT(player.getPersistentData().getCompound(TAG_PIGMENT)); + return FrozenPigment.CODEC.parse(NbtOps.INSTANCE, player.getPersistentData().getCompound(TAG_PIGMENT)).getOrThrow(); } + //TODO port: replace with codec? @Override public Sentinel getSentinel(Player player) { CompoundTag tag = player.getPersistentData(); @@ -277,8 +269,7 @@ public Sentinel getSentinel(Player player) { } var extendsRange = tag.getBoolean(TAG_SENTINEL_GREATER); var position = HexUtils.vecFromNBT(tag.getCompound(TAG_SENTINEL_POSITION)); - var dimension = ResourceKey.create(Registries.DIMENSION, - new ResourceLocation(tag.getString(TAG_SENTINEL_DIMENSION))); + var dimension = ResourceKey.create(Registries.DIMENSION, ResourceLocation.parse(tag.getString(TAG_SENTINEL_DIMENSION))); return new Sentinel(extendsRange, position, dimension); } @@ -287,20 +278,12 @@ public Sentinel getSentinel(Player player) { public CastingVM getStaffcastVM(ServerPlayer player, InteractionHand hand) { // This is always from a staff because we don't need to load the VM when casting from item var ctx = new StaffCastEnv(player, hand); - return new CastingVM(CastingImage.loadFromNbt(player.getPersistentData().getCompound(TAG_VM), - player.serverLevel()), ctx); + return new CastingVM(CastingImage.getCODEC().parse(NbtOps.INSTANCE, player.getPersistentData().getCompound(TAG_VM)).getOrThrow(), ctx); } @Override public List getPatternsSavedInUi(ServerPlayer player) { - ListTag patternsTag = player.getPersistentData().getList(TAG_PATTERNS, Tag.TAG_COMPOUND); - - List patterns = new ArrayList<>(patternsTag.size()); - - for (int i = 0; i < patternsTag.size(); i++) { - patterns.add(ResolvedPattern.fromNBT(patternsTag.getCompound(i))); - } - return patterns; + return ResolvedPattern.CODEC.listOf().parse(NbtOps.INSTANCE, player.getPersistentData().getList(TAG_PATTERNS, Tag.TAG_COMPOUND)).getOrThrow(); } @Override @@ -312,77 +295,62 @@ public void clearCastingData(ServerPlayer player) { @Override public @Nullable ADMediaHolder findMediaHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.MEDIA).resolve(); - return maybeCap.orElse(null); - } - - @Override - public @Nullable ADMediaHolder findMediaHolder(ServerPlayer player) { - var maybeCap = player.getCapability(HexCapabilities.MEDIA).resolve(); - return maybeCap.orElse(null); + return stack.getCapability(HexCapabilities.Item.MEDIA); } @Override public @Nullable ADIotaHolder findDataHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.IOTA).resolve(); - return maybeCap.orElse(null); + return stack.getCapability(HexCapabilities.Item.IOTA); } @Override public @Nullable ADIotaHolder findDataHolder(Entity entity) { - var maybeCap = entity.getCapability(HexCapabilities.IOTA).resolve(); - return maybeCap.orElse(null); + return entity.getCapability(HexCapabilities.Entity.IOTA); } @Override public @Nullable ADHexHolder findHexHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.STORED_HEX).resolve(); - return maybeCap.orElse(null); + return stack.getCapability(HexCapabilities.Item.STORED_HEX); } @Override public @Nullable ADVariantItem findVariantHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.VARIANT_ITEM).resolve(); - return maybeCap.orElse(null); + return stack.getCapability(HexCapabilities.Item.VARIANT_ITEM); } @Override public boolean isPigment(ItemStack stack) { - return stack.getCapability(HexCapabilities.COLOR).isPresent(); + return stack.getCapability(HexCapabilities.Item.COLOR) != null; } @Override public ColorProvider getColorProvider(FrozenPigment pigment) { - var maybePigment = pigment.item().getCapability(HexCapabilities.COLOR).resolve(); - if (maybePigment.isPresent()) { - return maybePigment.get().provideColor(pigment.owner()); - } - return ColorProvider.MISSING; + var adPigment = pigment.item().getCapability(HexCapabilities.Item.COLOR); + return adPigment != null ? adPigment.provideColor(pigment.owner()) : ColorProvider.MISSING; } @Override - public void sendPacketToPlayer(ServerPlayer target, IMessage packet) { - ForgePacketHandler.getNetwork().send(PacketDistributor.PLAYER.with(() -> target), packet); + public void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet) { + PacketDistributor.sendToPlayer(target, packet); } @Override - public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, IMessage packet) { - ForgePacketHandler.getNetwork().send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint( - pos.x, pos.y, pos.z, radius * radius, dimension.dimension() - )), packet); + public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, CustomPacketPayload packet) { + PacketDistributor.sendToPlayersNear(dimension, null, pos.x, pos.y, pos.z, radius, packet); } @Override - public void sendPacketTracking(Entity entity, IMessage packet) { - ForgePacketHandler.getNetwork().send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), packet); + public void sendPacketTracking(Entity entity, CustomPacketPayload packet) { + PacketDistributor.sendToPlayersTrackingEntity(entity, packet); } @Override - public Packet toVanillaClientboundPacket(IMessage message) { + public Packet toVanillaClientboundPacket(CustomPacketPayload message) { + // TODO port: test cast //noinspection unchecked - return (Packet) ForgePacketHandler.getNetwork().toVanillaPacket(message, NetworkDirection.PLAY_TO_CLIENT); + return (Packet) (Object) message.toVanillaClientbound(); } @Override @@ -393,19 +361,19 @@ public BlockEntityType createBlockEntityType(BiFuncti @Override public boolean tryPlaceFluid(Level level, InteractionHand hand, BlockPos pos, Fluid fluid) { - Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP).resolve(); + Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP); return handler.isPresent() && - handler.get().fill(new FluidStack(fluid, FluidType.BUCKET_VOLUME), EXECUTE) > 0; + handler.get().fill(new FluidStack(fluid, FluidType.BUCKET_VOLUME), IFluidHandler.FluidAction.EXECUTE) > 0; } @Override public boolean drainAllFluid(Level level, BlockPos pos) { - Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP).resolve(); + Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP); if (handler.isPresent()) { boolean any = false; IFluidHandler pool = handler.get(); for (int i = 0; i < pool.getTanks(); i++) { - if (!pool.drain(pool.getFluidInTank(i), EXECUTE).isEmpty()) { + if (!pool.drain(pool.getFluidInTank(i), IFluidHandler.FluidAction.EXECUTE).isEmpty()) { any = true; } } @@ -416,12 +384,13 @@ public boolean drainAllFluid(Level level, BlockPos pos) { @Override public Ingredient getUnsealedIngredient(ItemStack stack) { - return ForgeUnsealedIngredient.of(stack); + return ForgeUnsealedIngredient.of(stack).toVanilla(); } @Override public boolean isCorrectTierForDrops(Tier tier, BlockState bs) { - return !bs.requiresCorrectToolForDrops() || TierSortingRegistry.isCorrectTierForDrops(tier, bs); + // TODO port: check tag + return !bs.is(HexTags.Blocks.HEX_UNBREAKABLE); } @Override @@ -432,12 +401,12 @@ public Item.Properties addEquipSlotFabric(EquipmentSlot slot) { private static final IXplatTags TAGS = new IXplatTags() { @Override public TagKey amethystDust() { - return HexTags.Items.create(new ResourceLocation("forge", "dusts/amethyst")); + return HexTags.Items.create(ResourceLocation.fromNamespaceAndPath("forge", "dusts/amethyst")); } @Override public TagKey gems() { - return HexTags.Items.create(new ResourceLocation("forge", "gems")); + return HexTags.Items.create(ResourceLocation.fromNamespaceAndPath("forge", "gems")); } }; @@ -448,7 +417,7 @@ public IXplatTags tags() { @Override public LootItemCondition.Builder isShearsCondition() { - return CanToolPerformAction.canToolPerformAction(ToolActions.SHEARS_DIG); + return CanItemPerformAbility.canItemPerformAbility(ItemAbilities.SHEARS_DIG); } @Override @@ -463,70 +432,83 @@ public String getModName(String namespace) { return namespace; } - private static final Supplier> ACTION_REGISTRY = Suppliers.memoize(() -> - ForgeAccessorBuiltInRegistries.hex$registerSimple( - HexRegistries.ACTION, null) - ); - private static final Supplier>> SPECIAL_HANDLER_REGISTRY = - Suppliers.memoize(() -> - ForgeAccessorBuiltInRegistries.hex$registerSimple( - HexRegistries.SPECIAL_HANDLER, null) - ); - private static final Supplier>> IOTA_TYPE_REGISTRY = Suppliers.memoize(() -> - ForgeAccessorBuiltInRegistries.hex$registerDefaulted( - HexRegistries.IOTA_TYPE, - modLoc("null").toString(), registry -> HexIotaTypes.NULL) - ); - private static final Supplier> ARITHMETIC_REGISTRY = Suppliers.memoize(() -> - ForgeAccessorBuiltInRegistries.hex$registerSimple( - HexRegistries.ARITHMETIC, null) - ); - private static final Supplier>> CONTINUATION_TYPE_REGISTRY = Suppliers.memoize(() -> - ForgeAccessorBuiltInRegistries.hex$registerDefaulted( - HexRegistries.CONTINUATION_TYPE, - modLoc("end").toString(), registry -> HexContinuationTypes.END) - ); - private static final Supplier> EVAL_SOUND_REGISTRY = Suppliers.memoize(() -> - ForgeAccessorBuiltInRegistries.hex$registerDefaulted( - HexRegistries.EVAL_SOUND, - modLoc("nothing").toString(), registry -> HexEvalSounds.NOTHING) - ); + private static final Registry ACTION_REGISTRY = new RegistryBuilder<>(HexRegistries.ACTION) + .sync(true) + .create(); + private static final Registry> SPECIAL_HANDLER_REGISTRY = new RegistryBuilder<>(HexRegistries.SPECIAL_HANDLER) + .sync(true) + .create(); + private static final Registry> IOTA_TYPE_REGISTRY = new RegistryBuilder<>(HexRegistries.IOTA_TYPE) + .sync(true) + .defaultKey(modLoc("null")) + .create(); + + private static final Registry ARITHMETIC_REGISTRY = new RegistryBuilder<>(HexRegistries.ARITHMETIC) + .sync(true) + .create(); + + private static final Registry> CONTINUATION_TYPE_REGISTRY = new RegistryBuilder<>(HexRegistries.CONTINUATION_TYPE) + .sync(true) + .defaultKey(modLoc("end")) + .create(); + private static final Registry EVAL_SOUND_REGISTRY = new RegistryBuilder<>(HexRegistries.EVAL_SOUND) + .sync(true) + .defaultKey(modLoc("nothing")) + .create(); + private static final Registry> STATE_INGREDIENT_REGISTRY = new RegistryBuilder<>(HexRegistries.STATE_INGREDIENT) + .sync(true) + .defaultKey(modLoc("none")) + .create(); + private static final Registry> BRAINSWEEPEE_INGREDIENT_REGISTRY = new RegistryBuilder<>(HexRegistries.BRAINSWEEPEE_INGREDIENT) + .sync(true) + .defaultKey(modLoc("none")) + .create(); @Override public Registry getActionRegistry() { - return ACTION_REGISTRY.get(); + return ACTION_REGISTRY; } @Override public Registry> getSpecialHandlerRegistry() { - return SPECIAL_HANDLER_REGISTRY.get(); + return SPECIAL_HANDLER_REGISTRY; } @Override public Registry> getIotaTypeRegistry() { - return IOTA_TYPE_REGISTRY.get(); + return IOTA_TYPE_REGISTRY; } @Override public Registry getArithmeticRegistry() { - return ARITHMETIC_REGISTRY.get(); + return ARITHMETIC_REGISTRY; } @Override public Registry> getContinuationTypeRegistry() { - return CONTINUATION_TYPE_REGISTRY.get(); + return CONTINUATION_TYPE_REGISTRY; } @Override public Registry getEvalSoundRegistry() { - return EVAL_SOUND_REGISTRY.get(); + return EVAL_SOUND_REGISTRY; + } + + @Override + public Registry> getStateIngredientRegistry() { + return STATE_INGREDIENT_REGISTRY; + } + + @Override + public Registry> getBrainsweepeeIngredientRegistry() { + return BRAINSWEEPEE_INGREDIENT_REGISTRY; } @Override public boolean isBreakingAllowed(ServerLevel world, BlockPos pos, BlockState state, @Nullable Player player) { if (player == null) player = FakePlayerFactory.get(world, HEXCASTING); - return !MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, pos, state, player)); + return !NeoForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, pos, state, player)).isCanceled(); } @Override @@ -535,7 +517,7 @@ public boolean isPlacingAllowed(ServerLevel world, BlockPos pos, ItemStack block player = FakePlayerFactory.get(world, HEXCASTING); ItemStack cached = player.getMainHandItem(); player.setItemInHand(InteractionHand.MAIN_HAND, blockStack.copy()); - var evt = ForgeHooks.onRightClickBlock(player, InteractionHand.MAIN_HAND, pos, + var evt = CommonHooks.onRightClickBlock(player, InteractionHand.MAIN_HAND, pos, new BlockHitResult(Vec3.atCenterOf(pos), Direction.DOWN, pos, true)); player.setItemInHand(InteractionHand.MAIN_HAND, cached); return !evt.isCanceled(); @@ -583,7 +565,7 @@ public void setScale(Entity e, float scale) { public static final String TAG_ALTIORA_ALLOWED = "hexcasting:altiora_allowed"; public static final String TAG_ALTIORA_GRACE = "hexcasting:altiora_grace_period"; - public static final UUID ALTIORA_ATTRIBUTE_ID = UUID.fromString("91897c79-3ebb-468c-a265-40418ed01c41"); + public static final ResourceLocation ALTIORA_ATTRIBUTE_ID = modLoc("altiora"); public static final String TAG_VM = "hexcasting:spell_harness"; public static final String TAG_PATTERNS = "hexcasting:spell_patterns"; diff --git a/gradle.properties b/gradle.properties index 6d7a8871a4..637f71e108 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,6 +12,8 @@ minecraftVersion=1.21.1 kotlinVersion=2.0.21 modVersion=0.12.0-devel +fabric_loader_version=0.16.14 + # this is the version published to modrinth/cf i swear # haha not anymore it's from mavenLocal paucalVersion=0.7.2 From c9274b931d67dba652f9684d0f94755fe37bff9f Mon Sep 17 00:00:00 2001 From: slava110 Date: Wed, 18 Jun 2025 05:25:16 +0300 Subject: [PATCH 50/81] Fixing errors made during port --- .../hexcasting/api/casting/ActionUtils.kt | 16 ++-- .../api/casting/eval/CastingEnvironment.java | 2 +- .../api/casting/eval/env/CircleCastEnv.java | 2 +- .../casting/eval/env/PlayerBasedCastEnv.java | 8 +- .../hexcasting/api/casting/iota/Iota.java | 18 +++- .../api/client/ClientCastingStack.kt | 5 -- .../hexcasting/client/gui/GuiSpellcasting.kt | 4 +- .../client/render/HexAdditionalRenderers.java | 2 +- .../hexcasting/client/render/RenderLib.kt | 1 - .../actions/queryentity/OpCanEntityHexFly.kt | 2 +- .../common/casting/actions/spells/OpFlight.kt | 2 +- .../casting/actions/spells/OpMakeBattery.kt | 2 +- .../actions/spells/OpMakePackagedSpell.kt | 2 +- .../casting/actions/spells/OpPotionEffect.kt | 2 +- .../casting/actions/spells/OpRecharge.kt | 2 +- .../casting/actions/spells/great/OpAltiora.kt | 2 +- .../actions/spells/great/OpBrainsweep.kt | 2 +- .../hexcasting/common/items/ItemLens.java | 18 ++-- .../hexcasting/common/items/ItemStaff.java | 4 +- .../common/items/storage/ItemAbacus.java | 6 +- .../common/items/storage/ItemSpellbook.java | 83 ++++++++++++++----- .../hexcasting/common/lib/HexAttributes.java | 55 ++++-------- .../hexcasting/common/lib/HexBlocks.java | 2 +- .../common/lib/HexCreativeTabs.java | 5 +- .../hexcasting/common/lib/HexMobEffects.java | 4 +- .../hexcasting/common/lib/HexPotions.java | 8 +- .../hexcasting/common/lib/HexRegistries.java | 2 +- .../common/msgs/MsgOpenSpellGuiS2C.java | 8 +- .../common/recipe/BrainsweepRecipe.java | 9 +- .../brainsweep/BrainsweepeeIngredients.java | 7 -- .../{ => state}/StateIngredient.java | 4 +- .../{ => state}/StateIngredientBlock.java | 2 +- .../StateIngredientBlockState.java | 2 +- .../{ => state}/StateIngredientBlocks.java | 6 +- .../{ => state}/StateIngredientTag.java | 5 +- .../StateIngredientTagExcluding.java | 2 +- .../{ => state}/StateIngredientType.java | 2 +- .../{ => state}/StateIngredients.java | 2 +- .../datagen/recipe/HexplatRecipes.java | 24 ++---- .../builders/BrainsweepRecipeBuilder.java | 4 +- .../patchouli/CustomComponentTooltip.java | 1 + .../hexcasting/xplat/IXplatAbstractions.java | 8 +- .../hexcasting/xplat/IXplatRegister.java | 21 +++++ Common/src/main/resources/hexplat.mixins.json | 5 +- .../forge/ForgeHexClientInitializer.java | 9 ++ .../hexcasting/forge/ForgeHexInitializer.java | 40 ++++----- .../forge/cap/ForgeCapabilityHandler.java | 7 -- .../hexcasting/forge/cap/HexCapabilities.java | 4 - .../cap/adimpl/CapClientCastingStack.java | 27 ------ .../forge/lib/ForgeHexAttachments.java | 23 +++++ .../forge/lib/ForgeHexIngredientTypes.java | 7 ++ .../forge/xplat/ForgeClientXplatImpl.java | 9 +- .../hexcasting/forge/xplat/ForgeRegister.java | 31 +++++++ .../forge/xplat/ForgeXplatImpl.java | 11 ++- .../resources/hexcasting_forge.mixins.json | 1 - 55 files changed, 298 insertions(+), 244 deletions(-) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredient.java (86%) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredientBlock.java (97%) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredientBlockState.java (98%) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredientBlocks.java (94%) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredientTag.java (94%) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredientTagExcluding.java (98%) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredientType.java (83%) rename Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/{ => state}/StateIngredients.java (98%) create mode 100644 Common/src/main/java/at/petrak/hexcasting/xplat/IXplatRegister.java delete mode 100644 Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java create mode 100644 Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexAttachments.java create mode 100644 Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeRegister.java diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt index fc8efbb916..eaa9cc1e75 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/ActionUtils.kt @@ -99,40 +99,40 @@ fun List.getBool(idx: Int, argc: Int = 0): Boolean { // Helpers -fun List.getItemEntity(idx: Int, argc: Int = 0): ItemEntity { +fun List.getItemEntity(level: ServerLevel, idx: Int, argc: Int = 0): ItemEntity { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = TODO("replace entity references") + val e = x.getOrFindEntity(level) ?: throw MishapEntityUnavailable(x.entityId, x.cachedEntityName) if (e is ItemEntity) return e } throw MishapInvalidIota.ofType(x, if (argc == 0) idx else argc - (idx + 1), "entity.item") } -fun List.getPlayer(idx: Int, argc: Int = 0): ServerPlayer { +fun List.getPlayer(level: ServerLevel, idx: Int, argc: Int = 0): ServerPlayer { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = TODO("replace entity references") + val e = x.getOrFindEntity(level) ?: throw MishapEntityUnavailable(x.entityId, x.cachedEntityName) if (e is ServerPlayer) return e } throw MishapInvalidIota.ofType(x, if (argc == 0) idx else argc - (idx + 1), "entity.player") } -fun List.getMob(idx: Int, argc: Int = 0): Mob { +fun List.getMob(level: ServerLevel, idx: Int, argc: Int = 0): Mob { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = TODO("replace entity references") + val e = x.getOrFindEntity(level) ?: throw MishapEntityUnavailable(x.entityId, x.cachedEntityName) if (e is Mob) return e } throw MishapInvalidIota.ofType(x, if (argc == 0) idx else argc - (idx + 1), "entity.mob") } -fun List.getLivingEntityButNotArmorStand(idx: Int, argc: Int = 0): LivingEntity { +fun List.getLivingEntityButNotArmorStand(level: ServerLevel, idx: Int, argc: Int = 0): LivingEntity { val x = this.getOrElse(idx) { throw MishapNotEnoughArgs(idx + 1, this.size) } if (x is EntityIota) { - val e = TODO("replace entity references") + val e = x.getOrFindEntity(level) ?: throw MishapEntityUnavailable(x.entityId, x.cachedEntityName) if (e is LivingEntity && e !is ArmorStand) return e } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java index 2365a922ff..e74d123f19 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java @@ -250,7 +250,7 @@ public boolean isEnlightened() { */ public long extractMedia(long cost, boolean simulate) { if (this.getCastingEntity() != null){ - cost = (long) (cost * this.getCastingEntity().getAttributeValue(Holder.direct(HexAttributes.MEDIA_CONSUMPTION_MODIFIER))); + cost = (long) (cost * this.getCastingEntity().getAttributeValue(HexAttributes.MEDIA_CONSUMPTION_MODIFIER)); } for (var extractMediaComponent : preMediaExtract) cost = extractMediaComponent.onExtractMedia(cost, simulate); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java index f6059a9779..2b0d914839 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java @@ -133,7 +133,7 @@ public long extractMediaEnvironment(long cost, boolean simulate) { public boolean isVecInRangeEnvironment(Vec3 vec) { var caster = this.execState.getCaster(this.world); if (caster != null) { - double sentinelRadius = caster.getAttributeValue(Holder.direct(HexAttributes.SENTINEL_RADIUS)); + double sentinelRadius = caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); if (vec.distanceToSqr(caster.position()) <= caster.getBbHeight() * caster.getBbHeight()) { return true; } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java index 433fc267ba..f143bf58c5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java @@ -49,8 +49,8 @@ protected PlayerBasedCastEnv(ServerPlayer caster, InteractionHand castingHand) { super(caster.serverLevel()); this.caster = caster; this.castingHand = castingHand; - this.ambitRadius = caster.getAttributeValue(Holder.direct(HexAttributes.AMBIT_RADIUS)); - this.sentinelRadius = caster.getAttributeValue(Holder.direct(HexAttributes.SENTINEL_RADIUS)); + this.ambitRadius = caster.getAttributeValue(HexAttributes.AMBIT_RADIUS); + this.sentinelRadius = caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); } @Override @@ -73,11 +73,11 @@ public void postExecution(CastResult result) { } } if (this.caster != null){ - double ambitAttribute = this.caster.getAttributeValue(Holder.direct(HexAttributes.AMBIT_RADIUS)); + double ambitAttribute = this.caster.getAttributeValue(HexAttributes.AMBIT_RADIUS); if (this.ambitRadius != ambitAttribute){ this.ambitRadius = ambitAttribute; } - double sentinelAttribute = this.caster.getAttributeValue(Holder.direct(HexAttributes.SENTINEL_RADIUS)); + double sentinelAttribute = this.caster.getAttributeValue(HexAttributes.SENTINEL_RADIUS); if (this.sentinelRadius != sentinelAttribute){ this.sentinelRadius = sentinelAttribute; } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java index 287ea80391..1bc2a893a4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java @@ -11,15 +11,22 @@ import at.petrak.hexcasting.api.casting.mishaps.MishapUnescapedValue; import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.Codec; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; +import net.minecraft.nbt.NbtOps; +import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.ComponentSerialization; +import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.FormattedCharSequence; +import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Objects; import java.util.function.Supplier; public abstract class Iota { @@ -124,9 +131,14 @@ public static boolean tolerates(Iota a, Iota b) { return a.toleratesOther(b) || b.toleratesOther(a); } - /** - * Require overriding hashCode - */ @Override public abstract int hashCode(); + + @Override + public boolean equals(Object o) { + if(o instanceof Iota io) { + return tolerates(this, io); + } + return false; + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt b/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt index 3d825e44df..249adc092b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/client/ClientCastingStack.kt @@ -58,9 +58,4 @@ class ClientCastingStack { patterns.removeAll(toRemove) toRemove.clear() } - - fun interface Provider { - - fun provide(): ClientCastingStack - } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt index 8e3aee4052..b45e4923ac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt @@ -125,7 +125,7 @@ class GuiSpellcasting constructor( val player = minecraft.player if (player != null) { val heldItem = player.getItemInHand(handOpenedWith) - if (heldItem.isEmpty || !heldItem.`is`(HexTags.Items.STAVES) || player.getAttributeValue(Holder.direct(HexAttributes.FEEBLE_MIND)) > 0) + if (heldItem.isEmpty || !heldItem.`is`(HexTags.Items.STAVES) || player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0) closeForReal() } } @@ -495,7 +495,7 @@ class GuiSpellcasting constructor( /** Distance between adjacent hex centers */ fun hexSize(): Float { - val scaleModifier = Minecraft.getInstance().player!!.getAttributeValue(Holder.direct(HexAttributes.GRID_ZOOM)) + val scaleModifier = Minecraft.getInstance().player!!.getAttributeValue(HexAttributes.GRID_ZOOM) // Originally, we allowed 32 dots across. Assuming a 1920x1080 screen this allowed like 500-odd area. // Let's be generous and give them 512. diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java index a78383bbc5..29def93978 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java @@ -159,7 +159,7 @@ private static void tryRenderScryingLensOverlay(GuiGraphics graphics, float part return; } - if (player.getAttributeValue(Holder.direct(HexAttributes.SCRY_SIGHT)) <= 0.0 || player.getAttributeValue(Holder.direct(HexAttributes.FEEBLE_MIND)) > 0) + if (player.getAttributeValue(HexAttributes.SCRY_SIGHT) <= 0.0 || player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0) return; var hitRes = mc.hitResult; diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt b/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt index 73f9a3f44a..cc01757023 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt @@ -456,5 +456,4 @@ fun renderQuad( .setColor(color) buf.addVertex(mat, x + w, y, 0f) .setColor(color) - // TODO port: test rendering works } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpCanEntityHexFly.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpCanEntityHexFly.kt index 8e79bd84da..82d8202fbc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpCanEntityHexFly.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/queryentity/OpCanEntityHexFly.kt @@ -11,7 +11,7 @@ object OpCanEntityHexFly : ConstMediaAction { override val argc = 1 override fun execute(args: List, env: CastingEnvironment): List { - val player = args.getPlayer(0, argc) + val player = args.getPlayer(env.world, 0, argc) env.assertEntityInRange(player) val flightAbility = IXplatAbstractions.INSTANCE.getFlight(player) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpFlight.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpFlight.kt index 9258cc059e..82d5e87da3 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpFlight.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpFlight.kt @@ -31,7 +31,7 @@ class OpFlight(val type: Type) : SpellAction { args: List, env: CastingEnvironment ): SpellAction.Result { - val target = args.getPlayer(0, argc) + val target = args.getPlayer(env.world, 0, argc) val theArg = args.getPositiveDouble(1, argc) env.assertEntityInRange(target) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakeBattery.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakeBattery.kt index 5e86b23504..c21d8f5578 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakeBattery.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakeBattery.kt @@ -26,7 +26,7 @@ object OpMakeBattery : SpellAction { args: List, env: CastingEnvironment ): SpellAction.Result { - val entity = args.getItemEntity(0, argc) + val entity = args.getItemEntity(env.world, 0, argc) val (handStack, hand) = env.getHeldItemToOperateOn { it.`is`(HexTags.Items.PHIAL_BASE) } ?: throw MishapBadOffhandItem.of(ItemStack.EMPTY.copy(), "bottle") // TODO: hack diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt index c62d816844..11b8290ed1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpMakePackagedSpell.kt @@ -29,7 +29,7 @@ class OpMakePackagedSpell(val isValid: Predicate, val expectedTypeDes args: List, env: CastingEnvironment ): SpellAction.Result { - val entity = args.getItemEntity(0, argc) + val entity = args.getItemEntity(env.world, 0, argc) val patterns = args.getList(1, argc).toList() val (handStack) = env.getHeldItemToOperateOn { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt index 543053cfeb..fcca24ddf9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpPotionEffect.kt @@ -22,7 +22,7 @@ class OpPotionEffect( args: List, env: CastingEnvironment ): SpellAction.Result { - val target = args.getLivingEntityButNotArmorStand(0, argc) + val target = args.getLivingEntityButNotArmorStand(env.world, 0, argc) val duration = args.getPositiveDouble(1, argc) val potency = if (this.allowPotency) args.getDoubleBetween(2, 1.0, 127.0, argc) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpRecharge.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpRecharge.kt index 0b7fcb6dfd..b45191bc32 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpRecharge.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpRecharge.kt @@ -21,7 +21,7 @@ object OpRecharge : SpellAction { args: List, env: CastingEnvironment ): SpellAction.Result { - val entity = args.getItemEntity(0, argc) + val entity = args.getItemEntity(env.world, 0, argc) val (handStack) = env.getHeldItemToOperateOn { val media = IXplatAbstractions.INSTANCE.findMediaHolder(it) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpAltiora.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpAltiora.kt index 515518cadc..8d71bfba57 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpAltiora.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpAltiora.kt @@ -20,7 +20,7 @@ object OpAltiora : SpellAction { override val argc = 1 override fun execute(args: List, env: CastingEnvironment): SpellAction.Result { - val target = args.getPlayer(0, argc) + val target = args.getPlayer(env.world, 0, argc) env.assertEntityInRange(target) return SpellAction.Result( diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt index 5166795c0a..04dd9e80e1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/great/OpBrainsweep.kt @@ -35,7 +35,7 @@ object OpBrainsweep : SpellAction { args: List, env: CastingEnvironment ): SpellAction.Result { - val sacrifice = args.getMob(0, argc) + val sacrifice = args.getMob(env.world, 0, argc) val vecPos = args.getVec3(1, argc) val pos = BlockPos.containing(vecPos) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java index cce4e2bf9d..ec8e4249b5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java @@ -44,23 +44,23 @@ public ItemLens(Properties pProperties) { } @Override - public ItemAttributeModifiers getDefaultAttributeModifiers() { + public ItemAttributeModifiers getDefaultAttributeModifiers(ItemStack stack) { return ItemAttributeModifiers.builder() - .add(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM, EquipmentSlotGroup.HEAD) - .add(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM, EquipmentSlotGroup.MAINHAND) - .add(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM, EquipmentSlotGroup.OFFHAND) + .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.HEAD) + .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.MAINHAND) + .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.OFFHAND) - .add(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT, EquipmentSlotGroup.HEAD) - .add(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT, EquipmentSlotGroup.MAINHAND) - .add(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT, EquipmentSlotGroup.OFFHAND) + .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.HEAD) + .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.MAINHAND) + .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.OFFHAND) .build(); } @Override public Multimap, AttributeModifier> getHexBaubleAttrs(ItemStack stack) { HashMultimap, AttributeModifier> out = HashMultimap.create(); - out.put(Holder.direct(HexAttributes.GRID_ZOOM), GRID_ZOOM); - out.put(Holder.direct(HexAttributes.SCRY_SIGHT), SCRY_SIGHT); + out.put(HexAttributes.GRID_ZOOM, GRID_ZOOM); + out.put(HexAttributes.SCRY_SIGHT, SCRY_SIGHT); return out; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java index c9d4a6a42c..7fc41bdf3b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java @@ -28,7 +28,7 @@ public ItemStaff(Properties pProperties) { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand hand) { - if (player.getAttributeValue(Holder.direct(HexAttributes.FEEBLE_MIND)) > 0){ + if (player.getAttributeValue(HexAttributes.FEEBLE_MIND) > 0){ return InteractionResultHolder.fail(player.getItemInHand(hand)); } if (player.isShiftKeyDown()) { @@ -50,8 +50,6 @@ public InteractionResultHolder use(Level world, Player player, Intera CompoundTag ravenmind = null; if(userData.contains(HexAPI.RAVENMIND_USERDATA)) ravenmind = userData.getCompound(HexAPI.RAVENMIND_USERDATA); - else - ravenmind = new CompoundTag(); IXplatAbstractions.INSTANCE.sendPacketToPlayer(serverPlayer, new MsgOpenSpellGuiS2C(hand, patterns, vm.getImage().getStack(), ravenmind, diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java index 0bfb1bd2f1..76b3571686 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java @@ -21,12 +21,16 @@ import java.util.List; public class ItemAbacus extends Item implements IotaHolderItem { - public static final String TAG_VALUE = "value"; public ItemAbacus(Properties pProperties) { super(pProperties); } + @Override + public @Nullable Iota readIota(ItemStack stack) { + return new DoubleIota(stack.getOrDefault(HexDataComponents.ABACUS_VALUE, 0.0)); + } + @Override public boolean writeable(ItemStack stack) { return false; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java index 9949f9b184..600a9314c8 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java @@ -22,6 +22,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Stream; import static at.petrak.hexcasting.common.items.storage.ItemFocus.NUM_VARIANTS; @@ -89,13 +90,30 @@ public void inventoryTick(ItemStack stack, Level level, Entity pEntity, int pSlo int shiftedIdx = Math.max(1, index); String nameKey = String.valueOf(shiftedIdx); - var names = stack.getOrDefault(HexDataComponents.PAGE_NAMES, new HashMap()); - if (stack.has(DataComponents.CUSTOM_NAME)) { - names.put(nameKey, stack.getHoverName()); - stack.set(HexDataComponents.PAGE_NAMES, names); - } else { - names.remove(nameKey); - stack.set(HexDataComponents.PAGE_NAMES, names); + + var customName = stack.get(DataComponents.CUSTOM_NAME); + var savedNames = stack.get(HexDataComponents.PAGE_NAMES); + + if(customName != null) { + if(savedNames != null) { + if(!savedNames.containsKey(nameKey) || !savedNames.get(nameKey).equals(customName)) { + var mutNames = new HashMap<>(savedNames); + mutNames.put(nameKey, customName); + stack.set(HexDataComponents.PAGE_NAMES, mutNames); + } + } else { + var mutNames = new HashMap(); + mutNames.put(nameKey, customName); + stack.set(HexDataComponents.PAGE_NAMES, mutNames); + } + } else if(savedNames != null) { + var mutNames = new HashMap<>(savedNames); + mutNames.remove(nameKey); + if(mutNames.isEmpty()) { + stack.remove(HexDataComponents.PAGE_NAMES); + } else { + stack.set(HexDataComponents.PAGE_NAMES, mutNames); + } } } @@ -138,19 +156,30 @@ public void writeDatum(ItemStack stack, Iota datum) { var pages = stack.get(HexDataComponents.PAGES); if (pages != null) { + var pagesMut = new HashMap<>(pages); + if (datum == null) { - pages.remove(key); - stack.set(HexDataComponents.PAGES, pages); + pagesMut.remove(key); var seals = stack.get(HexDataComponents.PAGE_SEALS); - if(seals != null) - seals.remove(key); + if(seals != null) { + var sealsMut = new HashMap<>(seals); + + sealsMut.remove(key); + + if(sealsMut.isEmpty()) { + stack.remove(HexDataComponents.PAGE_SEALS); + } else { + stack.set(HexDataComponents.PAGE_SEALS, sealsMut); + } + } } else { - pages.put(key, datum); - stack.set(HexDataComponents.PAGES, pages); + pagesMut.put(key, datum); } - if (pages.isEmpty()) { + if (pagesMut.isEmpty()) { stack.remove(HexDataComponents.PAGES); + } else { + stack.set(HexDataComponents.PAGES, pagesMut); } } else if (datum != null) { var map = new HashMap(); @@ -158,8 +187,16 @@ public void writeDatum(ItemStack stack, Iota datum) { stack.set(HexDataComponents.PAGES, map); } else { var seals = stack.get(HexDataComponents.PAGE_SEALS); - if(seals != null) - seals.remove(key); + if(seals != null) { + var sealsMut = new HashMap<>(seals); + sealsMut.remove(key); + + if(sealsMut.isEmpty()) { + stack.remove(HexDataComponents.PAGE_SEALS); + } else { + stack.set(HexDataComponents.PAGE_SEALS, sealsMut); + } + } } } @@ -183,20 +220,22 @@ public static void setSealed(ItemStack stack, boolean sealed) { int index = getPage(stack, 1); String nameKey = String.valueOf(index); - var names = stack.getOrDefault(HexDataComponents.PAGE_SEALS, new HashMap()); + + var seals = stack.get(HexDataComponents.PAGE_SEALS); + + var sealsMut = seals != null ? new HashMap<>(seals) : new HashMap(); if (!sealed) { - names.remove(nameKey); + sealsMut.remove(nameKey); } else { - names.put(nameKey, true); + sealsMut.put(nameKey, true); } - if (names.isEmpty()) { + if (sealsMut.isEmpty()) { stack.remove(HexDataComponents.PAGE_SEALS); } else { - stack.set(HexDataComponents.PAGE_SEALS, names); + stack.set(HexDataComponents.PAGE_SEALS, sealsMut); } - } public static boolean isSealed(ItemStack stack) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java index 097c305ad9..707ec6544c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexAttributes.java @@ -1,62 +1,43 @@ package at.petrak.hexcasting.common.lib; -import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.casting.eval.env.PlayerBasedCastEnv; -import net.minecraft.resources.ResourceLocation; +import at.petrak.hexcasting.xplat.IXplatAbstractions; +import at.petrak.hexcasting.xplat.IXplatRegister; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.RangedAttribute; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.function.BiConsumer; +import static at.petrak.hexcasting.api.HexAPI.MOD_ID; -import static at.petrak.hexcasting.api.HexAPI.modLoc; - -/** - * On forge: these are setup in ForgeHexInit - * On fabric: it's a mixin - */ public class HexAttributes { - public static void register(BiConsumer r) { - for (var e : ATTRIBUTES.entrySet()) { - r.accept(e.getValue(), e.getKey()); - } - } + private static final IXplatRegister REGISTER = IXplatAbstractions.INSTANCE + .createRegistar(Registries.ATTRIBUTE); - private static final Map ATTRIBUTES = new LinkedHashMap<>(); - - private static final String MOD_ID = HexAPI.MOD_ID; + public static void register() { + REGISTER.registerAll(); + } - public static final Attribute GRID_ZOOM = make("grid_zoom", new RangedAttribute( - MOD_ID + ".attributes.grid_zoom", 1.0, 0.5, 4.0)).setSyncable(true); + public static final Holder GRID_ZOOM = REGISTER.registerHolder("grid_zoom", () -> new RangedAttribute( + MOD_ID + ".attributes.grid_zoom", 1.0, 0.5, 4.0).setSyncable(true)); /** * Whether you have the lens overlay when looking at something. 0 = no, > 0 = yes. */ - public static final Attribute SCRY_SIGHT = make("scry_sight", new RangedAttribute( - MOD_ID + ".attributes.scry_sight", 0.0, 0.0, 1.0)).setSyncable(true); + public static final Holder SCRY_SIGHT = REGISTER.registerHolder("scry_sight", () -> new RangedAttribute( + MOD_ID + ".attributes.scry_sight", 0.0, 0.0, 1.0).setSyncable(true)); //whether the player is allowed to use staffcasting and scrying lenses - public static final Attribute FEEBLE_MIND = make("feeble_mind", new RangedAttribute( + public static final Holder FEEBLE_MIND = REGISTER.registerHolder("feeble_mind", () -> new RangedAttribute( MOD_ID + ".attributes.feeble_mind", 0.0, 0.0, 1.0).setSyncable(true)); //a multiplier to adjust media consumption across the board - public static final Attribute MEDIA_CONSUMPTION_MODIFIER = make("media_consumption", new RangedAttribute( + public static final Holder MEDIA_CONSUMPTION_MODIFIER = REGISTER.registerHolder("media_consumption", () -> new RangedAttribute( MOD_ID + ".attributes.media_consumption", 1.0, 0.0, Double.MAX_VALUE).setSyncable(true)); - public static final Attribute AMBIT_RADIUS = make("ambit_radius", new RangedAttribute( + public static final Holder AMBIT_RADIUS = REGISTER.registerHolder("ambit_radius", () -> new RangedAttribute( MOD_ID + ".attributes.ambit_radius", PlayerBasedCastEnv.DEFAULT_AMBIT_RADIUS, 0.0, Double.MAX_VALUE).setSyncable(true)); - public static final Attribute SENTINEL_RADIUS = make("sentinel_radius", new RangedAttribute( + public static final Holder SENTINEL_RADIUS = REGISTER.registerHolder("sentinel_radius", () -> new RangedAttribute( MOD_ID + ".attributes.sentinel_radius", PlayerBasedCastEnv.DEFAULT_SENTINEL_RADIUS, 0.0, Double.MAX_VALUE).setSyncable(true)); - - - - private static T make(String id, T attr) { - var old = ATTRIBUTES.put(modLoc(id), attr); - if (old != null) { - throw new IllegalArgumentException("Typo? Duplicate id " + id); - } - return attr; - } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java index 3f5e4e3f8e..86ae60c3fe 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java @@ -190,7 +190,7 @@ private static BlockBehaviour.Properties quenched() { public static final BlockAkashicBookshelf AKASHIC_BOOKSHELF = blockItem("akashic_bookshelf", new BlockAkashicBookshelf(akashicWoodyHard() .lightLevel(bs -> (bs.getValue(BlockAkashicBookshelf.HAS_BOOKS)) ? 4 : 0))); - public static final BlockAkashicLigature AKASHIC_LIGATURE = blockItem("akashic_ligature", + public static final BlockAkashicLigature AKASHIC_LIGATURE = blockItem("akashic_connector", new BlockAkashicLigature(akashicWoodyHard().lightLevel(bs -> 4))); public static final BlockQuenchedAllay QUENCHED_ALLAY = blockItem("quenched_allay", new BlockQuenchedAllay(quenched())); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java index 07c1a08bcd..58a521e32d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java @@ -21,11 +21,10 @@ public static void registerCreativeTabs(BiConsumer TABS = new LinkedHashMap<>(); - public static final CreativeModeTab HEX = register("hexcasting", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) + public static final CreativeModeTab HEX = register("hexcasting", CreativeModeTab.builder() .icon(() -> new ItemStack(HexItems.SPELLBOOK))); - // TODO port: check creative tab icon display - public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 7) + public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder() .icon(() -> new ItemStack(HexItems.SCROLL_LARGE))); private static CreativeModeTab register(String name, CreativeModeTab.Builder tabBuilder) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java index 2f476ef1ef..d9a3f6cf1b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java @@ -25,11 +25,11 @@ public static void register(BiConsumer r) { public static final MobEffect ENLARGE_GRID = make("enlarge_grid", new HexMobEffect(MobEffectCategory.BENEFICIAL, 0xc875ff)) - .addAttributeModifier(Holder.direct(HexAttributes.GRID_ZOOM), HexAPI.modLoc("enlarge_grid"), + .addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("enlarge_grid"), 0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); public static final MobEffect SHRINK_GRID = make("shrink_grid", new HexMobEffect(MobEffectCategory.HARMFUL, 0xc0e660)) - .addAttributeModifier(Holder.direct(HexAttributes.GRID_ZOOM), HexAPI.modLoc("shrink_grid"), + .addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("shrink_grid"), -0.2, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java index 91145ee691..11ed7f7dcb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java @@ -5,10 +5,10 @@ import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.item.Items; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.item.alchemy.PotionBrewing; import net.minecraft.world.item.alchemy.Potions; -import net.minecraft.world.item.Items; import java.util.LinkedHashMap; import java.util.Map; @@ -33,6 +33,12 @@ public class HexPotions { public static final Potion SHRINK_GRID_STRONG = make("shrink_grid_strong", new Potion("shrink_grid_strong", new MobEffectInstance(Holder.direct(HexMobEffects.SHRINK_GRID), 1800, 1))); + public static void registerPotions(BiConsumer r) { + for (var e : POTIONS.entrySet()) { + r.accept(e.getValue(), e.getKey()); + } + } + public static void addRecipes(PotionBrewing.Builder builder, RegistryAccess registryAccess) { var potionRegistry = registryAccess.registryOrThrow(Registries.POTION); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java index be0851967a..9ea3f26bec 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexRegistries.java @@ -6,7 +6,7 @@ import at.petrak.hexcasting.api.casting.eval.sideeffects.EvalSound; import at.petrak.hexcasting.api.casting.eval.vm.ContinuationFrame; import at.petrak.hexcasting.api.casting.iota.IotaType; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientType; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredientType; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java index 5b5d77fdcb..f50ed7d26d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java @@ -17,8 +17,10 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.ExtraCodecs; import net.minecraft.world.InteractionHand; +import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Optional; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -27,6 +29,7 @@ */ public record MsgOpenSpellGuiS2C(InteractionHand hand, List patterns, List stack, + @Nullable CompoundTag ravenmind, int parenCount ) @@ -40,7 +43,10 @@ public record MsgOpenSpellGuiS2C(InteractionHand hand, List pat ), MsgOpenSpellGuiS2C::hand, ResolvedPattern.STREAM_CODEC.apply(ByteBufCodecs.list()), MsgOpenSpellGuiS2C::patterns, IotaType.TYPED_STREAM_CODEC.apply(ByteBufCodecs.list()), MsgOpenSpellGuiS2C::stack, - ByteBufCodecs.COMPOUND_TAG, MsgOpenSpellGuiS2C::ravenmind, + ByteBufCodecs.optional(ByteBufCodecs.COMPOUND_TAG).map( + opt -> opt.orElse(null), + Optional::ofNullable + ), MsgOpenSpellGuiS2C::ravenmind, ByteBufCodecs.VAR_INT, MsgOpenSpellGuiS2C::parenCount, MsgOpenSpellGuiS2C::new ); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java index e989dcbe6e..e6e00fb988 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java @@ -1,23 +1,18 @@ package at.petrak.hexcasting.common.recipe; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredients; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredient; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredients; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredients; -import com.google.gson.JsonObject; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.HolderLookup; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.GsonHelper; import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.ai.Brain; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeInput; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java index d1e4674fe7..7ad77853aa 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java @@ -2,12 +2,9 @@ import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.common.lib.HexRegistries; -import at.petrak.hexcasting.common.recipe.ingredient.*; import at.petrak.hexcasting.xplat.IXplatAbstractions; -import com.google.gson.JsonObject; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.codec.ByteBufCodecs; @@ -19,14 +16,10 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.npc.VillagerProfession; import net.minecraft.world.entity.npc.VillagerType; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; import java.util.List; -import java.util.Random; import java.util.function.BiConsumer; public class BrainsweepeeIngredients { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredient.java similarity index 86% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredient.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredient.java index ff86ad8923..464e703d09 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredient.java @@ -1,8 +1,6 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; -import com.google.gson.JsonObject; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlock.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlock.java similarity index 97% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlock.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlock.java index c3b0f9aae1..cfb1209cd5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlock.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlock.java @@ -1,4 +1,4 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlockState.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlockState.java similarity index 98% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlockState.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlockState.java index 61066ff647..7a01d09e47 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlockState.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlockState.java @@ -1,4 +1,4 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlocks.java similarity index 94% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlocks.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlocks.java index d203fd8fc9..4f828e2f13 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientBlocks.java @@ -1,14 +1,10 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; import com.google.common.collect.ImmutableSet; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; -import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTag.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientTag.java similarity index 94% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTag.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientTag.java index 8e1d4f3c43..dac2e84b3b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTag.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientTag.java @@ -1,15 +1,12 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; import com.google.common.collect.ImmutableSet; -import com.google.gson.JsonObject; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.core.Holder; -import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTagExcluding.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientTagExcluding.java similarity index 98% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTagExcluding.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientTagExcluding.java index 3a98e24de3..2a08f605be 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientTagExcluding.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientTagExcluding.java @@ -1,4 +1,4 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientType.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientType.java similarity index 83% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientType.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientType.java index 33d0ecfd8b..da8a3ed7b7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredientType.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredientType.java @@ -1,4 +1,4 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; import com.mojang.serialization.MapCodec; import net.minecraft.network.RegistryFriendlyByteBuf; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredients.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredients.java similarity index 98% rename from Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredients.java rename to Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredients.java index 6c39c20f24..9c7ed400de 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/StateIngredients.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/state/StateIngredients.java @@ -1,4 +1,4 @@ -package at.petrak.hexcasting.common.recipe.ingredient; +package at.petrak.hexcasting.common.recipe.ingredient.state; import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.common.lib.HexRegistries; diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java index 3952657bfe..3e04446993 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/HexplatRecipes.java @@ -10,26 +10,21 @@ import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.recipe.SealThingsRecipe; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredients; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredients; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.EntityTypeIngredient; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.VillagerIngredient; import at.petrak.hexcasting.datagen.HexAdvancements; import at.petrak.hexcasting.datagen.IXplatConditionsBuilder; import at.petrak.hexcasting.datagen.IXplatIngredients; import at.petrak.hexcasting.datagen.recipe.builders.BrainsweepRecipeBuilder; -import at.petrak.hexcasting.datagen.recipe.builders.CompatIngredientValue; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.advancements.Criterion; -import net.minecraft.advancements.CriterionTriggerInstance; import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.advancements.critereon.ItemPredicate; -import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.PackOutput; import net.minecraft.data.recipes.*; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.Resource; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; @@ -48,7 +43,6 @@ import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.function.Function; -import java.util.function.Supplier; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -444,50 +438,50 @@ public void buildRecipes(RecipeOutput recipes) { new VillagerIngredient(null, null, 3), Blocks.BUDDING_AMETHYST.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/budding_amethyst")); + .save(recipes, modLoc("budding_amethyst")); new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.IMPETUS_EMPTY), new VillagerIngredient(VillagerProfession.TOOLSMITH, null, 2), HexBlocks.IMPETUS_RIGHTCLICK.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/impetus_rightclick")); + .save(recipes, modLoc("impetus_rightclick")); new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.IMPETUS_EMPTY), new VillagerIngredient(VillagerProfession.FLETCHER, null, 2), HexBlocks.IMPETUS_LOOK.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/impetus_look")); + .save(recipes, modLoc("impetus_look")); new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.IMPETUS_EMPTY), new VillagerIngredient(VillagerProfession.CLERIC, null, 2), HexBlocks.IMPETUS_REDSTONE.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/impetus_storedplayer")); + .save(recipes, modLoc("impetus_storedplayer")); new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.EMPTY_DIRECTRIX), new VillagerIngredient(VillagerProfession.MASON, null, 1), HexBlocks.DIRECTRIX_REDSTONE.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/directrix_redstone")); + .save(recipes, modLoc("directrix_redstone")); new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.EMPTY_DIRECTRIX), new VillagerIngredient(VillagerProfession.SHEPHERD, null, 1), HexBlocks.DIRECTRIX_BOOLEAN.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/directrix_boolean")); + .save(recipes, modLoc("directrix_boolean")); new BrainsweepRecipeBuilder(StateIngredients.of(HexBlocks.AKASHIC_LIGATURE), new VillagerIngredient(VillagerProfession.LIBRARIAN, null, 5), HexBlocks.AKASHIC_RECORD.defaultBlockState(), MediaConstants.CRYSTAL_UNIT * 10) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/akashic_record")); + .save(recipes, modLoc("akashic_record")); // Temporary tests new BrainsweepRecipeBuilder(StateIngredients.of(Blocks.AMETHYST_BLOCK), new EntityTypeIngredient(EntityType.ALLAY), HexBlocks.QUENCHED_ALLAY.defaultBlockState(), MediaConstants.CRYSTAL_UNIT) .unlockedBy("enlightenment", new Criterion<>(HexAdvancementTriggers.OVERCAST_TRIGGER, enlightenment)) - .save(recipes, modLoc("brainsweep/quench_allay")); + .save(recipes, modLoc("quench_allay")); // Create compat /*this.conditions.apply(new CreateCrushingRecipeBuilder() diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java index 8b243f229d..d1ffa3df38 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/recipe/builders/BrainsweepRecipeBuilder.java @@ -1,7 +1,7 @@ package at.petrak.hexcasting.datagen.recipe.builders; import at.petrak.hexcasting.common.recipe.BrainsweepRecipe; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredient; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; import net.minecraft.advancements.Advancement; import net.minecraft.advancements.AdvancementRequirements; @@ -59,6 +59,6 @@ public void save(RecipeOutput recipeOutput, ResourceLocation id) { this.criteria.forEach(advancement::addCriterion); var recipe = new BrainsweepRecipe(blockIn, entityIn, mediaCost, result); - recipeOutput.accept(id.withPrefix("recipes/brainsweep/"), recipe, advancement.build(id.withPrefix("recipes/"))); + recipeOutput.accept(id.withPrefix("brainsweep/"), recipe, advancement.build(id.withPrefix("recipes/brainsweep/"))); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java index 4741f0c466..37e02355f0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/patchouli/CustomComponentTooltip.java @@ -45,5 +45,6 @@ public void render(GuiGraphics graphics, IComponentRenderContext context, float @Override public void onVariablesAvailable(UnaryOperator lookup, HolderLookup.Provider registries) { tooltipVar = lookup.apply(tooltipReference); + this.registries = registries; } } diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java index d0bb2c0469..fc95829842 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java @@ -19,18 +19,16 @@ import at.petrak.hexcasting.api.player.AltioraAbility; import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.player.Sentinel; -import at.petrak.hexcasting.common.msgs.IMessage; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientType; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredientType; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; import com.mojang.authlib.GameProfile; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.common.ClientCommonPacketListener; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.resources.ResourceKey; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; @@ -192,6 +190,8 @@ BlockEntityType createBlockEntityType(BiFunction IXplatRegister createRegistar(ResourceKey> registryKey); + // interop PehkuiInterop.ApiAbstraction getPehkuiApi(); diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatRegister.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatRegister.java new file mode 100644 index 0000000000..76d9091fd6 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatRegister.java @@ -0,0 +1,21 @@ +package at.petrak.hexcasting.xplat; + +import net.minecraft.core.Holder; + +import java.util.function.Supplier; + +/** + * Handles registration + * @param + */ +public interface IXplatRegister { + + Supplier register(String id, Supplier provider); + + Holder registerHolder(String id, Supplier provider); + + /** + * Call from mod initializer to actually register all entries in this register + */ + void registerAll(); +} \ No newline at end of file diff --git a/Common/src/main/resources/hexplat.mixins.json b/Common/src/main/resources/hexplat.mixins.json index bbc3836c0f..39a6da0bd1 100644 --- a/Common/src/main/resources/hexplat.mixins.json +++ b/Common/src/main/resources/hexplat.mixins.json @@ -12,14 +12,11 @@ "MixinWanderingTrader", "MixinWitch", "accessor.AccessorAbstractArrow", - "accessor.AccessorDamageSource", "accessor.AccessorEntity", "accessor.AccessorLivingEntity", "accessor.AccessorLootTable", - "accessor.AccessorPotionBrewing", "accessor.AccessorUseOnContext", - "accessor.AccessorVillager", - "accessor.CriteriaTriggersAccessor" + "accessor.AccessorVillager" ], "client": [ "accessor.client.AccessorBlockEntityRenderDispatcher", diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java index ebfa19737b..f159d4969a 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java @@ -1,5 +1,6 @@ package at.petrak.hexcasting.forge; +import at.petrak.hexcasting.api.client.ClientCastingStack; import at.petrak.hexcasting.client.ClientTickCounter; import at.petrak.hexcasting.client.RegisterClientStuff; import at.petrak.hexcasting.client.ShiftScrollListener; @@ -11,6 +12,7 @@ import at.petrak.hexcasting.common.casting.PatternRegistryManifest; import at.petrak.hexcasting.common.lib.HexParticles; import at.petrak.hexcasting.common.misc.PatternTooltip; +import at.petrak.hexcasting.forge.lib.ForgeHexAttachments; import at.petrak.hexcasting.interop.HexInterop; import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; @@ -27,6 +29,7 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.event.tick.PlayerTickEvent; import java.io.IOException; import java.util.function.Function; @@ -78,6 +81,12 @@ public static void clientInit(FMLClientSetupEvent evt) { e.setCanceled(cancel); }); + evBus.addListener((PlayerTickEvent.Pre ev) -> { + if(!ev.getEntity().isDeadOrDying()) { + ev.getEntity().getData(ForgeHexAttachments.CLIENT_CASTING_STACK).tick(); + } + }); + HexInterop.clientInit(); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index f598754ff5..53128fdf48 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -13,30 +13,23 @@ import at.petrak.hexcasting.common.items.ItemJewelerHammer; import at.petrak.hexcasting.common.lib.*; import at.petrak.hexcasting.common.lib.hex.*; -import at.petrak.hexcasting.common.misc.AkashicTreeGrower; -import at.petrak.hexcasting.common.misc.BrainsweepingEvents; -import at.petrak.hexcasting.common.misc.PlayerPositionRecorder; -import at.petrak.hexcasting.common.misc.RegisterMisc; +import at.petrak.hexcasting.common.misc.*; import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredients; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredients; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredients; import at.petrak.hexcasting.forge.cap.CapSyncers; import at.petrak.hexcasting.forge.cap.ForgeCapabilityHandler; -import at.petrak.hexcasting.forge.cap.adimpl.CapClientCastingStack; import at.petrak.hexcasting.forge.datagen.ForgeHexDataGenerators; import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; import at.petrak.hexcasting.forge.interop.curios.CuriosRenderers; import at.petrak.hexcasting.forge.lib.ForgeHexArgumentTypeRegistry; +import at.petrak.hexcasting.forge.lib.ForgeHexAttachments; import at.petrak.hexcasting.forge.lib.ForgeHexIngredientTypes; import at.petrak.hexcasting.forge.lib.ForgeHexLootMods; import at.petrak.hexcasting.forge.network.ForgePacketHandler; import at.petrak.hexcasting.forge.network.MsgBrainsweepAck; -import at.petrak.hexcasting.forge.recipe.ForgeModConditionalIngredient; -import at.petrak.hexcasting.forge.recipe.ForgeUnsealedIngredient; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; -import net.minecraft.core.Holder; -import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; @@ -47,15 +40,12 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockSetType; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModList; -import net.neoforged.fml.ModLoadingContext; import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; @@ -133,8 +123,10 @@ private static void initRegistry() { bind(Registries.RECIPE_TYPE, HexRecipeStuffRegistry::registerTypes); bind(Registries.ENTITY_TYPE, HexEntities::registerEntities); - bind(Registries.ATTRIBUTE, HexAttributes::register); + // Testing out new registration system + HexAttributes.register(); bind(Registries.MOB_EFFECT, HexMobEffects::register); + bind(Registries.POTION, HexPotions::registerPotions); bind(Registries.PARTICLE_TYPE, HexParticles::registerParticles); bind(Registries.TRIGGER_TYPE, HexAdvancementTriggers::registerTriggers); @@ -151,6 +143,7 @@ private static void initRegistry() { ForgeHexArgumentTypeRegistry.ARGUMENT_TYPES.register(getModEventBus()); ForgeHexLootMods.REGISTRY.register(getModEventBus()); ForgeHexIngredientTypes.INGREDIENT_TYPES.register(getModEventBus()); + ForgeHexAttachments.register(); RegisterMisc.register(); } @@ -160,9 +153,6 @@ private static void bind(ResourceKey> registry, Consum getModEventBus().addListener((RegisterEvent event) -> { if (registry.equals(event.getRegistryKey())) { source.accept((t, rl) -> { - if(t == null) - System.out.println("OBJ " + rl + " is null! (" + registry + ")"); - event.register(registry, rl, () -> t); }); } @@ -208,8 +198,6 @@ private static void initListeners() { } }); - evBus.register(CapClientCastingStack.class); - evBus.addListener((PlayerInteractEvent.EntityInteract evt) -> { var res = BrainsweepingEvents.interactWithBrainswept( evt.getEntity(), evt.getLevel(), evt.getHand(), evt.getTarget(), null); @@ -283,12 +271,12 @@ private static void initListeners() { evBus.register(CapSyncers.class); modBus.addListener((EntityAttributeModificationEvent e) -> { - e.add(EntityType.PLAYER, Holder.direct(HexAttributes.GRID_ZOOM)); - e.add(EntityType.PLAYER, Holder.direct(HexAttributes.SCRY_SIGHT)); - e.add(EntityType.PLAYER, Holder.direct(HexAttributes.FEEBLE_MIND)); - e.add(EntityType.PLAYER, Holder.direct(HexAttributes.MEDIA_CONSUMPTION_MODIFIER)); - e.add(EntityType.PLAYER, Holder.direct(HexAttributes.AMBIT_RADIUS)); - e.add(EntityType.PLAYER, Holder.direct(HexAttributes.SENTINEL_RADIUS)); + e.add(EntityType.PLAYER, HexAttributes.GRID_ZOOM); + e.add(EntityType.PLAYER, HexAttributes.SCRY_SIGHT); + e.add(EntityType.PLAYER, HexAttributes.FEEBLE_MIND); + e.add(EntityType.PLAYER, HexAttributes.MEDIA_CONSUMPTION_MODIFIER); + e.add(EntityType.PLAYER, HexAttributes.AMBIT_RADIUS); + e.add(EntityType.PLAYER, HexAttributes.SENTINEL_RADIUS); }); if (ModList.get().isLoaded(HexInterop.Forge.CURIOS_API_ID)) { @@ -299,7 +287,7 @@ private static void initListeners() { } // aaaauughhg - private static IEventBus getModEventBus() { + public static IEventBus getModEventBus() { return KotlinModLoadingContext.Companion.get().getKEventBus(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java index d29734c196..fe9bdc42ff 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java @@ -46,7 +46,6 @@ public static void registerCaps(RegisterCapabilitiesEvent evt) { CuriosApiInterop.registerCap(evt, item); } - // TODO port: amethyst is static, holders aren't. Modifiable media amount. UPD: I don't remember why I left that comment evt.registerItem( HexCapabilities.Item.MEDIA, (stack, ctx) -> new CapStaticMediaHolder(HexConfig.common()::dustMediaAmount, ADMediaHolder.AMETHYST_DUST_PRIORITY, stack), @@ -95,13 +94,7 @@ public static void registerCaps(RegisterCapabilitiesEvent evt) { HexEntities.WALL_SCROLL, (ent, ctx) -> new ItemDelegatingEntityIotaHolder.ToWallScroll(ent) ); - evt.registerEntity( - HexCapabilities.Entity.CLIENT_CASTING_STACK, - EntityType.PLAYER, - (player, ctx) -> new CapClientCastingStack(player, new ClientCastingStack()) - ); - // TODO port: maybe use tag or impetus registry for(Block block : BuiltInRegistries.BLOCK) { if(block instanceof BlockAbstractImpetus imBlock) { evt.registerBlockEntity( diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java index 89121c0f8d..7856cabc5c 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java @@ -1,12 +1,9 @@ package at.petrak.hexcasting.forge.cap; import at.petrak.hexcasting.api.addldata.*; -import at.petrak.hexcasting.api.client.ClientCastingStack; import net.neoforged.neoforge.capabilities.EntityCapability; import net.neoforged.neoforge.capabilities.ItemCapability; -import java.util.function.Supplier; - import static at.petrak.hexcasting.api.HexAPI.modLoc; public final class HexCapabilities { @@ -25,6 +22,5 @@ public static final class Entity { public static final EntityCapability STORED_HEX = EntityCapability.createVoid(modLoc("hex_holder"), ADHexHolder.class); public static final EntityCapability VARIANT_ITEM = EntityCapability.createVoid(modLoc("variant"), ADVariantItem.class); public static final EntityCapability COLOR = EntityCapability.createVoid(modLoc("color"), ADPigment.class); - public static final EntityCapability CLIENT_CASTING_STACK = EntityCapability.createVoid(modLoc("client_casting"), ClientCastingStack.Provider.class); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java deleted file mode 100644 index 3895a724aa..0000000000 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java +++ /dev/null @@ -1,27 +0,0 @@ -package at.petrak.hexcasting.forge.cap.adimpl; - -import at.petrak.hexcasting.api.client.ClientCastingStack; -import at.petrak.hexcasting.forge.cap.HexCapabilities; -import net.minecraft.world.entity.player.Player; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.event.tick.PlayerTickEvent; -import org.jetbrains.annotations.NotNull; - -import java.util.function.Supplier; - -public record CapClientCastingStack(Player player, ClientCastingStack clientCastingStack) implements ClientCastingStack.Provider { - - @Override - public @NotNull ClientCastingStack provide() { - return clientCastingStack; - } - - @SubscribeEvent - public static void tickClientPlayer(PlayerTickEvent.Pre evt) { - if (evt.getEntity().level().isClientSide() && !evt.getEntity().isDeadOrDying()) { - var clientStack = evt.getEntity().getCapability(HexCapabilities.Entity.CLIENT_CASTING_STACK); - if(clientStack != null) - clientStack.provide().tick(); - } - } -} diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexAttachments.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexAttachments.java new file mode 100644 index 0000000000..ce096c70bd --- /dev/null +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexAttachments.java @@ -0,0 +1,23 @@ +package at.petrak.hexcasting.forge.lib; + +import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.api.client.ClientCastingStack; +import at.petrak.hexcasting.forge.ForgeHexInitializer; +import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; + +import java.util.function.Supplier; + +public class ForgeHexAttachments { + private static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create(NeoForgeRegistries.ATTACHMENT_TYPES, HexAPI.MOD_ID); + + // TODO port: maybe make client-side only? + public static final Supplier> CLIENT_CASTING_STACK = ATTACHMENT_TYPES.register( + "casting_stack", () -> AttachmentType.builder(ClientCastingStack::new).build() + ); + + public static void register() { + ATTACHMENT_TYPES.register(ForgeHexInitializer.getModEventBus()); + } +} diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java index 4338e18751..e4361c7bce 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/lib/ForgeHexIngredientTypes.java @@ -1,9 +1,16 @@ package at.petrak.hexcasting.forge.lib; import at.petrak.hexcasting.api.HexAPI; +import at.petrak.hexcasting.forge.loot.ForgeHexAmethystLootMod; +import at.petrak.hexcasting.forge.loot.ForgeHexCypherLootMod; +import at.petrak.hexcasting.forge.loot.ForgeHexLoreLootMod; +import at.petrak.hexcasting.forge.loot.ForgeHexScrollLootMod; import at.petrak.hexcasting.forge.recipe.ForgeModConditionalIngredient; import at.petrak.hexcasting.forge.recipe.ForgeUnsealedIngredient; +import com.mojang.serialization.MapCodec; import net.neoforged.neoforge.common.crafting.IngredientType; +import net.neoforged.neoforge.common.loot.IGlobalLootModifier; +import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.NeoForgeRegistries; diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java index 9dc21cbd25..0419b3c49a 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java @@ -1,9 +1,7 @@ package at.petrak.hexcasting.forge.xplat; import at.petrak.hexcasting.api.client.ClientCastingStack; -import at.petrak.hexcasting.common.msgs.IMessage; -import at.petrak.hexcasting.forge.cap.HexCapabilities; -import at.petrak.hexcasting.forge.network.ForgePacketHandler; +import at.petrak.hexcasting.forge.lib.ForgeHexAttachments; import at.petrak.hexcasting.xplat.IClientXplatAbstractions; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; @@ -51,10 +49,7 @@ public void registerItemProperty(Item item, ResourceLocation id, ItemPropertyFun @Override public ClientCastingStack getClientCastingStack(Player player) { - var clientCastingStack = player.getCapability(HexCapabilities.Entity.CLIENT_CASTING_STACK); - if (clientCastingStack == null) - return new ClientCastingStack(); // lie - return clientCastingStack.provide(); + return player.getData(ForgeHexAttachments.CLIENT_CASTING_STACK); } @Override diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeRegister.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeRegister.java new file mode 100644 index 0000000000..b4c7dd9f0e --- /dev/null +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeRegister.java @@ -0,0 +1,31 @@ +package at.petrak.hexcasting.forge.xplat; + +import at.petrak.hexcasting.forge.ForgeHexInitializer; +import at.petrak.hexcasting.xplat.IXplatRegister; +import net.minecraft.core.Holder; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +public class ForgeRegister implements IXplatRegister { + private final DeferredRegister register; + + public ForgeRegister(DeferredRegister register) { + this.register = register; + } + + @Override + public void registerAll() { + register.register(ForgeHexInitializer.getModEventBus()); + } + + @Override + public Supplier register(String id, Supplier provider) { + return register.register(id, provider); + } + + @Override + public Holder registerHolder(String id, Supplier provider) { + return register.register(id, provider); + } +} diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java index 90f6a2d320..9410eecac3 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java @@ -1,5 +1,6 @@ package at.petrak.hexcasting.forge.xplat; +import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.addldata.ADHexHolder; import at.petrak.hexcasting.api.addldata.ADIotaHolder; import at.petrak.hexcasting.api.addldata.ADMediaHolder; @@ -22,7 +23,7 @@ import at.petrak.hexcasting.api.player.Sentinel; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.HexRegistries; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientType; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredientType; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import at.petrak.hexcasting.forge.cap.CapSyncers; import at.petrak.hexcasting.forge.cap.HexCapabilities; @@ -32,6 +33,7 @@ import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import at.petrak.hexcasting.xplat.IXplatRegister; import at.petrak.hexcasting.xplat.IXplatTags; import at.petrak.hexcasting.xplat.Platform; import com.illusivesoulworks.caelus.api.CaelusApi; @@ -84,6 +86,7 @@ import net.neoforged.neoforge.fluids.FluidUtil; import net.neoforged.neoforge.fluids.capability.IFluidHandler; import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.RegistryBuilder; import org.jetbrains.annotations.Nullable; import virtuoel.pehkui.api.ScaleTypes; @@ -95,6 +98,12 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public class ForgeXplatImpl implements IXplatAbstractions { + + @Override + public IXplatRegister createRegistar(ResourceKey> registryKey) { + return new ForgeRegister<>(DeferredRegister.create(registryKey, HexAPI.MOD_ID)); + } + @Override public Platform platform() { return Platform.FORGE; diff --git a/Neoforge/src/main/resources/hexcasting_forge.mixins.json b/Neoforge/src/main/resources/hexcasting_forge.mixins.json index 3a50c75493..d05981caff 100644 --- a/Neoforge/src/main/resources/hexcasting_forge.mixins.json +++ b/Neoforge/src/main/resources/hexcasting_forge.mixins.json @@ -5,7 +5,6 @@ "refmap": "hexcasting.mixins.refmap.json", "package": "at.petrak.hexcasting.forge.mixin", "mixins": [ - "ForgeAccessorBuiltInRegistries", "ForgeMixinCursedRecipeSerializerBase", "ForgeMixinTagsProvider" ], From 9f1e2f0f32fd70b58917d5c433123707cd9d9cde Mon Sep 17 00:00:00 2001 From: slava110 Date: Wed, 18 Jun 2025 06:05:22 +0300 Subject: [PATCH 51/81] Bumped Java version on workflow from 17 to 21 --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c34eed7e43..c30d27f7d3 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -11,7 +11,7 @@ on: branches: main env: - JAVA_VERSION: '17.0.1' + JAVA_VERSION: '21.0.5' jobs: build: From 87e9ab1b4b50ea461e043e361f60c69378106536 Mon Sep 17 00:00:00 2001 From: slava110 Date: Wed, 18 Jun 2025 06:46:38 +0300 Subject: [PATCH 52/81] Fix resources --- .../thehexbook/en_us/entries/greatwork/akashiclib.json | 2 +- .../thehexbook/en_us/entries/items/ancient_cyphers.json | 2 +- .../thehexbook/en_us/entries/items/hexcasting.json | 2 +- .../thehexbook/en_us/entries/items/phials.json | 2 +- .../thehexbook/en_us/entries/items/potions.json | 4 ++-- .../en_us/entries/patterns/great_spells/make_battery.json | 2 +- .../en_us/entries/patterns/great_spells/zeniths.json | 2 +- .../en_us/entries/patterns/spells/hexcasting.json | 2 +- .../thehexbook/en_us/entries/patterns/spells/nadirs.json | 2 +- .../{advancements => advancement}/grant_patchi_book.json | 0 .../amethyst_shard_reducer.json | 0 .../{loot_tables => loot_table}/grant_patchi_book.json | 0 .../data/hexcasting/{recipes => recipe}/patchi_book.json | 0 .../{entity_types => entity_type}/cannot_teleport.json | 0 .../{entity_types => entity_type}/sticky_teleporters.json | 0 .../tags/{items => item}/cluster_max_harvestables.json | 0 .../resources/data/curios/tags/{items => item}/head.json | 0 .../resources/data/hexcasting/curios/entities/head.json | 8 ++++++++ 18 files changed, 18 insertions(+), 10 deletions(-) rename Common/src/main/resources/data/hexcasting/{advancements => advancement}/grant_patchi_book.json (100%) rename Common/src/main/resources/data/hexcasting/{item_modifiers => item_modifier}/amethyst_shard_reducer.json (100%) rename Common/src/main/resources/data/hexcasting/{loot_tables => loot_table}/grant_patchi_book.json (100%) rename Common/src/main/resources/data/hexcasting/{recipes => recipe}/patchi_book.json (100%) rename Common/src/main/resources/data/hexcasting/tags/{entity_types => entity_type}/cannot_teleport.json (100%) rename Common/src/main/resources/data/hexcasting/tags/{entity_types => entity_type}/sticky_teleporters.json (100%) rename Common/src/main/resources/data/minecraft/tags/{items => item}/cluster_max_harvestables.json (100%) rename Neoforge/src/main/resources/data/curios/tags/{items => item}/head.json (100%) create mode 100644 Neoforge/src/main/resources/data/hexcasting/curios/entities/head.json diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/akashiclib.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/akashiclib.json index 25cfde8ead..ad63b36001 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/akashiclib.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/greatwork/akashiclib.json @@ -22,7 +22,7 @@ { "type": "patchouli:crafting", "recipe": "hexcasting:akashic_bookshelf", - "recipe2": "hexcasting:akashic_connector" + "recipe2": "hexcasting:akashic_ligature" }, { "type": "patchouli:text", diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json index e3fc78bda9..9a000fea58 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/ancient_cyphers.json @@ -12,7 +12,7 @@ { "type": "patchouli:spotlight", "text": "hexcasting.page.ancient_cyphers.2", - "item": "hexcasting:ancient_cypher{variant:0},hexcasting:ancient_cypher{variant:1},hexcasting:ancient_cypher{variant:2},hexcasting:ancient_cypher{variant:3},hexcasting:ancient_cypher{variant:4},hexcasting:ancient_cypher{variant:5},hexcasting:ancient_cypher{variant:6},hexcasting:ancient_cypher{variant:7}" + "item": "hexcasting:ancient_cypher[hexcasting:variant=0],hexcasting:ancient_cypher[hexcasting:variant=1],hexcasting:ancient_cypher[hexcasting:variant=2],hexcasting:ancient_cypher[hexcasting:variant=3],hexcasting:ancient_cypher[hexcasting:variant=4],hexcasting:ancient_cypher[hexcasting:variant=5],hexcasting:ancient_cypher[hexcasting:variant=6],hexcasting:ancient_cypher[hexcasting:variant=7]" } ] } \ No newline at end of file diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/hexcasting.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/hexcasting.json index b28262d6b8..03e8990b3a 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/hexcasting.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/hexcasting.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.hexcasting", "category": "hexcasting:items", - "icon": "hexcasting:artifact{patterns:[]}", + "icon": "hexcasting:artifact", "sortnum": 6, "advancement": "hexcasting:root", "pages": [ diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/phials.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/phials.json index 0f930d1ec8..7e264464fe 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/phials.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/phials.json @@ -21,7 +21,7 @@ { "type": "patchouli:spotlight", "text": "hexcasting.page.phials.desc", - "item": "hexcasting:battery{\"hexcasting:media\":640000,\"hexcasting:start_media\":640000}", + "item": "hexcasting:battery[hexcasting:media=640000,hexcasting:start_media=640000]", "link_recipe": true } ] diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/potions.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/potions.json index a0db5dd70b..fcc3d2ff9f 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/potions.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/items/potions.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.potions", "category": "hexcasting:items", - "icon": "minecraft:potion{Potion:\"hexcasting:enlarge_grid\"}", + "icon": "minecraft:potion[minecraft:potion_contents={potion:\"hexcasting:enlarge_grid\"}]", "sortnum": 8, "advancement": "hexcasting:root", "read_by_default": true, @@ -14,7 +14,7 @@ "type": "patchouli:spotlight", "title": "hexcasting.page.potions.effects.header", "text": "hexcasting.page.potions.2", - "item": "minecraft:potion{Potion:\"hexcasting:enlarge_grid\"},minecraft:potion{Potion:\"hexcasting:enlarge_grid_long\"},minecraft:potion{Potion:\"hexcasting:enlarge_grid_strong\"},minecraft:potion{Potion:\"hexcasting:shrink_grid\"},minecraft:potion{Potion:\"hexcasting:shrink_grid_long\"},minecraft:potion{Potion:\"hexcasting:shrink_grid_strong\"}" + "item": "minecraft:potion[minecraft:potion_contents={potion:\"hexcasting:enlarge_grid\"}],minecraft:potion[minecraft:potion_contents={potion:\"hexcasting:enlarge_grid_long\"}],minecraft:potion[minecraft:potion_contents={potion:\"hexcasting:enlarge_grid_strong\"}],minecraft:potion[minecraft:potion_contents={potion:\"hexcasting:shrink_grid\"}],minecraft:potion[minecraft:potion_contents={potion:\"hexcasting:shrink_grid_long\"}],minecraft:potion[minecraft:potion_contents={potion:\"hexcasting:shrink_grid_strong\"}]" } ] } diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/make_battery.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/make_battery.json index 2ffd387b21..94c15f5bd1 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/make_battery.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/make_battery.json @@ -1,7 +1,7 @@ { "name": "hexcasting.action.hexcasting:craft/battery", "category": "hexcasting:patterns/great_spells", - "icon": "hexcasting:battery{media:10000,max_media:10000}", + "icon": "hexcasting:battery[hexcasting:media=10000,hexcasting:start_media=10000]", "sortnum": 6, "advancement": "hexcasting:root", "read_by_default": true, diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json index b5899a67c3..476fe9083b 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/great_spells/zeniths.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.zeniths", "category": "hexcasting:patterns/great_spells", - "icon": "minecraft:potion{Potion:'minecraft:regeneration'}", + "icon": "minecraft:potion[minecraft:potion_contents={potion:\"minecraft:regeneration\"}]", "advancement": "hexcasting:root", "sortnum": 4, "read_by_default": true, diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json index 06cd64b47f..fbbdbc5d40 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/hexcasting.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.hexcasting_spell", "category": "hexcasting:patterns/spells", - "icon": "hexcasting:artifact{patterns:[]}", + "icon": "hexcasting:artifact", "sortnum": 3, "advancement": "hexcasting:root", "read_by_default": true, diff --git a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/nadirs.json b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/nadirs.json index 8d7efd5c11..37374393c1 100644 --- a/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/nadirs.json +++ b/Common/src/main/resources/assets/hexcasting/patchouli_books/thehexbook/en_us/entries/patterns/spells/nadirs.json @@ -1,7 +1,7 @@ { "name": "hexcasting.entry.nadirs", "category": "hexcasting:patterns/spells", - "icon": "minecraft:potion{Potion:'minecraft:poison'}", + "icon": "minecraft:potion[minecraft:potion_contents={potion:\"minecraft:poison\"}]", "advancement": "hexcasting:root", "sortnum": 2, "read_by_default": true, diff --git a/Common/src/main/resources/data/hexcasting/advancements/grant_patchi_book.json b/Common/src/main/resources/data/hexcasting/advancement/grant_patchi_book.json similarity index 100% rename from Common/src/main/resources/data/hexcasting/advancements/grant_patchi_book.json rename to Common/src/main/resources/data/hexcasting/advancement/grant_patchi_book.json diff --git a/Common/src/main/resources/data/hexcasting/item_modifiers/amethyst_shard_reducer.json b/Common/src/main/resources/data/hexcasting/item_modifier/amethyst_shard_reducer.json similarity index 100% rename from Common/src/main/resources/data/hexcasting/item_modifiers/amethyst_shard_reducer.json rename to Common/src/main/resources/data/hexcasting/item_modifier/amethyst_shard_reducer.json diff --git a/Common/src/main/resources/data/hexcasting/loot_tables/grant_patchi_book.json b/Common/src/main/resources/data/hexcasting/loot_table/grant_patchi_book.json similarity index 100% rename from Common/src/main/resources/data/hexcasting/loot_tables/grant_patchi_book.json rename to Common/src/main/resources/data/hexcasting/loot_table/grant_patchi_book.json diff --git a/Common/src/main/resources/data/hexcasting/recipes/patchi_book.json b/Common/src/main/resources/data/hexcasting/recipe/patchi_book.json similarity index 100% rename from Common/src/main/resources/data/hexcasting/recipes/patchi_book.json rename to Common/src/main/resources/data/hexcasting/recipe/patchi_book.json diff --git a/Common/src/main/resources/data/hexcasting/tags/entity_types/cannot_teleport.json b/Common/src/main/resources/data/hexcasting/tags/entity_type/cannot_teleport.json similarity index 100% rename from Common/src/main/resources/data/hexcasting/tags/entity_types/cannot_teleport.json rename to Common/src/main/resources/data/hexcasting/tags/entity_type/cannot_teleport.json diff --git a/Common/src/main/resources/data/hexcasting/tags/entity_types/sticky_teleporters.json b/Common/src/main/resources/data/hexcasting/tags/entity_type/sticky_teleporters.json similarity index 100% rename from Common/src/main/resources/data/hexcasting/tags/entity_types/sticky_teleporters.json rename to Common/src/main/resources/data/hexcasting/tags/entity_type/sticky_teleporters.json diff --git a/Common/src/main/resources/data/minecraft/tags/items/cluster_max_harvestables.json b/Common/src/main/resources/data/minecraft/tags/item/cluster_max_harvestables.json similarity index 100% rename from Common/src/main/resources/data/minecraft/tags/items/cluster_max_harvestables.json rename to Common/src/main/resources/data/minecraft/tags/item/cluster_max_harvestables.json diff --git a/Neoforge/src/main/resources/data/curios/tags/items/head.json b/Neoforge/src/main/resources/data/curios/tags/item/head.json similarity index 100% rename from Neoforge/src/main/resources/data/curios/tags/items/head.json rename to Neoforge/src/main/resources/data/curios/tags/item/head.json diff --git a/Neoforge/src/main/resources/data/hexcasting/curios/entities/head.json b/Neoforge/src/main/resources/data/hexcasting/curios/entities/head.json new file mode 100644 index 0000000000..361fd3f548 --- /dev/null +++ b/Neoforge/src/main/resources/data/hexcasting/curios/entities/head.json @@ -0,0 +1,8 @@ +{ + "entities": [ + "player" + ], + "slots": [ + "head" + ] +} \ No newline at end of file From fb7544e46b79fe91f0dddc46ed2081cd76d71741 Mon Sep 17 00:00:00 2001 From: slava110 Date: Wed, 18 Jun 2025 06:47:42 +0300 Subject: [PATCH 53/81] Fix inline displaying for entity iotas --- .../java/at/petrak/hexcasting/api/casting/iota/EntityIota.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java index 9e55fed8b0..9c4f3bfc49 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/EntityIota.java @@ -74,7 +74,7 @@ public Entity getCachedEntity() { public @Nullable Component getEntityName() { var ent = getCachedEntity(); if(ent != null) { - var name = ent.getName(); + var name = getEntityNameWithInline(ent); this.entityName = name; return name; } From 1098f8a2036dca880b7364cfbdccdbeb2a2f13eb Mon Sep 17 00:00:00 2001 From: slava110 Date: Wed, 18 Jun 2025 06:53:45 +0300 Subject: [PATCH 54/81] Fix creative tab item ordering --- .../hexcasting/common/lib/HexItems.java | 67 ++++++++----------- 1 file changed, 27 insertions(+), 40 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index 6a727536af..86922ba750 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -46,13 +46,13 @@ public static void registerItems(BiConsumer r) { public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeModeTab tab) { if (tab == HexCreativeTabs.SCROLLS) generateScrollEntries(r); - for (var item : ITEM_TABS.getOrDefault(tab, Collections.emptySet())) { + for (var item : ITEM_TABS.getOrDefault(tab, Collections.emptyList())) { item.register(r); } } private static final Map ITEMS = new LinkedHashMap<>(); // preserve insertion order - private static final Map> ITEM_TABS = new LinkedHashMap<>(); + private static final Map> ITEM_TABS = new LinkedHashMap<>(); public static final Item AMETHYST_DUST = make("amethyst_dust", new Item(props())); @@ -77,8 +77,8 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemStaff STAFF_MINDSPLICE = make("staff/mindsplice", new ItemStaff(unstackable())); public static final ItemLens SCRYING_LENS = make("lens", new ItemLens( - IXplatAbstractions.INSTANCE.addEquipSlotFabric(EquipmentSlot.HEAD) - .stacksTo(1))); + IXplatAbstractions.INSTANCE.addEquipSlotFabric(EquipmentSlot.HEAD) + .stacksTo(1))); public static final ItemAbacus ABACUS = make("abacus", new ItemAbacus(unstackable())); public static final ItemThoughtKnot THOUGHT_KNOT = make("thought_knot", new ItemThoughtKnot(unstackable())); @@ -91,18 +91,18 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemArtifact ARTIFACT = make("artifact", new ItemArtifact(unstackable().rarity(Rarity.RARE))); public static final ItemJewelerHammer JEWELER_HAMMER = make("jeweler_hammer", - new ItemJewelerHammer(Tiers.IRON, props() - .stacksTo(1) - .durability(Tiers.DIAMOND.getUses()) - .attributes(ItemAttributeModifiers.builder() - .add(Attributes.ATTACK_SPEED, new AttributeModifier( - modLoc("jeweler_hammer_speed"), - -2.8, - AttributeModifier.Operation.ADD_VALUE - ), EquipmentSlotGroup.ANY) - .build() - ) - ) + new ItemJewelerHammer(Tiers.IRON, props() + .stacksTo(1) + .durability(Tiers.DIAMOND.getUses()) + .attributes(ItemAttributeModifiers.builder() + .add(Attributes.ATTACK_SPEED, new AttributeModifier( + modLoc("jeweler_hammer_speed"), + -2.8, + AttributeModifier.Operation.ADD_VALUE + ), EquipmentSlotGroup.ANY) + .build() + ) + ) ); public static final ItemScroll SCROLL_SMOL = make("scroll_small", new ItemScroll(props(), 1)); @@ -112,7 +112,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemSlate SLATE = make("slate", new ItemSlate(HexBlocks.SLATE, props())); public static final ItemMediaBattery BATTERY = make("battery", - new ItemMediaBattery(unstackable()), null); + new ItemMediaBattery(unstackable()), null); public static final Supplier BATTERY_DUST_STACK = addToTab(() -> ItemMediaBattery.withMedia( new ItemStack(HexItems.BATTERY), @@ -146,27 +146,27 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod var out = new EnumMap(ItemPridePigment.Type.class); for (var politicsInMyVidya : ItemPridePigment.Type.values()) { out.put(politicsInMyVidya, make("pride_colorizer_" + politicsInMyVidya.getName(), - new ItemPridePigment(politicsInMyVidya, unstackable()))); + new ItemPridePigment(politicsInMyVidya, unstackable()))); } return out; }); public static final Item UUID_PIGMENT = make("uuid_colorizer", new ItemUUIDPigment(unstackable())); public static final Item DEFAULT_PIGMENT = make("default_colorizer", - new ItemAmethystAndCopperPigment(unstackable())); + new ItemAmethystAndCopperPigment(unstackable())); // BUFF SANDVICH public static final Item SUBMARINE_SANDWICH = make("sub_sandwich", - new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationModifier(1.2f).build()))); + new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationModifier(1.2f).build()))); public static final ItemLoreFragment LORE_FRAGMENT = make("lore_fragment", - new ItemLoreFragment(unstackable() - .rarity(Rarity.RARE))); + new ItemLoreFragment(unstackable() + .rarity(Rarity.RARE))); public static final ItemCreativeUnlocker CREATIVE_UNLOCKER = make("creative_unlocker", - new ItemCreativeUnlocker(unstackable() - .rarity(Rarity.EPIC) - .food(new FoodProperties.Builder().nutrition(20).saturationModifier(1f).alwaysEdible().build()))); + new ItemCreativeUnlocker(unstackable() + .rarity(Rarity.EPIC) + .food(new FoodProperties.Builder().nutrition(20).saturationModifier(1f).alwaysEdible().build()))); // @@ -199,7 +199,7 @@ private static T make(ResourceLocation id, T item, @Nullable Cr throw new IllegalArgumentException("Typo? Duplicate id " + id); } if (tab != null) { - ITEM_TABS.computeIfAbsent(tab, t -> new HashSet<>()).add(new TabEntry.ItemEntry(item)); + ITEM_TABS.computeIfAbsent(tab, t -> new ArrayList<>()).add(new TabEntry.ItemEntry(item)); } return item; } @@ -214,16 +214,13 @@ private static T make(String id, T item) { private static Supplier addToTab(Supplier stack, CreativeModeTab tab) { var memoised = Suppliers.memoize(stack::get); - ITEM_TABS.computeIfAbsent(tab, t -> new HashSet<>()).add(new TabEntry.StackEntry(memoised)); + ITEM_TABS.computeIfAbsent(tab, t -> new ArrayList<>()).add(new TabEntry.StackEntry(memoised)); return memoised; } private static abstract class TabEntry { abstract void register(CreativeModeTab.Output r); - @Override - public abstract int hashCode(); - static class ItemEntry extends TabEntry { private final Item item; @@ -235,11 +232,6 @@ static class ItemEntry extends TabEntry { void register(CreativeModeTab.Output r) { r.accept(item); } - - @Override - public int hashCode() { - return Objects.hashCode(item); - } } static class StackEntry extends TabEntry { @@ -253,11 +245,6 @@ static class StackEntry extends TabEntry { void register(CreativeModeTab.Output r) { r.accept(stack.get()); } - - @Override - public int hashCode() { - return Objects.hashCode(stack); - } } } } From 09495cb19963b24bfc5010b91f28c8ad841b3674 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Mon, 24 Nov 2025 00:18:51 -0600 Subject: [PATCH 55/81] * Mostly complete Implementation of Item Components * Attempted fix of Networking (Incomplete) * Some minor fixes here and there --- .../api/casting/eval/env/StaffCastEnv.java | 3 +- .../hexcasting/api/casting/iota/Iota.java | 22 ++++++++++ .../hexcasting/api/casting/iota/IotaType.java | 12 ++++-- .../hexcasting/api/item/PigmentItem.java | 5 +++ .../casting/actions/spells/OpEdifySapling.kt | 1 - .../components/ItemHexHolderComponent.java | 30 +++++++++++++ .../components/ItemIotaHolderComponent.java | 28 +++++++++++++ .../components/ItemMediaHolderComponent.java | 30 +++++++++++++ .../components/PigmentItemComponent.java | 9 ++++ .../components/VariantItemComponent.java | 27 ++++++++++++ .../common/items/magic/ItemMediaHolder.java | 4 +- .../common/items/storage/ItemAbacus.java | 6 ++- .../common/lib/HexBlockEntities.java | 2 +- .../common/lib/HexItemComponents.java | 4 ++ .../common/misc/AkashicTreeGrower.java | 27 +++++++++--- .../hexcasting/common/msgs/MsgBeepS2C.java | 20 +++++++-- .../hexcasting/common/msgs/MsgBlinkS2C.java | 12 ++++-- .../common/msgs/MsgCastParticleS2C.java | 12 +++--- .../msgs/MsgClearSpiralPatternsS2C.java | 10 +++-- .../common/msgs/MsgNewSpellPatternC2S.java | 10 +++-- .../common/msgs/MsgNewSpellPatternS2C.java | 18 ++++---- .../common/msgs/MsgNewSpiralPatternsS2C.java | 10 +++-- .../common/msgs/MsgNewWallScrollS2C.java | 37 +++++++++++----- .../common/msgs/MsgOpenSpellGuiS2C.java | 17 ++++---- .../msgs/MsgRecalcWallScrollDisplayS2C.java | 10 +++-- .../common/msgs/MsgShiftScrollC2S.java | 28 +++++++++---- .../xplat/IClientXplatAbstractions.java | 3 +- .../hexcasting/xplat/IXplatAbstractions.java | 10 ++--- .../src/main/resources/hexplat.accesswidener | 3 ++ Fabric/build.gradle | 10 ++--- .../hexcasting/fabric/cc/CCAltiora.java | 9 ++-- .../hexcasting/fabric/cc/CCBrainswept.java | 12 +++--- .../fabric/cc/CCClientCastingStack.java | 9 ++-- .../fabric/cc/CCFavoredPigment.java | 9 ++-- .../petrak/hexcasting/fabric/cc/CCFlight.java | 9 ++-- .../hexcasting/fabric/cc/CCPatterns.java | 7 ++-- .../hexcasting/fabric/cc/CCSentinel.java | 11 ++--- .../fabric/cc/CCStaffcastImage.java | 7 ++-- .../fabric/cc/HexCardinalComponents.java | 42 ++++++++++--------- .../fabric/cc/adimpl/CCEntityIotaHolder.java | 5 ++- .../fabric/cc/adimpl/CCHexHolder.java | 7 ++-- .../fabric/cc/adimpl/CCIotaHolder.java | 2 +- .../fabric/cc/adimpl/CCItemIotaHolder.java | 7 ++-- .../fabric/cc/adimpl/CCMediaHolder.java | 8 ++-- .../fabric/cc/adimpl/CCPigment.java | 10 +++-- .../fabric/cc/adimpl/CCVariantItem.java | 9 ++-- .../interop/emi/BrainsweepeeEmiStack.java | 3 +- .../FabricEnchantmentTableBlockMixin.java | 4 +- .../fabric/network/FabricPacketHandler.java | 35 ++++++++-------- .../fabric/xplat/FabricClientXplatImpl.java | 3 +- .../fabric/xplat/FabricXplatImpl.java | 24 +++++------ .../main/resources/fabricasting.accesswidener | 3 ++ .../forge/network/MsgAltioraUpdateAck.java | 14 ++++--- .../forge/network/MsgBrainsweepAck.java | 14 ++++--- .../forge/network/MsgPigmentUpdateAck.java | 18 ++++---- .../network/MsgSentinelStatusUpdateAck.java | 13 ++++-- .../forge/xplat/ForgeClientXplatImpl.java | 3 +- .../forge/xplat/ForgeXplatImpl.java | 10 ++--- 58 files changed, 503 insertions(+), 224 deletions(-) create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/components/ItemIotaHolderComponent.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/components/ItemMediaHolderComponent.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/components/VariantItemComponent.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/lib/HexItemComponents.java diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java index 29e80d3817..537c146b71 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java @@ -14,6 +14,7 @@ import at.petrak.hexcasting.common.msgs.*; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; @@ -131,7 +132,7 @@ public static void handleNewPatternOnServer(ServerPlayer sender, MsgNewSpellPatt IXplatAbstractions.INSTANCE.sendPacketToPlayer(sender, new MsgNewSpellPatternS2C(clientInfo, resolvedPatterns.size() - 1)); - IMessage packet; + CustomPacketPayload packet; if (clientInfo.isStackClear()) { packet = new MsgClearSpiralPatternsS2C(sender.getUUID()); } else { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java index cad6baee82..2920f47ab7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java @@ -9,11 +9,19 @@ import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.api.casting.mishaps.Mishap; import at.petrak.hexcasting.api.casting.mishaps.MishapUnescapedValue; +import at.petrak.hexcasting.common.lib.HexRegistries; import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; +import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; +import io.netty.buffer.ByteBuf; import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.component.CustomData; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -25,6 +33,20 @@ public abstract class Iota { @NotNull protected final IotaType type; + public static final Codec IOTA_CODEC = HexIotaTypes.REGISTRY.byNameCodec() + .dispatch("type", Iota::getType, IotaType::codec); + + public static final StreamCodec IOTA_STREAM_CODEC = new StreamCodec<>() { + @Override + public void encode(RegistryFriendlyByteBuf buf, Iota iota) { + ByteBufCodecs.fromCodecWithRegistries(IOTA_CODEC).encode(buf, iota); + } + + public Iota decode(RegistryFriendlyByteBuf buf) { + var iota = ByteBufCodecs.fromCodecWithRegistries(IOTA_CODEC).decode(buf); return iota; + } + }; + protected Iota(@NotNull IotaType type, @NotNull Object payload) { this.type = type; this.payload = payload; diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java index c0167ae5df..f7aa5efa4d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; import net.minecraft.nbt.CompoundTag; @@ -44,6 +45,12 @@ public abstract class IotaType { */ public abstract int color(); + /** + * Get the MapCodec associated with this datum type. + */ + + public abstract MapCodec codec(); + /** * Get a display component that's the name of this iota type. */ @@ -100,10 +107,7 @@ public static IotaType getTypeFromTag(CompoundTag tag) { return null; } var typeKey = tag.getString(HexIotaTypes.KEY_TYPE); - if (!ResourceLocation.isValidResourceLocation(typeKey)) { - return null; - } - var typeLoc = new ResourceLocation(typeKey); + var typeLoc = ResourceLocation.tryParse(typeKey); return HexIotaTypes.REGISTRY.get(typeLoc); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/item/PigmentItem.java b/Common/src/main/java/at/petrak/hexcasting/api/item/PigmentItem.java index 06829c4b16..7c6f979f23 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/item/PigmentItem.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/item/PigmentItem.java @@ -1,6 +1,9 @@ package at.petrak.hexcasting.api.item; import at.petrak.hexcasting.api.pigment.ColorProvider; +import com.mojang.serialization.Codec; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.animal.Pig; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.ApiStatus; @@ -16,3 +19,5 @@ public interface PigmentItem { ColorProvider provideColor(ItemStack stack, UUID owner); } + + diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt index 415d4c2a13..386fad014e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt @@ -51,7 +51,6 @@ object OpEdifySapling : SpellAction { env.world, env.world.chunkSource.generator, pos, - bs, env.world.getRandom() ) if (success) break diff --git a/Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java new file mode 100644 index 0000000000..8cc89c1f29 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java @@ -0,0 +1,30 @@ +package at.petrak.hexcasting.common.components; + +import at.petrak.hexcasting.api.casting.iota.Iota; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.Tag; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.item.component.CustomData; + +import java.util.List; + +public record ItemHexHolderComponent(List hex) { + public static final ItemHexHolderComponent EMPTY = new ItemHexHolderComponent(List.of()); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Iota.IOTA_CODEC.listOf().fieldOf("datum").forGetter(ItemHexHolderComponent::hex) + ).apply(instance, ItemHexHolderComponent::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Iota.IOTA_STREAM_CODEC.apply(ByteBufCodecs.list()), + ItemHexHolderComponent::hex, + ItemHexHolderComponent::new + ); + public static final DataComponentType COMPONENT_TYPE = DataComponentType.builder() + .persistent(CODEC) + .networkSynchronized(STREAM_CODEC) + .build(); +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/components/ItemIotaHolderComponent.java b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemIotaHolderComponent.java new file mode 100644 index 0000000000..58b3dcfed6 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemIotaHolderComponent.java @@ -0,0 +1,28 @@ +package at.petrak.hexcasting.common.components; + +import at.petrak.hexcasting.api.casting.iota.Iota; +import at.petrak.hexcasting.api.casting.iota.NullIota; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + +public record ItemIotaHolderComponent(Iota iota) { + public static final ItemIotaHolderComponent EMPTY = new ItemIotaHolderComponent(new NullIota()); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Iota.IOTA_CODEC.fieldOf("datum").forGetter(ItemIotaHolderComponent::iota) + ).apply(instance, ItemIotaHolderComponent::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Iota.IOTA_STREAM_CODEC, + ItemIotaHolderComponent::iota, + ItemIotaHolderComponent::new + ); + public static final DataComponentType COMPONENT_TYPE = DataComponentType.builder() + .persistent(CODEC) + .networkSynchronized(STREAM_CODEC) + .build(); +} + + diff --git a/Common/src/main/java/at/petrak/hexcasting/common/components/ItemMediaHolderComponent.java b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemMediaHolderComponent.java new file mode 100644 index 0000000000..2bb83241e0 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemMediaHolderComponent.java @@ -0,0 +1,30 @@ +package at.petrak.hexcasting.common.components; + +import at.petrak.hexcasting.api.casting.iota.Iota; +import at.petrak.hexcasting.common.items.magic.ItemMediaHolder; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.item.Item; + +public record ItemMediaHolderComponent(long media, long max_media) { + public static final ItemMediaHolderComponent EMPTY = new ItemMediaHolderComponent(0, 0); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.LONG.fieldOf(ItemMediaHolder.TAG_MEDIA).forGetter(ItemMediaHolderComponent::media), + Codec.LONG.fieldOf(ItemMediaHolder.TAG_MAX_MEDIA).forGetter(ItemMediaHolderComponent::max_media) + ).apply(instance, ItemMediaHolderComponent::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.VAR_LONG, + ItemMediaHolderComponent::media, + ByteBufCodecs.VAR_LONG, + ItemMediaHolderComponent::max_media, + ItemMediaHolderComponent::new + ); + public static final DataComponentType COMPONENT_TYPE = DataComponentType.builder() + .persistent(CODEC) + .networkSynchronized(STREAM_CODEC) + .build(); +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java b/Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java new file mode 100644 index 0000000000..1b6318bf0c --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java @@ -0,0 +1,9 @@ +package at.petrak.hexcasting.common.components; + +import at.petrak.hexcasting.api.item.PigmentItem; +import net.minecraft.core.component.DataComponentType; + +public record PigmentItemComponent(PigmentItem item) { + public static final DataComponentType COMPONENT_TYPE = DataComponentType.builder() + .build(); +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/components/VariantItemComponent.java b/Common/src/main/java/at/petrak/hexcasting/common/components/VariantItemComponent.java new file mode 100644 index 0000000000..12d61d9062 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/components/VariantItemComponent.java @@ -0,0 +1,27 @@ +package at.petrak.hexcasting.common.components; + +import at.petrak.hexcasting.api.item.VariantItem; +import at.petrak.hexcasting.common.items.magic.ItemMediaHolder; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; + +public record VariantItemComponent(int variant) { + public static final VariantItemComponent EMPTY = new VariantItemComponent(0); + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.INT.fieldOf(VariantItem.TAG_VARIANT).forGetter(VariantItemComponent::variant) + ).apply(instance, VariantItemComponent::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.INT, + VariantItemComponent::variant, + VariantItemComponent::new + ); + public static final DataComponentType COMPONENT_TYPE = DataComponentType.builder() + .persistent(CODEC) + .networkSynchronized(STREAM_CODEC) + .build(); +} + diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java index 5bc736a2fa..afa1183fd2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java @@ -19,8 +19,8 @@ import java.util.List; public abstract class ItemMediaHolder extends Item implements MediaHolderItem { - public static final String TAG_MEDIA = "hexcasting:media"; - public static final String TAG_MAX_MEDIA = "hexcasting:start_media"; + public static final String TAG_MEDIA = "media"; + public static final String TAG_MAX_MEDIA = "max_media"; public static final TextColor HEX_COLOR = TextColor.fromRgb(0xb38ef3); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java index ad8527581f..f379d059c3 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java @@ -6,6 +6,7 @@ import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.common.lib.HexSounds; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; @@ -17,10 +18,11 @@ import net.minecraft.world.level.Level; import org.jetbrains.annotations.Nullable; +import javax.xml.crypto.Data; import java.util.List; public class ItemAbacus extends Item implements IotaHolderItem { - public static final String TAG_VALUE = "value"; + public static final String TAG_VALUE = "abacus_value"; public ItemAbacus(Properties pProperties) { super(pProperties); @@ -29,7 +31,7 @@ public ItemAbacus(Properties pProperties) { @Override public @Nullable CompoundTag readIotaTag(ItemStack stack) { - var datum = new DoubleIota(NBTHelper.getDouble(stack, TAG_VALUE)); + var datum = new DoubleIota(stack.get(DataComponents.CUSTOM_DATA).copyTag().getDouble(TAG_VALUE)); return IotaType.serialize(datum); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java index 6e22920668..e29584155a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlockEntities.java @@ -80,7 +80,7 @@ public static BlockEntityType typeForQuenchedAllay(Blo private static BlockEntityType register(String id, BiFunction func, Block... blocks) { var ret = IXplatAbstractions.INSTANCE.createBlockEntityType(func, blocks); - var old = BLOCK_ENTITIES.put(new ResourceLocation(HexAPI.MOD_ID, id), ret); + var old = BLOCK_ENTITIES.put(ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, id), ret); if (old != null) { throw new IllegalArgumentException("Duplicate id " + id); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItemComponents.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItemComponents.java new file mode 100644 index 0000000000..a12af3bc05 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItemComponents.java @@ -0,0 +1,4 @@ +package at.petrak.hexcasting.common.lib; + +public class HexItemComponents { +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java b/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java index d346979600..6480d6d983 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java @@ -2,15 +2,20 @@ import at.petrak.hexcasting.common.lib.HexConfiguredFeatures; import com.google.common.collect.Lists; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.packs.resources.Resource; import net.minecraft.util.RandomSource; -import net.minecraft.world.level.block.grower.AbstractTreeGrower; +import net.minecraft.world.level.block.grower.TreeGrower; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import java.util.List; -// TODO they fucking changed the trees AGAIN -public class AkashicTreeGrower extends AbstractTreeGrower { +// i gotcha :3 +public class AkashicTreeGrower { public static final AkashicTreeGrower INSTANCE = new AkashicTreeGrower(); public static final List>> GROWERS = Lists.newArrayList(); @@ -21,8 +26,20 @@ public static void init() { GROWERS.add(HexConfiguredFeatures.CITRINE_EDIFIED_TREE); } - @Override - protected ResourceKey> getConfiguredFeature(RandomSource pRandom, boolean pLargeHive) { + protected ResourceKey> getConfiguredFeature(RandomSource pRandom) { return GROWERS.get(pRandom.nextInt(GROWERS.size())); } + + public boolean growTree(ServerLevel level, ChunkGenerator generator, BlockPos pos, RandomSource source) { + if (GROWERS.isEmpty()) return false; + + var key = this.getConfiguredFeature(source); + + var registry = level.registryAccess().registryOrThrow(Registries.CONFIGURED_FEATURE); + + var holder = registry.getHolderOrThrow(key); + ConfiguredFeature feature = holder.value(); + + return feature.place(level, generator, source, pos); + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java index 852fc675af..6213b31ed6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java @@ -4,6 +4,10 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; @@ -11,14 +15,20 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; -public record MsgBeepS2C(Vec3 target, int note, NoteBlockInstrument instrument) implements IMessage { - public static final ResourceLocation ID = modLoc("beep"); +public record MsgBeepS2C(Vec3 target, int note, NoteBlockInstrument instrument) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgBeepS2C::serialize, MsgBeepS2C::deserialize); + + public static final Type ID = new Type<>(modLoc("beep")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } + private static void encode(FriendlyByteBuf buf, MsgBeepS2C msg) { + msg.serialize(buf); + } + public static MsgBeepS2C deserialize(ByteBuf buffer) { var buf = new FriendlyByteBuf(buffer); var x = buf.readDouble(); @@ -29,7 +39,7 @@ public static MsgBeepS2C deserialize(ByteBuf buffer) { return new MsgBeepS2C(new Vec3(x, y, z), note, instrument); } - @Override + public void serialize(FriendlyByteBuf buf) { buf.writeDouble(this.target.x); buf.writeDouble(this.target.y); @@ -54,4 +64,6 @@ public void run() { } }); } + + } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java index ab75bc20ed..9c2c93bd92 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java @@ -3,6 +3,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; @@ -11,11 +13,12 @@ /** * Sent server->client to synchronize OpBlink when the target is a player. */ -public record MsgBlinkS2C(Vec3 addedPosition) implements IMessage { - public static final ResourceLocation ID = modLoc("blink"); +public record MsgBlinkS2C(Vec3 addedPosition) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgBlinkS2C::serialize, MsgBlinkS2C::deserialize); + public static final Type ID = new Type<>(modLoc("blink")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -27,7 +30,6 @@ public static MsgBlinkS2C deserialize(ByteBuf buffer) { return new MsgBlinkS2C(new Vec3(x, y, z)); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeDouble(this.addedPosition.x); buf.writeDouble(this.addedPosition.y); @@ -43,4 +45,6 @@ public void run() { } }); } + + } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java index 9ec659b8b6..e0cac64cb6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java @@ -7,6 +7,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec3; @@ -18,11 +20,12 @@ /** * Sent server->client to spray particles everywhere. */ -public record MsgCastParticleS2C(ParticleSpray spray, FrozenPigment colorizer) implements IMessage { - public static final ResourceLocation ID = modLoc("cprtcl"); +public record MsgCastParticleS2C(ParticleSpray spray, FrozenPigment colorizer) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgCastParticleS2C::serialize, MsgCastParticleS2C::deserialize); + public static final Type ID = new Type<>(modLoc("cprtcl")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -37,14 +40,13 @@ public static MsgCastParticleS2C deserialize(ByteBuf buffer) { var fuzziness = buf.readDouble(); var spread = buf.readDouble(); var count = buf.readInt(); - var tag = buf.readAnySizeNbt(); + var tag = buf.readNbt(); var colorizer = FrozenPigment.fromNBT(tag); return new MsgCastParticleS2C( new ParticleSpray(new Vec3(posX, posY, posZ), new Vec3(velX, velY, velZ), fuzziness, spread, count), colorizer); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeDouble(this.spray.getPos().x); buf.writeDouble(this.spray.getPos().y); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java index 1f454ba700..ec025a7075 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java @@ -4,17 +4,20 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import java.util.UUID; import static at.petrak.hexcasting.api.HexAPI.modLoc; -public record MsgClearSpiralPatternsS2C(UUID playerUUID) implements IMessage { - public static final ResourceLocation ID = modLoc("clr_spi_pats_sc"); +public record MsgClearSpiralPatternsS2C(UUID playerUUID) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgClearSpiralPatternsS2C::serialize, MsgClearSpiralPatternsS2C::deserialize); + public static final CustomPacketPayload.Type ID = new CustomPacketPayload.Type<>(modLoc("clr_spi_pats_sc")); @Override - public ResourceLocation getFabricId() { + public CustomPacketPayload.Type type() { return ID; } @@ -26,7 +29,6 @@ public static MsgClearSpiralPatternsS2C deserialize(ByteBuf buffer) { return new MsgClearSpiralPatternsS2C(player); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeUUID(playerUUID); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java index ce19d966b3..cd176d069a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java @@ -5,6 +5,8 @@ import at.petrak.hexcasting.api.casting.math.HexPattern; import io.netty.buffer.ByteBuf; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; @@ -21,11 +23,12 @@ */ public record MsgNewSpellPatternC2S(InteractionHand handUsed, HexPattern pattern, List resolvedPatterns) - implements IMessage { - public static final ResourceLocation ID = modLoc("pat_cs"); + implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewSpellPatternC2S::serialize, MsgNewSpellPatternC2S::deserialize); + public static final Type ID = new Type<>(modLoc("pat_cs")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -42,7 +45,6 @@ public static MsgNewSpellPatternC2S deserialize(ByteBuf buffer) { return new MsgNewSpellPatternC2S(hand, pattern, resolvedPatterns); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeEnum(handUsed); buf.writeNbt(this.pattern.serializeToNBT()); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java index cadf3dd100..0a21a6eae9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java @@ -7,6 +7,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import java.util.Optional; @@ -16,11 +18,12 @@ /** * Sent server->client when the player finishes casting a spell. */ -public record MsgNewSpellPatternS2C(ExecutionClientView info, int index) implements IMessage { - public static final ResourceLocation ID = modLoc("pat_sc"); +public record MsgNewSpellPatternS2C(ExecutionClientView info, int index) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewSpellPatternS2C::serialize, MsgNewSpellPatternS2C::deserialize); + public static final Type ID = new Type<>(modLoc("pat_sc")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -31,22 +34,21 @@ public static MsgNewSpellPatternS2C deserialize(ByteBuf buffer) { var resolutionType = buf.readEnum(ResolvedPatternType.class); var index = buf.readInt(); - var stack = buf.readList(FriendlyByteBuf::readNbt); - var raven = buf.readOptional(FriendlyByteBuf::readNbt).orElse(null); + var stack = buf.readList(bu -> bu.readNbt()); + var raven = buf.readOptional(bu -> bu.readNbt()).orElse(null); return new MsgNewSpellPatternS2C( new ExecutionClientView(isStackEmpty, resolutionType, stack, raven), index ); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeBoolean(this.info.isStackClear()); buf.writeEnum(this.info.getResolutionType()); buf.writeInt(this.index); - buf.writeCollection(this.info.getStackDescs(), FriendlyByteBuf::writeNbt); - buf.writeOptional(Optional.ofNullable(this.info.getRavenmind()), FriendlyByteBuf::writeNbt); + buf.writeCollection(this.info.getStackDescs(), (b, t) -> b.writeNbt(t)); + buf.writeOptional(Optional.ofNullable(this.info.getRavenmind()), (b, t) -> b.writeNbt(t)); } public static void handle(MsgNewSpellPatternS2C self) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java index 9c5a02180c..dfc8f13f04 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java @@ -5,6 +5,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import java.util.ArrayList; @@ -13,11 +15,12 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; -public record MsgNewSpiralPatternsS2C(UUID playerUUID, List patterns, int lifetime) implements IMessage { - public static final ResourceLocation ID = modLoc("spi_pats_sc"); +public record MsgNewSpiralPatternsS2C(UUID playerUUID, List patterns, int lifetime) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewSpiralPatternsS2C::serialize, MsgNewSpiralPatternsS2C::deserialize); + public static final Type ID = new Type<>(modLoc("spi_pats_sc")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -32,7 +35,6 @@ public static MsgNewSpiralPatternsS2C deserialize(ByteBuf buffer) { return new MsgNewSpiralPatternsS2C(player, patterns, lifetime); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeUUID(playerUUID); buf.writeCollection(patterns, (buff, pattern) -> buff.writeNbt(pattern.serializeToNBT())); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java index 67e77248cc..736a4e4ecd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java @@ -5,7 +5,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -14,29 +19,41 @@ // https://github.com/VazkiiMods/Botania/blob/1.18.x/Xplat/src/main/java/vazkii/botania/network/clientbound/PacketSpawnDoppleganger.java public record MsgNewWallScrollS2C(ClientboundAddEntityPacket inner, BlockPos pos, Direction dir, ItemStack scrollItem, - boolean showsStrokeOrder, int blockSize) implements IMessage { - public static final ResourceLocation ID = modLoc("wallscr"); + boolean showsStrokeOrder, int blockSize) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewWallScrollS2C::serialize, MsgNewWallScrollS2C::deserialize); + public static final Type ID = new Type<>(modLoc("wallscr")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } - @Override - public void serialize(FriendlyByteBuf buf) { - inner.write(buf); + public void serialize(RegistryFriendlyByteBuf buf) { + buf.writeVarInt(inner.getId()); + buf.writeUUID(inner.getUUID()); + ByteBufCodecs.registry(Registries.ENTITY_TYPE).encode(buf, inner.getType()); + buf.writeDouble(inner.getX()); + buf.writeDouble(inner.getY()); + buf.writeDouble(inner.getZ()); + buf.writeByte((byte) inner.getXRot()); + buf.writeByte((byte) inner.getYRot()); + buf.writeByte((byte) inner.getYHeadRot()); + buf.writeVarInt(inner.getData()); + buf.writeShort((short) inner.getXa()); + buf.writeShort((short) inner.getYa()); + buf.writeShort((short) inner.getZa()); buf.writeBlockPos(pos); buf.writeByte(dir.ordinal()); - buf.writeItem(scrollItem); + ItemStack.STREAM_CODEC.encode(buf, scrollItem); buf.writeBoolean(showsStrokeOrder); buf.writeVarInt(blockSize); } - public static MsgNewWallScrollS2C deserialize(FriendlyByteBuf buf) { - var inner = new ClientboundAddEntityPacket(buf); + public static MsgNewWallScrollS2C deserialize(RegistryFriendlyByteBuf buf) { + var inner = ClientboundAddEntityPacket.STREAM_CODEC.decode(buf); var pos = buf.readBlockPos(); var dir = HexUtils.getSafe(Direction.values(), buf.readByte()); - var scroll = buf.readItem(); + var scroll = ItemStack.STREAM_CODEC.decode(buf); var strokeOrder = buf.readBoolean(); var blockSize = buf.readVarInt(); return new MsgNewWallScrollS2C(inner, pos, dir, scroll, strokeOrder, blockSize); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java index a06e608bdb..406c5ba347 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java @@ -6,6 +6,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; @@ -21,11 +23,12 @@ public record MsgOpenSpellGuiS2C(InteractionHand hand, List pat CompoundTag ravenmind, int parenCount ) - implements IMessage { - public static final ResourceLocation ID = modLoc("cgui"); + implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgOpenSpellGuiS2C::serialize, MsgOpenSpellGuiS2C::deserialize); + public static final Type ID = new Type<>(modLoc("cgui")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -34,10 +37,10 @@ public static MsgOpenSpellGuiS2C deserialize(ByteBuf buffer) { var hand = buf.readEnum(InteractionHand.class); - var patterns = buf.readList(fbb -> ResolvedPattern.fromNBT(fbb.readAnySizeNbt())); + var patterns = buf.readList(fbb -> ResolvedPattern.fromNBT(fbb.readNbt())); - var stack = buf.readList(FriendlyByteBuf::readNbt); - var raven = buf.readAnySizeNbt(); + var stack = buf.readList(b -> b.readNbt()); + var raven = buf.readNbt(); var parenCount = buf.readVarInt(); @@ -49,7 +52,7 @@ public void serialize(FriendlyByteBuf buf) { buf.writeCollection(this.patterns, (fbb, pat) -> fbb.writeNbt(pat.serializeToNBT())); - buf.writeCollection(this.stack, FriendlyByteBuf::writeNbt); + buf.writeCollection(this.stack, (b, t) -> b.writeNbt(t)); buf.writeNbt(this.ravenmind); buf.writeVarInt(this.parenCount); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java index 137c97f534..f512ab581e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java @@ -4,6 +4,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -11,8 +13,9 @@ /** * Sent S->C to have a wall scroll recalculate its pattern, to get readability offset. */ -public record MsgRecalcWallScrollDisplayS2C(int entityId, boolean showStrokeOrder) implements IMessage { - public static final ResourceLocation ID = modLoc("redoscroll"); +public record MsgRecalcWallScrollDisplayS2C(int entityId, boolean showStrokeOrder) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgRecalcWallScrollDisplayS2C::serialize, MsgRecalcWallScrollDisplayS2C::deserialize); + public static final Type ID = new Type<>(modLoc("redoscroll")); public static MsgRecalcWallScrollDisplayS2C deserialize(ByteBuf buffer) { var buf = new FriendlyByteBuf(buffer); @@ -21,14 +24,13 @@ public static MsgRecalcWallScrollDisplayS2C deserialize(ByteBuf buffer) { return new MsgRecalcWallScrollDisplayS2C(id, showStrokeOrder); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeVarInt(entityId); buf.writeBoolean(showStrokeOrder); } @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java index e1f4d354a6..22eed2d2cc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java @@ -8,15 +8,23 @@ import at.petrak.hexcasting.common.lib.HexSounds; import io.netty.buffer.ByteBuf; import net.minecraft.ChatFormatting; +import net.minecraft.core.component.DataComponentType; +import net.minecraft.core.component.DataComponents; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; + +import javax.xml.crypto.Data; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -25,11 +33,12 @@ * or scrolls in the spellcasting UI. */ public record MsgShiftScrollC2S(double mainHandDelta, double offHandDelta, boolean isCtrl, boolean invertSpellbook, - boolean invertAbacus) implements IMessage { - public static final ResourceLocation ID = modLoc("scroll"); + boolean invertAbacus) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgShiftScrollC2S::serialize, MsgShiftScrollC2S::deserialize); + public static final Type ID = new Type<>(modLoc("scroll")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -82,19 +91,19 @@ private void spellbook(ServerPlayer sender, InteractionHand hand, ItemStack stac var sealed = ItemSpellbook.isSealed(stack); MutableComponent component; - if (hand == InteractionHand.OFF_HAND && stack.hasCustomHoverName()) { + if (hand == InteractionHand.OFF_HAND && stack.has(DataComponents.CUSTOM_NAME)) { if (sealed) { component = Component.translatable("hexcasting.tooltip.spellbook.page_with_name.sealed", Component.literal(String.valueOf(newIdx)).withStyle(ChatFormatting.WHITE), Component.literal(String.valueOf(len)).withStyle(ChatFormatting.WHITE), - Component.literal("").withStyle(stack.getRarity().color, ChatFormatting.ITALIC) + Component.literal("").withStyle(stack.getRarity().color(), ChatFormatting.ITALIC) .append(stack.getHoverName()), Component.translatable("hexcasting.tooltip.spellbook.sealed").withStyle(ChatFormatting.GOLD)); } else { component = Component.translatable("hexcasting.tooltip.spellbook.page_with_name", Component.literal(String.valueOf(newIdx)).withStyle(ChatFormatting.WHITE), Component.literal(String.valueOf(len)).withStyle(ChatFormatting.WHITE), - Component.literal("").withStyle(stack.getRarity().color, ChatFormatting.ITALIC) + Component.literal("").withStyle(stack.getRarity().color(), ChatFormatting.ITALIC) .append(stack.getHoverName())); } @@ -120,7 +129,7 @@ private void abacus(ServerPlayer sender, InteractionHand hand, ItemStack stack, } var increase = delta < 0; - double num = NBTHelper.getDouble(stack, ItemAbacus.TAG_VALUE); + double num = stack.get(DataComponents.CUSTOM_DATA).copyTag().getDouble(ItemAbacus.TAG_VALUE); double shiftDelta; float pitch; @@ -135,7 +144,10 @@ private void abacus(ServerPlayer sender, InteractionHand hand, ItemStack stack, int scale = Math.max((int) Math.floor(Math.abs(delta)), 1); num += scale * shiftDelta * (increase ? 1 : -1); - NBTHelper.putDouble(stack, ItemAbacus.TAG_VALUE, num); + CustomData data = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY); + CompoundTag tag = data.copyTag(); + tag.putDouble(ItemAbacus.TAG_VALUE, num); + stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); pitch *= (increase ? 1.05f : 0.95f); pitch += (Math.random() - 0.5) * 0.1; diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java index 81806255b3..b685b9ea36 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java @@ -2,7 +2,6 @@ import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.client.ClientCastingStack; -import at.petrak.hexcasting.common.msgs.IMessage; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.item.ItemPropertyFunction; @@ -19,7 +18,7 @@ import java.util.stream.Collectors; public interface IClientXplatAbstractions { - void sendPacketToServer(IMessage packet); + void sendPacketToServer(CustomPacketPayload packet); void setRenderLayer(Block block, RenderType type); diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java index 86dbc24586..02a024200e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java @@ -19,12 +19,12 @@ import at.petrak.hexcasting.api.player.AltioraAbility; import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.player.Sentinel; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; import com.mojang.authlib.GameProfile; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -65,14 +65,14 @@ public interface IXplatAbstractions { void initPlatformSpecific(); - void sendPacketToPlayer(ServerPlayer target, IMessage packet); + void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet); - void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, IMessage packet); + void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, CustomPacketPayload packet); - void sendPacketTracking(Entity entity, IMessage packet); + void sendPacketTracking(Entity entity, CustomPacketPayload packet); // https://github.com/VazkiiMods/Botania/blob/13b7bcd9cbb6b1a418b0afe455662d29b46f1a7f/Xplat/src/main/java/vazkii/botania/xplat/IXplatAbstractions.java#L157 - Packet toVanillaClientboundPacket(IMessage message); + Packet toVanillaClientboundPacket(CustomPacketPayload message); // double getReachDistance(Player player); diff --git a/Common/src/main/resources/hexplat.accesswidener b/Common/src/main/resources/hexplat.accesswidener index d8a1955d13..014ebe6a89 100644 --- a/Common/src/main/resources/hexplat.accesswidener +++ b/Common/src/main/resources/hexplat.accesswidener @@ -7,4 +7,7 @@ accessible class net/minecraft/world/item/crafting/Ingredient$Value accessible method net/minecraft/world/item/crafting/Ingredient (Ljava/util/stream/Stream;)V accessible method net/minecraft/world/item/context/UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; +accessible class net/minecraft/network/protocol/game/ClientboundAddEntityPacket +accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V +accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket write (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; \ No newline at end of file diff --git a/Fabric/build.gradle b/Fabric/build.gradle index ff0e8b62d7..4be19ce0cb 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -108,11 +108,11 @@ dependencies { // modImplementation "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" modImplementation "io.wispforest:accessories-fabric:$accessoriesVersion" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-base:$cardinalComponentsVersion" -// modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-util:$cardinalComponentsVersion" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-entity:$cardinalComponentsVersion" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-item:$cardinalComponentsVersion" - modImplementation "dev.onyxstudios.cardinal-components-api:cardinal-components-block:$cardinalComponentsVersion" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-base:$cardinalComponentsVersion" +// modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-util:$cardinalComponentsVersion" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-entity:$cardinalComponentsVersion" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-item:$cardinalComponentsVersion" + modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-block:$cardinalComponentsVersion" // apparently the 1.18 version Just Works on 1.19 modImplementation "${modID}:serialization-hooks:$serializationHooksVersion" diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCAltiora.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCAltiora.java index 17d1489f76..66efacd5ff 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCAltiora.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCAltiora.java @@ -1,8 +1,9 @@ package at.petrak.hexcasting.fabric.cc; import at.petrak.hexcasting.api.player.AltioraAbility; -import dev.onyxstudios.cca.api.v3.component.Component; -import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent; +import net.minecraft.core.HolderLookup; +import org.ladysnake.cca.api.v3.component.Component; +import org.ladysnake.cca.api.v3.component.sync.AutoSyncedComponent; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import org.jetbrains.annotations.Nullable; @@ -34,7 +35,7 @@ public void setAltiora(AltioraAbility altiora) { } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { var allowed = tag.getBoolean(TAG_ALLOWED); if (!allowed) { this.altiora = null; @@ -45,7 +46,7 @@ public void readFromNbt(CompoundTag tag) { } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { tag.putBoolean(TAG_ALLOWED, this.altiora != null); if (this.altiora != null) { tag.putInt(TAG_GRACE, this.altiora.gracePeriod()); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCBrainswept.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCBrainswept.java index 34406f7421..a948055463 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCBrainswept.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCBrainswept.java @@ -1,7 +1,9 @@ package at.petrak.hexcasting.fabric.cc; -import dev.onyxstudios.cca.api.v3.component.Component; -import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent; +import net.minecraft.core.HolderLookup; +import net.minecraft.network.RegistryFriendlyByteBuf; +import org.ladysnake.cca.api.v3.component.Component; +import org.ladysnake.cca.api.v3.component.sync.AutoSyncedComponent; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.LivingEntity; @@ -28,19 +30,19 @@ public void setBrainswept(boolean brainswept) { } @Override - public void applySyncPacket(FriendlyByteBuf buf) { + public void applySyncPacket(RegistryFriendlyByteBuf buf) { AutoSyncedComponent.super.applySyncPacket(buf); if (owner instanceof Mob mob && brainswept) mob.removeFreeWill(); } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { this.brainswept = tag.getBoolean(TAG_BRAINSWEPT); } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { tag.putBoolean(TAG_BRAINSWEPT, this.brainswept); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCClientCastingStack.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCClientCastingStack.java index 90fbadffeb..7552956809 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCClientCastingStack.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCClientCastingStack.java @@ -1,8 +1,9 @@ package at.petrak.hexcasting.fabric.cc; import at.petrak.hexcasting.api.client.ClientCastingStack; -import dev.onyxstudios.cca.api.v3.component.Component; -import dev.onyxstudios.cca.api.v3.component.tick.ClientTickingComponent; +import net.minecraft.core.HolderLookup; +import org.ladysnake.cca.api.v3.component.Component; +import org.ladysnake.cca.api.v3.component.tick.ClientTickingComponent; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; @@ -23,8 +24,8 @@ public void clientTick() { } @Override - public void readFromNbt(CompoundTag tag) { } + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { } @Override - public void writeToNbt(CompoundTag tag) { } + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java index 7eaf3b5ba1..70919c6fc3 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java @@ -1,8 +1,9 @@ package at.petrak.hexcasting.fabric.cc; import at.petrak.hexcasting.api.pigment.FrozenPigment; -import dev.onyxstudios.cca.api.v3.component.Component; -import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent; +import net.minecraft.core.HolderLookup; +import org.ladysnake.cca.api.v3.component.Component; +import org.ladysnake.cca.api.v3.component.sync.AutoSyncedComponent; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.entity.player.Player; import org.jetbrains.annotations.Nullable; @@ -33,12 +34,12 @@ public FrozenPigment setPigment(@Nullable FrozenPigment pigment) { } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { this.pigment = FrozenPigment.fromNBT(tag.getCompound(TAG_PIGMENT)); } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { tag.put(TAG_PIGMENT, this.pigment.serializeToNBT()); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java index e7747fac3f..629585a13d 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFlight.java @@ -2,7 +2,8 @@ import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.utils.HexUtils; -import dev.onyxstudios.cca.api.v3.component.Component; +import net.minecraft.core.HolderLookup; +import org.ladysnake.cca.api.v3.component.Component; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; @@ -37,14 +38,14 @@ public void setFlight(FlightAbility flight) { } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { var allowed = tag.getBoolean(TAG_ALLOWED); if (!allowed) { this.flight = null; } else { var timeLeft = tag.getInt(TAG_TIME_LEFT); var dim = ResourceKey.create(Registries.DIMENSION, - new ResourceLocation(tag.getString(TAG_DIMENSION))); + ResourceLocation.parse(tag.getString(TAG_DIMENSION))); var origin = HexUtils.vecFromNBT(tag.getCompound(TAG_ORIGIN)); var radius = tag.getDouble(TAG_RADIUS); this.flight = new FlightAbility(timeLeft, dim, origin, radius); @@ -52,7 +53,7 @@ public void readFromNbt(CompoundTag tag) { } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { tag.putBoolean(TAG_ALLOWED, this.flight != null); if (this.flight != null) { tag.putInt(TAG_TIME_LEFT, this.flight.timeLeft()); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java index 6faa0f70d8..de46b5e2e8 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java @@ -1,7 +1,8 @@ package at.petrak.hexcasting.fabric.cc; import at.petrak.hexcasting.api.casting.eval.ResolvedPattern; -import dev.onyxstudios.cca.api.v3.component.Component; +import net.minecraft.core.HolderLookup; +import org.ladysnake.cca.api.v3.component.Component; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; @@ -33,7 +34,7 @@ public void setPatterns(List patterns) { } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { ListTag patternsTag = tag.getList(TAG_PATTERNS, Tag.TAG_COMPOUND); List patterns = new ArrayList<>(patternsTag.size()); @@ -45,7 +46,7 @@ public void readFromNbt(CompoundTag tag) { } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { var listTag = new ListTag(); for (ResolvedPattern pattern : patterns) { listTag.add(pattern.serializeToNBT()); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCSentinel.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCSentinel.java index d5925796fb..e0db645188 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCSentinel.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCSentinel.java @@ -2,8 +2,9 @@ import at.petrak.hexcasting.api.player.Sentinel; import at.petrak.hexcasting.api.utils.HexUtils; -import dev.onyxstudios.cca.api.v3.component.Component; -import dev.onyxstudios.cca.api.v3.component.sync.AutoSyncedComponent; +import net.minecraft.core.HolderLookup; +import org.ladysnake.cca.api.v3.component.Component; +import org.ladysnake.cca.api.v3.component.sync.AutoSyncedComponent; import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceKey; @@ -36,13 +37,13 @@ public void setSentinel(Sentinel sentinel) { } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { var hasSentinel = tag.getBoolean(TAG_HAS_SENTINEL); if (hasSentinel) { var extendsRange = tag.getBoolean(TAG_EXTENDS_RANGE); var position = HexUtils.vecFromNBT(tag.getCompound(TAG_POSITION)); var dim = ResourceKey.create(Registries.DIMENSION, - new ResourceLocation(tag.getString(TAG_DIMENSION))); + ResourceLocation.parse(tag.getString(TAG_DIMENSION))); this.sentinel = new Sentinel(extendsRange, position, dim); } else { this.sentinel = null; @@ -50,7 +51,7 @@ public void readFromNbt(CompoundTag tag) { } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { tag.putBoolean(TAG_HAS_SENTINEL, this.sentinel != null); if (this.sentinel != null) { tag.putBoolean(TAG_EXTENDS_RANGE, this.sentinel.extendsRange()); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java index bb6018946f..a1435d31c8 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java @@ -3,7 +3,8 @@ import at.petrak.hexcasting.api.casting.eval.env.StaffCastEnv; import at.petrak.hexcasting.api.casting.eval.vm.CastingImage; import at.petrak.hexcasting.api.casting.eval.vm.CastingVM; -import dev.onyxstudios.cca.api.v3.component.Component; +import net.minecraft.core.HolderLookup; +import org.ladysnake.cca.api.v3.component.Component; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; @@ -38,12 +39,12 @@ public void setImage(@Nullable CastingImage image) { } @Override - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { this.lazyLoadedTag = tag.getCompound(TAG_HARNESS); } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { tag.put(TAG_HARNESS, this.lazyLoadedTag); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java index fd2f5978e1..3a7a3ca8a9 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java @@ -6,24 +6,26 @@ import at.petrak.hexcasting.api.item.*; import at.petrak.hexcasting.api.misc.MediaConstants; import at.petrak.hexcasting.api.mod.HexConfig; +import at.petrak.hexcasting.common.components.*; import at.petrak.hexcasting.common.entities.EntityWallScroll; import at.petrak.hexcasting.common.lib.HexBlocks; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.fabric.cc.adimpl.*; -import dev.onyxstudios.cca.api.v3.component.ComponentFactory; -import dev.onyxstudios.cca.api.v3.component.ComponentKey; -import dev.onyxstudios.cca.api.v3.component.ComponentRegistry; -import dev.onyxstudios.cca.api.v3.entity.EntityComponentFactoryRegistry; -import dev.onyxstudios.cca.api.v3.entity.EntityComponentInitializer; -import dev.onyxstudios.cca.api.v3.entity.RespawnCopyStrategy; -import dev.onyxstudios.cca.api.v3.item.ItemComponentFactoryRegistry; -import dev.onyxstudios.cca.api.v3.item.ItemComponentInitializer; +import org.ladysnake.cca.api.v3.component.ComponentFactory; +import org.ladysnake.cca.api.v3.component.ComponentKey; +import org.ladysnake.cca.api.v3.component.ComponentRegistry; +import org.ladysnake.cca.api.v3.entity.EntityComponentFactoryRegistry; +import org.ladysnake.cca.api.v3.entity.EntityComponentInitializer; +import org.ladysnake.cca.api.v3.entity.RespawnCopyStrategy; +import org.ladysnake.cca.api.v3.item.ItemComponentFactoryRegistry; +import org.ladysnake.cca.api.v3.item.ItemComponentInitializer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.Items; +import org.ladysnake.cca.api.v3.item.ItemComponentMigrationRegistry; import java.util.function.Function; @@ -85,35 +87,35 @@ public void registerEntityComponentFactories(EntityComponentFactoryRegistry regi } @Override - public void registerItemComponentFactories(ItemComponentFactoryRegistry registry) { - registry.register(i -> i instanceof PigmentItem, PIGMENT, CCPigment.ItemBased::new); + public void registerItemComponentMigrations(ItemComponentMigrationRegistry registry) { + registry.registerMigration(modLoc("pigment"), PigmentItemComponent.COMPONENT_TYPE); - registry.register(i -> i instanceof IotaHolderItem, IOTA_HOLDER, CCItemIotaHolder.ItemBased::new); + registry.registerMigration(modLoc("iota_holder"), ItemIotaHolderComponent.COMPONENT_TYPE); // oh havoc, you think you're so funny // the worst part is you're /right/ - registry.register(Items.PUMPKIN_PIE, IOTA_HOLDER, stack -> new CCItemIotaHolder.Static(stack, + registry.registerMigration(Items.PUMPKIN_PIE, IOTA_HOLDER, stack -> new CCItemIotaHolder.Static(stack, s -> new DoubleIota(Math.PI * s.getCount()))); - registry.register(i -> i instanceof MediaHolderItem, MEDIA_HOLDER, CCMediaHolder.ItemBased::new); - registry.register(HexItems.AMETHYST_DUST, MEDIA_HOLDER, s -> new CCMediaHolder.Static( + registry.registerMigration(modLoc("media_holder"), ItemMediaHolderComponent.COMPONENT_TYPE); + registry.registerMigration(modLoc("media_holder"), s -> new CCMediaHolder.Static( () -> HexConfig.common().dustMediaAmount(), ADMediaHolder.AMETHYST_DUST_PRIORITY, s )); - registry.register(Items.AMETHYST_SHARD, MEDIA_HOLDER, s -> new CCMediaHolder.Static( + registry.registerMigration(Items.AMETHYST_SHARD, MEDIA_HOLDER, s -> new CCMediaHolder.Static( () -> HexConfig.common().shardMediaAmount(), ADMediaHolder.AMETHYST_SHARD_PRIORITY, s )); - registry.register(HexItems.CHARGED_AMETHYST, MEDIA_HOLDER, s -> new CCMediaHolder.Static( + registry.registerMigration(HexItems.CHARGED_AMETHYST, MEDIA_HOLDER, s -> new CCMediaHolder.Static( () -> HexConfig.common().chargedCrystalMediaAmount(), ADMediaHolder.CHARGED_AMETHYST_PRIORITY, s )); - registry.register(HexItems.QUENCHED_SHARD.asItem(), MEDIA_HOLDER, s -> new CCMediaHolder.Static( + registry.registerMigration(HexItems.QUENCHED_SHARD.asItem(), MEDIA_HOLDER, s -> new CCMediaHolder.Static( () -> MediaConstants.QUENCHED_SHARD_UNIT, ADMediaHolder.QUENCHED_SHARD_PRIORITY, s )); - registry.register(HexBlocks.QUENCHED_ALLAY.asItem(), MEDIA_HOLDER, s -> new CCMediaHolder.Static( + registry.registerMigration(HexBlocks.QUENCHED_ALLAY.asItem(), MEDIA_HOLDER, s -> new CCMediaHolder.Static( () -> MediaConstants.QUENCHED_BLOCK_UNIT, ADMediaHolder.QUENCHED_ALLAY_PRIORITY, s )); - registry.register(i -> i instanceof HexHolderItem, HEX_HOLDER, CCHexHolder.ItemBased::new); + registry.registerMigration(modLoc("hex_holder"), ItemHexHolderComponent.COMPONENT_TYPE); - registry.register(i -> i instanceof VariantItem, VARIANT_ITEM, CCVariantItem.ItemBased::new); + registry.registerMigration(modLoc("variant_item"), VariantItemComponent.COMPONENT_TYPE); } private ComponentFactory wrapItemEntityDelegate(Function cir) { diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java index 3a6b1af179..f25407916d 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java @@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import org.apache.logging.log4j.util.TriConsumer; @@ -14,39 +16,38 @@ public class FabricPacketHandler { public static void init() { ServerPlayNetworking.registerGlobalReceiver(MsgNewSpellPatternC2S.ID, - makeServerBoundHandler(MsgNewSpellPatternC2S::deserialize, MsgNewSpellPatternC2S::handle)); + makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); ServerPlayNetworking.registerGlobalReceiver( - MsgShiftScrollC2S.ID, makeServerBoundHandler(MsgShiftScrollC2S::deserialize, MsgShiftScrollC2S::handle)); + MsgShiftScrollC2S.ID, makeServerBoundHandler(MsgShiftScrollC2S::handle)); } - private static ServerPlayNetworking.PlayChannelHandler makeServerBoundHandler( - Function decoder, TriConsumer handle) { - return (server, player, _handler, buf, _responseSender) -> handle.accept(decoder.apply(buf), server, player); + private static ServerPlayNetworking.PlayPayloadHandler makeServerBoundHandler( + TriConsumer handle) { + return (payload, context) -> handle.accept(payload, context.server(), context.player()); } public static void initClient() { ClientPlayNetworking.registerGlobalReceiver(MsgNewSpellPatternS2C.ID, - makeClientBoundHandler(MsgNewSpellPatternS2C::deserialize, MsgNewSpellPatternS2C::handle)); + makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); ClientPlayNetworking.registerGlobalReceiver( - MsgBlinkS2C.ID, makeClientBoundHandler(MsgBlinkS2C::deserialize, MsgBlinkS2C::handle)); + MsgBlinkS2C.ID, makeClientBoundHandler(MsgBlinkS2C::handle)); ClientPlayNetworking.registerGlobalReceiver(MsgCastParticleS2C.ID, - makeClientBoundHandler(MsgCastParticleS2C::deserialize, MsgCastParticleS2C::handle)); + makeClientBoundHandler(MsgCastParticleS2C::handle)); ClientPlayNetworking.registerGlobalReceiver(MsgOpenSpellGuiS2C.ID, - makeClientBoundHandler(MsgOpenSpellGuiS2C::deserialize, MsgOpenSpellGuiS2C::handle)); + makeClientBoundHandler(MsgOpenSpellGuiS2C::handle)); ClientPlayNetworking.registerGlobalReceiver(MsgBeepS2C.ID, - makeClientBoundHandler(MsgBeepS2C::deserialize, MsgBeepS2C::handle)); + makeClientBoundHandler(MsgBeepS2C::handle)); ClientPlayNetworking.registerGlobalReceiver(MsgNewWallScrollS2C.ID, - makeClientBoundHandler(MsgNewWallScrollS2C::deserialize, MsgNewWallScrollS2C::handle)); + makeClientBoundHandler(MsgNewWallScrollS2C::handle)); ClientPlayNetworking.registerGlobalReceiver(MsgRecalcWallScrollDisplayS2C.ID, - makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::deserialize, MsgRecalcWallScrollDisplayS2C::handle)); + makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::handle)); ClientPlayNetworking.registerGlobalReceiver(MsgNewSpiralPatternsS2C.ID, - makeClientBoundHandler(MsgNewSpiralPatternsS2C::deserialize, MsgNewSpiralPatternsS2C::handle)); + makeClientBoundHandler(MsgNewSpiralPatternsS2C::handle)); ClientPlayNetworking.registerGlobalReceiver(MsgClearSpiralPatternsS2C.ID, - makeClientBoundHandler(MsgClearSpiralPatternsS2C::deserialize, MsgClearSpiralPatternsS2C::handle)); + makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); } - private static ClientPlayNetworking.PlayChannelHandler makeClientBoundHandler( - Function decoder, Consumer handler) { - return (_client, _handler, buf, _responseSender) -> handler.accept(decoder.apply(buf)); + private static ClientPlayNetworking.PlayPayloadHandler makeClientBoundHandler(Consumer handler) { + return (payload, context) -> handler.accept(payload); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java index c5738b03f3..a4a8897afe 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java @@ -1,7 +1,6 @@ package at.petrak.hexcasting.fabric.xplat; import at.petrak.hexcasting.api.client.ClientCastingStack; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; import at.petrak.hexcasting.fabric.client.ExtendedTexture; import at.petrak.hexcasting.fabric.interop.trinkets.TrinketsApiInterop; @@ -32,7 +31,7 @@ public class FabricClientXplatImpl implements IClientXplatAbstractions { @Override - public void sendPacketToServer(IMessage packet) { + public void sendPacketToServer(CustomPacketPayload packet) { ClientPlayNetworking.send(packet.getFabricId(), packet.toBuf()); } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java index da6a443908..0c60c91e09 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java @@ -21,8 +21,8 @@ import at.petrak.hexcasting.api.player.AltioraAbility; import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.player.Sentinel; +import at.petrak.hexcasting.common.components.PigmentItemComponent; import at.petrak.hexcasting.common.lib.HexRegistries; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; import at.petrak.hexcasting.fabric.interop.trinkets.TrinketsApiInterop; import at.petrak.hexcasting.fabric.recipe.FabricUnsealedIngredient; @@ -38,7 +38,6 @@ import net.fabricmc.fabric.api.event.player.PlayerBlockBreakEvents; import net.fabricmc.fabric.api.event.player.UseItemCallback; import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder; -import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; @@ -52,6 +51,7 @@ import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.core.*; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -117,21 +117,21 @@ public void initPlatformSpecific() { // } @Override - public void sendPacketToPlayer(ServerPlayer target, IMessage packet) { + public void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet) { ServerPlayNetworking.send(target, packet.getFabricId(), packet.toBuf()); } @Override - public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, IMessage packet) { + public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, CustomPacketPayload packet) { sendPacketToPlayers(PlayerLookup.around(dimension, pos, radius), packet); } @Override - public void sendPacketTracking(Entity entity, IMessage packet) { + public void sendPacketTracking(Entity entity, CustomPacketPayload packet) { sendPacketToPlayers(PlayerLookup.tracking(entity), packet); } - private void sendPacketToPlayers(Collection players, IMessage packet) { + private void sendPacketToPlayers(Collection players, CustomPacketPayload packet) { var pkt = ServerPlayNetworking.createS2CPacket(packet.getFabricId(), packet.toBuf()); for (var p : players) { p.connection.send(pkt); @@ -139,7 +139,7 @@ private void sendPacketToPlayers(Collection players, IMessage pack } @Override - public Packet toVanillaClientboundPacket(IMessage message) { + public Packet toVanillaClientboundPacket(CustomPacketPayload message) { return ServerPlayNetworking.createS2CPacket(message.getFabricId(), message.toBuf()); } @@ -276,7 +276,7 @@ ADHexHolder findHexHolder(ItemStack stack) { @Override public boolean isPigment(ItemStack stack) { - return HexCardinalComponents.PIGMENT.isProvidedBy(stack); + return stack.get(PigmentItemComponent.COMPONENT_TYPE) != null; } @Override @@ -369,18 +369,18 @@ public boolean isCorrectTierForDrops(Tier tier, BlockState bs) { @Override public Item.Properties addEquipSlotFabric(EquipmentSlot slot) { - return new FabricItemSettings().equipmentSlot(s -> slot); + return new Item.Properties().equipmentSlot((e, s) -> slot); } private static final IXplatTags TAGS = new IXplatTags() { @Override public TagKey amethystDust() { - return HexTags.Items.create(new ResourceLocation("c", "amethyst_dusts")); + return HexTags.Items.create(ResourceLocation.fromNamespaceAndPath("c", "amethyst_dusts")); } @Override public TagKey gems() { - return HexTags.Items.create(new ResourceLocation("c", "gems")); + return HexTags.Items.create(ResourceLocation.fromNamespaceAndPath("c", "gems")); } }; @@ -394,7 +394,7 @@ public LootItemCondition.Builder isShearsCondition() { return AnyOfCondition.anyOf( MatchTool.toolMatches(ItemPredicate.Builder.item().of(Items.SHEARS)), MatchTool.toolMatches(ItemPredicate.Builder.item().of( - HexTags.Items.create(new ResourceLocation("c", "shears")))) + HexTags.Items.create(ResourceLocation.fromNamespaceAndPath("c", "shears")))) ); } diff --git a/Fabric/src/main/resources/fabricasting.accesswidener b/Fabric/src/main/resources/fabricasting.accesswidener index 59935daf3e..0677ad09ea 100644 --- a/Fabric/src/main/resources/fabricasting.accesswidener +++ b/Fabric/src/main/resources/fabricasting.accesswidener @@ -15,4 +15,7 @@ accessible method net/minecraft/world/item/context/UseOnContext (Lnet/min accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; accessible class net/minecraft/client/resources/model/ModelManager$ReloadState +accessible class net/minecraft/network/protocol/game/ClientboundAddEntityPacket +accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V +accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket write (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V accessible method net/minecraft/world/level/block/state/properties/BlockSetType register (Lnet/minecraft/world/level/block/state/properties/BlockSetType;)Lnet/minecraft/world/level/block/state/properties/BlockSetType; \ No newline at end of file diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java index 0e932b55ea..b1bcb03122 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java @@ -1,21 +1,26 @@ package at.petrak.hexcasting.forge.network; import at.petrak.hexcasting.api.player.AltioraAbility; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.xplat.IXplatAbstractions; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; import static at.petrak.hexcasting.api.HexAPI.modLoc; -public record MsgAltioraUpdateAck(@Nullable AltioraAbility altiora) implements IMessage { - public static final ResourceLocation ID = modLoc("altiora"); +public record MsgAltioraUpdateAck(@Nullable AltioraAbility altiora) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec( + MsgAltioraUpdateAck::serialize, + MsgAltioraUpdateAck::deserialize + ); + public static final Type ID = new Type<>(modLoc("altiora")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -30,7 +35,6 @@ public static MsgAltioraUpdateAck deserialize(ByteBuf buffer) { return new MsgAltioraUpdateAck(new AltioraAbility(grace)); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeBoolean(this.altiora != null); if (this.altiora != null) { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java index c9d24606fc..e54f38cc41 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java @@ -1,10 +1,11 @@ package at.petrak.hexcasting.forge.network; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.xplat.IXplatAbstractions; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Mob; @@ -14,11 +15,15 @@ /** * Sent server->client to synchronize the status of a brainswept mob. */ -public record MsgBrainsweepAck(int target) implements IMessage { - public static final ResourceLocation ID = modLoc("sweep"); +public record MsgBrainsweepAck(int target) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec( + MsgBrainsweepAck::serialize, + MsgBrainsweepAck::deserialize + ); + public static final Type ID = new Type<>(modLoc("sweep")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } @@ -29,7 +34,6 @@ public static MsgBrainsweepAck deserialize(ByteBuf buffer) { return new MsgBrainsweepAck(target); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeInt(target); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java index c38266b1ae..bdc8b7a864 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java @@ -1,11 +1,12 @@ package at.petrak.hexcasting.forge.network; import at.petrak.hexcasting.api.pigment.FrozenPigment; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.xplat.IXplatAbstractions; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -13,23 +14,22 @@ /** * Sent server->client to synchronize the status of the sentinel. */ -public record MsgPigmentUpdateAck(FrozenPigment update) implements IMessage { - public static final ResourceLocation ID = modLoc("color"); +public record MsgPigmentUpdateAck(FrozenPigment update) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgPigmentUpdateAck::serialize, MsgPigmentUpdateAck::deserialize); + + public static final Type ID = new Type<>(modLoc("color")); @Override - public ResourceLocation getFabricId() { - return ID; - } + public Type type() { return ID; } public static MsgPigmentUpdateAck deserialize(ByteBuf buffer) { var buf = new FriendlyByteBuf(buffer); - var tag = buf.readAnySizeNbt(); + var tag = buf.readNbt(); var colorizer = FrozenPigment.fromNBT(tag); return new MsgPigmentUpdateAck(colorizer); } - @Override public void serialize(FriendlyByteBuf buf) { buf.writeNbt(this.update.serializeToNBT()); } @@ -45,4 +45,6 @@ public void run() { } }); } + + } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java index dc8f712d8e..653a020ad7 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java @@ -1,12 +1,13 @@ package at.petrak.hexcasting.forge.network; import at.petrak.hexcasting.api.player.Sentinel; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.xplat.IXplatAbstractions; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.core.registries.Registries; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.phys.Vec3; @@ -18,11 +19,15 @@ /** * Sent server->client to synchronize the status of the sentinel. */ -public record MsgSentinelStatusUpdateAck(@Nullable Sentinel update) implements IMessage { - public static final ResourceLocation ID = modLoc("sntnl"); +public record MsgSentinelStatusUpdateAck(@Nullable Sentinel update) implements CustomPacketPayload { + public static final StreamCodec CODEC = CustomPacketPayload.codec( + MsgSentinelStatusUpdateAck::serialize, + MsgSentinelStatusUpdateAck::deserialize + ); + public static final Type ID = new Type<>(modLoc("sntnl")); @Override - public ResourceLocation getFabricId() { + public Type type() { return ID; } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java index d33c2654b0..e1f8f9a867 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java @@ -1,7 +1,6 @@ package at.petrak.hexcasting.forge.xplat; import at.petrak.hexcasting.api.client.ClientCastingStack; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.forge.cap.HexCapabilities; import at.petrak.hexcasting.forge.network.ForgePacketHandler; import at.petrak.hexcasting.xplat.IClientXplatAbstractions; @@ -21,7 +20,7 @@ public class ForgeClientXplatImpl implements IClientXplatAbstractions { @Override - public void sendPacketToServer(IMessage packet) { + public void sendPacketToServer(CustomPacketPayload packet) { ForgePacketHandler.getNetwork().sendToServer(packet); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java index 9d9188599d..f325aa003b 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java @@ -25,7 +25,6 @@ import at.petrak.hexcasting.common.lib.hex.HexContinuationTypes; import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; -import at.petrak.hexcasting.common.msgs.IMessage; import at.petrak.hexcasting.forge.cap.CapSyncers; import at.petrak.hexcasting.forge.cap.HexCapabilities; import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; @@ -47,6 +46,7 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -363,24 +363,24 @@ public ColorProvider getColorProvider(FrozenPigment pigment) { } @Override - public void sendPacketToPlayer(ServerPlayer target, IMessage packet) { + public void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet) { ForgePacketHandler.getNetwork().send(PacketDistributor.PLAYER.with(() -> target), packet); } @Override - public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, IMessage packet) { + public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, CustomPacketPayload packet) { ForgePacketHandler.getNetwork().send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint( pos.x, pos.y, pos.z, radius * radius, dimension.dimension() )), packet); } @Override - public void sendPacketTracking(Entity entity, IMessage packet) { + public void sendPacketTracking(Entity entity, CustomPacketPayload packet) { ForgePacketHandler.getNetwork().send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), packet); } @Override - public Packet toVanillaClientboundPacket(IMessage message) { + public Packet toVanillaClientboundPacket(CustomPacketPayload message) { //noinspection unchecked return (Packet) ForgePacketHandler.getNetwork().toVanillaPacket(message, NetworkDirection.PLAY_TO_CLIENT); } From c4ed240ee21a15b3255bc38411f501e3319f4c11 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Tue, 25 Nov 2025 03:24:25 -0600 Subject: [PATCH 56/81] * More attempts to fix networking * Other fixes here and there (fixed up some whole minor folders so that's pretty cool) * Fixed NBTUtils! --- Common/build.gradle | 4 + .../block/circle/BlockAbstractImpetus.java | 7 + .../circles/BlockEntityAbstractImpetus.java | 8 +- .../api/casting/eval/CastingEnvironment.java | 2 +- .../casting/eval/env/PlayerBasedCastEnv.java | 4 +- .../petrak/hexcasting/api/utils/HexUtils.kt | 9 ++ .../petrak/hexcasting/api/utils/NBTHelper.kt | 130 ++++++++++-------- .../hexcasting/client/gui/GuiSpellcasting.kt | 4 +- .../common/blocks/BlockConjured.java | 3 +- .../blocks/akashic/AkashicFloodfiller.java | 7 + .../blocks/akashic/BlockAkashicBookshelf.java | 2 +- .../blocks/akashic/BlockAkashicLigature.java | 12 ++ .../impetuses/BlockEntityLookingImpetus.java | 11 +- .../impetuses/BlockEntityRedstoneImpetus.java | 5 +- .../impetuses/BlockLookingImpetus.java | 9 ++ .../impetuses/BlockRedstoneImpetus.java | 2 +- .../decoration/BlockAmethystDirectional.java | 8 ++ .../blocks/decoration/BlockHexDoor.java | 2 +- .../decoration/BlockHexFallingBlock.java | 16 +++ .../blocks/decoration/BlockHexFenceGate.java | 2 +- .../decoration/BlockHexPressurePlate.java | 4 +- .../blocks/decoration/BlockHexTrapdoor.java | 2 +- .../blocks/decoration/BlockHexWoodButton.java | 2 +- .../command/ListPerWorldPatternsCommand.java | 10 +- .../common/entities/EntityWallScroll.java | 55 +++++--- .../common/items/storage/ItemScroll.java | 27 ++-- .../hexcasting/common/lib/HexBlocks.java | 31 ++--- .../common/recipe/BrainsweepRecipe.java | 34 ++++- .../xplat/IClientXplatAbstractions.java | 1 + .../hexcasting/xplat/IXplatAbstractions.java | 10 +- .../main/resources/architectury.common.json | 3 + .../fabric/xplat/FabricClientXplatImpl.java | 3 +- Neoforge/build.gradle | 20 ++- Neoforge/gradle.properties | 2 +- .../forge/ForgeHexClientInitializer.java | 11 +- .../hexcasting/forge/ForgeHexConfig.java | 56 ++++---- .../hexcasting/forge/ForgeHexInitializer.java | 71 +++++----- .../forge/cap/ForgeCapabilityHandler.java | 76 +++++----- .../forge/cap/ForgeImpetusCapability.java | 2 +- .../hexcasting/forge/cap/HexCapabilities.java | 48 +++++-- .../interop/curios/CuriosApiInterop.java | 12 +- .../forge/network/ForgePacketHandler.java | 79 ++++------- .../forge/recipe/ForgeUnsealedIngredient.java | 19 ++- .../forge/xplat/ForgeClientXplatImpl.java | 3 +- .../forge/xplat/ForgeXplatImpl.java | 130 ++++++++---------- build.gradle | 4 +- 46 files changed, 538 insertions(+), 424 deletions(-) create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFallingBlock.java create mode 100644 Common/src/main/resources/architectury.common.json diff --git a/Common/build.gradle b/Common/build.gradle index 91a09e78b5..5bcf413c9f 100644 --- a/Common/build.gradle +++ b/Common/build.gradle @@ -30,6 +30,10 @@ repositories { maven { url = "https://maven.terraformersmc.com/releases/" } } +loom { + accessWidenerPath = file("src/main/resources/hexplat.accesswidener") +} + dependencies { // === MANDATORY DEPS === compileOnly "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" diff --git a/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java b/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java index d5197fce68..5f5f499bea 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/block/circle/BlockAbstractImpetus.java @@ -7,6 +7,9 @@ import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -17,6 +20,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.phys.BlockHitResult; import java.util.EnumSet; @@ -58,6 +62,9 @@ public float particleHeight(BlockPos pos, BlockState bs, Level world) { return 0.5f; } + public abstract InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, + BlockHitResult pHit); + @Override public void tick(BlockState pState, ServerLevel pLevel, BlockPos pPos, RandomSource pRandom) { if (pLevel.getBlockEntity(pPos) instanceof BlockEntityAbstractImpetus tile && pState.getValue(ENERGIZED)) { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java index ac8bf92d0d..6cc394468b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java @@ -292,9 +292,9 @@ protected void saveModData(CompoundTag tag) { tag.putLong(TAG_MEDIA, this.media); if (this.displayMsg != null && this.displayItem != null) { - tag.putString(TAG_ERROR_MSG, Component.Serializer.toJson(this.displayMsg)); + tag.putString(TAG_ERROR_MSG, Component.Serializer.toJson(this.displayMsg, level.registryAccess())); var itemTag = new CompoundTag(); - this.displayItem.save(itemTag); + this.displayItem.save(level.registryAccess(), itemTag); tag.put(TAG_ERROR_DISPLAY, itemTag); } if (this.pigment != null) @@ -315,8 +315,8 @@ protected void loadModData(CompoundTag tag) { } if (tag.contains(TAG_ERROR_MSG, Tag.TAG_STRING) && tag.contains(TAG_ERROR_DISPLAY, Tag.TAG_COMPOUND)) { - var msg = Component.Serializer.fromJson(tag.getString(TAG_ERROR_MSG)); - var display = ItemStack.of(tag.getCompound(TAG_ERROR_DISPLAY)); + var msg = Component.Serializer.fromJson(tag.getString(TAG_ERROR_MSG), level.registryAccess()); + var display = ItemStack.parseOptional(level.registryAccess(), tag.getCompound(TAG_ERROR_DISPLAY)); this.displayMsg = msg; this.displayItem = display; } else { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java index 9157063a97..8862ad4934 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java @@ -229,7 +229,7 @@ public void postCast(CastingImage image) { * Return whether this env can cast great spells. */ public boolean isEnlightened() { - var adv = this.world.getServer().getAdvancements().getAdvancement(modLoc("enlightenment")); + var adv = this.world.getServer().getAdvancements().get(modLoc("enlightenment")); if (adv == null) return false; diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java index 10ff3b052b..148250e4bd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java @@ -128,7 +128,7 @@ protected long extractMediaFromInventory(long costLeft, boolean allowOvercast, b } else { var mediaAbleToCastFromHP = this.caster.getHealth() * mediaToHealth; - Mishap.trulyHurt(this.caster, this.caster.damageSources().source(HexDamageTypes.OVERCAST), (float) healthToRemove); + Mishap.trulyHurt(this.caster, this.world.damageSources().source(HexDamageTypes.OVERCAST), (float) healthToRemove); var actuallyTaken = Mth.ceil(mediaAbleToCastFromHP - (this.caster.getHealth() * mediaToHealth)); @@ -152,7 +152,7 @@ protected long extractMediaFromInventory(long costLeft, boolean allowOvercast, b } protected boolean canOvercast() { - var adv = this.world.getServer().getAdvancements().getAdvancement(modLoc("y_u_no_cast_angy")); + var adv = this.world.getServer().getAdvancements().get(modLoc("y_u_no_cast_angy")); var advs = this.caster.getAdvancements(); return advs.getOrStartProgress(adv).isDone(); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt index 7629783a56..8dcfea6f4e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt @@ -7,6 +7,7 @@ import at.petrak.hexcasting.api.casting.iota.IotaType import at.petrak.hexcasting.api.casting.iota.ListIota import at.petrak.hexcasting.api.casting.math.HexCoord import net.minecraft.ChatFormatting +import net.minecraft.core.HolderLookup import net.minecraft.core.Registry import net.minecraft.nbt.* import net.minecraft.network.chat.Component @@ -16,6 +17,7 @@ import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey import net.minecraft.world.InteractionHand +import net.minecraft.world.item.ItemStack import net.minecraft.world.phys.Vec2 import net.minecraft.world.phys.Vec3 import java.lang.ref.WeakReference @@ -290,6 +292,12 @@ fun List.zipWithDefault(array: ByteArray, default: (idx: Int) -> Byte): L // return out //} +fun ItemStack.serializeToNBT(provider: HolderLookup.Provider): CompoundTag { + val out = CompoundTag() + save(provider, out) + return out +} + @Suppress("UNCHECKED_CAST") @Throws(IllegalArgumentException::class) fun Tag.downcast(type: TagType): T { @@ -313,3 +321,4 @@ fun isOfTag(registry: Registry, loc: ResourceLocation, tag: TagKey): B val key = ResourceKey.create(registry.key(), loc); return isOfTag(registry, key, tag) } + diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt index f72ee92e31..9bf750fb6c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt @@ -4,8 +4,11 @@ package at.petrak.hexcasting.api.utils +import at.petrak.hexcasting.common.components.VariantItemComponent +import net.minecraft.core.component.DataComponents import net.minecraft.nbt.* import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.component.CustomData import java.util.* private inline fun T?.getIf(key: K, predicate: T?.(K) -> Boolean, get: T.(K) -> E): E? = @@ -192,93 +195,108 @@ val Tag.asUUID: UUID get() = if (this is IntArrayTag && this.size == 4) NbtUtils // Checks for containment -fun ItemStack.hasNumber(key: String) = tag.hasNumber(key) -fun ItemStack.hasByte(key: String) = tag.hasByte(key) -fun ItemStack.hasShort(key: String) = tag.hasShort(key) -fun ItemStack.hasInt(key: String) = tag.hasInt(key) -fun ItemStack.hasLong(key: String) = tag.hasLong(key) -fun ItemStack.hasFloat(key: String) = tag.hasFloat(key) -fun ItemStack.hasDouble(key: String) = tag.hasDouble(key) -fun ItemStack.hasLongArray(key: String) = tag.hasLongArray(key) -fun ItemStack.hasIntArray(key: String) = tag.hasIntArray(key) -fun ItemStack.hasByteArray(key: String) = tag.hasByteArray(key) -fun ItemStack.hasCompound(key: String) = tag.hasCompound(key) -fun ItemStack.hasString(key: String) = tag.hasString(key) -fun ItemStack.hasList(key: String) = tag.hasList(key) -fun ItemStack.hasList(key: String, objType: Int) = tag.hasList(key, objType) -fun ItemStack.hasList(key: String, objType: Byte) = tag.hasList(key, objType) -fun ItemStack.hasUUID(key: String) = tag.hasUUID(key) +fun ItemStack.hasNumber(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasNumber(key) +fun ItemStack.hasByte(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasByte(key) +fun ItemStack.hasShort(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasShort(key) +fun ItemStack.hasInt(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasInt(key) +fun ItemStack.hasLong(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasLong(key) +fun ItemStack.hasFloat(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasFloat(key) +fun ItemStack.hasDouble(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasDouble(key) +fun ItemStack.hasLongArray(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasLongArray(key) +fun ItemStack.hasIntArray(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasIntArray(key) +fun ItemStack.hasByteArray(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasByteArray(key) +fun ItemStack.hasCompound(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasCompound(key) +fun ItemStack.hasString(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasString(key) +fun ItemStack.hasList(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasList(key) +fun ItemStack.hasList(key: String, objType: Int) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasList(key, objType) +fun ItemStack.hasList(key: String, objType: Byte) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasList(key, objType) +fun ItemStack.hasUUID(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasUUID(key) @JvmName("contains") -fun ItemStack.containsTag(key: String) = tag.contains(key) +fun ItemStack.containsTag(key: String) = get(DataComponents.CUSTOM_DATA)?.contains(key) @JvmName("contains") -fun ItemStack.containsTag(key: String, id: Byte) = tag.contains(key, id) +fun ItemStack.containsTag(key: String, id: Byte) = get(DataComponents.CUSTOM_DATA)?.copyTag().contains(key, id) @JvmName("contains") -fun ItemStack.containsTag(key: String, id: Int) = tag.contains(key, id) +fun ItemStack.containsTag(key: String, id: Int) = get(DataComponents.CUSTOM_DATA)?.copyTag().contains(key, id) + +fun ItemStack.findVariantHolder() = get(VariantItemComponent.COMPONENT_TYPE) + // Puts +private fun ItemStack.updateCustomData(block: CompoundTag.() -> Unit) { + val old = this.get(DataComponents.CUSTOM_DATA) + val tag = (old?.copyTag() ?: CompoundTag()).apply(block) + this.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)) +} -fun ItemStack.putBoolean(key: String, value: Boolean) = orCreateTag.putBoolean(key, value) -fun ItemStack.putByte(key: String, value: Byte) = orCreateTag.putByte(key, value) -fun ItemStack.putShort(key: String, value: Short) = orCreateTag.putShort(key, value) -fun ItemStack.putInt(key: String, value: Int) = orCreateTag.putInt(key, value) -fun ItemStack.putLong(key: String, value: Long) = orCreateTag.putLong(key, value) -fun ItemStack.putFloat(key: String, value: Float) = orCreateTag.putFloat(key, value) -fun ItemStack.putDouble(key: String, value: Double) = orCreateTag.putDouble(key, value) - -fun ItemStack.putLongArray(key: String, value: LongArray) = orCreateTag.putLongArray(key, value) -fun ItemStack.putIntArray(key: String, value: IntArray) = orCreateTag.putIntArray(key, value) -fun ItemStack.putByteArray(key: String, value: ByteArray) = orCreateTag.putByteArray(key, value) -fun ItemStack.putCompound(key: String, value: CompoundTag) = putTag(key, value) -fun ItemStack.putString(key: String, value: String) = orCreateTag.putString(key, value) -fun ItemStack.putList(key: String, value: ListTag) = putTag(key, value) -fun ItemStack.putUUID(key: String, value: UUID) = orCreateTag.putUUID(key, value) - -@JvmName("put") -fun ItemStack.putTag(key: String, value: Tag) = orCreateTag.put(key, value) +fun ItemStack.putBoolean(key: String, value: Boolean) = updateCustomData { putBoolean(key, value) }fun ItemStack.putByte(key: String, value: Byte) = updateCustomData { putByte(key, value) } +fun ItemStack.putShort(key: String, value: Short) = updateCustomData { putShort(key, value) } +fun ItemStack.putInt(key: String, value: Int) = updateCustomData { putInt(key, value) } +fun ItemStack.putLong(key: String, value: Long) = updateCustomData { putLong(key, value) } +fun ItemStack.putFloat(key: String, value: Float) = updateCustomData { putFloat(key, value) } +fun ItemStack.putDouble(key: String, value: Double) = updateCustomData { putDouble(key, value) } + +fun ItemStack.putLongArray(key: String, value: LongArray) = updateCustomData { putLongArray(key, value) } +fun ItemStack.putIntArray(key: String, value: IntArray) = updateCustomData { putIntArray(key, value) } +fun ItemStack.putByteArray(key: String, value: ByteArray) = updateCustomData { putByteArray(key, value) } +fun ItemStack.putCompound(key: String, value: CompoundTag) = updateCustomData { put(key, value) } +fun ItemStack.putString(key: String, value: String) = updateCustomData { putString(key, value) } +fun ItemStack.putList(key: String, value: ListTag) = updateCustomData { put(key, value) } +fun ItemStack.putUUID(key: String, value: UUID) = updateCustomData { putUUID(key, value) } // Remove -fun ItemStack.remove(key: String) = removeTagKey(key) +fun ItemStack.remove(key: String) = updateCustomData { remove(key) } // Gets +private fun ItemStack.customTag(): CompoundTag = + get(DataComponents.CUSTOM_DATA)?.copyTag() ?: CompoundTag() + + @JvmOverloads -fun ItemStack.getBoolean(key: String, defaultExpected: Boolean = false) = tag.getBoolean(key, defaultExpected) +fun ItemStack.getBoolean(key: String, defaultExpected: Boolean = false) = + customTag().getBoolean(key).let { if (customTag().contains(key)) it else defaultExpected } @JvmOverloads -fun ItemStack.getByte(key: String, defaultExpected: Byte = 0) = tag.getByte(key, defaultExpected) +fun ItemStack.getByte(key: String, defaultExpected: Byte = 0) = + customTag().getByte(key).let { if (customTag().contains(key)) it else defaultExpected } @JvmOverloads -fun ItemStack.getShort(key: String, defaultExpected: Short = 0) = tag.getShort(key, defaultExpected) +fun ItemStack.getShort(key: String, defaultExpected: Short = 0) = + customTag().getShort(key).let { if (customTag().contains(key)) it else defaultExpected } @JvmOverloads -fun ItemStack.getInt(key: String, defaultExpected: Int = 0) = tag.getInt(key, defaultExpected) +fun ItemStack.getInt(key: String, defaultExpected: Int = 0) = + customTag().getInt(key).let { if (customTag().contains(key)) it else defaultExpected } @JvmOverloads -fun ItemStack.getLong(key: String, defaultExpected: Long = 0) = tag.getLong(key, defaultExpected) +fun ItemStack.getLong(key: String, defaultExpected: Long = 0) = + customTag().getLong(key).let { if (customTag().contains(key)) it else defaultExpected } @JvmOverloads -fun ItemStack.getFloat(key: String, defaultExpected: Float = 0f) = tag.getFloat(key, defaultExpected) +fun ItemStack.getFloat(key: String, defaultExpected: Float = 0f) = + customTag().getFloat(key).let { if (customTag().contains(key)) it else defaultExpected } @JvmOverloads -fun ItemStack.getDouble(key: String, defaultExpected: Double = 0.0) = tag.getDouble(key, defaultExpected) +fun ItemStack.getDouble(key: String, defaultExpected: Double = 0.0) = + customTag().getDouble(key).let { if (customTag().contains(key)) it else defaultExpected } -fun ItemStack.getLongArray(key: String) = tag.getLongArray(key) -fun ItemStack.getIntArray(key: String) = tag.getIntArray(key) -fun ItemStack.getByteArray(key: String) = tag.getByteArray(key) -fun ItemStack.getCompound(key: String) = tag.getCompound(key) -fun ItemStack.getString(key: String) = tag.getString(key) -fun ItemStack.getList(key: String, objType: Int) = tag.getList(key, objType) -fun ItemStack.getUUID(key: String) = tag.getUUID(key) +fun ItemStack.getLongArray(key: String) = customTag().getLongArray(key) +fun ItemStack.getIntArray(key: String) = customTag().getIntArray(key) +fun ItemStack.getByteArray(key: String) = customTag().getByteArray(key) +fun ItemStack.getCompound(key: String) = customTag().getCompound(key) +fun ItemStack.getString(key: String) = customTag().getString(key) +fun ItemStack.getList(key: String, objType: Int) = customTag().getList(key, objType) +fun ItemStack.getUUID(key: String) = customTag().getUUID(key) @JvmName("get") -fun ItemStack.getTag(key: String) = tag.get(key) +fun ItemStack.getTag(key: String) = customTag().get(key) // Get-or-create -fun ItemStack.getOrCreateCompound(key: String): CompoundTag = getOrCreateTagElement(key) -fun ItemStack.getOrCreateList(key: String, objType: Byte) = orCreateTag.getOrCreateList(key, objType) -fun ItemStack.getOrCreateList(key: String, objType: Int) = orCreateTag.getOrCreateList(key, objType) +fun ItemStack.getOrCreateCompound(key: String): CompoundTag = customTag().getOrCreateCompound(key) +fun ItemStack.getOrCreateList(key: String, objType: Byte) = customTag().getOrCreateList(key, objType) +fun ItemStack.getOrCreateList(key: String, objType: Int) = customTag().getOrCreateList(key, objType) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt index 0a9f66cd2b..0999914787 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt @@ -291,8 +291,8 @@ class GuiSpellcasting constructor( return false } - override fun mouseScrolled(pMouseX: Double, pMouseY: Double, pDelta: Double): Boolean { - super.mouseScrolled(pMouseX, pMouseY, pDelta) + override fun mouseScrolled(pDelta: Double, e: Double, f: Double, g: Double): Boolean { + super.mouseScrolled(pDelta, e, f, g) val mouseHandler = Minecraft.getInstance().mouseHandler diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java index 078b819a3c..13c9c2c831 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java @@ -33,10 +33,11 @@ public BlockConjured(Properties properties) { } @Override - public void playerWillDestroy(Level pLevel, BlockPos pPos, BlockState pState, Player pPlayer) { + public BlockState playerWillDestroy(Level pLevel, BlockPos pPos, BlockState pState, Player pPlayer) { super.playerWillDestroy(pLevel, pPos, pState, pPlayer); // For some reason the block doesn't play breaking noises. So we fix that! pPlayer.playSound(SoundEvents.AMETHYST_BLOCK_BREAK, 1f, 1f); + return pState; } @Nullable diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/AkashicFloodfiller.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/AkashicFloodfiller.java index ab810391af..56d6cfffc6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/AkashicFloodfiller.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/AkashicFloodfiller.java @@ -3,8 +3,12 @@ import at.petrak.hexcasting.api.misc.TriPredicate; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.Nullable; import java.util.ArrayDeque; @@ -68,4 +72,7 @@ static boolean canItBeFloodedThrough(BlockPos pos, BlockState state, Level world return flooder.canBeFloodedThrough(pos, state, world); } + + InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, + BlockHitResult pHit); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java index 39545fd968..aca542ab5e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java @@ -40,7 +40,7 @@ public BlockAkashicBookshelf(Properties p_49795_) { @Override public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, - BlockHitResult pHit) { + BlockHitResult pHit) { if (pLevel.getBlockEntity(pPos) instanceof BlockEntityAkashicBookshelf shelf) { var stack = pPlayer.getItemInHand(pHand); if (stack.getItem() instanceof ItemScroll scroll) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicLigature.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicLigature.java index c86019bd10..005b8069c7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicLigature.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicLigature.java @@ -1,9 +1,21 @@ package at.petrak.hexcasting.common.blocks.akashic; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; public class BlockAkashicLigature extends Block implements AkashicFloodfiller { public BlockAkashicLigature(Properties properties) { super(properties); } + + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { + return null; + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java index 963d62a649..8d09edc54e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java @@ -16,6 +16,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.HitResult; +import net.minecraft.world.phys.Vec3; public class BlockEntityLookingImpetus extends BlockEntityAbstractImpetus { public static final int MAX_LOOK_AMOUNT = 30; @@ -35,8 +36,14 @@ public static void serverTick(Level level, BlockPos pos, BlockState bs, BlockEnt int prevLookAmt = self.lookAmount; int range = 20; - var players = level.getEntitiesOfClass(ServerPlayer.class, - new AABB(pos.offset(-range, -range, -range), pos.offset(range, range, range))); + AABB box = AABB.ofSize( + Vec3.atCenterOf(pos), // center of the cube + range * 2 + 1, + range * 2 + 1, + range * 2 + 1 + ); + + var players = level.getEntitiesOfClass(ServerPlayer.class, box); ServerPlayer looker = null; for (var player : players) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java index b776d156ce..c66c50b8e4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java @@ -8,6 +8,7 @@ import com.mojang.datafixers.util.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; @@ -17,6 +18,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.component.ResolvableProfile; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.Nullable; @@ -104,8 +106,7 @@ public void applyScryingLensOverlay(List> lines, if (!name.equals(cachedDisplayProfile) || cachedDisplayStack == null) { cachedDisplayProfile = name; var head = new ItemStack(Items.PLAYER_HEAD); - NBTHelper.put(head, "SkullOwner", NbtUtils.writeGameProfile(new CompoundTag(), name)); - head.getItem().verifyTagAfterLoad(head.getOrCreateTag()); + head.set(DataComponents.PROFILE, new ResolvableProfile(cachedDisplayProfile)); cachedDisplayStack = head; } lines.add(new Pair<>(cachedDisplayStack, diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java index 6cb5a1c245..f99d278300 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java @@ -3,11 +3,15 @@ import at.petrak.hexcasting.api.block.circle.BlockAbstractImpetus; import at.petrak.hexcasting.common.lib.HexBlockEntities; import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.Nullable; public class BlockLookingImpetus extends BlockAbstractImpetus { @@ -16,6 +20,11 @@ public BlockLookingImpetus(Properties p_49795_) { super(p_49795_); } + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { + return null; + } + @Nullable @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java index fe4fb73e1b..ec3b4ceff1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java @@ -42,7 +42,7 @@ protected void createBlockStateDefinition(StateDefinition.Builder CODEC = BlockBehaviour.simpleCodec(BlockAmethystDirectional::new); + @Override + protected MapCodec codec() { + return CODEC; + } + public void onProjectileHit(Level level, BlockState state, BlockHitResult result, Projectile projectile) { if (!level.isClientSide) { BlockPos pos = result.getBlockPos(); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java index 6bc4459c00..c94970d4fb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexDoor.java @@ -10,7 +10,7 @@ public class BlockHexDoor extends DoorBlock { public BlockHexDoor(Properties $$0) { - super($$0, HexBlockSetTypes.EDIFIED_WOOD); + super(HexBlockSetTypes.EDIFIED_WOOD, $$0); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFallingBlock.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFallingBlock.java new file mode 100644 index 0000000000..820077f8f7 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFallingBlock.java @@ -0,0 +1,16 @@ +package at.petrak.hexcasting.common.blocks.decoration; + +import com.mojang.serialization.MapCodec; +import net.minecraft.world.level.block.FallingBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; + +public class BlockHexFallingBlock extends FallingBlock { + public BlockHexFallingBlock(Properties props) { + super(props); + } + public static final MapCodec CODEC = BlockBehaviour.simpleCodec(BlockHexFallingBlock::new); + @Override + protected MapCodec codec() { + return CODEC; + } +} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java index 10fc89230e..a36a2a6c3f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexFenceGate.java @@ -12,7 +12,7 @@ public class BlockHexFenceGate extends FenceGateBlock { public BlockHexFenceGate(Properties $$0) { - super($$0, WoodType.DARK_OAK); + super(WoodType.DARK_OAK, $$0); } @SoftImplement("forge") diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java index 5e6a517b1d..0017c066b1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexPressurePlate.java @@ -9,8 +9,8 @@ import net.minecraft.world.level.block.state.BlockState; public class BlockHexPressurePlate extends PressurePlateBlock { - public BlockHexPressurePlate(Sensitivity $$0, Properties $$1) { - super($$0, $$1, HexBlockSetTypes.EDIFIED_WOOD); + public BlockHexPressurePlate(Properties $$0) { + super(HexBlockSetTypes.EDIFIED_WOOD, $$0); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java index 3e2620c59b..62d49a6eeb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexTrapdoor.java @@ -10,7 +10,7 @@ public class BlockHexTrapdoor extends TrapDoorBlock { public BlockHexTrapdoor(Properties $$0) { - super($$0, HexBlockSetTypes.EDIFIED_WOOD); + super(HexBlockSetTypes.EDIFIED_WOOD, $$0); } @SoftImplement("forge") diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java index 355f9edb9a..ecc45f4556 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java @@ -10,7 +10,7 @@ public class BlockHexWoodButton extends ButtonBlock { public BlockHexWoodButton(Properties $$0) { - super($$0, BlockSetType.DARK_OAK, 30, true); + super(BlockSetType.DARK_OAK,30, $$0); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java b/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java index f39e14d47f..8d722cde93 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java @@ -16,11 +16,13 @@ import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.commands.arguments.ResourceLocationArgument; import net.minecraft.core.Registry; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; import java.util.Collection; import java.util.List; @@ -103,13 +105,13 @@ private static int giveAll(CommandSourceStack source, Collection t tag.put(ItemScroll.TAG_PATTERN, pat.serializeToNBT()); var stack = new ItemStack(HexItems.SCROLL_LARGE); - stack.setTag(tag); + stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); for (var player : targets) { var stackEntity = player.drop(stack, false); if (stackEntity != null) { stackEntity.setNoPickUpDelay(); - stackEntity.setThrower(player.getUUID()); + stackEntity.setThrower(player); } count++; @@ -137,7 +139,7 @@ private static int giveOne(CommandSourceStack source, Collection t tag.put(ItemScroll.TAG_PATTERN, pat.serializeToNBT()); var stack = new ItemStack(HexItems.SCROLL_LARGE); - stack.setTag(tag); + stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); source.sendSuccess(() -> Component.translatable( @@ -151,7 +153,7 @@ private static int giveOne(CommandSourceStack source, Collection t var stackEntity = player.drop(stack, false); if (stackEntity != null) { stackEntity.setNoPickUpDelay(); - stackEntity.setThrower(player.getUUID()); + stackEntity.setThrower(player); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java index 03d916c8f7..966c00f4fa 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java @@ -3,6 +3,7 @@ import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.components.ItemIotaHolderComponent; import at.petrak.hexcasting.common.items.storage.ItemScroll; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexSounds; @@ -11,8 +12,10 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.syncher.EntityDataAccessor; @@ -30,6 +33,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -61,7 +65,8 @@ public EntityWallScroll(Level world, BlockPos pos, Direction dir, ItemStack scro } public void recalculateDisplay() { - CompoundTag patternTag = NBTHelper.getCompound(scroll, ItemScroll.TAG_PATTERN); + CompoundTag patternTag = scroll.get(DataComponents.CUSTOM_DATA).copyTag().getCompound(ItemScroll.TAG_PATTERN); + var stuck = ItemStack.EMPTY.get(ItemIotaHolderComponent.COMPONENT_TYPE).iota(); if (patternTag != null) { this.pattern = HexPattern.fromNBT(patternTag); this.isAncient = NBTHelper.hasString(scroll, ItemScroll.TAG_OP_ID); @@ -72,9 +77,8 @@ public void recalculateDisplay() { } @Override - protected void defineSynchedData() { - super.defineSynchedData(); - this.entityData.define(SHOWS_STROKE_ORDER, false); + protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(SHOWS_STROKE_ORDER, false); } public boolean getShowsStrokeOrder() { @@ -85,16 +89,6 @@ public void setShowsStrokeOrder(boolean b) { this.entityData.set(SHOWS_STROKE_ORDER, b); } - @Override - public int getWidth() { - return 16 * blockSize; - } - - @Override - public int getHeight() { - return 16 * blockSize; - } - @Override public void dropItem(@Nullable Entity pBrokenEntity) { if (this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { @@ -132,15 +126,37 @@ public InteractionResult interactAt(Player pPlayer, Vec3 pVec, InteractionHand p return super.interactAt(pPlayer, pVec, pHand); } + @Override + protected AABB calculateBoundingBox(BlockPos blockPos, Direction direction) { + double x = this.pos.getX() + 0.5; double y = this.pos.getY() + 0.5; double z = this.pos.getZ() + 0.5; + double uh = 0.46875; + double sizeX = (this.blockSize * 16) % 32 == 0 ? 0.5 : 0.0; + double sizeY = (this.blockSize * 16) % 32 == 0 ? 0.5 : 0.0; + + x -= (double) direction.getStepX() * 0.46875; + z -= (double) direction.getStepZ() * 0.46875; + y += sizeY; + double width = (double) this.blockSize * 16; double height = (double) this.blockSize * 16; double length = (double) this.blockSize * 16; + if (direction.getAxis() == Direction.Axis.Z) { + length = 1.0; + } else { + width = 1.0; + } + + width /= 32.0; + height /= 32.0; + length /= 32.0; + return new AABB(x - width, y - height, z - length, x + width, y + height, z + length); + } + @Override public void playPlacementSound() { this.playSound(SoundEvents.PAINTING_PLACE, 1.0F, 1.0F); } - @Override - public Packet getAddEntityPacket() { + public ClientboundCustomPayloadPacket getAddEntityPacket() { return IXplatAbstractions.INSTANCE.toVanillaClientboundPacket( - new MsgNewWallScrollS2C(new ClientboundAddEntityPacket(this), + new MsgNewWallScrollS2C(new ClientboundAddEntityPacket(this, this.blockSize, this.pos), pos, direction, scroll, getShowsStrokeOrder(), blockSize)); } @@ -160,7 +176,7 @@ public void readSpawnData(BlockPos pos, Direction dir, ItemStack scrollItem, @Override public void addAdditionalSaveData(CompoundTag tag) { tag.putByte("direction", (byte) this.direction.ordinal()); - tag.put("scroll", HexUtils.serializeToNBT(this.scroll)); + tag.put("scroll", HexUtils.serializeToNBT(this.scroll, this.level().registryAccess())); tag.putBoolean("showsStrokeOrder", this.getShowsStrokeOrder()); tag.putInt("blockSize", this.blockSize); super.addAdditionalSaveData(tag); @@ -169,7 +185,7 @@ public void addAdditionalSaveData(CompoundTag tag) { @Override public void readAdditionalSaveData(CompoundTag tag) { this.direction = Direction.values()[tag.getByte("direction")]; - this.scroll = ItemStack.of(tag.getCompound("scroll")); + this.scroll = ItemStack.parseOptional(this.level().registryAccess(), tag.getCompound("scroll")); this.blockSize = tag.getInt("blockSize"); this.setDirection(this.direction); @@ -186,7 +202,6 @@ public void moveTo(double pX, double pY, double pZ, float pYaw, float pPitch) { this.setPos(pX, pY, pZ); } - @Override public void lerpTo(double pX, double pY, double pZ, float pYaw, float pPitch, int pPosRotationIncrements, boolean pTeleport) { BlockPos blockpos = this.pos.offset((int) (pX - this.getX()), (int) (pY - this.getY()), (int) (pZ - this.getZ())); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java index 036e5129b4..3e104f94dc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java @@ -6,12 +6,15 @@ import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.client.gui.PatternTooltipComponent; +import at.petrak.hexcasting.common.components.ItemIotaHolderComponent; import at.petrak.hexcasting.common.entities.EntityWallScroll; +import at.petrak.hexcasting.common.lib.HexItemComponents; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.common.misc.PatternTooltip; import at.petrak.hexcasting.interop.inline.InlinePatternData; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -21,10 +24,12 @@ import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.gameevent.GameEvent; import org.jetbrains.annotations.Nullable; +import java.util.Objects; import java.util.Optional; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -53,14 +58,14 @@ public ItemScroll(Properties pProperties, int blockSize) { @Override public @Nullable CompoundTag readIotaTag(ItemStack stack) { - CompoundTag pattern = NBTHelper.getCompound(stack, TAG_PATTERN); + Iota pattern = Objects.requireNonNull(stack.get(ItemIotaHolderComponent.COMPONENT_TYPE)).iota(); if (pattern == null) { return null; } // We store only the data part of the iota; pretend the rest of it's there var out = new CompoundTag(); out.putString(HexIotaTypes.KEY_TYPE, "hexcasting:pattern"); - out.put(HexIotaTypes.KEY_DATA, pattern); + out.put(HexIotaTypes.KEY_DATA, pattern.serialize()); return out; } @@ -101,9 +106,9 @@ public InteractionResult useOn(UseOnContext ctx) { var scrollEntity = new EntityWallScroll(level, posInFront, direction, scrollStack, false, this.blockSize); // i guess - var stackTag = itemstack.getTag(); - if (stackTag != null) { - EntityType.updateCustomEntityTag(level, player, scrollEntity, stackTag); + var component = itemstack.get(ItemIotaHolderComponent.COMPONENT_TYPE); + if (component != null) { + EntityType.updateCustomEntityTag(level, player, scrollEntity, CustomData.of((CompoundTag) component.iota().serialize())); } if (scrollEntity.survives()) { @@ -128,12 +133,12 @@ protected boolean mayPlace(Player pPlayer, Direction pDirection, ItemStack pHang @Override public Component getName(ItemStack pStack) { var descID = this.getDescriptionId(pStack); - var ancientId = NBTHelper.getString(pStack, TAG_OP_ID); + var ancientId = pStack.get(DataComponents.CUSTOM_DATA).copyTag().getString(TAG_OP_ID); if (ancientId != null) { return Component.translatable(descID + ".of", Component.translatable("hexcasting.action." + ResourceLocation.tryParse(ancientId))); - } else if (NBTHelper.hasCompound(pStack, TAG_PATTERN)) { - var compound = NBTHelper.getCompound(pStack, ItemScroll.TAG_PATTERN); + } else if (pStack.get(DataComponents.CUSTOM_DATA).contains(TAG_PATTERN)) { + var compound = pStack.get(DataComponents.CUSTOM_DATA).copyTag().getCompound(TAG_PATTERN); var patternLabel = Component.literal(""); if (compound != null) { var pattern = HexPattern.fromNBT(compound); @@ -149,12 +154,12 @@ public Component getName(ItemStack pStack) { @Override public Optional getTooltipImage(ItemStack stack) { - var compound = NBTHelper.getCompound(stack, ItemScroll.TAG_PATTERN); - if (compound != null) { + var compound = stack.get(DataComponents.CUSTOM_DATA).copyTag().getCompound(TAG_PATTERN); + if (!compound.equals(new CompoundTag())) { var pattern = HexPattern.fromNBT(compound); return Optional.of(new PatternTooltip( pattern, - NBTHelper.hasString(stack, ItemScroll.TAG_OP_ID) + stack.get(DataComponents.CUSTOM_DATA).contains(TAG_PATTERN) ? PatternTooltipComponent.ANCIENT_BG : PatternTooltipComponent.PRISTINE_BG)); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java index 97e58a75e4..d8057f07b1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java @@ -20,10 +20,7 @@ import com.mojang.datafixers.util.Pair; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.*; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.material.MapColor; @@ -65,7 +62,7 @@ public static void registerBlockCreativeTab(Consumer r, CreativeModeTab t private static BlockBehaviour.Properties slateish() { return BlockBehaviour.Properties - .copy(Blocks.DEEPSLATE_TILES) + .ofFullCopy(Blocks.DEEPSLATE_TILES) .strength(4f, 4f); } @@ -85,7 +82,7 @@ private static BlockBehaviour.Properties akashicWoodyHard() { private static BlockBehaviour.Properties woodyHard(MapColor color) { return BlockBehaviour.Properties - .copy(Blocks.OAK_LOG) + .ofFullCopy(Blocks.OAK_LOG) .mapColor(color) .sound(SoundType.WOOD) .strength(3f, 4f); @@ -97,7 +94,7 @@ private static BlockBehaviour.Properties edifiedWoody() { private static BlockBehaviour.Properties woody(MapColor color) { return BlockBehaviour.Properties - .copy(Blocks.OAK_LOG) + .ofFullCopy(Blocks.OAK_LOG) .mapColor(color) .sound(SoundType.WOOD) .strength(2f); @@ -105,7 +102,7 @@ private static BlockBehaviour.Properties woody(MapColor color) { private static BlockBehaviour.Properties leaves(MapColor color) { return BlockBehaviour.Properties - .copy(Blocks.OAK_LEAVES) + .ofFullCopy(Blocks.OAK_LEAVES) .strength(0.2F) .randomTicks() .sound(SoundType.GRASS) @@ -118,7 +115,7 @@ private static BlockBehaviour.Properties leaves(MapColor color) { // we have to make it emit light because otherwise it occludes itself and is always dark private static BlockBehaviour.Properties quenched() { return BlockBehaviour.Properties - .copy(Blocks.AMETHYST_BLOCK) + .ofFullCopy(Blocks.AMETHYST_BLOCK) .lightLevel($ -> 4) .noOcclusion(); } @@ -203,17 +200,17 @@ private static BlockBehaviour.Properties quenched() { public static final Block SLATE_BRICKS = blockItem("slate_bricks", new Block(slateish().strength(2f, 4f))); public static final Block SLATE_BRICKS_SMALL = blockItem("slate_bricks_small", new Block(slateish().strength(2f, 4f))); public static final RotatedPillarBlock SLATE_PILLAR = blockItem("slate_pillar", new RotatedPillarBlock(slateish().strength(2f, 4f))); - public static final SandBlock AMETHYST_DUST_BLOCK = blockItem("amethyst_dust_block", - new SandBlock(0xff_b38ef3, BlockBehaviour.Properties.copy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE) - .strength(0.5f).sound(SoundType.SAND))); + public static final BlockHexFallingBlock AMETHYST_DUST_BLOCK = blockItem("amethyst_dust_block", + new BlockHexFallingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE) + .strength(0.5f).sound(SoundType.SAND).mapColor(DyeColor.byFireworkColor(0xff_b38ef3)))); public static final AmethystBlock AMETHYST_TILES = blockItem("amethyst_tiles", - new AmethystBlock(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new AmethystBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final AmethystBlock AMETHYST_BRICKS = blockItem("amethyst_bricks", - new AmethystBlock(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new AmethystBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final AmethystBlock AMETHYST_BRICKS_SMALL = blockItem("amethyst_bricks_small", - new AmethystBlock(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new AmethystBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final BlockAmethystDirectional AMETHYST_PILLAR = blockItem("amethyst_pillar", - new BlockAmethystDirectional(BlockBehaviour.Properties.copy(Blocks.AMETHYST_BLOCK))); + new BlockAmethystDirectional(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final Block SLATE_AMETHYST_TILES = blockItem("slate_amethyst_tiles", new Block(slateish().strength(2f, 4f))); public static final Block SLATE_AMETHYST_BRICKS = blockItem("slate_amethyst_bricks", new Block(slateish().strength(2f, 4f))); public static final Block SLATE_AMETHYST_BRICKS_SMALL = blockItem("slate_amethyst_bricks_small", new Block(slateish().strength(2f, 4f))); @@ -275,7 +272,7 @@ private static BlockBehaviour.Properties quenched() { public static final ButtonBlock EDIFIED_BUTTON = blockItem("edified_button", new BlockHexWoodButton(edifiedWoody().noOcclusion().noCollission())); public static final PressurePlateBlock EDIFIED_PRESSURE_PLATE = blockItem("edified_pressure_plate", - new BlockHexPressurePlate(PressurePlateBlock.Sensitivity.EVERYTHING, + new BlockHexPressurePlate( edifiedWoody().noOcclusion().noCollission())); public static final BlockAkashicLeaves AMETHYST_EDIFIED_LEAVES = blockItem("amethyst_edified_leaves", new BlockAkashicLeaves(leaves(MapColor.COLOR_PURPLE))); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java index 8f6db1efb0..287a6816ec 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java @@ -4,8 +4,12 @@ import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; import com.google.gson.JsonObject; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.GsonHelper; @@ -13,6 +17,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeInput; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.Level; @@ -28,7 +33,7 @@ public record BrainsweepRecipe( BrainsweepeeIngredient entityIn, long mediaCost, BlockState result -) implements Recipe { +) implements Recipe { public boolean matches(BlockState blockIn, Entity victim, ServerLevel level) { return this.blockIn.test(blockIn) && this.entityIn.test(victim, level); } @@ -55,17 +60,22 @@ public boolean matches(Container pContainer, Level pLevel) { return false; } - @Override - public ItemStack assemble(Container pContainer, RegistryAccess access) { - return ItemStack.EMPTY; - } + @Override + public ItemStack assemble(Container recipeInput, HolderLookup.Provider provider) { + return ItemStack.EMPTY; + } @Override public boolean canCraftInDimensions(int pWidth, int pHeight) { return false; } - @Override + @Override + public ItemStack getResultItem(HolderLookup.Provider provider) { + return null; + } + + @Override public ItemStack getResultItem(RegistryAccess registryAccess) { return ItemStack.EMPTY.copy(); } @@ -109,5 +119,15 @@ public void toNetwork(FriendlyByteBuf buf, BrainsweepRecipe recipe) { var result = Block.stateById(buf.readVarInt()); return new BrainsweepRecipe(recipeID, blockIn, brainsweepeeIn, cost, result); } - } + + @Override + public MapCodec codec() { + return null; + } + + @Override + public StreamCodec streamCodec() { + return null; + } + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java index b685b9ea36..509cc3c2a2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java @@ -6,6 +6,7 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.item.ItemPropertyFunction; import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java index 02a024200e..8d0c11a281 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java @@ -19,11 +19,13 @@ import at.petrak.hexcasting.api.player.AltioraAbility; import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.player.Sentinel; +import at.petrak.hexcasting.common.components.PigmentItemComponent; import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; import com.mojang.authlib.GameProfile; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.server.level.ServerLevel; @@ -72,7 +74,7 @@ public interface IXplatAbstractions { void sendPacketTracking(Entity entity, CustomPacketPayload packet); // https://github.com/VazkiiMods/Botania/blob/13b7bcd9cbb6b1a418b0afe455662d29b46f1a7f/Xplat/src/main/java/vazkii/botania/xplat/IXplatAbstractions.java#L157 - Packet toVanillaClientboundPacket(CustomPacketPayload message); + ClientboundCustomPayloadPacket toVanillaClientboundPacket(CustomPacketPayload message); // double getReachDistance(Player player); @@ -127,11 +129,11 @@ public interface IXplatAbstractions { @Nullable ADHexHolder findHexHolder(ItemStack stack); - @Nullable ADVariantItem findVariantHolder(ItemStack stack); - // coooollooorrrs - boolean isPigment(ItemStack stack); + default boolean isPigment(ItemStack stack) { + return stack.has(PigmentItemComponent.COMPONENT_TYPE); + }; ColorProvider getColorProvider(FrozenPigment pigment); diff --git a/Common/src/main/resources/architectury.common.json b/Common/src/main/resources/architectury.common.json new file mode 100644 index 0000000000..e4a0a01454 --- /dev/null +++ b/Common/src/main/resources/architectury.common.json @@ -0,0 +1,3 @@ +{ + "accessWidener": "hexplat.accesswidener" +} \ No newline at end of file diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java index a4a8897afe..a4d47b4776 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.client.renderer.item.ItemPropertyFunction; import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -32,7 +33,7 @@ public class FabricClientXplatImpl implements IClientXplatAbstractions { @Override public void sendPacketToServer(CustomPacketPayload packet) { - ClientPlayNetworking.send(packet.getFabricId(), packet.toBuf()); + ClientPlayNetworking.send(packet); } @Override diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index bea4ef7681..737caa04ce 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -63,24 +63,24 @@ dependencies { neoForge "net.neoforged:neoforge:${neoforgeVersion}" common(project(path: ':Common', configuration: 'namedElements')) { transitive false } shadowBundle(project(path: ':Common', configuration: 'transformProductionNeoForge')) { transitive false } - implementation "thedarkcolour:kotlinforforge:$kotlinForForgeVersion" + implementation "thedarkcolour:kotlinforforge-neoforge:$kotlinForForgeVersion" // === MANDATORY DEPS === - implementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" - implementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-NEOFORGE-SNAPSHOT" - implementation "top.theillusivec4.caelus:caelus-forge:$caelusVersion" + modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" + modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-NEOFORGE-SNAPSHOT" + modImplementation "com.illusivesoulworks.caelus:caelus-forge:$caelusVersion" // implementation("com.samsthenerd.inline:inline-forge:$minecraftVersion-$inlineVersion") // needed for inline to run - runtimeOnly("me.shedaniel.cloth:cloth-config-forge:$clothConfigVersion") + modRuntimeOnly("me.shedaniel.cloth:cloth-config-forge:$clothConfigVersion") // === OPTIONAL DEPS === - compileOnly "dev.emi:emi-neoforge:${emiVersion}:api" - runtimeOnly "dev.emi:emi-neoforge:${emiVersion}" + modCompileOnly "dev.emi:emi-neoforge:${emiVersion}:api" + modRuntimeOnly "dev.emi:emi-neoforge:${emiVersion}" modImplementation "io.wispforest:accessories-neoforge:$accessoriesVersion" - api("com.github.Virtuoel:Pehkui:${pehkuiVersion}-1.21-neoforge") + modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}-1.21-neoforge") // "Required due to issues with JIJ dependency resolving in arch or something" // https://github.com/wisp-forest/accessories @@ -136,6 +136,4 @@ processResources { filesMatching("mods.toml") { expand "version": project.version } -} - -jar.finalizedBy('reobfJar') \ No newline at end of file +} \ No newline at end of file diff --git a/Neoforge/gradle.properties b/Neoforge/gradle.properties index 83205facce..13e6cfd972 100644 --- a/Neoforge/gradle.properties +++ b/Neoforge/gradle.properties @@ -5,4 +5,4 @@ loom.platform=neoforge kotlinForForgeVersion=5.6.0 curiosVersion=5.2.0-beta.3 -caelusVersion=3.1.0+1.20 +caelusVersion=7.0.1+1.21.1 diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java index 30e0e2a53e..581b2c2778 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java @@ -23,11 +23,10 @@ import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; -import net.minecraftforge.client.event.*; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.client.event.*; +import net.neoforged.neoforge.common.NeoForge; import java.io.IOException; import java.util.function.Function; @@ -48,7 +47,7 @@ public static void clientInit(FMLClientSetupEvent evt) { (colorizer, block) -> GLOBAL_BLOCK_COLORS.register(colorizer, block)); }); - var evBus = MinecraftForge.EVENT_BUS; + var evBus = NeoForge.EVENT_BUS; evBus.addListener((ClientPlayerNetworkEvent.LoggingIn e) -> PatternRegistryManifest.processRegistry(null)); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index bf219312fc..64ecbe46f8 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -4,23 +4,23 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; -import net.minecraftforge.common.ForgeConfigSpec; +import net.neoforged.neoforge.common.ModConfigSpec; import java.util.List; import static at.petrak.hexcasting.api.mod.HexConfig.noneMatch; public class ForgeHexConfig implements HexConfig.CommonConfigAccess { - private static ForgeConfigSpec.LongValue dustMediaAmount; - private static ForgeConfigSpec.LongValue shardMediaAmount; - private static ForgeConfigSpec.LongValue chargedCrystalMediaAmount; - private static ForgeConfigSpec.DoubleValue mediaToHealthRate; + private static ModConfigSpec.LongValue dustMediaAmount; + private static ModConfigSpec.LongValue shardMediaAmount; + private static ModConfigSpec.LongValue chargedCrystalMediaAmount; + private static ModConfigSpec.DoubleValue mediaToHealthRate; - private static ForgeConfigSpec.IntValue cypherCooldown; - private static ForgeConfigSpec.IntValue trinketCooldown; - private static ForgeConfigSpec.IntValue artifactCooldown; + private static ModConfigSpec.IntValue cypherCooldown; + private static ModConfigSpec.IntValue trinketCooldown; + private static ModConfigSpec.IntValue artifactCooldown; - public ForgeHexConfig(ForgeConfigSpec.Builder builder) { + public ForgeHexConfig(ModConfigSpec.Builder builder) { builder.push("Media Amounts"); dustMediaAmount = builder.comment("How much media a single Amethyst Dust item is worth") .defineInRange("dustMediaAmount", DEFAULT_DUST_MEDIA_AMOUNT, 0, Integer.MAX_VALUE); @@ -78,13 +78,13 @@ public int artifactCooldown() { } public static class Client implements HexConfig.ClientConfigAccess { - private static ForgeConfigSpec.BooleanValue ctrlTogglesOffStrokeOrder; - private static ForgeConfigSpec.BooleanValue invertSpellbookScrollDirection; - private static ForgeConfigSpec.BooleanValue invertAbacusScrollDirection; - private static ForgeConfigSpec.DoubleValue gridSnapThreshold; - private static ForgeConfigSpec.BooleanValue clickingTogglesDrawing; + private static ModConfigSpec.BooleanValue ctrlTogglesOffStrokeOrder; + private static ModConfigSpec.BooleanValue invertSpellbookScrollDirection; + private static ModConfigSpec.BooleanValue invertAbacusScrollDirection; + private static ModConfigSpec.DoubleValue gridSnapThreshold; + private static ModConfigSpec.BooleanValue clickingTogglesDrawing; - public Client(ForgeConfigSpec.Builder builder) { + public Client(ModConfigSpec.Builder builder) { ctrlTogglesOffStrokeOrder = builder.comment( "Whether the ctrl key will instead turn *off* the color gradient on patterns") .define("ctrlTogglesOffStrokeOrder", DEFAULT_CTRL_TOGGLES_OFF_STROKE_ORDER); @@ -131,26 +131,26 @@ public boolean clickingTogglesDrawing() { } public static class Server implements HexConfig.ServerConfigAccess { - private static ForgeConfigSpec.IntValue opBreakHarvestLevel; - private static ForgeConfigSpec.IntValue maxOpCount; + private static ModConfigSpec.IntValue opBreakHarvestLevel; + private static ModConfigSpec.IntValue maxOpCount; - private static ForgeConfigSpec.IntValue maxSpellCircleLength; + private static ModConfigSpec.IntValue maxSpellCircleLength; - private static ForgeConfigSpec.ConfigValue> actionDenyList; - private static ForgeConfigSpec.ConfigValue> circleActionDenyList; + private static ModConfigSpec.ConfigValue> actionDenyList; + private static ModConfigSpec.ConfigValue> circleActionDenyList; - private static ForgeConfigSpec.BooleanValue villagersOffendedByMindMurder; + private static ModConfigSpec.BooleanValue villagersOffendedByMindMurder; - private static ForgeConfigSpec.ConfigValue> tpDimDenyList; + private static ModConfigSpec.ConfigValue> tpDimDenyList; - private static ForgeConfigSpec.BooleanValue doesTrueNameHaveAmbit; + private static ModConfigSpec.BooleanValue doesTrueNameHaveAmbit; - private static ForgeConfigSpec.ConfigValue> fewScrollTables; - private static ForgeConfigSpec.ConfigValue> someScrollTables; - private static ForgeConfigSpec.ConfigValue> manyScrollTables; + private static ModConfigSpec.ConfigValue> fewScrollTables; + private static ModConfigSpec.ConfigValue> someScrollTables; + private static ModConfigSpec.ConfigValue> manyScrollTables; - public Server(ForgeConfigSpec.Builder builder) { + public Server(ModConfigSpec.Builder builder) { builder.push("Spells"); maxOpCount = builder.comment("The maximum number of actions that can be executed in one tick, to avoid " + "hanging the server.") @@ -228,7 +228,7 @@ public boolean trueNameHasAmbit() { } private static boolean isValidReslocArg(Object o) { - return o instanceof String s && ResourceLocation.isValidResourceLocation(s); + return o instanceof String s && ResourceLocation.tryParse(s) != null; } } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index 16bc2a0549..2846ef1cfc 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -47,38 +47,38 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockSetType; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.ToolActions; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.EntityAttributeModificationEvent; -import net.minecraftforge.event.entity.living.LivingConversionEvent; -import net.minecraftforge.event.entity.living.LivingEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.level.BlockEvent; -import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.ModLoadingContext; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.registries.RegisterEvent; -import thedarkcolour.kotlinforforge.KotlinModLoadingContext; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; +import net.neoforged.neoforge.common.ItemAbilities; +import net.neoforged.neoforge.common.ModConfigSpec; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.common.crafting.CraftingHelper; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.event.RegisterCommandsEvent; +import net.neoforged.neoforge.event.entity.EntityAttributeModificationEvent; +import net.neoforged.neoforge.event.entity.living.LivingConversionEvent; +import net.neoforged.neoforge.event.entity.living.LivingEvent; +import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.event.server.ServerStartedEvent; +import net.neoforged.neoforge.event.tick.LevelTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; +import net.neoforged.neoforge.registries.RegisterEvent; +import thedarkcolour.kotlinforforge.neoforge.KotlinModLoadingContext; import java.util.function.BiConsumer; import java.util.function.Consumer; @Mod(HexAPI.MOD_ID) public class ForgeHexInitializer { - public ForgeHexInitializer() { + public ForgeHexInitializer(ModContainer container) { initConfig(); initRegistries(); initRegistry(); @@ -86,9 +86,9 @@ public ForgeHexInitializer() { } private static void initConfig() { - var config = new ForgeConfigSpec.Builder().configure(ForgeHexConfig::new); - var clientConfig = new ForgeConfigSpec.Builder().configure(ForgeHexConfig.Client::new); - var serverConfig = new ForgeConfigSpec.Builder().configure(ForgeHexConfig.Server::new); + var config = new ModConfigSpec.Builder().configure(ForgeHexConfig::new); + var clientConfig = new ModConfigSpec.Builder().configure(ForgeHexConfig.Client::new); + var serverConfig = new ModConfigSpec.Builder().configure(ForgeHexConfig.Server::new); HexConfig.setCommon(config.getLeft()); HexConfig.setClient(clientConfig.getLeft()); HexConfig.setServer(serverConfig.getLeft()); @@ -161,7 +161,7 @@ private static void bind(ResourceKey> registry, private static void initListeners() { var modBus = getModEventBus(); - var evBus = MinecraftForge.EVENT_BUS; + var evBus = NeoForge.EVENT_BUS; DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> modBus.register(ForgeHexClientInitializer.class)); @@ -212,15 +212,15 @@ private static void initListeners() { evBus.addListener((LivingConversionEvent.Post evt) -> BrainsweepingEvents.copyBrainsweepPostTransformation(evt.getEntity(), evt.getOutcome())); - evBus.addListener((LivingEvent.LivingTickEvent evt) -> { + evBus.addListener((LivingEvent evt) -> { if (evt.getEntity() instanceof ServerPlayer splayer) { OpFlight.tickDownFlight(splayer); OpAltiora.checkPlayerCollision(splayer); } }); - evBus.addListener((TickEvent.LevelTickEvent evt) -> { - if (evt.phase == TickEvent.Phase.END && evt.level instanceof ServerLevel world) { + evBus.addListener((LevelTickEvent evt) -> { + if (evt instanceof LevelTickEvent.Post && evt.getLevel() instanceof ServerLevel world) { PlayerPositionRecorder.updateAllPlayers(world); } }); @@ -255,7 +255,7 @@ private static void initListeners() { // Implemented with a mixin on Farbc evBus.addListener((BlockEvent.BlockToolModificationEvent evt) -> { - if (!evt.isSimulated() && evt.getToolAction() == ToolActions.AXE_STRIP) { + if (!evt.isSimulated() && evt.getItemAbility() == ItemAbilities.AXE_STRIP) { BlockState bs = evt.getState(); var output = HexStrippables.STRIPPABLES.get(bs.getBlock()); if (output != null) { @@ -266,9 +266,6 @@ private static void initListeners() { // Caps are cardinal components on farbc modBus.addListener(ForgeCapabilityHandler::registerCaps); - evBus.addGenericListener(ItemStack.class, ForgeCapabilityHandler::attachItemCaps); - evBus.addGenericListener(BlockEntity.class, ForgeCapabilityHandler::attachBlockEntityCaps); - evBus.addGenericListener(Entity.class, ForgeCapabilityHandler::attachEntityCaps); modBus.register(ForgeHexDataGenerators.class); modBus.register(ForgeCapabilityHandler.class); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java index 502357ab3a..8ecf78f7fb 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java @@ -15,7 +15,6 @@ import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; -import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.decoration.ItemFrame; @@ -24,18 +23,18 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ForgeCapabilities; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; -import net.minecraftforge.common.util.LazyOptional; -import net.minecraftforge.common.util.NonNullSupplier; -import net.minecraftforge.event.AttachCapabilitiesEvent; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.neoforge.capabilities.BaseCapability; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.capabilities.ICapabilityProvider; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Optional; import java.util.function.BooleanSupplier; import java.util.function.Function; +import java.util.function.Supplier; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -78,10 +77,12 @@ public class ForgeCapabilityHandler { public static final ResourceLocation PATTERN_SPIRAL = modLoc("pattern_spiral"); public static void registerCaps(RegisterCapabilitiesEvent evt) { - evt.register(ADMediaHolder.class); - evt.register(ADIotaHolder.class); - evt.register(ADHexHolder.class); - evt.register(ADPigment.class); + evt.registerBlockEntity( + Capabilities.ItemHandler.BLOCK, + , + (impetus, context) -> provide(impetus, Capabilities.ItemHandler.BLOCK, + () -> new ForgeImpetusCapability((BlockEntityAbstractImpetus) impetus) + ); } public static void attachItemCaps(AttachCapabilitiesEvent evt) { @@ -159,57 +160,54 @@ public static void attachEntityCaps(AttachCapabilitiesEvent evt) { } } - public static void attachBlockEntityCaps(AttachCapabilitiesEvent evt) { - if (evt.getObject() instanceof BlockEntityAbstractImpetus impetus) { - evt.addCapability(IMPETUS_HANDLER, provide(impetus, ForgeCapabilities.ITEM_HANDLER, - () -> new ForgeImpetusCapability(impetus))); - } - } - // i do not know why we need super here - private static SimpleProvider wrapItemEntityDelegate(E entity, + private static SimpleProvider wrapItemEntityDelegate(E entity, Function make) { - return provide(entity, HexCapabilities.IOTA, + return provide(entity, HexCapabilities.ITEM_IOTA, () -> new CapEntityIotaHolder.Wrapper(make.apply(entity))); } - private static SimpleProvider provide(Entity entity, Capability capability, - NonNullSupplier supplier) { + private static SimpleProvider provide(Entity entity, BaseCapability capability, + Supplier supplier) { return provide(entity::isRemoved, capability, supplier); } - private static SimpleProvider provide(BlockEntity be, Capability capability, - NonNullSupplier supplier) { + private static SimpleProvider provide(BlockEntity be, BaseCapability capability, + Supplier supplier) { return provide(be::isRemoved, capability, supplier); } - public static SimpleProvider provide(ItemStack stack, Capability capability, - NonNullSupplier supplier) { + public static SimpleProvider provide(ItemStack stack, BaseCapability capability, + Supplier supplier) { return provide(stack::isEmpty, capability, supplier); } - private static SimpleProvider provide(BooleanSupplier invalidated, Capability capability, - NonNullSupplier supplier) { - return new SimpleProvider<>(invalidated, capability, LazyOptional.of(supplier)); + private static SimpleProvider provide(BooleanSupplier invalidated, BaseCapability capability, + Supplier supplier) { + return new SimpleProvider<>(invalidated, capability, Optional.of(supplier)); } - public static ICapabilityProvider makeProvider(Capability cap, U instance) { - LazyOptional lazyInstanceButNotReally = LazyOptional.of(() -> instance); + public static ICapabilityProvider makeProvider(BaseCapability cap, CAP instance) { + Optional> lazyInstanceButNotReally = Optional.of(() -> instance); return new SimpleProvider<>(() -> false, cap, lazyInstanceButNotReally); } - public record SimpleProvider(BooleanSupplier invalidated, - Capability capability, - LazyOptional instance) implements ICapabilityProvider { + public record SimpleProvider(BooleanSupplier invalidated, + BaseCapability capability, + Optional> instance) implements ICapabilityProvider { @NotNull - @Override - public LazyOptional getCapability(@NotNull Capability cap, @Nullable Direction side) { + public Optional getCapability(@NotNull BaseCapability cap) { if (invalidated.getAsBoolean()) { - return LazyOptional.empty(); + return Optional.empty(); } - return cap == capability ? instance.cast() : LazyOptional.empty(); + return cap == capability ? instance : Optional.empty(); + } + + @Override + public @Nullable Object getCapability(Object object, Object object2) { + return null; } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java index 9da53fa9a5..45d22e2eb8 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeImpetusCapability.java @@ -2,7 +2,7 @@ import at.petrak.hexcasting.api.casting.circles.BlockEntityAbstractImpetus; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.items.IItemHandler; +import net.neoforged.neoforge.items.IItemHandler; import org.jetbrains.annotations.NotNull; public record ForgeImpetusCapability(BlockEntityAbstractImpetus impetus) implements IItemHandler { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java index 9db3e48d0a..07e25361af 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java @@ -2,24 +2,42 @@ import at.petrak.hexcasting.api.addldata.*; import at.petrak.hexcasting.api.client.ClientCastingStack; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.common.capabilities.CapabilityToken; +import net.neoforged.neoforge.capabilities.EntityCapability; +import net.neoforged.neoforge.capabilities.ItemCapability; import java.util.function.Supplier; +import static at.petrak.hexcasting.api.HexAPI.modLoc; + public final class HexCapabilities { - public static final Capability MEDIA = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability IOTA = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability STORED_HEX = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability VARIANT_ITEM = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability COLOR = CapabilityManager.get(new CapabilityToken<>() { - }); - public static final Capability> CLIENT_CASTING_STACK = CapabilityManager.get(new CapabilityToken<>() { - }); + public static final ItemCapability MEDIA = + ItemCapability.createVoid( + modLoc("item_media_holder"), + ADMediaHolder.class + ); + public static final EntityCapability MEDIA_ENTITY = + EntityCapability.createVoid( + modLoc("entity_media_holder"), + ADMediaHolder.class + ); + + public static final ItemCapability IOTA = ItemCapability.createVoid( + modLoc("item_iota_holder"), + ADIotaHolder.class + ); + public static final EntityCapability IOTA_ENTITY = EntityCapability.createVoid( + modLoc("entity_iota_holder"), + ADIotaHolder.class + ); + + public static final ItemCapability STORED_HEX = ItemCapability.createVoid( + modLoc("item_hex_holder"), + ADHexHolder.class + ); + + public static final ItemCapability COLOR = ItemCapability.createVoid( + modLoc("item_pigment"), + ADPigment.class + ); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java index dfb750c35a..6398786f55 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java @@ -9,15 +9,7 @@ import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.ItemStack; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.fml.InterModComms; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; -import top.theillusivec4.curios.api.CuriosCapability; -import top.theillusivec4.curios.api.SlotContext; -import top.theillusivec4.curios.api.SlotTypeMessage; -import top.theillusivec4.curios.api.SlotTypePreset; -import top.theillusivec4.curios.api.type.capability.ICurio; + import java.util.UUID; import java.util.concurrent.atomic.AtomicReference; @@ -50,7 +42,7 @@ public Multimap getAttributeModifiers(SlotContext } public static ICapabilityProvider curioCap(ItemStack stack) { - return ForgeCapabilityHandler.makeProvider(CuriosCapability.ITEM, new Wrapper(stack)); + return ForgeCapabilityHandler.makeProvider(CuriosCapability.ITEM); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java index 78485aa6f9..9bb5f298cf 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java @@ -1,11 +1,14 @@ package at.petrak.hexcasting.forge.network; import at.petrak.hexcasting.common.msgs.*; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; -import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.NetworkRegistry; -import net.minecraftforge.network.simple.SimpleChannel; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; +import net.neoforged.neoforge.network.handlers.ClientPayloadHandler; +import net.neoforged.neoforge.network.handling.IPayloadHandler; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; import org.apache.logging.log4j.util.TriConsumer; import java.util.function.BiConsumer; @@ -15,68 +18,42 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public class ForgePacketHandler { - private static final String PROTOCOL_VERSION = "1"; - private static final SimpleChannel NETWORK = NetworkRegistry.newSimpleChannel( - modLoc("main"), - () -> PROTOCOL_VERSION, - PROTOCOL_VERSION::equals, - PROTOCOL_VERSION::equals - ); - public static SimpleChannel getNetwork() { - return NETWORK; - } - - public static void init() { - int messageIdx = 0; + @SubscribeEvent + public static void register(RegisterPayloadHandlersEvent event) { + final PayloadRegistrar registrar = event.registrar("1"); // Client -> server - NETWORK.registerMessage(messageIdx++, MsgNewSpellPatternC2S.class, MsgNewSpellPatternC2S::serialize, - MsgNewSpellPatternC2S::deserialize, makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); - NETWORK.registerMessage(messageIdx++, MsgShiftScrollC2S.class, MsgShiftScrollC2S::serialize, - MsgShiftScrollC2S::deserialize, makeServerBoundHandler(MsgShiftScrollC2S::handle)); + registrar.playToServer(MsgNewSpellPatternC2S.ID, MsgNewSpellPatternC2S.CODEC, makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); + registrar.playToServer(MsgShiftScrollC2S.ID, MsgShiftScrollC2S.CODEC, makeServerBoundHandler(MsgShiftScrollC2S::handle)); // Server -> client - NETWORK.registerMessage(messageIdx++, MsgNewSpellPatternS2C.class, MsgNewSpellPatternS2C::serialize, - MsgNewSpellPatternS2C::deserialize, makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgBlinkS2C.class, MsgBlinkS2C::serialize, - MsgBlinkS2C::deserialize, makeClientBoundHandler(MsgBlinkS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgSentinelStatusUpdateAck.class, MsgSentinelStatusUpdateAck::serialize, - MsgSentinelStatusUpdateAck::deserialize, makeClientBoundHandler(MsgSentinelStatusUpdateAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgPigmentUpdateAck.class, MsgPigmentUpdateAck::serialize, - MsgPigmentUpdateAck::deserialize, makeClientBoundHandler(MsgPigmentUpdateAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgAltioraUpdateAck.class, MsgAltioraUpdateAck::serialize, - MsgAltioraUpdateAck::deserialize, makeClientBoundHandler(MsgAltioraUpdateAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgCastParticleS2C.class, MsgCastParticleS2C::serialize, - MsgCastParticleS2C::deserialize, makeClientBoundHandler(MsgCastParticleS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgOpenSpellGuiS2C.class, MsgOpenSpellGuiS2C::serialize, - MsgOpenSpellGuiS2C::deserialize, makeClientBoundHandler(MsgOpenSpellGuiS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgBeepS2C.class, MsgBeepS2C::serialize, - MsgBeepS2C::deserialize, makeClientBoundHandler(MsgBeepS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgBrainsweepAck.class, MsgBrainsweepAck::serialize, - MsgBrainsweepAck::deserialize, makeClientBoundHandler(MsgBrainsweepAck::handle)); - NETWORK.registerMessage(messageIdx++, MsgNewWallScrollS2C.class, MsgNewWallScrollS2C::serialize, - MsgNewWallScrollS2C::deserialize, makeClientBoundHandler(MsgNewWallScrollS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgRecalcWallScrollDisplayS2C.class, MsgRecalcWallScrollDisplayS2C::serialize, - MsgRecalcWallScrollDisplayS2C::deserialize, makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgNewSpiralPatternsS2C.class, MsgNewSpiralPatternsS2C::serialize, - MsgNewSpiralPatternsS2C::deserialize, makeClientBoundHandler(MsgNewSpiralPatternsS2C::handle)); - NETWORK.registerMessage(messageIdx++, MsgClearSpiralPatternsS2C.class, MsgClearSpiralPatternsS2C::serialize, - MsgClearSpiralPatternsS2C::deserialize, makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); + registrar.playToClient(MsgNewSpellPatternS2C.ID, MsgNewSpellPatternS2C.CODEC, makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); + registrar.playToClient(MsgNewSpellPatternS2C.ID, MsgNewSpellPatternS2C.CODEC, makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); + registrar.playToClient(MsgBlinkS2C.ID, MsgBlinkS2C.CODEC, makeClientBoundHandler(MsgBlinkS2C::handle)); + registrar.playToClient(MsgSentinelStatusUpdateAck.ID, MsgSentinelStatusUpdateAck.CODEC, makeClientBoundHandler(MsgSentinelStatusUpdateAck::handle)); + registrar.playToClient(MsgPigmentUpdateAck.ID, MsgPigmentUpdateAck.CODEC, makeClientBoundHandler(MsgPigmentUpdateAck::handle)); + registrar.playToClient(MsgAltioraUpdateAck.ID, MsgAltioraUpdateAck.CODEC, makeClientBoundHandler(MsgAltioraUpdateAck::handle)); + registrar.playToClient(MsgCastParticleS2C.ID, MsgCastParticleS2C.CODEC, makeClientBoundHandler(MsgCastParticleS2C::handle)); + registrar.playToClient(MsgOpenSpellGuiS2C.ID, MsgOpenSpellGuiS2C.CODEC, makeClientBoundHandler(MsgOpenSpellGuiS2C::handle)); + registrar.playToClient(MsgBeepS2C.ID, MsgBeepS2C.CODEC, makeClientBoundHandler(MsgBeepS2C::handle)); + registrar.playToClient(MsgBrainsweepAck.ID, MsgBrainsweepAck.CODEC, makeClientBoundHandler(MsgBrainsweepAck::handle)); + registrar.playToClient(MsgNewWallScrollS2C.ID, MsgNewWallScrollS2C.CODEC, makeClientBoundHandler(MsgNewWallScrollS2C::handle)); + registrar.playToClient(MsgRecalcWallScrollDisplayS2C.ID, MsgRecalcWallScrollDisplayS2C.CODEC, makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::handle)); + registrar.playToClient(MsgNewSpiralPatternsS2C.ID, MsgNewSpiralPatternsS2C.CODEC, makeClientBoundHandler(MsgNewSpiralPatternsS2C::handle)); + registrar.playToClient(MsgClearSpiralPatternsS2C.ID, MsgClearSpiralPatternsS2C.CODEC, makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); } - private static BiConsumer> makeServerBoundHandler( + private static IPayloadHandler makeServerBoundHandler( TriConsumer handler) { return (m, ctx) -> { - handler.accept(m, ctx.get().getSender().getServer(), ctx.get().getSender()); - ctx.get().setPacketHandled(true); + handler.accept(m, ctx.player().getServer(), (ServerPlayer) ctx.player()); }; } - private static BiConsumer> makeClientBoundHandler(Consumer consumer) { + private static IPayloadHandler makeClientBoundHandler(Consumer consumer) { return (m, ctx) -> { consumer.accept(m); - ctx.get().setPacketHandled(true); }; } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java index 434104aa9b..5381ca9e4a 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java @@ -11,11 +11,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraftforge.common.crafting.AbstractIngredient; -import net.minecraftforge.common.crafting.CraftingHelper; -import net.minecraftforge.common.crafting.IIngredientSerializer; -import net.minecraftforge.common.crafting.PartialNBTIngredient; -import net.minecraftforge.registries.ForgeRegistries; +import net.neoforged.neoforge.common.crafting.ICustomIngredient; +import net.neoforged.neoforge.common.crafting.IngredientType; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -24,7 +21,7 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; -public class ForgeUnsealedIngredient extends AbstractIngredient { +public class ForgeUnsealedIngredient implements ICustomIngredient { public static final ResourceLocation ID = modLoc("unsealed"); private final ItemStack stack; @@ -62,11 +59,21 @@ public boolean test(@Nullable ItemStack input) { return false; } + @Override + public Stream getItems() { + return Stream.empty(); + } + @Override public boolean isSimple() { return false; } + @Override + public IngredientType getType() { + return null; + } + @Override public @NotNull IIngredientSerializer getSerializer() { return ForgeUnsealedIngredient.Serializer.INSTANCE; diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java index e1f8f9a867..7a1f95d82e 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java @@ -10,6 +10,7 @@ import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.client.renderer.item.ItemPropertyFunction; import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -48,7 +49,7 @@ public void registerItemProperty(Item item, ResourceLocation id, ItemPropertyFun @Override public ClientCastingStack getClientCastingStack(Player player) { - var maybeCap = player.getCapability(HexCapabilities.CLIENT_CASTING_STACK).resolve(); + var maybeCap = player.getCapability(HexCapabilities.CLIENT_CASTING_STACK); if (maybeCap.isEmpty()) return new ClientCastingStack(); // lie return maybeCap.get().get(); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java index f325aa003b..40623c5324 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java @@ -3,7 +3,6 @@ import at.petrak.hexcasting.api.addldata.ADHexHolder; import at.petrak.hexcasting.api.addldata.ADIotaHolder; import at.petrak.hexcasting.api.addldata.ADMediaHolder; -import at.petrak.hexcasting.api.addldata.ADVariantItem; import at.petrak.hexcasting.api.casting.ActionRegistryEntry; import at.petrak.hexcasting.api.casting.arithmetic.Arithmetic; import at.petrak.hexcasting.api.casting.castables.SpecialHandler; @@ -29,7 +28,6 @@ import at.petrak.hexcasting.forge.cap.HexCapabilities; import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; import at.petrak.hexcasting.forge.mixin.ForgeAccessorBuiltInRegistries; -import at.petrak.hexcasting.forge.network.ForgePacketHandler; import at.petrak.hexcasting.forge.network.MsgBrainsweepAck; import at.petrak.hexcasting.forge.recipe.ForgeUnsealedIngredient; import at.petrak.hexcasting.interop.HexInterop; @@ -45,9 +43,8 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; -import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -72,33 +69,33 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.Vec3; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.common.*; -import net.minecraftforge.common.loot.CanToolPerformAction; -import net.minecraftforge.common.util.FakePlayerFactory; -import net.minecraftforge.event.level.BlockEvent; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidType; -import net.minecraftforge.fluids.FluidUtil; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fml.ModContainer; -import net.minecraftforge.fml.ModList; -import net.minecraftforge.fml.loading.FMLLoader; -import net.minecraftforge.network.NetworkDirection; -import net.minecraftforge.network.PacketDistributor; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLLoader; +import net.neoforged.neoforge.common.CommonHooks; +import net.neoforged.neoforge.common.ItemAbilities; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.common.loot.CanItemPerformAbility; +import net.neoforged.neoforge.common.util.FakePlayerFactory; +import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.fluids.FluidStack; +import net.neoforged.neoforge.fluids.FluidType; +import net.neoforged.neoforge.fluids.FluidUtil; +import net.neoforged.neoforge.fluids.capability.IFluidHandler; +import net.neoforged.neoforge.network.PacketDistributor; import org.jetbrains.annotations.Nullable; -import top.theillusivec4.caelus.api.CaelusApi; +import com.illusivesoulworks.caelus.api.CaelusApi; import virtuoel.pehkui.api.ScaleTypes; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.UUID; import java.util.function.BiFunction; import java.util.function.Supplier; import static at.petrak.hexcasting.api.HexAPI.modLoc; -import static net.minecraftforge.fluids.capability.IFluidHandler.FluidAction.EXECUTE; + public class ForgeXplatImpl implements IXplatAbstractions { @Override @@ -133,8 +130,7 @@ public void setBrainsweepAddlData(Mob mob) { mob.getPersistentData().putBoolean(TAG_BRAINSWEPT, true); if (mob.level() instanceof ServerLevel) { - ForgePacketHandler.getNetwork() - .send(PacketDistributor.TRACKING_ENTITY.with(() -> mob), MsgBrainsweepAck.of(mob)); + sendPacketTracking(mob, MsgBrainsweepAck.of(mob)); } } @@ -166,12 +162,12 @@ public void setAltiora(Player player, @Nullable AltioraAbility altiora) { } // The elytra ability is done with an event on fabric - var elytraing = CaelusApi.getInstance().getFlightAttribute(); - var inst = player.getAttributes().getInstance(elytraing); + var elytraing = CaelusApi.getInstance().getFallFlyingAttribute(); + var inst = player.getAttribute(elytraing); if (altiora != null) { if (inst.getModifier(ALTIORA_ATTRIBUTE_ID) == null) { - inst.addTransientModifier(new AttributeModifier(ALTIORA_ATTRIBUTE_ID, "Altiora", 1.0, - AttributeModifier.Operation.ADDITION)); + inst.addTransientModifier(new AttributeModifier(ALTIORA_ATTRIBUTE_ID, 1.0, + AttributeModifier.Operation.ADD_VALUE)); } } else { inst.removeModifier(ALTIORA_ATTRIBUTE_ID); @@ -246,7 +242,7 @@ public FlightAbility getFlight(ServerPlayer player) { var origin = HexUtils.vecFromNBT(tag.getCompound(TAG_FLIGHT_ORIGIN)); var radius = tag.getDouble(TAG_FLIGHT_RADIUS); var dimension = ResourceKey.create(Registries.DIMENSION, - new ResourceLocation(tag.getString(TAG_FLIGHT_DIMENSION))); + ResourceLocation.parse(tag.getString(TAG_FLIGHT_DIMENSION))); return new FlightAbility(timeLeft, dimension, origin, radius); } return null; @@ -278,7 +274,7 @@ public Sentinel getSentinel(Player player) { var extendsRange = tag.getBoolean(TAG_SENTINEL_GREATER); var position = HexUtils.vecFromNBT(tag.getCompound(TAG_SENTINEL_POSITION)); var dimension = ResourceKey.create(Registries.DIMENSION, - new ResourceLocation(tag.getString(TAG_SENTINEL_DIMENSION))); + ResourceLocation.parse(tag.getString(TAG_SENTINEL_DIMENSION))); return new Sentinel(extendsRange, position, dimension); } @@ -312,77 +308,63 @@ public void clearCastingData(ServerPlayer player) { @Override public @Nullable ADMediaHolder findMediaHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.MEDIA).resolve(); - return maybeCap.orElse(null); + return stack.getCapability(HexCapabilities.MEDIA); } @Override public @Nullable ADMediaHolder findMediaHolder(ServerPlayer player) { - var maybeCap = player.getCapability(HexCapabilities.MEDIA).resolve(); - return maybeCap.orElse(null); + return player.getCapability(HexCapabilities.MEDIA_ENTITY); } @Override public @Nullable ADIotaHolder findDataHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.IOTA).resolve(); - return maybeCap.orElse(null); + return stack.getCapability(HexCapabilities.IOTA); } @Override public @Nullable ADIotaHolder findDataHolder(Entity entity) { - var maybeCap = entity.getCapability(HexCapabilities.IOTA).resolve(); - return maybeCap.orElse(null); + return entity.getCapability(HexCapabilities.IOTA_ENTITY); } @Override public @Nullable ADHexHolder findHexHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.STORED_HEX).resolve(); - return maybeCap.orElse(null); - } - - @Override - public @Nullable ADVariantItem findVariantHolder(ItemStack stack) { - var maybeCap = stack.getCapability(HexCapabilities.VARIANT_ITEM).resolve(); - return maybeCap.orElse(null); - } - - @Override - public boolean isPigment(ItemStack stack) { - return stack.getCapability(HexCapabilities.COLOR).isPresent(); + return stack.getCapability(HexCapabilities.STORED_HEX); } @Override public ColorProvider getColorProvider(FrozenPigment pigment) { - var maybePigment = pigment.item().getCapability(HexCapabilities.COLOR).resolve(); - if (maybePigment.isPresent()) { - return maybePigment.get().provideColor(pigment.owner()); - } - return ColorProvider.MISSING; + var maybePigment = pigment.item().getCapability(HexCapabilities.COLOR); + assert maybePigment != null; + return maybePigment.provideColor(pigment.owner()); } @Override public void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet) { - ForgePacketHandler.getNetwork().send(PacketDistributor.PLAYER.with(() -> target), packet); + target.connection.send(packet); } @Override public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, CustomPacketPayload packet) { - ForgePacketHandler.getNetwork().send(PacketDistributor.NEAR.with(() -> new PacketDistributor.TargetPoint( - pos.x, pos.y, pos.z, radius * radius, dimension.dimension() - )), packet); + List players = dimension.getPlayers((player) -> { + double r2 = radius * radius; + return player.level() == dimension && player.position().distanceToSqr(pos) <= r2; + }); + for (ServerPlayer player : players) { + player.connection.send(packet); + } } @Override public void sendPacketTracking(Entity entity, CustomPacketPayload packet) { - ForgePacketHandler.getNetwork().send(PacketDistributor.TRACKING_ENTITY.with(() -> entity), packet); + PacketDistributor.sendToPlayersTrackingEntity(entity, packet); } @Override - public Packet toVanillaClientboundPacket(CustomPacketPayload message) { + public ClientboundCustomPayloadPacket toVanillaClientboundPacket(CustomPacketPayload message) { //noinspection unchecked - return (Packet) ForgePacketHandler.getNetwork().toVanillaPacket(message, NetworkDirection.PLAY_TO_CLIENT); + return message.toVanillaClientbound(); } @Override @@ -393,19 +375,19 @@ public BlockEntityType createBlockEntityType(BiFuncti @Override public boolean tryPlaceFluid(Level level, InteractionHand hand, BlockPos pos, Fluid fluid) { - Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP).resolve(); + Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP); return handler.isPresent() && - handler.get().fill(new FluidStack(fluid, FluidType.BUCKET_VOLUME), EXECUTE) > 0; + handler.get().fill(new FluidStack(fluid, FluidType.BUCKET_VOLUME), IFluidHandler.FluidAction.EXECUTE) > 0; } @Override public boolean drainAllFluid(Level level, BlockPos pos) { - Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP).resolve(); + Optional handler = FluidUtil.getFluidHandler(level, pos, Direction.UP); if (handler.isPresent()) { boolean any = false; IFluidHandler pool = handler.get(); for (int i = 0; i < pool.getTanks(); i++) { - if (!pool.drain(pool.getFluidInTank(i), EXECUTE).isEmpty()) { + if (!pool.drain(pool.getFluidInTank(i), IFluidHandler.FluidAction.EXECUTE).isEmpty()) { any = true; } } @@ -416,12 +398,12 @@ public boolean drainAllFluid(Level level, BlockPos pos) { @Override public Ingredient getUnsealedIngredient(ItemStack stack) { - return ForgeUnsealedIngredient.of(stack); + return ForgeUnsealedIngredient.of(stack).toVanilla(); } @Override public boolean isCorrectTierForDrops(Tier tier, BlockState bs) { - return !bs.requiresCorrectToolForDrops() || TierSortingRegistry.isCorrectTierForDrops(tier, bs); + return !bs.requiresCorrectToolForDrops(); } @Override @@ -432,12 +414,12 @@ public Item.Properties addEquipSlotFabric(EquipmentSlot slot) { private static final IXplatTags TAGS = new IXplatTags() { @Override public TagKey amethystDust() { - return HexTags.Items.create(new ResourceLocation("forge", "dusts/amethyst")); + return HexTags.Items.create(ResourceLocation.fromNamespaceAndPath("forge", "dusts/amethyst")); } @Override public TagKey gems() { - return HexTags.Items.create(new ResourceLocation("forge", "gems")); + return HexTags.Items.create(ResourceLocation.fromNamespaceAndPath("forge", "gems")); } }; @@ -448,7 +430,7 @@ public IXplatTags tags() { @Override public LootItemCondition.Builder isShearsCondition() { - return CanToolPerformAction.canToolPerformAction(ToolActions.SHEARS_DIG); + return CanItemPerformAbility.canItemPerformAbility(ItemAbilities.SHEARS_DIG); } @Override @@ -526,7 +508,7 @@ public Registry getEvalSoundRegistry() { public boolean isBreakingAllowed(ServerLevel world, BlockPos pos, BlockState state, @Nullable Player player) { if (player == null) player = FakePlayerFactory.get(world, HEXCASTING); - return !MinecraftForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, pos, state, player)); + return !NeoForge.EVENT_BUS.post(new BlockEvent.BreakEvent(world, pos, state, player)).isCanceled(); } @Override @@ -535,7 +517,7 @@ public boolean isPlacingAllowed(ServerLevel world, BlockPos pos, ItemStack block player = FakePlayerFactory.get(world, HEXCASTING); ItemStack cached = player.getMainHandItem(); player.setItemInHand(InteractionHand.MAIN_HAND, blockStack.copy()); - var evt = ForgeHooks.onRightClickBlock(player, InteractionHand.MAIN_HAND, pos, + var evt = CommonHooks.onRightClickBlock(player, InteractionHand.MAIN_HAND, pos, new BlockHitResult(Vec3.atCenterOf(pos), Direction.DOWN, pos, true)); player.setItemInHand(InteractionHand.MAIN_HAND, cached); return !evt.isCanceled(); @@ -583,7 +565,7 @@ public void setScale(Entity e, float scale) { public static final String TAG_ALTIORA_ALLOWED = "hexcasting:altiora_allowed"; public static final String TAG_ALTIORA_GRACE = "hexcasting:altiora_grace_period"; - public static final UUID ALTIORA_ATTRIBUTE_ID = UUID.fromString("91897c79-3ebb-468c-a265-40418ed01c41"); + public static final ResourceLocation ALTIORA_ATTRIBUTE_ID = modLoc("Altiora"); public static final String TAG_HARNESS = "hexcasting:spell_harness"; public static final String TAG_PATTERNS = "hexcasting:spell_patterns"; diff --git a/build.gradle b/build.gradle index 2b02304af4..1cec17cc94 100644 --- a/build.gradle +++ b/build.gradle @@ -120,7 +120,7 @@ compileTestKotlin { } tasks.register("runAllDatagen") { - dependsOn ":Forge:runXplatDatagen" - dependsOn ":Forge:runForgeDatagen" + dependsOn ":Neoforge:runXplatDatagen" + dependsOn ":Neoforge:runForgeDatagen" dependsOn ":Fabric:runDatagen" } From b07e5b790486f581a76965fa878b804dc1c789f6 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Tue, 25 Nov 2025 18:22:06 -0600 Subject: [PATCH 57/81] * More various fixes like... * New ContainerInput for Recipes * Various edits to different Items * etc, this is setting up for a merge anyway --- .../java/at/petrak/hexcasting/api/HexAPI.java | 50 +------------- .../FailToCastGreatSpellTrigger.java | 37 +++++----- .../api/advancements/MinMaxLongs.java | 61 ++++++++-------- .../api/advancements/OvercastTrigger.java | 69 ++++++------------- .../api/advancements/SpendMediaTrigger.java | 57 +++++---------- .../hexcasting/api/block/HexBlockEntity.java | 18 ----- .../casting/circles/CircleExecutionState.java | 12 ++-- .../petrak/hexcasting/api/mod/HexConfig.java | 5 +- .../hexcasting/api/pigment/FrozenPigment.java | 2 +- .../petrak/hexcasting/api/utils/HexUtils.kt | 4 ++ .../petrak/hexcasting/api/utils/NBTHelper.kt | 13 ++++ .../components/ItemHexHolderComponent.java | 8 ++- .../components/PigmentItemComponent.java | 2 +- .../hexcasting/common/impl/HexAPIImpl.java | 50 -------------- .../common/items/ItemJewelerHammer.java | 4 +- .../hexcasting/common/items/ItemLens.java | 21 ++---- .../common/items/ItemLoreFragment.java | 5 +- .../hexcasting/common/items/ItemStaff.java | 2 +- .../common/items/armor/ItemRobes.java | 19 ----- .../items/magic/ItemCreativeUnlocker.java | 47 +++++++------ .../common/items/magic/ItemMediaHolder.java | 7 +- .../common/items/magic/ItemPackagedHex.java | 29 +++----- .../common/items/pigment/ItemUUIDPigment.java | 3 +- .../common/items/storage/ItemAbacus.java | 2 +- .../common/items/storage/ItemFocus.java | 2 +- .../common/items/storage/ItemSpellbook.java | 13 ++-- .../common/items/storage/ItemThoughtKnot.java | 2 +- .../common/lib/HexConfiguredFeatures.java | 2 +- .../hexcasting/common/lib/HexItems.java | 10 +-- .../hexcasting/common/lib/HexMobEffects.java | 8 +-- .../hexcasting/common/misc/ContainerInput.kt | 21 ++++++ .../common/msgs/MsgShiftScrollC2S.java | 2 +- .../common/recipe/BrainsweepRecipe.java | 23 +++---- .../common/recipe/SealSpellbookRecipe.java | 64 ----------------- .../common/recipe/SealThingsRecipe.java | 14 ++-- .../hexcasting/datagen/HexAdvancements.java | 8 ++- .../accessor/CriteriaTriggersAccessor.java | 3 +- .../fabric/interop/emi/HexEMIPlugin.java | 12 ++-- Neoforge/build.gradle | 2 + Neoforge/gradle.properties | 1 + .../cap/adimpl/CapClientCastingStack.java | 3 - 41 files changed, 255 insertions(+), 462 deletions(-) delete mode 100644 Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java create mode 100644 Common/src/main/java/at/petrak/hexcasting/common/misc/ContainerInput.kt delete mode 100644 Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java diff --git a/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java b/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java index 8ddde5669b..12b5905bad 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/HexAPI.java @@ -165,54 +165,6 @@ default FrozenPigment getColorizer(Player player) { return FrozenPigment.DEFAULT.get(); } - ArmorMaterial DUMMY_ARMOR_MATERIAL = new ArmorMaterial() { - @Override - public int getDurabilityForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getDefenseForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getEnchantmentValue() { - return 0; - } - - @NotNull - @Override - public SoundEvent getEquipSound() { - return SoundEvents.ARMOR_EQUIP_LEATHER; - } - - @NotNull - @Override - public Ingredient getRepairIngredient() { - return Ingredient.EMPTY; - } - - @Override - public String getName() { - return "missingno"; - } - - @Override - public float getToughness() { - return 0; - } - - @Override - public float getKnockbackResistance() { - return 0; - } - }; - - default ArmorMaterial robesMaterial() { - return DUMMY_ARMOR_MATERIAL; - } - /** * Location in the userdata of the ravenmind */ @@ -229,6 +181,6 @@ static HexAPI instance() { } static ResourceLocation modLoc(String s) { - return new ResourceLocation(MOD_ID, s); + return ResourceLocation.fromNamespaceAndPath(MOD_ID, s); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java index fe85fec5b3..30134b7198 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java @@ -1,39 +1,40 @@ package at.petrak.hexcasting.api.advancements; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import io.wispforest.endec.SerializationContext; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import java.util.Optional; + public class FailToCastGreatSpellTrigger extends SimpleCriterionTrigger { - private static final ResourceLocation ID = new ResourceLocation("hexcasting", "fail_to_cast_great_spell"); + private static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("hexcasting", "fail_to_cast_great_spell"); - @Override - public ResourceLocation getId() { - return ID; + public void trigger(ServerPlayer player) { + super.trigger(player, e -> true); } @Override - protected Instance createInstance(JsonObject json, ContextAwarePredicate predicate, DeserializationContext context) { - return new Instance(predicate); - } - - public void trigger(ServerPlayer player) { - super.trigger(player, e -> true); + public Codec codec() { + return Instance.CODEC; } - public static class Instance extends AbstractCriterionTriggerInstance { - public Instance(ContextAwarePredicate predicate) { - super(ID, predicate); - } + public static record Instance(Optional predicate) implements SimpleInstance { - @Override - public ResourceLocation getCriterion() { - return ID; - } + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> (instance.group( + ContextAwarePredicate.CODEC.optionalFieldOf("predicate").forGetter(Instance::predicate) + )).apply(instance, Instance::new)); public JsonObject serializeToJson(SerializationContext pConditions) { return new JsonObject(); } + + @Override + public Optional player() { + return Optional.empty(); + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java index 0be502c86e..041e0d3fb2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java @@ -4,75 +4,70 @@ import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.BuiltInExceptionProvider; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import com.mojang.serialization.Codec; import net.minecraft.advancements.critereon.MinMaxBounds; import net.minecraft.util.GsonHelper; import javax.annotation.Nullable; import java.util.Objects; +import java.util.Optional; import java.util.function.Function; -public class MinMaxLongs extends MinMaxBounds { +public record MinMaxLongs(Optional min, Optional max, Optional minSq, Optional maxSq) implements MinMaxBounds { public static final MinMaxLongs ANY = new MinMaxLongs(null, null); - @Nullable - private final Long minSq; - @Nullable - private final Long maxSq; - private static MinMaxLongs create(StringReader reader, @Nullable Long min, @Nullable Long max) throws CommandSyntaxException { - if (min != null && max != null && min > max) { + public static final Codec CODEC = MinMaxBounds.createCodec(Codec.LONG, MinMaxLongs::new); + + private MinMaxLongs(Optional longA, Optional longB) { + this(longA, longB, squareOpt(longA), squareOpt(longB)); + } + private static MinMaxLongs create(StringReader reader, Optional min, Optional max) throws CommandSyntaxException { + if (min.isPresent() && max.isPresent() && min.get() > max.get()) { throw ERROR_SWAPPED.createWithContext(reader); } else { return new MinMaxLongs(min, max); } } - @Nullable - private static Long squareOpt(@Nullable Long l) { - return l == null ? null : l * l; - } - private MinMaxLongs(@Nullable Long min, @Nullable Long max) { - super(min, max); - this.minSq = squareOpt(min); - this.maxSq = squareOpt(max); + + + private static Optional squareOpt(Optional l) { + return l.map((double_) -> double_ * double_); } public static MinMaxLongs exactly(long l) { - return new MinMaxLongs(l, l); + return new MinMaxLongs(Optional.of(l), Optional.of(l)); } public static MinMaxLongs between(long min, long max) { - return new MinMaxLongs(min, max); + return new MinMaxLongs(Optional.of(min), Optional.of(max)); } public static MinMaxLongs atLeast(long min) { - return new MinMaxLongs(min, null); + return new MinMaxLongs(Optional.of(min), null); } public static MinMaxLongs atMost(long max) { - return new MinMaxLongs(null, max); + return new MinMaxLongs(null, Optional.of(max)); } public boolean matches(long l) { - if (this.min != null && this.min > l) { + if (this.min.isPresent() && this.min.get() > l) { return false; } else { - return this.max == null || this.max >= l; + return this.max.isEmpty() || this.max.get() >= l; } } public boolean matchesSqr(long l) { - if (this.minSq != null && this.minSq > l) { + if (this.minSq.isPresent() && this.minSq.get() > l) { return false; } else { - return this.maxSq == null || this.maxSq >= l; + return this.maxSq.isEmpty() || this.maxSq.get() >= l; } } - public static MinMaxLongs fromJson(@Nullable JsonElement json) { - return fromJson(json, ANY, GsonHelper::convertToLong, MinMaxLongs::new); - } - public static MinMaxLongs fromReader(StringReader reader) throws CommandSyntaxException { return fromReader(reader, (l) -> l); } @@ -80,6 +75,16 @@ public static MinMaxLongs fromReader(StringReader reader) throws CommandSyntaxEx public static MinMaxLongs fromReader(StringReader reader, Function map) throws CommandSyntaxException { BuiltInExceptionProvider builtInExceptions = CommandSyntaxException.BUILT_IN_EXCEPTIONS; Objects.requireNonNull(builtInExceptions); - return fromReader(reader, MinMaxLongs::create, Long::parseLong, builtInExceptions::readerInvalidInt, map); + return MinMaxBounds.fromReader(reader, MinMaxLongs::create, Long::parseLong, builtInExceptions::readerInvalidLong, map); + } + + @Override + public Optional min() { + return Optional.empty(); + } + + @Override + public Optional max() { + return Optional.empty(); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java index b1661e869e..91ee1eb42f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java @@ -2,15 +2,19 @@ import at.petrak.hexcasting.api.mod.HexConfig; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import java.util.Optional; + // https://github.com/TelepathicGrunt/Bumblezone/blob/latest-released/src/main/java/com/telepathicgrunt/the_bumblezone/advancements/CleanupStickyHoneyResidueTrigger.java // https://github.com/VazkiiMods/Botania/blob/b8706e2e0bba20f67f1e103559a4ce39d63d48f9/src/main/java/vazkii/botania/common/advancements/CorporeaRequestTrigger.java public class OvercastTrigger extends SimpleCriterionTrigger { - private static final ResourceLocation ID = new ResourceLocation("hexcasting", "overcast"); + private static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("hexcasting", "overcast"); private static final String TAG_MEDIA_GENERATED = "media_generated"; private static final String TAG_HEALTH_USED = "health_used"; @@ -18,20 +22,6 @@ public class OvercastTrigger extends SimpleCriterionTrigger { var mediaToHealth = HexConfig.common().mediaToHealthRate(); @@ -40,41 +30,19 @@ public void trigger(ServerPlayer player, int mediaGenerated) { }); } - public static class Instance extends AbstractCriterionTriggerInstance { - protected final MinMaxBounds.Ints mediaGenerated; - // This is the *proporttion* of the health bar. - protected final MinMaxBounds.Doubles healthUsed; - // DID YOU KNOW THERES ONE TO CHECK THE WORLD TIME, BUT NOT THE HEALTH!? - protected final MinMaxBounds.Doubles healthLeft; - - public Instance(ContextAwarePredicate predicate, MinMaxBounds.Ints mediaGenerated, - MinMaxBounds.Doubles healthUsed, MinMaxBounds.Doubles healthLeft) { - super(OvercastTrigger.ID, predicate); - this.mediaGenerated = mediaGenerated; - this.healthUsed = healthUsed; - // DID YOU KNOW THERE'S ONE TO CHECK THE FUCKING C A T T Y P E BUT NOT THE HEALTH - this.healthLeft = healthLeft; - } + @Override + public Codec codec() { + return null; + } - @Override - public ResourceLocation getCriterion() { - return ID; - } + public record Instance(MinMaxBounds.Ints mediaGenerated, MinMaxBounds.Doubles healthUsed, MinMaxBounds.Doubles healthLeft, Optional predicate) implements SimpleInstance { - @Override - public JsonObject serializeToJson(SerializationContext ctx) { - JsonObject json = super.serializeToJson(ctx); - if (!this.mediaGenerated.isAny()) { - json.add(TAG_MEDIA_GENERATED, this.mediaGenerated.serializeToJson()); - } - if (!this.healthUsed.isAny()) { - json.add(TAG_HEALTH_USED, this.healthUsed.serializeToJson()); - } - if (!this.healthLeft.isAny()) { - json.add(TAG_HEALTH_LEFT, this.healthLeft.serializeToJson()); - } - return json; - } + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> (instance.group( + MinMaxBounds.Ints.CODEC.fieldOf("mediaGenerated").forGetter(Instance::mediaGenerated), + MinMaxBounds.Doubles.CODEC.fieldOf("healthUsed").forGetter(Instance::healthUsed), + MinMaxBounds.Doubles.CODEC.fieldOf("healthLeft").forGetter(Instance::healthLeft), + EntityPredicate.ADVANCEMENT_CODEC.optionalFieldOf("player").forGetter(Instance::player) + )).apply(instance, Instance::new)); private boolean test(int mediaGeneratedIn, double healthUsedIn, float healthLeftIn) { return this.mediaGenerated.matches(mediaGeneratedIn) @@ -82,5 +50,10 @@ private boolean test(int mediaGeneratedIn, double healthUsedIn, float healthLeft // DID YOU KNOW ALL THE ENEITYT PREDICATES ARE HARD-CODED AND YOU CANT MAKE NEW ONES && this.healthLeft.matches(healthLeftIn); } + + @Override + public Optional player() { + return null; + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java index d610807f59..d9e0587374 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/SpendMediaTrigger.java @@ -1,63 +1,42 @@ package at.petrak.hexcasting.api.advancements; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.advancements.critereon.*; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; +import java.util.Optional; + public class SpendMediaTrigger extends SimpleCriterionTrigger { - private static final ResourceLocation ID = new ResourceLocation("hexcasting", "spend_media"); + private static final ResourceLocation ID = ResourceLocation.fromNamespaceAndPath("hexcasting", "spend_media"); private static final String TAG_MEDIA_SPENT = "media_spent"; private static final String TAG_MEDIA_WASTED = "media_wasted"; - @Override - public ResourceLocation getId() { - return ID; + public void trigger(ServerPlayer player, long mediaSpent, long mediaWasted) { + super.trigger(player, inst -> inst.test(mediaSpent, mediaWasted)); } @Override - protected Instance createInstance(JsonObject json, ContextAwarePredicate predicate, - DeserializationContext context) { - return new Instance(predicate, - MinMaxLongs.fromJson(json.get(TAG_MEDIA_SPENT)), - MinMaxLongs.fromJson(json.get(TAG_MEDIA_WASTED))); + public Codec codec() { + return Instance.CODEC; } - public void trigger(ServerPlayer player, long mediaSpent, long mediaWasted) { - super.trigger(player, inst -> inst.test(mediaSpent, mediaWasted)); - } + public static record Instance(MinMaxLongs mediaSpent, MinMaxLongs mediaWasted) implements SimpleInstance { + public static final Codec CODEC = RecordCodecBuilder.create((instance) -> instance.group( + MinMaxLongs.CODEC.fieldOf("mediaSpent").forGetter(Instance::mediaSpent), + MinMaxLongs.CODEC.fieldOf("mediaWasted").forGetter(Instance::mediaWasted) + ).apply(instance, Instance::new)); - public static class Instance extends AbstractCriterionTriggerInstance { - protected final MinMaxLongs mediaSpent; - protected final MinMaxLongs mediaWasted; - - public Instance(ContextAwarePredicate predicate, MinMaxLongs mediaSpent, - MinMaxLongs mediaWasted) { - super(SpendMediaTrigger.ID, predicate); - this.mediaSpent = mediaSpent; - this.mediaWasted = mediaWasted; - } - - @Override - public ResourceLocation getCriterion() { - return ID; + private boolean test(long mediaSpentIn, long mediaWastedIn) { + return this.mediaSpent.matches(mediaSpentIn) && this.mediaWasted.matches(mediaWastedIn); } @Override - public JsonObject serializeToJson(SerializationContext ctx) { - JsonObject json = super.serializeToJson(ctx); - if (!this.mediaSpent.isAny()) { - json.add(TAG_MEDIA_SPENT, this.mediaSpent.serializeToJson()); - } - if (!this.mediaWasted.isAny()) { - json.add(TAG_MEDIA_WASTED, this.mediaWasted.serializeToJson()); - } - return json; - } - - private boolean test(long mediaSpentIn, long mediaWastedIn) { - return this.mediaSpent.matches(mediaSpentIn) && this.mediaWasted.matches(mediaWastedIn); + public Optional player() { + return Optional.empty(); } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java b/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java index e531ddb12d..dbcce5cc87 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/block/HexBlockEntity.java @@ -18,24 +18,6 @@ public HexBlockEntity(BlockEntityType pType, BlockPos pWorldPosition, BlockSt protected abstract void loadModData(CompoundTag tag); - @Override - protected void saveAdditional(CompoundTag pTag) { - this.saveModData(pTag); - } - - @Override - public void load(CompoundTag pTag) { - super.load(pTag); - this.loadModData(pTag); - } - - @Override - public CompoundTag getUpdateTag() { - CompoundTag tag = new CompoundTag(); - this.saveModData(tag); - return tag; - } - @Override public Packet getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java index f95fa84f01..2a36ae2699 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java @@ -178,21 +178,23 @@ public CompoundTag save() { } public static CircleExecutionState load(CompoundTag nbt, ServerLevel world) { - var startPos = NbtUtils.readBlockPos(nbt.getCompound(TAG_IMPETUS_POS)); + var startPos = NbtUtils.readBlockPos(nbt, TAG_IMPETUS_POS); var startDir = Direction.values()[nbt.getByte(TAG_IMPETUS_DIR)]; var knownPositions = new HashSet(); var knownTag = nbt.getList(TAG_KNOWN_POSITIONS, Tag.TAG_COMPOUND); for (var tag : knownTag) { - knownPositions.add(NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE))); + var blockPos = NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE), TAG_KNOWN_POSITIONS); + blockPos.ifPresent(knownPositions::add); } var reachedPositions = new ArrayList(); var reachedTag = nbt.getList(TAG_REACHED_POSITIONS, Tag.TAG_COMPOUND); for (var tag : reachedTag) { - reachedPositions.add(NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE))); + var blockPos = NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE), TAG_REACHED_POSITIONS); + blockPos.ifPresent(reachedPositions::add); } - var currentPos = NbtUtils.readBlockPos(nbt.getCompound(TAG_CURRENT_POS)); + var currentPos = NbtUtils.readBlockPos(nbt, TAG_CURRENT_POS); var enteredFrom = Direction.values()[nbt.getByte(TAG_ENTERED_FROM)]; var image = CastingImage.loadFromNbt(nbt.getCompound(TAG_IMAGE), world); @@ -204,7 +206,7 @@ public static CircleExecutionState load(CompoundTag nbt, ServerLevel world) { if (nbt.contains(TAG_PIGMENT, Tag.TAG_COMPOUND)) pigment = FrozenPigment.fromNBT(nbt.getCompound(TAG_PIGMENT)); - return new CircleExecutionState(startPos, startDir, knownPositions, reachedPositions, currentPos, + return new CircleExecutionState(startPos.get(), startDir, knownPositions, reachedPositions, currentPos.get(), enteredFrom, image, caster, pigment); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 19458cbc8e..6255816d05 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -99,8 +99,9 @@ default Tier opBreakHarvestLevel() { // Simple extensions for resource location configs public static boolean anyMatch(List keys, ResourceLocation key) { for (String s : keys) { - if (ResourceLocation.isValidResourceLocation(s)) { - var rl = new ResourceLocation(s); + var strings = s.split(":"); + if (ResourceLocation.isValidNamespace(strings[0]) && ResourceLocation.isValidPath(strings[1])) { + var rl = ResourceLocation.parse(s); if (rl.equals(key)) { return true; } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java b/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java index f5cd478e0e..a9250440d7 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java @@ -36,7 +36,7 @@ public static FrozenPigment fromNBT(CompoundTag tag) { } try { CompoundTag stackTag = tag.getCompound(TAG_STACK); - var stack = ItemStack.of(stackTag); + var stack = ItemStack.(stackTag); var uuid = tag.getUUID(TAG_OWNER); return new FrozenPigment(stack, uuid); } catch (NullPointerException exn) { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt index 8dcfea6f4e..aa9b31a516 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/HexUtils.kt @@ -7,6 +7,7 @@ import at.petrak.hexcasting.api.casting.iota.IotaType import at.petrak.hexcasting.api.casting.iota.ListIota import at.petrak.hexcasting.api.casting.math.HexCoord import net.minecraft.ChatFormatting +import net.minecraft.advancements.AdvancementHolder import net.minecraft.core.HolderLookup import net.minecraft.core.Registry import net.minecraft.nbt.* @@ -15,6 +16,7 @@ import net.minecraft.network.chat.MutableComponent import net.minecraft.network.chat.Style import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation +import net.minecraft.server.ServerAdvancementManager import net.minecraft.tags.TagKey import net.minecraft.world.InteractionHand import net.minecraft.world.item.ItemStack @@ -22,6 +24,7 @@ import net.minecraft.world.phys.Vec2 import net.minecraft.world.phys.Vec3 import java.lang.ref.WeakReference import java.util.* +import kotlin.jvm.optionals.getOrNull import kotlin.math.absoluteValue import kotlin.math.max import kotlin.math.min @@ -322,3 +325,4 @@ fun isOfTag(registry: Registry, loc: ResourceLocation, tag: TagKey): B return isOfTag(registry, key, tag) } + diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt index 9bf750fb6c..847f2a38a5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt @@ -5,11 +5,14 @@ package at.petrak.hexcasting.api.utils import at.petrak.hexcasting.common.components.VariantItemComponent +import net.minecraft.advancements.AdvancementHolder import net.minecraft.core.component.DataComponents import net.minecraft.nbt.* +import net.minecraft.server.ServerAdvancementManager import net.minecraft.world.item.ItemStack import net.minecraft.world.item.component.CustomData import java.util.* +import kotlin.jvm.optionals.getOrNull private inline fun T?.getIf(key: K, predicate: T?.(K) -> Boolean, get: T.(K) -> E): E? = getIf(key, predicate, get, null) @@ -20,6 +23,16 @@ private inline fun T?.getIf(key: K, predicate: T?.(K) -> Boolean return default } +fun AdvancementHolder.isChildOf(root: AdvancementHolder, serverAdvancementManager: ServerAdvancementManager): Boolean { + var current = this + while (true) { + if (current.equals(root)) return true + var parentOpt = serverAdvancementManager.get(current.value.parent.getOrNull() ?: return false) ?: return false + + current = parentOpt + } +} + // ======================================================================================================== CompoundTag // Checks for containment diff --git a/Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java index 8cc89c1f29..ac7262e9b9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/components/ItemHexHolderComponent.java @@ -9,6 +9,7 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.CustomData; import java.util.List; @@ -16,7 +17,7 @@ public record ItemHexHolderComponent(List hex) { public static final ItemHexHolderComponent EMPTY = new ItemHexHolderComponent(List.of()); public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( - Iota.IOTA_CODEC.listOf().fieldOf("datum").forGetter(ItemHexHolderComponent::hex) + Iota.IOTA_CODEC.listOf().fieldOf("patterns").forGetter(ItemHexHolderComponent::hex) ).apply(instance, ItemHexHolderComponent::new)); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( Iota.IOTA_STREAM_CODEC.apply(ByteBufCodecs.list()), @@ -27,4 +28,9 @@ public record ItemHexHolderComponent(List hex) { .persistent(CODEC) .networkSynchronized(STREAM_CODEC) .build(); + + public static List hex(ItemStack stack) { + ItemHexHolderComponent comp = stack.get(COMPONENT_TYPE); + return comp != null ? comp.hex() : List.of(); + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java b/Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java index 1b6318bf0c..e0e4d9f164 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/components/PigmentItemComponent.java @@ -4,6 +4,6 @@ import net.minecraft.core.component.DataComponentType; public record PigmentItemComponent(PigmentItem item) { - public static final DataComponentType COMPONENT_TYPE = DataComponentType.builder() + public static final DataComponentType COMPONENT_TYPE = DataComponentType.builder() .build(); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java index 0ff996b907..32e11dd0d5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java @@ -95,54 +95,4 @@ public Consumer defaultBrainsweepingBehavior() { public FrozenPigment getColorizer(Player player) { return IXplatAbstractions.INSTANCE.getPigment(player); } - - ArmorMaterial ARMOR_MATERIAL = new ArmorMaterial() { - - @Override - public int getDurabilityForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getDefenseForType(ArmorItem.Type type) { - return 0; - } - - @Override - public int getEnchantmentValue() { - return 0; - } - - @NotNull - @Override - public SoundEvent getEquipSound() { - return SoundEvents.ARMOR_EQUIP_LEATHER; - } - - @NotNull - @Override - public Ingredient getRepairIngredient() { - return Ingredient.EMPTY; - } - - @Override - public String getName() { - return "robes"; - } - - @Override - public float getToughness() { - return 0; - } - - @Override - public float getKnockbackResistance() { - return 0; - } - }; - - @Override - public ArmorMaterial robesMaterial() { - return ARMOR_MATERIAL; - } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java index d5b059f5f7..713c7e3c73 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemJewelerHammer.java @@ -10,8 +10,8 @@ import net.minecraft.world.level.block.state.BlockState; public class ItemJewelerHammer extends PickaxeItem { - public ItemJewelerHammer(Tier tier, int damageMod, float attackSpeedMod, Properties props) { - super(tier, damageMod, attackSpeedMod, props); + public ItemJewelerHammer(Tier tier, Properties props) { + super(tier, props); } public static boolean shouldFailToBreak(Player player, BlockState state, BlockPos pos) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java index 4b77873f29..473800785c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java @@ -4,7 +4,7 @@ import at.petrak.hexcasting.common.lib.HexAttributes; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import net.minecraft.core.BlockSource; +import net.minecraft.core.dispenser.BlockSource; import net.minecraft.core.dispenser.OptionalDispenseItemBehavior; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; @@ -19,17 +19,16 @@ import java.util.UUID; +import static at.petrak.hexcasting.api.HexAPI.modLoc; + public class ItemLens extends Item implements HexBaubleItem { // Wearable, // The 0.1 is *additive* - public static final AttributeModifier GRID_ZOOM = new AttributeModifier( - UUID.fromString("59d739b8-d419-45f7-a4ea-0efee0e3adf5"), - "Scrying Lens Zoom", 0.33, AttributeModifier.Operation.MULTIPLY_BASE); + public static final AttributeModifier GRID_ZOOM = new AttributeModifier(modLoc("scrying_grid_zoom"), 0.33, AttributeModifier.Operation.ADD_MULTIPLIED_BASE); public static final AttributeModifier SCRY_SIGHT = new AttributeModifier( - UUID.fromString("e2e6e5d4-f978-4c11-8fdc-82a5af83385c"), - "Scrying Lens Sight", 1.0, AttributeModifier.Operation.ADDITION); + modLoc("scrying_sight"), 1.0, AttributeModifier.Operation.ADD_VALUE); public ItemLens(Properties pProperties) { super(pProperties); @@ -42,16 +41,6 @@ ItemStack execute(@NotNull BlockSource world, @NotNull ItemStack stack) { }); } - @Override - public Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { - var out = HashMultimap.create(super.getDefaultAttributeModifiers(slot)); - if (slot == EquipmentSlot.HEAD || slot == EquipmentSlot.MAINHAND || slot == EquipmentSlot.OFFHAND) { - out.put(HexAttributes.GRID_ZOOM, GRID_ZOOM); - out.put(HexAttributes.SCRY_SIGHT, SCRY_SIGHT); - } - return out; - } - @Override public Multimap getHexBaubleAttrs(ItemStack stack) { HashMultimap out = HashMultimap.create(); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java index 3d2f347bee..52e88072fd 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLoreFragment.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.common.lib.HexSounds; import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementHolder; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -49,11 +50,11 @@ public InteractionResultHolder use(Level level, Player player, Intera return InteractionResultHolder.success(handStack); } - Advancement unfoundLore = null; + AdvancementHolder unfoundLore = null; var shuffled = new ArrayList<>(NAMES); Collections.shuffle(shuffled); for (var advID : shuffled) { - var adv = splayer.server.getAdvancements().getAdvancement(advID); + var adv = splayer.server.getAdvancements().get(advID); if (adv == null) { continue; // uh oh } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java index c571aadf58..81dea2138b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemStaff.java @@ -17,7 +17,7 @@ public class ItemStaff extends Item { // 0 = normal. 1 = old. 2 = cherry preview - public static final ResourceLocation FUNNY_LEVEL_PREDICATE = new ResourceLocation(HexAPI.MOD_ID, "funny_level"); + public static final ResourceLocation FUNNY_LEVEL_PREDICATE = ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, "funny_level"); public ItemStaff(Properties pProperties) { super(pProperties); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java b/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java deleted file mode 100644 index 3ec73cbdc6..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/armor/ItemRobes.java +++ /dev/null @@ -1,19 +0,0 @@ -package at.petrak.hexcasting.common.items.armor; - -import at.petrak.hexcasting.api.HexAPI; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.ArmorItem; - -/** - * To get the armor model in; - * On forge: cursed self-mixin - * On fabric: hook in ClientInit - */ -public class ItemRobes extends ArmorItem { - public final ArmorItem.Type type; - - public ItemRobes(ArmorItem.Type type, Properties properties) { - super(HexAPI.instance().robesMaterial(), type, properties); - this.type = type; - } -} diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java index 586f8b2c02..87bd4531a4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java @@ -9,11 +9,16 @@ import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexSounds; import net.minecraft.ChatFormatting; +import net.minecraft.Util; import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.AdvancementTree; +import net.minecraft.core.component.DataComponents; import net.minecraft.locale.Language; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.TextColor; +import net.minecraft.server.ServerAdvancementManager; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; @@ -35,6 +40,7 @@ import java.util.Locale; import static at.petrak.hexcasting.api.HexAPI.modLoc; +import static at.petrak.hexcasting.api.utils.NBTHelper.isChildOf; public class ItemCreativeUnlocker extends Item implements MediaHolderItem { @@ -70,7 +76,7 @@ public static boolean isDebug(ItemStack stack) { } public static boolean isDebug(ItemStack stack, String flag) { - if (!stack.is(HexItems.CREATIVE_UNLOCKER) || !stack.hasCustomHoverName()) { + if (!stack.is(HexItems.CREATIVE_UNLOCKER) || !stack.has(DataComponents.CUSTOM_NAME)) { return false; } var keywords = Arrays.asList(stack.getHoverName().getString().toLowerCase(Locale.ROOT).split(" ")); @@ -80,13 +86,13 @@ public static boolean isDebug(ItemStack stack, String flag) { return flag == null || keywords.contains(flag); } - public static Component infiniteMedia(Level level) { + public static Component infiniteMedia() { String prefix = "item.hexcasting.creative_unlocker."; String emphasis = Language.getInstance().getOrDefault(prefix + "for_emphasis"); MutableComponent emphasized = Component.empty(); for (int i = 0; i < emphasis.length(); i++) { - emphasized.append(rainbow(Component.literal("" + emphasis.charAt(i)), i, level)); + emphasized.append(rainbow(Component.literal("" + emphasis.charAt(i)), i)); } return emphasized; @@ -215,13 +221,14 @@ public InteractionResult useOn(UseOnContext context) { public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity consumer) { if (level instanceof ServerLevel slevel && consumer instanceof ServerPlayer player) { var names = new ArrayList<>(ItemLoreFragment.NAMES); + var serverAdman = slevel.getServer().getAdvancements(); names.add(0, modLoc("root")); for (var name : names) { - var rootAdv = slevel.getServer().getAdvancements().getAdvancement(name); + var rootAdv = slevel.getServer().getAdvancements().get(name); if (rootAdv != null) { - var children = new ArrayList(); + var children = new ArrayList(); children.add(rootAdv); - addChildren(rootAdv, children); + addChildren(rootAdv, children, serverAdman); var adman = player.getAdvancements(); @@ -242,32 +249,30 @@ public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity cons return copy; } - private static MutableComponent rainbow(MutableComponent component, int shift, Level level) { - if (level == null) { - return component.withStyle(ChatFormatting.WHITE); - } - + private static MutableComponent rainbow(MutableComponent component, int shift) { return component.withStyle((s) -> s.withColor( - TextColor.fromRgb(Mth.hsvToRgb((level.getGameTime() + shift) * 2 % 360 / 360F, 1F, 1F)))); + TextColor.fromRgb(Mth.hsvToRgb(((float) Util.getMillis() / 50 + shift) * 2 % 360 / 360F, 1F, 1F)))); } @Override - public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, - TooltipFlag isAdvanced) { - Component emphasized = infiniteMedia(level); + public void appendHoverText(ItemStack stack, Item.TooltipContext level, List tooltipComponents, + TooltipFlag isAdvanced) { + Component emphasized = infiniteMedia(); MutableComponent modName = Component.translatable("item.hexcasting.creative_unlocker.mod_name").withStyle( - (s) -> s.withColor(ItemMediaHolder.HEX_COLOR)); + (s) -> s.withColor(ItemMediaHolder.HEX_COLOR)); tooltipComponents.add( - Component.translatable("hexcasting.spelldata.onitem", emphasized).withStyle(ChatFormatting.GRAY)); + Component.translatable("hexcasting.spelldata.onitem", emphasized).withStyle(ChatFormatting.GRAY)); tooltipComponents.add(Component.translatable("item.hexcasting.creative_unlocker.tooltip", modName).withStyle(ChatFormatting.GRAY)); } - private static void addChildren(Advancement root, List out) { - for (Advancement kiddo : root.getChildren()) { - out.add(kiddo); - addChildren(kiddo, out); + private static void addChildren(AdvancementHolder root, List out, ServerAdvancementManager manager) { + var advList = manager.getAllAdvancements(); + for (AdvancementHolder holder : advList) { + if (isChildOf(holder, root, manager) && !out.contains(holder)) { + out.add(holder); + } } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java index afa1183fd2..d804d31734 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemMediaHolder.java @@ -87,12 +87,7 @@ public int getBarWidth(ItemStack pStack) { } @Override - public boolean canBeDepleted() { - return false; - } - - @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, + public void appendHoverText(ItemStack pStack, Item.TooltipContext pLevel, List pTooltipComponents, TooltipFlag pIsAdvanced) { var maxMedia = getMaxMedia(pStack); if (maxMedia > 0) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java index a189fd0703..eefd598dab 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemPackagedHex.java @@ -9,6 +9,9 @@ import at.petrak.hexcasting.api.item.HexHolderItem; import at.petrak.hexcasting.api.pigment.FrozenPigment; import at.petrak.hexcasting.api.utils.NBTHelper; +import at.petrak.hexcasting.common.components.ItemHexHolderComponent; +import at.petrak.hexcasting.common.components.ItemMediaHolderComponent; +import at.petrak.hexcasting.common.components.PigmentItemComponent; import at.petrak.hexcasting.common.msgs.MsgNewSpiralPatternsS2C; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.nbt.CompoundTag; @@ -22,6 +25,7 @@ import net.minecraft.stats.Stats; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.UseAnim; @@ -62,23 +66,12 @@ public boolean canProvideMedia(ItemStack stack) { @Override public boolean hasHex(ItemStack stack) { - return NBTHelper.hasList(stack, TAG_PROGRAM, Tag.TAG_COMPOUND); + return ItemHexHolderComponent.hex(stack).isEmpty(); } @Override public @Nullable List getHex(ItemStack stack, ServerLevel level) { - var patsTag = NBTHelper.getList(stack, TAG_PROGRAM, Tag.TAG_COMPOUND); - - if (patsTag == null) { - return null; - } - - var out = new ArrayList(); - for (var patTag : patsTag) { - CompoundTag tag = NBTHelper.getAsCompound(patTag); - out.add(IotaType.deserialize(tag, level)); - } - return out; + return ItemHexHolderComponent.hex(stack); } @Override @@ -97,10 +90,9 @@ public void writeHex(ItemStack stack, List program, @Nullable FrozenPigmen @Override public void clearHex(ItemStack stack) { - NBTHelper.remove(stack, TAG_PROGRAM); - NBTHelper.remove(stack, TAG_PIGMENT); - NBTHelper.remove(stack, TAG_MEDIA); - NBTHelper.remove(stack, TAG_MAX_MEDIA); + stack.remove(ItemHexHolderComponent.COMPONENT_TYPE); + stack.remove(PigmentItemComponent.COMPONENT_TYPE); + stack.remove(ItemMediaHolderComponent.COMPONENT_TYPE); } @Override @@ -113,6 +105,7 @@ public void clearHex(ItemStack stack) { @Override public InteractionResultHolder use(Level world, Player player, InteractionHand usedHand) { + EquipmentSlot slot = usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND; var stack = player.getItemInHand(usedHand); if (!hasHex(stack)) { return InteractionResultHolder.fail(stack); @@ -167,7 +160,7 @@ public InteractionResultHolder use(Level world, Player player, Intera if (broken) { stack.shrink(1); - player.broadcastBreakEvent(usedHand); + player.onEquippedItemBroken(stack.getItem(), slot); return InteractionResultHolder.consume(stack); } else { return InteractionResultHolder.success(stack); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java b/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java index c895177f47..6ce75671e9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/pigment/ItemUUIDPigment.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.item.PigmentItem; import at.petrak.hexcasting.api.pigment.ColorProvider; import at.petrak.paucal.api.PaucalAPI; +import at.petrak.paucal.xplat.common.ContributorsManifest; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import net.minecraft.world.item.Item; @@ -28,7 +29,7 @@ protected static class MyColorProvider extends ColorProvider { private final int[] colors; MyColorProvider(UUID owner) { - var contributor = PaucalAPI.instance().getContributor(owner); + var contributor = ContributorsManifest.getContributor(owner); if (contributor != null) { var colorList = contributor.otherVals().getAsJsonArray("hexcasting:colorizer"); if (colorList != null) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java index f379d059c3..71322aadd0 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java @@ -72,7 +72,7 @@ public InteractionResultHolder use(Level world, Player player, Intera } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, + public void appendHoverText(ItemStack pStack, Item.TooltipContext bruh, List pTooltipComponents, TooltipFlag pIsAdvanced) { IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java index 8d08c9923f..df32e4f682 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java @@ -64,7 +64,7 @@ public void writeDatum(ItemStack stack, Iota datum) { } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, List pTooltipComponents, + public void appendHoverText(ItemStack pStack, Item.TooltipContext pLevel, List pTooltipComponents, TooltipFlag pIsAdvanced) { IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java index b7521f7619..6dda363d79 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java @@ -6,6 +6,7 @@ import at.petrak.hexcasting.api.item.VariantItem; import at.petrak.hexcasting.api.utils.NBTHelper; import net.minecraft.ChatFormatting; +import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; @@ -46,7 +47,7 @@ public ItemSpellbook(Properties properties) { } @Override - public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltip, + public void appendHoverText(ItemStack stack, Item.TooltipContext level, List tooltip, TooltipFlag isAdvanced) { boolean sealed = isSealed(stack); boolean empty = false; @@ -103,8 +104,8 @@ public void inventoryTick(ItemStack stack, Level pLevel, Entity pEntity, int pSl int shiftedIdx = Math.max(1, index); String nameKey = String.valueOf(shiftedIdx); CompoundTag names = NBTHelper.getOrCreateCompound(stack, TAG_PAGE_NAMES); - if (stack.hasCustomHoverName()) { - names.putString(nameKey, Component.Serializer.toJson(stack.getHoverName())); + if (stack.has(DataComponents.CUSTOM_NAME)) { + names.putString(nameKey, Component.Serializer.toJson(stack.get(DataComponents.CUSTOM_NAME).copy(), pLevel.registryAccess())); } else { names.remove(nameKey); } @@ -221,7 +222,7 @@ public static int highestPage(ItemStack stack) { }).max(Integer::compare).orElse(0); } - public static int rotatePageIdx(ItemStack stack, boolean increase) { + public static int rotatePageIdx(ItemStack stack, boolean increase, Level level) { int idx = getPage(stack, 0); if (idx != 0) { idx += increase ? 1 : -1; @@ -235,9 +236,9 @@ public static int rotatePageIdx(ItemStack stack, boolean increase) { String nameKey = String.valueOf(shiftedIdx); String name = NBTHelper.getString(names, nameKey); if (name != null) { - stack.setHoverName(Component.Serializer.fromJson(name)); + stack.set(DataComponents.CUSTOM_NAME, Component.Serializer.fromJson(name, level.registryAccess())); } else { - stack.resetHoverName(); + stack.remove(DataComponents.CUSTOM_NAME); } return idx; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java index 9e867cc250..3174a28b13 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java @@ -50,7 +50,7 @@ public void writeDatum(ItemStack stack, @Nullable Iota iota) { } @Override - public void appendHoverText(ItemStack pStack, @Nullable Level pLevel, + public void appendHoverText(ItemStack pStack, Item.TooltipContext pLevel, List pTooltipComponents, TooltipFlag pIsAdvanced) { IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java index 05f06de4e8..391b9cac1b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexConfiguredFeatures.java @@ -12,6 +12,6 @@ public class HexConfiguredFeatures { public static final ResourceKey> CITRINE_EDIFIED_TREE = createKey("citrine_edified_tree"); private static ResourceKey> createKey(String name) { - return ResourceKey.create(Registries.CONFIGURED_FEATURE, new ResourceLocation(HexAPI.MOD_ID, name)); + return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(HexAPI.MOD_ID, name)); } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index a85889e104..5b50791fa4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -18,6 +18,7 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.*; +import net.minecraft.world.item.component.ItemAttributeModifiers; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -67,7 +68,8 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemLens SCRYING_LENS = make("lens", new ItemLens( IXplatAbstractions.INSTANCE.addEquipSlotFabric(EquipmentSlot.HEAD) - .stacksTo(1))); + .stacksTo(1).attributes(ItemAttributeModifiers.builder() + .add().build()))); public static final ItemAbacus ABACUS = make("abacus", new ItemAbacus(unstackable())); public static final ItemThoughtKnot THOUGHT_KNOT = make("thought_knot", new ItemThoughtKnot(unstackable())); @@ -79,7 +81,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemArtifact ARTIFACT = make("artifact", new ItemArtifact(unstackable().rarity(Rarity.RARE))); public static final ItemJewelerHammer JEWELER_HAMMER = make("jeweler_hammer", - new ItemJewelerHammer(Tiers.IRON, 0, -2.8F, props().stacksTo(1).defaultDurability(Tiers.DIAMOND.getUses()))); + new ItemJewelerHammer(Tiers.IRON, props().stacksTo(1).durability(Tiers.DIAMOND.getUses()))); public static final ItemScroll SCROLL_SMOL = make("scroll_small", new ItemScroll(props(), 1)); public static final ItemScroll SCROLL_MEDIUM = make("scroll_medium", new ItemScroll(props(), 2)); @@ -134,7 +136,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod // BUFF SANDVICH public static final Item SUBMARINE_SANDWICH = make("sub_sandwich", - new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationMod(1.2f).build()))); + new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationModifier(1.2f).build()))); public static final ItemLoreFragment LORE_FRAGMENT = make("lore_fragment", new ItemLoreFragment(unstackable() @@ -143,7 +145,7 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemCreativeUnlocker CREATIVE_UNLOCKER = make("creative_unlocker", new ItemCreativeUnlocker(unstackable() .rarity(Rarity.EPIC) - .food(new FoodProperties.Builder().nutrition(20).saturationMod(1f).alwaysEat().build()))); + .food(new FoodProperties.Builder().nutrition(20).saturationModifier(1f).alwaysEdible().build()))); // diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java index 6398bfea27..3dc6345d9c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java @@ -23,12 +23,12 @@ public static void register(BiConsumer r) { public static final MobEffect ENLARGE_GRID = make("enlarge_grid", new HexMobEffect(MobEffectCategory.BENEFICIAL, 0xc875ff)) - .addAttributeModifier(HexAttributes.GRID_ZOOM, "d4afaf0f-df37-4253-9fa7-029e8e4415d9", - 0.25, AttributeModifier.Operation.MULTIPLY_TOTAL); + .addAttributeModifier(HexAttributes.GRID_ZOOM, modLoc("enlarge_grid"), + 0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); public static final MobEffect SHRINK_GRID = make("shrink_grid", new HexMobEffect(MobEffectCategory.HARMFUL, 0xc0e660)) - .addAttributeModifier(HexAttributes.GRID_ZOOM, "1ce492a9-8bf5-4091-a482-c6d9399e448a", - -0.2, AttributeModifier.Operation.MULTIPLY_TOTAL); + .addAttributeModifier(HexAttributes.GRID_ZOOM, modLoc("shrink_grid"), + -0.2, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); private static T make(String id, T effect) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/misc/ContainerInput.kt b/Common/src/main/java/at/petrak/hexcasting/common/misc/ContainerInput.kt new file mode 100644 index 0000000000..015f7d4985 --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/common/misc/ContainerInput.kt @@ -0,0 +1,21 @@ +package at.petrak.hexcasting.common.misc + +import net.minecraft.core.RegistryAccess +import net.minecraft.world.Container +import net.minecraft.world.inventory.CraftingContainer +import net.minecraft.world.item.ItemStack +import net.minecraft.world.item.crafting.RecipeInput + +abstract class ContainerInput(val container: Container) : RecipeInput { + + + override fun getItem(i: Int): ItemStack? { + return container.getItem(i) + } + + abstract fun assemble(inv: CraftingContainer, access: RegistryAccess): ItemStack + + override fun size(): Int { + return container.containerSize + } +} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java index 22eed2d2cc..5953d14acb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java @@ -84,7 +84,7 @@ private void spellbook(ServerPlayer sender, InteractionHand hand, ItemStack stac delta = -delta; } - var newIdx = ItemSpellbook.rotatePageIdx(stack, delta < 0.0); + var newIdx = ItemSpellbook.rotatePageIdx(stack, delta < 0.0, sender.level()); var len = ItemSpellbook.highestPage(stack); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java index 287a6816ec..f10f44e62e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java @@ -1,5 +1,6 @@ package at.petrak.hexcasting.common.recipe; +import at.petrak.hexcasting.common.misc.ContainerInput; import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; @@ -33,16 +34,11 @@ public record BrainsweepRecipe( BrainsweepeeIngredient entityIn, long mediaCost, BlockState result -) implements Recipe { +) implements Recipe { public boolean matches(BlockState blockIn, Entity victim, ServerLevel level) { return this.blockIn.test(blockIn) && this.entityIn.test(victim, level); } - @Override - public ResourceLocation getId() { - return id; - } - @Override public RecipeType getType() { return HexRecipeStuffRegistry.BRAINSWEEP_TYPE; @@ -55,17 +51,18 @@ public RecipeSerializer getSerializer() { // in order to get this to be a "Recipe" we need to do a lot of bending-over-backwards // to get the implementation to be satisfied even though we never use it - @Override - public boolean matches(Container pContainer, Level pLevel) { - return false; - } @Override - public ItemStack assemble(Container recipeInput, HolderLookup.Provider provider) { - return ItemStack.EMPTY; + public boolean matches(ContainerInput recipeInput, Level level) { + return false; } - @Override + @Override + public ItemStack assemble(ContainerInput recipeInput, HolderLookup.Provider provider) { + return null; + } + + @Override public boolean canCraftInDimensions(int pWidth, int pHeight) { return false; } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java deleted file mode 100644 index 570d6631be..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealSpellbookRecipe.java +++ /dev/null @@ -1,64 +0,0 @@ -package at.petrak.hexcasting.common.recipe; - -import at.petrak.hexcasting.api.item.IotaHolderItem; -import at.petrak.hexcasting.api.utils.NBTHelper; -import at.petrak.hexcasting.common.items.storage.ItemSpellbook; -import at.petrak.hexcasting.common.lib.HexItems; -import at.petrak.hexcasting.xplat.IXplatAbstractions; -import net.minecraft.core.NonNullList; -import net.minecraft.core.RegistryAccess; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.CraftingContainer; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; -import net.minecraft.world.item.crafting.*; -import org.jetbrains.annotations.NotNull; - -public class SealSpellbookRecipe extends ShapelessRecipe { - public static final SimpleCraftingRecipeSerializer SERIALIZER = - new SimpleCraftingRecipeSerializer<>(SealSpellbookRecipe::new); - - private static ItemStack getSealedStack() { - ItemStack output = new ItemStack(HexItems.SPELLBOOK); - ItemSpellbook.setSealed(output, true); - NBTHelper.putString(output, IotaHolderItem.TAG_OVERRIDE_VISUALLY, "any"); - return output; - } - - private static NonNullList createIngredients() { - NonNullList ingredients = NonNullList.createWithCapacity(2); - ingredients.add(IXplatAbstractions.INSTANCE.getUnsealedIngredient(new ItemStack(HexItems.SPELLBOOK))); - ingredients.add(Ingredient.of(Items.HONEYCOMB)); - return ingredients; - } - - public SealSpellbookRecipe(ResourceLocation id, CraftingBookCategory category) { - super(id, "", category, getSealedStack(), createIngredients()); - } - - @Override - public @NotNull ItemStack assemble(CraftingContainer inv, RegistryAccess access) { - ItemStack out = ItemStack.EMPTY; - - for (int i = 0; i < inv.getContainerSize(); i++) { - var stack = inv.getItem(i); - if (stack.is(HexItems.SPELLBOOK)) { - out = stack.copy(); - break; - } - } - - if (!out.isEmpty()) { - ItemSpellbook.setSealed(out, true); - out.setCount(1); - } - - return out; - } - - @Override - public @NotNull RecipeSerializer getSerializer() { - return SERIALIZER; - } -} - diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java index 365d68fe59..788db08ed2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java @@ -4,15 +4,13 @@ import at.petrak.hexcasting.common.items.storage.ItemFocus; import at.petrak.hexcasting.common.items.storage.ItemSpellbook; import at.petrak.hexcasting.common.lib.HexItems; +import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.StringRepresentable; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.CraftingBookCategory; -import net.minecraft.world.item.crafting.CustomRecipe; -import net.minecraft.world.item.crafting.RecipeSerializer; -import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.minecraft.world.item.crafting.*; import net.minecraft.world.level.Level; import org.jetbrains.annotations.NotNull; @@ -38,11 +36,11 @@ public boolean canCraftInDimensions(int width, int height) { } @Override - public boolean matches(CraftingContainer container, Level level) { + public boolean matches(CraftingInput container, Level level) { boolean foundComb = false; boolean foundSealee = false; - for (int i = 0; i < container.getContainerSize(); i++) { + for (int i = 0; i < container.ingredientCount(); i++) { var stack = container.getItem(i); if (this.sealee.isCorrectSealee(stack)) { if (foundSealee) return false; @@ -57,10 +55,10 @@ public boolean matches(CraftingContainer container, Level level) { } @Override - public ItemStack assemble(CraftingContainer inv, RegistryAccess registryAccess) { + public ItemStack assemble(CraftingInput inv, HolderLookup.Provider provider) { ItemStack sealee = ItemStack.EMPTY; - for (int i = 0; i < inv.getContainerSize(); i++) { + for (int i = 0; i < inv.ingredientCount(); i++) { var stack = inv.getItem(i); if (this.sealee.isCorrectSealee(stack)) { sealee = stack.copy(); diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java index d095b06044..52d71e3592 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java @@ -21,18 +21,20 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import java.util.Optional; import java.util.function.Consumer; public class HexAdvancements extends PaucalAdvancementSubProvider { public static final OvercastTrigger.Instance ENLIGHTEN = - new OvercastTrigger.Instance(ContextAwarePredicate.ANY, - MinMaxBounds.Ints.ANY, + new OvercastTrigger.Instance(MinMaxBounds.Ints.ANY, // add a little bit of slop here. use 80% or more health ... MinMaxBounds.Doubles.atLeast(0.8), // and be left with under 1 healthpoint (half a heart) // TODO this means if 80% of your health is less than half a heart, so if you have 2.5 hearts or // less, you can't become enlightened. - MinMaxBounds.Doubles.between(Double.MIN_NORMAL, 1.0)); + MinMaxBounds.Doubles.between(Double.MIN_NORMAL, 1.0), + Optional.empty() + ); public HexAdvancements() { super(HexAPI.MOD_ID); diff --git a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java index 5aaf071208..1e1408c593 100644 --- a/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java +++ b/Common/src/main/java/at/petrak/hexcasting/mixin/accessor/CriteriaTriggersAccessor.java @@ -7,7 +7,8 @@ @Mixin(CriteriaTriggers.class) public interface CriteriaTriggersAccessor { - @Invoker("register") + + @Invoker(value = "register", remap = false) static > T hex$register(T trigger) { throw new UnsupportedOperationException(); } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/HexEMIPlugin.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/HexEMIPlugin.java index 3c10fb9d4f..a1aa0cf4bd 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/HexEMIPlugin.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/HexEMIPlugin.java @@ -10,7 +10,9 @@ import dev.emi.emi.api.render.EmiTexture; import dev.emi.emi.api.stack.EmiIngredient; import dev.emi.emi.api.stack.EmiStack; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeHolder; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -44,13 +46,13 @@ public void register(EmiRegistry registry) { registry.addWorkstation(PHIAL, EmiIngredient.of(HexTags.Items.STAVES)); registry.addWorkstation(EDIFY, EmiIngredient.of(HexTags.Items.STAVES)); - for (BrainsweepRecipe recipe : registry.getRecipeManager() + for (RecipeHolder recipe : registry.getRecipeManager() .getAllRecipesFor(HexRecipeStuffRegistry.BRAINSWEEP_TYPE)) { - var inputBlocks = EmiIngredient.of(recipe.blockIn().getDisplayedStacks().stream() + var inputBlocks = EmiIngredient.of(recipe.value().blockIn().getDisplayedStacks().stream() .map(EmiStack::of).toList()); - var inputEntity = new BrainsweepeeEmiStack(recipe.entityIn()); - var output = EmiStack.of(recipe.result().getBlock()); - registry.addRecipe(new EmiBrainsweepRecipe(inputBlocks, inputEntity, output, recipe.getId())); + var inputEntity = new BrainsweepeeEmiStack(recipe.value().entityIn()); + var output = EmiStack.of(recipe.value().result().getBlock()); + registry.addRecipe(new EmiBrainsweepRecipe(inputBlocks, inputEntity, output, recipe.id())); } if (PhialRecipeStackBuilder.shouldAddRecipe()) { diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 737caa04ce..7756e93277 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -81,6 +81,8 @@ dependencies { modImplementation "io.wispforest:accessories-neoforge:$accessoriesVersion" modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}-1.21-neoforge") + compileOnly("mezz.jei:jei-${minecraftVersion}-neoforge-api:${jeiVersion}") + runtimeOnly("mezz.jei:jei-${minecraftVersion}-neoforge:${jeiVersion}") // "Required due to issues with JIJ dependency resolving in arch or something" // https://github.com/wisp-forest/accessories diff --git a/Neoforge/gradle.properties b/Neoforge/gradle.properties index 13e6cfd972..52319de18b 100644 --- a/Neoforge/gradle.properties +++ b/Neoforge/gradle.properties @@ -6,3 +6,4 @@ kotlinForForgeVersion=5.6.0 curiosVersion=5.2.0-beta.3 caelusVersion=7.0.1+1.21.1 +jeiVersion=19.25.1.328 diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java index bdba8678ca..2fb088f785 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/adimpl/CapClientCastingStack.java @@ -3,9 +3,6 @@ import at.petrak.hexcasting.api.client.ClientCastingStack; import at.petrak.hexcasting.forge.cap.HexCapabilities; import net.minecraft.world.entity.player.Player; -import net.minecraftforge.event.TickEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.LogicalSide; import java.util.function.Supplier; From 8ade16d5f66b9cb0148603b146d253e239af09e0 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Thu, 27 Nov 2025 22:40:40 -0600 Subject: [PATCH 58/81] Biiiiiig fixes :3 --- .../FailToCastGreatSpellTrigger.java | 5 - .../api/advancements/MinMaxLongs.java | 104 ++++---------- .../hexcasting/api/casting/ParticleSpray.kt | 3 + .../circles/BlockEntityAbstractImpetus.java | 11 -- .../casting/circles/CircleExecutionState.java | 19 +-- .../casting/eval/env/PlayerBasedCastEnv.java | 5 - .../hexcasting/api/casting/iota/Iota.java | 30 ---- .../hexcasting/api/casting/iota/IotaType.java | 97 ------------- .../petrak/hexcasting/api/mod/HexConfig.java | 9 -- .../hexcasting/api/pigment/FrozenPigment.java | 23 --- .../petrak/hexcasting/api/utils/NBTHelper.kt | 114 --------------- .../client/RegisterClientStuff.java | 22 ++- .../hexcasting/client/gui/GuiSpellcasting.kt | 5 - .../client/render/HexAdditionalRenderers.java | 5 +- .../common/blocks/BlockConjured.java | 7 - .../blocks/akashic/BlockAkashicBookshelf.java | 12 +- .../impetuses/BlockEntityLookingImpetus.java | 11 -- .../impetuses/BlockEntityRedstoneImpetus.java | 7 - .../impetuses/BlockLookingImpetus.java | 10 +- .../impetuses/BlockRedstoneImpetus.java | 14 +- .../impetuses/BlockRightClickImpetus.java | 5 + .../decoration/BlockAmethystDirectional.java | 11 +- .../blocks/decoration/BlockHexWoodButton.java | 4 - .../casting/actions/spells/OpEdifySapling.kt | 1 + .../command/ListPerWorldPatternsCommand.java | 8 -- .../common/entities/EntityWallScroll.java | 65 +-------- .../hexcasting/common/impl/HexAPIImpl.java | 3 - .../hexcasting/common/items/ItemLens.java | 28 ---- .../items/magic/ItemCreativeUnlocker.java | 4 +- .../common/items/storage/ItemAbacus.java | 17 --- .../common/items/storage/ItemFocus.java | 6 - .../common/items/storage/ItemScroll.java | 48 ------- .../common/items/storage/ItemSpellbook.java | 17 --- .../common/items/storage/ItemThoughtKnot.java | 4 - .../hexcasting/common/lib/HexBlocks.java | 11 -- .../common/lib/HexCreativeTabs.java | 4 +- .../hexcasting/common/lib/HexItems.java | 20 --- .../hexcasting/common/lib/HexMobEffects.java | 8 -- .../common/misc/AkashicTreeGrower.java | 66 ++------- .../hexcasting/common/msgs/MsgBeepS2C.java | 43 ------ .../hexcasting/common/msgs/MsgBlinkS2C.java | 26 ---- .../common/msgs/MsgCastParticleS2C.java | 46 ------ .../msgs/MsgClearSpiralPatternsS2C.java | 24 ---- .../common/msgs/MsgNewSpellPatternC2S.java | 39 ------ .../common/msgs/MsgNewSpellPatternS2C.java | 36 ----- .../common/msgs/MsgNewSpiralPatternsS2C.java | 29 ---- .../common/msgs/MsgNewWallScrollS2C.java | 40 ------ .../common/msgs/MsgOpenSpellGuiS2C.java | 38 ----- .../msgs/MsgRecalcWallScrollDisplayS2C.java | 21 --- .../common/msgs/MsgShiftScrollC2S.java | 59 +------- .../common/recipe/BrainsweepRecipe.java | 52 ------- .../common/recipe/SealThingsRecipe.java | 11 -- .../hexcasting/datagen/HexAdvancements.java | 7 +- .../datagen/tag/HexBlockTagProvider.java | 2 +- .../datagen/tag/HexItemTagProvider.java | 2 +- .../server/ScrungledPatternsSave.java | 4 +- .../hexcasting/xplat/IXplatAbstractions.java | 18 +-- .../src/main/resources/hexplat.accesswidener | 15 -- Fabric/build.gradle | 18 ++- Fabric/gradle.properties | 2 +- .../fabric/FabricHexClientInitializer.kt | 12 +- .../hexcasting/fabric/FabricHexConfig.java | 6 +- .../hexcasting/fabric/FabricHexInitializer.kt | 54 ++++++-- .../fabric/cc/CCFavoredPigment.java | 4 +- .../hexcasting/fabric/cc/CCPatterns.java | 5 +- .../fabric/cc/CCStaffcastImage.java | 19 +-- .../fabric/cc/HexCardinalComponents.java | 56 +++----- .../fabric/cc/adimpl/CCEntityIotaHolder.java | 9 +- .../fabric/cc/adimpl/CCHexHolder.java | 12 ++ .../fabric/cc/adimpl/CCItemIotaHolder.java | 32 ++++- .../fabric/cc/adimpl/CCMediaHolder.java | 22 +++ .../fabric/cc/adimpl/CCPigment.java | 1 - .../fabric/cc/adimpl/CCVariantItem.java | 13 +- .../datagen/HexFabricConditionsBuilder.java | 71 ++++------ .../datagen/HexFabricDataGenerators.java | 13 +- .../accessories/AccessoriesApiInterop.java | 47 +++++++ .../LensAccessoryRenderer.java} | 24 ++-- .../interop/emi/BrainsweepeeEmiStack.java | 2 +- .../interop/trinkets/TrinketsApiInterop.java | 58 -------- .../fabric/loot/FabricHexLootModJankery.java | 19 +-- .../FabricMixinReloadableServerResources.java | 19 --- .../mixin/client/FabricModelManagerMixin.java | 6 +- .../fabric/network/FabricPacketHandler.java | 22 +-- .../FabricModConditionalIngredient.java | 29 +--- .../recipe/FabricUnsealedIngredient.java | 32 ++--- .../fabric/xplat/FabricClientXplatImpl.java | 4 +- .../fabric/xplat/FabricXplatImpl.java | 72 ++++++---- Neoforge/build.gradle | 45 +++--- Neoforge/gradle.properties | 2 +- .../forge/ForgeHexClientInitializer.java | 13 +- .../hexcasting/forge/ForgeHexConfig.java | 15 -- .../hexcasting/forge/ForgeHexInitializer.java | 39 ------ .../forge/cap/ForgeCapabilityHandler.java | 131 ------------------ .../hexcasting/forge/cap/HexCapabilities.java | 38 ----- .../interop/curios/CuriosApiInterop.java | 11 -- .../forge/loot/ForgeHexAmethystLootMod.java | 4 +- .../forge/network/ForgePacketHandler.java | 32 ----- .../forge/network/MsgAltioraUpdateAck.java | 58 ++------ .../forge/network/MsgBrainsweepAck.java | 63 +++------ .../forge/network/MsgPigmentUpdateAck.java | 53 ++----- .../network/MsgSentinelStatusUpdateAck.java | 81 ++--------- .../forge/recipe/ForgeUnsealedIngredient.java | 46 ------ .../forge/xplat/ForgeClientXplatImpl.java | 16 --- .../forge/xplat/ForgeXplatImpl.java | 103 +------------- gradle.properties | 2 +- settings.gradle | 10 +- 106 files changed, 549 insertions(+), 2251 deletions(-) create mode 100644 Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java rename Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/{trinkets/LensTrinketRenderer.java => accessories/LensAccessoryRenderer.java} (55%) delete mode 100644 Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/TrinketsApiInterop.java diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java index 79c7d4f0cf..f58dfab3a9 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/FailToCastGreatSpellTrigger.java @@ -34,10 +34,5 @@ public static record Instance(Optional player) implements public Optional player() { return player; } - - @Override - public Optional player() { - return Optional.empty(); - } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java index f67446e43a..15ecc74267 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/MinMaxLongs.java @@ -5,34 +5,27 @@ import com.mojang.serialization.Codec; import net.minecraft.advancements.critereon.MinMaxBounds; -<<<<<<< HEAD -import javax.annotation.Nullable; -import java.util.Objects; -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 import java.util.Optional; import java.util.function.Function; -public record MinMaxLongs(Optional min, Optional max, Optional minSq, Optional maxSq) implements MinMaxBounds { -<<<<<<< HEAD - public static final MinMaxLongs ANY = new MinMaxLongs(null, null); +public record MinMaxLongs( + Optional min, + Optional max, + Optional minSq, + Optional maxSq +) implements MinMaxBounds { + public static final Codec CODEC = + MinMaxBounds.createCodec(Codec.LONG, MinMaxLongs::new); - public static final Codec CODEC = MinMaxBounds.createCodec(Codec.LONG, MinMaxLongs::new); - - private MinMaxLongs(Optional longA, Optional longB) { - this(longA, longB, squareOpt(longA), squareOpt(longB)); - } -======= - public static final Codec CODEC = MinMaxBounds.createCodec(Codec.LONG, MinMaxLongs::new); - - public static final MinMaxLongs ANY = new MinMaxLongs(Optional.empty(), Optional.empty()); + public static final MinMaxLongs ANY = + new MinMaxLongs(Optional.empty(), Optional.empty()); private MinMaxLongs(Optional min, Optional max) { this(min, max, squareOpt(min), squareOpt(max)); } ->>>>>>> refs/remotes/slava/devel/port-1.21 - private static MinMaxLongs create(StringReader reader, Optional min, Optional max) throws CommandSyntaxException { + private static MinMaxLongs create(StringReader reader, Optional min, Optional max) + throws CommandSyntaxException { if (min.isPresent() && max.isPresent() && min.get() > max.get()) { throw ERROR_SWAPPED.createWithContext(reader); } else { @@ -40,20 +33,12 @@ private static MinMaxLongs create(StringReader reader, Optional min, Optio } } -<<<<<<< HEAD - - - - private static Optional squareOpt(Optional l) { - return l.map((double_) -> double_ * double_); -======= private static Optional squareOpt(Optional value) { - return value.map(p_297909_ -> p_297909_ * p_297909_); ->>>>>>> refs/remotes/slava/devel/port-1.21 + return value.map(v -> v * v); } - public static MinMaxLongs exactly(long l) { - return new MinMaxLongs(Optional.of(l), Optional.of(l)); + public static MinMaxLongs exactly(long value) { + return new MinMaxLongs(Optional.of(value), Optional.of(value)); } public static MinMaxLongs between(long min, long max) { @@ -61,29 +46,6 @@ public static MinMaxLongs between(long min, long max) { } public static MinMaxLongs atLeast(long min) { -<<<<<<< HEAD - return new MinMaxLongs(Optional.of(min), null); - } - - public static MinMaxLongs atMost(long max) { - return new MinMaxLongs(null, Optional.of(max)); - } - - public boolean matches(long l) { - if (this.min.isPresent() && this.min.get() > l) { - return false; - } else { - return this.max.isEmpty() || this.max.get() >= l; - } - } - - public boolean matchesSqr(long l) { - if (this.minSq.isPresent() && this.minSq.get() > l) { - return false; - } else { - return this.maxSq.isEmpty() || this.maxSq.get() >= l; - } -======= return new MinMaxLongs(Optional.of(min), Optional.empty()); } @@ -92,38 +54,28 @@ public static MinMaxLongs atMost(long max) { } public boolean matches(long value) { - return (this.min.isEmpty() || this.min.get() <= value) && (this.max.isEmpty() || this.max.get() >= value); + return (this.min.isEmpty() || this.min.get() <= value) + && (this.max.isEmpty() || this.max.get() >= value); } public boolean matchesSqr(long value) { - return (this.minSq.isEmpty() || this.minSq.get() <= value) && (this.maxSq.isEmpty() || this.maxSq.get() >= value); ->>>>>>> refs/remotes/slava/devel/port-1.21 + return (this.minSq.isEmpty() || this.minSq.get() <= value) + && (this.maxSq.isEmpty() || this.maxSq.get() >= value); } public static MinMaxLongs fromReader(StringReader reader) throws CommandSyntaxException { - return fromReader(reader, (l) -> l); + return fromReader(reader, l -> l); } -<<<<<<< HEAD - public static MinMaxLongs fromReader(StringReader reader, Function map) throws CommandSyntaxException { - BuiltInExceptionProvider builtInExceptions = CommandSyntaxException.BUILT_IN_EXCEPTIONS; - Objects.requireNonNull(builtInExceptions); - return MinMaxBounds.fromReader(reader, MinMaxLongs::create, Long::parseLong, builtInExceptions::readerInvalidLong, map); - } - - @Override - public Optional min() { - return Optional.empty(); - } - - @Override - public Optional max() { - return Optional.empty(); -======= - public static MinMaxLongs fromReader(StringReader reader, Function formatter) throws CommandSyntaxException { + public static MinMaxLongs fromReader(StringReader reader, Function formatter) + throws CommandSyntaxException { return MinMaxBounds.fromReader( - reader, MinMaxLongs::create, Long::parseLong, CommandSyntaxException.BUILT_IN_EXCEPTIONS::readerInvalidLong, formatter + reader, + MinMaxLongs::create, + Long::parseLong, + CommandSyntaxException.BUILT_IN_EXCEPTIONS::readerInvalidLong, + formatter ); ->>>>>>> refs/remotes/slava/devel/port-1.21 } } + diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt index 966e6abe18..f9d9eacef1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/ParticleSpray.kt @@ -17,6 +17,7 @@ import net.minecraft.world.phys.Vec3 */ data class ParticleSpray(val pos: Vec3, val vel: Vec3, val fuzziness: Double, val spread: Double, val count: Int = 20) { companion object { + @JvmStatic val STREAM_CODEC: StreamCodec = StreamCodec.composite( PaucalCodecs.VEC3, ParticleSpray::pos, @@ -38,6 +39,8 @@ data class ParticleSpray(val pos: Vec3, val vel: Vec3, val fuzziness: Double, va } } + + fun sprayParticles(world: ServerLevel, color: FrozenPigment) { IXplatAbstractions.INSTANCE.sendPacketNear(this.pos, 128.0, world, MsgCastParticleS2C(this, color)) } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java index 20b6825d6c..c37ed07f58 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java @@ -295,15 +295,9 @@ protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { tag.putLong(TAG_MEDIA, this.media); if (this.displayMsg != null && this.displayItem != null) { -<<<<<<< HEAD - tag.putString(TAG_ERROR_MSG, Component.Serializer.toJson(this.displayMsg, level.registryAccess())); - var itemTag = new CompoundTag(); - this.displayItem.save(level.registryAccess(), itemTag); -======= tag.putString(TAG_ERROR_MSG, Component.Serializer.toJson(this.displayMsg, registries)); var itemTag = new CompoundTag(); this.displayItem.save(registries, itemTag); ->>>>>>> refs/remotes/slava/devel/port-1.21 tag.put(TAG_ERROR_DISPLAY, itemTag); } if (this.pigment != null) @@ -324,13 +318,8 @@ protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { } if (tag.contains(TAG_ERROR_MSG, Tag.TAG_STRING) && tag.contains(TAG_ERROR_DISPLAY, Tag.TAG_COMPOUND)) { -<<<<<<< HEAD - var msg = Component.Serializer.fromJson(tag.getString(TAG_ERROR_MSG), level.registryAccess()); - var display = ItemStack.parseOptional(level.registryAccess(), tag.getCompound(TAG_ERROR_DISPLAY)); -======= var msg = Component.Serializer.fromJson(tag.getString(TAG_ERROR_MSG), registries); var display = ItemStack.parseOptional(registries, tag); ->>>>>>> refs/remotes/slava/devel/port-1.21 this.displayMsg = msg; this.displayItem = display; } else { diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java index 993ae26bbe..b62b4ec3c5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java @@ -175,40 +175,23 @@ public CompoundTag save() { } public static CircleExecutionState load(CompoundTag nbt, ServerLevel world) { -<<<<<<< HEAD - var startPos = NbtUtils.readBlockPos(nbt, TAG_IMPETUS_POS); -======= var startPos = NbtUtils.readBlockPos(nbt, TAG_IMPETUS_POS).orElseThrow(); ->>>>>>> refs/remotes/slava/devel/port-1.21 var startDir = Direction.values()[nbt.getByte(TAG_IMPETUS_DIR)]; var knownPositions = new HashSet(); var knownTag = nbt.getList(TAG_KNOWN_POSITIONS, Tag.TAG_COMPOUND); for (var tag : knownTag) { -<<<<<<< HEAD - var blockPos = NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE), TAG_KNOWN_POSITIONS); - blockPos.ifPresent(knownPositions::add); -======= var pos = readBlockPos(HexUtils.downcast(tag, IntArrayTag.TYPE).getAsIntArray()); pos.ifPresent(knownPositions::add); ->>>>>>> refs/remotes/slava/devel/port-1.21 } var reachedPositions = new ArrayList(); var reachedTag = nbt.getList(TAG_REACHED_POSITIONS, Tag.TAG_COMPOUND); for (var tag : reachedTag) { -<<<<<<< HEAD - var blockPos = NbtUtils.readBlockPos(HexUtils.downcast(tag, CompoundTag.TYPE), TAG_REACHED_POSITIONS); - blockPos.ifPresent(reachedPositions::add); - } - - var currentPos = NbtUtils.readBlockPos(nbt, TAG_CURRENT_POS); -======= var pos = readBlockPos(HexUtils.downcast(tag, IntArrayTag.TYPE).getAsIntArray()); pos.ifPresent(reachedPositions::add); } var currentPos = NbtUtils.readBlockPos(nbt, TAG_CURRENT_POS).orElseThrow(); ->>>>>>> refs/remotes/slava/devel/port-1.21 var enteredFrom = Direction.values()[nbt.getByte(TAG_ENTERED_FROM)]; var image = CastingImage.getCODEC().parse(NbtOps.INSTANCE, nbt.getCompound(TAG_IMAGE)).getOrThrow(); @@ -220,7 +203,7 @@ public static CircleExecutionState load(CompoundTag nbt, ServerLevel world) { if (nbt.contains(TAG_PIGMENT, Tag.TAG_COMPOUND)) pigment = FrozenPigment.CODEC.parse(NbtOps.INSTANCE, nbt.getCompound(TAG_PIGMENT)).getOrThrow(); - return new CircleExecutionState(startPos.get(), startDir, knownPositions, reachedPositions, currentPos.get(), + return new CircleExecutionState(startPos, startDir, knownPositions, reachedPositions, currentPos, enteredFrom, image, caster, pigment); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java index 89da8b5c97..dd5b73d701 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java @@ -177,16 +177,11 @@ protected long extractMediaFromInventory(long costLeft, boolean allowOvercast, b protected boolean canOvercast() { var adv = this.world.getServer().getAdvancements().get(modLoc("y_u_no_cast_angy")); -<<<<<<< HEAD - var advs = this.caster.getAdvancements(); - return advs.getOrStartProgress(adv).isDone(); -======= if(adv != null) { var advs = this.caster.getAdvancements(); return advs.getOrStartProgress(adv).isDone(); } return false; ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java index 2623d6121b..5f2b33455b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/Iota.java @@ -13,29 +13,17 @@ import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import com.mojang.serialization.Codec; -<<<<<<< HEAD -import com.mojang.serialization.MapCodec; -import io.netty.buffer.ByteBuf; -======= import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; import net.minecraft.nbt.NbtOps; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.nbt.Tag; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; -<<<<<<< HEAD -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.world.item.component.CustomData; -======= import net.minecraft.network.chat.ComponentSerialization; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.level.Level; ->>>>>>> refs/remotes/slava/devel/port-1.21 import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -47,25 +35,7 @@ public abstract class Iota { @NotNull protected final Supplier> type; -<<<<<<< HEAD - public static final Codec IOTA_CODEC = HexIotaTypes.REGISTRY.byNameCodec() - .dispatch("type", Iota::getType, IotaType::codec); - - public static final StreamCodec IOTA_STREAM_CODEC = new StreamCodec<>() { - @Override - public void encode(RegistryFriendlyByteBuf buf, Iota iota) { - ByteBufCodecs.fromCodecWithRegistries(IOTA_CODEC).encode(buf, iota); - } - - public Iota decode(RegistryFriendlyByteBuf buf) { - var iota = ByteBufCodecs.fromCodecWithRegistries(IOTA_CODEC).decode(buf); return iota; - } - }; - - protected Iota(@NotNull IotaType type, @NotNull Object payload) { -======= protected Iota(@NotNull Supplier> type) { ->>>>>>> refs/remotes/slava/devel/port-1.21 this.type = type; } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java index e214aea2bb..66e4130482 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/iota/IotaType.java @@ -3,13 +3,9 @@ import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.HexRegistries; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; -<<<<<<< HEAD -import com.mojang.datafixers.util.Pair; -======= import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.mojang.serialization.Codec; import com.mojang.serialization.DataResult; ->>>>>>> refs/remotes/slava/devel/port-1.21 import com.mojang.serialization.MapCodec; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.Font; @@ -50,50 +46,7 @@ public abstract class IotaType { public abstract MapCodec codec(); -<<<<<<< HEAD - /** - * Get the color associated with this datum type. - */ - public abstract int color(); - - /** - * Get the MapCodec associated with this datum type. - */ - - public abstract MapCodec codec(); - - /** - * Get a display component that's the name of this iota type. - */ - public Component typeName() { - var key = HexIotaTypes.REGISTRY.getKey(this); - return Component.translatable("hexcasting.iota." + key) - .withStyle(style -> style.withColor(TextColor.fromRgb(color()))); - } - - public static CompoundTag serialize(Iota iota) { - var type = iota.getType(); - var typeId = HexIotaTypes.REGISTRY.getKey(type); - if (typeId == null) { - throw new IllegalStateException( - "Tried to serialize an unregistered iota type. Iota: " + iota - + " ; Type" + type.getClass().getTypeName()); - } - - // We check if it's too big on serialization; if it is we just return a garbage. - if (isTooLargeToSerialize(List.of(iota), 0)) { - // Garbage will never be too large so we just recurse - return serialize(new GarbageIota()); - } - var dataTag = iota.serialize(); - var out = new CompoundTag(); - out.putString(HexIotaTypes.KEY_TYPE, typeId.toString()); - out.put(HexIotaTypes.KEY_DATA, dataTag); - return out; - } -======= public abstract StreamCodec streamCodec(); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static boolean isTooLargeToSerialize(Iterable examinee) { return isTooLargeToSerialize(examinee, 1); @@ -109,57 +62,7 @@ private static boolean isTooLargeToSerialize(Iterable examinee, int starti return totalSize >= HexIotaTypes.MAX_SERIALIZATION_TOTAL; } -<<<<<<< HEAD - /** - * This method attempts to find the type from the {@code type} key. - * See {@link IotaType#serialize(Iota)} for the storage format. - * - * @return {@code null} if it cannot get the type. - */ - @org.jetbrains.annotations.Nullable - public static IotaType getTypeFromTag(CompoundTag tag) { - if (!tag.contains(HexIotaTypes.KEY_TYPE, Tag.TAG_STRING)) { - return null; - } - var typeKey = tag.getString(HexIotaTypes.KEY_TYPE); - var typeLoc = ResourceLocation.tryParse(typeKey); - return HexIotaTypes.REGISTRY.get(typeLoc); - } - - /** - * Attempt to deserialize an iota from a tag. - *
- * Iotas are saved as such: - * - * { - * "type": "hexcasting:atype", - * "data": {...} - * } - * - */ - public static Iota deserialize(CompoundTag tag, ServerLevel world) { - var type = getTypeFromTag(tag); - if (type == null) { - return new GarbageIota(); - } - var data = tag.get(HexIotaTypes.KEY_DATA); - if (data == null) { - return new GarbageIota(); - } - Iota deserialized; - try { - deserialized = Objects.requireNonNullElse(type.deserialize(data, world), new NullIota()); - } catch (IllegalArgumentException exn) { - HexAPI.LOGGER.warn("Caught an exception deserializing an iota", exn); - deserialized = new GarbageIota(); - } - return deserialized; - } - - private static Component brokenIota() { -======= public static Component brokenIota() { ->>>>>>> refs/remotes/slava/devel/port-1.21 return Component.translatable("hexcasting.spelldata.unknown") .withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java index 99ecacddac..f22b1b82a2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/mod/HexConfig.java @@ -106,18 +106,9 @@ default Tier opBreakHarvestLevel() { // Simple extensions for resource location configs public static boolean anyMatch(List keys, ResourceLocation key) { for (String s : keys) { -<<<<<<< HEAD - var strings = s.split(":"); - if (ResourceLocation.isValidNamespace(strings[0]) && ResourceLocation.isValidPath(strings[1])) { - var rl = ResourceLocation.parse(s); - if (rl.equals(key)) { - return true; - } -======= var rl = ResourceLocation.tryParse(s); if (rl != null && rl.equals(key)) { return true; ->>>>>>> refs/remotes/slava/devel/port-1.21 } } return false; diff --git a/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java b/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java index 1704e3af72..b9a42d6680 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/pigment/FrozenPigment.java @@ -25,28 +25,6 @@ public record FrozenPigment(ItemStack item, UUID owner) { public static final Supplier DEFAULT = () -> new FrozenPigment(new ItemStack(HexItems.DEFAULT_PIGMENT), Util.NIL_UUID); -<<<<<<< HEAD - public CompoundTag serializeToNBT() { - var out = new CompoundTag(); - out.put(TAG_STACK, this.item.save(new CompoundTag())); - out.putUUID(TAG_OWNER, this.owner); - return out; - } - - public static FrozenPigment fromNBT(CompoundTag tag) { - if (tag.isEmpty()) { - return FrozenPigment.DEFAULT.get(); - } - try { - CompoundTag stackTag = tag.getCompound(TAG_STACK); - var stack = ItemStack.(stackTag); - var uuid = tag.getUUID(TAG_OWNER); - return new FrozenPigment(stack, uuid); - } catch (NullPointerException exn) { - return FrozenPigment.DEFAULT.get(); - } - } -======= public static Codec CODEC = RecordCodecBuilder.create(inst -> inst.group( ItemStack.CODEC.fieldOf("stack").forGetter(FrozenPigment::item), @@ -58,7 +36,6 @@ public static FrozenPigment fromNBT(CompoundTag tag) { UUIDUtil.STREAM_CODEC, FrozenPigment::owner, FrozenPigment::new ); ->>>>>>> refs/remotes/slava/devel/port-1.21 public ColorProvider getColorProvider() { return IXplatAbstractions.INSTANCE.getColorProvider(this); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt index 1ed566c381..15095adb09 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/utils/NBTHelper.kt @@ -2,7 +2,6 @@ package at.petrak.hexcasting.api.utils -import at.petrak.hexcasting.common.components.VariantItemComponent import net.minecraft.advancements.AdvancementHolder import net.minecraft.core.component.DataComponents import net.minecraft.nbt.* @@ -192,116 +191,3 @@ val Tag.asCompound get() = this as? CompoundTag ?: CompoundTag() // asString is defined in Tag val Tag.asList get() = this as? ListTag ?: ListTag() val Tag.asUUID: UUID get() = if (this is IntArrayTag && this.size == 4) NbtUtils.loadUUID(this) else UUID(0, 0) -<<<<<<< HEAD - -// ========================================================================================================== ItemStack - -// Checks for containment - -fun ItemStack.hasNumber(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasNumber(key) -fun ItemStack.hasByte(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasByte(key) -fun ItemStack.hasShort(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasShort(key) -fun ItemStack.hasInt(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasInt(key) -fun ItemStack.hasLong(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasLong(key) -fun ItemStack.hasFloat(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasFloat(key) -fun ItemStack.hasDouble(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasDouble(key) -fun ItemStack.hasLongArray(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasLongArray(key) -fun ItemStack.hasIntArray(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasIntArray(key) -fun ItemStack.hasByteArray(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasByteArray(key) -fun ItemStack.hasCompound(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasCompound(key) -fun ItemStack.hasString(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasString(key) -fun ItemStack.hasList(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasList(key) -fun ItemStack.hasList(key: String, objType: Int) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasList(key, objType) -fun ItemStack.hasList(key: String, objType: Byte) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasList(key, objType) -fun ItemStack.hasUUID(key: String) = get(DataComponents.CUSTOM_DATA)?.copyTag().hasUUID(key) - -@JvmName("contains") -fun ItemStack.containsTag(key: String) = get(DataComponents.CUSTOM_DATA)?.contains(key) - -@JvmName("contains") -fun ItemStack.containsTag(key: String, id: Byte) = get(DataComponents.CUSTOM_DATA)?.copyTag().contains(key, id) - -@JvmName("contains") -fun ItemStack.containsTag(key: String, id: Int) = get(DataComponents.CUSTOM_DATA)?.copyTag().contains(key, id) - -fun ItemStack.findVariantHolder() = get(VariantItemComponent.COMPONENT_TYPE) - - -// Puts -private fun ItemStack.updateCustomData(block: CompoundTag.() -> Unit) { - val old = this.get(DataComponents.CUSTOM_DATA) - val tag = (old?.copyTag() ?: CompoundTag()).apply(block) - this.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)) -} - -fun ItemStack.putBoolean(key: String, value: Boolean) = updateCustomData { putBoolean(key, value) }fun ItemStack.putByte(key: String, value: Byte) = updateCustomData { putByte(key, value) } -fun ItemStack.putShort(key: String, value: Short) = updateCustomData { putShort(key, value) } -fun ItemStack.putInt(key: String, value: Int) = updateCustomData { putInt(key, value) } -fun ItemStack.putLong(key: String, value: Long) = updateCustomData { putLong(key, value) } -fun ItemStack.putFloat(key: String, value: Float) = updateCustomData { putFloat(key, value) } -fun ItemStack.putDouble(key: String, value: Double) = updateCustomData { putDouble(key, value) } - -fun ItemStack.putLongArray(key: String, value: LongArray) = updateCustomData { putLongArray(key, value) } -fun ItemStack.putIntArray(key: String, value: IntArray) = updateCustomData { putIntArray(key, value) } -fun ItemStack.putByteArray(key: String, value: ByteArray) = updateCustomData { putByteArray(key, value) } -fun ItemStack.putCompound(key: String, value: CompoundTag) = updateCustomData { put(key, value) } -fun ItemStack.putString(key: String, value: String) = updateCustomData { putString(key, value) } -fun ItemStack.putList(key: String, value: ListTag) = updateCustomData { put(key, value) } -fun ItemStack.putUUID(key: String, value: UUID) = updateCustomData { putUUID(key, value) } - -// Remove - -fun ItemStack.remove(key: String) = updateCustomData { remove(key) } - -// Gets - -private fun ItemStack.customTag(): CompoundTag = - get(DataComponents.CUSTOM_DATA)?.copyTag() ?: CompoundTag() - - -@JvmOverloads -fun ItemStack.getBoolean(key: String, defaultExpected: Boolean = false) = - customTag().getBoolean(key).let { if (customTag().contains(key)) it else defaultExpected } - -@JvmOverloads -fun ItemStack.getByte(key: String, defaultExpected: Byte = 0) = - customTag().getByte(key).let { if (customTag().contains(key)) it else defaultExpected } - -@JvmOverloads -fun ItemStack.getShort(key: String, defaultExpected: Short = 0) = - customTag().getShort(key).let { if (customTag().contains(key)) it else defaultExpected } - -@JvmOverloads -fun ItemStack.getInt(key: String, defaultExpected: Int = 0) = - customTag().getInt(key).let { if (customTag().contains(key)) it else defaultExpected } - -@JvmOverloads -fun ItemStack.getLong(key: String, defaultExpected: Long = 0) = - customTag().getLong(key).let { if (customTag().contains(key)) it else defaultExpected } - -@JvmOverloads -fun ItemStack.getFloat(key: String, defaultExpected: Float = 0f) = - customTag().getFloat(key).let { if (customTag().contains(key)) it else defaultExpected } - -@JvmOverloads -fun ItemStack.getDouble(key: String, defaultExpected: Double = 0.0) = - customTag().getDouble(key).let { if (customTag().contains(key)) it else defaultExpected } - -fun ItemStack.getLongArray(key: String) = customTag().getLongArray(key) -fun ItemStack.getIntArray(key: String) = customTag().getIntArray(key) -fun ItemStack.getByteArray(key: String) = customTag().getByteArray(key) -fun ItemStack.getCompound(key: String) = customTag().getCompound(key) -fun ItemStack.getString(key: String) = customTag().getString(key) -fun ItemStack.getList(key: String, objType: Int) = customTag().getList(key, objType) -fun ItemStack.getUUID(key: String) = customTag().getUUID(key) - -@JvmName("get") -fun ItemStack.getTag(key: String) = customTag().get(key) - -// Get-or-create - -fun ItemStack.getOrCreateCompound(key: String): CompoundTag = customTag().getOrCreateCompound(key) -fun ItemStack.getOrCreateList(key: String, objType: Byte) = customTag().getOrCreateList(key, objType) -fun ItemStack.getOrCreateList(key: String, objType: Int) = customTag().getOrCreateList(key, objType) -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 diff --git a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java index 1d4967d6c7..127a6ef0b1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java @@ -267,7 +267,25 @@ public static void onModelRegister(ResourceManager recMan, Consumer(); for (int i = 0; i < BlockQuenchedAllay.VARIANTS; i++) { - var variantLoc = new ModelResourceLocation(modLoc(locStart + blockLoc.getPath() + "_" + i), ModelResourceLocation.STANDALONE_VARIANT); + var variantLoc = new ModelResourceLocation(modLoc(locStart + blockLoc.getPath() + "_" + i), ModelResourceLocation.INVENTORY_VARIANT); var model = map.get(variantLoc); list.add(model); } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt index 8dfc16bcbc..b45e4923ac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/gui/GuiSpellcasting.kt @@ -294,13 +294,8 @@ class GuiSpellcasting constructor( return false } -<<<<<<< HEAD - override fun mouseScrolled(pDelta: Double, e: Double, f: Double, g: Double): Boolean { - super.mouseScrolled(pDelta, e, f, g) -======= override fun mouseScrolled(mouseX: Double, mouseY: Double, scrollX: Double, scrollY: Double): Boolean { super.mouseScrolled(mouseX, mouseY, scrollX, scrollY) ->>>>>>> refs/remotes/slava/devel/port-1.21 val mouseHandler = Minecraft.getInstance().mouseHandler diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java index 29def93978..2d8c543d03 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/HexAdditionalRenderers.java @@ -14,6 +14,7 @@ import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; import com.mojang.datafixers.util.Pair; +import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.multiplayer.ClientLevel; @@ -44,7 +45,7 @@ public static void overlayLevel(PoseStack ps, float partialTick) { } } - public static void overlayGui(GuiGraphics graphics, float partialTicks) { + public static void overlayGui(GuiGraphics graphics, DeltaTracker partialTicks) { tryRenderScryingLensOverlay(graphics, partialTicks); } @@ -149,7 +150,7 @@ private static class Icos { } } - private static void tryRenderScryingLensOverlay(GuiGraphics graphics, float partialTicks) { + private static void tryRenderScryingLensOverlay(GuiGraphics graphics, DeltaTracker partialTicks) { var mc = Minecraft.getInstance(); var ps = graphics.pose(); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java index 505d7c037a..616880da50 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/BlockConjured.java @@ -34,17 +34,10 @@ public BlockConjured(Properties properties) { @Override public BlockState playerWillDestroy(Level pLevel, BlockPos pPos, BlockState pState, Player pPlayer) { -<<<<<<< HEAD - super.playerWillDestroy(pLevel, pPos, pState, pPlayer); - // For some reason the block doesn't play breaking noises. So we fix that! - pPlayer.playSound(SoundEvents.AMETHYST_BLOCK_BREAK, 1f, 1f); - return pState; -======= var res = super.playerWillDestroy(pLevel, pPos, pState, pPlayer); // For some reason the block doesn't play breaking noises. So we fix that! pPlayer.playSound(SoundEvents.AMETHYST_BLOCK_BREAK, 1f, 1f); return res; ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Nullable diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java index ef2499b732..8598c47f33 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/akashic/BlockAkashicBookshelf.java @@ -41,15 +41,8 @@ public BlockAkashicBookshelf(Properties p_49795_) { } @Override -<<<<<<< HEAD - public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, - BlockHitResult pHit) { - if (pLevel.getBlockEntity(pPos) instanceof BlockEntityAkashicBookshelf shelf) { - var stack = pPlayer.getItemInHand(pHand); -======= protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hitResult) { if (level.getBlockEntity(pos) instanceof BlockEntityAkashicBookshelf shelf) { ->>>>>>> refs/remotes/slava/devel/port-1.21 if (stack.getItem() instanceof ItemScroll scroll) { if (!level.isClientSide()) { scroll.writeDatum(stack, new PatternIota(shelf.getPattern())); @@ -124,4 +117,9 @@ public BlockState rotate(BlockState pState, Rotation pRot) { public BlockState mirror(BlockState pState, Mirror pMirror) { return pState.rotate(pMirror.getRotation(pState.getValue(FACING))); } + + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { + return null; + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java index 96f62485a9..387936a4a8 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityLookingImpetus.java @@ -37,20 +37,9 @@ public static void serverTick(Level level, BlockPos pos, BlockState bs, BlockEnt int prevLookAmt = self.lookAmount; int range = 20; -<<<<<<< HEAD - AABB box = AABB.ofSize( - Vec3.atCenterOf(pos), // center of the cube - range * 2 + 1, - range * 2 + 1, - range * 2 + 1 - ); - - var players = level.getEntitiesOfClass(ServerPlayer.class, box); -======= //TODO port: test AABB check, it's Vec3 now instead of BlockPos var players = level.getEntitiesOfClass(ServerPlayer.class, new AABB(pos.offset(-range, -range, -range).getCenter(), pos.offset(range, range, range).getCenter())); ->>>>>>> refs/remotes/slava/devel/port-1.21 ServerPlayer looker = null; for (var player : players) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java index 2bd98239c8..385b591e8a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockEntityRedstoneImpetus.java @@ -8,10 +8,7 @@ import com.mojang.datafixers.util.Pair; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -<<<<<<< HEAD -======= import net.minecraft.core.HolderLookup; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; @@ -113,12 +110,8 @@ public void applyScryingLensOverlay(List> lines, if (!plProfile.equals(resolvableProfile) || cachedDisplayStack == null) { cachedDisplayProfile = resolvableProfile; var head = new ItemStack(Items.PLAYER_HEAD); -<<<<<<< HEAD - head.set(DataComponents.PROFILE, new ResolvableProfile(cachedDisplayProfile)); -======= head.set(DataComponents.PROFILE, resolvableProfile); head.getItem().verifyComponentsAfterLoad(head); ->>>>>>> refs/remotes/slava/devel/port-1.21 cachedDisplayStack = head; } lines.add(new Pair<>(cachedDisplayStack, diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java index 2555590fe8..f9edc217f1 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockLookingImpetus.java @@ -22,13 +22,13 @@ public BlockLookingImpetus(Properties p_49795_) { } @Override -<<<<<<< HEAD - public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { - return null; -======= public BlockEntityType getBlockEntityType() { return HexBlockEntities.IMPETUS_LOOK_TILE; ->>>>>>> refs/remotes/slava/devel/port-1.21 + } + + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { + return null; } @Nullable diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java index 3b3fd21fd8..a79a2da738 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRedstoneImpetus.java @@ -38,6 +38,11 @@ public BlockEntityType getBlockEntityType( return HexBlockEntities.IMPETUS_REDSTONE_TILE; } + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { + return null; + } + @Nullable @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { @@ -51,20 +56,11 @@ protected void createBlockStateDefinition(StateDefinition.Builder>>>>>> refs/remotes/slava/devel/port-1.21 tile.clearPlayer(); tile.sync(); level.playSound(null, pos, HexSounds.IMPETUS_REDSTONE_CLEAR, SoundSource.BLOCKS, 1f, 1f); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRightClickImpetus.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRightClickImpetus.java index bb9520fdc0..3f442ef9e2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRightClickImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/impetuses/BlockRightClickImpetus.java @@ -25,6 +25,11 @@ public BlockEntityType getBlockEntityType( return HexBlockEntities.IMPETUS_RIGHTCLICK_TILE; } + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit) { + return null; + } + @Nullable @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java index fb57cec731..946369429a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockAmethystDirectional.java @@ -9,11 +9,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DirectionalBlock; -<<<<<<< HEAD -import net.minecraft.world.level.block.state.BlockBehaviour; -======= import net.minecraft.world.level.block.EndRodBlock; ->>>>>>> refs/remotes/slava/devel/port-1.21 +import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.BlockHitResult; @@ -25,7 +22,6 @@ public BlockAmethystDirectional(Properties properties) { super(properties); } - public static final MapCodec CODEC = BlockBehaviour.simpleCodec(BlockAmethystDirectional::new); @Override protected MapCodec codec() { return CODEC; @@ -46,9 +42,4 @@ protected void createBlockStateDefinition(StateDefinition.Builder codec() { - return CODEC; - } } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java index e54bfc862c..3676b5a009 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/decoration/BlockHexWoodButton.java @@ -10,11 +10,7 @@ public class BlockHexWoodButton extends ButtonBlock { public BlockHexWoodButton(Properties $$0) { -<<<<<<< HEAD - super(BlockSetType.DARK_OAK,30, $$0); -======= super(BlockSetType.DARK_OAK, 30, $$0); ->>>>>>> refs/remotes/slava/devel/port-1.21 } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt index 386fad014e..415d4c2a13 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt +++ b/Common/src/main/java/at/petrak/hexcasting/common/casting/actions/spells/OpEdifySapling.kt @@ -51,6 +51,7 @@ object OpEdifySapling : SpellAction { env.world, env.world.chunkSource.generator, pos, + bs, env.world.getRandom() ) if (success) break diff --git a/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java b/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java index f27a8c24a3..2ff15760d8 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/command/ListPerWorldPatternsCommand.java @@ -104,12 +104,8 @@ private static int giveAll(CommandSourceStack source, Collection t var pat = HexPattern.fromAngles(signature, startDir); var stack = new ItemStack(HexItems.SCROLL_LARGE); -<<<<<<< HEAD - stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); -======= stack.set(HexDataComponents.ACTION, key); stack.set(HexDataComponents.PATTERN, pat); ->>>>>>> refs/remotes/slava/devel/port-1.21 for (var player : targets) { var stackEntity = player.drop(stack, false); @@ -139,12 +135,8 @@ private static int giveOne(CommandSourceStack source, Collection t ResourceKey actionKey, HexPattern pat) { if (!targets.isEmpty()) { var stack = new ItemStack(HexItems.SCROLL_LARGE); -<<<<<<< HEAD - stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); -======= stack.set(HexDataComponents.ACTION, actionKey); stack.set(HexDataComponents.PATTERN, pat); ->>>>>>> refs/remotes/slava/devel/port-1.21 source.sendSuccess(() -> Component.translatable( diff --git a/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java index 994d4ae076..4b8dc838ad 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/entities/EntityWallScroll.java @@ -3,7 +3,6 @@ import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.api.utils.NBTHelper; -import at.petrak.hexcasting.common.components.ItemIotaHolderComponent; import at.petrak.hexcasting.common.items.storage.ItemScroll; import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; @@ -16,11 +15,7 @@ import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; -<<<<<<< HEAD -import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; -======= import net.minecraft.network.protocol.common.ClientCommonPacketListener; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; import net.minecraft.network.syncher.EntityDataAccessor; @@ -72,20 +67,8 @@ public EntityWallScroll(Level world, BlockPos pos, Direction dir, ItemStack scro } public void recalculateDisplay() { -<<<<<<< HEAD - CompoundTag patternTag = scroll.get(DataComponents.CUSTOM_DATA).copyTag().getCompound(ItemScroll.TAG_PATTERN); - var stuck = ItemStack.EMPTY.get(ItemIotaHolderComponent.COMPONENT_TYPE).iota(); - if (patternTag != null) { - this.pattern = HexPattern.fromNBT(patternTag); - this.isAncient = NBTHelper.hasString(scroll, ItemScroll.TAG_OP_ID); - } else { - this.pattern = null; - this.isAncient = false; - } -======= this.pattern = scroll.get(HexDataComponents.PATTERN); this.isAncient = scroll.has(HexDataComponents.ACTION); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override @@ -102,8 +85,6 @@ public void setShowsStrokeOrder(boolean b) { } @Override -<<<<<<< HEAD -======= protected AABB calculateBoundingBox(BlockPos pos, Direction p_direction) { float f = 0.46875F; Vec3 vec3 = Vec3.atCenterOf(pos).relative(p_direction, -0.46875); @@ -118,7 +99,6 @@ protected AABB calculateBoundingBox(BlockPos pos, Direction p_direction) { } @Override ->>>>>>> refs/remotes/slava/devel/port-1.21 public void dropItem(@Nullable Entity pBrokenEntity) { if (this.level().getGameRules().getBoolean(GameRules.RULE_DOENTITYDROPS)) { this.playSound(SoundEvents.PAINTING_BREAK, 1.0F, 1.0F); @@ -145,7 +125,7 @@ public InteractionResult interactAt(Player pPlayer, Vec3 pVec, InteractionHand p if (pPlayer.level() instanceof ServerLevel slevel) { IXplatAbstractions.INSTANCE.sendPacketNear(this.position(), 32.0, slevel, - new MsgRecalcWallScrollDisplayS2C(this.getId(), true)); + new MsgRecalcWallScrollDisplayS2C(this.getId(), true)); } else { // Beat the packet roundtrip to the punch to get a quicker visual this.recalculateDisplay(); @@ -155,44 +135,15 @@ public InteractionResult interactAt(Player pPlayer, Vec3 pVec, InteractionHand p return super.interactAt(pPlayer, pVec, pHand); } - @Override - protected AABB calculateBoundingBox(BlockPos blockPos, Direction direction) { - double x = this.pos.getX() + 0.5; double y = this.pos.getY() + 0.5; double z = this.pos.getZ() + 0.5; - double uh = 0.46875; - double sizeX = (this.blockSize * 16) % 32 == 0 ? 0.5 : 0.0; - double sizeY = (this.blockSize * 16) % 32 == 0 ? 0.5 : 0.0; - - x -= (double) direction.getStepX() * 0.46875; - z -= (double) direction.getStepZ() * 0.46875; - y += sizeY; - double width = (double) this.blockSize * 16; double height = (double) this.blockSize * 16; double length = (double) this.blockSize * 16; - if (direction.getAxis() == Direction.Axis.Z) { - length = 1.0; - } else { - width = 1.0; - } - - width /= 32.0; - height /= 32.0; - length /= 32.0; - return new AABB(x - width, y - height, z - length, x + width, y + height, z + length); - } - @Override public void playPlacementSound() { this.playSound(SoundEvents.PAINTING_PLACE, 1.0F, 1.0F); } -<<<<<<< HEAD - public ClientboundCustomPayloadPacket getAddEntityPacket() { - return IXplatAbstractions.INSTANCE.toVanillaClientboundPacket( - new MsgNewWallScrollS2C(new ClientboundAddEntityPacket(this, this.blockSize, this.pos), -======= @Override public Packet getAddEntityPacket(ServerEntity entity) { return IXplatAbstractions.INSTANCE.toVanillaClientboundPacket( new MsgNewWallScrollS2C(new ClientboundAddEntityPacket(this, this.direction.get3DDataValue(), this.getPos()), ->>>>>>> refs/remotes/slava/devel/port-1.21 pos, direction, scroll, getShowsStrokeOrder(), blockSize)); } @@ -212,11 +163,7 @@ public void readSpawnData(BlockPos pos, Direction dir, ItemStack scrollItem, @Override public void addAdditionalSaveData(CompoundTag tag) { tag.putByte("direction", (byte) this.direction.ordinal()); -<<<<<<< HEAD - tag.put("scroll", HexUtils.serializeToNBT(this.scroll, this.level().registryAccess())); -======= tag.put("scroll", this.scroll.save(registryAccess())); ->>>>>>> refs/remotes/slava/devel/port-1.21 tag.putBoolean("showsStrokeOrder", this.getShowsStrokeOrder()); tag.putInt("blockSize", this.blockSize); super.addAdditionalSaveData(tag); @@ -225,11 +172,7 @@ public void addAdditionalSaveData(CompoundTag tag) { @Override public void readAdditionalSaveData(CompoundTag tag) { this.direction = Direction.values()[tag.getByte("direction")]; -<<<<<<< HEAD - this.scroll = ItemStack.parseOptional(this.level().registryAccess(), tag.getCompound("scroll")); -======= this.scroll = ItemStack.parse(registryAccess(), tag.getCompound("scroll")).orElse(ItemStack.EMPTY); ->>>>>>> refs/remotes/slava/devel/port-1.21 this.blockSize = tag.getInt("blockSize"); this.setDirection(this.direction); @@ -246,15 +189,9 @@ public void moveTo(double pX, double pY, double pZ, float pYaw, float pPitch) { this.setPos(pX, pY, pZ); } -<<<<<<< HEAD - public void lerpTo(double pX, double pY, double pZ, float pYaw, float pPitch, int pPosRotationIncrements, - boolean pTeleport) { - BlockPos blockpos = this.pos.offset((int) (pX - this.getX()), (int) (pY - this.getY()), (int) (pZ - this.getZ())); -======= @Override public void lerpTo(double x, double y, double z, float yRot, float xRot, int steps) { BlockPos blockpos = this.pos.offset((int) (x - this.getX()), (int) (y - this.getY()), (int) (z - this.getZ())); ->>>>>>> refs/remotes/slava/devel/port-1.21 this.setPos(blockpos.getX(), blockpos.getY(), blockpos.getZ()); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java index 255e109e36..c80424c0a5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/impl/HexAPIImpl.java @@ -96,8 +96,6 @@ public Consumer defaultBrainsweepingBehavior() { public FrozenPigment getColorizer(Player player) { return IXplatAbstractions.INSTANCE.getPigment(player); } -<<<<<<< HEAD -======= ArmorMaterial ARMOR_MATERIAL = new ArmorMaterial( Collections.emptyMap(), @@ -113,5 +111,4 @@ public FrozenPigment getColorizer(Player player) { public ArmorMaterial robesMaterial() { return ARMOR_MATERIAL; } ->>>>>>> refs/remotes/slava/devel/port-1.21 } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java index 5521c25d2b..c093ef4307 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/ItemLens.java @@ -5,10 +5,7 @@ import at.petrak.hexcasting.common.lib.HexAttributes; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -<<<<<<< HEAD -======= import net.minecraft.core.Holder; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.core.dispenser.BlockSource; import net.minecraft.core.dispenser.OptionalDispenseItemBehavior; import net.minecraft.world.entity.EquipmentSlot; @@ -32,18 +29,11 @@ public class ItemLens extends Item implements HexBaubleItem { // Wearable, // The 0.1 is *additive* -<<<<<<< HEAD - public static final AttributeModifier GRID_ZOOM = new AttributeModifier(modLoc("scrying_grid_zoom"), 0.33, AttributeModifier.Operation.ADD_MULTIPLIED_BASE); - - public static final AttributeModifier SCRY_SIGHT = new AttributeModifier( - modLoc("scrying_sight"), 1.0, AttributeModifier.Operation.ADD_VALUE); -======= public static final AttributeModifier GRID_ZOOM = new AttributeModifier( HexAPI.modLoc("scrying_lens_zoom"), 0.33, AttributeModifier.Operation.ADD_MULTIPLIED_BASE); public static final AttributeModifier SCRY_SIGHT = new AttributeModifier( HexAPI.modLoc("scrying_lens_sight"), 1.0, AttributeModifier.Operation.ADD_VALUE); ->>>>>>> refs/remotes/slava/devel/port-1.21 public ItemLens(Properties pProperties) { super(pProperties); @@ -55,27 +45,9 @@ public ItemLens(Properties pProperties) { }); } - @Override -<<<<<<< HEAD - public Multimap getHexBaubleAttrs(ItemStack stack) { - HashMultimap out = HashMultimap.create(); -======= - public ItemAttributeModifiers getDefaultAttributeModifiers(ItemStack stack) { - return ItemAttributeModifiers.builder() - .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.HEAD) - .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.MAINHAND) - .add(HexAttributes.GRID_ZOOM, GRID_ZOOM, EquipmentSlotGroup.OFFHAND) - - .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.HEAD) - .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.MAINHAND) - .add(HexAttributes.SCRY_SIGHT, SCRY_SIGHT, EquipmentSlotGroup.OFFHAND) - .build(); - } - @Override public Multimap, AttributeModifier> getHexBaubleAttrs(ItemStack stack) { HashMultimap, AttributeModifier> out = HashMultimap.create(); ->>>>>>> refs/remotes/slava/devel/port-1.21 out.put(HexAttributes.GRID_ZOOM, GRID_ZOOM); out.put(HexAttributes.SCRY_SIGHT, SCRY_SIGHT); return out; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java index 8697b5ac42..60348c00e2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java @@ -8,8 +8,10 @@ import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexSounds; +import com.mojang.authlib.minecraft.client.MinecraftClient; import net.minecraft.ChatFormatting; import net.minecraft.advancements.AdvancementNode; +import net.minecraft.client.Minecraft; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; import net.minecraft.locale.Language; @@ -243,7 +245,7 @@ private static MutableComponent rainbow(MutableComponent component, int shift, L @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag isAdvanced) { - Component emphasized = infiniteMedia(context.level()); + Component emphasized = infiniteMedia(Minecraft.getInstance().level); MutableComponent modName = Component.translatable("item.hexcasting.creative_unlocker.mod_name").withStyle( (s) -> s.withColor(ItemMediaHolder.HEX_COLOR)); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java index cf9fbf03c9..fc12ecb0f2 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemAbacus.java @@ -23,25 +23,14 @@ import java.util.List; public class ItemAbacus extends Item implements IotaHolderItem { -<<<<<<< HEAD - public static final String TAG_VALUE = "abacus_value"; -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 public ItemAbacus(Properties pProperties) { super(pProperties); } @Override -<<<<<<< HEAD - public @Nullable - CompoundTag readIotaTag(ItemStack stack) { - var datum = new DoubleIota(stack.get(DataComponents.CUSTOM_DATA).copyTag().getDouble(TAG_VALUE)); - return IotaType.serialize(datum); -======= public @Nullable Iota readIota(ItemStack stack) { return new DoubleIota(stack.getOrDefault(HexDataComponents.ABACUS_VALUE, 0.0)); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override @@ -81,13 +70,7 @@ public InteractionResultHolder use(Level world, Player player, Intera } @Override -<<<<<<< HEAD - public void appendHoverText(ItemStack pStack, Item.TooltipContext bruh, List pTooltipComponents, - TooltipFlag pIsAdvanced) { - IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); -======= public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { IotaHolderItem.appendHoverText(this, stack, tooltipComponents, tooltipFlag); ->>>>>>> refs/remotes/slava/devel/port-1.21 } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java index 90a49ec88e..e713477d43 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemFocus.java @@ -58,14 +58,8 @@ public void writeDatum(ItemStack stack, Iota datum) { } @Override -<<<<<<< HEAD - public void appendHoverText(ItemStack pStack, Item.TooltipContext pLevel, List pTooltipComponents, - TooltipFlag pIsAdvanced) { - IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); -======= public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { IotaHolderItem.appendHoverText(this, stack, tooltipComponents, tooltipFlag); ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static boolean isSealed(ItemStack stack) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java index aef89f0fcb..5e105c50f6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java @@ -7,13 +7,8 @@ import at.petrak.hexcasting.api.item.IotaHolderItem; import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.client.gui.PatternTooltipComponent; -import at.petrak.hexcasting.common.components.ItemIotaHolderComponent; import at.petrak.hexcasting.common.entities.EntityWallScroll; -<<<<<<< HEAD -import at.petrak.hexcasting.common.lib.HexItemComponents; -======= import at.petrak.hexcasting.common.lib.HexDataComponents; ->>>>>>> refs/remotes/slava/devel/port-1.21 import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.common.misc.PatternTooltip; import at.petrak.hexcasting.common.casting.PatternRegistryManifest; @@ -34,11 +29,7 @@ import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -<<<<<<< HEAD -import net.minecraft.world.item.component.CustomData; -======= import net.minecraft.world.item.TooltipFlag; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.world.item.context.UseOnContext; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.Level; @@ -69,20 +60,6 @@ public ItemScroll(Properties pProperties, int blockSize) { this.blockSize = blockSize; } -<<<<<<< HEAD - @Override - public @Nullable - CompoundTag readIotaTag(ItemStack stack) { - Iota pattern = Objects.requireNonNull(stack.get(ItemIotaHolderComponent.COMPONENT_TYPE)).iota(); - if (pattern == null) { - return null; - } - // We store only the data part of the iota; pretend the rest of it's there - var out = new CompoundTag(); - out.putString(HexIotaTypes.KEY_TYPE, "hexcasting:pattern"); - out.put(HexIotaTypes.KEY_DATA, pattern.serialize()); - return out; -======= // this produces a scroll that will load the correct pattern for your world once it ticks public static ItemStack withPerWorldPattern(ItemStack stack, ResourceKey action) { Item item = stack.getItem(); @@ -91,7 +68,6 @@ public static ItemStack withPerWorldPattern(ItemStack stack, ResourceKey>>>>>> refs/remotes/slava/devel/port-1.21 } @Override @@ -131,15 +107,9 @@ public InteractionResult useOn(UseOnContext ctx) { var scrollEntity = new EntityWallScroll(level, posInFront, direction, scrollStack, false, this.blockSize); // i guess -<<<<<<< HEAD - var component = itemstack.get(ItemIotaHolderComponent.COMPONENT_TYPE); - if (component != null) { - EntityType.updateCustomEntityTag(level, player, scrollEntity, CustomData.of((CompoundTag) component.iota().serialize())); -======= var customData = itemstack.get(DataComponents.CUSTOM_DATA); if (customData != null) { EntityType.updateCustomEntityTag(level, player, scrollEntity, customData); ->>>>>>> refs/remotes/slava/devel/port-1.21 } if (scrollEntity.survives()) { @@ -164,21 +134,12 @@ protected boolean mayPlace(Player pPlayer, Direction pDirection, ItemStack pHang @Override public Component getName(ItemStack pStack) { var descID = this.getDescriptionId(pStack); -<<<<<<< HEAD - var ancientId = pStack.get(DataComponents.CUSTOM_DATA).copyTag().getString(TAG_OP_ID); - if (ancientId != null) { - return Component.translatable(descID + ".of", - Component.translatable("hexcasting.action." + ResourceLocation.tryParse(ancientId))); - } else if (pStack.get(DataComponents.CUSTOM_DATA).contains(TAG_PATTERN)) { - var compound = pStack.get(DataComponents.CUSTOM_DATA).copyTag().getCompound(TAG_PATTERN); -======= var ancientAction = pStack.get(HexDataComponents.ACTION); if (ancientAction != null) { return Component.translatable(descID + ".of", Component.translatable("hexcasting.action." + ancientAction.location())); } else if (pStack.has(HexDataComponents.PATTERN)) { var pattern = pStack.get(HexDataComponents.PATTERN); ->>>>>>> refs/remotes/slava/devel/port-1.21 var patternLabel = Component.literal(""); if (pattern != null) { patternLabel = Component.literal(": ").append(new InlinePatternData(pattern).asText(false)); @@ -216,20 +177,11 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List getTooltipImage(ItemStack stack) { -<<<<<<< HEAD - var compound = stack.get(DataComponents.CUSTOM_DATA).copyTag().getCompound(TAG_PATTERN); - if (!compound.equals(new CompoundTag())) { - var pattern = HexPattern.fromNBT(compound); - return Optional.of(new PatternTooltip( - pattern, - stack.get(DataComponents.CUSTOM_DATA).contains(TAG_PATTERN) -======= var pattern = stack.get(HexDataComponents.PATTERN); if (pattern != null && !stack.has(HexDataComponents.NEEDS_PURCHASE)) { return Optional.of(new PatternTooltip( pattern, stack.has(HexDataComponents.ACTION) ->>>>>>> refs/remotes/slava/devel/port-1.21 ? PatternTooltipComponent.ANCIENT_BG : PatternTooltipComponent.PRISTINE_BG)); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java index b09cc3f190..d2523eb875 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSpellbook.java @@ -35,12 +35,7 @@ public ItemSpellbook(Properties properties) { } @Override -<<<<<<< HEAD - public void appendHoverText(ItemStack stack, Item.TooltipContext level, List tooltip, - TooltipFlag isAdvanced) { -======= public void appendHoverText(ItemStack stack, TooltipContext context, List tooltip, TooltipFlag isAdvanced) { ->>>>>>> refs/remotes/slava/devel/port-1.21 boolean sealed = isSealed(stack); boolean empty = false; if (stack.has(HexDataComponents.SELECTED_PAGE)) { @@ -95,13 +90,6 @@ public void inventoryTick(ItemStack stack, Level level, Entity pEntity, int pSlo int shiftedIdx = Math.max(1, index); String nameKey = String.valueOf(shiftedIdx); -<<<<<<< HEAD - CompoundTag names = NBTHelper.getOrCreateCompound(stack, TAG_PAGE_NAMES); - if (stack.has(DataComponents.CUSTOM_NAME)) { - names.putString(nameKey, Component.Serializer.toJson(stack.get(DataComponents.CUSTOM_NAME).copy(), pLevel.registryAccess())); - } else { - names.remove(nameKey); -======= var customName = stack.get(DataComponents.CUSTOM_NAME); var savedNames = stack.get(HexDataComponents.PAGE_NAMES); @@ -126,7 +114,6 @@ public void inventoryTick(ItemStack stack, Level level, Entity pEntity, int pSlo } else { stack.set(HexDataComponents.PAGE_NAMES, mutNames); } ->>>>>>> refs/remotes/slava/devel/port-1.21 } } @@ -290,11 +277,7 @@ public static int rotatePageIdx(ItemStack stack, boolean increase, Level level) String nameKey = String.valueOf(shiftedIdx); Component name = names.get(nameKey); if (name != null) { -<<<<<<< HEAD - stack.set(DataComponents.CUSTOM_NAME, Component.Serializer.fromJson(name, level.registryAccess())); -======= stack.set(DataComponents.CUSTOM_NAME, name); ->>>>>>> refs/remotes/slava/devel/port-1.21 } else { stack.remove(DataComponents.CUSTOM_NAME); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java index 0d923d918a..2cc1ec3033 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemThoughtKnot.java @@ -44,11 +44,7 @@ public void writeDatum(ItemStack stack, @Nullable Iota iota) { } @Override -<<<<<<< HEAD - public void appendHoverText(ItemStack pStack, Item.TooltipContext pLevel, -======= public void appendHoverText(ItemStack pStack, TooltipContext context, ->>>>>>> refs/remotes/slava/devel/port-1.21 List pTooltipComponents, TooltipFlag pIsAdvanced) { IotaHolderItem.appendHoverText(this, pStack, pTooltipComponents, pIsAdvanced); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java index 48da941deb..5eaf30f7ea 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java @@ -201,15 +201,9 @@ private static BlockBehaviour.Properties quenched() { public static final Block SLATE_BRICKS = blockItem("slate_bricks", new Block(slateish().strength(2f, 4f))); public static final Block SLATE_BRICKS_SMALL = blockItem("slate_bricks_small", new Block(slateish().strength(2f, 4f))); public static final RotatedPillarBlock SLATE_PILLAR = blockItem("slate_pillar", new RotatedPillarBlock(slateish().strength(2f, 4f))); -<<<<<<< HEAD - public static final BlockHexFallingBlock AMETHYST_DUST_BLOCK = blockItem("amethyst_dust_block", - new BlockHexFallingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE) - .strength(0.5f).sound(SoundType.SAND).mapColor(DyeColor.byFireworkColor(0xff_b38ef3)))); -======= public static final ColoredFallingBlock AMETHYST_DUST_BLOCK = blockItem("amethyst_dust_block", new ColoredFallingBlock(new ColorRGBA(0xb38ef3_ff), BlockBehaviour.Properties.ofFullCopy(Blocks.SAND).mapColor(MapColor.COLOR_PURPLE) .strength(0.5f).sound(SoundType.SAND))); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static final AmethystBlock AMETHYST_TILES = blockItem("amethyst_tiles", new AmethystBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AMETHYST_BLOCK))); public static final AmethystBlock AMETHYST_BRICKS = blockItem("amethyst_bricks", @@ -279,12 +273,7 @@ private static BlockBehaviour.Properties quenched() { public static final ButtonBlock EDIFIED_BUTTON = blockItem("edified_button", new BlockHexWoodButton(edifiedWoody().noOcclusion().noCollission())); public static final PressurePlateBlock EDIFIED_PRESSURE_PLATE = blockItem("edified_pressure_plate", -<<<<<<< HEAD - new BlockHexPressurePlate( - edifiedWoody().noOcclusion().noCollission())); -======= new BlockHexPressurePlate(edifiedWoody().noOcclusion().noCollission())); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static final BlockAkashicLeaves AMETHYST_EDIFIED_LEAVES = blockItem("amethyst_edified_leaves", new BlockAkashicLeaves(leaves(MapColor.COLOR_PURPLE))); public static final BlockAkashicLeaves AVENTURINE_EDIFIED_LEAVES = blockItem("aventurine_edified_leaves", diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java index 58a521e32d..dc5bc430fc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java @@ -21,10 +21,10 @@ public static void registerCreativeTabs(BiConsumer TABS = new LinkedHashMap<>(); - public static final CreativeModeTab HEX = register("hexcasting", CreativeModeTab.builder() + public static final CreativeModeTab HEX = register("hexcasting", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) .icon(() -> new ItemStack(HexItems.SPELLBOOK))); - public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder() + public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) .icon(() -> new ItemStack(HexItems.SCROLL_LARGE))); private static CreativeModeTab register(String name, CreativeModeTab.Builder tabBuilder) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java index 8abddabecb..86922ba750 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexItems.java @@ -77,14 +77,8 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemStaff STAFF_MINDSPLICE = make("staff/mindsplice", new ItemStaff(unstackable())); public static final ItemLens SCRYING_LENS = make("lens", new ItemLens( -<<<<<<< HEAD - IXplatAbstractions.INSTANCE.addEquipSlotFabric(EquipmentSlot.HEAD) - .stacksTo(1).attributes(ItemAttributeModifiers.builder() - .add().build()))); -======= IXplatAbstractions.INSTANCE.addEquipSlotFabric(EquipmentSlot.HEAD) .stacksTo(1))); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static final ItemAbacus ABACUS = make("abacus", new ItemAbacus(unstackable())); public static final ItemThoughtKnot THOUGHT_KNOT = make("thought_knot", new ItemThoughtKnot(unstackable())); @@ -97,9 +91,6 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod public static final ItemArtifact ARTIFACT = make("artifact", new ItemArtifact(unstackable().rarity(Rarity.RARE))); public static final ItemJewelerHammer JEWELER_HAMMER = make("jeweler_hammer", -<<<<<<< HEAD - new ItemJewelerHammer(Tiers.IRON, props().stacksTo(1).durability(Tiers.DIAMOND.getUses()))); -======= new ItemJewelerHammer(Tiers.IRON, props() .stacksTo(1) .durability(Tiers.DIAMOND.getUses()) @@ -113,7 +104,6 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod ) ) ); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static final ItemScroll SCROLL_SMOL = make("scroll_small", new ItemScroll(props(), 1)); public static final ItemScroll SCROLL_MEDIUM = make("scroll_medium", new ItemScroll(props(), 2)); @@ -167,26 +157,16 @@ public static void registerItemCreativeTab(CreativeModeTab.Output r, CreativeMod // BUFF SANDVICH public static final Item SUBMARINE_SANDWICH = make("sub_sandwich", -<<<<<<< HEAD - new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationModifier(1.2f).build()))); -======= new Item(props().food(new FoodProperties.Builder().nutrition(14).saturationModifier(1.2f).build()))); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static final ItemLoreFragment LORE_FRAGMENT = make("lore_fragment", new ItemLoreFragment(unstackable() .rarity(Rarity.RARE))); public static final ItemCreativeUnlocker CREATIVE_UNLOCKER = make("creative_unlocker", -<<<<<<< HEAD - new ItemCreativeUnlocker(unstackable() - .rarity(Rarity.EPIC) - .food(new FoodProperties.Builder().nutrition(20).saturationModifier(1f).alwaysEdible().build()))); -======= new ItemCreativeUnlocker(unstackable() .rarity(Rarity.EPIC) .food(new FoodProperties.Builder().nutrition(20).saturationModifier(1f).alwaysEdible().build()))); ->>>>>>> refs/remotes/slava/devel/port-1.21 // diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java index eff2d2c4d7..d9a3f6cf1b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java @@ -25,19 +25,11 @@ public static void register(BiConsumer r) { public static final MobEffect ENLARGE_GRID = make("enlarge_grid", new HexMobEffect(MobEffectCategory.BENEFICIAL, 0xc875ff)) -<<<<<<< HEAD - .addAttributeModifier(HexAttributes.GRID_ZOOM, modLoc("enlarge_grid"), - 0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); - public static final MobEffect SHRINK_GRID = make("shrink_grid", - new HexMobEffect(MobEffectCategory.HARMFUL, 0xc0e660)) - .addAttributeModifier(HexAttributes.GRID_ZOOM, modLoc("shrink_grid"), -======= .addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("enlarge_grid"), 0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); public static final MobEffect SHRINK_GRID = make("shrink_grid", new HexMobEffect(MobEffectCategory.HARMFUL, 0xc0e660)) .addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("shrink_grid"), ->>>>>>> refs/remotes/slava/devel/port-1.21 -0.2, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java b/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java index cbf0ede6e2..5be55e7b94 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/misc/AkashicTreeGrower.java @@ -3,14 +3,6 @@ import at.petrak.hexcasting.common.lib.HexConfiguredFeatures; import com.google.common.collect.Lists; import net.minecraft.core.BlockPos; -<<<<<<< HEAD -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceKey; -import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.packs.resources.Resource; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.block.grower.TreeGrower; -======= import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -18,17 +10,14 @@ import net.minecraft.tags.BlockTags; import net.minecraft.util.RandomSource; import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import java.util.List; -<<<<<<< HEAD -// i gotcha :3 -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 public class AkashicTreeGrower { public static final AkashicTreeGrower INSTANCE = new AkashicTreeGrower(); @@ -40,23 +29,6 @@ public static void init() { GROWERS.add(HexConfiguredFeatures.CITRINE_EDIFIED_TREE); } -<<<<<<< HEAD - protected ResourceKey> getConfiguredFeature(RandomSource pRandom) { - return GROWERS.get(pRandom.nextInt(GROWERS.size())); - } - - public boolean growTree(ServerLevel level, ChunkGenerator generator, BlockPos pos, RandomSource source) { - if (GROWERS.isEmpty()) return false; - - var key = this.getConfiguredFeature(source); - - var registry = level.registryAccess().registryOrThrow(Registries.CONFIGURED_FEATURE); - - var holder = registry.getHolderOrThrow(key); - ConfiguredFeature feature = holder.value(); - - return feature.place(level, generator, source, pos); -======= private ResourceKey> getConfiguredFeature(RandomSource pRandom, boolean pLargeHive) { return GROWERS.get(pRandom.nextInt(GROWERS.size())); } @@ -65,32 +37,15 @@ public boolean growTree(ServerLevel level, ChunkGenerator chunkGenerator, BlockP ResourceKey> treeFeatureKey = getConfiguredFeature(random, hasFlowers(level, pos)); if (treeFeatureKey == null) { return false; - } else { - Holder> holder1 = level.registryAccess() - .registryOrThrow(Registries.CONFIGURED_FEATURE) - .getHolder(treeFeatureKey) - .orElse(null); - var event = net.neoforged.neoforge.event.EventHooks.fireBlockGrowFeature(level, random, pos, holder1); - holder1 = event.getFeature(); - if (event.isCanceled()) return false; - if (holder1 == null) { - return false; - } else { - ConfiguredFeature configuredfeature1 = holder1.value(); - BlockState blockstate1 = level.getFluidState(pos).createLegacyBlock(); - level.setBlock(pos, blockstate1, 4); - if (configuredfeature1.place(level, chunkGenerator, random, pos)) { - if (level.getBlockState(pos) == blockstate1) { - level.sendBlockUpdated(pos, state, blockstate1, 2); - } - - return true; - } else { - level.setBlock(pos, state, 4); - return false; - } - } } + Holder> holder1 = level.registryAccess() + .registryOrThrow(Registries.CONFIGURED_FEATURE) + .getHolder(treeFeatureKey) + .orElse(null); + level.setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + + ConfiguredFeature configuredFeature = holder1.value(); + return configuredFeature.place(level, level.getChunkSource().getGenerator(), level.random, pos); } private boolean hasFlowers(LevelAccessor level, BlockPos pos) { @@ -101,6 +56,5 @@ private boolean hasFlowers(LevelAccessor level, BlockPos pos) { } return false; ->>>>>>> refs/remotes/slava/devel/port-1.21 } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java index 64c5e5d4d2..29e2f4d431 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java @@ -4,19 +4,10 @@ import at.petrak.paucal.api.PaucalCodecs; import net.minecraft.client.Minecraft; import net.minecraft.core.particles.ParticleTypes; -<<<<<<< HEAD -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import net.minecraft.world.phys.Vec3; @@ -24,39 +15,6 @@ public record MsgBeepS2C(Vec3 target, int note, NoteBlockInstrument instrument) implements CustomPacketPayload { public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("beep")); -<<<<<<< HEAD -public record MsgBeepS2C(Vec3 target, int note, NoteBlockInstrument instrument) implements CustomPacketPayload { - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgBeepS2C::serialize, MsgBeepS2C::deserialize); - - public static final Type ID = new Type<>(modLoc("beep")); - - @Override - public Type type() { - return ID; - } - - private static void encode(FriendlyByteBuf buf, MsgBeepS2C msg) { - msg.serialize(buf); - } - - public static MsgBeepS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var x = buf.readDouble(); - var y = buf.readDouble(); - var z = buf.readDouble(); - var note = buf.readInt(); - var instrument = buf.readEnum(NoteBlockInstrument.class); - return new MsgBeepS2C(new Vec3(x, y, z), note, instrument); - } - - - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.target.x); - buf.writeDouble(this.target.y); - buf.writeDouble(this.target.z); - buf.writeInt(this.note); - buf.writeEnum(instrument); -======= public static final StreamCodec STREAM_CODEC = StreamCodec.composite( PaucalCodecs.VEC3, MsgBeepS2C::target, ByteBufCodecs.VAR_INT, MsgBeepS2C::note, @@ -70,7 +28,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgBeepS2C msg) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java index 9b9210cbfc..a572291628 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java @@ -6,11 +6,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; @@ -22,28 +19,6 @@ * Sent server->client to synchronize OpBlink when the target is a player. */ public record MsgBlinkS2C(Vec3 addedPosition) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgBlinkS2C::serialize, MsgBlinkS2C::deserialize); - public static final Type ID = new Type<>(modLoc("blink")); - - @Override - public Type type() { - return ID; - } - - public static MsgBlinkS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var x = buf.readDouble(); - var y = buf.readDouble(); - var z = buf.readDouble(); - return new MsgBlinkS2C(new Vec3(x, y, z)); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.addedPosition.x); - buf.writeDouble(this.addedPosition.y); - buf.writeDouble(this.addedPosition.z); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("blink")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -54,7 +29,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgBlinkS2C self) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java index d9990e1523..1b64420ffe 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java @@ -8,10 +8,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; @@ -26,48 +23,6 @@ * Sent server->client to spray particles everywhere. */ public record MsgCastParticleS2C(ParticleSpray spray, FrozenPigment colorizer) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgCastParticleS2C::serialize, MsgCastParticleS2C::deserialize); - public static final Type ID = new Type<>(modLoc("cprtcl")); - - @Override - public Type type() { - return ID; - } - - public static MsgCastParticleS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var posX = buf.readDouble(); - var posY = buf.readDouble(); - var posZ = buf.readDouble(); - var velX = buf.readDouble(); - var velY = buf.readDouble(); - var velZ = buf.readDouble(); - var fuzziness = buf.readDouble(); - var spread = buf.readDouble(); - var count = buf.readInt(); - var tag = buf.readNbt(); - var colorizer = FrozenPigment.fromNBT(tag); - return new MsgCastParticleS2C( - new ParticleSpray(new Vec3(posX, posY, posZ), new Vec3(velX, velY, velZ), fuzziness, spread, count), - colorizer); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.spray.getPos().x); - buf.writeDouble(this.spray.getPos().y); - buf.writeDouble(this.spray.getPos().z); - buf.writeDouble(this.spray.getVel().x); - buf.writeDouble(this.spray.getVel().y); - buf.writeDouble(this.spray.getVel().z); - buf.writeDouble(this.spray.getFuzziness()); - buf.writeDouble(this.spray.getSpread()); - buf.writeInt(this.spray.getCount()); - buf.writeNbt(this.colorizer.serializeToNBT()); - } - - -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("cprtcl")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -81,7 +36,6 @@ public Type type() { return TYPE; } ->>>>>>> refs/remotes/slava/devel/port-1.21 private static final Random RANDOM = new Random(); // https://math.stackexchange.com/questions/44689/how-to-find-a-random-axis-or-unit-vector-in-3d diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java index 3ac1a5138d..ef4d539a6e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java @@ -7,11 +7,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.UUIDUtil; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; @@ -21,26 +18,6 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public record MsgClearSpiralPatternsS2C(UUID playerUUID) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgClearSpiralPatternsS2C::serialize, MsgClearSpiralPatternsS2C::deserialize); - public static final CustomPacketPayload.Type ID = new CustomPacketPayload.Type<>(modLoc("clr_spi_pats_sc")); - - @Override - public CustomPacketPayload.Type type() { - return ID; - } - - public static MsgClearSpiralPatternsS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var player = buf.readUUID(); - - return new MsgClearSpiralPatternsS2C(player); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeUUID(playerUUID); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("clr_spi_pats_sc")); public static final StreamCodec STREAM_CODEC = UUIDUtil.STREAM_CODEC.map( @@ -51,7 +28,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgClearSpiralPatternsS2C self) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java index cb4f0c0965..06440b01b6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternC2S.java @@ -7,16 +7,10 @@ import at.petrak.hexcasting.api.pigment.FrozenPigment; import io.netty.buffer.ByteBuf; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; @@ -29,38 +23,6 @@ * Server will send back a {@link MsgNewSpellPatternS2C} packet */ public record MsgNewSpellPatternC2S(InteractionHand handUsed, HexPattern pattern, -<<<<<<< HEAD - List resolvedPatterns) - implements CustomPacketPayload { - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewSpellPatternC2S::serialize, MsgNewSpellPatternC2S::deserialize); - public static final Type ID = new Type<>(modLoc("pat_cs")); - - @Override - public Type type() { - return ID; - } - - public static MsgNewSpellPatternC2S deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var hand = buf.readEnum(InteractionHand.class); - var pattern = HexPattern.fromNBT(buf.readNbt()); - - var resolvedPatternsLen = buf.readInt(); - var resolvedPatterns = new ArrayList(resolvedPatternsLen); - for (int i = 0; i < resolvedPatternsLen; i++) { - resolvedPatterns.add(ResolvedPattern.fromNBT(buf.readNbt())); - } - return new MsgNewSpellPatternC2S(hand, pattern, resolvedPatterns); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeEnum(handUsed); - buf.writeNbt(this.pattern.serializeToNBT()); - buf.writeInt(this.resolvedPatterns.size()); - for (var pat : this.resolvedPatterns) { - buf.writeNbt(pat.serializeToNBT()); - } -======= List resolvedPatterns) implements CustomPacketPayload { public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("pat_cs")); @@ -77,7 +39,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public void handle(MinecraftServer server, ServerPlayer sender) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java index 4c90c0afab..bb0af803ac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java @@ -10,11 +10,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; @@ -28,38 +25,6 @@ * Sent server->client when the player finishes casting a spell. */ public record MsgNewSpellPatternS2C(ExecutionClientView info, int index) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewSpellPatternS2C::serialize, MsgNewSpellPatternS2C::deserialize); - public static final Type ID = new Type<>(modLoc("pat_sc")); - - @Override - public Type type() { - return ID; - } - - public static MsgNewSpellPatternS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var isStackEmpty = buf.readBoolean(); - var resolutionType = buf.readEnum(ResolvedPatternType.class); - var index = buf.readInt(); - - var stack = buf.readList(bu -> bu.readNbt()); - var raven = buf.readOptional(bu -> bu.readNbt()).orElse(null); - - return new MsgNewSpellPatternS2C( - new ExecutionClientView(isStackEmpty, resolutionType, stack, raven), index - ); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeBoolean(this.info.isStackClear()); - buf.writeEnum(this.info.getResolutionType()); - buf.writeInt(this.index); - - buf.writeCollection(this.info.getStackDescs(), (b, t) -> b.writeNbt(t)); - buf.writeOptional(Optional.ofNullable(this.info.getRavenmind()), (b, t) -> b.writeNbt(t)); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("pat_sc")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -71,7 +36,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgNewSpellPatternS2C self) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java index 99fb9c6449..9b1a844353 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java @@ -7,11 +7,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.UUIDUtil; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; @@ -23,31 +20,6 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public record MsgNewSpiralPatternsS2C(UUID playerUUID, List patterns, int lifetime) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewSpiralPatternsS2C::serialize, MsgNewSpiralPatternsS2C::deserialize); - public static final Type ID = new Type<>(modLoc("spi_pats_sc")); - - @Override - public Type type() { - return ID; - } - - public static MsgNewSpiralPatternsS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var player = buf.readUUID(); - var patterns = buf.readCollection(ArrayList::new, buff -> HexPattern.fromNBT(buf.readNbt())); - var lifetime = buf.readInt(); - - - return new MsgNewSpiralPatternsS2C(player, patterns, lifetime); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeUUID(playerUUID); - buf.writeCollection(patterns, (buff, pattern) -> buff.writeNbt(pattern.serializeToNBT())); - buf.writeInt(lifetime); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("spi_pats_sc")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -60,7 +32,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgNewSpiralPatternsS2C self) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java index 77b3173492..d7d367315a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java @@ -23,45 +23,6 @@ // https://github.com/VazkiiMods/Botania/blob/1.18.x/Xplat/src/main/java/vazkii/botania/network/clientbound/PacketSpawnDoppleganger.java public record MsgNewWallScrollS2C(ClientboundAddEntityPacket inner, BlockPos pos, Direction dir, ItemStack scrollItem, boolean showsStrokeOrder, int blockSize) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgNewWallScrollS2C::serialize, MsgNewWallScrollS2C::deserialize); - public static final Type ID = new Type<>(modLoc("wallscr")); - - @Override - public Type type() { - return ID; - } - - public void serialize(RegistryFriendlyByteBuf buf) { - buf.writeVarInt(inner.getId()); - buf.writeUUID(inner.getUUID()); - ByteBufCodecs.registry(Registries.ENTITY_TYPE).encode(buf, inner.getType()); - buf.writeDouble(inner.getX()); - buf.writeDouble(inner.getY()); - buf.writeDouble(inner.getZ()); - buf.writeByte((byte) inner.getXRot()); - buf.writeByte((byte) inner.getYRot()); - buf.writeByte((byte) inner.getYHeadRot()); - buf.writeVarInt(inner.getData()); - buf.writeShort((short) inner.getXa()); - buf.writeShort((short) inner.getYa()); - buf.writeShort((short) inner.getZa()); - buf.writeBlockPos(pos); - buf.writeByte(dir.ordinal()); - ItemStack.STREAM_CODEC.encode(buf, scrollItem); - buf.writeBoolean(showsStrokeOrder); - buf.writeVarInt(blockSize); - } - - public static MsgNewWallScrollS2C deserialize(RegistryFriendlyByteBuf buf) { - var inner = ClientboundAddEntityPacket.STREAM_CODEC.decode(buf); - var pos = buf.readBlockPos(); - var dir = HexUtils.getSafe(Direction.values(), buf.readByte()); - var scroll = ItemStack.STREAM_CODEC.decode(buf); - var strokeOrder = buf.readBoolean(); - var blockSize = buf.readVarInt(); - return new MsgNewWallScrollS2C(inner, pos, dir, scroll, strokeOrder, blockSize); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("wallscr")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -77,7 +38,6 @@ public static MsgNewWallScrollS2C deserialize(RegistryFriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgNewWallScrollS2C self) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java index e1a981e401..f50ed7d26d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java @@ -10,11 +10,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; @@ -37,40 +34,6 @@ public record MsgOpenSpellGuiS2C(InteractionHand hand, List pat int parenCount ) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgOpenSpellGuiS2C::serialize, MsgOpenSpellGuiS2C::deserialize); - public static final Type ID = new Type<>(modLoc("cgui")); - - @Override - public Type type() { - return ID; - } - - public static MsgOpenSpellGuiS2C deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var hand = buf.readEnum(InteractionHand.class); - - var patterns = buf.readList(fbb -> ResolvedPattern.fromNBT(fbb.readNbt())); - - var stack = buf.readList(b -> b.readNbt()); - var raven = buf.readNbt(); - - var parenCount = buf.readVarInt(); - - return new MsgOpenSpellGuiS2C(hand, patterns, stack, raven, parenCount); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeEnum(this.hand); - - buf.writeCollection(this.patterns, (fbb, pat) -> fbb.writeNbt(pat.serializeToNBT())); - - buf.writeCollection(this.stack, (b, t) -> b.writeNbt(t)); - buf.writeNbt(this.ravenmind); - - buf.writeVarInt(this.parenCount); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("cgui")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -91,7 +54,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgOpenSpellGuiS2C msg) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java index ff85baa895..44ee8f9b21 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java @@ -7,16 +7,11 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientboundAddEntityPacket; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -26,12 +21,7 @@ * Sent S->C to have a wall scroll recalculate its pattern, to get readability offset. */ public record MsgRecalcWallScrollDisplayS2C(int entityId, boolean showStrokeOrder) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgRecalcWallScrollDisplayS2C::serialize, MsgRecalcWallScrollDisplayS2C::deserialize); - public static final Type ID = new Type<>(modLoc("redoscroll")); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("redoscroll")); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static final StreamCodec STREAM_CODEC = StreamCodec.composite( ByteBufCodecs.VAR_INT, MsgRecalcWallScrollDisplayS2C::entityId, @@ -39,20 +29,9 @@ public record MsgRecalcWallScrollDisplayS2C(int entityId, boolean showStrokeOrde MsgRecalcWallScrollDisplayS2C::new ); -<<<<<<< HEAD - public void serialize(FriendlyByteBuf buf) { - buf.writeVarInt(entityId); - buf.writeBoolean(showStrokeOrder); - } - - @Override - public Type type() { - return ID; -======= @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static void handle(MsgRecalcWallScrollDisplayS2C msg) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java index 45e2479464..a8fc568f3c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgShiftScrollC2S.java @@ -12,21 +12,12 @@ import at.petrak.hexcasting.common.lib.HexSounds; import io.netty.buffer.ByteBuf; import net.minecraft.ChatFormatting; -<<<<<<< HEAD -import net.minecraft.core.component.DataComponentType; import net.minecraft.core.component.DataComponents; -import net.minecraft.nbt.CompoundTag; -======= -import net.minecraft.core.component.DataComponents; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -<<<<<<< HEAD -======= import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; @@ -47,32 +38,6 @@ */ public record MsgShiftScrollC2S(double mainHandDelta, double offHandDelta, boolean isCtrl, boolean invertSpellbook, boolean invertAbacus) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgShiftScrollC2S::serialize, MsgShiftScrollC2S::deserialize); - public static final Type ID = new Type<>(modLoc("scroll")); - - @Override - public Type type() { - return ID; - } - - public static MsgShiftScrollC2S deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - var mainHandDelta = buf.readDouble(); - var offHandDelta = buf.readDouble(); - var isCtrl = buf.readBoolean(); - var invertSpellbook = buf.readBoolean(); - var invertAbacus = buf.readBoolean(); - return new MsgShiftScrollC2S(mainHandDelta, offHandDelta, isCtrl, invertSpellbook, invertAbacus); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeDouble(this.mainHandDelta); - buf.writeDouble(this.offHandDelta); - buf.writeBoolean(this.isCtrl); - buf.writeBoolean(this.invertSpellbook); - buf.writeBoolean(this.invertAbacus); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("scroll")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -87,7 +52,6 @@ public void serialize(FriendlyByteBuf buf) { @Override public Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public void handle(MinecraftServer server, ServerPlayer sender) { @@ -126,22 +90,14 @@ private void spellbook(ServerPlayer sender, InteractionHand hand, ItemStack stac component = Component.translatable("hexcasting.tooltip.spellbook.page_with_name.sealed", Component.literal(String.valueOf(newIdx)).withStyle(ChatFormatting.WHITE), Component.literal(String.valueOf(len)).withStyle(ChatFormatting.WHITE), -<<<<<<< HEAD - Component.literal("").withStyle(stack.getRarity().color(), ChatFormatting.ITALIC) -======= - Component.literal("").withStyle(stack.getRarity().getStyleModifier()).withStyle(ChatFormatting.ITALIC) ->>>>>>> refs/remotes/slava/devel/port-1.21 + Component.literal("").withStyle(stack.getRarity().color()).withStyle(ChatFormatting.ITALIC) .append(stack.getHoverName()), Component.translatable("hexcasting.tooltip.spellbook.sealed").withStyle(ChatFormatting.GOLD)); } else { component = Component.translatable("hexcasting.tooltip.spellbook.page_with_name", Component.literal(String.valueOf(newIdx)).withStyle(ChatFormatting.WHITE), Component.literal(String.valueOf(len)).withStyle(ChatFormatting.WHITE), -<<<<<<< HEAD - Component.literal("").withStyle(stack.getRarity().color(), ChatFormatting.ITALIC) -======= - Component.literal("").withStyle(stack.getRarity().getStyleModifier()).withStyle(ChatFormatting.ITALIC) ->>>>>>> refs/remotes/slava/devel/port-1.21 + Component.literal("").withStyle(stack.getRarity().color()).withStyle(ChatFormatting.ITALIC) .append(stack.getHoverName())); } @@ -167,13 +123,9 @@ private void abacus(ServerPlayer sender, InteractionHand hand, ItemStack stack, } var increase = delta < 0; -<<<<<<< HEAD - double num = stack.get(DataComponents.CUSTOM_DATA).copyTag().getDouble(ItemAbacus.TAG_VALUE); -======= Double num = stack.get(HexDataComponents.ABACUS_VALUE); if(num == null) num = 0.0; ->>>>>>> refs/remotes/slava/devel/port-1.21 double shiftDelta; float pitch; @@ -188,14 +140,7 @@ private void abacus(ServerPlayer sender, InteractionHand hand, ItemStack stack, int scale = Math.max((int) Math.floor(Math.abs(delta)), 1); num += scale * shiftDelta * (increase ? 1 : -1); -<<<<<<< HEAD - CustomData data = stack.getOrDefault(DataComponents.CUSTOM_DATA, CustomData.EMPTY); - CompoundTag tag = data.copyTag(); - tag.putDouble(ItemAbacus.TAG_VALUE, num); - stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); -======= stack.set(HexDataComponents.ABACUS_VALUE, num); ->>>>>>> refs/remotes/slava/devel/port-1.21 pitch *= (increase ? 1.05f : 0.95f); pitch += (Math.random() - 0.5) * 0.1; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java index 7f72dccf77..676539fc43 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/BrainsweepRecipe.java @@ -1,19 +1,5 @@ package at.petrak.hexcasting.common.recipe; -<<<<<<< HEAD -import at.petrak.hexcasting.common.misc.ContainerInput; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredient; -import at.petrak.hexcasting.common.recipe.ingredient.StateIngredientHelper; -import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; -import com.google.gson.JsonObject; -import com.mojang.serialization.MapCodec; -import net.minecraft.core.HolderLookup; -import net.minecraft.core.RegistryAccess; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; -======= import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredient; import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredients; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredient; @@ -25,7 +11,6 @@ import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.item.ItemStack; @@ -45,11 +30,7 @@ public record BrainsweepRecipe( BrainsweepeeIngredient entityIn, long mediaCost, BlockState result -<<<<<<< HEAD -) implements Recipe { -======= ) implements Recipe { ->>>>>>> refs/remotes/slava/devel/port-1.21 public boolean matches(BlockState blockIn, Entity victim, ServerLevel level) { return this.blockIn.test(blockIn) && this.entityIn.test(victim, level); } @@ -66,13 +47,6 @@ public RecipeSerializer getSerializer() { // in order to get this to be a "Recipe" we need to do a lot of bending-over-backwards // to get the implementation to be satisfied even though we never use it -<<<<<<< HEAD - - @Override - public boolean matches(ContainerInput recipeInput, Level level) { - return false; - } -======= @Override public boolean matches(RecipeInput input, Level level) { return false; @@ -82,30 +56,14 @@ public boolean matches(RecipeInput input, Level level) { public ItemStack assemble(RecipeInput input, HolderLookup.Provider registries) { return ItemStack.EMPTY; } ->>>>>>> refs/remotes/slava/devel/port-1.21 - - @Override - public ItemStack assemble(ContainerInput recipeInput, HolderLookup.Provider provider) { - return null; - } @Override public boolean canCraftInDimensions(int pWidth, int pHeight) { return false; } -<<<<<<< HEAD - @Override - public ItemStack getResultItem(HolderLookup.Provider provider) { - return null; - } - - @Override - public ItemStack getResultItem(RegistryAccess registryAccess) { -======= @Override public ItemStack getResultItem(HolderLookup.Provider registries) { ->>>>>>> refs/remotes/slava/devel/port-1.21 return ItemStack.EMPTY.copy(); } @@ -149,15 +107,5 @@ public static class Serializer extends RecipeSerializerBase { public @NotNull StreamCodec streamCodec() { return STREAM_CODEC; } - - @Override - public MapCodec codec() { - return null; - } - - @Override - public StreamCodec streamCodec() { - return null; - } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java index 55c0f8ed84..0da1e86001 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/SealThingsRecipe.java @@ -41,11 +41,7 @@ public boolean matches(CraftingInput container, Level level) { boolean foundComb = false; boolean foundSealee = false; -<<<<<<< HEAD - for (int i = 0; i < container.ingredientCount(); i++) { -======= for (int i = 0; i < container.size(); i++) { ->>>>>>> refs/remotes/slava/devel/port-1.21 var stack = container.getItem(i); if (this.sealee.isCorrectSealee(stack)) { if (foundSealee) return false; @@ -60,17 +56,10 @@ public boolean matches(CraftingInput container, Level level) { } @Override -<<<<<<< HEAD - public ItemStack assemble(CraftingInput inv, HolderLookup.Provider provider) { - ItemStack sealee = ItemStack.EMPTY; - - for (int i = 0; i < inv.ingredientCount(); i++) { -======= public @NotNull ItemStack assemble(CraftingInput inv, HolderLookup.RegistryLookup.@NotNull Provider registryProvider) { ItemStack sealee = ItemStack.EMPTY; for (int i = 0; i < inv.size(); i++) { ->>>>>>> refs/remotes/slava/devel/port-1.21 var stack = inv.getItem(i); if (this.sealee.isCorrectSealee(stack)) { sealee = stack.copy(); diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java index 24c86bf083..8be99bddf5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java @@ -22,19 +22,14 @@ public class HexAdvancements extends PaucalAdvancementSubProvider { public static final OvercastTrigger.Instance ENLIGHTEN = -<<<<<<< HEAD - new OvercastTrigger.Instance(MinMaxBounds.Ints.ANY, -======= new OvercastTrigger.Instance(Optional.empty(), MinMaxBounds.Ints.ANY, ->>>>>>> refs/remotes/slava/devel/port-1.21 // add a little bit of slop here. use 80% or more health ... MinMaxBounds.Doubles.atLeast(0.8), // and be left with under 1 healthpoint (half a heart) // TODO this means if 80% of your health is less than half a heart, so if you have 2.5 hearts or // less, you can't become enlightened. - MinMaxBounds.Doubles.between(Double.MIN_NORMAL, 1.0), - Optional.empty() + MinMaxBounds.Doubles.between(Double.MIN_NORMAL, 1.0) ); public HexAdvancements() { diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java index dc1e2f4d9c..ae8fa463d5 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java @@ -21,7 +21,7 @@ public class HexBlockTagProvider extends TagsProvider { public final IXplatTags xtags; public HexBlockTagProvider(PackOutput output, CompletableFuture lookupProvider, IXplatTags xtags) { - super(output, Registries.BLOCK, lookupProvider, HexAPI.MOD_ID, null); + super(output, Registries.BLOCK, lookupProvider); this.xtags = xtags; } diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java index 2a55206672..dfc4488854 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexItemTagProvider.java @@ -23,7 +23,7 @@ public class HexItemTagProvider extends ItemTagsProvider { private final IXplatTags xtags; public HexItemTagProvider(PackOutput output, CompletableFuture lookup, CompletableFuture> pBlockTagsProvider, IXplatTags xtags) { - super(output, lookup, pBlockTagsProvider, HexAPI.MOD_ID, null); + super(output, lookup, pBlockTagsProvider); this.xtags = xtags; } diff --git a/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java b/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java index 569e74d8d8..8a8ab9eb7b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java +++ b/Common/src/main/java/at/petrak/hexcasting/server/ScrungledPatternsSave.java @@ -12,6 +12,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.datafix.DataFixTypes; import net.minecraft.world.level.saveddata.SavedData; import org.jetbrains.annotations.Nullable; @@ -119,7 +120,8 @@ public static ScrungledPatternsSave open(ServerLevel overworld) { return overworld.getDataStorage().computeIfAbsent( new SavedData.Factory<>( () -> ScrungledPatternsSave.createFromScratch(overworld.getSeed()), - ScrungledPatternsSave::load + ScrungledPatternsSave::load, + DataFixTypes.PLAYER ), TAG_SAVED_DATA); } diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java index 30dac58874..ac097a5095 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java @@ -19,21 +19,13 @@ import at.petrak.hexcasting.api.player.AltioraAbility; import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.player.Sentinel; -<<<<<<< HEAD -import at.petrak.hexcasting.common.components.PigmentItemComponent; -======= import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredientType; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; ->>>>>>> refs/remotes/slava/devel/port-1.21 import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; import com.mojang.authlib.GameProfile; import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.network.protocol.Packet; -<<<<<<< HEAD -import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.resources.ResourceKey; @@ -83,11 +75,7 @@ public interface IXplatAbstractions { void sendPacketTracking(Entity entity, CustomPacketPayload packet); // https://github.com/VazkiiMods/Botania/blob/13b7bcd9cbb6b1a418b0afe455662d29b46f1a7f/Xplat/src/main/java/vazkii/botania/xplat/IXplatAbstractions.java#L157 -<<<<<<< HEAD - ClientboundCustomPayloadPacket toVanillaClientboundPacket(CustomPacketPayload message); -======= Packet toVanillaClientboundPacket(CustomPacketPayload message); ->>>>>>> refs/remotes/slava/devel/port-1.21 // double getReachDistance(Player player); @@ -139,11 +127,11 @@ public interface IXplatAbstractions { @Nullable ADHexHolder findHexHolder(ItemStack stack); + ADVariantItem findVariantHolder(ItemStack stack); + // coooollooorrrs - default boolean isPigment(ItemStack stack) { - return stack.has(PigmentItemComponent.COMPONENT_TYPE); - }; + boolean isPigment(ItemStack stack); ColorProvider getColorProvider(FrozenPigment pigment); diff --git a/Common/src/main/resources/hexplat.accesswidener b/Common/src/main/resources/hexplat.accesswidener index 791e6c7df9..613c5818a0 100644 --- a/Common/src/main/resources/hexplat.accesswidener +++ b/Common/src/main/resources/hexplat.accesswidener @@ -1,18 +1,4 @@ accessWidener v1 named -<<<<<<< HEAD -accessible class net/minecraft/client/renderer/RenderType$CompositeRenderType -accessible class net/minecraft/client/renderer/RenderType$CompositeState -accessible field net/minecraft/client/renderer/RenderType$CompositeState textureState Lnet/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard; -accessible class net/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard -accessible class net/minecraft/world/item/crafting/Ingredient$Value -accessible method net/minecraft/world/item/crafting/Ingredient (Ljava/util/stream/Stream;)V -accessible method net/minecraft/world/item/context/UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V -accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; -accessible class net/minecraft/network/protocol/game/ClientboundAddEntityPacket -accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V -accessible method net/minecraft/network/protocol/game/ClientboundAddEntityPacket write (Lnet/minecraft/network/RegistryFriendlyByteBuf;)V -accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; -======= accessible class net/minecraft/client/renderer/RenderType$CompositeRenderType accessible class net/minecraft/client/renderer/RenderType$CompositeState accessible field net/minecraft/client/renderer/RenderType$CompositeState textureState Lnet/minecraft/client/renderer/RenderStateShard$EmptyTextureStateShard; @@ -22,4 +8,3 @@ accessible method net/minecraft/world/item/crafting/Ingredient (Ljava/uti #accessible method net/minecraft/world/item/context/UseOnContext (Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/phys/BlockHitResult;)V #accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;)Lnet/minecraft/world/damagesource/DamageSource; #accessible method net/minecraft/world/damagesource/DamageSources source (Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/damagesource/DamageSource; ->>>>>>> refs/remotes/slava/devel/port-1.21 diff --git a/Fabric/build.gradle b/Fabric/build.gradle index e388b24769..efa2d2a64b 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -74,13 +74,23 @@ configurations { repositories { mavenCentral() + mavenLocal() + + // serialization hooks + maven { url = "https://maven.hexxy.media" } // paucal and patchi maven { url = 'https://maven.blamejared.com' } // modmenu and clothconfig maven { url "https://maven.shedaniel.me/" } // Cardinal Components - maven { url 'https://maven.ladysnake.org/releases' } + maven { + url = "https://jitpack.io" + content { + includeGroupAndSubgroups 'com.github' + } + } + maven { url = "https://maven.ladysnake.org/releases" } maven { url "https://mvn.devos.one/snapshots/" } // EMI maven { url = "https://maven.terraformersmc.com/releases/" } @@ -123,9 +133,9 @@ dependencies { modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-block:$cardinalComponentsVersion" // apparently the 1.18 version Just Works on 1.19 - modImplementation "${modID}:serialization-hooks:$serializationHooksVersion" - include "${modID}:serialization-hooks:$serializationHooksVersion" - implementation(include("com.github.LlamaLad7:MixinExtras:0.1.1")) + modImplementation "io.github.tropheusj:serialization-hooks:$serializationHooksVersion" + include "io.github.tropheusj:serialization-hooks:$serializationHooksVersion" + include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:0.5.0"))) // === OPTIONAL DEPS === diff --git a/Fabric/gradle.properties b/Fabric/gradle.properties index 4ac5376982..537818eaf2 100644 --- a/Fabric/gradle.properties +++ b/Fabric/gradle.properties @@ -5,7 +5,7 @@ fabricLanguageKotlinVersion=1.12.3+kotlin.2.0.21 loom.platform=fabric # These are all included -cardinalComponentsVersion=6.1.1 +cardinalComponentsVersion=6.1.3 serializationHooksVersion=0.4.99999 #entityReachVersion=2.3.0 diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt index 2ad2ec1d4a..0d24725fd0 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexClientInitializer.kt @@ -13,7 +13,7 @@ import at.petrak.hexcasting.fabric.network.FabricPacketHandler import at.petrak.hexcasting.interop.HexInterop import net.fabricmc.api.ClientModInitializer import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents -import net.fabricmc.fabric.api.client.model.ModelLoadingRegistry +import net.fabricmc.fabric.api.client.model.loading.v1.ModelLoadingPlugin import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry import net.fabricmc.fabric.api.client.rendering.v1.* @@ -31,10 +31,10 @@ object FabricHexClientInitializer : ClientModInitializer { FabricPacketHandler.initClient() WorldRenderEvents.AFTER_TRANSLUCENT.register { ctx -> - HexAdditionalRenderers.overlayLevel(ctx.matrixStack(), ctx.tickDelta()) + HexAdditionalRenderers.overlayLevel(ctx.matrixStack(), ctx.tickCounter().gameTimeDeltaTicks) } HudRenderCallback.EVENT.register(HexAdditionalRenderers::overlayGui) - WorldRenderEvents.START.register { ClientTickCounter.renderTickStart(it.tickDelta()) } + WorldRenderEvents.START.register { ClientTickCounter.renderTickStart(it.tickCounter().gameTimeDeltaTicks) } ClientTickEvents.END_CLIENT_TICK.register { ClientTickCounter.clientTickEnd() ShiftScrollListener.clientTickEnd() @@ -71,6 +71,10 @@ object FabricHexClientInitializer : ClientModInitializer { RegisterClientStuff.registerColorProviders( { colorizer, item -> ColorProviderRegistry.ITEM.register(colorizer, item) }, { colorizer, block -> ColorProviderRegistry.BLOCK.register(colorizer, block) }) - ModelLoadingRegistry.INSTANCE.registerModelProvider(RegisterClientStuff::onModelRegister) + ModelLoadingPlugin.register { + context -> RegisterClientStuff.onModelRegister { + id -> context.addModels(id) + } + } } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java index a0ff01d315..f7e8137b9b 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexConfig.java @@ -234,7 +234,7 @@ public void validatePostLoad() throws ValidationException { try { for (var auugh : this.scrollInjectionsRaw) { String[] split = auugh.split(" "); - ResourceLocation loc = new ResourceLocation(split[0]); + ResourceLocation loc = ResourceLocation.parse(split[0]); int count = Integer.parseInt(split[1]); this.scrollInjections.put(loc, count); } @@ -246,7 +246,7 @@ public void validatePostLoad() throws ValidationException { this.loreInjections = new ArrayList<>(); try { for (var table : this.loreInjectionsRaw) { - ResourceLocation loc = new ResourceLocation(table); + ResourceLocation loc = ResourceLocation.parse(table); this.loreInjections.add(loc); } } catch (Exception e) { @@ -258,7 +258,7 @@ public void validatePostLoad() throws ValidationException { this.cypherInjections = new ArrayList<>(); try { for (var table : this.cypherInjectionsRaw) { - ResourceLocation loc = new ResourceLocation(table); + ResourceLocation loc = ResourceLocation.parse(table); this.cypherInjections.add(loc); } } catch (Exception e) { diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index 19e676136c..a5d5735620 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -1,7 +1,11 @@ package at.petrak.hexcasting.fabric import at.petrak.hexcasting.api.HexAPI.modLoc +import at.petrak.hexcasting.api.addldata.ADMediaHolder import at.petrak.hexcasting.api.advancements.HexAdvancementTriggers +import at.petrak.hexcasting.api.casting.iota.DoubleIota +import at.petrak.hexcasting.api.misc.MediaConstants +import at.petrak.hexcasting.api.mod.HexConfig import at.petrak.hexcasting.api.mod.HexStatistics import at.petrak.hexcasting.common.blocks.behavior.HexComposting import at.petrak.hexcasting.common.blocks.behavior.HexStrippables @@ -18,10 +22,11 @@ import at.petrak.hexcasting.common.misc.BrainsweepingEvents import at.petrak.hexcasting.common.misc.PlayerPositionRecorder import at.petrak.hexcasting.common.misc.RegisterMisc import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry +import at.petrak.hexcasting.fabric.cc.HexCardinalComponents +import at.petrak.hexcasting.fabric.cc.adimpl.CCMediaHolder import at.petrak.hexcasting.fabric.event.VillagerConversionCallback import at.petrak.hexcasting.fabric.loot.FabricHexLootModJankery import at.petrak.hexcasting.fabric.network.FabricPacketHandler -import at.petrak.hexcasting.fabric.recipe.FabricModConditionalIngredient import at.petrak.hexcasting.fabric.storage.FabricImpetusStorage import at.petrak.hexcasting.interop.HexInterop import at.petrak.hexcasting.xplat.IXplatAbstractions @@ -34,8 +39,9 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents import net.fabricmc.fabric.api.event.player.AttackBlockCallback import net.fabricmc.fabric.api.event.player.UseEntityCallback +import net.fabricmc.fabric.api.item.v1.DefaultItemComponentEvents import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents -import net.fabricmc.fabric.api.loot.v2.LootTableEvents +import net.fabricmc.fabric.api.loot.v3.LootTableEvents import net.fabricmc.fabric.api.registry.FlammableBlockRegistry import net.minecraft.commands.synchronization.SingletonArgumentInfo import net.minecraft.core.Registry @@ -43,6 +49,7 @@ import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceLocation import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.Items import net.minecraft.world.level.block.state.properties.BlockSetType import java.util.function.BiConsumer @@ -62,7 +69,7 @@ object FabricHexInitializer : ModInitializer { PatternResLocArgument::class.java, SingletonArgumentInfo.contextFree { PatternResLocArgument.id() } ) - HexAdvancementTriggers.registerTriggers() + HexAdvancementTriggers.registerTriggers(bind(BuiltInRegistries.TRIGGER_TYPES)) HexComposting.setup() HexStrippables.init() FabricImpetusStorage.registerStorage() @@ -95,8 +102,8 @@ object FabricHexInitializer : ModInitializer { CommandRegistrationCallback.EVENT.register { dp, _, _ -> HexCommands.register(dp) } - LootTableEvents.MODIFY.register { _, _, id, supplier, _ -> - FabricHexLootModJankery.lootLoad(id, supplier::withPool) + LootTableEvents.MODIFY.register { key, builder, _, _ -> + FabricHexLootModJankery.lootLoad(key, builder::withPool) } EntityElytraEvents.CUSTOM.register { target, _ -> @@ -126,12 +133,12 @@ object FabricHexInitializer : ModInitializer { HexBlocks.registerBlockItems(bind(BuiltInRegistries.ITEM)) HexBlockEntities.registerTiles(bind(BuiltInRegistries.BLOCK_ENTITY_TYPE)) HexItems.registerItems(bind(BuiltInRegistries.ITEM)) - Registry.register(IngredientDeserializer.REGISTRY, FabricModConditionalIngredient.ID, FabricModConditionalIngredient.Deserializer.INSTANCE) + // Registry.register(IngredientDeserializer.REGISTRY, FabricModConditionalIngredient.ID, FabricModConditionalIngredient.Deserializer.INSTANCE) HexEntities.registerEntities(bind(BuiltInRegistries.ENTITY_TYPE)) - HexAttributes.register(bind(BuiltInRegistries.ATTRIBUTE)) + HexAttributes.register() HexMobEffects.register(bind(BuiltInRegistries.MOB_EFFECT)) - HexPotions.register(bind(BuiltInRegistries.POTION)) + HexPotions.registerPotions(bind(BuiltInRegistries.POTION)) HexRecipeStuffRegistry.registerSerializers(bind(BuiltInRegistries.RECIPE_SERIALIZER)) HexRecipeStuffRegistry.registerTypes(bind(BuiltInRegistries.RECIPE_TYPE)) @@ -160,12 +167,31 @@ object FabricHexInitializer : ModInitializer { // sorry lex (not sorry) private fun fabricOnlyRegistration() { -// if (GravityApiInterop.isActive()) { -// HexActions.make("interop/gravity/get", -// ActionRegistryEntry(HexPattern.fromAngles("wawawddew", HexDir.NORTH_EAST), OpGetGravity)) -// HexActions.make("interop/gravity/set", -// ActionRegistryEntry(HexPattern.fromAngles("wdwdwaaqw", HexDir.NORTH_WEST), OpChangeGravity)) -// } + DefaultItemComponentEvents.MODIFY.register { + it.modify(Items.PUMPKIN_PIE, { + it.set(HexDataComponents.IOTA, DoubleIota(Math.PI)) + }) + } + + HexCardinalComponents.MEDIA_HOLDER_LOOKUP.registerForItems({ + stack, _ -> CCMediaHolder.Static({ HexConfig.common().dustMediaAmount() }, ADMediaHolder.AMETHYST_DUST_PRIORITY, stack) + }, HexItems.AMETHYST_DUST) + + HexCardinalComponents.MEDIA_HOLDER_LOOKUP.registerForItems({ + stack, _ -> CCMediaHolder.Static({ HexConfig.common().shardMediaAmount() }, ADMediaHolder.AMETHYST_SHARD_PRIORITY, stack) + }, Items.AMETHYST_SHARD) + + HexCardinalComponents.MEDIA_HOLDER_LOOKUP.registerForItems({ + stack, _ -> CCMediaHolder.Static({ HexConfig.common().chargedCrystalMediaAmount() }, ADMediaHolder.CHARGED_AMETHYST_PRIORITY, stack) + }, HexItems.CHARGED_AMETHYST) + + HexCardinalComponents.MEDIA_HOLDER_LOOKUP.registerForItems({ + stack, _ -> CCMediaHolder.Static({ MediaConstants.QUENCHED_SHARD_UNIT }, ADMediaHolder.QUENCHED_SHARD_PRIORITY, stack) + }, HexItems.QUENCHED_SHARD) + + HexCardinalComponents.MEDIA_HOLDER_LOOKUP.registerForItems({ + stack, _ -> CCMediaHolder.Static({ MediaConstants.QUENCHED_BLOCK_UNIT }, ADMediaHolder.QUENCHED_ALLAY_PRIORITY, stack) + }, HexBlocks.QUENCHED_ALLAY.asItem()) } private fun butYouCouldBeFire() { diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java index 70919c6fc3..23ed124124 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCFavoredPigment.java @@ -35,11 +35,11 @@ public FrozenPigment setPigment(@Nullable FrozenPigment pigment) { @Override public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { - this.pigment = FrozenPigment.fromNBT(tag.getCompound(TAG_PIGMENT)); + } @Override public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { - tag.put(TAG_PIGMENT, this.pigment.serializeToNBT()); + } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java index de46b5e2e8..34097cf2aa 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCPatterns.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.api.casting.eval.ResolvedPattern; import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.NbtOps; import org.ladysnake.cca.api.v3.component.Component; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -40,7 +41,7 @@ public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { List patterns = new ArrayList<>(patternsTag.size()); for (int i = 0; i < patternsTag.size(); i++) { - patterns.add(ResolvedPattern.fromNBT(patternsTag.getCompound(i))); + patterns.add(ResolvedPattern.CODEC.parse(NbtOps.INSTANCE, patternsTag.getCompound(i)).getOrThrow()); } this.patterns = patterns; } @@ -49,7 +50,7 @@ public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { var listTag = new ListTag(); for (ResolvedPattern pattern : patterns) { - listTag.add(pattern.serializeToNBT()); + listTag.add(ResolvedPattern.CODEC.encode(pattern, NbtOps.INSTANCE, new CompoundTag()).getOrThrow()); } tag.put(TAG_PATTERNS, listTag); } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java index 4944fe79f7..5fd49a0bdf 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/CCStaffcastImage.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.casting.eval.vm.CastingImage; import at.petrak.hexcasting.api.casting.eval.vm.CastingVM; import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.NbtOps; import org.ladysnake.cca.api.v3.component.Component; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer; @@ -26,7 +27,7 @@ public CCStaffcastImage(ServerPlayer owner) { public CastingVM getVM(InteractionHand hand) { var img = this.lazyLoadedTag.isEmpty() ? new CastingImage() - : CastingImage.loadFromNbt(this.lazyLoadedTag, this.owner.serverLevel()); + : CastingImage.getCODEC().parse(NbtOps.INSTANCE, lazyLoadedTag).getOrThrow(); var env = new StaffCastEnv(this.owner, hand); return new CastingVM(img, env); } @@ -35,26 +36,16 @@ public void setImage(@Nullable CastingImage image) { this.lazyLoadedTag = image == null ? new CompoundTag() - : image.serializeToNbt(); + : (CompoundTag) CastingImage.getCODEC().encode(image, NbtOps.INSTANCE, new CompoundTag()).getOrThrow(); } @Override -<<<<<<< HEAD - public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { - this.lazyLoadedTag = tag.getCompound(TAG_HARNESS); - } - - @Override - public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { - tag.put(TAG_HARNESS, this.lazyLoadedTag); -======= - public void readFromNbt(CompoundTag tag) { + public void readFromNbt(CompoundTag tag, HolderLookup.Provider provider) { this.lazyLoadedTag = tag.getCompound(TAG_VM); } @Override - public void writeToNbt(CompoundTag tag) { + public void writeToNbt(CompoundTag tag, HolderLookup.Provider provider) { tag.put(TAG_VM, this.lazyLoadedTag); ->>>>>>> refs/remotes/slava/devel/port-1.21 } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java index 3a7a3ca8a9..89489990ab 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java @@ -1,30 +1,23 @@ package at.petrak.hexcasting.fabric.cc; -import at.petrak.hexcasting.api.addldata.ADMediaHolder; -import at.petrak.hexcasting.api.addldata.ItemDelegatingEntityIotaHolder; -import at.petrak.hexcasting.api.casting.iota.DoubleIota; +import at.petrak.hexcasting.api.addldata.*; import at.petrak.hexcasting.api.item.*; -import at.petrak.hexcasting.api.misc.MediaConstants; -import at.petrak.hexcasting.api.mod.HexConfig; -import at.petrak.hexcasting.common.components.*; import at.petrak.hexcasting.common.entities.EntityWallScroll; -import at.petrak.hexcasting.common.lib.HexBlocks; -import at.petrak.hexcasting.common.lib.HexItems; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.fabric.cc.adimpl.*; +import net.fabricmc.fabric.api.lookup.v1.item.ItemApiLookup; import org.ladysnake.cca.api.v3.component.ComponentFactory; import org.ladysnake.cca.api.v3.component.ComponentKey; import org.ladysnake.cca.api.v3.component.ComponentRegistry; import org.ladysnake.cca.api.v3.entity.EntityComponentFactoryRegistry; import org.ladysnake.cca.api.v3.entity.EntityComponentInitializer; import org.ladysnake.cca.api.v3.entity.RespawnCopyStrategy; -import org.ladysnake.cca.api.v3.item.ItemComponentFactoryRegistry; import org.ladysnake.cca.api.v3.item.ItemComponentInitializer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.item.ItemEntity; -import net.minecraft.world.item.Items; import org.ladysnake.cca.api.v3.item.ItemComponentMigrationRegistry; import java.util.function.Function; @@ -65,6 +58,16 @@ public class HexCardinalComponents implements EntityComponentInitializer, ItemCo public static final ComponentKey VARIANT_ITEM = ComponentRegistry.getOrCreate(modLoc("variant_item"), CCVariantItem.class); + public static final ItemApiLookup MEDIA_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("media_holder"), ADMediaHolder.class, Void.class); + + public static final ItemApiLookup IOTA_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("iota_holder"), ADIotaHolder.class, Void.class); + + public static final ItemApiLookup PIGMENT_ITEM_LOOKUP = ItemApiLookup.get(modLoc("pigment_item"), ADPigment.class, Void.class); + + public static final ItemApiLookup HEX_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("hex_holder"), ADHexHolder.class, Void.class); + + public static final ItemApiLookup VARIANT_ITEM_LOOKUP = ItemApiLookup.get(modLoc("variant_item"), ADVariantItem.class, Void.class); + @Override public void registerEntityComponentFactories(EntityComponentFactoryRegistry registry) { registry.registerFor(Mob.class, BRAINSWEPT, CCBrainswept::new); @@ -88,34 +91,17 @@ public void registerEntityComponentFactories(EntityComponentFactoryRegistry regi @Override public void registerItemComponentMigrations(ItemComponentMigrationRegistry registry) { - registry.registerMigration(modLoc("pigment"), PigmentItemComponent.COMPONENT_TYPE); + registry.registerMigration(modLoc("pigment"), HexDataComponents.PIGMENT); - registry.registerMigration(modLoc("iota_holder"), ItemIotaHolderComponent.COMPONENT_TYPE); + registry.registerMigration(modLoc("iota_holder"), HexDataComponents.IOTA); // oh havoc, you think you're so funny // the worst part is you're /right/ - registry.registerMigration(Items.PUMPKIN_PIE, IOTA_HOLDER, stack -> new CCItemIotaHolder.Static(stack, - s -> new DoubleIota(Math.PI * s.getCount()))); - - registry.registerMigration(modLoc("media_holder"), ItemMediaHolderComponent.COMPONENT_TYPE); - registry.registerMigration(modLoc("media_holder"), s -> new CCMediaHolder.Static( - () -> HexConfig.common().dustMediaAmount(), ADMediaHolder.AMETHYST_DUST_PRIORITY, s - )); - registry.registerMigration(Items.AMETHYST_SHARD, MEDIA_HOLDER, s -> new CCMediaHolder.Static( - () -> HexConfig.common().shardMediaAmount(), ADMediaHolder.AMETHYST_SHARD_PRIORITY, s - )); - registry.registerMigration(HexItems.CHARGED_AMETHYST, MEDIA_HOLDER, s -> new CCMediaHolder.Static( - () -> HexConfig.common().chargedCrystalMediaAmount(), ADMediaHolder.CHARGED_AMETHYST_PRIORITY, s - )); - registry.registerMigration(HexItems.QUENCHED_SHARD.asItem(), MEDIA_HOLDER, s -> new CCMediaHolder.Static( - () -> MediaConstants.QUENCHED_SHARD_UNIT, ADMediaHolder.QUENCHED_SHARD_PRIORITY, s - )); - registry.registerMigration(HexBlocks.QUENCHED_ALLAY.asItem(), MEDIA_HOLDER, s -> new CCMediaHolder.Static( - () -> MediaConstants.QUENCHED_BLOCK_UNIT, ADMediaHolder.QUENCHED_ALLAY_PRIORITY, s - )); - - registry.registerMigration(modLoc("hex_holder"), ItemHexHolderComponent.COMPONENT_TYPE); - - registry.registerMigration(modLoc("variant_item"), VariantItemComponent.COMPONENT_TYPE); + + registry.registerMigration(modLoc("media_holder"), HexDataComponents.MEDIA); + + registry.registerMigration(modLoc("hex_holder"), HexDataComponents.PATTERNS); + + registry.registerMigration(modLoc("variant_item"), HexDataComponents.VARIANT); } private ComponentFactory wrapItemEntityDelegate(Function provider) { } @Override - public @Nullable CompoundTag readIotaTag() { - var iota = this.provider.apply(this.stack); - return iota == null ? null : IotaType.serialize(iota); + public @Nullable Iota readIota() { + return this.provider.apply(this.stack); } @Override @@ -74,5 +84,15 @@ public boolean writeable() { public boolean writeIota(@Nullable Iota datum, boolean simulate) { return false; } + + @Override + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } + + @Override + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCMediaHolder.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCMediaHolder.java index 2fedc1476a..7a565fa4fe 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCMediaHolder.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCMediaHolder.java @@ -2,6 +2,8 @@ import at.petrak.hexcasting.api.addldata.ADMediaHolder; import at.petrak.hexcasting.api.item.MediaHolderItem; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; import org.ladysnake.cca.api.v3.component.Component; import net.minecraft.world.item.ItemStack; @@ -68,6 +70,16 @@ public long withdrawMedia(long cost, boolean simulate) { public long insertMedia(long amount, boolean simulate) { return this.mediaHolder.insertMedia(this.stack, amount, simulate); } + + @Override + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } + + @Override + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } } public static class Static extends CCMediaHolder { @@ -128,5 +140,15 @@ public long withdrawMedia(long cost, boolean simulate) { } return itemsUsed * worth; } + + @Override + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } + + @Override + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCPigment.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCPigment.java index 076ec1fa6e..a2274897dc 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCPigment.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCPigment.java @@ -5,7 +5,6 @@ import at.petrak.hexcasting.api.pigment.ColorProvider; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; import org.ladysnake.cca.api.v3.component.TransientComponent; -import org.ladysnake.cca.api.v3.item.ItemComponent; import net.minecraft.world.item.ItemStack; import java.util.UUID; diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCVariantItem.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCVariantItem.java index df0bb4c2b8..57a40eb67b 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCVariantItem.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/adimpl/CCVariantItem.java @@ -3,9 +3,10 @@ import at.petrak.hexcasting.api.addldata.ADVariantItem; import at.petrak.hexcasting.api.item.VariantItem; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; import net.minecraft.world.item.Item; import org.ladysnake.cca.api.v3.component.Component; -import org.ladysnake.cca.api.v3.item.ItemComponent; import net.minecraft.world.item.ItemStack; public abstract class CCVariantItem implements ADVariantItem, Component { @@ -40,5 +41,15 @@ public int getVariant() { public void setVariant(int variant) { variantItem.setVariant(this.stack, variant); } + + @Override + public void readFromNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } + + @Override + public void writeToNbt(CompoundTag tag, HolderLookup.Provider registryLookup) { + + } } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricConditionsBuilder.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricConditionsBuilder.java index eb4f16aa78..3b6821fd9e 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricConditionsBuilder.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricConditionsBuilder.java @@ -1,25 +1,26 @@ package at.petrak.hexcasting.fabric.datagen; import at.petrak.hexcasting.datagen.IXplatConditionsBuilder; -import com.google.gson.JsonObject; -import net.fabricmc.fabric.api.resource.conditions.v1.ConditionJsonProvider; -import net.fabricmc.fabric.api.resource.conditions.v1.DefaultResourceConditions; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider; +import net.fabricmc.fabric.api.resource.conditions.v1.ResourceCondition; +import net.fabricmc.fabric.api.resource.conditions.v1.ResourceConditions; import net.fabricmc.fabric.impl.datagen.FabricDataGenHelper; -import net.minecraft.advancements.CriterionTriggerInstance; -import net.minecraft.data.recipes.FinishedRecipe; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementHolder; +import net.minecraft.advancements.Criterion; import net.minecraft.data.recipes.RecipeBuilder; +import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; -import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.Recipe; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; public class HexFabricConditionsBuilder implements IXplatConditionsBuilder { - private final List conditions = new ArrayList<>(); + private final List conditions = new ArrayList<>(); private final RecipeBuilder parent; public HexFabricConditionsBuilder(RecipeBuilder parent) { @@ -28,18 +29,18 @@ public HexFabricConditionsBuilder(RecipeBuilder parent) { @Override public IXplatConditionsBuilder whenModLoaded(String modid) { - conditions.add(DefaultResourceConditions.allModsLoaded(modid)); + conditions.add(ResourceConditions.allModsLoaded(modid)); return this; } @Override public IXplatConditionsBuilder whenModMissing(String modid) { - conditions.add(DefaultResourceConditions.not(DefaultResourceConditions.allModsLoaded(modid))); + conditions.add(ResourceConditions.not(ResourceConditions.allModsLoaded(modid))); return this; } @Override - public RecipeBuilder unlockedBy(@NotNull String string, @NotNull CriterionTriggerInstance criterionTriggerInstance) { + public RecipeBuilder unlockedBy(@NotNull String string, @NotNull Criterion criterionTriggerInstance) { return parent.unlockedBy(string, criterionTriggerInstance); } @@ -55,40 +56,20 @@ public Item getResult() { @Override @SuppressWarnings("UnstableApiUsage") - public void save(@NotNull Consumer consumer, @NotNull ResourceLocation resourceLocation) { - Consumer withConditions = json -> { - FabricDataGenHelper.addConditions(json, conditions.toArray(new ConditionJsonProvider[0])); - - consumer.accept(new FinishedRecipe() { - @Override - public void serializeRecipeData(@NotNull JsonObject jsonObject) { - json.serializeRecipeData(jsonObject); - ConditionJsonProvider[] conditions = FabricDataGenHelper.consumeConditions(json); - ConditionJsonProvider.write(jsonObject, conditions); - } - - @Override - public ResourceLocation getId() { - return json.getId(); - } - - @Override - public RecipeSerializer getType() { - return json.getType(); - } - - @Nullable - @Override - public JsonObject serializeAdvancement() { - return json.serializeAdvancement(); - } - - @Nullable - @Override - public ResourceLocation getAdvancementId() { - return json.getAdvancementId(); - } - }); + public void save(@NotNull RecipeOutput consumer, @NotNull ResourceLocation resourceLocation) { + ResourceCondition[] array = conditions.toArray(ResourceCondition[]::new); + + RecipeOutput withConditions = new RecipeOutput() { + @Override + public void accept(ResourceLocation resourceLocation, Recipe recipe, @Nullable AdvancementHolder advancementHolder) { + FabricDataGenHelper.addConditions(consumer, array); + consumer.accept(resourceLocation, recipe, advancementHolder); + } + + @Override + public Advancement.Builder advancement() { + return consumer.advancement(); + } }; parent.save(withConditions, resourceLocation); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java index 6bf539423a..828eddea9d 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java @@ -33,20 +33,21 @@ public void onInitializeDataGenerator(FabricDataGenerator gen) { var pack = gen.createPack(); var xtags = IXplatAbstractions.INSTANCE.tags(); + var provider = gen.getRegistries(); - pack.addProvider((FabricDataGenerator.Pack.Factory) x -> new HexplatRecipes(x, INGREDIENTS, HexFabricConditionsBuilder::new)); + pack.addProvider((FabricDataGenerator.Pack.Factory) x -> new HexplatRecipes(x, provider, INGREDIENTS, HexFabricConditionsBuilder::new)); var btagProviderWrapper = new BlockTagProviderWrapper(); // CURSED pack.addProvider((output, lookup) -> { btagProviderWrapper.provider = new HexBlockTagProvider(output, lookup, xtags); return btagProviderWrapper.provider; }); - pack.addProvider((output, lookup) -> new HexItemTagProvider(output, lookup, btagProviderWrapper.provider, xtags)); + pack.addProvider((output, lookup) -> new HexItemTagProvider(output, lookup, btagProviderWrapper.provider.contentsGetter(), xtags)); pack.addProvider(HexActionTagProvider::new); pack.addProvider((FabricDataGenerator.Pack.Factory) (output) -> new LootTableProvider( - output, Set.of(), List.of(new LootTableProvider.SubProviderEntry(HexLootTables::new, LootContextParamSets.ALL_PARAMS)) + output, Set.of(), List.of(new LootTableProvider.SubProviderEntry(HexLootTables::new, LootContextParamSets.ALL_PARAMS)), provider )); } @@ -117,10 +118,10 @@ public EnumMap dyes() { new Ingredient.ItemValue(new ItemStack(DyeItem.byColor(col))), new Ingredient.TagValue( TagKey.create(Registries.ITEM, - new ResourceLocation("c", col.getSerializedName() + "_dye"))), + ResourceLocation.fromNamespaceAndPath("c", col.getSerializedName() + "_dye"))), new Ingredient.TagValue( TagKey.create(Registries.ITEM, - new ResourceLocation("c", col.getSerializedName() + "_dyes")) + ResourceLocation.fromNamespaceAndPath("c", col.getSerializedName() + "_dyes")) )))); } return out; @@ -162,6 +163,6 @@ private static TagKey tag(String s) { } private static TagKey tag(String namespace, String s) { - return TagKey.create(Registries.ITEM, new ResourceLocation(namespace, s)); + return TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(namespace, s)); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java new file mode 100644 index 0000000000..666d6cccac --- /dev/null +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/AccessoriesApiInterop.java @@ -0,0 +1,47 @@ +package at.petrak.hexcasting.fabric.interop.accessories; + +import at.petrak.hexcasting.api.misc.DiscoveryHandlers; +import at.petrak.hexcasting.common.items.HexBaubleItem; +import at.petrak.hexcasting.common.items.magic.ItemCreativeUnlocker; +import at.petrak.hexcasting.common.lib.HexItems; +import io.wispforest.accessories.api.AccessoriesAPI; +import io.wispforest.accessories.api.AccessoriesCapability; +import io.wispforest.accessories.api.Accessory; +import io.wispforest.accessories.api.attributes.AccessoryAttributeBuilder; +import io.wispforest.accessories.api.slot.SlotReference; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.ItemStack; + +import static io.wispforest.accessories.api.client.AccessoriesRendererRegistry.registerRenderer; + +public class AccessoriesApiInterop { + public static void init() { + BuiltInRegistries.ITEM.stream().forEach(item -> { + if (item instanceof HexBaubleItem bauble) { + AccessoriesAPI.registerAccessory(item, new Accessory() { + @Override + public void getDynamicModifiers(ItemStack stack, SlotReference slot, AccessoryAttributeBuilder builder) { + bauble.getHexBaubleAttrs(stack).forEach(builder::addExclusive); + } + }); + } + }); + + + DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { + AccessoriesCapability slots = AccessoriesCapability.get(player); + if (slots != null) { + var stack2 = slots.getEquipped(stack -> ItemCreativeUnlocker.isDebug(stack, type)); + if (stack2 != null) return stack2.getFirst().stack(); + } + return ItemStack.EMPTY; + }); + } + + @Environment(EnvType.CLIENT) + public static void clientInit() { + registerRenderer(HexItems.SCRYING_LENS, LensAccessoryRenderer::new); + } +} diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensTrinketRenderer.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/LensAccessoryRenderer.java similarity index 55% rename from Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensTrinketRenderer.java rename to Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/LensAccessoryRenderer.java index 805905d03f..2e80525fe5 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/trinkets/LensTrinketRenderer.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/accessories/LensAccessoryRenderer.java @@ -1,18 +1,17 @@ -package at.petrak.hexcasting.fabric.interop.trinkets; +package at.petrak.hexcasting.fabric.interop.accessories; import at.petrak.hexcasting.common.lib.HexItems; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; -import dev.emi.trinkets.api.SlotReference; -import dev.emi.trinkets.api.client.TrinketRenderer; +import io.wispforest.accessories.api.client.AccessoryRenderer; +import io.wispforest.accessories.api.slot.SlotReference; import net.minecraft.client.Minecraft; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.PlayerModel; -import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; @@ -20,23 +19,17 @@ * @author WireSegal * Created at 9:50 AM on 7/25/22. */ -public class LensTrinketRenderer implements TrinketRenderer { +public class LensAccessoryRenderer implements AccessoryRenderer { @Override @SuppressWarnings("unchecked") - public void render(ItemStack stack, SlotReference slotReference, EntityModel model, - PoseStack matrices, MultiBufferSource multiBufferSource, int light, LivingEntity entity, - float limbAngle, float limbDistance, float tickDelta, float animationProgress, - float headYaw, float headPitch) { + public void render(ItemStack stack, SlotReference slotReference, PoseStack matrices, EntityModel model, MultiBufferSource multiBufferSource, int light, float v, float v1, float v2, float v3, float v4, float v5) { if (stack.is(HexItems.SCRYING_LENS) && - model instanceof PlayerModel playerModel && - entity instanceof AbstractClientPlayer player) { + model instanceof PlayerModel playerModel && slotReference.entity() instanceof Player) { // from https://github.com/Creators-of-Create/Create/blob/ee33823ed0b5084af10ed131a1626ce71db4c07e/src/main/java/com/simibubi/create/compat/curios/GogglesCurioRenderer.java // Translate and rotate with our head matrices.pushPose(); - TrinketRenderer.followBodyRotations(entity, playerModel); - TrinketRenderer.translateToFace(matrices, playerModel, player, headYaw, headPitch); // Translate and scale to our head matrices.translate(0, 0, 0.3); @@ -46,9 +39,8 @@ public void render(ItemStack stack, SlotReference slotReference, EntityModel { - if (item instanceof HexBaubleItem bauble) { - TrinketsApi.registerTrinket(item, new Trinket() { - @Override - public Multimap getModifiers(ItemStack stack, SlotReference slot, - LivingEntity entity, UUID uuid) { - var map = Trinket.super.getModifiers(stack, slot, entity, uuid); - map.putAll(bauble.getHexBaubleAttrs(stack)); - return map; - } - }); - } - }); - - - DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { - Optional optional = TrinketsApi.getTrinketComponent(player); - if (optional.isPresent()) { - TrinketComponent component = optional.get(); - var equipped = component.getEquipped(stack -> ItemCreativeUnlocker.isDebug(stack, type)); - if (!equipped.isEmpty()) { - return equipped.get(0).getB(); - } - } - return ItemStack.EMPTY; - }); - } - - @Environment(EnvType.CLIENT) - public static void clientInit() { - TrinketRendererRegistry.registerRenderer(HexItems.SCRYING_LENS, new LensTrinketRenderer()); - } -} diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java index 75b4410e43..ecf41ed746 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/loot/FabricHexLootModJankery.java @@ -4,17 +4,20 @@ import at.petrak.hexcasting.common.loot.AddPerWorldPatternToScrollFunc; import at.petrak.hexcasting.common.loot.AddHexToAncientCypherFunc; import at.petrak.hexcasting.fabric.FabricHexInitializer; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.entries.LootItem; -import net.minecraft.world.level.storage.loot.entries.LootTableReference; +import net.minecraft.world.level.storage.loot.entries.NestedLootTable; import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; import org.jetbrains.annotations.NotNull; +import java.util.List; import java.util.function.Consumer; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -23,21 +26,21 @@ public class FabricHexLootModJankery { public static final ResourceLocation FUNC_AMETHYST_SHARD_REDUCER = modLoc("amethyst_shard_reducer"); - public static void lootLoad(ResourceLocation id, Consumer addPool) { + public static void lootLoad(ResourceKey id, Consumer addPool) { if (id.equals(Blocks.AMETHYST_CLUSTER.getLootTable())) { addPool.accept(makeAmethystInjectPool()); } - int countRange = FabricHexInitializer.CONFIG.server.scrollRangeForLootTable(id); + int countRange = FabricHexInitializer.CONFIG.server.scrollRangeForLootTable(id.location()); if (countRange != -1) { addPool.accept(makeScrollAddPool(countRange)); } - if (FabricHexInitializer.CONFIG.server.shouldInjectLore(id)) { + if (FabricHexInitializer.CONFIG.server.shouldInjectLore(id.location())) { addPool.accept(makeLoreAddPool(FabricHexInitializer.CONFIG.server.loreChance())); } - if (FabricHexInitializer.CONFIG.server.shouldInjectCyphers(id)) { + if (FabricHexInitializer.CONFIG.server.shouldInjectCyphers(id.location())) { addPool.accept(makeCypherAddPool(FabricHexInitializer.CONFIG.server.cypherChance())); } } @@ -45,14 +48,14 @@ public static void lootLoad(ResourceLocation id, Consumer addP @NotNull private static LootPool.Builder makeAmethystInjectPool() { return LootPool.lootPool() - .add(LootTableReference.lootTableReference(TABLE_INJECT_AMETHYST_CLUSTER)); + .add(NestedLootTable.lootTableReference(TABLE_INJECT_AMETHYST_CLUSTER)); } private static LootPool.Builder makeScrollAddPool(int range) { return LootPool.lootPool() .setRolls(UniformGenerator.between(-range, range)) .add(LootItem.lootTableItem(HexItems.SCROLL_LARGE)) - .apply(() -> new AddPerWorldPatternToScrollFunc(new LootItemCondition[0])); + .apply(() -> new AddPerWorldPatternToScrollFunc(List.of(new LootItemCondition[0]))); } private static LootPool.Builder makeLoreAddPool(double chance) { @@ -67,6 +70,6 @@ private static LootPool.Builder makeCypherAddPool(double chance) { .when(LootItemRandomChanceCondition.randomChance((float) chance)) .setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(HexItems.ANCIENT_CYPHER)) - .apply(() -> new AddHexToAncientCypherFunc(new LootItemCondition[0])); + .apply(() -> new AddHexToAncientCypherFunc(List.of(new LootItemCondition[0]))); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java index 70b6bc2113..c691f1d7b2 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java @@ -5,7 +5,6 @@ import at.petrak.hexcasting.mixin.accessor.AccessorLootTable; import net.minecraft.server.ReloadableServerResources; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.storage.loot.LootDataId; import net.minecraft.world.level.storage.loot.LootDataType; import net.minecraft.world.level.storage.loot.functions.LootItemFunctions; import org.spongepowered.asm.mixin.Mixin; @@ -19,22 +18,4 @@ @Mixin(ReloadableServerResources.class) public class FabricMixinReloadableServerResources { // Add the amethyst shard - @Inject(method = "loadResources", at = @At("RETURN"), cancellable = true) - private static void onLoadResources(CallbackInfoReturnable> cir) { - cir.setReturnValue(cir.getReturnValue().thenApply((rsr) -> { - var amethystTable = rsr.getLootData().getLootTable(Blocks.AMETHYST_CLUSTER.getLootTable()); - var theCoolerAmethystTable = (AccessorLootTable) amethystTable; - var oldFuncs = theCoolerAmethystTable.hex$getFunctions(); - var newFuncs = Arrays.copyOf(oldFuncs, oldFuncs.length + 1); - var shardReducer = rsr.getLootData().getElement(new LootDataId<>(LootDataType.MODIFIER, FabricHexLootModJankery.FUNC_AMETHYST_SHARD_REDUCER)); - if (shardReducer != null) { - newFuncs[newFuncs.length - 1] = shardReducer; - theCoolerAmethystTable.hex$setFunctions(newFuncs); - theCoolerAmethystTable.hex$setCompositeFunction(LootItemFunctions.compose(newFuncs)); - } else { - HexAPI.LOGGER.warn("{} was not found?", FabricHexLootModJankery.FUNC_AMETHYST_SHARD_REDUCER); - } - return rsr; - })); - } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java index b644801a83..c4f0d7d3cf 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java @@ -4,6 +4,7 @@ import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelManager; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.util.profiling.ProfilerFiller; @@ -14,6 +15,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import java.util.HashMap; import java.util.Map; // https://github.com/VazkiiMods/Botania/blob/986dff2e8cd9f40f7e4d6ed7b30c98944bdb3b87/Fabric/src/main/java/vazkii/botania/fabric/mixin/client/ModelManagerFabricMixin.java#L34 @@ -29,6 +31,8 @@ public class FabricModelManagerMixin { "Lnet/minecraft/util/profiling/ProfilerFiller;)V", locals = LocalCapture.CAPTURE_FAILEXCEPTION) private void onModelBake(ModelManager.ReloadState reloadState, ProfilerFiller profiler, CallbackInfo ci, ModelBakery modelLoader) { - RegisterClientStuff.onModelBake(modelLoader, this.bakedRegistry); + Map newRegistry = new HashMap<>(); + this.bakedRegistry.forEach(((resourceLocation, bakedModel) -> newRegistry.put(new ModelResourceLocation(resourceLocation, ModelResourceLocation.INVENTORY_VARIANT), bakedModel))); + RegisterClientStuff.onModelBake(modelLoader, newRegistry); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java index f25407916d..b21e65af46 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java @@ -15,10 +15,10 @@ public class FabricPacketHandler { public static void init() { - ServerPlayNetworking.registerGlobalReceiver(MsgNewSpellPatternC2S.ID, + ServerPlayNetworking.registerGlobalReceiver(MsgNewSpellPatternC2S.TYPE, makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); ServerPlayNetworking.registerGlobalReceiver( - MsgShiftScrollC2S.ID, makeServerBoundHandler(MsgShiftScrollC2S::handle)); + MsgShiftScrollC2S.TYPE, makeServerBoundHandler(MsgShiftScrollC2S::handle)); } private static ServerPlayNetworking.PlayPayloadHandler makeServerBoundHandler( @@ -27,23 +27,23 @@ private static ServerPlayNetworking.PlayPayloadH } public static void initClient() { - ClientPlayNetworking.registerGlobalReceiver(MsgNewSpellPatternS2C.ID, + ClientPlayNetworking.registerGlobalReceiver(MsgNewSpellPatternS2C.TYPE, makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); ClientPlayNetworking.registerGlobalReceiver( - MsgBlinkS2C.ID, makeClientBoundHandler(MsgBlinkS2C::handle)); - ClientPlayNetworking.registerGlobalReceiver(MsgCastParticleS2C.ID, + MsgBlinkS2C.TYPE, makeClientBoundHandler(MsgBlinkS2C::handle)); + ClientPlayNetworking.registerGlobalReceiver(MsgCastParticleS2C.TYPE, makeClientBoundHandler(MsgCastParticleS2C::handle)); - ClientPlayNetworking.registerGlobalReceiver(MsgOpenSpellGuiS2C.ID, + ClientPlayNetworking.registerGlobalReceiver(MsgOpenSpellGuiS2C.TYPE, makeClientBoundHandler(MsgOpenSpellGuiS2C::handle)); - ClientPlayNetworking.registerGlobalReceiver(MsgBeepS2C.ID, + ClientPlayNetworking.registerGlobalReceiver(MsgBeepS2C.TYPE, makeClientBoundHandler(MsgBeepS2C::handle)); - ClientPlayNetworking.registerGlobalReceiver(MsgNewWallScrollS2C.ID, + ClientPlayNetworking.registerGlobalReceiver(MsgNewWallScrollS2C.TYPE, makeClientBoundHandler(MsgNewWallScrollS2C::handle)); - ClientPlayNetworking.registerGlobalReceiver(MsgRecalcWallScrollDisplayS2C.ID, + ClientPlayNetworking.registerGlobalReceiver(MsgRecalcWallScrollDisplayS2C.TYPE, makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::handle)); - ClientPlayNetworking.registerGlobalReceiver(MsgNewSpiralPatternsS2C.ID, + ClientPlayNetworking.registerGlobalReceiver(MsgNewSpiralPatternsS2C.TYPE, makeClientBoundHandler(MsgNewSpiralPatternsS2C::handle)); - ClientPlayNetworking.registerGlobalReceiver(MsgClearSpiralPatternsS2C.ID, + ClientPlayNetworking.registerGlobalReceiver(MsgClearSpiralPatternsS2C.TYPE, makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java index a25fdea847..4531837c05 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java @@ -4,9 +4,11 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; +import com.mojang.serialization.JsonOps; import io.github.tropheusj.serialization_hooks.ingredient.BaseCustomIngredient; import io.github.tropheusj.serialization_hooks.ingredient.IngredientDeserializer; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -18,6 +20,7 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; + public class FabricModConditionalIngredient extends BaseCustomIngredient { public static final ResourceLocation ID = modLoc("mod_conditional"); @@ -36,9 +39,7 @@ protected FabricModConditionalIngredient(Ingredient main, String modid, Ingredie this.toUse = IXplatAbstractions.INSTANCE.isModPresent(modid) ? ifModLoaded : main; } - /** - * Creates a new ingredient matching the given stack - */ + public static FabricModConditionalIngredient of(Ingredient main, String modid, Ingredient ifModLoaded) { return new FabricModConditionalIngredient(main, modid, ifModLoaded); } @@ -48,23 +49,13 @@ public boolean test(@Nullable ItemStack input) { return toUse.test(input); } - @Override - public @NotNull JsonElement toJson() { - JsonObject json = new JsonObject(); - json.addProperty("type", Objects.toString(ID)); - json.add("default", main.toJson()); - json.addProperty("modid", modid); - json.add("if_loaded", ifModLoaded.toJson()); - return json; - } - @Override public IngredientDeserializer getDeserializer() { return Deserializer.INSTANCE; } public static Ingredient fromNetwork(FriendlyByteBuf friendlyByteBuf) { - return Ingredient.fromNetwork(friendlyByteBuf); // Just send the actual ingredient + return Ingredient.CONTENTS_STREAM_CODEC.decode((RegistryFriendlyByteBuf) friendlyByteBuf); // Just send the actual ingredient } public static Ingredient fromJson(JsonElement element) { @@ -76,7 +67,7 @@ public static Ingredient fromJson(JsonElement element) { if (object.has("type") && object.getAsJsonPrimitive("type").getAsString().equals(ID.toString())) { if (object.has("modid") && IXplatAbstractions.INSTANCE.isModPresent(object.getAsJsonPrimitive("modid").getAsString())) { try { - Ingredient ingredient = Ingredient.fromJson(object.get("if_loaded")); + Ingredient ingredient = Ingredient.CODEC.decode(JsonOps.INSTANCE, object.get("if_loaded")).getOrThrow().getFirst(); if (!ingredient.isEmpty()) { return ingredient; } @@ -85,18 +76,12 @@ public static Ingredient fromJson(JsonElement element) { } } - return Ingredient.fromJson(object.get("default")); + return Ingredient.CODEC.decode(JsonOps.INSTANCE, object.get("default")).getOrThrow().getFirst(); } return null; } - @Override - public void toNetwork(@NotNull FriendlyByteBuf friendlyByteBuf) { - friendlyByteBuf.writeResourceLocation(ID); - toUse.toNetwork(friendlyByteBuf); - } - public static class Deserializer implements IngredientDeserializer { public static final Deserializer INSTANCE = new Deserializer(); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java index 267b7e8ebe..35dc97a4ad 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java @@ -4,17 +4,23 @@ import at.petrak.hexcasting.api.utils.NBTHelper; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.mojang.serialization.JsonOps; import io.github.tropheusj.serialization_hooks.ingredient.BaseCustomIngredient; import io.github.tropheusj.serialization_hooks.ingredient.IngredientDeserializer; +import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.ShapedRecipe; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; +import javax.xml.crypto.Data; import java.util.Objects; import java.util.stream.Stream; @@ -27,7 +33,9 @@ public class FabricUnsealedIngredient extends BaseCustomIngredient { private static ItemStack createStack(ItemStack base) { ItemStack newStack = base.copy(); - NBTHelper.putString(newStack, IotaHolderItem.TAG_OVERRIDE_VISUALLY, "any"); + CompoundTag tag = newStack.get(DataComponents.CUSTOM_DATA).copyTag(); + NBTHelper.putString(tag, "VisualOverride", "any"); + newStack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); return newStack; } @@ -52,21 +60,13 @@ public boolean test(@Nullable ItemStack input) { return false; } - @Override - public @NotNull JsonElement toJson() { - JsonObject json = new JsonObject(); - json.addProperty("type", Objects.toString(ID)); - json.addProperty("item", Objects.toString(BuiltInRegistries.ITEM.getKey(this.stack.getItem()))); - return json; - } - @Override public IngredientDeserializer getDeserializer() { return Deserializer.INSTANCE; } - public static Ingredient fromNetwork(FriendlyByteBuf friendlyByteBuf) { - return new FabricUnsealedIngredient(friendlyByteBuf.readItem()); + public static Ingredient fromNetwork(RegistryFriendlyByteBuf friendlyByteBuf) { + return new FabricUnsealedIngredient(ItemStack.STREAM_CODEC.decode(friendlyByteBuf)); } public static Ingredient fromJson(JsonElement element) { @@ -77,24 +77,18 @@ public static Ingredient fromJson(JsonElement element) { JsonObject object = element.getAsJsonObject(); if (object.has("type") && object.getAsJsonPrimitive("type").getAsString().equals(ID.toString())) { - return new FabricUnsealedIngredient(new ItemStack(ShapedRecipe.itemFromJson(object))); + return new FabricUnsealedIngredient(ItemStack.CODEC.parse(JsonOps.INSTANCE, object).getOrThrow()); } return null; } - @Override - public void toNetwork(FriendlyByteBuf friendlyByteBuf) { - friendlyByteBuf.writeResourceLocation(ID); - friendlyByteBuf.writeItem(stack); - } - public static class Deserializer implements IngredientDeserializer { public static final Deserializer INSTANCE = new Deserializer(); @Override public Ingredient fromNetwork(FriendlyByteBuf buffer) { - return FabricUnsealedIngredient.fromNetwork(buffer); + return FabricUnsealedIngredient.fromNetwork((RegistryFriendlyByteBuf) buffer); } @Nullable diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java index a4d47b4776..a9851c4ccf 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java @@ -3,7 +3,7 @@ import at.petrak.hexcasting.api.client.ClientCastingStack; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; import at.petrak.hexcasting.fabric.client.ExtendedTexture; -import at.petrak.hexcasting.fabric.interop.trinkets.TrinketsApiInterop; +import at.petrak.hexcasting.fabric.interop.accessories.AccessoriesApiInterop; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IClientXplatAbstractions; import at.petrak.hexcasting.xplat.IXplatAbstractions; @@ -44,7 +44,7 @@ public void setRenderLayer(Block block, RenderType type) { @Override public void initPlatformSpecific() { if (IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Fabric.TRINKETS_API_ID)) { - TrinketsApiInterop.clientInit(); + AccessoriesApiInterop.clientInit(); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java index 0c60c91e09..26623ae378 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java @@ -21,14 +21,17 @@ import at.petrak.hexcasting.api.player.AltioraAbility; import at.petrak.hexcasting.api.player.FlightAbility; import at.petrak.hexcasting.api.player.Sentinel; -import at.petrak.hexcasting.common.components.PigmentItemComponent; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexRegistries; +import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredientType; import at.petrak.hexcasting.fabric.cc.HexCardinalComponents; -import at.petrak.hexcasting.fabric.interop.trinkets.TrinketsApiInterop; +import at.petrak.hexcasting.fabric.interop.accessories.AccessoriesApiInterop; import at.petrak.hexcasting.fabric.recipe.FabricUnsealedIngredient; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.interop.pehkui.PehkuiInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import at.petrak.hexcasting.xplat.IXplatRegister; import at.petrak.hexcasting.xplat.IXplatTags; import at.petrak.hexcasting.xplat.Platform; import com.google.common.base.Suppliers; @@ -53,6 +56,7 @@ import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -78,6 +82,7 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.MatchTool; import net.minecraft.world.phys.Vec3; +import org.apache.commons.codec.binary.Hex; import org.jetbrains.annotations.Nullable; import virtuoel.pehkui.api.ScaleTypes; @@ -107,7 +112,7 @@ public boolean isModPresent(String id) { @Override public void initPlatformSpecific() { if (this.isModPresent(HexInterop.Fabric.TRINKETS_API_ID)) { - TrinketsApiInterop.init(); + AccessoriesApiInterop.init(); } } @@ -118,7 +123,7 @@ public void initPlatformSpecific() { @Override public void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet) { - ServerPlayNetworking.send(target, packet.getFabricId(), packet.toBuf()); + ServerPlayNetworking.send(target, packet); } @Override @@ -132,7 +137,7 @@ public void sendPacketTracking(Entity entity, CustomPacketPayload packet) { } private void sendPacketToPlayers(Collection players, CustomPacketPayload packet) { - var pkt = ServerPlayNetworking.createS2CPacket(packet.getFabricId(), packet.toBuf()); + var pkt = ServerPlayNetworking.createS2CPacket(packet); for (var p : players) { p.connection.send(pkt); } @@ -140,7 +145,7 @@ private void sendPacketToPlayers(Collection players, CustomPacketP @Override public Packet toVanillaClientboundPacket(CustomPacketPayload message) { - return ServerPlayNetworking.createS2CPacket(message.getFabricId(), message.toBuf()); + return (Packet) (Object) ServerPlayNetworking.createS2CPacket(message); } @Override @@ -237,21 +242,13 @@ public void clearCastingData(ServerPlayer player) { @Override public @Nullable ADMediaHolder findMediaHolder(ItemStack stack) { - var cc = HexCardinalComponents.MEDIA_HOLDER.maybeGet(stack); - return cc.orElse(null); - } - - @Override - public @Nullable ADMediaHolder findMediaHolder(ServerPlayer player) { - var cc = HexCardinalComponents.MEDIA_HOLDER.maybeGet(player); - return cc.orElse(null); + return HexCardinalComponents.MEDIA_HOLDER_LOOKUP.find(stack, null); } @Override public @Nullable ADIotaHolder findDataHolder(ItemStack stack) { - var cc = HexCardinalComponents.IOTA_HOLDER.maybeGet(stack); - return cc.orElse(null); + return HexCardinalComponents.IOTA_HOLDER_LOOKUP.find(stack, null); } @Override @@ -264,19 +261,17 @@ ADIotaHolder findDataHolder(Entity entity) { @Override public @Nullable ADHexHolder findHexHolder(ItemStack stack) { - var cc = HexCardinalComponents.HEX_HOLDER.maybeGet(stack); - return cc.orElse(null); + return HexCardinalComponents.HEX_HOLDER_LOOKUP.find(stack, null); } @Override - public @Nullable ADVariantItem findVariantHolder(ItemStack stack) { - var cc = HexCardinalComponents.VARIANT_ITEM.maybeGet(stack); - return cc.orElse(null); + public ADVariantItem findVariantHolder(ItemStack stack) { + return HexCardinalComponents.VARIANT_ITEM_LOOKUP.find(stack, null); } @Override public boolean isPigment(ItemStack stack) { - return stack.get(PigmentItemComponent.COMPONENT_TYPE) != null; + return stack.get(HexDataComponents.PIGMENT) != null; } @Override @@ -424,8 +419,8 @@ public String getModName(String namespace) { .buildAndRegister() ); private static final Supplier>> IOTA_TYPE_REGISTRY = Suppliers.memoize(() -> - FabricRegistryBuilder.from(new DefaultedMappedRegistry<>( - HexAPI.MOD_ID + ":null", HexRegistries.IOTA_TYPE, + FabricRegistryBuilder.from(new MappedRegistry<>( + HexRegistries.IOTA_TYPE, Lifecycle.stable(), false)) .buildAndRegister() ); @@ -451,6 +446,20 @@ public String getModName(String namespace) { .buildAndRegister() ); + private static final Supplier>> STATE_INGREDIENT_REGISTRY = Suppliers.memoize(() -> + FabricRegistryBuilder.from(new MappedRegistry<>( + HexRegistries.STATE_INGREDIENT, + Lifecycle.stable(), false)) + .buildAndRegister() + ); + + private static final Supplier>> BRAINSWEEPEE_INGREDIENT_REGISTRY = Suppliers.memoize(() -> + FabricRegistryBuilder.from(new MappedRegistry<>( + HexRegistries.BRAINSWEEPEE_INGREDIENT, + Lifecycle.stable(), false)) + .buildAndRegister() + ); + @Override public Registry getActionRegistry() { return ACTION_REGISTRY.get(); @@ -481,6 +490,16 @@ public Registry getEvalSoundRegistry() { return EVAL_SOUNDS_REGISTRY.get(); } + @Override + public Registry> getStateIngredientRegistry() { + return STATE_INGREDIENT_REGISTRY.get(); + } + + @Override + public Registry> getBrainsweepeeIngredientRegistry() { + return BRAINSWEEPEE_INGREDIENT_REGISTRY.get(); + } + @Override public boolean isBreakingAllowed(ServerLevel world, BlockPos pos, BlockState state, @Nullable Player player) { if (player == null) @@ -500,6 +519,11 @@ public boolean isPlacingAllowed(ServerLevel world, BlockPos pos, ItemStack block return success.getResult() == InteractionResult.PASS; // No other mod tried to consume this } + @Override + public IXplatRegister createRegistar(ResourceKey> registryKey) { + return null; + } + private static PehkuiInterop.ApiAbstraction PEHKUI_API = null; @Override diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index e2ca089748..beb61e477f 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -41,11 +41,17 @@ repositories { dir 'libs' } - maven { url "https://maven.neoforged.net/releases/" } + maven { url = "https://maven.neoforged.net/releases/" } // paucal and patchi maven { url = 'https://maven.blamejared.com' } - // caelus elytra - maven { url = "https://maven.theillusivec4.top" } + maven { + name = "Curios" + url = uri("https://maven.theillusivec4.top/") + } + maven { + name = "C4's Maven" + setUrl("https://maven.theillusivec4.top/") + } // pehkui maven { url = "https://jitpack.io" } // EMI @@ -68,23 +74,20 @@ dependencies { neoForge "net.neoforged:neoforge:${neoforgeVersion}" common(project(path: ':Common', configuration: 'namedElements')) { transitive false } shadowBundle(project(path: ':Common', configuration: 'transformProductionNeoForge')) { transitive false } -<<<<<<< HEAD - implementation "thedarkcolour:kotlinforforge-neoforge:$kotlinForForgeVersion" -======= - modImplementation "thedarkcolour:kotlinforforge:$kotlinForForgeVersion" ->>>>>>> refs/remotes/slava/devel/port-1.21 + modImplementation "thedarkcolour:kotlinforforge-neoforge:$kotlinForForgeVersion" // === MANDATORY DEPS === - modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-common" + compileOnly("mezz.jei:jei-$minecraftVersion-neoforge-api:$jeiVersion") + runtimeOnly("mezz.jei:jei-$minecraftVersion-neoforge:$jeiVersion") + + compileOnly("top.theillusivec4.curios:curios-neoforge:$curiosVersion+$minecraftVersion:api") + runtimeOnly("top.theillusivec4.curios:curios-neoforge:$curiosVersion+$minecraftVersion") + + modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-neoforge" modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-NEOFORGE-SNAPSHOT" -<<<<<<< HEAD - modImplementation "com.illusivesoulworks.caelus:caelus-forge:$caelusVersion" -// implementation("com.samsthenerd.inline:inline-forge:$minecraftVersion-$inlineVersion") -======= - modImplementation "top.theillusivec4.caelus:caelus-forge:$caelusVersion" + modImplementation "com.illusivesoulworks.caelus:caelus-neoforge:$caelusVersion" modImplementation "com.samsthenerd.inline:inline-common:1.21.1-1.2.2-74" ->>>>>>> refs/remotes/slava/devel/port-1.21 // needed for inline to run modRuntimeOnly("me.shedaniel.cloth:cloth-config-forge:$clothConfigVersion") @@ -95,11 +98,6 @@ dependencies { modImplementation "io.wispforest:accessories-neoforge:$accessoriesVersion" modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}-1.21-neoforge") -<<<<<<< HEAD - compileOnly("mezz.jei:jei-${minecraftVersion}-neoforge-api:${jeiVersion}") - runtimeOnly("mezz.jei:jei-${minecraftVersion}-neoforge:${jeiVersion}") -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 // "Required due to issues with JIJ dependency resolving in arch or something" // https://github.com/wisp-forest/accessories @@ -155,8 +153,6 @@ processResources { filesMatching("mods.toml") { expand "version": project.version } -<<<<<<< HEAD -======= } shadowJar { @@ -166,5 +162,6 @@ shadowJar { remapJar { inputFile.set shadowJar.archiveFile ->>>>>>> refs/remotes/slava/devel/port-1.21 -} \ No newline at end of file +} + +jar.finalizedBy('remapJar') \ No newline at end of file diff --git a/Neoforge/gradle.properties b/Neoforge/gradle.properties index e8824321d6..a35d3a6636 100644 --- a/Neoforge/gradle.properties +++ b/Neoforge/gradle.properties @@ -4,6 +4,6 @@ loom.platform=neoforge kotlinForForgeVersion=5.8.0 -curiosVersion=5.2.0-beta.3 +curiosVersion=9.5.1 caelusVersion=7.0.1+1.21.1 jeiVersion=19.25.1.328 diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java index 725a9d1feb..394ecec74f 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java @@ -12,7 +12,6 @@ import at.petrak.hexcasting.common.casting.PatternRegistryManifest; import at.petrak.hexcasting.common.lib.HexParticles; import at.petrak.hexcasting.common.misc.PatternTooltip; -import at.petrak.hexcasting.forge.lib.ForgeHexAttachments; import at.petrak.hexcasting.interop.HexInterop; import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; @@ -29,10 +28,6 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.common.NeoForge; -<<<<<<< HEAD -======= -import net.neoforged.neoforge.event.tick.PlayerTickEvent; ->>>>>>> refs/remotes/slava/devel/port-1.21 import java.io.IOException; import java.util.function.Function; @@ -66,7 +61,7 @@ public static void clientInit(FMLClientSetupEvent evt) { }); evBus.addListener((RenderGuiEvent.Post e) -> { - HexAdditionalRenderers.overlayGui(e.getGuiGraphics(), e.getPartialTick().getGameTimeDeltaTicks()); + HexAdditionalRenderers.overlayGui(e.getGuiGraphics(), e.getPartialTick()); }); //TODO port: maybe replace with DeltaTracker from Mojang? @@ -84,12 +79,6 @@ public static void clientInit(FMLClientSetupEvent evt) { e.setCanceled(cancel); }); - evBus.addListener((PlayerTickEvent.Pre ev) -> { - if(!ev.getEntity().isDeadOrDying()) { - ev.getEntity().getData(ForgeHexAttachments.CLIENT_CASTING_STACK).tick(); - } - }); - HexInterop.clientInit(); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java index 3edb4bae45..203f067aec 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexConfig.java @@ -133,20 +133,6 @@ public boolean clickingTogglesDrawing() { public static class Server implements HexConfig.ServerConfigAccess { private static ModConfigSpec.IntValue opBreakHarvestLevel; private static ModConfigSpec.IntValue maxOpCount; -<<<<<<< HEAD - - private static ModConfigSpec.IntValue maxSpellCircleLength; - - private static ModConfigSpec.ConfigValue> actionDenyList; - private static ModConfigSpec.ConfigValue> circleActionDenyList; - - private static ModConfigSpec.BooleanValue villagersOffendedByMindMurder; - - private static ModConfigSpec.ConfigValue> tpDimDenyList; - - private static ModConfigSpec.BooleanValue doesTrueNameHaveAmbit; - -======= private static ModConfigSpec.IntValue maxSpellCircleLength; private static ModConfigSpec.ConfigValue> actionDenyList; private static ModConfigSpec.ConfigValue> circleActionDenyList; @@ -157,7 +143,6 @@ public static class Server implements HexConfig.ServerConfigAccess { private static ModConfigSpec.BooleanValue doesTrueNameHaveAmbit; private static ModConfigSpec.DoubleValue traderScrollChance; ->>>>>>> refs/remotes/slava/devel/port-1.21 private static ModConfigSpec.ConfigValue> fewScrollTables; private static ModConfigSpec.ConfigValue> someScrollTables; private static ModConfigSpec.ConfigValue> manyScrollTables; diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index 118de68279..53128fdf48 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -46,21 +46,6 @@ import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModList; -<<<<<<< HEAD -import net.neoforged.fml.ModLoadingContext; -import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; -import net.neoforged.neoforge.common.ItemAbilities; -import net.neoforged.neoforge.common.ModConfigSpec; -import net.neoforged.neoforge.common.NeoForge; -import net.neoforged.neoforge.common.crafting.CraftingHelper; -import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; -import net.neoforged.neoforge.event.RegisterCommandsEvent; -import net.neoforged.neoforge.event.entity.EntityAttributeModificationEvent; -import net.neoforged.neoforge.event.entity.living.LivingConversionEvent; -import net.neoforged.neoforge.event.entity.living.LivingEvent; -======= import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; @@ -73,20 +58,14 @@ import net.neoforged.neoforge.event.brewing.RegisterBrewingRecipesEvent; import net.neoforged.neoforge.event.entity.EntityAttributeModificationEvent; import net.neoforged.neoforge.event.entity.living.LivingConversionEvent; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.neoforged.neoforge.event.entity.player.PlayerEvent; import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import net.neoforged.neoforge.event.level.BlockEvent; import net.neoforged.neoforge.event.server.ServerStartedEvent; -<<<<<<< HEAD -import net.neoforged.neoforge.event.tick.LevelTickEvent; -import net.neoforged.neoforge.network.PacketDistributor; -======= import net.neoforged.neoforge.event.tick.EntityTickEvent; import net.neoforged.neoforge.event.tick.LevelTickEvent; import net.neoforged.neoforge.network.PacketDistributor; import net.neoforged.neoforge.registries.NewRegistryEvent; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.neoforged.neoforge.registries.RegisterEvent; import thedarkcolour.kotlinforforge.neoforge.KotlinModLoadingContext; @@ -95,23 +74,14 @@ @Mod(HexAPI.MOD_ID) public class ForgeHexInitializer { -<<<<<<< HEAD - public ForgeHexInitializer(ModContainer container) { - initConfig(); -======= public ForgeHexInitializer(ModContainer modContainer) { initConfig(modContainer); ->>>>>>> refs/remotes/slava/devel/port-1.21 initRegistries(); initRegistry(); initListeners(); } -<<<<<<< HEAD - private static void initConfig() { -======= private static void initConfig(ModContainer modContainer) { ->>>>>>> refs/remotes/slava/devel/port-1.21 var config = new ModConfigSpec.Builder().configure(ForgeHexConfig::new); var clientConfig = new ModConfigSpec.Builder().configure(ForgeHexConfig.Client::new); var serverConfig = new ModConfigSpec.Builder().configure(ForgeHexConfig.Server::new); @@ -239,24 +209,15 @@ private static void initListeners() { evBus.addListener((LivingConversionEvent.Post evt) -> BrainsweepingEvents.copyBrainsweepPostTransformation(evt.getEntity(), evt.getOutcome())); -<<<<<<< HEAD - evBus.addListener((LivingEvent evt) -> { -======= evBus.addListener((EntityTickEvent.Post evt) -> { ->>>>>>> refs/remotes/slava/devel/port-1.21 if (evt.getEntity() instanceof ServerPlayer splayer) { OpFlight.tickDownFlight(splayer); OpAltiora.checkPlayerCollision(splayer); } }); -<<<<<<< HEAD - evBus.addListener((LevelTickEvent evt) -> { - if (evt instanceof LevelTickEvent.Post && evt.getLevel() instanceof ServerLevel world) { -======= evBus.addListener((LevelTickEvent.Post evt) -> { if (evt.getLevel() instanceof ServerLevel world) { ->>>>>>> refs/remotes/slava/devel/port-1.21 PlayerPositionRecorder.updateAllPlayers(world); } }); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java index 58f1c4051e..fe9bdc42ff 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/ForgeCapabilityHandler.java @@ -16,77 +16,21 @@ import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; -<<<<<<< HEAD -======= import net.minecraft.core.registries.BuiltInRegistries; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; -<<<<<<< HEAD -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.neoforged.neoforge.capabilities.BaseCapability; -import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.capabilities.ICapabilityProvider; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; -import java.util.function.BooleanSupplier; -import java.util.function.Function; -import java.util.function.Supplier; -======= import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.neoforged.neoforge.capabilities.Capabilities; import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; ->>>>>>> refs/remotes/slava/devel/port-1.21 import static at.petrak.hexcasting.api.HexAPI.modLoc; public class ForgeCapabilityHandler { public static void registerCaps(RegisterCapabilitiesEvent evt) { -<<<<<<< HEAD - evt.registerBlockEntity( - Capabilities.ItemHandler.BLOCK, - , - (impetus, context) -> provide(impetus, Capabilities.ItemHandler.BLOCK, - () -> new ForgeImpetusCapability((BlockEntityAbstractImpetus) impetus) - ); - } - - public static void attachItemCaps(AttachCapabilitiesEvent evt) { - ItemStack stack = evt.getObject(); - - if (stack.getItem() instanceof MediaHolderItem holder) { - evt.addCapability(MEDIA_STORAGE_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapItemMediaHolder(holder, stack))); - } else if (stack.is(HexItems.AMETHYST_DUST)) { - evt.addCapability(MEDIA_STATIC_CAP, provide(stack, HexCapabilities.MEDIA, () -> - new CapStaticMediaHolder(HexConfig.common()::dustMediaAmount, ADMediaHolder.AMETHYST_DUST_PRIORITY, - stack))); - } else if (stack.is(Items.AMETHYST_SHARD)) { - evt.addCapability(MEDIA_STATIC_CAP, provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - HexConfig.common()::shardMediaAmount, ADMediaHolder.AMETHYST_SHARD_PRIORITY, stack))); - } else if (stack.is(HexItems.CHARGED_AMETHYST)) { - evt.addCapability(MEDIA_STATIC_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - HexConfig.common()::chargedCrystalMediaAmount, ADMediaHolder.CHARGED_AMETHYST_PRIORITY, stack))); - } else if (stack.is(HexItems.QUENCHED_SHARD)) { - // no one uses the config - evt.addCapability(MEDIA_STATIC_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - () -> MediaConstants.QUENCHED_SHARD_UNIT, ADMediaHolder.QUENCHED_SHARD_PRIORITY, stack))); - } else if (stack.is(HexBlocks.QUENCHED_ALLAY.asItem())) { - // no one uses the config - evt.addCapability(MEDIA_STATIC_CAP, - provide(stack, HexCapabilities.MEDIA, () -> new CapStaticMediaHolder( - () -> MediaConstants.QUENCHED_BLOCK_UNIT, ADMediaHolder.QUENCHED_ALLAY_PRIORITY, stack))); -======= for(Item item : BuiltInRegistries.ITEM) { if(item instanceof MediaHolderItem holder) evt.registerItem(HexCapabilities.Item.MEDIA, (stack, ctx) -> new CapItemMediaHolder(holder, stack), item); @@ -100,7 +44,6 @@ public static void attachItemCaps(AttachCapabilitiesEvent evt) { evt.registerItem(HexCapabilities.Item.COLOR, (stack, ctx) -> new CapItemPigment(holder, stack), item); if(item instanceof HexBaubleItem && IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Forge.CURIOS_API_ID)) CuriosApiInterop.registerCap(evt, item); ->>>>>>> refs/remotes/slava/devel/port-1.21 } evt.registerItem( @@ -152,79 +95,6 @@ public static void attachItemCaps(AttachCapabilitiesEvent evt) { (ent, ctx) -> new ItemDelegatingEntityIotaHolder.ToWallScroll(ent) ); -<<<<<<< HEAD - if (IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Forge.CURIOS_API_ID) - && stack.getItem() instanceof HexBaubleItem) { - evt.addCapability(CURIO_CAP, CuriosApiInterop.curioCap(stack)); - } - } - - public static void attachEntityCaps(AttachCapabilitiesEvent evt) { - var entity = evt.getObject(); - if (entity instanceof ItemEntity item) { - evt.addCapability(IOTA_STORAGE_CAP, wrapItemEntityDelegate(item, - ItemDelegatingEntityIotaHolder.ToItemEntity::new)); - } else if (entity instanceof ItemFrame frame) { - evt.addCapability(IOTA_STORAGE_CAP, wrapItemEntityDelegate(frame, - ItemDelegatingEntityIotaHolder.ToItemFrame::new)); - } else if (entity instanceof EntityWallScroll scroll) { - evt.addCapability(IOTA_STORAGE_CAP, wrapItemEntityDelegate(scroll, - ItemDelegatingEntityIotaHolder.ToWallScroll::new)); - } else if (entity instanceof Player player) { - evt.addCapability(PATTERN_SPIRAL, provide(player, HexCapabilities.CLIENT_CASTING_STACK, - () -> new CapClientCastingStack(player, new ClientCastingStack()))); - } - } - - // i do not know why we need super here - private static SimpleProvider wrapItemEntityDelegate(E entity, - Function make) { - return provide(entity, HexCapabilities.ITEM_IOTA, - () -> new CapEntityIotaHolder.Wrapper(make.apply(entity))); - } - - private static SimpleProvider provide(Entity entity, BaseCapability capability, - Supplier supplier) { - return provide(entity::isRemoved, capability, supplier); - } - - private static SimpleProvider provide(BlockEntity be, BaseCapability capability, - Supplier supplier) { - return provide(be::isRemoved, capability, supplier); - } - - public static SimpleProvider provide(ItemStack stack, BaseCapability capability, - Supplier supplier) { - return provide(stack::isEmpty, capability, supplier); - } - - private static SimpleProvider provide(BooleanSupplier invalidated, BaseCapability capability, - Supplier supplier) { - return new SimpleProvider<>(invalidated, capability, Optional.of(supplier)); - } - - public static ICapabilityProvider makeProvider(BaseCapability cap, CAP instance) { - Optional> lazyInstanceButNotReally = Optional.of(() -> instance); - return new SimpleProvider<>(() -> false, cap, lazyInstanceButNotReally); - } - - public record SimpleProvider(BooleanSupplier invalidated, - BaseCapability capability, - Optional> instance) implements ICapabilityProvider { - - @NotNull - public Optional getCapability(@NotNull BaseCapability cap) { - if (invalidated.getAsBoolean()) { - return Optional.empty(); - } - - return cap == capability ? instance : Optional.empty(); - } - - @Override - public @Nullable Object getCapability(Object object, Object object2) { - return null; -======= for(Block block : BuiltInRegistries.BLOCK) { if(block instanceof BlockAbstractImpetus imBlock) { evt.registerBlockEntity( @@ -233,7 +103,6 @@ public Optional getCapability(@NotNull BaseCapability cap) { (be, dir) -> new ForgeImpetusCapability(be) ); } ->>>>>>> refs/remotes/slava/devel/port-1.21 } } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java index 54b35b9440..7856cabc5c 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/cap/HexCapabilities.java @@ -1,50 +1,13 @@ package at.petrak.hexcasting.forge.cap; import at.petrak.hexcasting.api.addldata.*; -<<<<<<< HEAD -import at.petrak.hexcasting.api.client.ClientCastingStack; -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.neoforged.neoforge.capabilities.EntityCapability; import net.neoforged.neoforge.capabilities.ItemCapability; import static at.petrak.hexcasting.api.HexAPI.modLoc; -import static at.petrak.hexcasting.api.HexAPI.modLoc; - public final class HexCapabilities { -<<<<<<< HEAD - public static final ItemCapability MEDIA = - ItemCapability.createVoid( - modLoc("item_media_holder"), - ADMediaHolder.class - ); - public static final EntityCapability MEDIA_ENTITY = - EntityCapability.createVoid( - modLoc("entity_media_holder"), - ADMediaHolder.class - ); - - public static final ItemCapability IOTA = ItemCapability.createVoid( - modLoc("item_iota_holder"), - ADIotaHolder.class - ); - public static final EntityCapability IOTA_ENTITY = EntityCapability.createVoid( - modLoc("entity_iota_holder"), - ADIotaHolder.class - ); - - public static final ItemCapability STORED_HEX = ItemCapability.createVoid( - modLoc("item_hex_holder"), - ADHexHolder.class - ); - - public static final ItemCapability COLOR = ItemCapability.createVoid( - modLoc("item_pigment"), - ADPigment.class - ); -======= public static final class Item { public static final ItemCapability MEDIA = ItemCapability.createVoid(modLoc("media_holder"), ADMediaHolder.class); public static final ItemCapability IOTA = ItemCapability.createVoid(modLoc("iota_holder"), ADIotaHolder.class); @@ -60,5 +23,4 @@ public static final class Entity { public static final EntityCapability VARIANT_ITEM = EntityCapability.createVoid(modLoc("variant"), ADVariantItem.class); public static final EntityCapability COLOR = EntityCapability.createVoid(modLoc("color"), ADPigment.class); } ->>>>>>> refs/remotes/slava/devel/port-1.21 } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java index fb02f98493..2d13ccb6d9 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/interop/curios/CuriosApiInterop.java @@ -10,15 +10,11 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -<<<<<<< HEAD - -======= import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import top.theillusivec4.curios.api.CuriosCapability; import top.theillusivec4.curios.api.SlotContext; import top.theillusivec4.curios.api.type.capability.ICurio; ->>>>>>> refs/remotes/slava/devel/port-1.21 public class CuriosApiInterop { static class Wrapper implements ICurio { @@ -47,13 +43,6 @@ public Multimap, AttributeModifier> getAttributeModifiers(Slot } } -<<<<<<< HEAD - public static ICapabilityProvider curioCap(ItemStack stack) { - return ForgeCapabilityHandler.makeProvider(CuriosCapability.ITEM); - } - -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 public static void init() { DiscoveryHandlers.addDebugItemDiscoverer((player, type) -> { diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java index 47ea0dad38..05030e991c 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/loot/ForgeHexAmethystLootMod.java @@ -39,8 +39,8 @@ public ForgeHexAmethystLootMod(LootItemCondition[] conditionsIn, double shardDel .lookupOrThrow(Registries.LOOT_TABLE) .getOrThrow(HexLootHandler.TABLE_INJECT_AMETHYST_CLUSTER) .value(); - //TODO check if should be raw with modifiers applied or not - injectPool.getRandomItems(context, generatedLoot::add); + //noinspection deprecation + injectPool.getRandomItemsRaw(context, generatedLoot::add); for (var stack : generatedLoot) { AmethystReducerFunc.doStatic(stack, context, this.shardDelta); diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java index 265b9db3f9..5245c0c3a0 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/ForgePacketHandler.java @@ -4,14 +4,8 @@ import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; -<<<<<<< HEAD -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; -import net.neoforged.neoforge.network.handlers.ClientPayloadHandler; -======= import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.neoforged.neoforge.network.handling.IPayloadHandler; import net.neoforged.neoforge.network.registration.PayloadRegistrar; import org.apache.logging.log4j.util.TriConsumer; @@ -20,31 +14,6 @@ public class ForgePacketHandler { -<<<<<<< HEAD - @SubscribeEvent - public static void register(RegisterPayloadHandlersEvent event) { - final PayloadRegistrar registrar = event.registrar("1"); - - // Client -> server - registrar.playToServer(MsgNewSpellPatternC2S.ID, MsgNewSpellPatternC2S.CODEC, makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); - registrar.playToServer(MsgShiftScrollC2S.ID, MsgShiftScrollC2S.CODEC, makeServerBoundHandler(MsgShiftScrollC2S::handle)); - - // Server -> client - registrar.playToClient(MsgNewSpellPatternS2C.ID, MsgNewSpellPatternS2C.CODEC, makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); - registrar.playToClient(MsgNewSpellPatternS2C.ID, MsgNewSpellPatternS2C.CODEC, makeClientBoundHandler(MsgNewSpellPatternS2C::handle)); - registrar.playToClient(MsgBlinkS2C.ID, MsgBlinkS2C.CODEC, makeClientBoundHandler(MsgBlinkS2C::handle)); - registrar.playToClient(MsgSentinelStatusUpdateAck.ID, MsgSentinelStatusUpdateAck.CODEC, makeClientBoundHandler(MsgSentinelStatusUpdateAck::handle)); - registrar.playToClient(MsgPigmentUpdateAck.ID, MsgPigmentUpdateAck.CODEC, makeClientBoundHandler(MsgPigmentUpdateAck::handle)); - registrar.playToClient(MsgAltioraUpdateAck.ID, MsgAltioraUpdateAck.CODEC, makeClientBoundHandler(MsgAltioraUpdateAck::handle)); - registrar.playToClient(MsgCastParticleS2C.ID, MsgCastParticleS2C.CODEC, makeClientBoundHandler(MsgCastParticleS2C::handle)); - registrar.playToClient(MsgOpenSpellGuiS2C.ID, MsgOpenSpellGuiS2C.CODEC, makeClientBoundHandler(MsgOpenSpellGuiS2C::handle)); - registrar.playToClient(MsgBeepS2C.ID, MsgBeepS2C.CODEC, makeClientBoundHandler(MsgBeepS2C::handle)); - registrar.playToClient(MsgBrainsweepAck.ID, MsgBrainsweepAck.CODEC, makeClientBoundHandler(MsgBrainsweepAck::handle)); - registrar.playToClient(MsgNewWallScrollS2C.ID, MsgNewWallScrollS2C.CODEC, makeClientBoundHandler(MsgNewWallScrollS2C::handle)); - registrar.playToClient(MsgRecalcWallScrollDisplayS2C.ID, MsgRecalcWallScrollDisplayS2C.CODEC, makeClientBoundHandler(MsgRecalcWallScrollDisplayS2C::handle)); - registrar.playToClient(MsgNewSpiralPatternsS2C.ID, MsgNewSpiralPatternsS2C.CODEC, makeClientBoundHandler(MsgNewSpiralPatternsS2C::handle)); - registrar.playToClient(MsgClearSpiralPatternsS2C.ID, MsgClearSpiralPatternsS2C.CODEC, makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); -======= public static void init(IEventBus modBus) { modBus.addListener(RegisterPayloadHandlersEvent.class, ev -> { final PayloadRegistrar registar = ev.registrar("1"); @@ -83,7 +52,6 @@ public static void init(IEventBus modBus) { registar.playToClient(MsgClearSpiralPatternsS2C.TYPE, MsgClearSpiralPatternsS2C.STREAM_CODEC, makeClientBoundHandler(MsgClearSpiralPatternsS2C::handle)); }); ->>>>>>> refs/remotes/slava/devel/port-1.21 } private static IPayloadHandler makeServerBoundHandler( diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java index 144089ca68..b2a4d16189 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgAltioraUpdateAck.java @@ -4,51 +4,15 @@ import at.petrak.hexcasting.api.player.AltioraAbility; import at.petrak.hexcasting.xplat.IXplatAbstractions; import net.minecraft.client.Minecraft; -<<<<<<< HEAD -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; ->>>>>>> refs/remotes/slava/devel/port-1.21 import org.jetbrains.annotations.Nullable; import java.util.Optional; public record MsgAltioraUpdateAck(@Nullable AltioraAbility altiora) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec( - MsgAltioraUpdateAck::serialize, - MsgAltioraUpdateAck::deserialize - ); - public static final Type ID = new Type<>(modLoc("altiora")); - - @Override - public Type type() { - return ID; - } - - public static MsgAltioraUpdateAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var extant = buf.readBoolean(); - if (!extant) { - return new MsgAltioraUpdateAck(null); - } - var grace = buf.readVarInt(); - return new MsgAltioraUpdateAck(new AltioraAbility(grace)); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeBoolean(this.altiora != null); - if (this.altiora != null) { - buf.writeVarInt(this.altiora.gracePeriod()); - } -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("altiora")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -62,15 +26,21 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } - public static void handle(MsgAltioraUpdateAck self) { - Minecraft.getInstance().execute(() -> { - var player = Minecraft.getInstance().player; - if (player != null) { - IXplatAbstractions.INSTANCE.setAltiora(player, self.altiora); - } - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgAltioraUpdateAck self) { + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + IXplatAbstractions.INSTANCE.setAltiora(player, self.altiora); + } + }); + } } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java index 8981c8554c..8e2957a70e 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgBrainsweepAck.java @@ -1,56 +1,19 @@ package at.petrak.hexcasting.forge.network; -<<<<<<< HEAD -======= import at.petrak.hexcasting.api.HexAPI; -import at.petrak.hexcasting.api.player.Sentinel; -import at.petrak.hexcasting.common.msgs.IMessage; ->>>>>>> refs/remotes/slava/devel/port-1.21 import at.petrak.hexcasting.xplat.IXplatAbstractions; -import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; -import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.Mob; -import java.util.Optional; - -import static at.petrak.hexcasting.api.HexAPI.modLoc; - /** * Sent server->client to synchronize the status of a brainswept mob. */ public record MsgBrainsweepAck(int target) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec( - MsgBrainsweepAck::serialize, - MsgBrainsweepAck::deserialize - ); - public static final Type ID = new Type<>(modLoc("sweep")); - - @Override - public Type type() { - return ID; - } - - public static MsgBrainsweepAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var target = buf.readInt(); - return new MsgBrainsweepAck(target); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeInt(target); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("sweep")); public static final StreamCodec STREAM_CODEC = ByteBufCodecs.INT.map( @@ -61,22 +24,28 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } public static MsgBrainsweepAck of(Entity target) { return new MsgBrainsweepAck(target.getId()); } - public static void handle(MsgBrainsweepAck msg) { - Minecraft.getInstance().execute(() -> { - var level = Minecraft.getInstance().level; - if (level != null) { - Entity entity = level.getEntity(msg.target()); - if (entity instanceof Mob living) { - IXplatAbstractions.INSTANCE.setBrainsweepAddlData(living); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgBrainsweepAck msg) { + Minecraft.getInstance().execute(() -> { + var level = Minecraft.getInstance().level; + if (level != null) { + Entity entity = level.getEntity(msg.target()); + if (entity instanceof Mob living) { + IXplatAbstractions.INSTANCE.setBrainsweepAddlData(living); + } } - } - }); + }); + } } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java index 12d12f2990..134e0e00ce 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgPigmentUpdateAck.java @@ -2,49 +2,16 @@ import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.pigment.FrozenPigment; -<<<<<<< HEAD -======= -import at.petrak.hexcasting.common.msgs.IMessage; -import at.petrak.hexcasting.common.msgs.MsgBlinkS2C; ->>>>>>> refs/remotes/slava/devel/port-1.21 import at.petrak.hexcasting.xplat.IXplatAbstractions; -import at.petrak.paucal.api.PaucalCodecs; -import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; -import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceLocation; - -import static at.petrak.hexcasting.api.HexAPI.modLoc; /** * Sent server->client to synchronize the status of the sentinel. */ public record MsgPigmentUpdateAck(FrozenPigment update) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec(MsgPigmentUpdateAck::serialize, MsgPigmentUpdateAck::deserialize); - - public static final Type ID = new Type<>(modLoc("color")); - - @Override - public Type type() { return ID; } - - public static MsgPigmentUpdateAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var tag = buf.readNbt(); - var colorizer = FrozenPigment.fromNBT(tag); - return new MsgPigmentUpdateAck(colorizer); - } - - public void serialize(FriendlyByteBuf buf) { - buf.writeNbt(this.update.serializeToNBT()); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("color")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -55,17 +22,21 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } - public static void handle(MsgPigmentUpdateAck self) { - Minecraft.getInstance().execute(() -> { - var player = Minecraft.getInstance().player; - if (player != null) { - IXplatAbstractions.INSTANCE.setPigment(player, self.update()); - } - }); + public void handle() { + Handler.handle(this); } + public static final class Handler { + public static void handle(MsgPigmentUpdateAck self) { + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + IXplatAbstractions.INSTANCE.setPigment(player, self.update()); + } + }); + } + } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java index 79484148fe..2a2afa156e 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/network/MsgSentinelStatusUpdateAck.java @@ -2,79 +2,20 @@ import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.api.player.Sentinel; -<<<<<<< HEAD -======= -import at.petrak.hexcasting.common.msgs.IMessage; -import at.petrak.hexcasting.common.msgs.MsgBlinkS2C; ->>>>>>> refs/remotes/slava/devel/port-1.21 import at.petrak.hexcasting.xplat.IXplatAbstractions; -import at.petrak.paucal.api.PaucalCodecs; -import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; -import net.minecraft.core.registries.Registries; -import net.minecraft.network.FriendlyByteBuf; -<<<<<<< HEAD -======= import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.ByteBufCodecs; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.phys.Vec3; import javax.annotation.Nullable; - import java.util.Optional; -import static at.petrak.hexcasting.api.HexAPI.modLoc; - /** * Sent server->client to synchronize the status of the sentinel. */ public record MsgSentinelStatusUpdateAck(@Nullable Sentinel update) implements CustomPacketPayload { -<<<<<<< HEAD - public static final StreamCodec CODEC = CustomPacketPayload.codec( - MsgSentinelStatusUpdateAck::serialize, - MsgSentinelStatusUpdateAck::deserialize - ); - public static final Type ID = new Type<>(modLoc("sntnl")); - - @Override - public Type type() { - return ID; - } - - public static MsgSentinelStatusUpdateAck deserialize(ByteBuf buffer) { - var buf = new FriendlyByteBuf(buffer); - - var exists = buf.readBoolean(); - if (!exists) { - return new MsgSentinelStatusUpdateAck(null); - } - - var greater = buf.readBoolean(); - var origin = new Vec3(buf.readDouble(), buf.readDouble(), buf.readDouble()); - var dimension = ResourceKey.create(Registries.DIMENSION, buf.readResourceLocation()); - - var sentinel = new Sentinel(greater, origin, dimension); - return new MsgSentinelStatusUpdateAck(sentinel); - } - - public void serialize(FriendlyByteBuf buf) { - if (update == null) { - buf.writeBoolean(false); - return; - } - - buf.writeBoolean(true); - buf.writeBoolean(update.extendsRange()); - buf.writeDouble(update.position().x); - buf.writeDouble(update.position().y); - buf.writeDouble(update.position().z); - buf.writeResourceLocation(update.dimension().location()); -======= public static final CustomPacketPayload.Type TYPE = new CustomPacketPayload.Type<>(HexAPI.modLoc("sntnl")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( @@ -88,15 +29,21 @@ public void serialize(FriendlyByteBuf buf) { @Override public CustomPacketPayload.Type type() { return TYPE; ->>>>>>> refs/remotes/slava/devel/port-1.21 } - public static void handle(MsgSentinelStatusUpdateAck self) { - Minecraft.getInstance().execute(() -> { - var player = Minecraft.getInstance().player; - if (player != null) { - IXplatAbstractions.INSTANCE.setSentinel(player, self.update()); - } - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgSentinelStatusUpdateAck self) { + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + IXplatAbstractions.INSTANCE.setSentinel(player, self.update()); + } + }); + } } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java index 27edac485f..f0f77e1cce 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/recipe/ForgeUnsealedIngredient.java @@ -30,9 +30,6 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public class ForgeUnsealedIngredient implements ICustomIngredient { -<<<<<<< HEAD - public static final ResourceLocation ID = modLoc("unsealed"); -======= public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(inst -> inst.group( ItemStack.CODEC.fieldOf("stack").forGetter(ForgeUnsealedIngredient::getStack) ).apply(inst, ForgeUnsealedIngredient::new)); @@ -40,7 +37,6 @@ public class ForgeUnsealedIngredient implements ICustomIngredient { ForgeUnsealedIngredient::of, ForgeUnsealedIngredient::getStack ); ->>>>>>> refs/remotes/slava/devel/port-1.21 private final ItemStack stack; @@ -82,11 +78,7 @@ public boolean test(@Nullable ItemStack input) { @Override public Stream getItems() { -<<<<<<< HEAD - return Stream.empty(); -======= return Stream.of(createStack(stack)); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override @@ -96,44 +88,6 @@ public boolean isSimple() { @Override public IngredientType getType() { -<<<<<<< HEAD - return null; - } - - @Override - public @NotNull IIngredientSerializer getSerializer() { - return ForgeUnsealedIngredient.Serializer.INSTANCE; - } - - @Override - public @NotNull JsonElement toJson() { - JsonObject json = new JsonObject(); - // TODO: should this be Partial or Strict - json.addProperty("type", Objects.toString(CraftingHelper.getID(PartialNBTIngredient.Serializer.INSTANCE))); - json.addProperty("item", Objects.toString(ForgeRegistries.ITEMS.getKey(stack.getItem()))); - return json; - } - - - public static class Serializer implements IIngredientSerializer { - public static final ForgeUnsealedIngredient.Serializer INSTANCE = new ForgeUnsealedIngredient.Serializer(); - - @Override - public @NotNull ForgeUnsealedIngredient parse(FriendlyByteBuf buffer) { - return new ForgeUnsealedIngredient(buffer.readItem()); - } - - @Override - public @NotNull ForgeUnsealedIngredient parse(@NotNull JsonObject json) { - return new ForgeUnsealedIngredient(CraftingHelper.getItemStack(json, true)); - } - - @Override - public void write(FriendlyByteBuf buffer, ForgeUnsealedIngredient ingredient) { - buffer.writeItem(ingredient.stack); - } -======= return ForgeHexIngredientTypes.UNSEALED_INGREDIENT.get(); ->>>>>>> refs/remotes/slava/devel/port-1.21 } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java index c21c72222c..0419b3c49a 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java @@ -1,12 +1,7 @@ package at.petrak.hexcasting.forge.xplat; import at.petrak.hexcasting.api.client.ClientCastingStack; -<<<<<<< HEAD -import at.petrak.hexcasting.forge.cap.HexCapabilities; -import at.petrak.hexcasting.forge.network.ForgePacketHandler; -======= import at.petrak.hexcasting.forge.lib.ForgeHexAttachments; ->>>>>>> refs/remotes/slava/devel/port-1.21 import at.petrak.hexcasting.xplat.IClientXplatAbstractions; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; @@ -27,11 +22,7 @@ public class ForgeClientXplatImpl implements IClientXplatAbstractions { @Override public void sendPacketToServer(CustomPacketPayload packet) { -<<<<<<< HEAD - ForgePacketHandler.getNetwork().sendToServer(packet); -======= PacketDistributor.sendToServer(packet); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override @@ -58,14 +49,7 @@ public void registerItemProperty(Item item, ResourceLocation id, ItemPropertyFun @Override public ClientCastingStack getClientCastingStack(Player player) { -<<<<<<< HEAD - var maybeCap = player.getCapability(HexCapabilities.CLIENT_CASTING_STACK); - if (maybeCap.isEmpty()) - return new ClientCastingStack(); // lie - return maybeCap.get().get(); -======= return player.getData(ForgeHexAttachments.CLIENT_CASTING_STACK); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java index 6d01e208ad..9410eecac3 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeXplatImpl.java @@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.addldata.ADHexHolder; import at.petrak.hexcasting.api.addldata.ADIotaHolder; import at.petrak.hexcasting.api.addldata.ADMediaHolder; +import at.petrak.hexcasting.api.addldata.ADVariantItem; import at.petrak.hexcasting.api.casting.ActionRegistryEntry; import at.petrak.hexcasting.api.casting.arithmetic.Arithmetic; import at.petrak.hexcasting.api.casting.castables.SpecialHandler; @@ -22,21 +23,11 @@ import at.petrak.hexcasting.api.player.Sentinel; import at.petrak.hexcasting.api.utils.HexUtils; import at.petrak.hexcasting.common.lib.HexRegistries; -<<<<<<< HEAD -import at.petrak.hexcasting.common.lib.hex.HexContinuationTypes; -import at.petrak.hexcasting.common.lib.hex.HexEvalSounds; -import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; -import at.petrak.hexcasting.forge.cap.CapSyncers; -import at.petrak.hexcasting.forge.cap.HexCapabilities; -import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; -import at.petrak.hexcasting.forge.mixin.ForgeAccessorBuiltInRegistries; -======= import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredientType; import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredientType; import at.petrak.hexcasting.forge.cap.CapSyncers; import at.petrak.hexcasting.forge.cap.HexCapabilities; import at.petrak.hexcasting.forge.interop.curios.CuriosApiInterop; ->>>>>>> refs/remotes/slava/devel/port-1.21 import at.petrak.hexcasting.forge.network.MsgBrainsweepAck; import at.petrak.hexcasting.forge.recipe.ForgeUnsealedIngredient; import at.petrak.hexcasting.interop.HexInterop; @@ -53,14 +44,9 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; -<<<<<<< HEAD -import net.minecraft.network.protocol.common.ClientboundCustomPayloadPacket; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -======= import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; ->>>>>>> refs/remotes/slava/devel/port-1.21 import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -100,14 +86,9 @@ import net.neoforged.neoforge.fluids.FluidUtil; import net.neoforged.neoforge.fluids.capability.IFluidHandler; import net.neoforged.neoforge.network.PacketDistributor; -<<<<<<< HEAD -import org.jetbrains.annotations.Nullable; -import com.illusivesoulworks.caelus.api.CaelusApi; -======= import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.RegistryBuilder; import org.jetbrains.annotations.Nullable; ->>>>>>> refs/remotes/slava/devel/port-1.21 import virtuoel.pehkui.api.ScaleTypes; import java.util.List; @@ -115,10 +96,6 @@ import java.util.function.BiFunction; import static at.petrak.hexcasting.api.HexAPI.modLoc; -<<<<<<< HEAD - -======= ->>>>>>> refs/remotes/slava/devel/port-1.21 public class ForgeXplatImpl implements IXplatAbstractions { @@ -159,11 +136,7 @@ public void setBrainsweepAddlData(Mob mob) { mob.getPersistentData().putBoolean(TAG_BRAINSWEPT, true); if (mob.level() instanceof ServerLevel) { -<<<<<<< HEAD - sendPacketTracking(mob, MsgBrainsweepAck.of(mob)); -======= PacketDistributor.sendToPlayersTrackingEntity(mob, MsgBrainsweepAck.of(mob)); ->>>>>>> refs/remotes/slava/devel/port-1.21 } } @@ -195,18 +168,11 @@ public void setAltiora(Player player, @Nullable AltioraAbility altiora) { } // The elytra ability is done with an event on fabric -<<<<<<< HEAD - var elytraing = CaelusApi.getInstance().getFallFlyingAttribute(); - var inst = player.getAttribute(elytraing); - if (altiora != null) { - if (inst.getModifier(ALTIORA_ATTRIBUTE_ID) == null) { -======= // TODO port: added null check, test if still works var elytraing = CaelusApi.getInstance().getFallFlyingAttribute(); var inst = player.getAttributes().getInstance(elytraing); if (altiora != null) { if (inst != null && !inst.hasModifier(ALTIORA_ATTRIBUTE_ID)) { ->>>>>>> refs/remotes/slava/devel/port-1.21 inst.addTransientModifier(new AttributeModifier(ALTIORA_ATTRIBUTE_ID, 1.0, AttributeModifier.Operation.ADD_VALUE)); } @@ -312,12 +278,7 @@ public Sentinel getSentinel(Player player) { } var extendsRange = tag.getBoolean(TAG_SENTINEL_GREATER); var position = HexUtils.vecFromNBT(tag.getCompound(TAG_SENTINEL_POSITION)); -<<<<<<< HEAD - var dimension = ResourceKey.create(Registries.DIMENSION, - ResourceLocation.parse(tag.getString(TAG_SENTINEL_DIMENSION))); -======= var dimension = ResourceKey.create(Registries.DIMENSION, ResourceLocation.parse(tag.getString(TAG_SENTINEL_DIMENSION))); ->>>>>>> refs/remotes/slava/devel/port-1.21 return new Sentinel(extendsRange, position, dimension); } @@ -343,43 +304,23 @@ public void clearCastingData(ServerPlayer player) { @Override public @Nullable ADMediaHolder findMediaHolder(ItemStack stack) { -<<<<<<< HEAD - return stack.getCapability(HexCapabilities.MEDIA); - } - - @Override - public @Nullable ADMediaHolder findMediaHolder(ServerPlayer player) { - return player.getCapability(HexCapabilities.MEDIA_ENTITY); -======= return stack.getCapability(HexCapabilities.Item.MEDIA); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override public @Nullable ADIotaHolder findDataHolder(ItemStack stack) { -<<<<<<< HEAD - return stack.getCapability(HexCapabilities.IOTA); -======= return stack.getCapability(HexCapabilities.Item.IOTA); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override public @Nullable ADIotaHolder findDataHolder(Entity entity) { -<<<<<<< HEAD - return entity.getCapability(HexCapabilities.IOTA_ENTITY); -======= return entity.getCapability(HexCapabilities.Entity.IOTA); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override public @Nullable ADHexHolder findHexHolder(ItemStack stack) { -<<<<<<< HEAD - return stack.getCapability(HexCapabilities.STORED_HEX); -======= return stack.getCapability(HexCapabilities.Item.STORED_HEX); } @@ -391,43 +332,10 @@ ADHexHolder findHexHolder(ItemStack stack) { @Override public boolean isPigment(ItemStack stack) { return stack.getCapability(HexCapabilities.Item.COLOR) != null; ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override public ColorProvider getColorProvider(FrozenPigment pigment) { -<<<<<<< HEAD - var maybePigment = pigment.item().getCapability(HexCapabilities.COLOR); - assert maybePigment != null; - return maybePigment.provideColor(pigment.owner()); - } - - @Override - public void sendPacketToPlayer(ServerPlayer target, CustomPacketPayload packet) { - target.connection.send(packet); - } - - @Override - public void sendPacketNear(Vec3 pos, double radius, ServerLevel dimension, CustomPacketPayload packet) { - List players = dimension.getPlayers((player) -> { - double r2 = radius * radius; - return player.level() == dimension && player.position().distanceToSqr(pos) <= r2; - }); - for (ServerPlayer player : players) { - player.connection.send(packet); - } - } - - @Override - public void sendPacketTracking(Entity entity, CustomPacketPayload packet) { - PacketDistributor.sendToPlayersTrackingEntity(entity, packet); - } - - @Override - public ClientboundCustomPayloadPacket toVanillaClientboundPacket(CustomPacketPayload message) { - //noinspection unchecked - return message.toVanillaClientbound(); -======= var adPigment = pigment.item().getCapability(HexCapabilities.Item.COLOR); return adPigment != null ? adPigment.provideColor(pigment.owner()) : ColorProvider.MISSING; } @@ -452,7 +360,6 @@ public Packet toVanillaClientboundPacket(CustomPacketP // TODO port: test cast //noinspection unchecked return (Packet) (Object) message.toVanillaClientbound(); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override @@ -491,12 +398,8 @@ public Ingredient getUnsealedIngredient(ItemStack stack) { @Override public boolean isCorrectTierForDrops(Tier tier, BlockState bs) { -<<<<<<< HEAD - return !bs.requiresCorrectToolForDrops(); -======= // TODO port: check tag return !bs.is(HexTags.Blocks.HEX_UNBREAKABLE); ->>>>>>> refs/remotes/slava/devel/port-1.21 } @Override @@ -671,11 +574,7 @@ public void setScale(Entity e, float scale) { public static final String TAG_ALTIORA_ALLOWED = "hexcasting:altiora_allowed"; public static final String TAG_ALTIORA_GRACE = "hexcasting:altiora_grace_period"; -<<<<<<< HEAD - public static final ResourceLocation ALTIORA_ATTRIBUTE_ID = modLoc("Altiora"); -======= public static final ResourceLocation ALTIORA_ATTRIBUTE_ID = modLoc("altiora"); ->>>>>>> refs/remotes/slava/devel/port-1.21 public static final String TAG_VM = "hexcasting:spell_harness"; public static final String TAG_PATTERNS = "hexcasting:spell_patterns"; diff --git a/gradle.properties b/gradle.properties index 637f71e108..1e8cc67195 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ fabric_loader_version=0.16.14 # this is the version published to modrinth/cf i swear # haha not anymore it's from mavenLocal -paucalVersion=0.7.2 +paucalVersion=0.7.1 patchouliVersion=88 accessoriesVersion=1.1.0-beta.16+1.21.1 diff --git a/settings.gradle b/settings.gradle index d8e8add79f..6f0bfae898 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,10 +1,10 @@ pluginManagement { repositories { gradlePluginPortal() -// maven { -// name = 'Fabric' -// url = 'https://maven.fabricmc.net/' -// } + maven { + name = 'Fabric' + url = 'https://maven.fabricmc.net/' + } maven { name = 'Sponge Snapshots' url = 'https://repo.spongepowered.org/repository/maven-public/' @@ -19,4 +19,4 @@ pluginManagement { } rootProject.name = 'Hex Casting' -include("Common", /*"Fabric",*/ "Neoforge") +include("Common", "Fabric", "Neoforge") From 93a695a830fb5a10b958c1ba71676249efc98e2f Mon Sep 17 00:00:00 2001 From: penguinencounter <49845522+penguinencounter@users.noreply.github.com> Date: Fri, 28 Nov 2025 14:47:55 -0800 Subject: [PATCH 59/81] that's. that's not how remapping works --- Neoforge/build.gradle | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index beb61e477f..897b343019 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -130,16 +130,6 @@ loom { // config "hexcasting_forge.mixins.json" //} -compileJava { - source(project(":Common").sourceSets.main.allSource) -} -compileKotlin { - source(project(":Common").sourceSets.main.kotlin) -} -compileTestKotlin { - source(project(":Common").sourceSets.main.kotlin) -} - sourceSets { main.resources.srcDirs += ['src/generated/resources', '../Common/src/generated/resources'] main.kotlin.srcDirs += 'src/main/java' @@ -162,6 +152,7 @@ shadowJar { remapJar { inputFile.set shadowJar.archiveFile + dependsOn shadowJar } jar.finalizedBy('remapJar') \ No newline at end of file From 254917c2b690460ce093be9a3ed05eb2406d175f Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Fri, 28 Nov 2025 18:07:35 -0600 Subject: [PATCH 60/81] * Mod finally builds, but fails to launch client --- .../hexcasting/xplat/IXplatAbstractions.java | 1 + Fabric/build.gradle | 8 ++++++-- Fabric/gradle.properties | 5 ++++- .../fabric/interop/emi/EmiPhialRecipe.java | 5 +++-- Fabric/src/main/resources/fabric.mod.json | 18 +++++++++--------- gradle.properties | 4 ++-- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java index ac097a5095..369b764743 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IXplatAbstractions.java @@ -59,6 +59,7 @@ /** * more like IHexplatAbstracts lmaooooooo */ + public interface IXplatAbstractions { Platform platform(); diff --git a/Fabric/build.gradle b/Fabric/build.gradle index efa2d2a64b..0d8b112493 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -123,7 +123,7 @@ dependencies { modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-fabric" // dear mod devs, don't put the platform in the middle of your version code modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-FABRIC-SNAPSHOT" -// modImplementation "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" + modImplementation "com.samsthenerd.inline:inline-common:$minecraftVersion-$inlineVersion" modImplementation "io.wispforest:accessories-fabric:$accessoriesVersion" modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-base:$cardinalComponentsVersion" @@ -145,6 +145,9 @@ dependencies { modCompileOnly "dev.emi:emi-fabric:${emiVersion}:api" modLocalRuntime "dev.emi:emi-fabric:${emiVersion}" + modRuntimeOnly "dev.architectury:architectury-fabric:$architecturyVersion" + modRuntimeOnly "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" + // modImplementation "maven.modrinth:gravity-api:$gravityApiVersion" modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}", { exclude group: "net.fabricmc.fabric-api" @@ -158,9 +161,10 @@ dependencies { // i am speed // sodium is causing frustum mixin errors so don't use it // modImplementation "maven.modrinth:sodium:${sodiumVersion}" - modImplementation "maven.modrinth:lithium:${lithiumVersion}" + modImplementation "maven.modrinth:lithium:${lithiumVersion}-fabric" // modImplementation "maven.modrinth:phosphor:${phosphorVersion}" + // === OTHER STUFF === compileOnly "org.jetbrains:annotations:$jetbrainsAnnotationsVersion" testCompileOnly "org.jetbrains:annotations:$jetbrainsAnnotationsVersion" diff --git a/Fabric/gradle.properties b/Fabric/gradle.properties index 537818eaf2..175d2d07c7 100644 --- a/Fabric/gradle.properties +++ b/Fabric/gradle.properties @@ -16,5 +16,8 @@ modmenuVersion=7.0.1 # Optimizations sodiumVersion=mc1.20-0.4.10+build.27 -lithiumVersion=mc1.20.1-0.11.2 +lithiumVersion=mc1.21.1-0.15.1 #phosphorVersion=mc1.19.x-0.8.1 + +# Runtime only +architecturyVersion=13.0.2 diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/EmiPhialRecipe.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/EmiPhialRecipe.java index 2e74629169..e3a2bfde60 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/EmiPhialRecipe.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/EmiPhialRecipe.java @@ -2,7 +2,6 @@ import at.petrak.hexcasting.api.mod.HexTags; import at.petrak.hexcasting.interop.utils.PhialRecipeStackBuilder; -import dev.emi.emi.EmiUtil; import dev.emi.emi.api.recipe.EmiRecipe; import dev.emi.emi.api.recipe.EmiRecipeCategory; import dev.emi.emi.api.stack.EmiIngredient; @@ -12,6 +11,8 @@ import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import java.util.stream.Collectors; import static at.petrak.hexcasting.api.HexAPI.modLoc; @@ -23,7 +24,7 @@ public class EmiPhialRecipe implements EmiRecipe { private final EmiIngredient bottle; private final EmiIngredient outputs; - private final int uniq = EmiUtil.RANDOM.nextInt(); + private final int uniq = ThreadLocalRandom.current().nextInt(); public EmiPhialRecipe() { var stacks = PhialRecipeStackBuilder.createStacks(); diff --git a/Fabric/src/main/resources/fabric.mod.json b/Fabric/src/main/resources/fabric.mod.json index 85a8965ace..de6446c006 100644 --- a/Fabric/src/main/resources/fabric.mod.json +++ b/Fabric/src/main/resources/fabric.mod.json @@ -46,19 +46,19 @@ ], "accessWidener": "fabricasting.accesswidener", "depends": { - "minecraft": "=1.20.1", - "java": ">=17", + "minecraft": "=1.21.1", + "java": ">=21", "fabricloader": ">=0.14", "fabric": ">=0.84", "fabric-language-kotlin": ">=1.9.4+kotlin.1.8.21", - "cardinal-components-base": "~5.2.1", - "cardinal-components-entity": "~5.2.1", - "cardinal-components-item": "~5.2.1", - "cardinal-components-block": "~5.2.1", - "paucal": ">=0.6.0-pre <0.7.0", - "cloth-config": "11.1.*", + "cardinal-components-base": "~6.1.3", + "cardinal-components-entity": "~6.1.3", + "cardinal-components-item": "~6.1.3", + "cardinal-components-block": "~6.1.3", + "paucal": ">0.7.0", + "cloth-config": "15.0.*", "patchouli": ">=1.20.1-80", - "inline": ">=1.20.1-1.0.1" + "inline": ">=1.21.1-1.2.2" }, "suggests": { "pehkui": ">=3.7.6", diff --git a/gradle.properties b/gradle.properties index 1e8cc67195..55a759d4ca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,5 +24,5 @@ emiVersion=1.1.18+1.21.1 pehkuiVersion=3.8.3 -inlineVersion=1.0.1 -clothConfigVersion=11.1.106 \ No newline at end of file +inlineVersion=1.2.2-74 +clothConfigVersion=15.0.140 \ No newline at end of file From caea11d01c74eb59325bdd6b153d859600924b99 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Fri, 28 Nov 2025 22:23:46 -0600 Subject: [PATCH 61/81] * Replaced serialization-hooks with Fabric API's CustomIngredient system --- Fabric/build.gradle | 10 -- .../hexcasting/fabric/FabricHexInitializer.kt | 1 - .../FabricModConditionalIngredient.java | 95 +++++++++++-------- .../recipe/FabricUnsealedIngredient.java | 70 +++++++++----- 4 files changed, 104 insertions(+), 72 deletions(-) diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 0d8b112493..f48299c9dc 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -132,9 +132,6 @@ dependencies { modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-item:$cardinalComponentsVersion" modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-block:$cardinalComponentsVersion" - // apparently the 1.18 version Just Works on 1.19 - modImplementation "io.github.tropheusj:serialization-hooks:$serializationHooksVersion" - include "io.github.tropheusj:serialization-hooks:$serializationHooksVersion" include(implementation(annotationProcessor("io.github.llamalad7:mixinextras-fabric:0.5.0"))) // === OPTIONAL DEPS === @@ -172,13 +169,6 @@ dependencies { implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' } -tasks.withType(JavaCompile) { - source(project(":Common").sourceSets.main.allSource) -} -compileKotlin { - source(project(":Common").sourceSets.main.kotlin) -} - sourcesJar { from project(":Common").sourceSets.main.allJava } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index a5d5735620..a24786ec4c 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -30,7 +30,6 @@ import at.petrak.hexcasting.fabric.network.FabricPacketHandler import at.petrak.hexcasting.fabric.storage.FabricImpetusStorage import at.petrak.hexcasting.interop.HexInterop import at.petrak.hexcasting.xplat.IXplatAbstractions -import io.github.tropheusj.serialization_hooks.ingredient.IngredientDeserializer import net.fabricmc.api.ModInitializer import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java index 4531837c05..549e4880b5 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java @@ -4,24 +4,30 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; +import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; -import io.github.tropheusj.serialization_hooks.ingredient.BaseCustomIngredient; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import io.github.tropheusj.serialization_hooks.ingredient.IngredientDeserializer; +import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredient; +import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; -import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; + import java.util.Arrays; -import java.util.Objects; +import java.util.List; import static at.petrak.hexcasting.api.HexAPI.modLoc; -public class FabricModConditionalIngredient extends BaseCustomIngredient { +public class FabricModConditionalIngredient extends Ingredient implements CustomIngredient { public static final ResourceLocation ID = modLoc("mod_conditional"); private final Ingredient main; @@ -30,8 +36,21 @@ public class FabricModConditionalIngredient extends BaseCustomIngredient { private final Ingredient toUse; + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + Ingredient.CODEC.fieldOf("main").forGetter(FabricModConditionalIngredient::getMain), + Codec.STRING.fieldOf("modid").forGetter(FabricModConditionalIngredient::getModid), + Ingredient.CODEC.fieldOf("ifModLoaded").forGetter(FabricModConditionalIngredient::getIfModLoaded) + ).apply(instance, FabricModConditionalIngredient::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Ingredient.CONTENTS_STREAM_CODEC, FabricModConditionalIngredient::getMain, + ByteBufCodecs.STRING_UTF8, FabricModConditionalIngredient::getModid, + Ingredient.CONTENTS_STREAM_CODEC, FabricModConditionalIngredient::getIfModLoaded, + FabricModConditionalIngredient::new + ); + protected FabricModConditionalIngredient(Ingredient main, String modid, Ingredient ifModLoaded) { - super(IXplatAbstractions.INSTANCE.isModPresent(modid) ? Arrays.stream(ifModLoaded.values) : Arrays.stream(main.values)); + super(Arrays.stream((IXplatAbstractions.INSTANCE.isModPresent(modid) ? ifModLoaded : main).values)); this.main = main; this.modid = modid; this.ifModLoaded = ifModLoaded; @@ -50,50 +69,52 @@ public boolean test(@Nullable ItemStack input) { } @Override - public IngredientDeserializer getDeserializer() { - return Deserializer.INSTANCE; + public List getMatchingStacks() { + return List.of(); + } + + @Override + public boolean requiresTesting() { + return false; } - public static Ingredient fromNetwork(FriendlyByteBuf friendlyByteBuf) { - return Ingredient.CONTENTS_STREAM_CODEC.decode((RegistryFriendlyByteBuf) friendlyByteBuf); // Just send the actual ingredient + public Ingredient getMain() { + return main; } - public static Ingredient fromJson(JsonElement element) { - if (element == null || element.isJsonNull() || !element.isJsonObject()) - return null; - - JsonObject object = element.getAsJsonObject(); - - if (object.has("type") && object.getAsJsonPrimitive("type").getAsString().equals(ID.toString())) { - if (object.has("modid") && IXplatAbstractions.INSTANCE.isModPresent(object.getAsJsonPrimitive("modid").getAsString())) { - try { - Ingredient ingredient = Ingredient.CODEC.decode(JsonOps.INSTANCE, object.get("if_loaded")).getOrThrow().getFirst(); - if (!ingredient.isEmpty()) { - return ingredient; - } - } catch (JsonParseException e) { - // NO-OP - } - } - - return Ingredient.CODEC.decode(JsonOps.INSTANCE, object.get("default")).getOrThrow().getFirst(); - } + public Ingredient getToUse() { + return toUse; + } - return null; + public Ingredient getIfModLoaded() { + return ifModLoaded; } - public static class Deserializer implements IngredientDeserializer { - public static final Deserializer INSTANCE = new Deserializer(); + public String getModid() { + return modid; + } + + @Override + public CustomIngredientSerializer getSerializer() { + return Serializer.INSTANCE; + } + + public static class Serializer implements CustomIngredientSerializer { + public static final Serializer INSTANCE = new Serializer(); + + @Override + public ResourceLocation getIdentifier() { + return FabricModConditionalIngredient.ID; + } @Override - public Ingredient fromNetwork(FriendlyByteBuf buffer) { - return FabricModConditionalIngredient.fromNetwork(buffer); + public MapCodec getCodec(boolean b) { + return CODEC; } - @Nullable @Override - public Ingredient fromJson(JsonObject object) { - return FabricModConditionalIngredient.fromJson(object); + public StreamCodec getPacketCodec() { + return STREAM_CODEC; } } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java index 35dc97a4ad..4339aaed43 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java @@ -4,14 +4,20 @@ import at.petrak.hexcasting.api.utils.NBTHelper; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; import com.mojang.serialization.JsonOps; +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import io.github.tropheusj.serialization_hooks.ingredient.BaseCustomIngredient; import io.github.tropheusj.serialization_hooks.ingredient.IngredientDeserializer; +import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredient; +import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer; import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.CustomData; @@ -21,16 +27,28 @@ import javax.annotation.Nullable; import javax.xml.crypto.Data; +import java.util.Arrays; +import java.util.List; import java.util.Objects; import java.util.stream.Stream; import static at.petrak.hexcasting.api.HexAPI.modLoc; -public class FabricUnsealedIngredient extends BaseCustomIngredient { +public class FabricUnsealedIngredient extends Ingredient implements CustomIngredient { public static final ResourceLocation ID = modLoc("unsealed"); private final ItemStack stack; + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( + ItemStack.CODEC.fieldOf("item").forGetter(FabricUnsealedIngredient::getStack) + ).apply(instance, FabricUnsealedIngredient::new)); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceLocation.STREAM_CODEC, FabricUnsealedIngredient::getId, + ItemStack.STREAM_CODEC, FabricUnsealedIngredient::getStack, + (a, b) -> new FabricUnsealedIngredient(b) + ); + private static ItemStack createStack(ItemStack base) { ItemStack newStack = base.copy(); CompoundTag tag = newStack.get(DataComponents.CUSTOM_DATA).copyTag(); @@ -40,10 +58,18 @@ private static ItemStack createStack(ItemStack base) { } protected FabricUnsealedIngredient(ItemStack stack) { - super(Stream.of(new Ingredient.ItemValue(createStack(stack)))); + super(Arrays.stream(Ingredient.of(stack).values)); this.stack = stack; } + public ItemStack getStack() { + return stack; + } + + public ResourceLocation getId() { + return ID; + } + /** * Creates a new ingredient matching the given stack */ @@ -61,40 +87,36 @@ public boolean test(@Nullable ItemStack input) { } @Override - public IngredientDeserializer getDeserializer() { - return Deserializer.INSTANCE; + public List getMatchingStacks() { + return List.of(stack); } - public static Ingredient fromNetwork(RegistryFriendlyByteBuf friendlyByteBuf) { - return new FabricUnsealedIngredient(ItemStack.STREAM_CODEC.decode(friendlyByteBuf)); + @Override + public boolean requiresTesting() { + return false; } - public static Ingredient fromJson(JsonElement element) { - if (element == null || element.isJsonNull() || !element.isJsonObject()) { - return null; - } + @Override + public CustomIngredientSerializer getSerializer() { + return Serializer.INSTANCE; + } - JsonObject object = element.getAsJsonObject(); + public static class Serializer implements CustomIngredientSerializer { + public static final Serializer INSTANCE = new Serializer(); - if (object.has("type") && object.getAsJsonPrimitive("type").getAsString().equals(ID.toString())) { - return new FabricUnsealedIngredient(ItemStack.CODEC.parse(JsonOps.INSTANCE, object).getOrThrow()); + @Override + public ResourceLocation getIdentifier() { + return FabricUnsealedIngredient.ID; } - return null; - } - - public static class Deserializer implements IngredientDeserializer { - public static final Deserializer INSTANCE = new Deserializer(); - @Override - public Ingredient fromNetwork(FriendlyByteBuf buffer) { - return FabricUnsealedIngredient.fromNetwork((RegistryFriendlyByteBuf) buffer); + public MapCodec getCodec(boolean b) { + return CODEC; } - @Nullable @Override - public Ingredient fromJson(JsonObject object) { - return FabricUnsealedIngredient.fromJson(object); + public StreamCodec getPacketCodec() { + return STREAM_CODEC; } } } From 63ef2cd27c7009580baffe17a2e8c45ef95cd0ca Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Fri, 28 Nov 2025 22:25:23 -0600 Subject: [PATCH 62/81] * Forgot to remove traces of serialization-hooks --- .../fabric/recipe/FabricModConditionalIngredient.java | 1 - .../hexcasting/fabric/recipe/FabricUnsealedIngredient.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java index 549e4880b5..1785b26f45 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricModConditionalIngredient.java @@ -8,7 +8,6 @@ import com.mojang.serialization.JsonOps; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import io.github.tropheusj.serialization_hooks.ingredient.IngredientDeserializer; import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredient; import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer; import net.minecraft.network.FriendlyByteBuf; diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java index 4339aaed43..107e369a21 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/recipe/FabricUnsealedIngredient.java @@ -8,8 +8,6 @@ import com.mojang.serialization.JsonOps; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; -import io.github.tropheusj.serialization_hooks.ingredient.BaseCustomIngredient; -import io.github.tropheusj.serialization_hooks.ingredient.IngredientDeserializer; import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredient; import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer; import net.minecraft.core.component.DataComponents; From facfe82fc74ae537470350e0477a853730003be7 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Fri, 28 Nov 2025 23:31:46 -0600 Subject: [PATCH 63/81] * New FabricRegister for Registries --- .../hexcasting/fabric/FabricHexInitializer.kt | 5 ++ .../fabric/xplat/FabricRegister.java | 57 +++++++++++++++++++ .../fabric/xplat/FabricXplatImpl.java | 4 +- 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index a24786ec4c..fe468d9436 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -27,6 +27,8 @@ import at.petrak.hexcasting.fabric.cc.adimpl.CCMediaHolder import at.petrak.hexcasting.fabric.event.VillagerConversionCallback import at.petrak.hexcasting.fabric.loot.FabricHexLootModJankery import at.petrak.hexcasting.fabric.network.FabricPacketHandler +import at.petrak.hexcasting.fabric.recipe.FabricModConditionalIngredient +import at.petrak.hexcasting.fabric.recipe.FabricUnsealedIngredient import at.petrak.hexcasting.fabric.storage.FabricImpetusStorage import at.petrak.hexcasting.interop.HexInterop import at.petrak.hexcasting.xplat.IXplatAbstractions @@ -41,6 +43,7 @@ import net.fabricmc.fabric.api.event.player.UseEntityCallback import net.fabricmc.fabric.api.item.v1.DefaultItemComponentEvents import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents import net.fabricmc.fabric.api.loot.v3.LootTableEvents +import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer import net.fabricmc.fabric.api.registry.FlammableBlockRegistry import net.minecraft.commands.synchronization.SingletonArgumentInfo import net.minecraft.core.Registry @@ -133,6 +136,8 @@ object FabricHexInitializer : ModInitializer { HexBlockEntities.registerTiles(bind(BuiltInRegistries.BLOCK_ENTITY_TYPE)) HexItems.registerItems(bind(BuiltInRegistries.ITEM)) // Registry.register(IngredientDeserializer.REGISTRY, FabricModConditionalIngredient.ID, FabricModConditionalIngredient.Deserializer.INSTANCE) + CustomIngredientSerializer.register(FabricUnsealedIngredient.Serializer.INSTANCE); + CustomIngredientSerializer.register(FabricModConditionalIngredient.Serializer.INSTANCE); HexEntities.registerEntities(bind(BuiltInRegistries.ENTITY_TYPE)) HexAttributes.register() diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java new file mode 100644 index 0000000000..a234928246 --- /dev/null +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java @@ -0,0 +1,57 @@ +package at.petrak.hexcasting.fabric.xplat; + +import at.petrak.hexcasting.xplat.IXplatRegister; +import net.fabricmc.fabric.api.event.registry.FabricRegistryBuilder; +import net.minecraft.core.Holder; +import net.minecraft.core.MappedRegistry; +import net.minecraft.core.RegistrationInfo; +import net.minecraft.resources.ResourceKey; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Supplier; + +import static at.petrak.hexcasting.api.HexAPI.modLoc; + +public class FabricRegister implements IXplatRegister { + private final MappedRegistry register; + private final Map map; + + public FabricRegister(MappedRegistry register) { + this.register = register; + this.map = new HashMap<>(); + } + + public FabricRegister(MappedRegistry register, Map map) { + this.register = register; + this.map = map; + } + + @Override + public Supplier register(String id, Supplier provider) { + var key = ResourceKey.create( + register.key(), + modLoc(id) + ); + var value = provider.get(); + var info = RegistrationInfo.BUILT_IN; + register.register(key, value, info); + return provider; + } + + @Override + public Holder registerHolder(String id, Supplier provider) { + map.put(id, provider.get()); + return register.wrapAsHolder(provider.get()); + } + + @Override + public void registerAll() { + map.forEach((string, provider) -> + register.register( + ResourceKey.create( + register.key(), modLoc(string) + ), provider, RegistrationInfo.BUILT_IN) + ); + } +} diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java index 26623ae378..47edc89a98 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java @@ -53,6 +53,8 @@ import net.fabricmc.loader.api.ModContainer; import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.core.*; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -521,7 +523,7 @@ public boolean isPlacingAllowed(ServerLevel world, BlockPos pos, ItemStack block @Override public IXplatRegister createRegistar(ResourceKey> registryKey) { - return null; + return new FabricRegister<>(FabricRegistryBuilder.createSimple(registryKey).buildAndRegister()); } private static PehkuiInterop.ApiAbstraction PEHKUI_API = null; From 96fe119bb2459eaa267f5c432a5642166ac12283 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Sat, 29 Nov 2025 12:55:20 -0600 Subject: [PATCH 64/81] * Attempted fix for Fabric Packet handling --- Fabric/build.gradle | 1 + .../hexcasting/fabric/FabricHexInitializer.kt | 1 + .../fabric/network/FabricPacketHandler.java | 22 ++++++++++++++++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Fabric/build.gradle b/Fabric/build.gradle index f48299c9dc..870c7fa20c 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -144,6 +144,7 @@ dependencies { modRuntimeOnly "dev.architectury:architectury-fabric:$architecturyVersion" modRuntimeOnly "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" + modImplementation "blue.endless:jankson:1.2.2" // modImplementation "maven.modrinth:gravity-api:$gravityApiVersion" modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}", { diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index fe468d9436..6d0c4a0b5b 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -60,6 +60,7 @@ object FabricHexInitializer : ModInitializer { override fun onInitialize() { this.CONFIG = FabricHexConfig.setup() + FabricPacketHandler.initPackets() FabricPacketHandler.init() initListeners() diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java index b21e65af46..c6ded2f815 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/network/FabricPacketHandler.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.common.msgs.*; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.RegistryFriendlyByteBuf; @@ -14,11 +15,26 @@ import java.util.function.Function; public class FabricPacketHandler { + public static void initPackets() { + PayloadTypeRegistry.playC2S().register(MsgShiftScrollC2S.TYPE, MsgShiftScrollC2S.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(MsgNewSpellPatternC2S.TYPE, MsgNewSpellPatternC2S.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgNewSpellPatternS2C.TYPE, MsgNewSpellPatternS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgOpenSpellGuiS2C.TYPE, MsgOpenSpellGuiS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgBeepS2C.TYPE, MsgBeepS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgShiftScrollC2S.TYPE, MsgShiftScrollC2S.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgCastParticleS2C.TYPE, MsgCastParticleS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgBlinkS2C.TYPE, MsgBlinkS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgClearSpiralPatternsS2C.TYPE, MsgClearSpiralPatternsS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgNewWallScrollS2C.TYPE, MsgNewWallScrollS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgRecalcWallScrollDisplayS2C.TYPE, MsgRecalcWallScrollDisplayS2C.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(MsgNewSpiralPatternsS2C.TYPE, MsgNewSpiralPatternsS2C.STREAM_CODEC); + } + public static void init() { + ServerPlayNetworking.registerGlobalReceiver(MsgShiftScrollC2S.TYPE, + makeServerBoundHandler(MsgShiftScrollC2S::handle)); ServerPlayNetworking.registerGlobalReceiver(MsgNewSpellPatternC2S.TYPE, - makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); - ServerPlayNetworking.registerGlobalReceiver( - MsgShiftScrollC2S.TYPE, makeServerBoundHandler(MsgShiftScrollC2S::handle)); + makeServerBoundHandler(MsgNewSpellPatternC2S::handle)); } private static ServerPlayNetworking.PlayPayloadHandler makeServerBoundHandler( From f60841f4eb98ca49970c2cef9e048e443d0e1a8c Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Sat, 29 Nov 2025 17:27:20 -0600 Subject: [PATCH 65/81] * Updated loom and fixed Fabric building. --- Common/build.gradle | 4 ++-- Common/src/main/resources/hexplat.mixins.json | 2 +- Fabric/build.gradle | 17 +++++++++++++++-- build.gradle | 2 +- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Common/build.gradle b/Common/build.gradle index b3876cdbef..a5c91e1913 100644 --- a/Common/build.gradle +++ b/Common/build.gradle @@ -1,5 +1,5 @@ architectury { - common([/*"fabric", */"neoforge"]) + common(["fabric", "neoforge"]) } loom { @@ -78,4 +78,4 @@ processResources { } // it wants a task by this name to exist for some reason -task("prepareWorkspace") {} +tasks.register('prepareWorkspace') {} diff --git a/Common/src/main/resources/hexplat.mixins.json b/Common/src/main/resources/hexplat.mixins.json index 39a6da0bd1..9c6121aa10 100644 --- a/Common/src/main/resources/hexplat.mixins.json +++ b/Common/src/main/resources/hexplat.mixins.json @@ -1,7 +1,7 @@ { "minVersion": "0.8", "required": true, - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_21", "refmap": "hexcasting.mixins.refmap.json", "package": "at.petrak.hexcasting.mixin", "mixins": [ diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 870c7fa20c..194f932355 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -1,5 +1,6 @@ plugins { // id 'fabric-loom' version "1.8.9" + id 'com.gradleup.shadow' } architectury { @@ -123,7 +124,7 @@ dependencies { modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-fabric" // dear mod devs, don't put the platform in the middle of your version code modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-FABRIC-SNAPSHOT" - modImplementation "com.samsthenerd.inline:inline-common:$minecraftVersion-$inlineVersion" + modImplementation "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" modImplementation "io.wispforest:accessories-fabric:$accessoriesVersion" modImplementation "org.ladysnake.cardinal-components-api:cardinal-components-base:$cardinalComponentsVersion" @@ -144,7 +145,7 @@ dependencies { modRuntimeOnly "dev.architectury:architectury-fabric:$architecturyVersion" modRuntimeOnly "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" - modImplementation "blue.endless:jankson:1.2.2" + modRuntimeOnly "blue.endless:jankson:1.2.2" // modImplementation "maven.modrinth:gravity-api:$gravityApiVersion" modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}", { @@ -186,3 +187,15 @@ processResources { expand "version": project.version } } + +shadowJar { + configurations = [project.configurations.shadowBundle] + archiveClassifier = 'dev-shadow' +} + +remapJar { + inputFile.set shadowJar.archiveFile + dependsOn shadowJar +} + +jar.finalizedBy(remapJar) \ No newline at end of file diff --git a/build.gradle b/build.gradle index a8536a763f..627274291d 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { // used for something?? - id 'dev.architectury.loom' version '1.10-SNAPSHOT' apply false + id 'dev.architectury.loom' version '1.13-SNAPSHOT' apply false // used for multi-loader stuff, NOT for the archi API id 'architectury-plugin' version '3.4-SNAPSHOT' id 'com.gradleup.shadow' version '8.3.6' apply false From 60bafd6a8397b64cc4b3fa2780a1f618bc70dabb Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Sun, 30 Nov 2025 12:37:35 -0600 Subject: [PATCH 66/81] * Changed some files and mixins :help: --- .../loot_table/grant_patchi_book.json | 6 +++-- .../data/hexcasting/recipe/patchi_book.json | 9 +++++-- Fabric/build.gradle | 3 ++- Fabric/gradle.properties | 3 +-- .../hexcasting/fabric/FabricHexInitializer.kt | 26 +++++++++++++++++-- .../fabric/mixin/FabricClipContextMixin.java | 4 +-- .../FabricMixinReloadableServerResources.java | 21 --------------- .../mixin/client/FabricModelManagerMixin.java | 16 +++++------- .../main/resources/fabricasting.mixins.json | 1 - Neoforge/build.gradle | 3 +++ .../resources/META-INF/neoforge.mods.toml | 12 ++++----- gradle.properties | 5 +++- 12 files changed, 60 insertions(+), 49 deletions(-) delete mode 100644 Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java diff --git a/Common/src/main/resources/data/hexcasting/loot_table/grant_patchi_book.json b/Common/src/main/resources/data/hexcasting/loot_table/grant_patchi_book.json index a154e45b43..121f1d8144 100644 --- a/Common/src/main/resources/data/hexcasting/loot_table/grant_patchi_book.json +++ b/Common/src/main/resources/data/hexcasting/loot_table/grant_patchi_book.json @@ -9,8 +9,10 @@ "name": "patchouli:guide_book", "functions": [ { - "function": "set_nbt", - "tag": "{\"patchouli:book\": \"hexcasting:thehexbook\"}" + "function": "set_components", + "components": { + "patchouli:book": "hexcasting:thehexbook" + } } ] } diff --git a/Common/src/main/resources/data/hexcasting/recipe/patchi_book.json b/Common/src/main/resources/data/hexcasting/recipe/patchi_book.json index 7847622d3a..2881ee9001 100644 --- a/Common/src/main/resources/data/hexcasting/recipe/patchi_book.json +++ b/Common/src/main/resources/data/hexcasting/recipe/patchi_book.json @@ -1,5 +1,5 @@ { - "type": "patchouli:shapeless_book_recipe", + "type": "minecraft:crafting_shapeless", "ingredients": [ { "item": "minecraft:book" @@ -8,5 +8,10 @@ "item": "hexcasting:amethyst_dust" } ], - "book": "hexcasting:thehexbook" + "result": { + "components": { + "patchouli:book": "hexcasting:thehexbook" + }, + "id": "patchouli:guide_book" + } } \ No newline at end of file diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 194f932355..4089d3c8e4 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -145,7 +145,8 @@ dependencies { modRuntimeOnly "dev.architectury:architectury-fabric:$architecturyVersion" modRuntimeOnly "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" - modRuntimeOnly "blue.endless:jankson:1.2.2" + include(implementation("blue.endless:jankson:1.2.2")) + // modImplementation "maven.modrinth:gravity-api:$gravityApiVersion" modApi("com.github.Virtuoel:Pehkui:${pehkuiVersion}", { diff --git a/Fabric/gradle.properties b/Fabric/gradle.properties index 175d2d07c7..1b64bee077 100644 --- a/Fabric/gradle.properties +++ b/Fabric/gradle.properties @@ -19,5 +19,4 @@ sodiumVersion=mc1.20-0.4.10+build.27 lithiumVersion=mc1.21.1-0.15.1 #phosphorVersion=mc1.19.x-0.8.1 -# Runtime only -architecturyVersion=13.0.2 + diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index 6d0c4a0b5b..6eebc918c4 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -12,6 +12,7 @@ import at.petrak.hexcasting.common.blocks.behavior.HexStrippables import at.petrak.hexcasting.common.casting.PatternRegistryManifest import at.petrak.hexcasting.common.casting.actions.spells.OpFlight import at.petrak.hexcasting.common.casting.actions.spells.great.OpAltiora +import at.petrak.hexcasting.common.command.PatternResKeyArgument import at.petrak.hexcasting.common.command.PatternResLocArgument import at.petrak.hexcasting.common.entities.HexEntities import at.petrak.hexcasting.common.items.ItemJewelerHammer @@ -45,14 +46,27 @@ import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents import net.fabricmc.fabric.api.loot.v3.LootTableEvents import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer import net.fabricmc.fabric.api.registry.FlammableBlockRegistry +import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.commands.synchronization.SingletonArgumentInfo import net.minecraft.core.Registry import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceLocation +import net.minecraft.tags.ItemTags import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player import net.minecraft.world.item.Items +import net.minecraft.world.item.enchantment.Enchantments +import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.state.properties.BlockSetType +import net.minecraft.world.level.storage.loot.LootPool +import net.minecraft.world.level.storage.loot.entries.LootItem +import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount +import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction +import net.minecraft.world.level.storage.loot.predicates.MatchTool +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue +import net.minecraft.world.level.storage.loot.providers.number.LootNumberProviderType +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator import java.util.function.BiConsumer object FabricHexInitializer : ModInitializer { @@ -69,14 +83,22 @@ object FabricHexInitializer : ModInitializer { ArgumentTypeRegistry.registerArgumentType( modLoc("pattern"), - PatternResLocArgument::class.java, - SingletonArgumentInfo.contextFree { PatternResLocArgument.id() } + PatternResKeyArgument::class.java, + SingletonArgumentInfo.contextFree { PatternResKeyArgument.id() } ) HexAdvancementTriggers.registerTriggers(bind(BuiltInRegistries.TRIGGER_TYPES)) HexComposting.setup() HexStrippables.init() FabricImpetusStorage.registerStorage() + LootTableEvents.MODIFY.register { key, tableBuilder, source, lookup -> + if (Blocks.AMETHYST_CLUSTER.lootTable.equals(key)) { + tableBuilder.modifyPools { pool -> + pool.apply(SetItemCountFunction.setCount(UniformGenerator.between(1.0f, 2.0f))) + } + } + } + HexInterop.init() RegisterMisc.register() } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricClipContextMixin.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricClipContextMixin.java index d2793487d0..098f8ae603 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricClipContextMixin.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricClipContextMixin.java @@ -11,12 +11,12 @@ @Mixin(ClipContext.class) public abstract class FabricClipContextMixin { - @Redirect(method = "", + @Redirect(method = "(Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/level/ClipContext$Block;Lnet/minecraft/world/level/ClipContext$Fluid;Lnet/minecraft/world/entity/Entity;)V", at = @At( value = "INVOKE", target = "Lnet/minecraft/world/phys/shapes/CollisionContext;of" + "(Lnet/minecraft/world/entity/Entity;)Lnet/minecraft/world/phys/shapes/CollisionContext;")) - public CollisionContext hex$getCollisionContext(Entity entity) { + private static CollisionContext hex$getCollisionContext(Entity entity) { if (entity == null) return CollisionContext.empty(); return CollisionContext.of(entity); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java deleted file mode 100644 index c691f1d7b2..0000000000 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricMixinReloadableServerResources.java +++ /dev/null @@ -1,21 +0,0 @@ -package at.petrak.hexcasting.fabric.mixin; - -import at.petrak.hexcasting.api.HexAPI; -import at.petrak.hexcasting.fabric.loot.FabricHexLootModJankery; -import at.petrak.hexcasting.mixin.accessor.AccessorLootTable; -import net.minecraft.server.ReloadableServerResources; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.storage.loot.LootDataType; -import net.minecraft.world.level.storage.loot.functions.LootItemFunctions; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Arrays; -import java.util.concurrent.CompletableFuture; - -@Mixin(ReloadableServerResources.class) -public class FabricMixinReloadableServerResources { - // Add the amethyst shard -} diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java index c4f0d7d3cf..2c856a896f 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/client/FabricModelManagerMixin.java @@ -1,6 +1,7 @@ package at.petrak.hexcasting.fabric.mixin.client; import at.petrak.hexcasting.client.RegisterClientStuff; +import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelBakery; import net.minecraft.client.resources.model.ModelManager; @@ -22,17 +23,14 @@ @Mixin(ModelManager.class) public class FabricModelManagerMixin { @Shadow - private Map bakedRegistry; + private Map bakedRegistry; @Inject(at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/client/resources/model/ModelBakery;" + - "getBakedTopLevelModels()Ljava/util/Map;", shift = At.Shift.AFTER), - method = "Lnet/minecraft/client/resources/model/ModelManager;apply(" + - "Lnet/minecraft/client/resources/model/ModelManager$ReloadState;" + - "Lnet/minecraft/util/profiling/ProfilerFiller;)V", - locals = LocalCapture.CAPTURE_FAILEXCEPTION) - private void onModelBake(ModelManager.ReloadState reloadState, ProfilerFiller profiler, CallbackInfo ci, ModelBakery modelLoader) { - Map newRegistry = new HashMap<>(); - this.bakedRegistry.forEach(((resourceLocation, bakedModel) -> newRegistry.put(new ModelResourceLocation(resourceLocation, ModelResourceLocation.INVENTORY_VARIANT), bakedModel))); + "getBakedTopLevelModels()Ljava/util/Map;", shift = At.Shift.AFTER), + method = "apply(Lnet/minecraft/client/resources/model/ModelManager$ReloadState;Lnet/minecraft/util/profiling/ProfilerFiller;)V" + ) + private void onModelBake(ModelManager.ReloadState reloadState, ProfilerFiller profiler, CallbackInfo ci, @Local ModelBakery modelLoader) { + Map newRegistry = new HashMap<>(this.bakedRegistry); RegisterClientStuff.onModelBake(modelLoader, newRegistry); } } diff --git a/Fabric/src/main/resources/fabricasting.mixins.json b/Fabric/src/main/resources/fabricasting.mixins.json index f23162f39f..6c35fa8fb9 100644 --- a/Fabric/src/main/resources/fabricasting.mixins.json +++ b/Fabric/src/main/resources/fabricasting.mixins.json @@ -11,7 +11,6 @@ "FabricEnchantmentTableBlockMixin", "FabricItemEntityMixin", "FabricLivingEntityMixin", - "FabricMixinReloadableServerResources", "FabricMobMixin", "FabricPlayerMixin", "FabricVillagerTurnIntoWitchMixin" diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 897b343019..e45b532b29 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -90,6 +90,9 @@ dependencies { modImplementation "com.samsthenerd.inline:inline-common:1.21.1-1.2.2-74" // needed for inline to run modRuntimeOnly("me.shedaniel.cloth:cloth-config-forge:$clothConfigVersion") + modRuntimeOnly "com.samsthenerd.inline:inline-neoforge:$minecraftVersion-$inlineVersion" + modRuntimeOnly "dev.architectury:architectury-neoforge:$architecturyVersion" + // === OPTIONAL DEPS === diff --git a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml index ff4213b599..75ffd0b01d 100644 --- a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -22,41 +22,41 @@ config = "hexcasting_forge.mixins.json" [[dependencies.hexcasting]] modId = "neoforge" mandatory = true -versionRange = "[81,)" +versionRange = "[21,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "minecraft" mandatory = true -versionRange = "[1.20.1,1.21)" +versionRange = "[1.21.1,1.21.10)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "paucal" mandatory = true -versionRange = "[0.6.0,0.7.0)" +versionRange = "[0.7.1,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "patchouli" mandatory = true -versionRange = "[1.20.1-80,)" +versionRange = "[1.21-80,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "caelus" mandatory = true -versionRange = "[3.1.0+1.20,)" +versionRange = "[7.0.1+1.21.1,)" ordering = "NONE" side = "BOTH" [[dependencies.hexcasting]] modId = "inline" mandatory = true -versionRange = "[1.20.1-1.0.1,)" +versionRange = "[1.21.1-1.2.2,)" ordering = "NONE" side = "BOTH" \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 55a759d4ca..4ec28791ba 100644 --- a/gradle.properties +++ b/gradle.properties @@ -25,4 +25,7 @@ emiVersion=1.1.18+1.21.1 pehkuiVersion=3.8.3 inlineVersion=1.2.2-74 -clothConfigVersion=15.0.140 \ No newline at end of file +clothConfigVersion=15.0.140 + +# Runtime only +architecturyVersion=13.0.2 \ No newline at end of file From d5509854186f8cd6e39f78135ef30f12828deb81 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Tue, 2 Dec 2025 11:31:20 -0600 Subject: [PATCH 67/81] * Some datagen --- .../8f7cd5c924d3264b7777ef1696459761f9a70902 | 276 ---------------- .../d2fe5b6fab5fdc7ee7ca336c062752306bdf6128 | 298 ------------------ .../e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 | 17 - ...c_connector.json => akashic_ligature.json} | 0 .../blockstates/amethyst_sconce.json | 25 +- .../directrix/boolean/dim_false_down.json | 2 +- .../directrix/boolean/dim_false_east.json | 2 +- .../directrix/boolean/dim_false_north.json | 2 +- .../directrix/boolean/dim_false_south.json | 2 +- .../directrix/boolean/dim_false_up.json | 2 +- .../directrix/boolean/dim_false_west.json | 2 +- .../directrix/boolean/dim_neither_down.json | 2 +- .../directrix/boolean/dim_neither_east.json | 2 +- .../directrix/boolean/dim_neither_north.json | 2 +- .../directrix/boolean/dim_neither_south.json | 2 +- .../directrix/boolean/dim_neither_up.json | 2 +- .../directrix/boolean/dim_neither_west.json | 2 +- .../directrix/boolean/dim_true_down.json | 2 +- .../directrix/boolean/dim_true_east.json | 2 +- .../directrix/boolean/dim_true_north.json | 2 +- .../directrix/boolean/dim_true_south.json | 2 +- .../circle/directrix/boolean/dim_true_up.json | 2 +- .../directrix/boolean/dim_true_west.json | 2 +- .../directrix/boolean/lit_false_down.json | 2 +- .../directrix/boolean/lit_false_east.json | 2 +- .../directrix/boolean/lit_false_north.json | 2 +- .../directrix/boolean/lit_false_south.json | 2 +- .../directrix/boolean/lit_false_up.json | 2 +- .../directrix/boolean/lit_false_west.json | 2 +- .../directrix/boolean/lit_neither_down.json | 2 +- .../directrix/boolean/lit_neither_east.json | 2 +- .../directrix/boolean/lit_neither_north.json | 2 +- .../directrix/boolean/lit_neither_south.json | 2 +- .../directrix/boolean/lit_neither_up.json | 2 +- .../directrix/boolean/lit_neither_west.json | 2 +- .../directrix/boolean/lit_true_down.json | 2 +- .../directrix/boolean/lit_true_east.json | 2 +- .../directrix/boolean/lit_true_north.json | 2 +- .../directrix/boolean/lit_true_south.json | 2 +- .../circle/directrix/boolean/lit_true_up.json | 2 +- .../directrix/boolean/lit_true_west.json | 2 +- .../circle/directrix/empty/dim_down.json | 2 +- .../circle/directrix/empty/dim_east.json | 2 +- .../circle/directrix/empty/dim_north.json | 2 +- .../circle/directrix/empty/dim_south.json | 2 +- .../block/circle/directrix/empty/dim_up.json | 2 +- .../circle/directrix/empty/dim_west.json | 2 +- .../circle/directrix/empty/lit_down.json | 2 +- .../circle/directrix/empty/lit_east.json | 2 +- .../circle/directrix/empty/lit_north.json | 2 +- .../circle/directrix/empty/lit_south.json | 2 +- .../block/circle/directrix/empty/lit_up.json | 2 +- .../circle/directrix/empty/lit_west.json | 2 +- .../directrix/redstone/dim_powered_down.json | 2 +- .../directrix/redstone/dim_powered_east.json | 2 +- .../directrix/redstone/dim_powered_north.json | 2 +- .../directrix/redstone/dim_powered_south.json | 2 +- .../directrix/redstone/dim_powered_up.json | 2 +- .../directrix/redstone/dim_powered_west.json | 2 +- .../redstone/dim_unpowered_down.json | 2 +- .../redstone/dim_unpowered_east.json | 2 +- .../redstone/dim_unpowered_north.json | 2 +- .../redstone/dim_unpowered_south.json | 2 +- .../directrix/redstone/dim_unpowered_up.json | 2 +- .../redstone/dim_unpowered_west.json | 2 +- .../directrix/redstone/lit_powered_down.json | 2 +- .../directrix/redstone/lit_powered_east.json | 2 +- .../directrix/redstone/lit_powered_north.json | 2 +- .../directrix/redstone/lit_powered_south.json | 2 +- .../directrix/redstone/lit_powered_up.json | 2 +- .../directrix/redstone/lit_powered_west.json | 2 +- .../redstone/lit_unpowered_down.json | 2 +- .../redstone/lit_unpowered_east.json | 2 +- .../redstone/lit_unpowered_north.json | 2 +- .../redstone/lit_unpowered_south.json | 2 +- .../directrix/redstone/lit_unpowered_up.json | 2 +- .../redstone/lit_unpowered_west.json | 2 +- .../block/circle/impetus/empty/dim_down.json | 2 +- .../block/circle/impetus/empty/dim_east.json | 2 +- .../block/circle/impetus/empty/dim_north.json | 2 +- .../block/circle/impetus/empty/dim_south.json | 2 +- .../block/circle/impetus/empty/dim_up.json | 2 +- .../block/circle/impetus/empty/dim_west.json | 2 +- .../block/circle/impetus/empty/lit_down.json | 2 +- .../block/circle/impetus/empty/lit_east.json | 2 +- .../block/circle/impetus/empty/lit_north.json | 2 +- .../block/circle/impetus/empty/lit_south.json | 2 +- .../block/circle/impetus/empty/lit_up.json | 2 +- .../block/circle/impetus/empty/lit_west.json | 2 +- .../block/circle/impetus/look/dim_down.json | 2 +- .../block/circle/impetus/look/dim_east.json | 2 +- .../block/circle/impetus/look/dim_north.json | 2 +- .../block/circle/impetus/look/dim_south.json | 2 +- .../block/circle/impetus/look/dim_up.json | 2 +- .../block/circle/impetus/look/dim_west.json | 2 +- .../block/circle/impetus/look/lit_down.json | 2 +- .../block/circle/impetus/look/lit_east.json | 2 +- .../block/circle/impetus/look/lit_north.json | 2 +- .../block/circle/impetus/look/lit_south.json | 2 +- .../block/circle/impetus/look/lit_up.json | 2 +- .../block/circle/impetus/look/lit_west.json | 2 +- .../circle/impetus/redstone/dim_down.json | 2 +- .../circle/impetus/redstone/dim_east.json | 2 +- .../circle/impetus/redstone/dim_north.json | 2 +- .../circle/impetus/redstone/dim_south.json | 2 +- .../block/circle/impetus/redstone/dim_up.json | 2 +- .../circle/impetus/redstone/dim_west.json | 2 +- .../circle/impetus/redstone/lit_down.json | 2 +- .../circle/impetus/redstone/lit_east.json | 2 +- .../circle/impetus/redstone/lit_north.json | 2 +- .../circle/impetus/redstone/lit_south.json | 2 +- .../block/circle/impetus/redstone/lit_up.json | 2 +- .../circle/impetus/redstone/lit_west.json | 2 +- .../circle/impetus/rightclick/dim_down.json | 2 +- .../circle/impetus/rightclick/dim_east.json | 2 +- .../circle/impetus/rightclick/dim_north.json | 2 +- .../circle/impetus/rightclick/dim_south.json | 2 +- .../circle/impetus/rightclick/dim_up.json | 2 +- .../circle/impetus/rightclick/dim_west.json | 2 +- .../circle/impetus/rightclick/lit_down.json | 2 +- .../circle/impetus/rightclick/lit_east.json | 2 +- .../circle/impetus/rightclick/lit_north.json | 2 +- .../circle/impetus/rightclick/lit_south.json | 2 +- .../circle/impetus/rightclick/lit_up.json | 2 +- .../circle/impetus/rightclick/lit_west.json | 2 +- .../hexcasting/models/block/slate_block.json | 2 +- ...c_connector.json => akashic_ligature.json} | 0 .../data/create/tags/block}/brittle.json | 0 .../data/forge/tags/item}/dusts/amethyst.json | 0 .../resources/data/forge/tags/item}/gems.json | 0 .../aaa_wasteful_cast.json | 12 +- .../aab_big_cast.json | 10 +- .../creative_unlocker.json | 9 +- .../enlightenment.json | 6 +- .../{advancements => advancement}/lore.json | 12 +- .../lore/cardamom1.json | 10 +- .../lore/cardamom2.json | 10 +- .../lore/cardamom3.json | 10 +- .../lore/cardamom4.json | 10 +- .../lore/cardamom5.json | 10 +- .../lore/experiment1.json | 10 +- .../lore/experiment2.json | 10 +- .../lore/inventory.json | 10 +- .../opened_eyes.json | 9 +- .../recipes/brainsweep/akashic_record.json | 12 +- .../recipes/brainsweep/budding_amethyst.json | 12 +- .../recipes/brainsweep/directrix_boolean.json | 35 ++ .../brainsweep/directrix_redstone.json | 35 ++ .../recipes/brainsweep/impetus_look.json | 35 ++ .../brainsweep/impetus_rightclick.json | 35 ++ .../brainsweep/impetus_storedplayer.json | 12 +- .../recipes/brainsweep/quench_allay.json | 35 ++ .../amethyst_dust_packing.json | 11 +- .../amethyst_dust_unpacking.json | 11 +- .../building_blocks/amethyst_tiles.json | 11 +- .../building_blocks/ancient_scroll_paper.json | 11 +- .../building_blocks/edified_fence.json | 9 +- .../building_blocks/edified_fence_gate.json | 9 +- .../building_blocks/edified_panel.json | 9 +- .../building_blocks/edified_planks.json | 9 +- .../recipes/building_blocks/edified_slab.json | 9 +- .../building_blocks/edified_stairs.json | 9 +- .../recipes/building_blocks/edified_tile.json | 9 +- .../recipes/building_blocks/edified_wood.json | 11 +- .../recipes/building_blocks/scroll_paper.json | 11 +- .../recipes/building_blocks/slate_block.json | 11 +- .../slate_block_from_slates.json | 11 +- .../stonecutting/amethyst_tiles.json | 11 +- .../stripped_edified_wood.json | 11 +- .../ageing_scroll_paper_lantern.json | 11 +- .../recipes/decorations/amethyst_sconce.json | 11 +- .../ancient_scroll_paper_lantern.json | 11 +- .../recipes/decorations/scroll.json | 9 +- .../recipes/decorations/scroll_medium.json | 9 +- .../decorations/scroll_paper_lantern.json | 11 +- .../recipes/decorations/scroll_small.json | 9 +- .../recipes/decorations/slate.json | 11 +- .../recipes/food/sub_sandwich.json | 11 +- .../decompose_quenched_shard/charged.json | 11 +- .../misc/decompose_quenched_shard/dust.json | 11 +- .../misc/decompose_quenched_shard/shard.json | 11 +- .../recipes/misc/default_colorizer.json | 11 +- .../recipes/misc/dye_colorizer_black.json | 11 +- .../recipes/misc/dye_colorizer_blue.json | 11 +- .../recipes/misc/dye_colorizer_brown.json | 11 +- .../recipes/misc/dye_colorizer_cyan.json | 11 +- .../recipes/misc/dye_colorizer_gray.json | 11 +- .../recipes/misc/dye_colorizer_green.json | 11 +- .../misc/dye_colorizer_light_blue.json | 11 +- .../misc/dye_colorizer_light_gray.json | 11 +- .../recipes/misc/dye_colorizer_lime.json | 11 +- .../recipes/misc/dye_colorizer_magenta.json | 11 +- .../recipes/misc/dye_colorizer_orange.json | 11 +- .../recipes/misc/dye_colorizer_pink.json | 11 +- .../recipes/misc/dye_colorizer_purple.json | 11 +- .../recipes/misc/dye_colorizer_red.json | 11 +- .../recipes/misc/dye_colorizer_white.json | 11 +- .../recipes/misc/dye_colorizer_yellow.json | 11 +- .../recipes/misc/pride_colorizer_agender.json | 11 +- .../recipes/misc/pride_colorizer_aroace.json | 11 +- .../misc/pride_colorizer_aromantic.json | 11 +- .../recipes/misc/pride_colorizer_asexual.json | 11 +- .../misc/pride_colorizer_bisexual.json | 11 +- .../recipes/misc/pride_colorizer_demiboy.json | 11 +- .../misc/pride_colorizer_demigirl.json | 11 +- .../recipes/misc/pride_colorizer_gay.json | 11 +- .../misc/pride_colorizer_genderfluid.json | 11 +- .../misc/pride_colorizer_genderqueer.json | 11 +- .../misc/pride_colorizer_intersex.json | 11 +- .../recipes/misc/pride_colorizer_lesbian.json | 11 +- .../misc/pride_colorizer_nonbinary.json | 11 +- .../recipes/misc/pride_colorizer_plural.json | 11 +- .../misc/pride_colorizer_transgender.json | 11 +- .../recipes/misc/uuid_colorizer.json | 11 +- .../recipes/redstone/akashic_bookshelf.json | 8 +- .../recipes/redstone/akashic_ligature.json | 35 ++ .../recipes/redstone/directrix/empty.json | 8 +- .../recipes/redstone/edified_button.json | 9 +- .../recipes/redstone/edified_door.json | 9 +- .../redstone/edified_pressure_plate.json | 9 +- .../recipes/redstone/edified_trapdoor.json | 9 +- .../recipes/redstone/impetus/empty.json | 8 +- .../advancement}/recipes/tools/abacus.json | 9 +- .../advancement}/recipes/tools/artifact.json | 9 +- .../advancement}/recipes/tools/cypher.json | 9 +- .../advancement}/recipes/tools/focus.json | 9 +- .../recipes/tools/focus_rotated.json | 9 +- .../recipes/tools/jeweler_hammer.json | 11 +- .../advancement}/recipes/tools/lens.json | 9 +- .../advancement}/recipes/tools/spellbook.json | 15 +- .../recipes/tools/staff/acacia.json | 11 +- .../recipes/tools/staff/bamboo.json | 11 +- .../recipes/tools/staff/birch.json | 11 +- .../recipes/tools/staff/cherry.json | 11 +- .../recipes/tools/staff/crimson.json | 11 +- .../recipes/tools/staff/dark_oak.json | 11 +- .../recipes/tools/staff/edified.json | 11 +- .../recipes/tools/staff/jungle.json | 11 +- .../recipes/tools/staff/mangrove.json | 11 +- .../recipes/tools/staff/mindsplice.json | 11 +- .../advancement}/recipes/tools/staff/oak.json | 11 +- .../recipes/tools/staff/quenched.json | 11 +- .../recipes/tools/staff/spruce.json | 11 +- .../recipes/tools/staff/warped.json | 11 +- .../recipes/tools/thought_knot.json | 9 +- .../advancement}/recipes/tools/trinket.json | 9 +- .../{advancements => advancement}/root.json | 8 +- .../y_u_no_cast_angy.json | 7 +- .../loot_modifiers/amethyst_cluster.json | 2 +- .../minecraft/chests/abandoned_mineshaft.json | 10 + .../cypher/minecraft/chests/ancient_city.json | 10 + .../minecraft/chests/desert_pyramid.json | 10 + .../minecraft/chests/jungle_temple.json | 10 + .../minecraft/chests/nether_bridge.json | 10 + .../minecraft/chests/simple_dungeon.json | 10 + .../minecraft/chests/stronghold_corridor.json | 10 + .../minecraft/chests/abandoned_mineshaft.json | 2 +- .../minecraft/chests/pillager_outpost.json | 2 +- .../lore/minecraft/chests/simple_dungeon.json | 2 +- .../minecraft/chests/stronghold_library.json | 2 +- .../chests/village/village_desert_house.json | 2 +- .../chests/village/village_plains_house.json | 2 +- .../chests/village/village_savanna_house.json | 2 +- .../chests/village/village_snowy_house.json | 2 +- .../chests/village/village_taiga_house.json | 2 +- .../minecraft/chests/woodland_mansion.json | 2 +- .../minecraft/chests/abandoned_mineshaft.json | 2 +- .../scroll/minecraft/chests/ancient_city.json | 2 +- .../minecraft/chests/bastion_other.json | 2 +- .../minecraft/chests/bastion_treasure.json | 2 +- .../minecraft/chests/desert_pyramid.json | 2 +- .../minecraft/chests/end_city_treasure.json | 2 +- .../minecraft/chests/jungle_temple.json | 2 +- .../minecraft/chests/nether_bridge.json | 2 +- .../minecraft/chests/pillager_outpost.json | 2 +- .../minecraft/chests/shipwreck_map.json | 2 +- .../minecraft/chests/simple_dungeon.json | 2 +- .../minecraft/chests/stronghold_library.json | 2 +- .../chests/village/village_cartographer.json | 2 +- .../minecraft/chests/woodland_mansion.json | 2 +- .../loot_table}/blocks/akashic_bookshelf.json | 0 .../loot_table/blocks/akashic_ligature.json | 4 +- .../loot_table}/blocks/akashic_record.json | 0 .../loot_table}/blocks/amethyst_bricks.json | 0 .../blocks/amethyst_bricks_small.json | 0 .../blocks/amethyst_dust_block.json | 0 .../blocks/amethyst_edified_leaves.json | 20 +- .../loot_table}/blocks/amethyst_pillar.json | 0 .../loot_table}/blocks/amethyst_sconce.json | 0 .../loot_table}/blocks/amethyst_tiles.json | 0 .../blocks/ancient_scroll_paper.json | 0 .../blocks/ancient_scroll_paper_lantern.json | 0 .../blocks/aventurine_edified_leaves.json | 20 +- .../blocks/citrine_edified_leaves.json | 20 +- .../loot_table}/blocks/directrix/boolean.json | 0 .../loot_table}/blocks/directrix/empty.json | 0 .../blocks/directrix/redstone.json | 0 .../loot_table}/blocks/edified_button.json | 0 .../loot_table}/blocks/edified_door.json | 0 .../loot_table}/blocks/edified_fence.json | 0 .../blocks/edified_fence_gate.json | 0 .../loot_table}/blocks/edified_log.json | 0 .../blocks/edified_log_amethyst.json | 0 .../blocks/edified_log_aventurine.json | 0 .../blocks/edified_log_citrine.json | 0 .../blocks/edified_log_purple.json | 0 .../loot_table}/blocks/edified_panel.json | 0 .../loot_table}/blocks/edified_planks.json | 0 .../blocks/edified_pressure_plate.json | 0 .../loot_table}/blocks/edified_slab.json | 0 .../loot_table}/blocks/edified_stairs.json | 0 .../loot_table}/blocks/edified_tile.json | 0 .../loot_table}/blocks/edified_trapdoor.json | 0 .../loot_table}/blocks/edified_wood.json | 0 .../loot_table}/blocks/impetus/empty.json | 0 .../loot_table}/blocks/impetus/look.json | 0 .../loot_table}/blocks/impetus/redstone.json | 0 .../blocks/impetus/rightclick.json | 0 .../loot_table}/blocks/quenched_allay.json | 15 +- .../blocks/quenched_allay_bricks.json | 0 .../blocks/quenched_allay_bricks_small.json | 0 .../blocks/quenched_allay_tiles.json | 0 .../loot_table}/blocks/scroll_paper.json | 0 .../blocks/scroll_paper_lantern.json | 0 .../hexcasting/loot_table}/blocks/slate.json | 10 +- .../blocks/slate_amethyst_bricks.json | 0 .../blocks/slate_amethyst_bricks_small.json | 0 .../blocks/slate_amethyst_pillar.json | 0 .../blocks/slate_amethyst_tiles.json | 0 .../loot_table}/blocks/slate_block.json | 0 .../loot_table}/blocks/slate_bricks.json | 0 .../blocks/slate_bricks_small.json | 0 .../loot_table}/blocks/slate_pillar.json | 0 .../loot_table}/blocks/slate_tiles.json | 0 .../blocks/stripped_edified_log.json | 0 .../blocks/stripped_edified_wood.json | 0 .../loot_table}/inject/amethyst_cluster.json | 68 ++-- .../data/hexcasting/recipe}/abacus.json | 6 +- .../recipe}/ageing_scroll_paper_lantern.json | 4 +- .../hexcasting/recipe}/akashic_bookshelf.json | 6 +- .../hexcasting/recipe/akashic_ligature.json | 5 +- .../recipe}/amethyst_dust_packing.json | 6 +- .../recipe}/amethyst_dust_unpacking.json | 2 +- .../hexcasting/recipe}/amethyst_sconce.json | 7 +- .../hexcasting/recipe}/amethyst_tiles.json | 5 +- .../recipe}/ancient_scroll_paper.json | 4 +- .../recipe}/ancient_scroll_paper_lantern.json | 6 +- .../data/hexcasting/recipe}/artifact.json | 10 +- .../recipe/brainsweep/akashic_record.json | 16 + .../recipe}/brainsweep/budding_amethyst.json | 6 +- .../recipe}/brainsweep/directrix_boolean.json | 10 +- .../brainsweep/directrix_redstone.json | 10 +- .../recipe}/brainsweep/impetus_look.json | 10 +- .../brainsweep/impetus_rightclick.json | 10 +- .../brainsweep/impetus_storedplayer.json | 10 +- .../recipe}/brainsweep/quench_allay.json | 6 +- .../data/hexcasting/recipe/cypher.json | 8 +- .../decompose_quenched_shard/charged.json | 2 +- .../decompose_quenched_shard/dust.json | 2 +- .../decompose_quenched_shard/shard.json | 2 +- .../hexcasting/recipe}/default_colorizer.json | 6 +- .../hexcasting/recipe}/directrix/empty.json | 6 +- .../recipe}/dye_colorizer_black.json | 6 +- .../recipe}/dye_colorizer_blue.json | 6 +- .../recipe}/dye_colorizer_brown.json | 6 +- .../recipe}/dye_colorizer_cyan.json | 6 +- .../recipe}/dye_colorizer_gray.json | 6 +- .../recipe}/dye_colorizer_green.json | 6 +- .../recipe}/dye_colorizer_light_blue.json | 6 +- .../recipe}/dye_colorizer_light_gray.json | 6 +- .../recipe}/dye_colorizer_lime.json | 6 +- .../recipe}/dye_colorizer_magenta.json | 6 +- .../recipe}/dye_colorizer_orange.json | 6 +- .../recipe}/dye_colorizer_pink.json | 6 +- .../recipe}/dye_colorizer_purple.json | 6 +- .../hexcasting/recipe}/dye_colorizer_red.json | 6 +- .../recipe}/dye_colorizer_white.json | 6 +- .../recipe}/dye_colorizer_yellow.json | 6 +- .../hexcasting/recipe}/dynamicseal_focus.json | 0 .../recipe}/dynamicseal_spellbook.json | 0 .../hexcasting/recipe}/edified_button.json | 3 +- .../data/hexcasting/recipe}/edified_door.json | 5 +- .../hexcasting/recipe}/edified_fence.json | 5 +- .../recipe}/edified_fence_gate.json | 6 +- .../hexcasting/recipe}/edified_panel.json | 5 +- .../hexcasting/recipe}/edified_planks.json | 2 +- .../recipe}/edified_pressure_plate.json | 6 +- .../data/hexcasting/recipe}/edified_slab.json | 5 +- .../hexcasting/recipe}/edified_stairs.json | 5 +- .../data/hexcasting/recipe}/edified_tile.json | 5 +- .../hexcasting/recipe}/edified_trapdoor.json | 5 +- .../data/hexcasting/recipe}/edified_wood.json | 5 +- .../data/hexcasting/recipe}/focus.json | 10 +- .../hexcasting/recipe}/focus_rotated.json | 10 +- .../hexcasting/recipe}/impetus/empty.json | 6 +- .../hexcasting/recipe}/jeweler_hammer.json | 10 +- .../data/hexcasting/recipe}/lens.json | 6 +- .../recipe}/pride_colorizer_agender.json | 6 +- .../recipe}/pride_colorizer_aroace.json | 6 +- .../recipe}/pride_colorizer_aromantic.json | 6 +- .../recipe}/pride_colorizer_asexual.json | 6 +- .../recipe}/pride_colorizer_bisexual.json | 6 +- .../recipe}/pride_colorizer_demiboy.json | 6 +- .../recipe}/pride_colorizer_demigirl.json | 6 +- .../recipe}/pride_colorizer_gay.json | 6 +- .../recipe}/pride_colorizer_genderfluid.json | 6 +- .../recipe}/pride_colorizer_genderqueer.json | 6 +- .../recipe}/pride_colorizer_intersex.json | 6 +- .../recipe}/pride_colorizer_lesbian.json | 6 +- .../recipe}/pride_colorizer_nonbinary.json | 6 +- .../recipe}/pride_colorizer_plural.json | 6 +- .../recipe}/pride_colorizer_transgender.json | 6 +- .../data/hexcasting/recipe}/scroll.json | 6 +- .../hexcasting/recipe}/scroll_medium.json | 6 +- .../data/hexcasting/recipe}/scroll_paper.json | 5 +- .../recipe}/scroll_paper_lantern.json | 6 +- .../data/hexcasting/recipe}/scroll_small.json | 6 +- .../data/hexcasting/recipe}/slate.json | 5 +- .../data/hexcasting/recipe}/slate_block.json | 5 +- .../recipe}/slate_block_from_slates.json | 6 +- .../data/hexcasting/recipe}/spellbook.json | 8 +- .../data/hexcasting/recipe}/staff/acacia.json | 6 +- .../data/hexcasting/recipe}/staff/bamboo.json | 6 +- .../data/hexcasting/recipe}/staff/birch.json | 6 +- .../data/hexcasting/recipe}/staff/cherry.json | 6 +- .../hexcasting/recipe}/staff/crimson.json | 6 +- .../hexcasting/recipe}/staff/dark_oak.json | 6 +- .../hexcasting/recipe}/staff/edified.json | 6 +- .../data/hexcasting/recipe}/staff/jungle.json | 6 +- .../hexcasting/recipe}/staff/mangrove.json | 6 +- .../hexcasting/recipe}/staff/mindsplice.json | 6 +- .../data/hexcasting/recipe}/staff/oak.json | 6 +- .../hexcasting/recipe}/staff/quenched.json | 6 +- .../data/hexcasting/recipe}/staff/spruce.json | 6 +- .../data/hexcasting/recipe}/staff/warped.json | 6 +- .../recipe}/stonecutting/amethyst_tiles.json | 6 +- .../recipe}/stripped_edified_wood.json | 5 +- .../data/hexcasting/recipe}/sub_sandwich.json | 6 +- .../data/hexcasting/recipe}/thought_knot.json | 3 +- .../data/hexcasting/recipe}/trinket.json | 8 +- .../hexcasting/recipe}/uuid_colorizer.json | 6 +- .../block}/brainswept_circle_components.json | 0 .../tags/block}/cheap_to_break_block.json | 0 .../hexcasting/tags/block}/directrices.json | 0 .../hexcasting/tags/block}/edified_logs.json | 0 .../tags/block}/edified_planks.json | 0 .../tags/block/hex_unbreakable.json | 5 + .../data/hexcasting/tags/block}/impeti.json | 0 .../hexcasting/tags/block}/water_plants.json | 0 .../action/can_start_enlighten.json | 0 .../hexcasting/action/per_world_pattern.json | 0 .../action/requires_enlightenment.json | 0 .../item}/brainswept_circle_components.json | 0 .../hexcasting/tags/item}/directrices.json | 0 .../hexcasting/tags/item}/edified_logs.json | 0 .../hexcasting/tags/item}/edified_planks.json | 0 .../tags/item}/grants_root_advancement.json | 0 .../data/hexcasting/tags/item}/impeti.json | 0 .../hexcasting/tags/item}/phial_base.json | 0 .../hexcasting/tags/item}/seal_materials.json | 0 .../data/hexcasting/tags/item}/staves.json | 0 .../data/minecraft/tags/block}/buttons.json | 0 .../tags/block}/crystal_sound_blocks.json | 0 .../data/minecraft/tags/block}/doors.json | 0 .../minecraft/tags/block}/fence_gates.json | 0 .../data/minecraft/tags/block}/fences.json | 0 .../data/minecraft/tags/block}/leaves.json | 0 .../data/minecraft/tags/block}/logs.json | 0 .../minecraft/tags/block}/logs_that_burn.json | 0 .../minecraft/tags/block}/mineable/axe.json | 2 +- .../minecraft/tags/block}/mineable/hoe.json | 0 .../tags/block}/mineable/pickaxe.json | 0 .../tags/block}/mineable/shovel.json | 0 .../data/minecraft/tags/block}/planks.json | 0 .../tags/block}/pressure_plates.json | 0 .../data/minecraft/tags/block}/slabs.json | 0 .../data/minecraft/tags/block}/stairs.json | 0 .../data/minecraft/tags/block}/trapdoors.json | 0 .../tags/block}/unstable_bottom_center.json | 0 .../minecraft/tags/block}/wooden_buttons.json | 0 .../minecraft/tags/block}/wooden_doors.json | 0 .../minecraft/tags/block}/wooden_fences.json | 0 .../tags/block}/wooden_pressure_plates.json | 0 .../minecraft/tags/block}/wooden_slabs.json | 0 .../minecraft/tags/block}/wooden_stairs.json | 0 .../tags/block}/wooden_trapdoors.json | 0 .../data/minecraft/tags/item}/buttons.json | 0 .../data/minecraft/tags/item}/doors.json | 0 .../data/minecraft/tags/item}/leaves.json | 0 .../data/minecraft/tags/item}/logs.json | 0 .../minecraft/tags/item}/logs_that_burn.json | 0 .../data/minecraft/tags/item}/planks.json | 0 .../data/minecraft/tags/item}/slabs.json | 0 .../data/minecraft/tags/item}/trapdoors.json | 0 .../minecraft/tags/item}/wooden_buttons.json | 0 .../minecraft/tags/item}/wooden_doors.json | 0 .../tags/item}/wooden_pressure_plates.json | 0 .../minecraft/tags/item}/wooden_slabs.json | 0 .../tags/item}/wooden_trapdoors.json | 0 .../loot_modifiers/global_loot_modifiers.json | 46 +-- .../api/advancements/OvercastTrigger.java | 5 - .../client/RegisterClientStuff.java | 4 +- .../hexcasting/common/lib/HexBlocks.java | 2 +- .../hexcasting/datagen/HexAdvancements.java | 2 +- .../xplat/IClientXplatAbstractions.java | 2 + .../block/{slate.png => slate_block.png} | Bin Fabric/build.gradle | 11 +- .../19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 | 58 ---- .../2ba8da2cf2d44ff18dc72cc891b094eca6836a5c | 25 -- .../3cb4ab563deee432e7d307024048f57946bafb1c | 4 - .../812fdb58b7018b2d5c5af7da57a2b1857fa66794 | 34 -- .../c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b | 220 ------------- .../data/c/tags/items/amethyst_dusts.json | 6 - .../resources/data/c/tags/items/gems.json | 6 - .../recipes/crushing/amethyst_block.json | 28 -- .../recipes/crushing/amethyst_cluster.json | 31 -- .../data/create/tags/blocks/brittle.json | 9 - .../brainsweep/brainsweep/akashic_record.json | 35 -- .../brainsweep/budding_amethyst.json | 35 -- .../brainsweep/directrix_boolean.json | 35 -- .../brainsweep/directrix_redstone.json | 35 -- .../brainsweep/brainsweep/impetus_look.json | 35 -- .../brainsweep/impetus_rightclick.json | 35 -- .../brainsweep/impetus_storedplayer.json | 35 -- .../brainsweep/brainsweep/quench_allay.json | 35 -- .../amethyst_dust_packing.json | 35 -- .../amethyst_dust_unpacking.json | 35 -- .../building_blocks/ancient_scroll_paper.json | 35 -- .../building_blocks/edified_fence_gate.json | 33 -- .../building_blocks/edified_panel.json | 33 -- .../slate_block_from_slates.json | 35 -- .../stonecutting/amethyst_tiles.json | 35 -- .../stripped_edified_wood.json | 35 -- .../recipes/decorations/scroll.json | 33 -- .../recipes/decorations/scroll_medium.json | 33 -- .../recipes/misc/dye_colorizer_black.json | 35 -- .../recipes/misc/dye_colorizer_brown.json | 35 -- .../recipes/misc/dye_colorizer_green.json | 35 -- .../misc/dye_colorizer_light_blue.json | 35 -- .../misc/dye_colorizer_light_gray.json | 35 -- .../recipes/misc/dye_colorizer_magenta.json | 35 -- .../recipes/misc/dye_colorizer_orange.json | 35 -- .../recipes/misc/dye_colorizer_purple.json | 35 -- .../recipes/misc/dye_colorizer_white.json | 35 -- .../recipes/misc/dye_colorizer_yellow.json | 35 -- .../recipes/misc/pride_colorizer_agender.json | 35 -- .../recipes/misc/pride_colorizer_aroace.json | 35 -- .../misc/pride_colorizer_aromantic.json | 35 -- .../recipes/misc/pride_colorizer_asexual.json | 35 -- .../misc/pride_colorizer_bisexual.json | 35 -- .../recipes/misc/pride_colorizer_demiboy.json | 35 -- .../misc/pride_colorizer_demigirl.json | 35 -- .../recipes/misc/pride_colorizer_gay.json | 35 -- .../misc/pride_colorizer_genderfluid.json | 35 -- .../misc/pride_colorizer_genderqueer.json | 35 -- .../misc/pride_colorizer_intersex.json | 35 -- .../recipes/misc/pride_colorizer_lesbian.json | 35 -- .../misc/pride_colorizer_nonbinary.json | 35 -- .../misc/pride_colorizer_pansexual.json | 35 -- .../recipes/misc/pride_colorizer_plural.json | 35 -- .../misc/pride_colorizer_transgender.json | 35 -- .../redstone/edified_pressure_plate.json | 33 -- .../advancements/recipes/tools/artifact.json | 33 -- .../advancements/recipes/tools/focus.json | 33 -- .../recipes/tools/staff/mindsplice.json | 35 -- .../loot_tables/blocks/akashic_connector.json | 15 - .../blocks/amethyst_edified_leaves.json | 54 ---- .../blocks/aventurine_edified_leaves.json | 54 ---- .../blocks/citrine_edified_leaves.json | 54 ---- .../loot_tables/blocks/quenched_allay.json | 64 ---- .../loot_tables/inject/amethyst_cluster.json | 191 ----------- .../data/hexcasting/recipes/abacus.json | 24 -- .../recipes/ageing_scroll_paper_lantern.json | 45 --- .../hexcasting/recipes/akashic_bookshelf.json | 24 -- .../recipes/amethyst_dust_unpacking.json | 13 - .../hexcasting/recipes/amethyst_sconce.json | 26 -- .../recipes/ancient_scroll_paper.json | 45 --- .../data/hexcasting/recipes/artifact.json | 29 -- .../recipes/brainsweep/akashic_record.json | 16 - .../recipes/brainsweep/budding_amethyst.json | 15 - .../recipes/brainsweep/directrix_boolean.json | 21 -- .../brainsweep/directrix_redstone.json | 21 -- .../brainsweep/impetus_storedplayer.json | 21 -- .../recipes/brainsweep/quench_allay.json | 15 - .../create/crushing/amethyst_shard.json | 27 -- .../farmersdelight/cutting/akashic_door.json | 25 -- .../cutting/akashic_trapdoor.json | 25 -- .../farmersdelight/cutting/akashic_wood.json | 29 -- .../farmersdelight/cutting/edified_log.json | 29 -- .../cutting/edified_log_amethyst.json | 29 -- .../cutting/edified_log_aventurine.json | 29 -- .../cutting/edified_log_citrine.json | 29 -- .../cutting/edified_log_purple.json | 29 -- .../data/hexcasting/recipes/cypher.json | 26 -- .../decompose_quenched_shard/dust.json | 16 - .../hexcasting/recipes/directrix/empty.json | 27 -- .../recipes/dye_colorizer_blue.json | 21 -- .../recipes/dye_colorizer_cyan.json | 21 -- .../recipes/dye_colorizer_light_blue.json | 21 -- .../recipes/dye_colorizer_light_gray.json | 21 -- .../data/hexcasting/recipes/edified_door.json | 19 -- .../hexcasting/recipes/edified_fence.json | 21 -- .../recipes/edified_fence_gate.json | 20 -- .../recipes/edified_pressure_plate.json | 16 - .../data/hexcasting/recipes/edified_slab.json | 17 - .../data/hexcasting/recipes/edified_tile.json | 19 -- .../data/hexcasting/recipes/edified_wood.json | 18 -- .../data/hexcasting/recipes/focus.json | 32 -- .../hexcasting/recipes/focus_rotated.json | 32 -- .../hexcasting/recipes/impetus/empty.json | 27 -- .../hexcasting/recipes/jeweler_hammer.json | 42 --- .../recipes/pride_colorizer_pansexual.json | 28 -- .../data/hexcasting/recipes/scroll.json | 21 -- .../hexcasting/recipes/scroll_medium.json | 21 -- .../data/hexcasting/recipes/scroll_paper.json | 25 -- .../data/hexcasting/recipes/scroll_small.json | 20 -- .../recipes/slate_block_from_slates.json | 17 - .../data/hexcasting/recipes/spellbook.json | 32 -- .../data/hexcasting/recipes/staff/acacia.json | 24 -- .../data/hexcasting/recipes/staff/cherry.json | 24 -- .../recipes/stripped_edified_wood.json | 18 -- .../data/hexcasting/recipes/thought_knot.json | 15 - .../data/hexcasting/recipes/trinket.json | 26 -- .../hexcasting/recipes/uuid_colorizer.json | 24 -- .../tags/action/can_start_enlighten.json | 19 -- .../tags/action/per_world_pattern.json | 19 -- .../tags/action/requires_enlightenment.json | 19 -- .../blocks/brainswept_circle_components.json | 7 - .../tags/blocks/cheap_to_break_block.json | 7 - .../hexcasting/tags/blocks/directrices.json | 7 - .../hexcasting/tags/blocks/edified_logs.json | 13 - .../tags/blocks/edified_planks.json | 8 - .../data/hexcasting/tags/blocks/impeti.json | 8 - .../hexcasting/tags/blocks/water_plants.json | 9 - .../items/brainswept_circle_components.json | 7 - .../hexcasting/tags/items/directrices.json | 7 - .../hexcasting/tags/items/edified_logs.json | 13 - .../hexcasting/tags/items/edified_planks.json | 8 - .../tags/items/grants_root_advancement.json | 9 - .../data/hexcasting/tags/items/impeti.json | 8 - .../hexcasting/tags/items/phial_base.json | 6 - .../hexcasting/tags/items/seal_materials.json | 6 - .../data/hexcasting/tags/items/staves.json | 19 -- .../data/minecraft/tags/blocks/buttons.json | 6 - .../tags/blocks/crystal_sound_blocks.json | 9 - .../data/minecraft/tags/blocks/doors.json | 6 - .../minecraft/tags/blocks/fence_gates.json | 6 - .../data/minecraft/tags/blocks/fences.json | 6 - .../data/minecraft/tags/blocks/leaves.json | 8 - .../data/minecraft/tags/blocks/logs.json | 13 - .../minecraft/tags/blocks/logs_that_burn.json | 13 - .../minecraft/tags/blocks/mineable/axe.json | 26 -- .../minecraft/tags/blocks/mineable/hoe.json | 8 - .../tags/blocks/mineable/pickaxe.json | 31 -- .../tags/blocks/mineable/shovel.json | 6 - .../data/minecraft/tags/blocks/planks.json | 8 - .../tags/blocks/pressure_plates.json | 6 - .../data/minecraft/tags/blocks/slabs.json | 6 - .../data/minecraft/tags/blocks/stairs.json | 6 - .../data/minecraft/tags/blocks/trapdoors.json | 6 - .../tags/blocks/unstable_bottom_center.json | 6 - .../minecraft/tags/blocks/wooden_buttons.json | 6 - .../minecraft/tags/blocks/wooden_doors.json | 6 - .../minecraft/tags/blocks/wooden_fences.json | 7 - .../tags/blocks/wooden_pressure_plates.json | 6 - .../minecraft/tags/blocks/wooden_slabs.json | 6 - .../minecraft/tags/blocks/wooden_stairs.json | 6 - .../tags/blocks/wooden_trapdoors.json | 6 - .../data/minecraft/tags/items/buttons.json | 6 - .../data/minecraft/tags/items/doors.json | 6 - .../data/minecraft/tags/items/leaves.json | 8 - .../data/minecraft/tags/items/logs.json | 13 - .../minecraft/tags/items/logs_that_burn.json | 13 - .../data/minecraft/tags/items/planks.json | 8 - .../data/minecraft/tags/items/slabs.json | 6 - .../data/minecraft/tags/items/trapdoors.json | 6 - .../minecraft/tags/items/wooden_buttons.json | 6 - .../minecraft/tags/items/wooden_doors.json | 6 - .../tags/items/wooden_pressure_plates.json | 6 - .../minecraft/tags/items/wooden_slabs.json | 6 - .../tags/items/wooden_trapdoors.json | 6 - .../fabric/xplat/FabricClientXplatImpl.java | 6 + Neoforge/build.gradle | 19 +- Neoforge/gradle.properties | 2 + .../recipes/crushing/amethyst_block.json | 33 -- .../recipes/crushing/amethyst_cluster.json | 36 --- .../brainsweep/brainsweep/akashic_record.json | 35 -- .../brainsweep/budding_amethyst.json | 35 -- .../brainsweep/directrix_boolean.json | 35 -- .../brainsweep/directrix_redstone.json | 35 -- .../brainsweep/brainsweep/impetus_look.json | 35 -- .../brainsweep/impetus_rightclick.json | 35 -- .../brainsweep/impetus_storedplayer.json | 35 -- .../brainsweep/brainsweep/quench_allay.json | 35 -- .../building_blocks/amethyst_tiles.json | 35 -- .../building_blocks/edified_fence.json | 33 -- .../building_blocks/edified_planks.json | 33 -- .../recipes/building_blocks/edified_slab.json | 33 -- .../building_blocks/edified_stairs.json | 33 -- .../recipes/building_blocks/edified_tile.json | 33 -- .../recipes/building_blocks/edified_wood.json | 35 -- .../recipes/building_blocks/scroll_paper.json | 35 -- .../recipes/building_blocks/slate_block.json | 35 -- .../ageing_scroll_paper_lantern.json | 35 -- .../recipes/decorations/amethyst_sconce.json | 35 -- .../ancient_scroll_paper_lantern.json | 35 -- .../decorations/scroll_paper_lantern.json | 35 -- .../recipes/decorations/scroll_small.json | 33 -- .../recipes/decorations/slate.json | 35 -- .../recipes/food/sub_sandwich.json | 35 -- .../decompose_quenched_shard/charged.json | 35 -- .../misc/decompose_quenched_shard/dust.json | 35 -- .../misc/decompose_quenched_shard/shard.json | 35 -- .../recipes/misc/default_colorizer.json | 35 -- .../recipes/misc/dye_colorizer_blue.json | 35 -- .../recipes/misc/dye_colorizer_cyan.json | 35 -- .../recipes/misc/dye_colorizer_gray.json | 35 -- .../recipes/misc/dye_colorizer_lime.json | 35 -- .../recipes/misc/dye_colorizer_pink.json | 35 -- .../recipes/misc/dye_colorizer_red.json | 35 -- .../misc/pride_colorizer_pansexual.json | 35 -- .../recipes/misc/uuid_colorizer.json | 35 -- .../recipes/redstone/akashic_bookshelf.json | 35 -- .../recipes/redstone/akashic_connector.json | 35 -- .../recipes/redstone/edified_button.json | 33 -- .../recipes/redstone/edified_door.json | 33 -- .../recipes/redstone/edified_trapdoor.json | 33 -- .../advancements/recipes/tools/abacus.json | 33 -- .../advancements/recipes/tools/cypher.json | 33 -- .../recipes/tools/focus_rotated.json | 33 -- .../recipes/tools/jeweler_hammer.json | 35 -- .../advancements/recipes/tools/lens.json | 33 -- .../advancements/recipes/tools/spellbook.json | 48 --- .../recipes/tools/staff/acacia.json | 35 -- .../recipes/tools/staff/bamboo.json | 35 -- .../recipes/tools/staff/birch.json | 35 -- .../recipes/tools/staff/cherry.json | 35 -- .../recipes/tools/staff/crimson.json | 35 -- .../recipes/tools/staff/dark_oak.json | 35 -- .../recipes/tools/staff/edified.json | 35 -- .../recipes/tools/staff/jungle.json | 35 -- .../recipes/tools/staff/mangrove.json | 35 -- .../advancements/recipes/tools/staff/oak.json | 35 -- .../recipes/tools/staff/quenched.json | 35 -- .../recipes/tools/staff/spruce.json | 35 -- .../recipes/tools/staff/warped.json | 35 -- .../recipes/tools/thought_knot.json | 33 -- .../advancements/recipes/tools/trinket.json | 33 -- .../loot_tables/blocks/akashic_bookshelf.json | 15 - .../loot_tables/blocks/akashic_connector.json | 15 - .../loot_tables/blocks/akashic_record.json | 15 - .../blocks/amethyst_bricks_small.json | 15 - .../blocks/amethyst_dust_block.json | 15 - .../loot_tables/blocks/amethyst_pillar.json | 15 - .../loot_tables/blocks/amethyst_sconce.json | 15 - .../loot_tables/blocks/amethyst_tiles.json | 15 - .../blocks/ancient_scroll_paper.json | 15 - .../blocks/ancient_scroll_paper_lantern.json | 15 - .../loot_tables/blocks/directrix/boolean.json | 15 - .../loot_tables/blocks/directrix/empty.json | 15 - .../blocks/directrix/redstone.json | 15 - .../loot_tables/blocks/edified_button.json | 15 - .../loot_tables/blocks/edified_door.json | 24 -- .../loot_tables/blocks/edified_fence.json | 15 - .../blocks/edified_fence_gate.json | 15 - .../loot_tables/blocks/edified_log.json | 15 - .../blocks/edified_log_amethyst.json | 15 - .../blocks/edified_log_aventurine.json | 15 - .../blocks/edified_log_citrine.json | 15 - .../blocks/edified_log_purple.json | 15 - .../loot_tables/blocks/edified_panel.json | 15 - .../loot_tables/blocks/edified_planks.json | 15 - .../blocks/edified_pressure_plate.json | 15 - .../loot_tables/blocks/edified_slab.json | 34 -- .../loot_tables/blocks/edified_stairs.json | 15 - .../loot_tables/blocks/edified_tile.json | 15 - .../loot_tables/blocks/edified_trapdoor.json | 15 - .../loot_tables/blocks/edified_wood.json | 15 - .../loot_tables/blocks/impetus/empty.json | 15 - .../loot_tables/blocks/impetus/look.json | 15 - .../loot_tables/blocks/impetus/redstone.json | 15 - .../blocks/impetus/rightclick.json | 15 - .../blocks/quenched_allay_bricks.json | 15 - .../blocks/quenched_allay_bricks_small.json | 15 - .../blocks/quenched_allay_tiles.json | 15 - .../loot_tables/blocks/scroll_paper.json | 15 - .../blocks/scroll_paper_lantern.json | 15 - .../hexcasting/loot_tables/blocks/slate.json | 28 -- .../blocks/slate_amethyst_bricks.json | 15 - .../blocks/slate_amethyst_bricks_small.json | 15 - .../blocks/slate_amethyst_pillar.json | 15 - .../blocks/slate_amethyst_tiles.json | 15 - .../loot_tables/blocks/slate_block.json | 15 - .../loot_tables/blocks/slate_bricks.json | 15 - .../blocks/slate_bricks_small.json | 15 - .../loot_tables/blocks/slate_pillar.json | 15 - .../loot_tables/blocks/slate_tiles.json | 15 - .../blocks/stripped_edified_log.json | 15 - .../blocks/stripped_edified_wood.json | 15 - .../hexcasting/recipes/akashic_connector.json | 31 -- .../recipes/amethyst_dust_packing.json | 17 - .../hexcasting/recipes/amethyst_tiles.json | 25 -- .../recipes/ancient_scroll_paper_lantern.json | 20 -- .../recipes/brainsweep/akashic_record.json | 16 - .../recipes/brainsweep/impetus_look.json | 20 -- .../brainsweep/impetus_rightclick.json | 20 -- .../create/crushing/amethyst_shard.json | 32 -- .../farmersdelight/cutting/akashic_door.json | 30 -- .../cutting/akashic_trapdoor.json | 30 -- .../farmersdelight/cutting/akashic_wood.json | 34 -- .../farmersdelight/cutting/edified_log.json | 34 -- .../cutting/edified_log_amethyst.json | 34 -- .../cutting/edified_log_aventurine.json | 34 -- .../cutting/edified_log_citrine.json | 34 -- .../cutting/edified_log_purple.json | 34 -- .../data/hexcasting/recipes/cypher.json | 21 -- .../decompose_quenched_shard/charged.json | 16 - .../decompose_quenched_shard/shard.json | 16 - .../hexcasting/recipes/default_colorizer.json | 24 -- .../recipes/dye_colorizer_black.json | 21 -- .../recipes/dye_colorizer_brown.json | 21 -- .../recipes/dye_colorizer_gray.json | 21 -- .../recipes/dye_colorizer_green.json | 21 -- .../recipes/dye_colorizer_lime.json | 21 -- .../recipes/dye_colorizer_magenta.json | 21 -- .../recipes/dye_colorizer_orange.json | 21 -- .../recipes/dye_colorizer_pink.json | 21 -- .../recipes/dye_colorizer_purple.json | 21 -- .../hexcasting/recipes/dye_colorizer_red.json | 21 -- .../recipes/dye_colorizer_white.json | 21 -- .../recipes/dye_colorizer_yellow.json | 21 -- .../hexcasting/recipes/dynamicseal_focus.json | 4 - .../recipes/dynamicseal_spellbook.json | 4 - .../hexcasting/recipes/edified_button.json | 12 - .../hexcasting/recipes/edified_panel.json | 22 -- .../hexcasting/recipes/edified_planks.json | 13 - .../hexcasting/recipes/edified_stairs.json | 19 -- .../hexcasting/recipes/edified_trapdoor.json | 18 -- .../recipes/pride_colorizer_agender.json | 21 -- .../recipes/pride_colorizer_aroace.json | 21 -- .../recipes/pride_colorizer_aromantic.json | 21 -- .../recipes/pride_colorizer_asexual.json | 21 -- .../recipes/pride_colorizer_bisexual.json | 21 -- .../recipes/pride_colorizer_demiboy.json | 21 -- .../recipes/pride_colorizer_demigirl.json | 21 -- .../recipes/pride_colorizer_gay.json | 21 -- .../recipes/pride_colorizer_genderfluid.json | 21 -- .../recipes/pride_colorizer_genderqueer.json | 21 -- .../recipes/pride_colorizer_intersex.json | 21 -- .../recipes/pride_colorizer_lesbian.json | 21 -- .../recipes/pride_colorizer_nonbinary.json | 21 -- .../recipes/pride_colorizer_pansexual.json | 28 -- .../recipes/pride_colorizer_plural.json | 21 -- .../recipes/pride_colorizer_transgender.json | 21 -- .../recipes/scroll_paper_lantern.json | 20 -- .../data/hexcasting/recipes/slate.json | 21 -- .../data/hexcasting/recipes/slate_block.json | 25 -- .../data/hexcasting/recipes/staff/bamboo.json | 24 -- .../data/hexcasting/recipes/staff/birch.json | 24 -- .../hexcasting/recipes/staff/crimson.json | 24 -- .../hexcasting/recipes/staff/dark_oak.json | 24 -- .../hexcasting/recipes/staff/edified.json | 24 -- .../data/hexcasting/recipes/staff/jungle.json | 24 -- .../hexcasting/recipes/staff/mangrove.json | 24 -- .../hexcasting/recipes/staff/mindsplice.json | 24 -- .../data/hexcasting/recipes/staff/oak.json | 24 -- .../hexcasting/recipes/staff/quenched.json | 24 -- .../data/hexcasting/recipes/staff/spruce.json | 24 -- .../data/hexcasting/recipes/staff/warped.json | 24 -- .../recipes/stonecutting/amethyst_tiles.json | 8 - .../data/hexcasting/recipes/sub_sandwich.json | 27 -- .../xplat/HexBlockStatesAndModels.java | 17 +- .../forge/xplat/ForgeClientXplatImpl.java | 6 + 873 files changed, 1359 insertions(+), 10835 deletions(-) delete mode 100644 Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 delete mode 100644 Common/src/generated/resources/.cache/d2fe5b6fab5fdc7ee7ca336c062752306bdf6128 delete mode 100644 Common/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 rename Common/src/generated/resources/assets/hexcasting/blockstates/{akashic_connector.json => akashic_ligature.json} (100%) rename Common/src/generated/resources/assets/hexcasting/models/item/{akashic_connector.json => akashic_ligature.json} (100%) rename {Neoforge/src/generated/resources/data/create/tags/blocks => Common/src/generated/resources/data/create/tags/block}/brittle.json (100%) rename {Neoforge/src/generated/resources/data/forge/tags/items => Common/src/generated/resources/data/forge/tags/item}/dusts/amethyst.json (100%) rename {Neoforge/src/generated/resources/data/forge/tags/items => Common/src/generated/resources/data/forge/tags/item}/gems.json (100%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/aaa_wasteful_cast.json (72%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/aab_big_cast.json (74%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/creative_unlocker.json (79%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/enlightenment.json (88%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore.json (64%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/cardamom1.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/cardamom2.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/cardamom3.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/cardamom4.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/cardamom5.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/experiment1.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/experiment2.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/lore/inventory.json (67%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/opened_eyes.json (81%) rename Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/impetus/empty.json => Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json (77%) rename Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/directrix/empty.json => Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json (76%) create mode 100644 Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json create mode 100644 Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json create mode 100644 Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json create mode 100644 Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json rename Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json => Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json (76%) create mode 100644 Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/amethyst_dust_packing.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/amethyst_dust_unpacking.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/amethyst_tiles.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/ancient_scroll_paper.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_fence.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_fence_gate.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_panel.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_planks.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_slab.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_stairs.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_tile.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/edified_wood.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/scroll_paper.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/slate_block.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/slate_block_from_slates.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/stonecutting/amethyst_tiles.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/building_blocks/stripped_edified_wood.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/ageing_scroll_paper_lantern.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/amethyst_sconce.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/ancient_scroll_paper_lantern.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/scroll.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/scroll_medium.json (80%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/scroll_paper_lantern.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/scroll_small.json (80%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/decorations/slate.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/food/sub_sandwich.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/decompose_quenched_shard/charged.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/decompose_quenched_shard/dust.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/decompose_quenched_shard/shard.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/default_colorizer.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_black.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_blue.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_brown.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_cyan.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_gray.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_green.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_light_blue.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_light_gray.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_lime.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_magenta.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_orange.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_pink.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_purple.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_red.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_white.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/dye_colorizer_yellow.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_agender.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_aroace.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_aromantic.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_asexual.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_bisexual.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_demiboy.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_demigirl.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_gay.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_genderfluid.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_genderqueer.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_intersex.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_lesbian.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_nonbinary.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_plural.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/pride_colorizer_transgender.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/misc/uuid_colorizer.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/redstone/akashic_bookshelf.json (88%) create mode 100644 Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/redstone/directrix/empty.json (88%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/redstone/edified_button.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/redstone/edified_door.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/redstone/edified_pressure_plate.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/redstone/edified_trapdoor.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/redstone/impetus/empty.json (88%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/abacus.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/artifact.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/cypher.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/focus.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/focus_rotated.json (80%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/jeweler_hammer.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/lens.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/spellbook.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/acacia.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/bamboo.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/birch.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/cherry.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/crimson.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/dark_oak.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/edified.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/jungle.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/mangrove.json (74%) rename {Neoforge/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/mindsplice.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/oak.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/quenched.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/spruce.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/staff/warped.json (74%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/thought_knot.json (80%) rename {Fabric/src/generated/resources/data/hexcasting/advancements => Common/src/generated/resources/data/hexcasting/advancement}/recipes/tools/trinket.json (79%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/root.json (76%) rename Common/src/generated/resources/data/hexcasting/{advancements => advancement}/y_u_no_cast_angy.json (76%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json (77%) create mode 100644 Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json create mode 100644 Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json create mode 100644 Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json create mode 100644 Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json create mode 100644 Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json create mode 100644 Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json create mode 100644 Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json (76%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json (76%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json (78%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json (78%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json (78%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json (78%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json (78%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json (76%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json (76%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json (77%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json (78%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json (77%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/akashic_bookshelf.json (100%) rename Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks.json => Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json (60%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/akashic_record.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/amethyst_bricks.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/amethyst_bricks_small.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/amethyst_dust_block.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/amethyst_edified_leaves.json (59%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/amethyst_pillar.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/amethyst_sconce.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/amethyst_tiles.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/ancient_scroll_paper.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/ancient_scroll_paper_lantern.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/aventurine_edified_leaves.json (59%) rename {Neoforge/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/citrine_edified_leaves.json (59%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/directrix/boolean.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/directrix/empty.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/directrix/redstone.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_button.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_door.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_fence.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_fence_gate.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_log.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_log_amethyst.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_log_aventurine.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_log_citrine.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_log_purple.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_panel.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_planks.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_pressure_plate.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_slab.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_stairs.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_tile.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_trapdoor.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/edified_wood.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/impetus/empty.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/impetus/look.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/impetus/redstone.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/impetus/rightclick.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/quenched_allay.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/quenched_allay_bricks.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/quenched_allay_bricks_small.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/quenched_allay_tiles.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/scroll_paper.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/scroll_paper_lantern.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate.json (61%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_amethyst_bricks.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_amethyst_bricks_small.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_amethyst_pillar.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_amethyst_tiles.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_block.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_bricks.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_bricks_small.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_pillar.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/slate_tiles.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/stripped_edified_log.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/blocks/stripped_edified_wood.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/loot_tables => Common/src/generated/resources/data/hexcasting/loot_table}/inject/amethyst_cluster.json (71%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/abacus.json (82%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/ageing_scroll_paper_lantern.json (87%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/akashic_bookshelf.json (80%) rename Fabric/src/generated/resources/data/hexcasting/recipes/akashic_connector.json => Common/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json (85%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/amethyst_dust_packing.json (71%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/amethyst_dust_unpacking.json (82%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/amethyst_sconce.json (67%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/amethyst_tiles.json (82%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/ancient_scroll_paper.json (87%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/ancient_scroll_paper_lantern.json (73%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/artifact.json (64%) create mode 100644 Common/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/brainsweep/budding_amethyst.json (61%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/brainsweep/directrix_boolean.json (60%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/brainsweep/directrix_redstone.json (60%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/brainsweep/impetus_look.json (58%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/brainsweep/impetus_rightclick.json (57%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/brainsweep/impetus_storedplayer.json (60%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/brainsweep/quench_allay.json (63%) rename Neoforge/src/generated/resources/data/hexcasting/recipes/lens.json => Common/src/generated/resources/data/hexcasting/recipe/cypher.json (70%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/decompose_quenched_shard/charged.json (85%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/decompose_quenched_shard/dust.json (86%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/decompose_quenched_shard/shard.json (85%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/default_colorizer.json (80%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/directrix/empty.json (83%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_black.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_blue.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_brown.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_cyan.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_gray.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_green.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_light_blue.json (76%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_light_gray.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_lime.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_magenta.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_orange.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_pink.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_purple.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_red.json (77%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_white.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dye_colorizer_yellow.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dynamicseal_focus.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/dynamicseal_spellbook.json (100%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_button.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_door.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_fence.json (78%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_fence_gate.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_panel.json (79%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_planks.json (81%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_pressure_plate.json (69%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_slab.json (73%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_stairs.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_tile.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_trapdoor.json (73%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/edified_wood.json (74%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/focus.json (69%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/focus_rotated.json (69%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/impetus/empty.json (84%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/jeweler_hammer.json (72%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/lens.json (80%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_agender.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_aroace.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_aromantic.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_asexual.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_bisexual.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_demiboy.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_demigirl.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_gay.json (77%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_genderfluid.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_genderqueer.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_intersex.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_lesbian.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_nonbinary.json (75%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_plural.json (76%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/pride_colorizer_transgender.json (74%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/scroll.json (79%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/scroll_medium.json (77%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/scroll_paper.json (82%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/scroll_paper_lantern.json (75%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/scroll_small.json (77%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/slate.json (80%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/slate_block.json (82%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/slate_block_from_slates.json (72%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/spellbook.json (77%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/acacia.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/bamboo.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/birch.json (82%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/cherry.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/crimson.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/dark_oak.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/edified.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/jungle.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/mangrove.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/mindsplice.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/oak.json (82%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/quenched.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/spruce.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/staff/warped.json (81%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/stonecutting/amethyst_tiles.json (58%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/stripped_edified_wood.json (73%) rename {Fabric/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/sub_sandwich.json (83%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/thought_knot.json (80%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/trinket.json (69%) rename {Neoforge/src/generated/resources/data/hexcasting/recipes => Common/src/generated/resources/data/hexcasting/recipe}/uuid_colorizer.json (81%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/blocks => Common/src/generated/resources/data/hexcasting/tags/block}/brainswept_circle_components.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/blocks => Common/src/generated/resources/data/hexcasting/tags/block}/cheap_to_break_block.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/blocks => Common/src/generated/resources/data/hexcasting/tags/block}/directrices.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/blocks => Common/src/generated/resources/data/hexcasting/tags/block}/edified_logs.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/blocks => Common/src/generated/resources/data/hexcasting/tags/block}/edified_planks.json (100%) create mode 100644 Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json rename {Neoforge/src/generated/resources/data/hexcasting/tags/blocks => Common/src/generated/resources/data/hexcasting/tags/block}/impeti.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/blocks => Common/src/generated/resources/data/hexcasting/tags/block}/water_plants.json (100%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json (100%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json (100%) rename {Neoforge => Common}/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/brainswept_circle_components.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/directrices.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/edified_logs.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/edified_planks.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/grants_root_advancement.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/impeti.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/phial_base.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/seal_materials.json (100%) rename {Neoforge/src/generated/resources/data/hexcasting/tags/items => Common/src/generated/resources/data/hexcasting/tags/item}/staves.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/buttons.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/crystal_sound_blocks.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/doors.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/fence_gates.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/fences.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/leaves.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/logs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/logs_that_burn.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/mineable/axe.json (95%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/mineable/hoe.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/mineable/pickaxe.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/mineable/shovel.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/planks.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/pressure_plates.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/slabs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/stairs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/trapdoors.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/unstable_bottom_center.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/wooden_buttons.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/wooden_doors.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/wooden_fences.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/wooden_pressure_plates.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/wooden_slabs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/wooden_stairs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/blocks => Common/src/generated/resources/data/minecraft/tags/block}/wooden_trapdoors.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/buttons.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/doors.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/leaves.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/logs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/logs_that_burn.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/planks.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/slabs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/trapdoors.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/wooden_buttons.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/wooden_doors.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/wooden_pressure_plates.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/wooden_slabs.json (100%) rename {Neoforge/src/generated/resources/data/minecraft/tags/items => Common/src/generated/resources/data/minecraft/tags/item}/wooden_trapdoors.json (100%) rename {Neoforge/src/generated/resources/data/forge => Common/src/generated/resources/data/neoforge}/loot_modifiers/global_loot_modifiers.json (95%) rename Common/src/main/resources/assets/hexcasting/textures/block/{slate.png => slate_block.png} (100%) delete mode 100644 Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 delete mode 100644 Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c delete mode 100644 Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c delete mode 100644 Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 delete mode 100644 Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b delete mode 100644 Fabric/src/generated/resources/data/c/tags/items/amethyst_dusts.json delete mode 100644 Fabric/src/generated/resources/data/c/tags/items/gems.json delete mode 100644 Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_block.json delete mode 100644 Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json delete mode 100644 Fabric/src/generated/resources/data/create/tags/blocks/brittle.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_panel.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_medium.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/artifact.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mindsplice.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_tables/inject/amethyst_cluster.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/abacus.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/ageing_scroll_paper_lantern.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/akashic_bookshelf.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_dust_unpacking.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_sconce.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/artifact.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/budding_amethyst.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_boolean.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_redstone.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_storedplayer.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/quench_allay.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/cypher.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/dust.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/directrix/empty.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_blue.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_cyan.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_blue.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_gray.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/edified_door.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence_gate.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/edified_pressure_plate.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/edified_slab.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/edified_tile.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/edified_wood.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/focus.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/focus_rotated.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/impetus/empty.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/jeweler_hammer.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/scroll.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/scroll_medium.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/scroll_paper.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/scroll_small.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/slate_block_from_slates.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/spellbook.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/staff/acacia.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/staff/cherry.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/stripped_edified_wood.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/thought_knot.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/trinket.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/recipes/uuid_colorizer.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/action/can_start_enlighten.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/action/per_world_pattern.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/action/requires_enlightenment.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/blocks/brainswept_circle_components.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/blocks/cheap_to_break_block.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/blocks/directrices.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_logs.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_planks.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/blocks/impeti.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/blocks/water_plants.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/brainswept_circle_components.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/directrices.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/edified_logs.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/edified_planks.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/grants_root_advancement.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/impeti.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/phial_base.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/seal_materials.json delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/items/staves.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/buttons.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/crystal_sound_blocks.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/doors.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/fences.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/leaves.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/logs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/hoe.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/shovel.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/planks.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/slabs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/stairs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/buttons.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/doors.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/leaves.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/logs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/logs_that_burn.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/planks.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/slabs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/trapdoors.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/wooden_doors.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/wooden_slabs.json delete mode 100644 Fabric/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json delete mode 100644 Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_block.json delete mode 100644 Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_planks.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_slab.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_tile.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_wood.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_small.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/slate.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/food/sub_sandwich.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/default_colorizer.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/uuid_colorizer.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_button.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_door.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/abacus.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/cypher.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus_rotated.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/jeweler_hammer.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/lens.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/spellbook.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/acacia.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/bamboo.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/birch.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/cherry.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/crimson.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/dark_oak.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/edified.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/jungle.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mangrove.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/oak.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/quenched.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/spruce.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/warped.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/thought_knot.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/trinket.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_bookshelf.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_record.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks_small.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_dust_block.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_pillar.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_sconce.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_tiles.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper_lantern.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/boolean.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/empty.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/redstone.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_button.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_door.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence_gate.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_amethyst.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_aventurine.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_citrine.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_purple.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_panel.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_planks.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_pressure_plate.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_slab.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_stairs.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_tile.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_trapdoor.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_wood.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/empty.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/look.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/redstone.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/rightclick.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks_small.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_tiles.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper_lantern.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks_small.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_pillar.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_tiles.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_block.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks_small.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_pillar.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_tiles.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_log.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_wood.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/akashic_connector.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_dust_packing.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_tiles.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper_lantern.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_rightclick.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/cypher.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/charged.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/shard.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/default_colorizer.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_black.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_brown.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_gray.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_green.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_lime.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_magenta.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_orange.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_pink.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_purple.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_red.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_white.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_yellow.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_focus.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_spellbook.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/edified_button.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/edified_panel.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/edified_planks.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/edified_stairs.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/edified_trapdoor.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_agender.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aroace.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aromantic.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_asexual.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_bisexual.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demiboy.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demigirl.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_gay.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderfluid.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderqueer.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_intersex.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_lesbian.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_nonbinary.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_plural.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_transgender.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_paper_lantern.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/slate.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/slate_block.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/bamboo.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/birch.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/crimson.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/dark_oak.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/edified.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/jungle.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mangrove.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mindsplice.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/oak.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/quenched.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/spruce.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/staff/warped.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/stonecutting/amethyst_tiles.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipes/sub_sandwich.json diff --git a/Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 b/Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 deleted file mode 100644 index 65cd7f4b28..0000000000 --- a/Common/src/generated/resources/.cache/8f7cd5c924d3264b7777ef1696459761f9a70902 +++ /dev/null @@ -1,276 +0,0 @@ -// 1.20.1 2024-12-10T14:26:44.916295 Item Models: hexcasting -2fc68dcd6d73da3deaa6a33240dd9160a2b79592 assets/hexcasting/models/block/deco/quenched_allay_bricks_0.json -d59af7a48b20b210240b26115fb172d6202f9254 assets/hexcasting/models/block/deco/quenched_allay_bricks_1.json -a62eeebbca2d145c22f25725bd848ed4d673cefa assets/hexcasting/models/block/deco/quenched_allay_bricks_2.json -90e14c7ae44f667810fa5d31af5fd02cb575c13a assets/hexcasting/models/block/deco/quenched_allay_bricks_3.json -669d9348f4581dae45c35268a760675509a89a29 assets/hexcasting/models/block/deco/quenched_allay_bricks_small_0.json -bb65f6b36336fb4746e749a2b248e521ff24f901 assets/hexcasting/models/block/deco/quenched_allay_bricks_small_1.json -39b54b608cdf5e959a5c115379e45aaf590a254a assets/hexcasting/models/block/deco/quenched_allay_bricks_small_2.json -da0aee7c9516804372262165dc5aab16bd1c6ce6 assets/hexcasting/models/block/deco/quenched_allay_bricks_small_3.json -bacd99e8c24b9ce004e8aeff509cca4b971f3ed9 assets/hexcasting/models/block/deco/quenched_allay_tiles_0.json -1b272b737dea8a856c63e253359863dff7ec7e54 assets/hexcasting/models/block/deco/quenched_allay_tiles_1.json -9840fe9648aedd03ecda485e7c6466bbe2a418ba assets/hexcasting/models/block/deco/quenched_allay_tiles_2.json -71abe574694be3f0be75433068bae0489bae5055 assets/hexcasting/models/block/deco/quenched_allay_tiles_3.json -9af2754cb1e53eeaa85618cf92651b4878cf62b1 assets/hexcasting/models/block/quenched_allay_0.json -de4ff723b4332d4e26bd01f74e0485e28c9a2178 assets/hexcasting/models/block/quenched_allay_1.json -4c29163e07f3a903017e38a9cc102f4b37db20b1 assets/hexcasting/models/block/quenched_allay_2.json -487d34cd8e70b3e468337228b74af5c1b4d14c53 assets/hexcasting/models/block/quenched_allay_3.json -f2156b3a7041cf99891b528393db64c6b9ca1a4f assets/hexcasting/models/item/abacus.json -19730853397b109cfedd0c3bbda83d5de6cd15b9 assets/hexcasting/models/item/akashic_record.json -8c735feff09d46d00ed681311f46f61a50cfdc9b assets/hexcasting/models/item/amethyst_dust.json -fbb8706993fbc3246c56b9f3eb274ff8968b70f8 assets/hexcasting/models/item/amethyst_pillar.json -533a859174052a332de069b2ffeaf0106d132b9a assets/hexcasting/models/item/ancient_cypher.json -71a7968e43fbb872ee52315a3ee738d0b3fd1a69 assets/hexcasting/models/item/ancient_cypher_0_filled.json -0f0c627d7ed0e8a7e3666ca80ddc13b280d6ce9f assets/hexcasting/models/item/ancient_cypher_1.json -097b8ecfb34df710ca4b396d3a5df7722ecc3596 assets/hexcasting/models/item/ancient_cypher_1_filled.json -9fdde927e7e8b06221aef34a6a6b22d0b790f297 assets/hexcasting/models/item/ancient_cypher_2.json -93257ad393b751931539a5641d4430a4631e95f9 assets/hexcasting/models/item/ancient_cypher_2_filled.json -4af6234e24031ee0989282c8435fe07e85b02771 assets/hexcasting/models/item/ancient_cypher_3.json -41760f3c89d8dc94c515b0ab8220ecf996710a3c assets/hexcasting/models/item/ancient_cypher_3_filled.json -4df83ae775400ca2d480bfb3621abcf58d4d7352 assets/hexcasting/models/item/ancient_cypher_4.json -d21eb7093c0231015808a8b51b27857da1748431 assets/hexcasting/models/item/ancient_cypher_4_filled.json -e2b4e2ac4ad4fa4b490e1774a565a26fb840c474 assets/hexcasting/models/item/ancient_cypher_5.json -4555e5de80047ffa4e72a4a98eb51437a95e7291 assets/hexcasting/models/item/ancient_cypher_5_filled.json -420840b5761fcddbdd10186f3127bc7589badc46 assets/hexcasting/models/item/ancient_cypher_6.json -55c08581a2e8c7134d63b38226bddafff0fba3ae assets/hexcasting/models/item/ancient_cypher_6_filled.json -2731192f0c7a9a8d45ba4fcd8d1de60bade0b49e assets/hexcasting/models/item/ancient_cypher_7.json -7ba3015d79601f1c8238dbac4a45e525e3589f16 assets/hexcasting/models/item/ancient_cypher_7_filled.json -87e7ee44cdd0808a3dd72babfd1db716df2bcdfe assets/hexcasting/models/item/artifact.json -1cd1b4d002d1a9a044ceab7cca842e4a2b7bd2f4 assets/hexcasting/models/item/artifact_0_filled.json -4709e65d8e74cf45b3ba014bdf70373728cccc78 assets/hexcasting/models/item/artifact_1.json -13915cc6b9ebbdce7043939c32c308bf129c2099 assets/hexcasting/models/item/artifact_1_filled.json -5434775bd88a654db6b2d09ab5f74a93a1983528 assets/hexcasting/models/item/artifact_2.json -a084bdd9039f5a16183d0cf70d744bf29a3c8760 assets/hexcasting/models/item/artifact_2_filled.json -206548428fd1a142442469c8b65fae24a1b50af6 assets/hexcasting/models/item/artifact_3.json -d6de8ae6a4d546aac12489cae386731490040c5e assets/hexcasting/models/item/artifact_3_filled.json -a0dbd0d40833d91dd33036686cd58494572cbe42 assets/hexcasting/models/item/artifact_4.json -86f1f0c0cbae34010ec9eca723db64303d5f5d5f assets/hexcasting/models/item/artifact_4_filled.json -e822e463834b9bf4433defbace06cc586629da95 assets/hexcasting/models/item/artifact_5.json -a44fec20b346e1e660027d204b42df312a310086 assets/hexcasting/models/item/artifact_5_filled.json -c499e86bb5b5bc2fe29914ce14832212ca23df10 assets/hexcasting/models/item/artifact_6.json -ccb8a41fdd4bc1b493a11cfa2ea4a39b7f7c3888 assets/hexcasting/models/item/artifact_6_filled.json -6461c5261ec1eb92a608bd2db420b1e5b0c3591a assets/hexcasting/models/item/artifact_7.json -373617635cf75ee236da52eb5b9f341d2b77eac3 assets/hexcasting/models/item/artifact_7_filled.json -c77fe07e43f7a46e04f16e43054588cdcdf4c01e assets/hexcasting/models/item/battery.json -ec7c3a51882a432185fdbb6a449e66165b6a4c4c assets/hexcasting/models/item/charged_amethyst.json -3ed3e3d86dcbc29d2e6fb59b9c6a7e455e9a3332 assets/hexcasting/models/item/cherry_staff.json -c64ed609ece68994ce23dd2809145040bce13579 assets/hexcasting/models/item/conjured_block.json -c64ed609ece68994ce23dd2809145040bce13579 assets/hexcasting/models/item/conjured_light.json -c8da4227db3c80e3e2e7f2fb2ae2649656429d68 assets/hexcasting/models/item/creative_unlocker.json -afe7113b8411c64651b679ea6b4e41bf36ab38c3 assets/hexcasting/models/item/cypher.json -3b9442e76a05b7fa70f9fb30186f94b1ba08a69b assets/hexcasting/models/item/cypher_0_filled.json -2c240a69627de02937aa601faa2578adc7d44906 assets/hexcasting/models/item/cypher_1.json -5dc34d91f0d6db16d537dd93345ccca8fe4f6aaa assets/hexcasting/models/item/cypher_1_filled.json -29e2a1e5c0e518e5edf0c6c25a5259c361ece478 assets/hexcasting/models/item/cypher_2.json -af274f590258b97dadf050d925c1187ee6e35d77 assets/hexcasting/models/item/cypher_2_filled.json -89a21d5aeef41fe788e799b89c7f80a26f09abed assets/hexcasting/models/item/cypher_3.json -e80d8c33a0b4ca69b157888fbc5f5660ba9c411d assets/hexcasting/models/item/cypher_3_filled.json -fcc1b8d2b97207af1f8c06061e170b11949bcf51 assets/hexcasting/models/item/cypher_4.json -7554e24b6f52c6b8db358e0cb5449449752a5808 assets/hexcasting/models/item/cypher_4_filled.json -85cd0adf020150c69ca7fec1f5200b027fd01d09 assets/hexcasting/models/item/cypher_5.json -1010ce5e3def445462ab69c4289f3ba94f50eacc assets/hexcasting/models/item/cypher_5_filled.json -d5b444a363c101779a01f7298d55161a8271c742 assets/hexcasting/models/item/cypher_6.json -6f4d37c92c0d43da6d20705955e9b7cee83ed612 assets/hexcasting/models/item/cypher_6_filled.json -69e61ff1976e99c43a17c7b1e0591829ac44a4d6 assets/hexcasting/models/item/cypher_7.json -41ee99d878ec66f480ebcbacc65f16696c31d161 assets/hexcasting/models/item/cypher_7_filled.json -c6523de66cbfae3a1e6361c635cc693a0a089bb3 assets/hexcasting/models/item/default_colorizer.json -113c51af571a92009f5f687a82e10bc5ce97b010 assets/hexcasting/models/item/dye_colorizer_black.json -b5a04716775ba2e1b137abc513025b2f1065e5d1 assets/hexcasting/models/item/dye_colorizer_blue.json -0bb3afbd937b2e07523a581f6e3f389e11078595 assets/hexcasting/models/item/dye_colorizer_brown.json -6da7c3fb38f79e87506da06befe18730187e5183 assets/hexcasting/models/item/dye_colorizer_cyan.json -1afb238702f40275c30262ea349d5c8a590c314d assets/hexcasting/models/item/dye_colorizer_gray.json -0daf8bf5f98ed6dccb701cc4c8a4de3f3a53aed0 assets/hexcasting/models/item/dye_colorizer_green.json -82bc0bf11d7f02f18fef8f04ba5aed13c88e5556 assets/hexcasting/models/item/dye_colorizer_light_blue.json -d8ac48c96b5bc37525a5b26ce451e53229f83b7e assets/hexcasting/models/item/dye_colorizer_light_gray.json -317ac0b46bb76d6df66e350fd824cd18b2af2776 assets/hexcasting/models/item/dye_colorizer_lime.json -0290be48770c6c3b11e7d99c677c6a590168168d assets/hexcasting/models/item/dye_colorizer_magenta.json -88b74eda6ddf728301c73e683f2c416139b956c8 assets/hexcasting/models/item/dye_colorizer_orange.json -de7f7dec75da3170672de5c46a87ff47297db12b assets/hexcasting/models/item/dye_colorizer_pink.json -9bec032a4f17aeaa68f5dc88bd43de97a476df21 assets/hexcasting/models/item/dye_colorizer_purple.json -63b7438b1ab3ec9be3213d2964914c42c838643e assets/hexcasting/models/item/dye_colorizer_red.json -79f4120a9571ecf8be1767dfb41c4604f2ab985b assets/hexcasting/models/item/dye_colorizer_white.json -667ea00dbc366ee41e97f21c099001440212d183 assets/hexcasting/models/item/dye_colorizer_yellow.json -f867a3b2bbc117a782d49f0819b60f4727d1f483 assets/hexcasting/models/item/edified_button.json -c9faada6299f388afc2d2798843d2b45159950d1 assets/hexcasting/models/item/edified_door.json -32f6086df25000e0af341e49ab60fa214f0c4a52 assets/hexcasting/models/item/edified_fence.json -12b4c0ce637123f5a39c00c4c973958f5106eecf assets/hexcasting/models/item/edified_fence_gate.json -7f22e012a844cc2c5e30b0fcbdc2e7e4afac1c40 assets/hexcasting/models/item/edified_log.json -8197108bfba4b5963e3c0b1e76a04b8a0d6aae03 assets/hexcasting/models/item/edified_log_amethyst.json -7d6bd7d94d4417f85444c387fc34d9b6947858f1 assets/hexcasting/models/item/edified_log_aventurine.json -c13f4b5b9e57224107c7f7c00928a6873b437245 assets/hexcasting/models/item/edified_log_citrine.json -2415591623223d1cb1a4ac2aeb2d1337694fa9a9 assets/hexcasting/models/item/edified_log_purple.json -6b2c9d4aca0c869d7e18707c22b00c14e1d30f0c assets/hexcasting/models/item/edified_pressure_plate.json -31b4d60ff15a6d6de7aecb6feeba25a366bba2fd assets/hexcasting/models/item/edified_slab.json -2584421c2e9e1cdf22a703018b54cf449613d7d9 assets/hexcasting/models/item/edified_stairs.json -ae58c5b7c304d33cbde60caf44a4c4ee4ec1a633 assets/hexcasting/models/item/edified_trapdoor.json -084183e4351973c8165f6f459c0f0dba2463d957 assets/hexcasting/models/item/edified_wood.json -1943e85c2ce9a40b0bbe0e4ffca2b6a968287091 assets/hexcasting/models/item/focus.json -7a19f436fc9e8d0e0e01b4404f326eb48404855a assets/hexcasting/models/item/focus_0_filled.json -88615c49de2c14a19da34431724401652e94be79 assets/hexcasting/models/item/focus_0_sealed.json -8099bd2e0afe118fa013b9d635ad47ffaab556bd assets/hexcasting/models/item/focus_1.json -340001b99100480d06cab60229d4af308be3c4ac assets/hexcasting/models/item/focus_1_filled.json -e0f8fef2e2d8d0e9168d10327d55115293ad2ae7 assets/hexcasting/models/item/focus_1_sealed.json -3578e575573fc52c4e819bcc5e207ce7a4e0f808 assets/hexcasting/models/item/focus_2.json -3e31f3b513df519f5e2e2eb4747faa02b89db67d assets/hexcasting/models/item/focus_2_filled.json -6724475ce4ef36295839f95098035889e57896f2 assets/hexcasting/models/item/focus_2_sealed.json -cb22fbb79432527d828475aa457c9c6fdb78bbff assets/hexcasting/models/item/focus_3.json -54f5d42d7104297162cc9b322ff477d568656e26 assets/hexcasting/models/item/focus_3_filled.json -283fcd45c639953802f8345c20ec45d9aa8c463d assets/hexcasting/models/item/focus_3_sealed.json -7818903b0ec7c7926e040e4d634495a7699e6deb assets/hexcasting/models/item/focus_4.json -e2f8f78c5009deb7368e44af09d90c1da075240d assets/hexcasting/models/item/focus_4_filled.json -abdeb1a3563f983bd09db8e7c666ddbdffc3903b assets/hexcasting/models/item/focus_4_sealed.json -9b687b3c191c5802bc39613ae705d7313139b310 assets/hexcasting/models/item/focus_5.json -a00edbeef7c2d828f4f16ed43d5e3a53e9674787 assets/hexcasting/models/item/focus_5_filled.json -c40bd0246003cd2c1824ad61ad718f5959dc6e10 assets/hexcasting/models/item/focus_5_sealed.json -3c77a283be7249e00e1947676276f7484b00ea83 assets/hexcasting/models/item/focus_6.json -732c8201606b3c510c0467fc3840aa1475f7b56f assets/hexcasting/models/item/focus_6_filled.json -9bf849da1973419685e4ed36a823285b154b143f assets/hexcasting/models/item/focus_6_sealed.json -759efbfda9f003e920e37b3b8f0306dd20562e94 assets/hexcasting/models/item/focus_7.json -b2702eb139b47fcdfd3ef268bbc9700eeaae82f3 assets/hexcasting/models/item/focus_7_filled.json -1e89b03a5f3a860dae1864c4dbfe855564f89705 assets/hexcasting/models/item/focus_7_sealed.json -6ec61fea7d8c49cc0c45b64857fd926451b4845f assets/hexcasting/models/item/jeweler_hammer.json -abfc028c974a02780aed3d7a5859352503bbd920 assets/hexcasting/models/item/lens.json -a34a6d777ae265c7e49c8bb23c15f04359236544 assets/hexcasting/models/item/lore_fragment.json -a3e134b79977545049da01671f3a1bd636d14789 assets/hexcasting/models/item/old_staff.json -82fa0a2bb17e40c0b3f826e97b2e95445ec24ab8 assets/hexcasting/models/item/patchouli_book.json -91186c79af073cc390a1f1e6712540e1a49b716e assets/hexcasting/models/item/phial_larger_0.json -548d6999c6b5cb2c5b8d36d190fc849632f9f8ea assets/hexcasting/models/item/phial_larger_1.json -3162e3b88e59a9ab4b9df345724a0964db695688 assets/hexcasting/models/item/phial_larger_2.json -4e8f120d8472135ba1d8c332848fd0cc4c9ef1a0 assets/hexcasting/models/item/phial_larger_3.json -7b0d93186cd60cf31049512ca1147262a2bf203f assets/hexcasting/models/item/phial_larger_4.json -8943ca4912ab23d507725744f675ddcc56ccf1a9 assets/hexcasting/models/item/phial_largest_0.json -e20faba33418dac72ff3ad360eeb6fce3fce2728 assets/hexcasting/models/item/phial_largest_1.json -f0623e9b9192098dff982fabf1e598a27f96b7a8 assets/hexcasting/models/item/phial_largest_2.json -911736f4e2e3d825fb01f13dd32bf0108b68df99 assets/hexcasting/models/item/phial_largest_3.json -86d475f4c5bda63a564604e828f408ac6769e9eb assets/hexcasting/models/item/phial_largest_4.json -d69d10e6cb967b98b3294cc86174182c671de671 assets/hexcasting/models/item/phial_large_0.json -9b7805bec9481956b0ccc6c65dd8e02d3b3cdf54 assets/hexcasting/models/item/phial_large_1.json -596a866a0fac7cfe916d1e78f2a5f20856493c62 assets/hexcasting/models/item/phial_large_2.json -34aacc4fb999949e455d01548546a52eafb97e24 assets/hexcasting/models/item/phial_large_3.json -3a6f6b51e72a040d039abae580ef5db2a6c8101d assets/hexcasting/models/item/phial_large_4.json -d5a3a98a51146a94b95ea84d49236fc83b08b807 assets/hexcasting/models/item/phial_medium_0.json -2165d19e514a3358fb8e3ceb91efd2fbc47ddebd assets/hexcasting/models/item/phial_medium_1.json -89933a425604fb6c0599848df3fef62ab07ea5a2 assets/hexcasting/models/item/phial_medium_2.json -1088d2440c7958a37509c753d74d8cfd383d05ca assets/hexcasting/models/item/phial_medium_3.json -a3d2dc8be83802e4444e0152904b2d48accd196c assets/hexcasting/models/item/phial_medium_4.json -b7492bc7b30d0890cfc38392e538b439a03ebc32 assets/hexcasting/models/item/phial_small_0.json -69553fbc4c9e0bf54fcc17f108f43baeabe66d2a assets/hexcasting/models/item/phial_small_1.json -e9dc7a0685fa9abfb2c2555cdb2eb4ef8d4920a8 assets/hexcasting/models/item/phial_small_2.json -73125d101de003bd1d48768c2381566b5687d002 assets/hexcasting/models/item/phial_small_3.json -ead3b78e464b2e2a259c781076bdf50a50686b87 assets/hexcasting/models/item/phial_small_4.json -6a384e599fdc2d798f175e86ea03147c25a47a51 assets/hexcasting/models/item/pride_colorizer_agender.json -c39aeb9c8b6f5b8a0510a54a9f87154b8187ba21 assets/hexcasting/models/item/pride_colorizer_aroace.json -abe3bc0e065fe4250835998871c08066b3e7ae49 assets/hexcasting/models/item/pride_colorizer_aromantic.json -d34570c2485646768ec2d47bfc035c704f9b0ab8 assets/hexcasting/models/item/pride_colorizer_asexual.json -fe6a5142ad799343c287a0566193fa20469a377f assets/hexcasting/models/item/pride_colorizer_bisexual.json -f2d2ed03d3bc7d2526d5276b348dc05f7c3585a3 assets/hexcasting/models/item/pride_colorizer_demiboy.json -2e9008cfb1a23e793d17ec521704f06a7f235a3a assets/hexcasting/models/item/pride_colorizer_demigirl.json -708698514fb6db04a30bca299c8f1ca32aad795b assets/hexcasting/models/item/pride_colorizer_gay.json -a377c0f71783296af01e91605bb821ef8554bdef assets/hexcasting/models/item/pride_colorizer_genderfluid.json -d60b723c44183b59cbadfd02a911dab5e89e0e61 assets/hexcasting/models/item/pride_colorizer_genderqueer.json -3322b15f5dc59cfb0008ff52648af1420890d5c9 assets/hexcasting/models/item/pride_colorizer_intersex.json -061fd86ffe47e0886783c8a20e8723ecac372604 assets/hexcasting/models/item/pride_colorizer_lesbian.json -5ebdcf6777381497fd1accf88832f8f1f2bfcc99 assets/hexcasting/models/item/pride_colorizer_nonbinary.json -6253bab7bd9162f75782c5bc899f46cd941d01ad assets/hexcasting/models/item/pride_colorizer_pansexual.json -c67e74e2a323872c3b34b113df99da8b77a501c6 assets/hexcasting/models/item/pride_colorizer_plural.json -7c4191ec2479b0a67e578da49d459deea8294ec4 assets/hexcasting/models/item/pride_colorizer_transgender.json -5038e069909e2dcf8664bcde81b229c8e27191ae assets/hexcasting/models/item/quenched_allay.json -6bef352b86abdaf9ce4f4942f01e746aa7cc62a2 assets/hexcasting/models/item/quenched_allay_bricks.json -c9aab9c7c0483766c670cfda7916323473e3c097 assets/hexcasting/models/item/quenched_allay_bricks_small.json -a8859c93236b88f9ed46a4957f5723965ce04e03 assets/hexcasting/models/item/quenched_allay_shard.json -812d5b11011c52dc5ce97040f9df5125c0542d10 assets/hexcasting/models/item/quenched_allay_tiles.json -8105007d186fe2c6bea6958dd85d1b2ed3cecb58 assets/hexcasting/models/item/quenched_shard_0.json -aef7d4b759bcc8a1d5b886b8a0170657e447a8d8 assets/hexcasting/models/item/quenched_shard_1.json -4a08374ef00de51381df9659488cb305e7c8674f assets/hexcasting/models/item/quenched_shard_2.json -181aac0f66e5c3937f49da3f5d577f1c8045c635 assets/hexcasting/models/item/quenched_shard_3.json -1ac1d158da25a8f8ec4b8771445d1ec9d42e9519 assets/hexcasting/models/item/scroll.json -ae2a8b6eb8a4ef17926e20c6982bc01120ff32b7 assets/hexcasting/models/item/scroll_ancient_large.json -7478e4b91169a3ab9def5af8662db9696eb33a34 assets/hexcasting/models/item/scroll_ancient_medium.json -e5e1c3116c97deeee0ab5e87178043f4f1b53bea assets/hexcasting/models/item/scroll_ancient_small.json -304b6c635b289565c871f7e8389f59baf93d66ea assets/hexcasting/models/item/scroll_medium.json -6f9d5d0ab5c9cf6abb3303f2e8d4993693eadb77 assets/hexcasting/models/item/scroll_pristine_large.json -300063a2245b419e360fc5e91827708e2ff5f79a assets/hexcasting/models/item/scroll_pristine_medium.json -e4dd5a16b9914044c1721df150e02b657835d97b assets/hexcasting/models/item/scroll_pristine_small.json -c809785d09b2545dac68d4a10b1e576454dd51e7 assets/hexcasting/models/item/scroll_small.json -9b82beea7667a8f9de3d1e8df136bb2034ed51a8 assets/hexcasting/models/item/slate.json -973361a2dd2ba5f3cd9fe2104f7ead43b085acc8 assets/hexcasting/models/item/slate_amethyst_pillar.json -612d4c65fb907c75975659edf00c7d92bf1b43d8 assets/hexcasting/models/item/slate_blank.json -96c85c64446072761910774b36924436c637faab assets/hexcasting/models/item/slate_pillar.json -e6452f95b60240e0067769d7f32a0b9fa7718a1b assets/hexcasting/models/item/slate_written.json -34abd8e443c028eeb24535b685cb3876f7235c23 assets/hexcasting/models/item/spellbook.json -2c23e0ce8a59f0f143ab514f46251e39fae39d6e assets/hexcasting/models/item/spellbook_0_filled.json -e8264e67b895bb61b52b936968b120c064507a26 assets/hexcasting/models/item/spellbook_0_sealed.json -b94a2beab80e87ed3f7e6004f70a3919c64272b4 assets/hexcasting/models/item/spellbook_1.json -158148d51abd63a93123fa7f2e2bce45d83d237f assets/hexcasting/models/item/spellbook_1_filled.json -c2fc066cee9a1e2ddf5a4507cf90b88a65d32028 assets/hexcasting/models/item/spellbook_1_sealed.json -85adbb3604db5a2e41877e2085d445df5622b549 assets/hexcasting/models/item/spellbook_2.json -83336c6e8bac94473e2f420084e544feef016d52 assets/hexcasting/models/item/spellbook_2_filled.json -a585cd9359896cd5ec62e4ccc28649170b2c8875 assets/hexcasting/models/item/spellbook_2_sealed.json -62e70d832eae787e0f086bf2f959eca19bfdfcd4 assets/hexcasting/models/item/spellbook_3.json -b312e3a09356f92d4f47b89f319e5ceeadb565ae assets/hexcasting/models/item/spellbook_3_filled.json -6ec3b9c77f6c7c4953d06c69bd5c06fc90e51d3d assets/hexcasting/models/item/spellbook_3_sealed.json -411ee9b98ec41a11d4026863332f0c65891807fe assets/hexcasting/models/item/spellbook_4.json -99aea30de3172c435b9a85a8ccce599251ed2722 assets/hexcasting/models/item/spellbook_4_filled.json -5881069c0b7e0e2bbaf07d8016fe4bcacce2e5e8 assets/hexcasting/models/item/spellbook_4_sealed.json -c4a41996c971ab44175cb8be5247b595836973cb assets/hexcasting/models/item/spellbook_5.json -4b9a2d0f4942fff48f31e58bde673863303396ad assets/hexcasting/models/item/spellbook_5_filled.json -d47f10973fa2660230f2249b3c009d4c7e4fc33f assets/hexcasting/models/item/spellbook_5_sealed.json -2adb81185491d908b5059c5a8df2a72c0913406b assets/hexcasting/models/item/spellbook_6.json -1d98011ce5c424be3488ac613d04f09572f85120 assets/hexcasting/models/item/spellbook_6_filled.json -53f092cea6f0f27d1b41a4be4403aed908768d2f assets/hexcasting/models/item/spellbook_6_sealed.json -a1dc5817c7c62e0d6e4c1ca1c5bfba6973a9b253 assets/hexcasting/models/item/spellbook_7.json -e43bfc743664dc23cbb2aaa4a66072ce1bbb5c2f assets/hexcasting/models/item/spellbook_7_filled.json -32210f56cb33747d9890de18300ae936cc8b0f77 assets/hexcasting/models/item/spellbook_7_sealed.json -f791313aa7bb01b418676ffaeeb09286ca9bddff assets/hexcasting/models/item/staff/acacia.json -e1f5949b5ea4e5056909d9a74f4c578114d905f1 assets/hexcasting/models/item/staff/bamboo.json -19acf04c62128275b8fb468e89a30ab94d6e5a1a assets/hexcasting/models/item/staff/birch.json -3ed3e3d86dcbc29d2e6fb59b9c6a7e455e9a3332 assets/hexcasting/models/item/staff/cherry.json -244ba74a82a188df6fd258affcdd4b1a7320e617 assets/hexcasting/models/item/staff/crimson.json -ee609f36641d4689512b54aa343eafd1d53881e6 assets/hexcasting/models/item/staff/dark_oak.json -eb9d51207fddad95d375ccbe0f96df12893312d0 assets/hexcasting/models/item/staff/edified.json -99e1283ee4ba1baccd452e909bf61417b7f2f57a assets/hexcasting/models/item/staff/jungle.json -529b269c10e8da7af7974cf1eb539af30dbe9766 assets/hexcasting/models/item/staff/mangrove.json -ede4e45b2744ec8b457f8964708d80fe9f4711db assets/hexcasting/models/item/staff/mindsplice.json -3ae310c995e8211b212babc2b4ed1a4b6185a383 assets/hexcasting/models/item/staff/oak.json -6ced9d423830b4a095ecb1076f3d89fa831f24fd assets/hexcasting/models/item/staff/quenched.json -898635b56d406e3be71bf87e2e2a7953388c6d3e assets/hexcasting/models/item/staff/quenched_0.json -781f2aec9c3d1d74ef44706ad76782ea4c5c7064 assets/hexcasting/models/item/staff/quenched_1.json -2d3fe60a6bab47692fc9fb32c76ff7b0c44a731f assets/hexcasting/models/item/staff/quenched_2.json -91e45480e12c73a1d3c6f0970b813de3bc8a7df7 assets/hexcasting/models/item/staff/quenched_3.json -49d928184c2e6624b0b217615d54b1d08da133ff assets/hexcasting/models/item/staff/spruce.json -09100a64a4c1e14dc2078fc1060122b0a52ca497 assets/hexcasting/models/item/staff/warped.json -d6ebc87cb0fa6f86bee3a4eade7329ebb0cf2d38 assets/hexcasting/models/item/stripped_edified_log.json -ea3f18f75776022127f3a108119e3f7a5c211c0f assets/hexcasting/models/item/stripped_edified_wood.json -0a100b64e77394606018320bbc5752a546fe0af4 assets/hexcasting/models/item/sub_sandwich.json -6a7f5af82cf8ec72c3457ef4c1ae11a76717bf88 assets/hexcasting/models/item/thought_knot.json -93b2191ffab47003f661b75a85cd833ec64f0c15 assets/hexcasting/models/item/thought_knot_written.json -9e4d326d8339db5d7a627a14630e6c0b2fa32ba6 assets/hexcasting/models/item/trinket.json -dba1f5c24852f756280a5d20c3327ea3825c083a assets/hexcasting/models/item/trinket_0_filled.json -e666a8f88dce284d5026f61814a19c5c8d49eda5 assets/hexcasting/models/item/trinket_1.json -35c7c9f46b05dc05002ac77f94b33f8da97238a1 assets/hexcasting/models/item/trinket_1_filled.json -678a892654958f87400c4d9afb1c5ed47692b77b assets/hexcasting/models/item/trinket_2.json -d8e372e768ca59566633f720ef7816eb34b13966 assets/hexcasting/models/item/trinket_2_filled.json -f8a08620915d5f1756b04c4e92d4e0324d381998 assets/hexcasting/models/item/trinket_3.json -cfc0260102aa161e893b0300ba6941c724cada9f assets/hexcasting/models/item/trinket_3_filled.json -d01e9a46398df5da17f651129b4c4c597cf1726c assets/hexcasting/models/item/trinket_4.json -bb6347ea5701bbccfc713f695f3722d218c52af2 assets/hexcasting/models/item/trinket_4_filled.json -90235641f09e4b1923c217f3c977427391daed6c assets/hexcasting/models/item/trinket_5.json -684800b5a011fe247f42ebc4829033a72030c55c assets/hexcasting/models/item/trinket_5_filled.json -d912708aa8de120d4598a62276f333ac096cdacb assets/hexcasting/models/item/trinket_6.json -24ad9a85ca790205f3e9e62ecb60bc8e50ac47fb assets/hexcasting/models/item/trinket_6_filled.json -b9d891572f572d76c0c0aef0afc3d3cb80f72c30 assets/hexcasting/models/item/trinket_7.json -4a8b82a628a3c4b16c4a45d3689799c8d9cf8bf8 assets/hexcasting/models/item/trinket_7_filled.json -c6523de66cbfae3a1e6361c635cc693a0a089bb3 assets/hexcasting/models/item/uuid_colorizer.json -c0af5573a4acb5eeacf49ab309d32b6f90ea8a5d assets/hexcasting/models/staff/acacia.json -1f90275c1d6829f0cdaf71f2c3b234c39cd7290d assets/hexcasting/models/staff/bamboo.json -ac7a4b95db8bde9da23dd4fa76d8086a67e166f8 assets/hexcasting/models/staff/birch.json -f7fca510f1f2c8ab5a90e96fa52abf717e3f836e assets/hexcasting/models/staff/cherry.json -b3f3fae3237d9f65d631fe3a6608ed76d9e0034d assets/hexcasting/models/staff/crimson.json -202de3e9a1bb7cd2ac2781937f4d03afe3947195 assets/hexcasting/models/staff/dark_oak.json -a03d8c4cd52afb51668450f0b47ef278bb75ebec assets/hexcasting/models/staff/edified.json -aab75291c6d8889394ab154cd8cfeed7d1cfe41f assets/hexcasting/models/staff/jungle.json -853408e94e104cd8a3ccbb1ec909f9e6bc9638df assets/hexcasting/models/staff/mangrove.json -7a73fc99460cdff11c717b165f2d5c69a7f96fb6 assets/hexcasting/models/staff/mindsplice.json -41d0396eae3b5511c513b33a186a8a76d3f89a3e assets/hexcasting/models/staff/oak.json -171cc4644ba9df07d79d08b06c482cf7c4c9e873 assets/hexcasting/models/staff/spruce.json -99de51b1596247aa3e5225d6199cbcdc9792c509 assets/hexcasting/models/staff/warped.json diff --git a/Common/src/generated/resources/.cache/d2fe5b6fab5fdc7ee7ca336c062752306bdf6128 b/Common/src/generated/resources/.cache/d2fe5b6fab5fdc7ee7ca336c062752306bdf6128 deleted file mode 100644 index cab0548eff..0000000000 --- a/Common/src/generated/resources/.cache/d2fe5b6fab5fdc7ee7ca336c062752306bdf6128 +++ /dev/null @@ -1,298 +0,0 @@ -// 1.20.1 2023-12-24T17:59:13.7624167 Block States: hexcasting -901e38574bdaa40ea4a0f6e773a88a95d9c03e55 assets/hexcasting/blockstates/akashic_bookshelf.json -32a77ef668198002563d68be35a24fa93c8d454a assets/hexcasting/blockstates/akashic_connector.json -85080ce0a0387583a839e4788517d675a1a35e24 assets/hexcasting/blockstates/akashic_record.json -04221253f80c85d1e19e9688cae5039f257c8d63 assets/hexcasting/blockstates/amethyst_bricks.json -3b4d0e25a44b9ac1582a969bdd435c3d436b8ba8 assets/hexcasting/blockstates/amethyst_bricks_small.json -1919f303e32e4ea395caa26c1e08c65cd2641e95 assets/hexcasting/blockstates/amethyst_dust_block.json -d422119401df3daae032f86ea740b6065a92c44c assets/hexcasting/blockstates/amethyst_edified_leaves.json -25990c171a75164aa282a23acae949b17173426d assets/hexcasting/blockstates/amethyst_pillar.json -276a70fa0e2b94ec3e2218015842b6e315157283 assets/hexcasting/blockstates/amethyst_sconce.json -09b6b22fecc577c4fcf4f7ad49f5d6907ef3d10a assets/hexcasting/blockstates/amethyst_tiles.json -65f7a4db6fa7616374ff814624231aec859d0a71 assets/hexcasting/blockstates/ancient_scroll_paper.json -236496e910696b68480a7b8a977434213fa2197a assets/hexcasting/blockstates/ancient_scroll_paper_lantern.json -2f2eb1130119f6d5f17a98082b727ec7a2ea5334 assets/hexcasting/blockstates/aventurine_edified_leaves.json -fa6dfbc40e5b9b22c01356e8a3848d242c414c02 assets/hexcasting/blockstates/citrine_edified_leaves.json -dc268e4c50e5e155fc5414a5f6b58ce1782bd39b assets/hexcasting/blockstates/conjured_block.json -dc268e4c50e5e155fc5414a5f6b58ce1782bd39b assets/hexcasting/blockstates/conjured_light.json -dffbe9894baae1c0c0dd3377659ce6fcb71ae634 assets/hexcasting/blockstates/directrix/boolean.json -b76cc8a2d66700417046c0dc671badd9af3eb519 assets/hexcasting/blockstates/directrix/empty.json -365eba1c32a7a33698120bc7f12670d29087e999 assets/hexcasting/blockstates/directrix/redstone.json -e125b73869a438bafa7f47cfa4c8d837e2463c6f assets/hexcasting/blockstates/edified_button.json -749d29dc5e11aeba703022dd66aad939d211a3b9 assets/hexcasting/blockstates/edified_door.json -cff9717cca70e2754bb4d0d5e695335e85adf212 assets/hexcasting/blockstates/edified_fence.json -05c8ef11fbde183dc9ed578b65d512df29c3b2f5 assets/hexcasting/blockstates/edified_fence_gate.json -9080ec8bb4142aa3f80775fb017d821585cdfeba assets/hexcasting/blockstates/edified_log.json -b9bbfe3288a699ef51ee0d21ec8e335f811353ca assets/hexcasting/blockstates/edified_log_amethyst.json -fc0f4407ef06ac962b5985db31800e05c8f1d1be assets/hexcasting/blockstates/edified_log_aventurine.json -56a1a09d9e755d5db882fad46c2c603037148f24 assets/hexcasting/blockstates/edified_log_citrine.json -1c6a336f3e975ef6c74a62f49f98af601f979a76 assets/hexcasting/blockstates/edified_log_purple.json -2a894cc506928113c967e65281950d91ca73ec50 assets/hexcasting/blockstates/edified_panel.json -61abf0ff91d33d51f2c1e0b5aace5580ad3ec5af assets/hexcasting/blockstates/edified_planks.json -b2c7e0d8dd5ef0e942a28363649a88e268f36ce2 assets/hexcasting/blockstates/edified_pressure_plate.json -8575021a4ed61c829470423042f161131064a178 assets/hexcasting/blockstates/edified_slab.json -9248c7ea41f577d5dbf925619a23a4bbc9c2779a assets/hexcasting/blockstates/edified_stairs.json -4bef86b0a11af8a909730ff300336f591b517370 assets/hexcasting/blockstates/edified_tile.json -fd14ab58c112e69b9072b68ded4f4adb0f454cf1 assets/hexcasting/blockstates/edified_trapdoor.json -e44322f1178e121b70f45e5242d5b0e9a11c211c assets/hexcasting/blockstates/edified_wood.json -b4c85725c8cddadffe0b80586dcd35a8d08b7f47 assets/hexcasting/blockstates/impetus/empty.json -26ef987c66677d44419ab44632f75813134b5752 assets/hexcasting/blockstates/impetus/look.json -d2c41f2997d018f2e8e095508378e6d9aa8d7b6c assets/hexcasting/blockstates/impetus/redstone.json -d7c50e1ce1a4219f22e1c1ac6b5a1e38ee16d0d7 assets/hexcasting/blockstates/impetus/rightclick.json -c41c3f2f39c9fa8a319a705e2183112df18cb4f8 assets/hexcasting/blockstates/quenched_allay.json -0cdb41c9716ca939f348876aebbb46921e490f0d assets/hexcasting/blockstates/quenched_allay_bricks.json -d595dc580e8c154c771131ab2ad0c982c1c6b280 assets/hexcasting/blockstates/quenched_allay_bricks_small.json -fb69a8b5507838f3e418a4f9724da20b73cfc2d0 assets/hexcasting/blockstates/quenched_allay_tiles.json -0aca7e2e67793a21ffc794c02fb2b22d02d2058a assets/hexcasting/blockstates/scroll_paper.json -e5c88e23be0552d4c06062510e8feeab510472ef assets/hexcasting/blockstates/scroll_paper_lantern.json -ef6b44bd2360926cb9dcde5bb3f1380385acea90 assets/hexcasting/blockstates/slate.json -9d2f430f379569c512ca80540bb0242f33066ed3 assets/hexcasting/blockstates/slate_amethyst_bricks.json -8de3b35109abb92bcd8f8ce0e05068abf37b0c27 assets/hexcasting/blockstates/slate_amethyst_bricks_small.json -b341fc5a5f113863b37bc3e0f4cb16d677a4baeb assets/hexcasting/blockstates/slate_amethyst_pillar.json -b52cc5b8ab2d301df1d220b2596b393a19a149fe assets/hexcasting/blockstates/slate_amethyst_tiles.json -571fe1d5dfdfd9dacd88bc6d04b1a10e01920bd9 assets/hexcasting/blockstates/slate_block.json -c8c732a2c32e0fbdd2d3c1f7de9d1633479f7ce1 assets/hexcasting/blockstates/slate_bricks.json -a67dc65f3b1e4035662154f0de32e33e2300ad3c assets/hexcasting/blockstates/slate_bricks_small.json -b4f572a104921eba369abe5c84af3682087067c9 assets/hexcasting/blockstates/slate_pillar.json -113b805c092cf5e62f0972056d0d53a591b5aae9 assets/hexcasting/blockstates/slate_tiles.json -13fc293e23c575b19f81f9c4bcd7131d2c34f678 assets/hexcasting/blockstates/stripped_edified_log.json -d66dd72dfbc57537c39d98cf221cc0bfd108dc47 assets/hexcasting/blockstates/stripped_edified_wood.json -b2f3c31e92c7ce6d5b42d95d7ece82b898a9f4f7 assets/hexcasting/models/block/akashic_bookshelf.json -4e925a9a46bd486e5d245dc88911ea57ef0b6319 assets/hexcasting/models/block/akashic_bookshelf_1.json -1a61088aa8efb77c9132bcd3fc69b1d7b9536603 assets/hexcasting/models/block/akashic_bookshelf_2.json -25f6c17cd7b73a83a86e4c15389722d7abfe737e assets/hexcasting/models/block/akashic_bookshelf_3.json -d3b9ed0fd896d96d9bf571ccf3e37d1101e5c162 assets/hexcasting/models/block/akashic_bookshelf_4.json -12871356fc4ecaff1247b7350de79b8783cec96c assets/hexcasting/models/block/akashic_bookshelf_empty.json -215f340a583d72345410c21c43691cd2d8c86724 assets/hexcasting/models/block/akashic_ligature.json -e2a738dede302484f7c8d19dde58c08f841f0432 assets/hexcasting/models/block/akashic_record.json -218a4e73a221eae6b0da7ecdd7f64c0532be46ee assets/hexcasting/models/block/amethyst_dust_block.json -031fefc08eaad4f0d5b7b4b23a0f311f5b5b84b4 assets/hexcasting/models/block/amethyst_edified_leaves.json -c0a2818ae1162e8b93d32a913602ba8523476695 assets/hexcasting/models/block/ancient_scroll_paper.json -77d0a5c4496678f96da5103b49777e612e3cba1e assets/hexcasting/models/block/ancient_scroll_paper_lantern.json -8b6de8cb9ccea9a8e4ce207f0b72048881c11da9 assets/hexcasting/models/block/aventurine_edified_leaves.json -bd1e5a7d3b5945c596919d7ec114d3904199d217 assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json -bd1e5a7d3b5945c596919d7ec114d3904199d217 assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json -bd1e5a7d3b5945c596919d7ec114d3904199d217 assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json -bd1e5a7d3b5945c596919d7ec114d3904199d217 assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json -bd1e5a7d3b5945c596919d7ec114d3904199d217 assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json -bd1e5a7d3b5945c596919d7ec114d3904199d217 assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json -76183d9b39ce0dff814befd20ee2681e4809607e assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json -76183d9b39ce0dff814befd20ee2681e4809607e assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json -76183d9b39ce0dff814befd20ee2681e4809607e assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json -76183d9b39ce0dff814befd20ee2681e4809607e assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json -76183d9b39ce0dff814befd20ee2681e4809607e assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json -76183d9b39ce0dff814befd20ee2681e4809607e assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json -0d757dfb13f75a2e7fb41b8a8f0281c2adfe56ec assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json -0d757dfb13f75a2e7fb41b8a8f0281c2adfe56ec assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json -0d757dfb13f75a2e7fb41b8a8f0281c2adfe56ec assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json -0d757dfb13f75a2e7fb41b8a8f0281c2adfe56ec assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json -0d757dfb13f75a2e7fb41b8a8f0281c2adfe56ec assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json -0d757dfb13f75a2e7fb41b8a8f0281c2adfe56ec assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json -2441d51bf7b8b81a1d930dc3adc7ad6b0f64024b assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json -7274390d61c51c344fc86870190f3d9ce2b58205 assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json -7274390d61c51c344fc86870190f3d9ce2b58205 assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json -7274390d61c51c344fc86870190f3d9ce2b58205 assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json -7274390d61c51c344fc86870190f3d9ce2b58205 assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json -7274390d61c51c344fc86870190f3d9ce2b58205 assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json -7274390d61c51c344fc86870190f3d9ce2b58205 assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json -598a6b87cfc622b59d7aa25e08173bfbba86cf9a assets/hexcasting/models/block/circle/directrix/empty/dim_down.json -598a6b87cfc622b59d7aa25e08173bfbba86cf9a assets/hexcasting/models/block/circle/directrix/empty/dim_east.json -598a6b87cfc622b59d7aa25e08173bfbba86cf9a assets/hexcasting/models/block/circle/directrix/empty/dim_north.json -598a6b87cfc622b59d7aa25e08173bfbba86cf9a assets/hexcasting/models/block/circle/directrix/empty/dim_south.json -598a6b87cfc622b59d7aa25e08173bfbba86cf9a assets/hexcasting/models/block/circle/directrix/empty/dim_up.json -598a6b87cfc622b59d7aa25e08173bfbba86cf9a assets/hexcasting/models/block/circle/directrix/empty/dim_west.json -0ed9f3f764e11eb313affb5de87b95d40011f631 assets/hexcasting/models/block/circle/directrix/empty/lit_down.json -0ed9f3f764e11eb313affb5de87b95d40011f631 assets/hexcasting/models/block/circle/directrix/empty/lit_east.json -0ed9f3f764e11eb313affb5de87b95d40011f631 assets/hexcasting/models/block/circle/directrix/empty/lit_north.json -0ed9f3f764e11eb313affb5de87b95d40011f631 assets/hexcasting/models/block/circle/directrix/empty/lit_south.json -0ed9f3f764e11eb313affb5de87b95d40011f631 assets/hexcasting/models/block/circle/directrix/empty/lit_up.json -0ed9f3f764e11eb313affb5de87b95d40011f631 assets/hexcasting/models/block/circle/directrix/empty/lit_west.json -5c22f605218b432555ebfbbc955ef4ca493fc56c assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json -5c22f605218b432555ebfbbc955ef4ca493fc56c assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json -5c22f605218b432555ebfbbc955ef4ca493fc56c assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json -5c22f605218b432555ebfbbc955ef4ca493fc56c assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json -5c22f605218b432555ebfbbc955ef4ca493fc56c assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json -5c22f605218b432555ebfbbc955ef4ca493fc56c assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json -5a61959d58c2e01b970aea64980b854f5611dd7c assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json -5a61959d58c2e01b970aea64980b854f5611dd7c assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json -5a61959d58c2e01b970aea64980b854f5611dd7c assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json -5a61959d58c2e01b970aea64980b854f5611dd7c assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json -5a61959d58c2e01b970aea64980b854f5611dd7c assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json -5a61959d58c2e01b970aea64980b854f5611dd7c assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json -985d84a2d334b491d50ab434bdb402d35d31420a assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json -985d84a2d334b491d50ab434bdb402d35d31420a assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json -985d84a2d334b491d50ab434bdb402d35d31420a assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json -985d84a2d334b491d50ab434bdb402d35d31420a assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json -985d84a2d334b491d50ab434bdb402d35d31420a assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json -985d84a2d334b491d50ab434bdb402d35d31420a assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json -04dd35d39851feb1b1203b698da39aef2f672e04 assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json -04dd35d39851feb1b1203b698da39aef2f672e04 assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json -04dd35d39851feb1b1203b698da39aef2f672e04 assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json -04dd35d39851feb1b1203b698da39aef2f672e04 assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json -04dd35d39851feb1b1203b698da39aef2f672e04 assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json -04dd35d39851feb1b1203b698da39aef2f672e04 assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json -85a51b4253b01a236df8c691364f14566b964b8e assets/hexcasting/models/block/circle/impetus/empty/dim_down.json -85a51b4253b01a236df8c691364f14566b964b8e assets/hexcasting/models/block/circle/impetus/empty/dim_east.json -85a51b4253b01a236df8c691364f14566b964b8e assets/hexcasting/models/block/circle/impetus/empty/dim_north.json -85a51b4253b01a236df8c691364f14566b964b8e assets/hexcasting/models/block/circle/impetus/empty/dim_south.json -85a51b4253b01a236df8c691364f14566b964b8e assets/hexcasting/models/block/circle/impetus/empty/dim_up.json -85a51b4253b01a236df8c691364f14566b964b8e assets/hexcasting/models/block/circle/impetus/empty/dim_west.json -fb79f0fe7547501799df7ef7cf75a961e698b587 assets/hexcasting/models/block/circle/impetus/empty/lit_down.json -fb79f0fe7547501799df7ef7cf75a961e698b587 assets/hexcasting/models/block/circle/impetus/empty/lit_east.json -fb79f0fe7547501799df7ef7cf75a961e698b587 assets/hexcasting/models/block/circle/impetus/empty/lit_north.json -fb79f0fe7547501799df7ef7cf75a961e698b587 assets/hexcasting/models/block/circle/impetus/empty/lit_south.json -fb79f0fe7547501799df7ef7cf75a961e698b587 assets/hexcasting/models/block/circle/impetus/empty/lit_up.json -fb79f0fe7547501799df7ef7cf75a961e698b587 assets/hexcasting/models/block/circle/impetus/empty/lit_west.json -d28458525ef81c9569d33d54d3894618ff4da5cc assets/hexcasting/models/block/circle/impetus/look/dim_down.json -d28458525ef81c9569d33d54d3894618ff4da5cc assets/hexcasting/models/block/circle/impetus/look/dim_east.json -d28458525ef81c9569d33d54d3894618ff4da5cc assets/hexcasting/models/block/circle/impetus/look/dim_north.json -d28458525ef81c9569d33d54d3894618ff4da5cc assets/hexcasting/models/block/circle/impetus/look/dim_south.json -d28458525ef81c9569d33d54d3894618ff4da5cc assets/hexcasting/models/block/circle/impetus/look/dim_up.json -d28458525ef81c9569d33d54d3894618ff4da5cc assets/hexcasting/models/block/circle/impetus/look/dim_west.json -00be1a3a61281180f9fb667df34546ad8151757c assets/hexcasting/models/block/circle/impetus/look/lit_down.json -00be1a3a61281180f9fb667df34546ad8151757c assets/hexcasting/models/block/circle/impetus/look/lit_east.json -00be1a3a61281180f9fb667df34546ad8151757c assets/hexcasting/models/block/circle/impetus/look/lit_north.json -00be1a3a61281180f9fb667df34546ad8151757c assets/hexcasting/models/block/circle/impetus/look/lit_south.json -00be1a3a61281180f9fb667df34546ad8151757c assets/hexcasting/models/block/circle/impetus/look/lit_up.json -00be1a3a61281180f9fb667df34546ad8151757c assets/hexcasting/models/block/circle/impetus/look/lit_west.json -035aa2a384760fcd7f52534d94b6f3227a53af68 assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json -035aa2a384760fcd7f52534d94b6f3227a53af68 assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json -035aa2a384760fcd7f52534d94b6f3227a53af68 assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json -035aa2a384760fcd7f52534d94b6f3227a53af68 assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json -035aa2a384760fcd7f52534d94b6f3227a53af68 assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json -035aa2a384760fcd7f52534d94b6f3227a53af68 assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json -6e20cc21d0275d00524135361b9e100d760cb345 assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json -6e20cc21d0275d00524135361b9e100d760cb345 assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json -6e20cc21d0275d00524135361b9e100d760cb345 assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json -6e20cc21d0275d00524135361b9e100d760cb345 assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json -6e20cc21d0275d00524135361b9e100d760cb345 assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json -6e20cc21d0275d00524135361b9e100d760cb345 assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json -a24e043229d8b278e0f70eb6b2ae4728a858f14b assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json -a24e043229d8b278e0f70eb6b2ae4728a858f14b assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json -a24e043229d8b278e0f70eb6b2ae4728a858f14b assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json -a24e043229d8b278e0f70eb6b2ae4728a858f14b assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json -a24e043229d8b278e0f70eb6b2ae4728a858f14b assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json -a24e043229d8b278e0f70eb6b2ae4728a858f14b assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json -b45b1e1ff5360c9bd5985bf6ea375df437da2b22 assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json -b45b1e1ff5360c9bd5985bf6ea375df437da2b22 assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json -b45b1e1ff5360c9bd5985bf6ea375df437da2b22 assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json -b45b1e1ff5360c9bd5985bf6ea375df437da2b22 assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json -b45b1e1ff5360c9bd5985bf6ea375df437da2b22 assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json -b45b1e1ff5360c9bd5985bf6ea375df437da2b22 assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json -7b47963b4fb1598595cc972f8ac6a38d542c6cf8 assets/hexcasting/models/block/citrine_edified_leaves.json -8b556039d842c21d8cb4cb902aaa5ab6f657a566 assets/hexcasting/models/block/conjured.json -663e744436e300ccead6a7865c72beb86a12532b assets/hexcasting/models/block/deco/amethyst_bricks.json -8db7e7dff6590f9031718c0513e3d75f92ff2525 assets/hexcasting/models/block/deco/amethyst_bricks_small.json -4ba75056f28a3a9ea0c69eb4bd7167a43bd31d74 assets/hexcasting/models/block/deco/amethyst_pillar.json -498da886ef9ba804d18e9a9ebad2acce0efb4ac2 assets/hexcasting/models/block/deco/amethyst_tiles.json -11ed17c8196b894e7f46f72f58fae1286dec4636 assets/hexcasting/models/block/deco/slate_amethyst_bricks_0.json -a04e6772e19e0803217bad644b0f2b2d342cc0fb assets/hexcasting/models/block/deco/slate_amethyst_bricks_1.json -ea05d80cfd1b19be57a04502948bd72f6b39810f assets/hexcasting/models/block/deco/slate_amethyst_bricks_2.json -c7ace7614fedaa48a07e573948d3265eb9baf399 assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_0.json -6060174b4ee67529c5159a95b1d9a4dc29939558 assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_1.json -e7737a9b49cf47235ce4bc5661ae511fb5502f02 assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_2.json -7232b88842fa67b4d3c49d4080623c758f85d8cd assets/hexcasting/models/block/deco/slate_amethyst_tiles.json -d8cda16f0554a97039096a7c2fba50044bd5d0fa assets/hexcasting/models/block/deco/slate_bricks.json -099367e64dea6cef0399ccb30293e56030a5dc20 assets/hexcasting/models/block/deco/slate_bricks_small.json -606a997b09ab7b1b0b6ddf754b583bd7fceb2e46 assets/hexcasting/models/block/deco/slate_tiles.json -d04e6e7976a44e4286f0693a0ea173bc08525c6d assets/hexcasting/models/block/edified_button.json -79b149288702e1239dee1f94f8562f8c37410d14 assets/hexcasting/models/block/edified_button_pressed.json -b13efe9e1aade0163a8d378184a19a639b98c460 assets/hexcasting/models/block/edified_door_bottom_left.json -1e138fe4503fa0d37713ff5b76e8ff82090e8e8e assets/hexcasting/models/block/edified_door_bottom_left_open.json -3d001d0388fd3287ad14dca7eac1581c5ce75b0c assets/hexcasting/models/block/edified_door_bottom_right.json -9dd09e2267b2ae77314c86b1ea1c7406b5b25ce2 assets/hexcasting/models/block/edified_door_bottom_right_open.json -5525ac927fa8165243862504325be6219b40a968 assets/hexcasting/models/block/edified_door_top_left.json -11922c18e84d393bc99380d52c187bbaa6079359 assets/hexcasting/models/block/edified_door_top_left_open.json -729cf57ba13bf915999b4297aadb2ef6848d0337 assets/hexcasting/models/block/edified_door_top_right.json -db3008a51e611ee3ffb86b5829df6b7da6bfcc61 assets/hexcasting/models/block/edified_door_top_right_open.json -04bc3e2c715f624bb873e3abd5c6fcb33dd09f49 assets/hexcasting/models/block/edified_fence_gate.json -27dee730d090c1049e80c3870941ec35a3a8605e assets/hexcasting/models/block/edified_fence_gate_open.json -039ef4a7c1b07295a15bce55e4f779d517491ea5 assets/hexcasting/models/block/edified_fence_gate_wall.json -0cb10fa56c56ed495e13572d964862bccb24d8c4 assets/hexcasting/models/block/edified_fence_gate_wall_open.json -380b40dab77e4a86043723678071f924c3927928 assets/hexcasting/models/block/edified_fence_post.json -f185f0483b97314b9d5ab9e14dc787456532ec27 assets/hexcasting/models/block/edified_fence_side.json -c5433d0b5c9f039ae3c314c8a82c7e1d3238447d assets/hexcasting/models/block/edified_log.json -4e779dbe1d8dfcb2d500bf43d71ecf0bd0104eac assets/hexcasting/models/block/edified_log_amethyst.json -5c9d3a002deae195ba8bff03ac106c302d36792d assets/hexcasting/models/block/edified_log_amethyst_horizontal.json -a470e058329c844661a8011393b57d00efa1fe09 assets/hexcasting/models/block/edified_log_aventurine.json -20695e3c99b52b7738e96c57659bb358dbe9f9ec assets/hexcasting/models/block/edified_log_aventurine_horizontal.json -c38df07b2dada3843ce9399b244d2b9ecdb8faf2 assets/hexcasting/models/block/edified_log_citrine.json -df0e644143c2e50e1f165e89223796a758feb685 assets/hexcasting/models/block/edified_log_citrine_horizontal.json -71f1505d8255e1d57b8a9100b008dbaf73beacdc assets/hexcasting/models/block/edified_log_horizontal.json -231d3d0651bc8525e45f1c9a6bdcd0292b7209b4 assets/hexcasting/models/block/edified_log_purple.json -3cbf60f5ff164e84ae1224520f991a53c1177c14 assets/hexcasting/models/block/edified_log_purple_horizontal.json -e691e8592c9ba75a2c67979ebef11e1c9280075b assets/hexcasting/models/block/edified_panel.json -7dbd6ab538ab6452c981275976d698a8cd7f5636 assets/hexcasting/models/block/edified_planks.json -e291a8a550c6a31e1e11cdd590129d2b61aa3f36 assets/hexcasting/models/block/edified_planks_2.json -6e1b863df2d27342f28d10fc7fbf06e085c8e24d assets/hexcasting/models/block/edified_planks_3.json -dfd5d21b09dea57135e50dc025a1652c9eb74a29 assets/hexcasting/models/block/edified_pressure_plate.json -66dbbb738f9eb7809bf7a910331e9e4ea3cf8e32 assets/hexcasting/models/block/edified_pressure_plate_down.json -342a95e8e3964ee1f913562156d16f48f23712c7 assets/hexcasting/models/block/edified_slab.json -69762fa82b5ee7e17a63b11897ce660734627ca8 assets/hexcasting/models/block/edified_slab_top.json -113060f86214e17a3c1e96d75b06bb534a18a37d assets/hexcasting/models/block/edified_stairs.json -fbd8b3a4e77e4488e25e5b49e4ef7dcb73eb4785 assets/hexcasting/models/block/edified_stairs_inner.json -f0100add1e9997b68bc2e910da63e5a772959486 assets/hexcasting/models/block/edified_stairs_outer.json -e76164c5fd831acccf914c7f05d7fe9639c27c30 assets/hexcasting/models/block/edified_tile.json -abca4332771fe0c3e24b6624907b3206d8cb02f4 assets/hexcasting/models/block/edified_trapdoor_bottom.json -807d363ca1fffe9af1c40319a8c2338822b54f31 assets/hexcasting/models/block/edified_trapdoor_open.json -ba95ea7a856895ca2a3438293b79fe4798b212ad assets/hexcasting/models/block/edified_trapdoor_top.json -d4f286180e320c0ca819067b9e9a9b1db7f72e0a assets/hexcasting/models/block/edified_wood.json -b2e1617c6549ffdf0a38bfbb6e9270a54c7a2718 assets/hexcasting/models/block/edified_wood_horizontal.json -9af2754cb1e53eeaa85618cf92651b4878cf62b1 assets/hexcasting/models/block/quenched_allay.json -2fc68dcd6d73da3deaa6a33240dd9160a2b79592 assets/hexcasting/models/block/quenched_allay_bricks.json -669d9348f4581dae45c35268a760675509a89a29 assets/hexcasting/models/block/quenched_allay_bricks_small.json -bacd99e8c24b9ce004e8aeff509cca4b971f3ed9 assets/hexcasting/models/block/quenched_allay_tiles.json -12ef9da44a265e8aa92d4c37d26fa0777493629e assets/hexcasting/models/block/scroll_paper.json -4f0924c356f9d7bccc490344944d44010ea7e918 assets/hexcasting/models/block/scroll_paper_lantern.json -e450fafba8beee7b800376ed54ff7c3ff7db5faf assets/hexcasting/models/block/slate_amethyst_pillar.json -c68d869d5320b9304ed301a3ce6dfa7dbea74747 assets/hexcasting/models/block/slate_amethyst_pillar_horizontal.json -603ffa587a335cf23e2bb17604583c6ad6f436b8 assets/hexcasting/models/block/slate_block.json -e7481aed52721e3893c4fa70341d696992223c25 assets/hexcasting/models/block/slate_pillar.json -5cfe93a217031aff9db6c9067c56d2366b13ac7e assets/hexcasting/models/block/slate_pillar_horizontal.json -a5081ed63f45e689df2c2d6a6c1283bfcd89f20f assets/hexcasting/models/block/stripped_edified_log.json -e5484f6caf6bea67cc8a447c202a4f1dc11957db assets/hexcasting/models/block/stripped_edified_log_horizontal.json -4495b24baf73ef0aaf930a136bf0052398aad1b3 assets/hexcasting/models/block/stripped_edified_wood.json -ca5cd940b68d928845dc2d104da3dda8d15e45dd assets/hexcasting/models/block/stripped_edified_wood_horizontal.json -19a6005af10d0812e8c861053f5863e6e04af3ba assets/hexcasting/models/item/akashic_bookshelf.json -faf66c95b0725ee747c4e510414522121d9f80eb assets/hexcasting/models/item/akashic_connector.json -19730853397b109cfedd0c3bbda83d5de6cd15b9 assets/hexcasting/models/item/akashic_record.json -b5ddad23811e2f51a036c497dbe2e9f569801e79 assets/hexcasting/models/item/amethyst_bricks.json -f41f6f46a5a37e757eb4e4df3b10f68fc86efe66 assets/hexcasting/models/item/amethyst_bricks_small.json -951a9945880de02cae20c1afaf38b16b21194dd1 assets/hexcasting/models/item/amethyst_dust_block.json -144aa423e08987551a34aff969884a11c4efbff7 assets/hexcasting/models/item/amethyst_edified_leaves.json -f81fdf1ffe88fab521b34901e983cd4836ce4529 assets/hexcasting/models/item/amethyst_sconce.json -fa23967e352823f0fc9e2bdd11a9cbac7c47b135 assets/hexcasting/models/item/amethyst_tiles.json -1d0a961ead6b43d20c621b351532656bf3a0d6d2 assets/hexcasting/models/item/ancient_scroll_paper.json -d4a109488c27fc5d60e9054cd1485f1982040ff3 assets/hexcasting/models/item/ancient_scroll_paper_lantern.json -7c2b9b5296ba5e3c261bb237555e7d4082ad9303 assets/hexcasting/models/item/aventurine_edified_leaves.json -50b0a55c712887ceb02bc835a1111cf855c11b6e assets/hexcasting/models/item/citrine_edified_leaves.json -25a1386a5f4fca414f0e2509ce489616b24b9c9c assets/hexcasting/models/item/directrix/boolean.json -c24d9c5ec6c7f3212ea814ecd40e56bdc94c22a8 assets/hexcasting/models/item/directrix/empty.json -c84399ca55a1ac9b37ed4b8153b4469fa5ed9c5a assets/hexcasting/models/item/directrix/redstone.json -96e1cd457414bddbddda1383564c6a566808f958 assets/hexcasting/models/item/edified_panel.json -82bac5442c940fb74e1ad068a9c8df1d0e10d959 assets/hexcasting/models/item/edified_planks.json -3e55be12a83ab041f8e269ad4e40454e32e05421 assets/hexcasting/models/item/edified_tile.json -486c1fad6dd0bf76f160d157439e6d4add950ff8 assets/hexcasting/models/item/impetus/empty.json -cbe5bc7148b9e1c1cf5c4517801da664aa39efb8 assets/hexcasting/models/item/impetus/look.json -37ae2de56929989d8c44ba0d72e1623c2056c397 assets/hexcasting/models/item/impetus/redstone.json -e7f590cfc681aa7d19c56df325c95c5fbed01bc5 assets/hexcasting/models/item/impetus/rightclick.json -769dcfb4a504e4dcd28a43cf603a18c66f57e594 assets/hexcasting/models/item/scroll_paper.json -222e40e5754f5cb5a04321c4ed4cee27748c9224 assets/hexcasting/models/item/scroll_paper_lantern.json -e5b07f23ead1bba9ee5a3b86a9e520da883ba331 assets/hexcasting/models/item/slate_amethyst_bricks.json -826f953fdee668104ec1772941c56332e12dbc46 assets/hexcasting/models/item/slate_amethyst_bricks_small.json -a179178b90c8650b7906ce3aa302623bf3c427b7 assets/hexcasting/models/item/slate_amethyst_tiles.json -145db42b0d90bdb4fd82f5a7eea229be4c0f9675 assets/hexcasting/models/item/slate_block.json -eef72354b37ba0940ecf1e0cc5219cc15a6886a6 assets/hexcasting/models/item/slate_bricks.json -cb5ccddcc3654021fc134867303483bd135db65c assets/hexcasting/models/item/slate_bricks_small.json -71c735cca7c0b8c4e55b31fd87e46982552db135 assets/hexcasting/models/item/slate_tiles.json diff --git a/Common/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 b/Common/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 deleted file mode 100644 index 4c5fd592d7..0000000000 --- a/Common/src/generated/resources/.cache/e5c5eb35b4ba40351ecb7d9f04c3527f2f5779b0 +++ /dev/null @@ -1,17 +0,0 @@ -// 1.20.1 2024-10-01T23:18:15.2302045 Advancements -4016b178322c4784c12c66c227d5b4ff2e43d32d data/hexcasting/advancements/aaa_wasteful_cast.json -6469361b24f473b4d7d900828e6bbf2bdabf916b data/hexcasting/advancements/aab_big_cast.json -b4b921ec01322795b41e88406685c3ab7c7d09cc data/hexcasting/advancements/creative_unlocker.json -e02605ac2dff5c426e1d0a58d46daefecda11946 data/hexcasting/advancements/enlightenment.json -e2679742ac4e23ba4c79c17d209f16d42d7bccd8 data/hexcasting/advancements/lore.json -6c3fc955783d450e12494b193e985a403b203f0a data/hexcasting/advancements/lore/cardamom1.json -2191ef660f29f328fbdb3baca4f33585045c999e data/hexcasting/advancements/lore/cardamom2.json -fccce07d88f98719750516d2dbbc7ed186769c80 data/hexcasting/advancements/lore/cardamom3.json -cee68eb79ae27b6a83a25cf014d19c6bc4575cc0 data/hexcasting/advancements/lore/cardamom4.json -752744633e3b9500baebd5a4f8fa35e0c2d79ede data/hexcasting/advancements/lore/cardamom5.json -5898f7083f74a490b100b0a2282df242548baf7c data/hexcasting/advancements/lore/experiment1.json -8985672cbf68098dc416fd1f9e69d46212d04512 data/hexcasting/advancements/lore/experiment2.json -841c8eb27ad70aeaf0c9f7936fc8460cca0996fb data/hexcasting/advancements/lore/inventory.json -d273b4dc581c0029cde2208e264a6d32492cd18f data/hexcasting/advancements/opened_eyes.json -1cac020fa7b47ff386e7492f49e27803d506825d data/hexcasting/advancements/root.json -e4cee07b5809ebf27f1c1d48f66856153f7088f4 data/hexcasting/advancements/y_u_no_cast_angy.json diff --git a/Common/src/generated/resources/assets/hexcasting/blockstates/akashic_connector.json b/Common/src/generated/resources/assets/hexcasting/blockstates/akashic_ligature.json similarity index 100% rename from Common/src/generated/resources/assets/hexcasting/blockstates/akashic_connector.json rename to Common/src/generated/resources/assets/hexcasting/blockstates/akashic_ligature.json diff --git a/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json b/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json index 10507061f7..af52410929 100644 --- a/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json +++ b/Common/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json @@ -1,30 +1,7 @@ { "variants": { - "facing=down": { - "model": "hexcasting:block/amethyst_sconce", - "x": 180 - }, - "facing=east": { - "model": "hexcasting:block/amethyst_sconce", - "x": 90, - "y": 90 - }, - "facing=north": { - "model": "hexcasting:block/amethyst_sconce", - "x": 90 - }, - "facing=south": { - "model": "hexcasting:block/amethyst_sconce", - "x": 90, - "y": 180 - }, - "facing=up": { + "": { "model": "hexcasting:block/amethyst_sconce" - }, - "facing=west": { - "model": "hexcasting:block/amethyst_sconce", - "x": 90, - "y": 270 } } } \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json index 59d6517a5e..c132d88be4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json index 59d6517a5e..c132d88be4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json index 59d6517a5e..c132d88be4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json index 59d6517a5e..c132d88be4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json index 59d6517a5e..c132d88be4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json index 59d6517a5e..c132d88be4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json index 70f47f0263..3477cd9b15 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json index 70f47f0263..3477cd9b15 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json index 70f47f0263..3477cd9b15 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json index 70f47f0263..3477cd9b15 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json index 70f47f0263..3477cd9b15 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json index 70f47f0263..3477cd9b15 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json index 618362394c..ccc4319820 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json index 618362394c..ccc4319820 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json index 618362394c..ccc4319820 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json index 618362394c..ccc4319820 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json index 618362394c..ccc4319820 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json index 618362394c..ccc4319820 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_false", "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_false", "west": "hexcasting:block/circle/directrix/boolean/right_false" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json index ec90eae94b..20c3b6cedf 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_neither", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_not_true", "up": "hexcasting:block/circle/directrix/boolean/top_neither", "west": "hexcasting:block/circle/directrix/boolean/right_neither" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json index 0eac9a0e36..5c453220fd 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json index 0eac9a0e36..5c453220fd 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json index 0eac9a0e36..5c453220fd 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json index 0eac9a0e36..5c453220fd 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json index 0eac9a0e36..5c453220fd 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json index 0eac9a0e36..5c453220fd 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/boolean/left_true", "north": "hexcasting:block/circle/directrix/boolean/front_not_false", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", "up": "hexcasting:block/circle/directrix/boolean/top_true", "west": "hexcasting:block/circle/directrix/boolean/right_true" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json index 0cf00e0267..8178542bf4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_dim", "north": "hexcasting:block/circle/directrix/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_dim", "up": "hexcasting:block/circle/directrix/empty/top_dim", "west": "hexcasting:block/circle/directrix/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json index 0cf00e0267..8178542bf4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_dim", "north": "hexcasting:block/circle/directrix/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_dim", "up": "hexcasting:block/circle/directrix/empty/top_dim", "west": "hexcasting:block/circle/directrix/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json index 0cf00e0267..8178542bf4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_dim", "north": "hexcasting:block/circle/directrix/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_dim", "up": "hexcasting:block/circle/directrix/empty/top_dim", "west": "hexcasting:block/circle/directrix/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json index 0cf00e0267..8178542bf4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_dim", "north": "hexcasting:block/circle/directrix/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_dim", "up": "hexcasting:block/circle/directrix/empty/top_dim", "west": "hexcasting:block/circle/directrix/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json index 0cf00e0267..8178542bf4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_dim", "north": "hexcasting:block/circle/directrix/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_dim", "up": "hexcasting:block/circle/directrix/empty/top_dim", "west": "hexcasting:block/circle/directrix/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json index 0cf00e0267..8178542bf4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_dim", "north": "hexcasting:block/circle/directrix/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_dim", "up": "hexcasting:block/circle/directrix/empty/top_dim", "west": "hexcasting:block/circle/directrix/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json index f4f0467931..8da64102c4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_lit", "north": "hexcasting:block/circle/directrix/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_lit", "up": "hexcasting:block/circle/directrix/empty/top_lit", "west": "hexcasting:block/circle/directrix/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json index f4f0467931..8da64102c4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_lit", "north": "hexcasting:block/circle/directrix/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_lit", "up": "hexcasting:block/circle/directrix/empty/top_lit", "west": "hexcasting:block/circle/directrix/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json index f4f0467931..8da64102c4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_lit", "north": "hexcasting:block/circle/directrix/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_lit", "up": "hexcasting:block/circle/directrix/empty/top_lit", "west": "hexcasting:block/circle/directrix/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json index f4f0467931..8da64102c4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_lit", "north": "hexcasting:block/circle/directrix/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_lit", "up": "hexcasting:block/circle/directrix/empty/top_lit", "west": "hexcasting:block/circle/directrix/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json index f4f0467931..8da64102c4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_lit", "north": "hexcasting:block/circle/directrix/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_lit", "up": "hexcasting:block/circle/directrix/empty/top_lit", "west": "hexcasting:block/circle/directrix/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json index f4f0467931..8da64102c4 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/empty/left_lit", "north": "hexcasting:block/circle/directrix/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/empty/back_lit", "up": "hexcasting:block/circle/directrix/empty/top_lit", "west": "hexcasting:block/circle/directrix/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json index 0100db33b8..adb3eb5128 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json index 0100db33b8..adb3eb5128 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json index 0100db33b8..adb3eb5128 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json index 0100db33b8..adb3eb5128 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json index 0100db33b8..adb3eb5128 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json index 0100db33b8..adb3eb5128 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json index dbdd0a7e28..c191d8a113 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json index dbdd0a7e28..c191d8a113 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json index dbdd0a7e28..c191d8a113 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json index dbdd0a7e28..c191d8a113 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json index dbdd0a7e28..c191d8a113 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json index dbdd0a7e28..c191d8a113 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json index 5ba4750e26..97d3da2808 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json index 5ba4750e26..97d3da2808 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json index 5ba4750e26..97d3da2808 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json index 5ba4750e26..97d3da2808 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json index 5ba4750e26..97d3da2808 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json index 5ba4750e26..97d3da2808 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_powered", "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", "up": "hexcasting:block/circle/directrix/redstone/top_powered", "west": "hexcasting:block/circle/directrix/redstone/right_powered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json index e597b41daa..722076a071 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json index e597b41daa..722076a071 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json index e597b41daa..722076a071 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json index e597b41daa..722076a071 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json index e597b41daa..722076a071 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json index e597b41daa..722076a071 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json index a4c86b9217..479ee7c42b 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_dim", "north": "hexcasting:block/circle/impetus/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/empty/top_dim", "west": "hexcasting:block/circle/impetus/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json index a4c86b9217..479ee7c42b 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_dim", "north": "hexcasting:block/circle/impetus/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/empty/top_dim", "west": "hexcasting:block/circle/impetus/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json index a4c86b9217..479ee7c42b 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_dim", "north": "hexcasting:block/circle/impetus/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/empty/top_dim", "west": "hexcasting:block/circle/impetus/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json index a4c86b9217..479ee7c42b 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_dim", "north": "hexcasting:block/circle/impetus/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/empty/top_dim", "west": "hexcasting:block/circle/impetus/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json index a4c86b9217..479ee7c42b 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_dim", "north": "hexcasting:block/circle/impetus/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/empty/top_dim", "west": "hexcasting:block/circle/impetus/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json index a4c86b9217..479ee7c42b 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_dim", "north": "hexcasting:block/circle/impetus/empty/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/empty/top_dim", "west": "hexcasting:block/circle/impetus/empty/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json index 7a57e354a9..1fb7369cd2 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_lit", "north": "hexcasting:block/circle/impetus/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/empty/top_lit", "west": "hexcasting:block/circle/impetus/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json index 7a57e354a9..1fb7369cd2 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_lit", "north": "hexcasting:block/circle/impetus/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/empty/top_lit", "west": "hexcasting:block/circle/impetus/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json index 7a57e354a9..1fb7369cd2 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_lit", "north": "hexcasting:block/circle/impetus/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/empty/top_lit", "west": "hexcasting:block/circle/impetus/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json index 7a57e354a9..1fb7369cd2 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_lit", "north": "hexcasting:block/circle/impetus/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/empty/top_lit", "west": "hexcasting:block/circle/impetus/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json index 7a57e354a9..1fb7369cd2 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_lit", "north": "hexcasting:block/circle/impetus/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/empty/top_lit", "west": "hexcasting:block/circle/impetus/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json index 7a57e354a9..1fb7369cd2 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/empty/left_lit", "north": "hexcasting:block/circle/impetus/empty/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/empty/top_lit", "west": "hexcasting:block/circle/impetus/empty/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json index 25c889223f..76165760a5 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_dim", "north": "hexcasting:block/circle/impetus/look/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/look/top_dim", "west": "hexcasting:block/circle/impetus/look/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json index 25c889223f..76165760a5 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_dim", "north": "hexcasting:block/circle/impetus/look/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/look/top_dim", "west": "hexcasting:block/circle/impetus/look/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json index 25c889223f..76165760a5 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_dim", "north": "hexcasting:block/circle/impetus/look/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/look/top_dim", "west": "hexcasting:block/circle/impetus/look/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json index 25c889223f..76165760a5 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_dim", "north": "hexcasting:block/circle/impetus/look/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/look/top_dim", "west": "hexcasting:block/circle/impetus/look/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json index 25c889223f..76165760a5 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_dim", "north": "hexcasting:block/circle/impetus/look/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/look/top_dim", "west": "hexcasting:block/circle/impetus/look/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json index 25c889223f..76165760a5 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_dim", "north": "hexcasting:block/circle/impetus/look/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/look/top_dim", "west": "hexcasting:block/circle/impetus/look/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json index f2514c5742..504eba8930 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_lit", "north": "hexcasting:block/circle/impetus/look/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/look/top_lit", "west": "hexcasting:block/circle/impetus/look/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json index f2514c5742..504eba8930 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_lit", "north": "hexcasting:block/circle/impetus/look/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/look/top_lit", "west": "hexcasting:block/circle/impetus/look/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json index f2514c5742..504eba8930 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_lit", "north": "hexcasting:block/circle/impetus/look/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/look/top_lit", "west": "hexcasting:block/circle/impetus/look/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json index f2514c5742..504eba8930 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_lit", "north": "hexcasting:block/circle/impetus/look/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/look/top_lit", "west": "hexcasting:block/circle/impetus/look/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json index f2514c5742..504eba8930 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_lit", "north": "hexcasting:block/circle/impetus/look/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/look/top_lit", "west": "hexcasting:block/circle/impetus/look/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json index f2514c5742..504eba8930 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/look/left_lit", "north": "hexcasting:block/circle/impetus/look/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/look/top_lit", "west": "hexcasting:block/circle/impetus/look/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json index c46569cd8c..71ea895f6a 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_dim", "north": "hexcasting:block/circle/impetus/redstone/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/redstone/top_dim", "west": "hexcasting:block/circle/impetus/redstone/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json index c46569cd8c..71ea895f6a 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_dim", "north": "hexcasting:block/circle/impetus/redstone/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/redstone/top_dim", "west": "hexcasting:block/circle/impetus/redstone/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json index c46569cd8c..71ea895f6a 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_dim", "north": "hexcasting:block/circle/impetus/redstone/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/redstone/top_dim", "west": "hexcasting:block/circle/impetus/redstone/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json index c46569cd8c..71ea895f6a 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_dim", "north": "hexcasting:block/circle/impetus/redstone/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/redstone/top_dim", "west": "hexcasting:block/circle/impetus/redstone/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json index c46569cd8c..71ea895f6a 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_dim", "north": "hexcasting:block/circle/impetus/redstone/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/redstone/top_dim", "west": "hexcasting:block/circle/impetus/redstone/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json index c46569cd8c..71ea895f6a 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_dim", "north": "hexcasting:block/circle/impetus/redstone/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/redstone/top_dim", "west": "hexcasting:block/circle/impetus/redstone/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json index 1f6d0d72fe..12630ca3cb 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_lit", "north": "hexcasting:block/circle/impetus/redstone/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/redstone/top_lit", "west": "hexcasting:block/circle/impetus/redstone/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json index 1f6d0d72fe..12630ca3cb 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_lit", "north": "hexcasting:block/circle/impetus/redstone/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/redstone/top_lit", "west": "hexcasting:block/circle/impetus/redstone/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json index 1f6d0d72fe..12630ca3cb 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_lit", "north": "hexcasting:block/circle/impetus/redstone/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/redstone/top_lit", "west": "hexcasting:block/circle/impetus/redstone/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json index 1f6d0d72fe..12630ca3cb 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_lit", "north": "hexcasting:block/circle/impetus/redstone/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/redstone/top_lit", "west": "hexcasting:block/circle/impetus/redstone/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json index 1f6d0d72fe..12630ca3cb 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_lit", "north": "hexcasting:block/circle/impetus/redstone/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/redstone/top_lit", "west": "hexcasting:block/circle/impetus/redstone/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json index 1f6d0d72fe..12630ca3cb 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/redstone/left_lit", "north": "hexcasting:block/circle/impetus/redstone/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/redstone/top_lit", "west": "hexcasting:block/circle/impetus/redstone/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json index f25b1aa354..c5fdbc02b0 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_dim", "north": "hexcasting:block/circle/impetus/rightclick/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/rightclick/top_dim", "west": "hexcasting:block/circle/impetus/rightclick/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json index f25b1aa354..c5fdbc02b0 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_dim", "north": "hexcasting:block/circle/impetus/rightclick/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/rightclick/top_dim", "west": "hexcasting:block/circle/impetus/rightclick/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json index f25b1aa354..c5fdbc02b0 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_dim", "north": "hexcasting:block/circle/impetus/rightclick/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/rightclick/top_dim", "west": "hexcasting:block/circle/impetus/rightclick/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json index f25b1aa354..c5fdbc02b0 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_dim", "north": "hexcasting:block/circle/impetus/rightclick/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/rightclick/top_dim", "west": "hexcasting:block/circle/impetus/rightclick/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json index f25b1aa354..c5fdbc02b0 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_dim", "north": "hexcasting:block/circle/impetus/rightclick/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/rightclick/top_dim", "west": "hexcasting:block/circle/impetus/rightclick/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json index f25b1aa354..c5fdbc02b0 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_dim", "north": "hexcasting:block/circle/impetus/rightclick/front_dim", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_dim", "up": "hexcasting:block/circle/impetus/rightclick/top_dim", "west": "hexcasting:block/circle/impetus/rightclick/right_dim" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json index b55b1f7a90..3840e6cb08 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_lit", "north": "hexcasting:block/circle/impetus/rightclick/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/rightclick/top_lit", "west": "hexcasting:block/circle/impetus/rightclick/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json index b55b1f7a90..3840e6cb08 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_lit", "north": "hexcasting:block/circle/impetus/rightclick/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/rightclick/top_lit", "west": "hexcasting:block/circle/impetus/rightclick/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json index b55b1f7a90..3840e6cb08 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_lit", "north": "hexcasting:block/circle/impetus/rightclick/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/rightclick/top_lit", "west": "hexcasting:block/circle/impetus/rightclick/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json index b55b1f7a90..3840e6cb08 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_lit", "north": "hexcasting:block/circle/impetus/rightclick/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/rightclick/top_lit", "west": "hexcasting:block/circle/impetus/rightclick/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json index b55b1f7a90..3840e6cb08 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_lit", "north": "hexcasting:block/circle/impetus/rightclick/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/rightclick/top_lit", "west": "hexcasting:block/circle/impetus/rightclick/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json index b55b1f7a90..3840e6cb08 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json @@ -4,7 +4,7 @@ "down": "hexcasting:block/circle/bottom", "east": "hexcasting:block/circle/impetus/rightclick/left_lit", "north": "hexcasting:block/circle/impetus/rightclick/front_lit", - "particle": "hexcasting:block/slate", + "particle": "hexcasting:block/slate_block", "south": "hexcasting:block/circle/impetus/back_lit", "up": "hexcasting:block/circle/impetus/rightclick/top_lit", "west": "hexcasting:block/circle/impetus/rightclick/right_lit" diff --git a/Common/src/generated/resources/assets/hexcasting/models/block/slate_block.json b/Common/src/generated/resources/assets/hexcasting/models/block/slate_block.json index 0afe24d83a..2d8635f925 100644 --- a/Common/src/generated/resources/assets/hexcasting/models/block/slate_block.json +++ b/Common/src/generated/resources/assets/hexcasting/models/block/slate_block.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/cube_all", "textures": { - "all": "hexcasting:block/slate" + "all": "hexcasting:block/slate_block" } } \ No newline at end of file diff --git a/Common/src/generated/resources/assets/hexcasting/models/item/akashic_connector.json b/Common/src/generated/resources/assets/hexcasting/models/item/akashic_ligature.json similarity index 100% rename from Common/src/generated/resources/assets/hexcasting/models/item/akashic_connector.json rename to Common/src/generated/resources/assets/hexcasting/models/item/akashic_ligature.json diff --git a/Neoforge/src/generated/resources/data/create/tags/blocks/brittle.json b/Common/src/generated/resources/data/create/tags/block/brittle.json similarity index 100% rename from Neoforge/src/generated/resources/data/create/tags/blocks/brittle.json rename to Common/src/generated/resources/data/create/tags/block/brittle.json diff --git a/Neoforge/src/generated/resources/data/forge/tags/items/dusts/amethyst.json b/Common/src/generated/resources/data/forge/tags/item/dusts/amethyst.json similarity index 100% rename from Neoforge/src/generated/resources/data/forge/tags/items/dusts/amethyst.json rename to Common/src/generated/resources/data/forge/tags/item/dusts/amethyst.json diff --git a/Neoforge/src/generated/resources/data/forge/tags/items/gems.json b/Common/src/generated/resources/data/forge/tags/item/gems.json similarity index 100% rename from Neoforge/src/generated/resources/data/forge/tags/items/gems.json rename to Common/src/generated/resources/data/forge/tags/item/gems.json diff --git a/Common/src/generated/resources/data/hexcasting/advancements/aaa_wasteful_cast.json b/Common/src/generated/resources/data/hexcasting/advancement/aaa_wasteful_cast.json similarity index 72% rename from Common/src/generated/resources/data/hexcasting/advancements/aaa_wasteful_cast.json rename to Common/src/generated/resources/data/hexcasting/advancement/aaa_wasteful_cast.json index f99059e6a6..158691c260 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/aaa_wasteful_cast.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/aaa_wasteful_cast.json @@ -3,24 +3,22 @@ "criteria": { "waste_amt": { "conditions": { - "media_wasted": { + "health_used": { "min": 89000 - } + }, + "media_generated": {} }, "trigger": "hexcasting:spend_media" } }, "display": { - "announce_to_chat": true, "description": { "translate": "advancement.hexcasting:wasteful_cast.desc" }, - "frame": "task", - "hidden": false, "icon": { - "item": "minecraft:glistering_melon_slice" + "count": 1, + "id": "minecraft:glistering_melon_slice" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:wasteful_cast" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/aab_big_cast.json b/Common/src/generated/resources/data/hexcasting/advancement/aab_big_cast.json similarity index 74% rename from Common/src/generated/resources/data/hexcasting/advancements/aab_big_cast.json rename to Common/src/generated/resources/data/hexcasting/advancement/aab_big_cast.json index 50da8818bf..4664381e91 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/aab_big_cast.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/aab_big_cast.json @@ -3,7 +3,8 @@ "criteria": { "cast_amt": { "conditions": { - "media_spent": { + "health_used": {}, + "media_generated": { "min": 6400000 } }, @@ -11,16 +12,13 @@ } }, "display": { - "announce_to_chat": true, "description": { "translate": "advancement.hexcasting:big_cast.desc" }, - "frame": "task", - "hidden": false, "icon": { - "item": "hexcasting:charged_amethyst" + "count": 1, + "id": "hexcasting:charged_amethyst" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:big_cast" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/creative_unlocker.json b/Common/src/generated/resources/data/hexcasting/advancement/creative_unlocker.json similarity index 79% rename from Common/src/generated/resources/data/hexcasting/advancements/creative_unlocker.json rename to Common/src/generated/resources/data/hexcasting/advancement/creative_unlocker.json index 83470d5f2e..66694b8389 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/creative_unlocker.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/creative_unlocker.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:creative_unlocker" - ] + "items": "hexcasting:creative_unlocker" } ] }, @@ -20,12 +18,11 @@ "description": { "translate": "advancement.hexcasting:creative_unlocker.desc" }, - "frame": "task", "hidden": true, "icon": { - "item": "hexcasting:creative_unlocker" + "count": 1, + "id": "hexcasting:creative_unlocker" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:creative_unlocker" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/enlightenment.json b/Common/src/generated/resources/data/hexcasting/advancement/enlightenment.json similarity index 88% rename from Common/src/generated/resources/data/hexcasting/advancements/enlightenment.json rename to Common/src/generated/resources/data/hexcasting/advancement/enlightenment.json index 5bac738e08..6beb493204 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/enlightenment.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/enlightenment.json @@ -6,6 +6,7 @@ "health_used": { "min": 0.8 }, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "max": 1.0, "min": 2.2250738585072014E-308 @@ -15,16 +16,15 @@ } }, "display": { - "announce_to_chat": true, "description": { "translate": "advancement.hexcasting:enlightenment.desc" }, "frame": "challenge", "hidden": true, "icon": { - "item": "minecraft:music_disc_11" + "count": 1, + "id": "minecraft:music_disc_11" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:enlightenment" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore.json b/Common/src/generated/resources/data/hexcasting/advancement/lore.json similarity index 64% rename from Common/src/generated/resources/data/hexcasting/advancements/lore.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore.json index b4f178e9c2..42c9fd8c5f 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore.json @@ -3,26 +3,22 @@ "used_item": { "conditions": { "item": { - "items": [ - "hexcasting:lore_fragment" - ] + "items": "hexcasting:lore_fragment" } }, "trigger": "minecraft:consume_item" } }, "display": { - "announce_to_chat": true, - "background": "hexcasting:textures/block/slate.png", + "background": "hexcasting:textures/block/slate_block.png", "description": { "translate": "advancement.hexcasting:lore.desc" }, "frame": "goal", - "hidden": false, "icon": { - "item": "hexcasting:akashic_connector" + "count": 1, + "id": "hexcasting:akashic_ligature" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom1.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom1.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom1.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom1.json index 7156d9cf20..314c3fa628 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom1.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom1.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/cardamom1" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom2.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom2.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom2.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom2.json index 8bd660cee4..6f3e2b9d20 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom2.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom2.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/cardamom2" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom3.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom3.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom3.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom3.json index b51d711a75..2147c12792 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom3.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom3.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/cardamom3" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom4.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom4.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom4.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom4.json index 0e6c717ba3..1374bfcca4 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom4.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom4.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/cardamom4" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom5.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom5.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom5.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom5.json index 58e227f7bb..06c329a939 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/cardamom5.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/cardamom5.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/cardamom5" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/experiment1.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/experiment1.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/experiment1.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/experiment1.json index c871661965..9d2183c268 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/experiment1.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/experiment1.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/experiment1" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/experiment2.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/experiment2.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/experiment2.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/experiment2.json index e527c0242b..4ac3cadb4f 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/experiment2.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/experiment2.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/experiment2" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/lore/inventory.json b/Common/src/generated/resources/data/hexcasting/advancement/lore/inventory.json similarity index 67% rename from Common/src/generated/resources/data/hexcasting/advancements/lore/inventory.json rename to Common/src/generated/resources/data/hexcasting/advancement/lore/inventory.json index c8e4ba361d..abef5eb653 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/lore/inventory.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/lore/inventory.json @@ -6,16 +6,12 @@ } }, "display": { - "announce_to_chat": true, - "description": { - "text": "" - }, - "frame": "task", + "description": "", "hidden": true, "icon": { - "item": "hexcasting:lore_fragment" + "count": 1, + "id": "hexcasting:lore_fragment" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:lore/inventory" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/opened_eyes.json b/Common/src/generated/resources/data/hexcasting/advancement/opened_eyes.json similarity index 81% rename from Common/src/generated/resources/data/hexcasting/advancements/opened_eyes.json rename to Common/src/generated/resources/data/hexcasting/advancement/opened_eyes.json index ba036e451f..89583b9134 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/opened_eyes.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/opened_eyes.json @@ -3,6 +3,8 @@ "criteria": { "health_used": { "conditions": { + "health_used": {}, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "min": 0.0 } @@ -11,16 +13,13 @@ } }, "display": { - "announce_to_chat": true, "description": { "translate": "advancement.hexcasting:opened_eyes.desc" }, - "frame": "task", - "hidden": false, "icon": { - "item": "minecraft:ender_eye" + "count": 1, + "id": "minecraft:ender_eye" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:opened_eyes" } diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/impetus/empty.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json similarity index 77% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/impetus/empty.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json index 0343f6bd69..d36fd4dc3b 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/impetus/empty.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json @@ -6,6 +6,7 @@ "health_used": { "min": 0.8 }, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "max": 1.0, "min": 2.2250738585072014E-308 @@ -15,21 +16,20 @@ }, "has_the_recipe": { "conditions": { - "recipe": "hexcasting:impetus/empty" + "recipe": "hexcasting:akashic_record" }, "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "enlightenment", - "has_the_recipe" + "has_the_recipe", + "enlightenment" ] ], "rewards": { "recipes": [ - "hexcasting:impetus/empty" + "hexcasting:akashic_record" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/directrix/empty.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/directrix/empty.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json index 8632bebbcc..18f9ea380f 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/directrix/empty.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json @@ -6,6 +6,7 @@ "health_used": { "min": 0.8 }, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "max": 1.0, "min": 2.2250738585072014E-308 @@ -15,21 +16,20 @@ }, "has_the_recipe": { "conditions": { - "recipe": "hexcasting:directrix/empty" + "recipe": "hexcasting:budding_amethyst" }, "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "enlightenment", - "has_the_recipe" + "has_the_recipe", + "enlightenment" ] ], "rewards": { "recipes": [ - "hexcasting:directrix/empty" + "hexcasting:budding_amethyst" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json new file mode 100644 index 0000000000..cc4c924b54 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix_boolean" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix_boolean" + ] + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json new file mode 100644 index 0000000000..8a43f8bac3 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix_redstone" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix_redstone" + ] + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json new file mode 100644 index 0000000000..939dcb6e4e --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_look" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_look" + ] + } +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json new file mode 100644 index 0000000000..c4fc49fd24 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_rightclick" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_rightclick" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json index 595f53ddba..31d9085f82 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json @@ -6,6 +6,7 @@ "health_used": { "min": 0.8 }, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "max": 1.0, "min": 2.2250738585072014E-308 @@ -15,21 +16,20 @@ }, "has_the_recipe": { "conditions": { - "recipe": "hexcasting:akashic_connector" + "recipe": "hexcasting:impetus_storedplayer" }, "trigger": "minecraft:recipe_unlocked" } }, "requirements": [ [ - "enlightenment", - "has_the_recipe" + "has_the_recipe", + "enlightenment" ] ], "rewards": { "recipes": [ - "hexcasting:akashic_connector" + "hexcasting:impetus_storedplayer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json new file mode 100644 index 0000000000..6dfe849d9f --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:quench_allay" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:quench_allay" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json index 8e0018f519..96746726ec 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:amethyst_dust_packing" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json index c512415070..ff10efd290 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:amethyst_dust_unpacking" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json index 597cd897de..a5ab663568 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:amethyst_tiles" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json index b6ab3fb1d4..ab1194da4a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:scroll_paper" - ] + "items": "hexcasting:scroll_paper" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:ancient_scroll_paper" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json index 8571f6d3d4..31556a4ca8 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_fence" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json similarity index 79% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json index aa49266e09..1d09e6fdf8 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_fence_gate" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_panel.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json similarity index 79% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_panel.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json index 6f6e2c2337..ab66016e10 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_panel.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_panel" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_planks.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_planks.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json index 804061465a..f031431d00 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_planks.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_logs" + "items": "#hexcasting:edified_logs" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_planks" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_slab.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_slab.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json index 6643da70b9..317bd1fd11 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_slab.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_slab" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json index 7a5b84d82a..069989ca28 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_stairs" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_tile.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_tile.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json index 2ec6b30c1f..5179827061 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_tile.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_tile" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_wood.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_wood.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json index b71516d7ad..f0aaf4b1fd 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_wood.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:edified_log" - ] + "items": "hexcasting:edified_log" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_wood" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json index fb582f87d5..d676daa7f7 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "minecraft:amethyst_shard" - ] + "items": "minecraft:amethyst_shard" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:scroll_paper" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json index 163e9a2934..770d62ab2b 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:slate" - ] + "items": "hexcasting:slate" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:slate_block" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json index 12add8b1a5..b2f96c2797 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:slate" - ] + "items": "hexcasting:slate" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:slate_block_from_slates" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json index 2d335c5e8a..3c2f410ce6 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "minecraft:amethyst_block" - ] + "items": "minecraft:amethyst_block" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:stonecutting/amethyst_tiles" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json index d65dddf738..4d048fc250 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:stripped_edified_log" - ] + "items": "hexcasting:stripped_edified_log" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:stripped_edified_wood" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json index 5108125752..6ae4bdbbb6 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:scroll_paper_lantern" - ] + "items": "hexcasting:scroll_paper_lantern" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:ageing_scroll_paper_lantern" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json index 171b4cc129..91debb7ca5 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:amethyst_sconce" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json index 52289cc5d7..f36c1abfc2 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:ancient_scroll_paper" - ] + "items": "hexcasting:ancient_scroll_paper" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:ancient_scroll_paper_lantern" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json similarity index 79% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json index 895f37a270..1bff0c5ff6 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:scroll" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_medium.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json similarity index 80% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_medium.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json index 63a98dfc8d..2dc4651527 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_medium.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:scroll_medium" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json index 41ac798ebc..63884d313e 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:scroll_paper" - ] + "items": "hexcasting:scroll_paper" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:scroll_paper_lantern" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_small.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json similarity index 80% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_small.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json index 5954c5786a..2e68c56849 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_small.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:scroll_small" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/slate.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/slate.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json index 3e3481c8c3..551899a3a3 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/slate.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:slate" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/food/sub_sandwich.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/food/sub_sandwich.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json index 1acebe3d17..bb64c267e5 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/food/sub_sandwich.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "minecraft:amethyst_shard" - ] + "items": "minecraft:amethyst_shard" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:sub_sandwich" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json index b8f39b64f4..b032476ae7 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:quenched_allay_shard" - ] + "items": "hexcasting:quenched_allay_shard" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:decompose_quenched_shard/charged" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json index c4bd1a2c6b..299d8a4550 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:quenched_allay_shard" - ] + "items": "hexcasting:quenched_allay_shard" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:decompose_quenched_shard/dust" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json index b82d6e8ddc..d9f9dfbb25 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:quenched_allay_shard" - ] + "items": "hexcasting:quenched_allay_shard" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:decompose_quenched_shard/shard" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/default_colorizer.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/default_colorizer.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json index 4b94e3d969..e04ea0f7b0 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/default_colorizer.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:default_colorizer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json index 68357e8330..486da412cd 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_black" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json index b0cb050ec7..c23b00add5 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_blue" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json index b1d8d0917c..daf49d8674 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_brown" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json index aa88e65b3a..bc159a4f91 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_cyan" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json index e77b2b4530..959c3b871a 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_gray" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json index aaabb10574..ae496bdb93 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_green" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json index 4cc0d01d81..9e660ad5de 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_light_blue" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json index 7b475a18fe..b2b51d665b 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_light_gray" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json index 08e2cf3998..b21321754b 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_lime" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json index ef137af43d..38097fe636 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_magenta" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json index ba8b485f60..a5e2054cd0 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_orange" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json index 27e62c96d5..868366c0a4 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_pink" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json index 730d25023a..b9d4282404 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_purple" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json index 532eb81eb6..515062d384 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_red" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json index 8decf1fb68..3fbaf1ba20 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_white" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json index 9d4ee92484..e707bc9937 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:dye_colorizer_yellow" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json index 0dee46c659..e07c954cd3 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_agender" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json index e2a9be996e..8413c66774 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_aroace" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json index 8bea973430..37604e5939 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_aromantic" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json index 935c3b3a13..74df9afba7 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_asexual" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json index 9766430fc9..a3e18ad420 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_bisexual" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json index d1c0e598e0..e131fc73f1 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_demiboy" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json index b83767cdc9..a164b59ce6 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_demigirl" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json index a4d03097a3..59c4f8fdeb 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_gay" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json index 3c83445f58..5c3233fa98 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_genderfluid" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json index d0a5c5ee5b..fd6f1355ef 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_genderqueer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json index 9b1dfd07fa..091329fe3f 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_intersex" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json index 05a75a9ef3..3d4dec1d10 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_lesbian" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json index d8faac779d..83c4964af9 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_nonbinary" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json index 096a3b8773..89512b05e1 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_plural" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json index ef4569ca9a..70dced6396 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:pride_colorizer_transgender" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/uuid_colorizer.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/uuid_colorizer.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json index c2e9457bb0..fbcdbfebf4 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/uuid_colorizer.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:amethyst_dust" - ] + "items": "hexcasting:amethyst_dust" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:uuid_colorizer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json similarity index 88% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json index d000cbc46a..44a4110650 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json @@ -6,6 +6,7 @@ "health_used": { "min": 0.8 }, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "max": 1.0, "min": 2.2250738585072014E-308 @@ -22,14 +23,13 @@ }, "requirements": [ [ - "enlightenment", - "has_the_recipe" + "has_the_recipe", + "enlightenment" ] ], "rewards": { "recipes": [ "hexcasting:akashic_bookshelf" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json new file mode 100644 index 0000000000..b2a6f52851 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:akashic_ligature" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:akashic_ligature" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/directrix/empty.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json similarity index 88% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/directrix/empty.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json index 8632bebbcc..e00a4fdf00 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/directrix/empty.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json @@ -6,6 +6,7 @@ "health_used": { "min": 0.8 }, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "max": 1.0, "min": 2.2250738585072014E-308 @@ -22,14 +23,13 @@ }, "requirements": [ [ - "enlightenment", - "has_the_recipe" + "has_the_recipe", + "enlightenment" ] ], "rewards": { "recipes": [ "hexcasting:directrix/empty" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_button.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_button.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json index 191916c5b2..b6cd73817c 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_button.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_button" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_door.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_door.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json index ea21e4a47a..72dce77364 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_door.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_door" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json similarity index 79% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json index a9c62b86c9..f207372eeb 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_pressure_plate" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json index cc15ca3960..be0fadb15b 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:edified_planks" + "items": "#hexcasting:edified_planks" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:edified_trapdoor" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/impetus/empty.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json similarity index 88% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/impetus/empty.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json index 0343f6bd69..0b4aa3256c 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/impetus/empty.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json @@ -6,6 +6,7 @@ "health_used": { "min": 0.8 }, + "media_generated": {}, "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { "max": 1.0, "min": 2.2250738585072014E-308 @@ -22,14 +23,13 @@ }, "requirements": [ [ - "enlightenment", - "has_the_recipe" + "has_the_recipe", + "enlightenment" ] ], "rewards": { "recipes": [ "hexcasting:impetus/empty" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/abacus.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/abacus.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json index 7349713cba..b1cb841b3e 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/abacus.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:abacus" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/artifact.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json similarity index 79% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/artifact.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json index 7cc848539e..221cf418c3 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/artifact.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:artifact" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/cypher.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/cypher.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json index 46fe0a95a4..5489ea0467 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/cypher.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:cypher" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json similarity index 79% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json index 4494bd1974..4e19de9e5e 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:focus" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus_rotated.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json similarity index 80% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus_rotated.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json index c1d45f0e21..f67d8502aa 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus_rotated.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:focus_rotated" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/jeweler_hammer.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/jeweler_hammer.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json index 0c38f6dcbd..6a24d2b333 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/jeweler_hammer.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "minecraft:amethyst_shard" - ] + "items": "minecraft:amethyst_shard" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:jeweler_hammer" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/lens.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/lens.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json index c6820e5be0..3411cb2187 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/lens.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:lens" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/spellbook.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/spellbook.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json index 9ef640f920..ef5a492652 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/spellbook.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "minecraft:chorus_fruit" - ] + "items": "minecraft:chorus_fruit" } ] }, @@ -17,9 +15,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:focus" - ] + "items": "hexcasting:focus" } ] }, @@ -34,15 +30,14 @@ }, "requirements": [ [ + "has_the_recipe", "has_focus", - "has_chorus", - "has_the_recipe" + "has_chorus" ] ], "rewards": { "recipes": [ "hexcasting:spellbook" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/acacia.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/acacia.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json index 3517416d4d..c1e018b4ec 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/acacia.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/acacia" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/bamboo.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/bamboo.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json index a6fa449db3..19094ad2fe 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/bamboo.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/bamboo" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/birch.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/birch.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json index ca645b3d2c..ca6c180cfa 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/birch.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/birch" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/cherry.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/cherry.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json index a28e8cbc57..38107a9b52 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/cherry.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/cherry" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/crimson.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/crimson.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json index 273e6c63c9..da68b592c5 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/crimson.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/crimson" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/dark_oak.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/dark_oak.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json index 3f85a91af5..da9937e87d 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/dark_oak.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/dark_oak" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/edified.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/edified.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json index f311992c36..99d19ed3bf 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/edified.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/edified" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/jungle.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/jungle.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json index e60ee05a9a..80fe7c43f6 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/jungle.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/jungle" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mangrove.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mangrove.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json index 395c776a6e..0064814593 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mangrove.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/mangrove" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mindsplice.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mindsplice.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json index 70be25e6c0..adb60836c1 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mindsplice.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/mindsplice" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/oak.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/oak.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json index 9a2a7e466c..d11084b78d 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/oak.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/oak" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/quenched.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/quenched.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json index efa9566aeb..1ce63b78e3 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/quenched.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/quenched" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/spruce.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/spruce.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json index d9a25ac43a..cbad54cf88 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/spruce.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/spruce" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/warped.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/warped.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json index a4cda1f21b..ffff5199c6 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/warped.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json @@ -5,9 +5,7 @@ "conditions": { "items": [ { - "items": [ - "hexcasting:charged_amethyst" - ] + "items": "hexcasting:charged_amethyst" } ] }, @@ -22,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:staff/warped" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/thought_knot.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json similarity index 80% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/thought_knot.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json index 86e0897a2d..f50c1673fa 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/thought_knot.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:thought_knot" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/trinket.json b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/trinket.json rename to Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json index 09a44adcc8..17c0d69b1f 100644 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/trinket.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json @@ -5,7 +5,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:staves" + "items": "#hexcasting:staves" } ] }, @@ -20,14 +20,13 @@ }, "requirements": [ [ - "has_item", - "has_the_recipe" + "has_the_recipe", + "has_item" ] ], "rewards": { "recipes": [ "hexcasting:trinket" ] - }, - "sends_telemetry_event": false + } } \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/advancements/root.json b/Common/src/generated/resources/data/hexcasting/advancement/root.json similarity index 76% rename from Common/src/generated/resources/data/hexcasting/advancements/root.json rename to Common/src/generated/resources/data/hexcasting/advancement/root.json index 645f76cd61..1b2763aed8 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/root.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/root.json @@ -4,7 +4,7 @@ "conditions": { "items": [ { - "tag": "hexcasting:grants_root_advancement" + "items": "#hexcasting:grants_root_advancement" } ] }, @@ -12,17 +12,15 @@ } }, "display": { - "announce_to_chat": true, "background": "minecraft:textures/block/calcite.png", "description": { "translate": "advancement.hexcasting:root.desc" }, - "frame": "task", "hidden": true, "icon": { - "item": "minecraft:budding_amethyst" + "count": 1, + "id": "minecraft:budding_amethyst" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:root" } diff --git a/Common/src/generated/resources/data/hexcasting/advancements/y_u_no_cast_angy.json b/Common/src/generated/resources/data/hexcasting/advancement/y_u_no_cast_angy.json similarity index 76% rename from Common/src/generated/resources/data/hexcasting/advancements/y_u_no_cast_angy.json rename to Common/src/generated/resources/data/hexcasting/advancement/y_u_no_cast_angy.json index a8843f3733..00a5641e4d 100644 --- a/Common/src/generated/resources/data/hexcasting/advancements/y_u_no_cast_angy.json +++ b/Common/src/generated/resources/data/hexcasting/advancement/y_u_no_cast_angy.json @@ -6,16 +6,13 @@ } }, "display": { - "announce_to_chat": true, "description": { "translate": "advancement.hexcasting:y_u_no_cast_angy.desc" }, - "frame": "task", - "hidden": false, "icon": { - "item": "minecraft:blaze_powder" + "count": 1, + "id": "minecraft:blaze_powder" }, - "show_toast": true, "title": { "translate": "advancement.hexcasting:y_u_no_cast_angy" } diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json index c01f47fdb7..70af09ea61 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json @@ -2,7 +2,7 @@ "type": "hexcasting:amethyst_cluster", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:blocks/amethyst_cluster" } ], diff --git a/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json new file mode 100644 index 0000000000..2cde006e3e --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/abandoned_mineshaft" + } + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json new file mode 100644 index 0000000000..79ede35c14 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/ancient_city" + } + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json new file mode 100644 index 0000000000..f51d2dabf0 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/desert_pyramid" + } + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json new file mode 100644 index 0000000000..78250990ed --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/jungle_temple" + } + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json new file mode 100644 index 0000000000..b9e7041dbc --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/nether_bridge" + } + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json new file mode 100644 index 0000000000..5cb215e05e --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/simple_dungeon" + } + ] +} \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json new file mode 100644 index 0000000000..6dfe6d03d3 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/stronghold_corridor" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json index 7f0b321fe8..c636a2f73a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json index a530f7c502..215f625f7d 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json index 43b7514ffc..ad1b0666d8 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json index 30166b92e7..f55d8f4cc0 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json similarity index 78% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json index 4e522bf609..3aaf4b8498 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/village/village_desert_house" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json similarity index 78% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json index f6c234450b..93d27d6661 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/village/village_plains_house" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json similarity index 78% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json index db64af9fe3..bb224944b7 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/village/village_savanna_house" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json similarity index 78% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json index 331b30dd65..ec4f567a6e 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/village/village_snowy_house" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json similarity index 78% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json index 5111cc7386..d2132c79bf 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/village/village_taiga_house" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json index 60d574a042..be9d6b6d12 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json @@ -3,7 +3,7 @@ "chance": 0.4, "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json index bfa7024eff..27d1e1ba46 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/abandoned_mineshaft" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json index d95dc336d7..d4d94d6652 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/ancient_city" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json index bbe250d8e8..17372d9896 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_other" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json index 2f53299e74..ff8851c233 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/bastion_treasure" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json index 27e5832d30..b91f49fb8a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/desert_pyramid" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json index 00fce8eef3..f5371dd519 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/end_city_treasure" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json index bdad563e63..c1bf948ade 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/jungle_temple" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json index 2a95ff887d..68725eddce 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/nether_bridge" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json index 76114fb3ae..b06f4d95a6 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/pillager_outpost" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json index 23c9b24798..3c7b528cda 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/shipwreck_map" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json index 1166f9aefd..141eebbe09 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/simple_dungeon" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json index d3766ee5ac..f08c93cb45 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/stronghold_library" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json similarity index 78% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json index 4da3988ea7..a59db105dd 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/village/village_cartographer" } ], diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json rename to Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json index bf19b951bc..cc97ecc7c2 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json +++ b/Common/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json @@ -2,7 +2,7 @@ "type": "hexcasting:inject_scrolls", "conditions": [ { - "condition": "forge:loot_table_id", + "condition": "neoforge:loot_table_id", "loot_table_id": "minecraft:chests/woodland_mansion" } ], diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_bookshelf.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_bookshelf.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json similarity index 60% rename from Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json index 4c60a77364..02be275bc1 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks.json +++ b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json @@ -5,11 +5,11 @@ "entries": [ { "type": "minecraft:item", - "name": "hexcasting:amethyst_bricks" + "name": "hexcasting:akashic_ligature" } ], "rolls": 1.0 } ], - "random_sequence": "hexcasting:blocks/amethyst_bricks" + "random_sequence": "hexcasting:blocks/akashic_ligature" } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_record.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_record.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks_small.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks_small.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_dust_block.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_dust_block.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json similarity index 59% rename from Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json index b21dcea7c8..911c281497 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json +++ b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json @@ -7,20 +7,22 @@ "condition": "minecraft:any_of", "terms": [ { - "action": "shears_dig", - "condition": "forge:can_tool_perform_action" + "ability": "shears_dig", + "condition": "neoforge:can_item_perform_ability" }, { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ] diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_pillar.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_pillar.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_sconce.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_sconce.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_tiles.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_tiles.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json similarity index 59% rename from Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json index eed1136034..d2bfc7c956 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json +++ b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json @@ -7,20 +7,22 @@ "condition": "minecraft:any_of", "terms": [ { - "action": "shears_dig", - "condition": "forge:can_tool_perform_action" + "ability": "shears_dig", + "condition": "neoforge:can_item_perform_ability" }, { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ] diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json similarity index 59% rename from Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json index 574192357c..88f319d753 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json +++ b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json @@ -7,20 +7,22 @@ "condition": "minecraft:any_of", "terms": [ { - "action": "shears_dig", - "condition": "forge:can_tool_perform_action" + "ability": "shears_dig", + "condition": "neoforge:can_item_perform_ability" }, { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } } - } - ] + ] + } } } ] diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/boolean.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/boolean.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/empty.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/empty.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/redstone.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/redstone.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_button.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_button.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_door.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_door.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence_gate.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence_gate.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_amethyst.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_amethyst.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_aventurine.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_aventurine.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_citrine.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_citrine.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_purple.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_purple.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_panel.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_panel.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_planks.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_planks.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_pressure_plate.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_pressure_plate.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_slab.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_slab.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_stairs.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_stairs.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_tile.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_tile.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_trapdoor.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_trapdoor.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_wood.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_wood.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/empty.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/empty.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/look.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/look.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/redstone.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/redstone.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/rightclick.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/rightclick.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json similarity index 81% rename from Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json index 86b06b41d9..09fe8b6fd3 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay.json +++ b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json @@ -12,11 +12,16 @@ { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } } } ], diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks_small.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks_small.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_tiles.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_tiles.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json similarity index 61% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json index 6a7e00b7d0..eeb8f5c955 100644 --- a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate.json +++ b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json @@ -7,13 +7,9 @@ "type": "minecraft:item", "functions": [ { - "function": "minecraft:copy_nbt", - "ops": [ - { - "op": "replace", - "source": "pattern", - "target": "BlockEntityTag.pattern" - } + "function": "minecraft:copy_components", + "include": [ + "hexcasting:pattern" ], "source": "block_entity" } diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks_small.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks_small.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_pillar.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_pillar.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_tiles.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_tiles.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_block.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_block.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks_small.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks_small.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_pillar.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_pillar.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_tiles.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_tiles.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_log.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_log.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_wood.json b/Common/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_wood.json rename to Common/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/inject/amethyst_cluster.json b/Common/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json similarity index 71% rename from Neoforge/src/generated/resources/data/hexcasting/loot_tables/inject/amethyst_cluster.json rename to Common/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json index 78e1601cb1..e87bc89af2 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/inject/amethyst_cluster.json +++ b/Common/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json @@ -8,18 +8,23 @@ "term": { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } } } }, { "condition": "minecraft:match_tool", "predicate": { - "tag": "minecraft:cluster_max_harvestables" + "items": "#minecraft:cluster_max_harvestables" } } ], @@ -55,11 +60,16 @@ "term": { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } } } }, @@ -68,7 +78,7 @@ "term": { "condition": "minecraft:match_tool", "predicate": { - "tag": "minecraft:cluster_max_harvestables" + "items": "#minecraft:cluster_max_harvestables" } } } @@ -100,18 +110,23 @@ "term": { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } } } }, { "condition": "minecraft:match_tool", "predicate": { - "tag": "minecraft:cluster_max_harvestables" + "items": "#minecraft:cluster_max_harvestables" } }, { @@ -149,11 +164,16 @@ "term": { "condition": "minecraft:match_tool", "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } } } }, @@ -162,7 +182,7 @@ "term": { "condition": "minecraft:match_tool", "predicate": { - "tag": "minecraft:cluster_max_harvestables" + "items": "#minecraft:cluster_max_harvestables" } } }, diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/abacus.json b/Common/src/generated/resources/data/hexcasting/recipe/abacus.json similarity index 82% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/abacus.json rename to Common/src/generated/resources/data/hexcasting/recipe/abacus.json index 0b922907fc..76d393b033 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/abacus.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/abacus.json @@ -18,7 +18,7 @@ "WAW" ], "result": { - "item": "hexcasting:abacus" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:abacus" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/ageing_scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json similarity index 87% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/ageing_scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json index 5399461cc9..54de4e69be 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/ageing_scroll_paper_lantern.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json @@ -3,7 +3,7 @@ "category": "misc", "ingredients": [ { - "tag": "forge:dyes/brown" + "tag": "c:dyes/brown" }, { "item": "hexcasting:scroll_paper_lantern" @@ -32,6 +32,6 @@ ], "result": { "count": 8, - "item": "hexcasting:ancient_scroll_paper_lantern" + "id": "hexcasting:ancient_scroll_paper_lantern" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/akashic_bookshelf.json b/Common/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json similarity index 80% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/akashic_bookshelf.json rename to Common/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json index 20ea2d020a..055ac48308 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/akashic_bookshelf.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json @@ -18,7 +18,7 @@ "LPL" ], "result": { - "item": "hexcasting:akashic_bookshelf" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:akashic_bookshelf" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/akashic_connector.json b/Common/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json similarity index 85% rename from Fabric/src/generated/resources/data/hexcasting/recipes/akashic_connector.json rename to Common/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json index 218b59c739..bbcc3f83e7 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/akashic_connector.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json @@ -25,7 +25,6 @@ ], "result": { "count": 4, - "item": "hexcasting:akashic_connector" - }, - "show_notification": true + "id": "hexcasting:akashic_ligature" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_dust_packing.json b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json similarity index 71% rename from Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_dust_packing.json rename to Common/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json index a3fdd6a2bf..1da337229f 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_dust_packing.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json @@ -11,7 +11,7 @@ "XX" ], "result": { - "item": "hexcasting:amethyst_dust_block" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:amethyst_dust_block" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_dust_unpacking.json b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json similarity index 82% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_dust_unpacking.json rename to Common/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json index 414db2b6f2..db42cb3711 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_dust_unpacking.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json @@ -8,6 +8,6 @@ ], "result": { "count": 4, - "item": "hexcasting:amethyst_dust" + "id": "hexcasting:amethyst_dust" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_sconce.json b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json similarity index 67% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_sconce.json rename to Common/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json index 73d5927d70..1ece2856f0 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_sconce.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json @@ -3,7 +3,7 @@ "category": "misc", "key": { "B": { - "tag": "forge:ingots/copper" + "tag": "c:ingots/copper" }, "T": { "item": "hexcasting:charged_amethyst" @@ -15,7 +15,6 @@ ], "result": { "count": 4, - "item": "hexcasting:amethyst_sconce" - }, - "show_notification": true + "id": "hexcasting:amethyst_sconce" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_tiles.json b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json similarity index 82% rename from Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_tiles.json rename to Common/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json index d41a67a785..300139c437 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_tiles.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json @@ -19,7 +19,6 @@ ], "result": { "count": 8, - "item": "hexcasting:amethyst_tiles" - }, - "show_notification": true + "id": "hexcasting:amethyst_tiles" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper.json b/Common/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json similarity index 87% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper.json rename to Common/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json index 09a583cb6b..33db9b82c9 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json @@ -3,7 +3,7 @@ "category": "building", "ingredients": [ { - "tag": "forge:dyes/brown" + "tag": "c:dyes/brown" }, { "item": "hexcasting:scroll_paper" @@ -32,6 +32,6 @@ ], "result": { "count": 8, - "item": "hexcasting:ancient_scroll_paper" + "id": "hexcasting:ancient_scroll_paper" } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json similarity index 73% rename from Fabric/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json index 743cc6dddf..d99d9ba91b 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper_lantern.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json @@ -14,7 +14,7 @@ "B" ], "result": { - "item": "hexcasting:ancient_scroll_paper_lantern" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:ancient_scroll_paper_lantern" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/artifact.json b/Common/src/generated/resources/data/hexcasting/recipe/artifact.json similarity index 64% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/artifact.json rename to Common/src/generated/resources/data/hexcasting/recipe/artifact.json index 350fb2e98a..a03e30a2a8 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/artifact.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/artifact.json @@ -6,10 +6,10 @@ "item": "hexcasting:charged_amethyst" }, "D": { - "tag": "minecraft:music_discs" + "tag": "minecraft:creeper_drop_music_discs" }, "F": { - "tag": "forge:ingots/gold" + "tag": "c:ingots/gold" } }, "pattern": [ @@ -18,7 +18,7 @@ " D " ], "result": { - "item": "hexcasting:artifact" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:artifact" + } } \ No newline at end of file diff --git a/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json new file mode 100644 index 0000000000..750ad2dcfe --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json @@ -0,0 +1,16 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:akashic_ligature" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 5, + "profession": "minecraft:librarian" + }, + "result": { + "Name": "hexcasting:akashic_record" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/budding_amethyst.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json similarity index 61% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/budding_amethyst.json rename to Common/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json index b58a6ec996..0532b2e5ed 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/budding_amethyst.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json @@ -1,15 +1,15 @@ { "type": "hexcasting:brainsweep", "blockIn": { - "type": "block", + "type": "hexcasting:block", "block": "minecraft:amethyst_block" }, "cost": 1000000, "entityIn": { - "type": "villager", + "type": "hexcasting:villager", "minLevel": 3 }, "result": { - "name": "minecraft:budding_amethyst" + "Name": "minecraft:budding_amethyst" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_boolean.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json similarity index 60% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_boolean.json rename to Common/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json index fd1c128f51..5e97ada05f 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_boolean.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json @@ -1,18 +1,18 @@ { "type": "hexcasting:brainsweep", "blockIn": { - "type": "block", + "type": "hexcasting:block", "block": "hexcasting:directrix/empty" }, "cost": 1000000, "entityIn": { - "type": "villager", + "type": "hexcasting:villager", "minLevel": 1, - "profession": "shepherd" + "profession": "minecraft:shepherd" }, "result": { - "name": "hexcasting:directrix/boolean", - "properties": { + "Name": "hexcasting:directrix/boolean", + "Properties": { "energized": "false", "facing": "north", "state": "neither" diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_redstone.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json similarity index 60% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_redstone.json rename to Common/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json index 3cfe40b7c0..afb314d043 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_redstone.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json @@ -1,18 +1,18 @@ { "type": "hexcasting:brainsweep", "blockIn": { - "type": "block", + "type": "hexcasting:block", "block": "hexcasting:directrix/empty" }, "cost": 1000000, "entityIn": { - "type": "villager", + "type": "hexcasting:villager", "minLevel": 1, - "profession": "mason" + "profession": "minecraft:mason" }, "result": { - "name": "hexcasting:directrix/redstone", - "properties": { + "Name": "hexcasting:directrix/redstone", + "Properties": { "energized": "false", "facing": "north", "powered": "false" diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json similarity index 58% rename from Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json rename to Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json index 59338fc079..7d77364f78 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json @@ -1,18 +1,18 @@ { "type": "hexcasting:brainsweep", "blockIn": { - "type": "block", + "type": "hexcasting:block", "block": "hexcasting:impetus/empty" }, "cost": 1000000, "entityIn": { - "type": "villager", + "type": "hexcasting:villager", "minLevel": 2, - "profession": "fletcher" + "profession": "minecraft:fletcher" }, "result": { - "name": "hexcasting:impetus/look", - "properties": { + "Name": "hexcasting:impetus/look", + "Properties": { "energized": "false", "facing": "north" } diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_rightclick.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json similarity index 57% rename from Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_rightclick.json rename to Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json index 5a106bd801..02fbae2538 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_rightclick.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json @@ -1,18 +1,18 @@ { "type": "hexcasting:brainsweep", "blockIn": { - "type": "block", + "type": "hexcasting:block", "block": "hexcasting:impetus/empty" }, "cost": 1000000, "entityIn": { - "type": "villager", + "type": "hexcasting:villager", "minLevel": 2, - "profession": "toolsmith" + "profession": "minecraft:toolsmith" }, "result": { - "name": "hexcasting:impetus/rightclick", - "properties": { + "Name": "hexcasting:impetus/rightclick", + "Properties": { "energized": "false", "facing": "north" } diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_storedplayer.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json similarity index 60% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_storedplayer.json rename to Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json index 1bef4d4633..f79dca1d11 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_storedplayer.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json @@ -1,18 +1,18 @@ { "type": "hexcasting:brainsweep", "blockIn": { - "type": "block", + "type": "hexcasting:block", "block": "hexcasting:impetus/empty" }, "cost": 1000000, "entityIn": { - "type": "villager", + "type": "hexcasting:villager", "minLevel": 2, - "profession": "cleric" + "profession": "minecraft:cleric" }, "result": { - "name": "hexcasting:impetus/redstone", - "properties": { + "Name": "hexcasting:impetus/redstone", + "Properties": { "energized": "false", "facing": "north", "powered": "true" diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/quench_allay.json b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json similarity index 63% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/quench_allay.json rename to Common/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json index d7943e7a49..076b4e0745 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/quench_allay.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json @@ -1,15 +1,15 @@ { "type": "hexcasting:brainsweep", "blockIn": { - "type": "block", + "type": "hexcasting:block", "block": "minecraft:amethyst_block" }, "cost": 100000, "entityIn": { - "type": "entity_type", + "type": "hexcasting:entity_type", "entityType": "minecraft:allay" }, "result": { - "name": "hexcasting:quenched_allay" + "Name": "hexcasting:quenched_allay" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/lens.json b/Common/src/generated/resources/data/hexcasting/recipe/cypher.json similarity index 70% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/lens.json rename to Common/src/generated/resources/data/hexcasting/recipe/cypher.json index e91c62a012..80e1837536 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/lens.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/cypher.json @@ -3,7 +3,7 @@ "category": "equipment", "key": { "C": { - "item": "minecraft:glass" + "tag": "c:ingots/copper" }, "I": { "item": "hexcasting:amethyst_dust" @@ -15,7 +15,7 @@ " C " ], "result": { - "item": "hexcasting:lens" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:cypher" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/charged.json b/Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json similarity index 85% rename from Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/charged.json rename to Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json index 9521bacbca..4d9e9902e8 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/charged.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json @@ -11,6 +11,6 @@ ], "result": { "count": 4, - "item": "hexcasting:charged_amethyst" + "id": "hexcasting:charged_amethyst" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/dust.json b/Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json similarity index 86% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/dust.json rename to Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json index 4a52d88ccf..5023760773 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/dust.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json @@ -11,6 +11,6 @@ ], "result": { "count": 31, - "item": "hexcasting:amethyst_dust" + "id": "hexcasting:amethyst_dust" } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/shard.json b/Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json similarity index 85% rename from Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/shard.json rename to Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json index af22d06105..e441d9bf5f 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/shard.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json @@ -11,6 +11,6 @@ ], "result": { "count": 7, - "item": "minecraft:amethyst_shard" + "id": "minecraft:amethyst_shard" } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/default_colorizer.json b/Common/src/generated/resources/data/hexcasting/recipe/default_colorizer.json similarity index 80% rename from Fabric/src/generated/resources/data/hexcasting/recipes/default_colorizer.json rename to Common/src/generated/resources/data/hexcasting/recipe/default_colorizer.json index 133b5b03bd..b61e7ef20a 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/default_colorizer.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/default_colorizer.json @@ -18,7 +18,7 @@ "DCD" ], "result": { - "item": "hexcasting:default_colorizer" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:default_colorizer" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/directrix/empty.json b/Common/src/generated/resources/data/hexcasting/recipe/directrix/empty.json similarity index 83% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/directrix/empty.json rename to Common/src/generated/resources/data/hexcasting/recipe/directrix/empty.json index b622fd8844..986fa97d99 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/directrix/empty.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/directrix/empty.json @@ -21,7 +21,7 @@ "SSC" ], "result": { - "item": "hexcasting:directrix/empty" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:directrix/empty" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_black.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_black.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json index 4131cc5643..43dcd86862 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_black.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_black" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_black" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_blue.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_blue.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json index f9476f986d..b9cd3b99c3 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_blue.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_blue" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_blue" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_brown.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_brown.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json index 3d5459144d..f02b87049c 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_brown.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_brown" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_brown" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_cyan.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_cyan.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json index 7f5167cb35..93380132c6 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_cyan.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_cyan" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_cyan" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_gray.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_gray.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json index c491dd7650..c803427d5a 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_gray.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_gray" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_gray" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_green.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_green.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json index 96665a82f9..e592b36cca 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_green.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_green" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_green" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_blue.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_blue.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json index 85d69c57b3..d8eb9b5986 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_blue.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_light_blue" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_light_blue" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_gray.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_gray.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json index 2d66ef7c2a..e6efc2af9a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_gray.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_light_gray" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_light_gray" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_lime.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_lime.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json index f35899f58f..645db81176 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_lime.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_lime" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_lime" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_magenta.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_magenta.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json index 0449c7a303..9476c0a098 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_magenta.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_magenta" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_magenta" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_orange.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_orange.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json index fd2b480a12..f6f815b95f 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_orange.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_orange" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_orange" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_pink.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_pink.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json index e208a43556..065db19c23 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_pink.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_pink" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_pink" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_purple.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_purple.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json index da671f3ea5..85dab6119e 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_purple.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_purple" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_purple" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_red.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json similarity index 77% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_red.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json index 3ff5f19d65..8acba0fc1a 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_red.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_red" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_red" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_white.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_white.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json index 8902cb1a1e..d76ee9ba69 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_white.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_white" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_white" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_yellow.json b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_yellow.json rename to Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json index 1bddee39eb..35ffbdd8df 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_yellow.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:dye_colorizer_yellow" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:dye_colorizer_yellow" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dynamicseal_focus.json b/Common/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dynamicseal_focus.json rename to Common/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dynamicseal_spellbook.json b/Common/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json similarity index 100% rename from Fabric/src/generated/resources/data/hexcasting/recipes/dynamicseal_spellbook.json rename to Common/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_button.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_button.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/edified_button.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_button.json index 6e250ed1b2..10ad25b4aa 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_button.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_button.json @@ -7,6 +7,7 @@ } ], "result": { - "item": "hexcasting:edified_button" + "count": 1, + "id": "hexcasting:edified_button" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_door.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_door.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/edified_door.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_door.json index 899954c7ee..6ff2941615 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_door.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_door.json @@ -13,7 +13,6 @@ ], "result": { "count": 3, - "item": "hexcasting:edified_door" - }, - "show_notification": true + "id": "hexcasting:edified_door" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_fence.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_fence.json similarity index 78% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/edified_fence.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_fence.json index 25458e77e7..f1a7c7ec45 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_fence.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_fence.json @@ -15,7 +15,6 @@ ], "result": { "count": 3, - "item": "hexcasting:edified_fence" - }, - "show_notification": true + "id": "hexcasting:edified_fence" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_fence_gate.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json similarity index 76% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/edified_fence_gate.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json index 799b582fb9..a38d45ca38 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_fence_gate.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json @@ -14,7 +14,7 @@ "SWS" ], "result": { - "item": "hexcasting:edified_fence_gate" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:edified_fence_gate" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_panel.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_panel.json similarity index 79% rename from Fabric/src/generated/resources/data/hexcasting/recipes/edified_panel.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_panel.json index af912d5628..0baf420f31 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_panel.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_panel.json @@ -16,7 +16,6 @@ ], "result": { "count": 8, - "item": "hexcasting:edified_panel" - }, - "show_notification": true + "id": "hexcasting:edified_panel" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_planks.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_planks.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/edified_planks.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_planks.json index 10317d4b79..7ea641db71 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_planks.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_planks.json @@ -8,6 +8,6 @@ ], "result": { "count": 4, - "item": "hexcasting:edified_planks" + "id": "hexcasting:edified_planks" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_pressure_plate.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json similarity index 69% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/edified_pressure_plate.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json index 3a1d77b05a..fb80df82d1 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_pressure_plate.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json @@ -10,7 +10,7 @@ "WW" ], "result": { - "item": "hexcasting:edified_pressure_plate" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:edified_pressure_plate" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_slab.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_slab.json similarity index 73% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/edified_slab.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_slab.json index 83458a02bc..efda8df52a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_slab.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_slab.json @@ -11,7 +11,6 @@ ], "result": { "count": 6, - "item": "hexcasting:edified_slab" - }, - "show_notification": true + "id": "hexcasting:edified_slab" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_stairs.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_stairs.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/edified_stairs.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_stairs.json index cd17064167..ca2e03f9c3 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_stairs.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_stairs.json @@ -13,7 +13,6 @@ ], "result": { "count": 4, - "item": "hexcasting:edified_stairs" - }, - "show_notification": true + "id": "hexcasting:edified_stairs" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_tile.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_tile.json similarity index 75% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/edified_tile.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_tile.json index a19f9d35b0..bfca8c3437 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_tile.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_tile.json @@ -13,7 +13,6 @@ ], "result": { "count": 6, - "item": "hexcasting:edified_tile" - }, - "show_notification": true + "id": "hexcasting:edified_tile" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_trapdoor.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json similarity index 73% rename from Fabric/src/generated/resources/data/hexcasting/recipes/edified_trapdoor.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json index fbe3f9b3da..89928fcc73 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_trapdoor.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json @@ -12,7 +12,6 @@ ], "result": { "count": 2, - "item": "hexcasting:edified_trapdoor" - }, - "show_notification": true + "id": "hexcasting:edified_trapdoor" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_wood.json b/Common/src/generated/resources/data/hexcasting/recipe/edified_wood.json similarity index 74% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/edified_wood.json rename to Common/src/generated/resources/data/hexcasting/recipe/edified_wood.json index 17a530245a..4e95e0bdc6 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_wood.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/edified_wood.json @@ -12,7 +12,6 @@ ], "result": { "count": 3, - "item": "hexcasting:edified_wood" - }, - "show_notification": true + "id": "hexcasting:edified_wood" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/focus.json b/Common/src/generated/resources/data/hexcasting/recipe/focus.json similarity index 69% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/focus.json rename to Common/src/generated/resources/data/hexcasting/recipe/focus.json index d97175d65c..ff88244378 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/focus.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/focus.json @@ -6,10 +6,10 @@ "item": "hexcasting:charged_amethyst" }, "G": { - "tag": "forge:dusts/glowstone" + "tag": "c:dusts/glowstone" }, "L": { - "tag": "forge:leather" + "tag": "c:leathers" }, "P": { "item": "minecraft:paper" @@ -21,7 +21,7 @@ "GLG" ], "result": { - "item": "hexcasting:focus" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:focus" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/focus_rotated.json b/Common/src/generated/resources/data/hexcasting/recipe/focus_rotated.json similarity index 69% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/focus_rotated.json rename to Common/src/generated/resources/data/hexcasting/recipe/focus_rotated.json index c84d2ef9a5..62aba7f62e 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/focus_rotated.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/focus_rotated.json @@ -6,10 +6,10 @@ "item": "hexcasting:charged_amethyst" }, "G": { - "tag": "forge:dusts/glowstone" + "tag": "c:dusts/glowstone" }, "L": { - "tag": "forge:leather" + "tag": "c:leathers" }, "P": { "item": "minecraft:paper" @@ -21,7 +21,7 @@ "GPG" ], "result": { - "item": "hexcasting:focus" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:focus" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/impetus/empty.json b/Common/src/generated/resources/data/hexcasting/recipe/impetus/empty.json similarity index 84% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/impetus/empty.json rename to Common/src/generated/resources/data/hexcasting/recipe/impetus/empty.json index c0f772d643..b5d3b9fd5c 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/impetus/empty.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/impetus/empty.json @@ -21,7 +21,7 @@ "SSP" ], "result": { - "item": "hexcasting:impetus/empty" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:impetus/empty" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/jeweler_hammer.json b/Common/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json similarity index 72% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/jeweler_hammer.json rename to Common/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json index 94157a802d..fef55bcb4b 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/jeweler_hammer.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json @@ -6,10 +6,10 @@ "item": "minecraft:amethyst_shard" }, "I": { - "tag": "forge:ingots/iron" + "tag": "c:ingots/iron" }, "N": { - "tag": "forge:nuggets/iron" + "tag": "c:nuggets/iron" }, "S": [ { @@ -26,7 +26,7 @@ " S " ], "result": { - "item": "hexcasting:jeweler_hammer" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:jeweler_hammer" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/lens.json b/Common/src/generated/resources/data/hexcasting/recipe/lens.json similarity index 80% rename from Fabric/src/generated/resources/data/hexcasting/recipes/lens.json rename to Common/src/generated/resources/data/hexcasting/recipe/lens.json index e91c62a012..d7e33ac36b 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/lens.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/lens.json @@ -15,7 +15,7 @@ " C " ], "result": { - "item": "hexcasting:lens" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:lens" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_agender.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_agender.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json index d92f22f1df..d5401c0952 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_agender.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_agender" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_agender" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aroace.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aroace.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json index cc747fec3e..25c32f412c 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aroace.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_aroace" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_aroace" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aromantic.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aromantic.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json index 421af44c47..ab923e9b61 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aromantic.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_aromantic" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_aromantic" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_asexual.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_asexual.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json index 75245d5013..c41a3223de 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_asexual.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_asexual" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_asexual" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_bisexual.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_bisexual.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json index 3f13a25e91..157dff5b64 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_bisexual.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_bisexual" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_bisexual" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demiboy.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demiboy.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json index 9ff3ece1ec..c79d6fd805 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demiboy.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_demiboy" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_demiboy" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demigirl.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demigirl.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json index e8a8322040..4a87fb83dd 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demigirl.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_demigirl" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_demigirl" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_gay.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json similarity index 77% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_gay.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json index da08d7d2e0..3922bf5fa1 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_gay.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_gay" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_gay" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderfluid.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderfluid.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json index ee84a87e50..788be0d074 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderfluid.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_genderfluid" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_genderfluid" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderqueer.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderqueer.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json index a5d706b3f3..db56478852 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderqueer.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_genderqueer" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_genderqueer" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_intersex.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_intersex.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json index 592a3f5cf2..0cf8605f6e 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_intersex.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_intersex" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_intersex" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_lesbian.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_lesbian.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json index eefd174c3b..60faeb98cb 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_lesbian.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_lesbian" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_lesbian" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_nonbinary.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_nonbinary.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json index 87d59afe53..1592908ece 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_nonbinary.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_nonbinary" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_nonbinary" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_plural.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json similarity index 76% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_plural.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json index 9b616724e0..662aaf38fc 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_plural.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_plural" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_plural" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_transgender.json b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json similarity index 74% rename from Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_transgender.json rename to Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json index cb09eaa35e..cce2b91ea8 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_transgender.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json @@ -15,7 +15,7 @@ " D " ], "result": { - "item": "hexcasting:pride_colorizer_transgender" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:pride_colorizer_transgender" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll.json b/Common/src/generated/resources/data/hexcasting/recipe/scroll.json similarity index 79% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/scroll.json rename to Common/src/generated/resources/data/hexcasting/recipe/scroll.json index 50fa3bb410..cf7a4fcfb1 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/scroll.json @@ -15,7 +15,7 @@ "PPP" ], "result": { - "item": "hexcasting:scroll" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:scroll" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_medium.json b/Common/src/generated/resources/data/hexcasting/recipe/scroll_medium.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_medium.json rename to Common/src/generated/resources/data/hexcasting/recipe/scroll_medium.json index ad3445812d..85b2a98f34 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_medium.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/scroll_medium.json @@ -15,7 +15,7 @@ "PP " ], "result": { - "item": "hexcasting:scroll_medium" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:scroll_medium" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_paper.json b/Common/src/generated/resources/data/hexcasting/recipe/scroll_paper.json similarity index 82% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_paper.json rename to Common/src/generated/resources/data/hexcasting/recipe/scroll_paper.json index 18c3c67bec..1feb96a530 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_paper.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/scroll_paper.json @@ -19,7 +19,6 @@ ], "result": { "count": 8, - "item": "hexcasting:scroll_paper" - }, - "show_notification": true + "id": "hexcasting:scroll_paper" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_paper_lantern.json b/Common/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json similarity index 75% rename from Fabric/src/generated/resources/data/hexcasting/recipes/scroll_paper_lantern.json rename to Common/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json index 3b9aa6a140..5434f4c7f1 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_paper_lantern.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json @@ -14,7 +14,7 @@ "B" ], "result": { - "item": "hexcasting:scroll_paper_lantern" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:scroll_paper_lantern" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_small.json b/Common/src/generated/resources/data/hexcasting/recipe/scroll_small.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_small.json rename to Common/src/generated/resources/data/hexcasting/recipe/scroll_small.json index 1772485731..c64a3e544a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_small.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/scroll_small.json @@ -14,7 +14,7 @@ "P " ], "result": { - "item": "hexcasting:scroll_small" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:scroll_small" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/slate.json b/Common/src/generated/resources/data/hexcasting/recipe/slate.json similarity index 80% rename from Fabric/src/generated/resources/data/hexcasting/recipes/slate.json rename to Common/src/generated/resources/data/hexcasting/recipe/slate.json index 43863d1aa2..eb718972c2 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/slate.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/slate.json @@ -15,7 +15,6 @@ ], "result": { "count": 6, - "item": "hexcasting:slate" - }, - "show_notification": true + "id": "hexcasting:slate" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/slate_block.json b/Common/src/generated/resources/data/hexcasting/recipe/slate_block.json similarity index 82% rename from Fabric/src/generated/resources/data/hexcasting/recipes/slate_block.json rename to Common/src/generated/resources/data/hexcasting/recipe/slate_block.json index 5bd7d2052f..975fea26a0 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/slate_block.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/slate_block.json @@ -19,7 +19,6 @@ ], "result": { "count": 8, - "item": "hexcasting:slate_block" - }, - "show_notification": true + "id": "hexcasting:slate_block" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/slate_block_from_slates.json b/Common/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json similarity index 72% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/slate_block_from_slates.json rename to Common/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json index a04d33319a..92bf412fdf 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/slate_block_from_slates.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json @@ -11,7 +11,7 @@ "S" ], "result": { - "item": "hexcasting:slate_block" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:slate_block" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/spellbook.json b/Common/src/generated/resources/data/hexcasting/recipe/spellbook.json similarity index 77% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/spellbook.json rename to Common/src/generated/resources/data/hexcasting/recipe/spellbook.json index 4a7f7ee1ba..d9e9250926 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/spellbook.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/spellbook.json @@ -12,7 +12,7 @@ "item": "minecraft:chorus_fruit" }, "N": { - "tag": "forge:nuggets/gold" + "tag": "c:nuggets/gold" } }, "pattern": [ @@ -21,7 +21,7 @@ "NBA" ], "result": { - "item": "hexcasting:spellbook" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:spellbook" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/acacia.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/acacia.json similarity index 81% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/staff/acacia.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/acacia.json index b6dcd43429..a5e01a9c9a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/acacia.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/acacia.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/acacia" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/acacia" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/bamboo.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/bamboo.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json index 2796a8b049..8c648a860c 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/bamboo.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/bamboo" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/bamboo" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/birch.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/birch.json similarity index 82% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/birch.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/birch.json index 7c91ab627a..2cee68c976 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/birch.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/birch.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/birch" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/birch" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/cherry.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/cherry.json similarity index 81% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/staff/cherry.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/cherry.json index 36a96851b0..fb19b26271 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/cherry.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/cherry.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/cherry" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/cherry" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/crimson.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/crimson.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/crimson.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/crimson.json index 105a164cfc..6f8b4dd09e 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/crimson.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/crimson.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/crimson" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/crimson" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/dark_oak.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/dark_oak.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json index 14ed432aa3..b4a9aea823 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/dark_oak.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/dark_oak" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/dark_oak" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/edified.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/edified.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/edified.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/edified.json index 8ce0918491..29378f8085 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/edified.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/edified.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/edified" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/edified" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/jungle.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/jungle.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/jungle.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/jungle.json index 383db50fce..a3b382cf11 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/jungle.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/jungle.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/jungle" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/jungle" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/mangrove.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/mangrove.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json index 33fb46a8ab..2ad01c0d69 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/mangrove.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/mangrove" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/mangrove" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/mindsplice.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/mindsplice.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json index 8b14081c0c..41c9e8abb0 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/mindsplice.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/mindsplice" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/mindsplice" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/oak.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/oak.json similarity index 82% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/oak.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/oak.json index 5c8e796b5a..75d6d9daab 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/oak.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/oak.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/oak" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/oak" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/quenched.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/quenched.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/quenched.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/quenched.json index 170c8373fc..91fd1fc452 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/quenched.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/quenched.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/quenched" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/quenched" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/spruce.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/spruce.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/spruce.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/spruce.json index 3670939402..0ab7166a60 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/spruce.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/spruce.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/spruce" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/spruce" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/warped.json b/Common/src/generated/resources/data/hexcasting/recipe/staff/warped.json similarity index 81% rename from Fabric/src/generated/resources/data/hexcasting/recipes/staff/warped.json rename to Common/src/generated/resources/data/hexcasting/recipe/staff/warped.json index c8f1b7ce6a..8a71b96aaf 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/warped.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/staff/warped.json @@ -18,7 +18,7 @@ "S " ], "result": { - "item": "hexcasting:staff/warped" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:staff/warped" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/stonecutting/amethyst_tiles.json b/Common/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json similarity index 58% rename from Fabric/src/generated/resources/data/hexcasting/recipes/stonecutting/amethyst_tiles.json rename to Common/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json index 020b0ec65f..7eb40a9ada 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/stonecutting/amethyst_tiles.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json @@ -1,8 +1,10 @@ { "type": "minecraft:stonecutting", - "count": 1, "ingredient": { "item": "minecraft:amethyst_block" }, - "result": "hexcasting:amethyst_tiles" + "result": { + "count": 1, + "id": "hexcasting:amethyst_tiles" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/stripped_edified_wood.json b/Common/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json similarity index 73% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/stripped_edified_wood.json rename to Common/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json index c0cab6f42f..0ccb5ae8e2 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/stripped_edified_wood.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json @@ -12,7 +12,6 @@ ], "result": { "count": 3, - "item": "hexcasting:stripped_edified_wood" - }, - "show_notification": true + "id": "hexcasting:stripped_edified_wood" + } } \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/sub_sandwich.json b/Common/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json similarity index 83% rename from Fabric/src/generated/resources/data/hexcasting/recipes/sub_sandwich.json rename to Common/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json index 937deabc39..82a511fde4 100644 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/sub_sandwich.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json @@ -21,7 +21,7 @@ " B " ], "result": { - "item": "hexcasting:sub_sandwich" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:sub_sandwich" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/thought_knot.json b/Common/src/generated/resources/data/hexcasting/recipe/thought_knot.json similarity index 80% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/thought_knot.json rename to Common/src/generated/resources/data/hexcasting/recipe/thought_knot.json index 2f2c9f9504..d89ad83310 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/thought_knot.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/thought_knot.json @@ -10,6 +10,7 @@ } ], "result": { - "item": "hexcasting:thought_knot" + "count": 1, + "id": "hexcasting:thought_knot" } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/trinket.json b/Common/src/generated/resources/data/hexcasting/recipe/trinket.json similarity index 69% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/trinket.json rename to Common/src/generated/resources/data/hexcasting/recipe/trinket.json index ed357447da..f0c905012a 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/trinket.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/trinket.json @@ -3,7 +3,7 @@ "category": "equipment", "key": { "C": { - "tag": "forge:ingots/iron" + "tag": "c:ingots/iron" }, "I": { "item": "minecraft:amethyst_shard" @@ -15,7 +15,7 @@ " C " ], "result": { - "item": "hexcasting:trinket" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:trinket" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/uuid_colorizer.json b/Common/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json similarity index 81% rename from Neoforge/src/generated/resources/data/hexcasting/recipes/uuid_colorizer.json rename to Common/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json index 418123f8b7..235a2aff68 100644 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/uuid_colorizer.json +++ b/Common/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json @@ -18,7 +18,7 @@ "DCD" ], "result": { - "item": "hexcasting:uuid_colorizer" - }, - "show_notification": true + "count": 1, + "id": "hexcasting:uuid_colorizer" + } } \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/blocks/brainswept_circle_components.json b/Common/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/blocks/brainswept_circle_components.json rename to Common/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/blocks/cheap_to_break_block.json b/Common/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/blocks/cheap_to_break_block.json rename to Common/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/blocks/directrices.json b/Common/src/generated/resources/data/hexcasting/tags/block/directrices.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/blocks/directrices.json rename to Common/src/generated/resources/data/hexcasting/tags/block/directrices.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/blocks/edified_logs.json b/Common/src/generated/resources/data/hexcasting/tags/block/edified_logs.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/blocks/edified_logs.json rename to Common/src/generated/resources/data/hexcasting/tags/block/edified_logs.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/blocks/edified_planks.json b/Common/src/generated/resources/data/hexcasting/tags/block/edified_planks.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/blocks/edified_planks.json rename to Common/src/generated/resources/data/hexcasting/tags/block/edified_planks.json diff --git a/Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json b/Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json new file mode 100644 index 0000000000..094771ef74 --- /dev/null +++ b/Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#minecraft:needs_diamond_tool" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/blocks/impeti.json b/Common/src/generated/resources/data/hexcasting/tags/block/impeti.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/blocks/impeti.json rename to Common/src/generated/resources/data/hexcasting/tags/block/impeti.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/blocks/water_plants.json b/Common/src/generated/resources/data/hexcasting/tags/block/water_plants.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/blocks/water_plants.json rename to Common/src/generated/resources/data/hexcasting/tags/block/water_plants.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json b/Common/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json rename to Common/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json b/Common/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json rename to Common/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json b/Common/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json rename to Common/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/brainswept_circle_components.json b/Common/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/brainswept_circle_components.json rename to Common/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/directrices.json b/Common/src/generated/resources/data/hexcasting/tags/item/directrices.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/directrices.json rename to Common/src/generated/resources/data/hexcasting/tags/item/directrices.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/edified_logs.json b/Common/src/generated/resources/data/hexcasting/tags/item/edified_logs.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/edified_logs.json rename to Common/src/generated/resources/data/hexcasting/tags/item/edified_logs.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/edified_planks.json b/Common/src/generated/resources/data/hexcasting/tags/item/edified_planks.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/edified_planks.json rename to Common/src/generated/resources/data/hexcasting/tags/item/edified_planks.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/grants_root_advancement.json b/Common/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/grants_root_advancement.json rename to Common/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/impeti.json b/Common/src/generated/resources/data/hexcasting/tags/item/impeti.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/impeti.json rename to Common/src/generated/resources/data/hexcasting/tags/item/impeti.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/phial_base.json b/Common/src/generated/resources/data/hexcasting/tags/item/phial_base.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/phial_base.json rename to Common/src/generated/resources/data/hexcasting/tags/item/phial_base.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/seal_materials.json b/Common/src/generated/resources/data/hexcasting/tags/item/seal_materials.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/seal_materials.json rename to Common/src/generated/resources/data/hexcasting/tags/item/seal_materials.json diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/items/staves.json b/Common/src/generated/resources/data/hexcasting/tags/item/staves.json similarity index 100% rename from Neoforge/src/generated/resources/data/hexcasting/tags/items/staves.json rename to Common/src/generated/resources/data/hexcasting/tags/item/staves.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/buttons.json b/Common/src/generated/resources/data/minecraft/tags/block/buttons.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/buttons.json rename to Common/src/generated/resources/data/minecraft/tags/block/buttons.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/crystal_sound_blocks.json b/Common/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/crystal_sound_blocks.json rename to Common/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/doors.json b/Common/src/generated/resources/data/minecraft/tags/block/doors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/doors.json rename to Common/src/generated/resources/data/minecraft/tags/block/doors.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json b/Common/src/generated/resources/data/minecraft/tags/block/fence_gates.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json rename to Common/src/generated/resources/data/minecraft/tags/block/fence_gates.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/fences.json b/Common/src/generated/resources/data/minecraft/tags/block/fences.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/fences.json rename to Common/src/generated/resources/data/minecraft/tags/block/fences.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/leaves.json b/Common/src/generated/resources/data/minecraft/tags/block/leaves.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/leaves.json rename to Common/src/generated/resources/data/minecraft/tags/block/leaves.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/logs.json b/Common/src/generated/resources/data/minecraft/tags/block/logs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/logs.json rename to Common/src/generated/resources/data/minecraft/tags/block/logs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json b/Common/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json rename to Common/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json b/Common/src/generated/resources/data/minecraft/tags/block/mineable/axe.json similarity index 95% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json rename to Common/src/generated/resources/data/minecraft/tags/block/mineable/axe.json index 66e5f0a52f..0d6037e186 100644 --- a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json +++ b/Common/src/generated/resources/data/minecraft/tags/block/mineable/axe.json @@ -2,7 +2,7 @@ "values": [ "hexcasting:akashic_record", "hexcasting:akashic_bookshelf", - "hexcasting:akashic_connector", + "hexcasting:akashic_ligature", "hexcasting:edified_log", "hexcasting:edified_log_amethyst", "hexcasting:edified_log_aventurine", diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/hoe.json b/Common/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/hoe.json rename to Common/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/Common/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json rename to Common/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/shovel.json b/Common/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/mineable/shovel.json rename to Common/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/planks.json b/Common/src/generated/resources/data/minecraft/tags/block/planks.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/planks.json rename to Common/src/generated/resources/data/minecraft/tags/block/planks.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json b/Common/src/generated/resources/data/minecraft/tags/block/pressure_plates.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json rename to Common/src/generated/resources/data/minecraft/tags/block/pressure_plates.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/slabs.json b/Common/src/generated/resources/data/minecraft/tags/block/slabs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/slabs.json rename to Common/src/generated/resources/data/minecraft/tags/block/slabs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/stairs.json b/Common/src/generated/resources/data/minecraft/tags/block/stairs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/stairs.json rename to Common/src/generated/resources/data/minecraft/tags/block/stairs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json b/Common/src/generated/resources/data/minecraft/tags/block/trapdoors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json rename to Common/src/generated/resources/data/minecraft/tags/block/trapdoors.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json b/Common/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json rename to Common/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json b/Common/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json rename to Common/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json b/Common/src/generated/resources/data/minecraft/tags/block/wooden_doors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json rename to Common/src/generated/resources/data/minecraft/tags/block/wooden_doors.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json b/Common/src/generated/resources/data/minecraft/tags/block/wooden_fences.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json rename to Common/src/generated/resources/data/minecraft/tags/block/wooden_fences.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json b/Common/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json rename to Common/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json b/Common/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json rename to Common/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json b/Common/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json rename to Common/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json b/Common/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json rename to Common/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/buttons.json b/Common/src/generated/resources/data/minecraft/tags/item/buttons.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/buttons.json rename to Common/src/generated/resources/data/minecraft/tags/item/buttons.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/doors.json b/Common/src/generated/resources/data/minecraft/tags/item/doors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/doors.json rename to Common/src/generated/resources/data/minecraft/tags/item/doors.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/leaves.json b/Common/src/generated/resources/data/minecraft/tags/item/leaves.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/leaves.json rename to Common/src/generated/resources/data/minecraft/tags/item/leaves.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/logs.json b/Common/src/generated/resources/data/minecraft/tags/item/logs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/logs.json rename to Common/src/generated/resources/data/minecraft/tags/item/logs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/logs_that_burn.json b/Common/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/logs_that_burn.json rename to Common/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/planks.json b/Common/src/generated/resources/data/minecraft/tags/item/planks.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/planks.json rename to Common/src/generated/resources/data/minecraft/tags/item/planks.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/slabs.json b/Common/src/generated/resources/data/minecraft/tags/item/slabs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/slabs.json rename to Common/src/generated/resources/data/minecraft/tags/item/slabs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/trapdoors.json b/Common/src/generated/resources/data/minecraft/tags/item/trapdoors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/trapdoors.json rename to Common/src/generated/resources/data/minecraft/tags/item/trapdoors.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json b/Common/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json rename to Common/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_doors.json b/Common/src/generated/resources/data/minecraft/tags/item/wooden_doors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_doors.json rename to Common/src/generated/resources/data/minecraft/tags/item/wooden_doors.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json b/Common/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json rename to Common/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_slabs.json b/Common/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_slabs.json rename to Common/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json b/Common/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json similarity index 100% rename from Neoforge/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json rename to Common/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json diff --git a/Neoforge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json b/Common/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json similarity index 95% rename from Neoforge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json rename to Common/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json index 46e71c9b97..6699a7a66e 100644 --- a/Neoforge/src/generated/resources/data/forge/loot_modifiers/global_loot_modifiers.json +++ b/Common/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json @@ -1,37 +1,37 @@ { "entries": [ - "hexcasting:scroll/minecraft/chests/nether_bridge", - "hexcasting:scroll/minecraft/chests/village/village_cartographer", - "hexcasting:lore/minecraft/chests/village/village_taiga_house", - "hexcasting:cypher/minecraft/chests/ancient_city", - "hexcasting:cypher/minecraft/chests/jungle_temple", - "hexcasting:scroll/minecraft/chests/shipwreck_map", - "hexcasting:lore/minecraft/chests/village/village_snowy_house", + "hexcasting:scroll/minecraft/chests/simple_dungeon", "hexcasting:scroll/minecraft/chests/abandoned_mineshaft", - "hexcasting:cypher/minecraft/chests/simple_dungeon", - "hexcasting:cypher/minecraft/chests/desert_pyramid", - "hexcasting:amethyst_cluster", - "hexcasting:lore/minecraft/chests/village/village_plains_house", - "hexcasting:lore/minecraft/chests/stronghold_library", "hexcasting:scroll/minecraft/chests/bastion_other", - "hexcasting:lore/minecraft/chests/woodland_mansion", - "hexcasting:lore/minecraft/chests/village/village_desert_house", - "hexcasting:scroll/minecraft/chests/end_city_treasure", + "hexcasting:scroll/minecraft/chests/nether_bridge", "hexcasting:scroll/minecraft/chests/jungle_temple", - "hexcasting:scroll/minecraft/chests/bastion_treasure", - "hexcasting:lore/minecraft/chests/village/village_savanna_house", - "hexcasting:scroll/minecraft/chests/pillager_outpost", "hexcasting:scroll/minecraft/chests/desert_pyramid", - "hexcasting:lore/minecraft/chests/abandoned_mineshaft", - "hexcasting:lore/minecraft/chests/pillager_outpost", - "hexcasting:cypher/minecraft/chests/stronghold_corridor", + "hexcasting:scroll/minecraft/chests/village/village_cartographer", + "hexcasting:scroll/minecraft/chests/shipwreck_map", + "hexcasting:scroll/minecraft/chests/bastion_treasure", + "hexcasting:scroll/minecraft/chests/end_city_treasure", "hexcasting:scroll/minecraft/chests/ancient_city", + "hexcasting:scroll/minecraft/chests/pillager_outpost", + "hexcasting:scroll/minecraft/chests/woodland_mansion", "hexcasting:scroll/minecraft/chests/stronghold_library", "hexcasting:lore/minecraft/chests/simple_dungeon", + "hexcasting:lore/minecraft/chests/abandoned_mineshaft", + "hexcasting:lore/minecraft/chests/pillager_outpost", + "hexcasting:lore/minecraft/chests/woodland_mansion", + "hexcasting:lore/minecraft/chests/stronghold_library", + "hexcasting:lore/minecraft/chests/village/village_desert_house", + "hexcasting:lore/minecraft/chests/village/village_plains_house", + "hexcasting:lore/minecraft/chests/village/village_savanna_house", + "hexcasting:lore/minecraft/chests/village/village_snowy_house", + "hexcasting:lore/minecraft/chests/village/village_taiga_house", + "hexcasting:cypher/minecraft/chests/simple_dungeon", "hexcasting:cypher/minecraft/chests/abandoned_mineshaft", - "hexcasting:scroll/minecraft/chests/woodland_mansion", + "hexcasting:cypher/minecraft/chests/stronghold_corridor", + "hexcasting:cypher/minecraft/chests/jungle_temple", + "hexcasting:cypher/minecraft/chests/desert_pyramid", + "hexcasting:cypher/minecraft/chests/ancient_city", "hexcasting:cypher/minecraft/chests/nether_bridge", - "hexcasting:scroll/minecraft/chests/simple_dungeon" + "hexcasting:amethyst_cluster" ], "replace": false } \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java b/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java index 5904a5b204..d98f9ca773 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/advancements/OvercastTrigger.java @@ -55,10 +55,5 @@ private boolean test(int mediaGeneratedIn, double healthUsedIn, float healthLeft // DID YOU KNOW ALL THE ENEITYT PREDICATES ARE HARD-CODED AND YOU CANT MAKE NEW ONES && this.healthLeft.matches(healthLeftIn); } - - @Override - public Optional player() { - return null; - } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java index 127a6ef0b1..7c6ca4973b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/RegisterClientStuff.java @@ -267,7 +267,7 @@ public static void onModelRegister(ResourceManager recMan, Consumer(); for (int i = 0; i < BlockQuenchedAllay.VARIANTS; i++) { - var variantLoc = new ModelResourceLocation(modLoc(locStart + blockLoc.getPath() + "_" + i), ModelResourceLocation.INVENTORY_VARIANT); + var variantLoc = new ModelResourceLocation(modLoc(locStart + blockLoc.getPath() + "_" + i), IClientXplatAbstractions.INSTANCE.getModelLocVariant()); var model = map.get(variantLoc); list.add(model); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java index 5eaf30f7ea..b97c799ef6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexBlocks.java @@ -187,7 +187,7 @@ private static BlockBehaviour.Properties quenched() { public static final BlockAkashicBookshelf AKASHIC_BOOKSHELF = blockItem("akashic_bookshelf", new BlockAkashicBookshelf(akashicWoodyHard() .lightLevel(bs -> (bs.getValue(BlockAkashicBookshelf.HAS_BOOKS)) ? 4 : 0))); - public static final BlockAkashicLigature AKASHIC_LIGATURE = blockItem("akashic_connector", + public static final BlockAkashicLigature AKASHIC_LIGATURE = blockItem("akashic_ligature", new BlockAkashicLigature(akashicWoodyHard().lightLevel(bs -> 4))); public static final BlockQuenchedAllay QUENCHED_ALLAY = blockItem("quenched_allay", new BlockQuenchedAllay(quenched())); diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java index 8be99bddf5..e2c39f5ffa 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/HexAdvancements.java @@ -119,7 +119,7 @@ public void generate(HolderLookup.Provider provider, Consumer var loreRoot = Advancement.Builder.advancement() .display(simpleDisplayWithBackground(HexBlocks.AKASHIC_LIGATURE, "lore", AdvancementType.GOAL, - modLoc("textures/block/slate.png"))) + modLoc("textures/block/slate_block.png"))) .addCriterion("used_item", new Criterion<>(CriteriaTriggers.CONSUME_ITEM, new ConsumeItemTrigger.TriggerInstance(Optional.empty(), Optional.of(ItemPredicate.Builder.item().of(HexItems.LORE_FRAGMENT).build())))) .save(consumer, prefix("lore")); diff --git a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java index 509cc3c2a2..ab87c932da 100644 --- a/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java +++ b/Common/src/main/java/at/petrak/hexcasting/xplat/IClientXplatAbstractions.java @@ -40,6 +40,8 @@ public interface IClientXplatAbstractions { IClientXplatAbstractions INSTANCE = find(); + String getModelLocVariant(); + private static IClientXplatAbstractions find() { var providers = ServiceLoader.load(IClientXplatAbstractions.class).stream().toList(); if (providers.size() != 1) { diff --git a/Common/src/main/resources/assets/hexcasting/textures/block/slate.png b/Common/src/main/resources/assets/hexcasting/textures/block/slate_block.png similarity index 100% rename from Common/src/main/resources/assets/hexcasting/textures/block/slate.png rename to Common/src/main/resources/assets/hexcasting/textures/block/slate_block.png diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 4089d3c8e4..2aee8820a5 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -117,11 +117,11 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${fabricLoaderVersion}" modImplementation "net.fabricmc.fabric-api:fabric-api:${fabricVersion}" - common(project(path: ':Common', configuration: 'namedElements')) { transitive false } + implementation(project(path: ':Common', configuration: 'namedElements')) { transitive false } shadowBundle project(path: ':Common', configuration: 'transformProductionFabric') // === MANDATORY DEPS === - modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-fabric" + modCompileOnly("at.petra-k:paucal:$paucalVersion+$minecraftVersion-common") // dear mod devs, don't put the platform in the middle of your version code modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-FABRIC-SNAPSHOT" modImplementation "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" @@ -143,9 +143,10 @@ dependencies { modCompileOnly "dev.emi:emi-fabric:${emiVersion}:api" modLocalRuntime "dev.emi:emi-fabric:${emiVersion}" - modRuntimeOnly "dev.architectury:architectury-fabric:$architecturyVersion" - modRuntimeOnly "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" - include(implementation("blue.endless:jankson:1.2.2")) + modLocalRuntime "dev.architectury:architectury-fabric:$architecturyVersion" + modLocalRuntime "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" + modLocalRuntime "at.petra-k:paucal:$paucalVersion+$minecraftVersion-fabric" + localRuntime "blue.endless:jankson:1.2.2" // modImplementation "maven.modrinth:gravity-api:$gravityApiVersion" diff --git a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 b/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 deleted file mode 100644 index a2a95b576a..0000000000 --- a/Fabric/src/generated/resources/.cache/19f2b40f78e342d65a8cb499a41e3fcb2eadaca3 +++ /dev/null @@ -1,58 +0,0 @@ -// 1.20.1 2025-01-23T15:50:44.3944222 Hex Casting/Loot Tables -4efd95d408d050c36ff21b18f3c37116491fef92 data\hexcasting\loot_tables\blocks\directrix\redstone.json -c81a5cb81141ab1fe09dd5dd3a0968b69dfffbd7 data\hexcasting\loot_tables\blocks\stripped_edified_log.json -a62ffbcec2aa40172e05cd9fcd8e70e295d008e9 data\hexcasting\loot_tables\blocks\edified_fence_gate.json -8ea8fd68719a960c2e132df441564a70c0e376a8 data\hexcasting\loot_tables\blocks\amethyst_pillar.json -9905b767be7849e02a8e4ec4170af1bdde4e7fab data\hexcasting\loot_tables\blocks\edified_stairs.json -0b734693c926045b60fb515814b7a6695d0295fc data\hexcasting\loot_tables\blocks\impetus\look.json -ab86e126a704550d3f21c0b43f99fdc2665e4b09 data\hexcasting\loot_tables\blocks\slate_amethyst_tiles.json -2c9af74a82ca462e5986354966d5a0a1fd5a2083 data\hexcasting\loot_tables\blocks\slate_tiles.json -bedbc2bd04f79372aedea64214ba2ea49cde9640 data\hexcasting\loot_tables\blocks\amethyst_edified_leaves.json -45dc91d820caa5c421fe6f2afc7f71e45d6acd4d data\hexcasting\loot_tables\blocks\slate_pillar.json -6c35afda4ca349f3506fe08f86f0afe58a6f2c44 data\hexcasting\loot_tables\blocks\quenched_allay.json -2902c4dae60875a1b2daf0a948a49a3419d8ec9d data\hexcasting\loot_tables\blocks\edified_log.json -95be0cf7f277257671631929462131b6d611119a data\hexcasting\loot_tables\inject\amethyst_cluster.json -b19ac49146149555038e6d2e06200d514df1ef43 data\hexcasting\loot_tables\blocks\akashic_bookshelf.json -c426245d51f1e0fa0db7c4bfb454284d75506c9c data\hexcasting\loot_tables\blocks\quenched_allay_bricks.json -6920654f50532b5e557646e34edc4872339eb79f data\hexcasting\loot_tables\blocks\edified_log_amethyst.json -6eecc98b606d7ea5ec6f4c1fa4f63f7c1eba9223 data\hexcasting\loot_tables\blocks\slate_amethyst_bricks.json -2ad288784b0dc106ace2e6e0a40669f83476c414 data\hexcasting\loot_tables\blocks\slate.json -49940d1cb2599212e2837d7ed66c6c66e54f80f8 data\hexcasting\loot_tables\blocks\akashic_record.json -d16fa9e366d48646686470c2d1f9bda4db3a1afa data\hexcasting\loot_tables\blocks\ancient_scroll_paper.json -cc7313cc33609fe1120baa7b4db631eaa29fbba1 data\hexcasting\loot_tables\blocks\citrine_edified_leaves.json -df5496da8e48b61a171bc7a3936495c016cc002e data\hexcasting\loot_tables\blocks\directrix\empty.json -92528799c8ee13ff26c3c505e4dfb286c30f97c7 data\hexcasting\loot_tables\blocks\akashic_connector.json -434c2a6d2645e56e9a6ca56249ffa84645558e3b data\hexcasting\loot_tables\blocks\quenched_allay_bricks_small.json -601384d888edab27efe4a33027bb557eb7cb6ca2 data\hexcasting\loot_tables\blocks\edified_log_purple.json -45ae0ec668a07aa5b33d491377b2978f69f9f019 data\hexcasting\loot_tables\blocks\edified_panel.json -55f265961463a89c243ec8ac1970c70185f064a6 data\hexcasting\loot_tables\blocks\edified_button.json -7123b1a0469d7bd5bf8a2772182d222bf354df1a data\hexcasting\loot_tables\blocks\slate_bricks_small.json -509ecbb9731e75b63638c6012b2f986f131fd42f data\hexcasting\loot_tables\blocks\slate_amethyst_bricks_small.json -74159c21634679a6ab1dde1c181433db8b31c6ae data\hexcasting\loot_tables\blocks\edified_log_citrine.json -1dd4268edf7d6fa247013ab45541c7bfb915eef8 data\hexcasting\loot_tables\blocks\amethyst_bricks_small.json -499af9f15cf0a7f16fd2939e5d3af60a8089cc3e data\hexcasting\loot_tables\blocks\slate_bricks.json -30f06db8c1ea74c9f4d95474e412336d065ac888 data\hexcasting\loot_tables\blocks\edified_door.json -7c9c94d5b6b570d25eff32d4fa2ecc1e842e5231 data\hexcasting\loot_tables\blocks\quenched_allay_tiles.json -65fe724d4c4ba8b0ab7d7a11bf37687413d9119d data\hexcasting\loot_tables\blocks\edified_fence.json -cf6ff1ed1ee6fdbb05af16468a0a0ced79ac334e data\hexcasting\loot_tables\blocks\amethyst_bricks.json -8c6c0486170537d73b923a2b9f83722107fc8716 data\hexcasting\loot_tables\blocks\edified_log_aventurine.json -dc4c6d270b8e93d05ac8ddeb1b9dd1d64828ac5d data\hexcasting\loot_tables\blocks\stripped_edified_wood.json -2ab674e834184b4e17dc002556d4473cac137445 data\hexcasting\loot_tables\blocks\edified_slab.json -e6ff979aa47877c1b807075c448defd249cd3484 data\hexcasting\loot_tables\blocks\slate_amethyst_pillar.json -9ff760d5db5628328ea9274c98e18a08f1ab983e data\hexcasting\loot_tables\blocks\slate_block.json -f1145860d80ff053970b1ad4f3b2f5d9f28e7c73 data\hexcasting\loot_tables\blocks\directrix\boolean.json -44658abcf122575878834d276ebcf5d8a6b7b398 data\hexcasting\loot_tables\blocks\aventurine_edified_leaves.json -849afa706e7479d1c11bb40ae223ae5833e71286 data\hexcasting\loot_tables\blocks\scroll_paper_lantern.json -b6c23fdde4f2c22c81f008604d5ff1c32ca8eb61 data\hexcasting\loot_tables\blocks\amethyst_tiles.json -10cb1b94596ac7131efe3bd5c36c1543ddba9302 data\hexcasting\loot_tables\blocks\impetus\redstone.json -147e0739a712a9050856cebcad1757b3f418f647 data\hexcasting\loot_tables\blocks\edified_trapdoor.json -5f8d09e8c759d05cf9c2265ae28ea942cfbbe2be data\hexcasting\loot_tables\blocks\edified_pressure_plate.json -ecaeb4d5703a7aa206627ed38ee71aeb7e93d688 data\hexcasting\loot_tables\blocks\impetus\rightclick.json -a4e0194d8966a24531e43e04437cdb2a96456898 data\hexcasting\loot_tables\blocks\edified_tile.json -1a1236e54c24b5aeff05919c73c76151da2cf115 data\hexcasting\loot_tables\blocks\amethyst_sconce.json -c15d3ced89c882dfe552f84435fcdd560b729567 data\hexcasting\loot_tables\blocks\scroll_paper.json -92331eb19422730ffda0a3e52427a75aa1f7aff2 data\hexcasting\loot_tables\blocks\ancient_scroll_paper_lantern.json -b706c8a064f717c57104c48ea42aa860b45cf7a4 data\hexcasting\loot_tables\blocks\amethyst_dust_block.json -2ac70e3c3600c88b2544d9755fc634216a7a523c data\hexcasting\loot_tables\blocks\edified_wood.json -1c6b077aae560e780be29e74ddcd4b0ca10ce3cf data\hexcasting\loot_tables\blocks\impetus\empty.json -847bc3ead8a88a8f210a24e7732c28d50aa2f5dc data\hexcasting\loot_tables\blocks\edified_planks.json diff --git a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c b/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c deleted file mode 100644 index 0e1d57cba2..0000000000 --- a/Fabric/src/generated/resources/.cache/2ba8da2cf2d44ff18dc72cc891b094eca6836a5c +++ /dev/null @@ -1,25 +0,0 @@ -// 1.20.1 2025-01-23T15:50:44.4049409 Hex Casting/Tags for minecraft:item -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\items\planks.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs.json -20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\wooden_buttons.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\slabs.json -ef8ae066fea6277ba2ab43faf18757b88f7c4803 data\hexcasting\tags\items\grants_root_advancement.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\hexcasting\tags\items\edified_planks.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\wooden_doors.json -4461ef6db41a675fd077dd833cfd0ea537e755be data\c\tags\items\amethyst_dusts.json -38d781b60c5c37dc025d4c7e9ec5aa680f2a5835 data\c\tags\items\gems.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\hexcasting\tags\items\edified_logs.json -c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\items\brainswept_circle_components.json -30780136e6469a01369d7e278998edb6d7f6a16b data\hexcasting\tags\items\staves.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\items\wooden_slabs.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\wooden_trapdoors.json -9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\items\directrices.json -e186f43ed06770e698c886691f91b2c6acdb5a2a data\hexcasting\tags\items\seal_materials.json -5928bad07d3872bb60f29ef4f3c885c8e1967c20 data\hexcasting\tags\items\phial_base.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\items\doors.json -37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\items\wooden_pressure_plates.json -bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\items\impeti.json -20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\items\buttons.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\items\leaves.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\items\trapdoors.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\items\logs_that_burn.json diff --git a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c b/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c deleted file mode 100644 index c7442d4c4d..0000000000 --- a/Fabric/src/generated/resources/.cache/3cb4ab563deee432e7d307024048f57946bafb1c +++ /dev/null @@ -1,4 +0,0 @@ -// 1.20.1 2025-01-23T15:50:44.4152906 Hex Casting/Tags for hexcasting:action -6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\per_world_pattern.json -6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\can_start_enlighten.json -6fe30f41e2bcd48589caab26d210a513dce1ab7c data\hexcasting\tags\action\requires_enlightenment.json diff --git a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 b/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 deleted file mode 100644 index 657625c00a..0000000000 --- a/Fabric/src/generated/resources/.cache/812fdb58b7018b2d5c5af7da57a2b1857fa66794 +++ /dev/null @@ -1,34 +0,0 @@ -// 1.20.1 2025-01-23T15:50:44.400399 Hex Casting/Tags for minecraft:block -e8d5ef7eabb567228b279b2419e4f042082d7491 data\minecraft\tags\blocks\fences.json -7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\fence_gates.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\doors.json -c72a147bc65d26424df199388969ebd11119aed3 data\hexcasting\tags\blocks\brainswept_circle_components.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\leaves.json -bdb90cee0e88e02f0b98f12d5dd212adfaca9afd data\hexcasting\tags\blocks\impeti.json -37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\pressure_plates.json -8cd7a960fd719f200b0bf38100cd17c73b66d39c data\minecraft\tags\blocks\mineable\pickaxe.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\blocks\logs_that_burn.json -357eddf3cee6f16725bed0701d57b2ca3097d74d data\minecraft\tags\blocks\mineable\shovel.json -4b84fc8b7976df220be382bdda66ecf25ceee559 data\create\tags\blocks\brittle.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\blocks\slabs.json -7acae0c88f5ead65339db1b11b16f60214434c86 data\minecraft\tags\blocks\wooden_fences.json -281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\wooden_stairs.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\blocks\trapdoors.json -643994ee757a533cfb5001689e0f0263956b8a35 data\minecraft\tags\blocks\mineable\axe.json -5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data\minecraft\tags\blocks\wooden_trapdoors.json -20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\blocks\wooden_buttons.json -37cff4ce449b8069b59b2327d78e073fc026d348 data\minecraft\tags\blocks\wooden_pressure_plates.json -6f52ca5e42991af6d7b829f626010ce304277464 data\minecraft\tags\blocks\crystal_sound_blocks.json -6ae561f7399e39ffa0e97bd0569aeffa9eabff6a data\hexcasting\tags\blocks\water_plants.json -9d18fb7a889031a704ca0e553600e1d6f8c3759d data\hexcasting\tags\blocks\directrices.json -7e1e353cb7f561f086898f991ece48e047991934 data\minecraft\tags\blocks\unstable_bottom_center.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\minecraft\tags\blocks\logs.json -20183cd61968ff6548df2dde1100b6378d68d64b data\minecraft\tags\blocks\buttons.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\minecraft\tags\blocks\planks.json -e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data\hexcasting\tags\blocks\edified_planks.json -5bbfd513fd2eb2090b0c2d1ec33504deb79d53b9 data\minecraft\tags\blocks\wooden_slabs.json -fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data\minecraft\tags\blocks\wooden_doors.json -281cb08b9b68ef049820c4f3f36b40820044681e data\minecraft\tags\blocks\stairs.json -eba53f6c7645de4ef5ffb1e10ef34a4c23e98887 data\hexcasting\tags\blocks\cheap_to_break_block.json -5f3b600b4fd98744bd08c993ce7bcb9c2f195cd2 data\minecraft\tags\blocks\mineable\hoe.json -c562b4be24d0b6b13f3c65599d3bfa3bf2c4ce21 data\hexcasting\tags\blocks\edified_logs.json diff --git a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b b/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b deleted file mode 100644 index c845076e2a..0000000000 --- a/Fabric/src/generated/resources/.cache/c70ef2fe5da52437c1f53bcc9ea0e416f16bcc0b +++ /dev/null @@ -1,220 +0,0 @@ -// 1.20.1 2025-01-23T15:50:44.4089311 Hex Casting/Recipes -1d1e73244fb3da633d8a5f84bad93c6022a94368 data\hexcasting\advancements\recipes\misc\pride_colorizer_demiboy.json -49e706193bb57a957091e419bd0d8aa58135da1f data\hexcasting\recipes\dye_colorizer_green.json -071e5875b13b60aac33bc97e408d2ca710ac5d02 data\hexcasting\advancements\recipes\building_blocks\stonecutting\amethyst_tiles.json -fb852d8e4bcfa7b75f41a6ac7dc1e76b00d95fb1 data\hexcasting\advancements\recipes\misc\dye_colorizer_red.json -9269b17eaae3217422352354fc6006c9808b398c data\hexcasting\recipes\dye_colorizer_black.json -5d6d73e16a36da5f9df6a7b8ac859181d401766d data\hexcasting\recipes\uuid_colorizer.json -e11aeded7f5d3fdd224627c67661bbd993901703 data\hexcasting\recipes\edified_pressure_plate.json -8c52917fc7041c483fb6dfe8d16c90f096f2beaf data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_amethyst.json -d6b7a9392320c11866b3f139f97977dc9f55bc47 data\hexcasting\recipes\scroll_small.json -c1846dd794f5cc5814b8a839291e82512a02ba12 data\hexcasting\advancements\recipes\misc\pride_colorizer_plural.json -17a1adf747b99848381ca8e7c5e2cd9dd96c014f data\hexcasting\advancements\recipes\misc\default_colorizer.json -f347f4ce869207e62a7887df1252505a3432e12a data\hexcasting\recipes\pride_colorizer_genderfluid.json -f8ee073c1c03f1c11147e4801eeba1f86e5459ba data\hexcasting\recipes\dye_colorizer_blue.json -b16ff5314d457bc7e9e224e102d1e04ce3a62361 data\hexcasting\recipes\brainsweep\directrix_redstone.json -862f1a61a296a834df8a93dbd5a6cdfa2df15721 data\hexcasting\advancements\recipes\tools\staff\acacia.json -ea87956c49dcfabb0d39af45c016130d258181da data\hexcasting\recipes\staff\birch.json -5e66982df6a1074c81f381898033b521ca337695 data\hexcasting\recipes\staff\quenched.json -ee5db13cbb33d9c62bcb1eb645e2c4bea97ad44a data\hexcasting\advancements\recipes\building_blocks\amethyst_dust_unpacking.json -f4c56ea7143ce92a0ae0b663310e53644a7309f7 data\hexcasting\advancements\recipes\misc\pride_colorizer_pansexual.json -3b03fdae3896212a0b8b9b3a2d4880d197e67d2d data\hexcasting\recipes\jeweler_hammer.json -7ca0f9fc6e8ae1ad08ef5c29a0b279b891f7d8d4 data\hexcasting\advancements\recipes\misc\pride_colorizer_aroace.json -b6fa898369ac52cdd9d7f91e3b8a2cb881c3829f data\hexcasting\advancements\recipes\decorations\scroll_medium.json -0654e70ed1ed8be20ae3dd9f4955cd14f9fa40d0 data\hexcasting\advancements\recipes\tools\staff\jungle.json -1b570b35288be9f6faab1536d6e45cb52eb088c0 data\hexcasting\advancements\recipes\tools\staff\dark_oak.json -505eb9192df0b48867e58e09ce36b2259dc6d3e8 data\hexcasting\advancements\recipes\decorations\scroll.json -09096a40275b6c49d4b4e6984869aa43b34712c3 data\hexcasting\recipes\dynamicseal_focus.json -b7084f131b0cdb9c2c698a3c5b3450d69e788d6e data\hexcasting\recipes\dye_colorizer_yellow.json -55602e415fc1b797439b674050887e9e388558c9 data\hexcasting\advancements\recipes\building_blocks\edified_panel.json -a9111ff52513200af47b79cf98b2e545699497bb data\hexcasting\advancements\recipes\building_blocks\amethyst_tiles.json -ea63e49709bd80cb9f4cd1fe13e9bd0281101c9a data\hexcasting\recipes\slate.json -8e48c680b38666c2e7da71fbe4ceddf5d99a5cbc data\hexcasting\advancements\recipes\food\sub_sandwich.json -4d5e4a6374731b2d0a90c70a5d489703fd966977 data\hexcasting\advancements\recipes\misc\dye_colorizer_lime.json -7552df3fc726cc4cdaa88aa4823eff6ce069fb75 data\hexcasting\recipes\slate_block_from_slates.json -72f70637aea1c11683e9ee91d83c2807c6ec33a9 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_trapdoor.json -2cea013887734cbc4971bcd57e7e4f6a2b25c8e1 data\hexcasting\advancements\recipes\tools\focus.json -f1bae034d27d218bf262a8c777b787d232489f16 data\hexcasting\recipes\lens.json -963d87d2738686e5398a178b8b369228ff067403 data\hexcasting\recipes\spellbook.json -f0e71ae8c6a9170669f44096a55a875d11497c56 data\hexcasting\recipes\staff\warped.json -7c479398bbc7185a2c3efd568ad266d8109245bf data\hexcasting\advancements\recipes\redstone\edified_door.json -7baf0777533737aef68bcac36944943b77138d29 data\hexcasting\recipes\edified_button.json -daa7b13d5370f4306f8cdf3037fc346e8918950a data\hexcasting\recipes\dye_colorizer_brown.json -f08a0aee92b281ae325d907e6fe4a3b03980f2aa data\hexcasting\advancements\recipes\tools\staff\edified.json -61fafd43af83bdca6720d0993ab71f40a8bebd40 data\hexcasting\advancements\recipes\redstone\akashic_connector.json -00853ec1885c1f72674c07caf6fd04904e248f8f data\hexcasting\recipes\brainsweep\directrix_boolean.json -b90ad4cbffc2e3c01671dfe8bda5e42d9b8a685c data\hexcasting\advancements\recipes\tools\staff\crimson.json -ef96ae9709ec931ce6b6af8a539f9bc483236449 data\hexcasting\recipes\scroll_medium.json -552c235dc58a46a3e57913c9b9faf3f21abeae32 data\hexcasting\advancements\recipes\building_blocks\stripped_edified_wood.json -a0b87b1b21506708d09c9295b7afc13de6b1fce6 data\hexcasting\recipes\pride_colorizer_aromantic.json -ae88fcdecbfbdd0a0fe778467421a3b32d7ed735 data\create\recipes\crushing\amethyst_cluster.json -aa7558ec1baf6070efbe448d886e20e964e33f96 data\hexcasting\advancements\recipes\brainsweep\brainsweep\quench_allay.json -a8d604ba059d54502837809815d3ac9bbcaa89bf data\hexcasting\advancements\recipes\redstone\akashic_bookshelf.json -5889e2df2fb4e1ea29f2590b96bb3aa94961a09a data\hexcasting\recipes\scroll.json -0038883bd294cc8a1b324d6782478d5e37b4dbf9 data\hexcasting\advancements\recipes\misc\dye_colorizer_pink.json -71f821f5d24b0bf9ecd860d51e055628fe4af50c data\hexcasting\recipes\edified_panel.json -7e1a5a873d655e0efba80f22ae9b1de4f248e67a data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\shard.json -417695497a95436186c1a4ed842d7975d754f9eb data\hexcasting\recipes\stripped_edified_wood.json -92bdf87687d8823036fae6bd01782c653831286b data\hexcasting\recipes\brainsweep\impetus_look.json -3608f0ec056f2c5d29a9a89305218497fd2c4383 data\hexcasting\recipes\stonecutting\amethyst_tiles.json -8815ea5d8d7379062e050adc5736cc579c3bdd9e data\hexcasting\recipes\edified_stairs.json -f482a4349786388cc8f11d5550548f7d60265438 data\hexcasting\recipes\staff\mangrove.json -6e2dc32f975d987b8dfd329507334f647bceadc0 data\hexcasting\advancements\recipes\tools\staff\mangrove.json -5a90084c03d6e8424872870c8b65f4771b447f03 data\hexcasting\recipes\brainsweep\budding_amethyst.json -2eacf53894ae97712dc3874777e29dce0a0e5540 data\hexcasting\advancements\recipes\misc\pride_colorizer_asexual.json -af9a260c24e0a65eea321f0dd9dd2fa7d648707f data\hexcasting\advancements\recipes\building_blocks\amethyst_dust_packing.json -24c244e53c7e47b85845d2ee36b1665410cf495a data\hexcasting\recipes\edified_planks.json -b84c113ef5321c9df9ac9080de03e8d8639feab2 data\hexcasting\advancements\recipes\misc\pride_colorizer_genderqueer.json -97062771a426f6e4b9e3bfd6daa62b1d4b3c7039 data\hexcasting\recipes\abacus.json -41a570f970c9af8229cb1140a11a5220fac00957 data\hexcasting\advancements\recipes\tools\staff\spruce.json -2c56c267e23e75d5a3b9358d424d69642e001b50 data\hexcasting\recipes\decompose_quenched_shard\dust.json -4003f297be29810cebde4995fb2838c2c68a25ea data\hexcasting\recipes\pride_colorizer_lesbian.json -5f216dbb7b89fd837e2dd73e3ed41c8d412de234 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\dust.json -648f1862fde1dd8ade80b2991b8c8e3991389e95 data\hexcasting\recipes\dye_colorizer_light_blue.json -fb486df96798724da2fcc0df5706f19bc1ff94dc data\hexcasting\advancements\recipes\misc\dye_colorizer_light_blue.json -946cde51bbfc2af344b078f6b39389ffc44462f4 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_storedplayer.json -0b951ce7b9d1bfb07ae012b12225b595d36c6e66 data\hexcasting\recipes\amethyst_dust_packing.json -838b91c33a72a58aa286607eaaa17cdd6b4c90ba data\hexcasting\recipes\amethyst_sconce.json -8f515bf8ccea70b3d88845ed83966dc0c66082f6 data\hexcasting\advancements\recipes\tools\staff\oak.json -0f2e63a9361d18aac764f6a4a4f13b9b862ac2ee data\hexcasting\recipes\compat\create\crushing\amethyst_shard.json -cedc2889c4f327b18755bbe8c3c595d302e2a9d0 data\hexcasting\recipes\decompose_quenched_shard\shard.json -2003fed3aa4eb622b6b07a9e65946fb40be14420 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_rightclick.json -7d71eb93bbb0856167cf4521283e39f0048078ee data\hexcasting\advancements\recipes\redstone\edified_button.json -0bd7c9f4a9bf29c1b63b2f9378f0a7e2f594b7b7 data\hexcasting\recipes\pride_colorizer_nonbinary.json -157ee5fba985bbd01a87f44578890dab5489a8e5 data\hexcasting\advancements\recipes\misc\dye_colorizer_green.json -c2ef04b311251b4eb22320b2f5313c54533a9974 data\hexcasting\advancements\recipes\tools\staff\birch.json -2fff80cd3dabd2bc1744eecd72b2364b0f91c7c1 data\hexcasting\advancements\recipes\misc\dye_colorizer_yellow.json -e536791d0c6fb48206e6e30d56879eaf0a9e4bd7 data\hexcasting\recipes\akashic_bookshelf.json -faaa9c39dbcdd131c5fbec9ac6a26d6dc5e72053 data\hexcasting\advancements\recipes\misc\dye_colorizer_light_gray.json -e0609202271e402d8ae58e4f8eaf11dcdda10a9e data\hexcasting\recipes\brainsweep\akashic_record.json -3bf96944a8eed8b8d3f5d96b609297727c078cb7 data\hexcasting\advancements\recipes\misc\dye_colorizer_purple.json -203b7035125390abb4ed77b3a4dca8f8f8f57bc5 data\hexcasting\recipes\dye_colorizer_light_gray.json -e691130641b11c0a030a51c71dee0ba356f3b5bd data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_aventurine.json -8f7b81add0153ad94900acc66cd8174ae7115f64 data\hexcasting\advancements\recipes\building_blocks\slate_block_from_slates.json -06402fb37fe4bb05918d13dbfdb89f4c2b67f3ec data\hexcasting\advancements\recipes\tools\cypher.json -c8f2ad363e4d20054f4e56fde02c8775a45a7169 data\hexcasting\recipes\artifact.json -8bea75fdc5e64c464dcf5f85166e767ff44e6dc2 data\hexcasting\advancements\recipes\misc\pride_colorizer_lesbian.json -c6228d72ca800a7dd336e82bbb9b4f20f89de29d data\hexcasting\advancements\recipes\redstone\edified_pressure_plate.json -0aaf55492e850d2bb1ec2f9986406ca61fde4cfd data\hexcasting\recipes\dye_colorizer_lime.json -e6a592721234448f2ee7ec402bca10a9b78b4677 data\hexcasting\advancements\recipes\decorations\slate.json -e9166f40c8797cdbf3d8062dfa35c74f850f1000 data\hexcasting\advancements\recipes\misc\dye_colorizer_white.json -2aa7d74e29a7c5ee4f1b8835cf7c6109eed81d77 data\hexcasting\recipes\brainsweep\quench_allay.json -f81053a3269c1b371be3f8057bad4803056ee0f9 data\hexcasting\recipes\dye_colorizer_orange.json -bc729ac7cf84d29a99cd34d50c152c0b9d20bd7a data\hexcasting\advancements\recipes\brainsweep\brainsweep\akashic_record.json -1a9dd55a24f56a4e9467f1117e0898f7e71ade67 data\hexcasting\advancements\recipes\decorations\amethyst_sconce.json -d7de5d626fd799a2522af36f0c62c52fe490e6d2 data\hexcasting\recipes\edified_door.json -c3f7b03fe184ed5e54a8ae06d130adf507b7683d data\hexcasting\recipes\staff\bamboo.json -6f2634e5588aede8e29157ecc859652d8a9f4065 data\hexcasting\advancements\recipes\misc\dye_colorizer_orange.json -b10d590e918e35b16578a8b739a1c4e7e2202e16 data\hexcasting\advancements\recipes\misc\dye_colorizer_cyan.json -0e792d49c81d2164e827d1bdedaa0fa358dfc437 data\hexcasting\advancements\recipes\misc\pride_colorizer_aromantic.json -afb422ad4a918ee0161bf077f09475bb1da2b4eb data\hexcasting\recipes\amethyst_dust_unpacking.json -98c0843e6a83b91820f1c720e206295eec20ff95 data\hexcasting\recipes\ancient_scroll_paper.json -011f8daf15148d4b77686c6d382d8f5c288a333d data\hexcasting\advancements\recipes\building_blocks\ancient_scroll_paper.json -9b7c5220fbaf3e84fa9e81eae322eed5d37b22d3 data\hexcasting\recipes\pride_colorizer_transgender.json -a1f9df0537c0ef33a1164cf94e8ff4b1094f889f data\hexcasting\advancements\recipes\tools\staff\warped.json -54335e0004423899ad37763a1d8456cc0a6e72a7 data\hexcasting\advancements\recipes\misc\decompose_quenched_shard\charged.json -641d8c38b8109665314fccbebd9068ba10b04118 data\hexcasting\advancements\recipes\misc\dye_colorizer_gray.json -5e98cec2084f0cfbb959c3ec39bd85a3369f443b data\hexcasting\advancements\recipes\tools\abacus.json -b300f7729e75614fce412457f6717686680f81da data\hexcasting\recipes\sub_sandwich.json -1a0d55e6824c078453c1d44e885a1c51ba707a41 data\hexcasting\recipes\dye_colorizer_white.json -36d26f34d0405ff2d1e728e5b5174502686e3590 data\hexcasting\advancements\recipes\brainsweep\brainsweep\budding_amethyst.json -903cbe4d4c4e5abcd5e006f9d0237e8c596228ba data\hexcasting\recipes\edified_tile.json -1093cccc6b1c45eb91f7c1680ef575a7bffb2744 data\hexcasting\advancements\recipes\building_blocks\edified_planks.json -233aeedc73173427e7b2287772a4f914f97b072c data\hexcasting\recipes\dye_colorizer_red.json -2a2f60fb0f63ee278b74c418acf04575304c521f data\hexcasting\advancements\recipes\tools\jeweler_hammer.json -004e0694b3bf53140be7df89a4defc255b800619 data\hexcasting\advancements\recipes\tools\focus_rotated.json -ea46e570a43cd3ea1cc78c51d9da45d93944730a data\hexcasting\advancements\recipes\redstone\directrix\empty.json -4d941fc399c6b7a470513a572ecd88982823da84 data\hexcasting\advancements\recipes\building_blocks\edified_wood.json -aa1caae7eba6aede0f179619488e2253b3b723dd data\hexcasting\recipes\focus_rotated.json -b1f8375aaf0d66035dee720ea59605f69fc0a154 data\hexcasting\recipes\edified_fence.json -1b092acfc3115702c74e141492e649d58512f259 data\hexcasting\recipes\staff\oak.json -0864e8b86bdad0bf9ab2ddeb0cd5a182808b5a0a data\hexcasting\recipes\default_colorizer.json -40ed21dc80d39236ca0e6d2cea60861c637cf931 data\hexcasting\advancements\recipes\misc\pride_colorizer_nonbinary.json -04902d4eca30560bc601a8196d82f74f3fa5b191 data\hexcasting\recipes\dynamicseal_spellbook.json -bd63b845e02ee4b1b9abe168a196335ccbed1ca5 data\hexcasting\recipes\scroll_paper_lantern.json -996c8361766377a70e0b5a5caff3076fc6031b0a data\hexcasting\recipes\impetus\empty.json -8b7136c206b799a2e394aa02316b0509674ff64f data\hexcasting\advancements\recipes\tools\staff\bamboo.json -c1541738df1ee41c362ad3b9c3a9f0e181bd5c62 data\hexcasting\recipes\pride_colorizer_plural.json -4a803e049915fd3c7144155ae3a1b05a917ea290 data\hexcasting\recipes\pride_colorizer_pansexual.json -71d38559bf455ea343ac0237a57db4d3f0833a7c data\hexcasting\advancements\recipes\misc\dye_colorizer_magenta.json -9ea4fe5272ce2241d98f30359f55cfc1936c7b48 data\hexcasting\advancements\recipes\tools\staff\cherry.json -72447ac69a0d85f91064180d3c852040a9e33832 data\hexcasting\recipes\pride_colorizer_asexual.json -a8cab28cffdf495253a320094d202fccc5aeb113 data\hexcasting\advancements\recipes\decorations\ancient_scroll_paper_lantern.json -14f3b217e150efbbff329d67aec96f818a1da99c data\hexcasting\recipes\dye_colorizer_purple.json -1e51cd4f527b3aea4d61d91829e47c191c9c05bb data\hexcasting\recipes\pride_colorizer_gay.json -f64fa00d85a9abb24e89b0d2c9f818001371f5e6 data\hexcasting\recipes\slate_block.json -a85cfbd7988f5df0b18d160591605aea8e6808d2 data\hexcasting\recipes\trinket.json -63189af501442318a90c16d6951e51c0c5d6d4f3 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_purple.json -494aa470790ae46baebbf24ee5b76f5885c1af1a data\hexcasting\recipes\ageing_scroll_paper_lantern.json -bc8fe4d2f55fe119b0b146a71782a3d4788380b1 data\create\recipes\crushing\amethyst_block.json -7522be58b09554a3f1a54d5b2343c3eab01447a3 data\hexcasting\recipes\dye_colorizer_magenta.json -b624d103d944a8a1d4d8a9e85c198a5492b476f8 data\hexcasting\advancements\recipes\redstone\edified_trapdoor.json -a3130e3098e35b75afae4f31996d9ab7468e0bc3 data\hexcasting\advancements\recipes\tools\thought_knot.json -23eff6111b0385b66d3ad5fbabfc625f426517a6 data\hexcasting\advancements\recipes\brainsweep\brainsweep\directrix_redstone.json -c43fb770003c8d882fd9c1e7d1ecb5f196cba1ab data\hexcasting\recipes\cypher.json -2c292e12b5e85b1701740c222e5c5465799ad1dc data\hexcasting\recipes\pride_colorizer_aroace.json -dcc9bf721dd40724abcc69f1f7e8a1610dbf88f3 data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_door.json -f77518b6993fe8e31de10af286c33ab72c0f9077 data\hexcasting\advancements\recipes\redstone\impetus\empty.json -93ed0491548920bc75797d18501c750ef07fe3ea data\hexcasting\advancements\recipes\misc\pride_colorizer_bisexual.json -27dc4a1647f264c45b27f5552fd9403a02853484 data\hexcasting\advancements\recipes\tools\spellbook.json -7166cd4355d11c209bc7749bc862caddcfd795fb data\hexcasting\recipes\dye_colorizer_cyan.json -b6720c1c73455ad817bac9b5ca2ca045c5c4050c data\hexcasting\recipes\pride_colorizer_agender.json -ed5c690324e3d9b55599f00f078ae225072a2e7f data\hexcasting\recipes\brainsweep\impetus_rightclick.json -c4b985635c3b1a519d7a83da65daba5bdd3a5f59 data\hexcasting\advancements\recipes\decorations\ageing_scroll_paper_lantern.json -846baaef37844216b57bb9b35e52b1bb6b56b413 data\hexcasting\advancements\recipes\decorations\scroll_small.json -441f336edb635e5d8c2a7183906fed1c501f06fd data\hexcasting\recipes\pride_colorizer_bisexual.json -f80dbf59957be175fbcd63224005e09c4cd1a122 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log_citrine.json -a72a0fcc0f3a81d31b30a7a626aef537796ca73b data\hexcasting\advancements\recipes\tools\staff\quenched.json -8f8773a541bc6a4a6c55a23f4f98b5da4f61a031 data\hexcasting\recipes\scroll_paper.json -4680e9dafcf9b60b3485609519d66eefcfd539bc data\hexcasting\recipes\staff\dark_oak.json -77369113dc54d1c64b9101861dd8a1930bf1c1c4 data\hexcasting\recipes\edified_wood.json -45915b542d8070f2502a4047218679b08033b12d data\hexcasting\advancements\recipes\decorations\scroll_paper_lantern.json -a366ea3750adc0d336ab8f318c40baed3f9c3eb7 data\hexcasting\recipes\brainsweep\impetus_storedplayer.json -151875101066f7af5788c7a2e1c6b342971a546a data\hexcasting\recipes\compat\farmersdelight\cutting\akashic_wood.json -b94bc4dd4a63db10af86c524ba00eae157c1824b data\hexcasting\advancements\recipes\building_blocks\edified_fence_gate.json -c2a0a489967db4064dfbe1ee6367e132665f3c00 data\hexcasting\recipes\edified_slab.json -5e28e2c352366720ce91b73f8c8c38e217f7198d data\hexcasting\recipes\edified_fence_gate.json -6493676f8ca93a7be8d70e25d69ddad935b3f16b data\hexcasting\advancements\recipes\tools\lens.json -b5946314683e5a823b577a18d13fb437a35aafd5 data\hexcasting\recipes\decompose_quenched_shard\charged.json -c03c81dc123294472e8bb6f836c319e96f8db4f5 data\hexcasting\advancements\recipes\building_blocks\edified_fence.json -b29f9d9c14e60ded1148680e2e0ef405b5a3c845 data\hexcasting\advancements\recipes\misc\uuid_colorizer.json -78958099bf4337ad281580d90f434b3074ad18c8 data\hexcasting\recipes\pride_colorizer_genderqueer.json -0b172aef920da7ba63fe152903ce005c1f5df5f1 data\hexcasting\recipes\staff\acacia.json -31ec6474ddae967a6c1dadf9be8292d375510364 data\hexcasting\advancements\recipes\building_blocks\edified_tile.json -d47352426739a0fc500a385d820d767a307e1d16 data\hexcasting\advancements\recipes\misc\dye_colorizer_black.json -095aeb2882c6849f10fb6536e7c780790778e5e7 data\hexcasting\recipes\staff\jungle.json -923e7cd200518042f11474713eca9ccad126dab7 data\hexcasting\recipes\staff\spruce.json -fd7c8325fcaa6a718e90c09251b447fb365523d4 data\hexcasting\recipes\pride_colorizer_demiboy.json -2b64261bd4aefdc55d35400f25835434f88856cf data\hexcasting\recipes\amethyst_tiles.json -12bd3d04c791ef16aad5e992f038d6726229a436 data\hexcasting\advancements\recipes\tools\artifact.json -de38d15e7a91c77df24c1dc954b3e98ee197876f data\hexcasting\recipes\focus.json -fd2f25b0a71806c96af5a307fad76f66de6210a4 data\hexcasting\advancements\recipes\building_blocks\slate_block.json -1ad54df5eaee3d1e810d2c91bd03f626084e30b6 data\hexcasting\recipes\edified_trapdoor.json -4aaefc65af5fe69d312247fdda7d983edf8dcd9a data\hexcasting\recipes\pride_colorizer_intersex.json -b20be6eb5a8b60567871444e65d773ec9a67ece1 data\hexcasting\recipes\staff\crimson.json -775560efa36581389c0319435bda035be262ed4f data\hexcasting\advancements\recipes\building_blocks\edified_stairs.json -ce9d0b976f7cc8ad4a0815bbea6c43115addb90f data\hexcasting\advancements\recipes\building_blocks\scroll_paper.json -db5ae3a2fda235cf1c83fd83e0026a262e668217 data\hexcasting\advancements\recipes\building_blocks\edified_slab.json -06ca609ba1a32f094cf6edbc989bc9ddaf9d342c data\hexcasting\advancements\recipes\misc\pride_colorizer_genderfluid.json -af8fe74b624df4a31727347b9826614a66092b0a data\hexcasting\advancements\recipes\misc\pride_colorizer_agender.json -664ce1a38c9b1c9ec21b7e078631e181fc0b2498 data\hexcasting\recipes\staff\edified.json -b6e762c198b9632defd7f8b11287702abecd681d data\hexcasting\recipes\staff\mindsplice.json -5401828f85e709b5817ecc8464dc63e536a730dc data\hexcasting\recipes\staff\cherry.json -51b047601368a103be166d907633b196d2d8a4e8 data\hexcasting\recipes\compat\farmersdelight\cutting\edified_log.json -42b8e462de1d7006de3a7658757377450e773107 data\hexcasting\advancements\recipes\misc\dye_colorizer_blue.json -499c5c09e3772989350f9ab3264b8692449a6dea data\hexcasting\advancements\recipes\misc\pride_colorizer_gay.json -30352d8ad510768770bb1b2d378959b7a502f825 data\hexcasting\advancements\recipes\brainsweep\brainsweep\impetus_look.json -6ed61e03c51dc653cd66e643a6d33fe9105ff171 data\hexcasting\advancements\recipes\brainsweep\brainsweep\directrix_boolean.json -0ead307e47242ba140584f6bd20088a1fa7c2909 data\hexcasting\recipes\directrix\empty.json -68ab70e0b4e432a3492767c5597ecd836f106714 data\hexcasting\advancements\recipes\tools\staff\mindsplice.json -5fab1b9c93304a53a4c305b511704458e4593444 data\hexcasting\recipes\pride_colorizer_demigirl.json -170af3c83a45f9550827cc48e4bb5a621d06d685 data\hexcasting\advancements\recipes\misc\pride_colorizer_transgender.json -7f2f29981df2ca4464ee0250180e670f5331f65b data\hexcasting\recipes\dye_colorizer_pink.json -61e53f02baefd31308e99407d56403dfc18e36e1 data\hexcasting\recipes\akashic_connector.json -eb9ebf77f0daa32f665a60888fcda19c940f0b2f data\hexcasting\advancements\recipes\misc\pride_colorizer_demigirl.json -7aa3bf4a3d6fb92743b29dfe89d50537fefc0db9 data\hexcasting\advancements\recipes\misc\pride_colorizer_intersex.json -410bfde90cb977db3f13814e94484fa11fca7cfc data\hexcasting\recipes\thought_knot.json -55ea553a96e1d6a54385890f7c48fe7b2bed6871 data\hexcasting\advancements\recipes\tools\trinket.json -e765ee2bd324240e8ed3d625be431de3281f0070 data\hexcasting\recipes\dye_colorizer_gray.json -ad647a2078099344ea7f9836a68e1bf8e8119277 data\hexcasting\advancements\recipes\misc\dye_colorizer_brown.json -8c043c7f6a7911b67324e2fd42f0b3b19a792af3 data\hexcasting\recipes\ancient_scroll_paper_lantern.json diff --git a/Fabric/src/generated/resources/data/c/tags/items/amethyst_dusts.json b/Fabric/src/generated/resources/data/c/tags/items/amethyst_dusts.json deleted file mode 100644 index 8fa008d02a..0000000000 --- a/Fabric/src/generated/resources/data/c/tags/items/amethyst_dusts.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:amethyst_dust" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/c/tags/items/gems.json b/Fabric/src/generated/resources/data/c/tags/items/gems.json deleted file mode 100644 index e153c8295b..0000000000 --- a/Fabric/src/generated/resources/data/c/tags/items/gems.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:charged_amethyst" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_block.json b/Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_block.json deleted file mode 100644 index a9466b4a43..0000000000 --- a/Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_block.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "create" - ] - } - ], - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:amethyst_block" - } - ], - "processingTime": 150, - "results": [ - { - "count": 3, - "item": "minecraft:amethyst_shard" - }, - { - "chance": 0.5, - "count": 4, - "item": "hexcasting:amethyst_dust" - } - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json b/Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json deleted file mode 100644 index 23069c5c26..0000000000 --- a/Fabric/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "create" - ] - } - ], - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:amethyst_cluster" - } - ], - "processingTime": 150, - "results": [ - { - "count": 7, - "item": "minecraft:amethyst_shard" - }, - { - "count": 5, - "item": "hexcasting:amethyst_dust" - }, - { - "chance": 0.25, - "item": "hexcasting:charged_amethyst" - } - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/create/tags/blocks/brittle.json b/Fabric/src/generated/resources/data/create/tags/blocks/brittle.json deleted file mode 100644 index b9a7d8674d..0000000000 --- a/Fabric/src/generated/resources/data/create/tags/blocks/brittle.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - { - "id": "#hexcasting:slate", - "required": false - } - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json deleted file mode 100644 index f82c8fda2c..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/akashic_record" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/akashic_record" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json deleted file mode 100644 index 5ee9d46ffb..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/budding_amethyst" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/budding_amethyst" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json deleted file mode 100644 index bc173bd32b..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/directrix_boolean" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/directrix_boolean" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json deleted file mode 100644 index a6f48c1d34..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/directrix_redstone" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/directrix_redstone" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json deleted file mode 100644 index 086d039702..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/impetus_look" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/impetus_look" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json deleted file mode 100644 index 04b20e6fc7..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/impetus_rightclick" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/impetus_rightclick" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json deleted file mode 100644 index 135a08cc3f..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/impetus_storedplayer" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/impetus_storedplayer" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json deleted file mode 100644 index 15691cf319..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/quench_allay" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/quench_allay" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json deleted file mode 100644 index 8e0018f519..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_packing.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:amethyst_dust_packing" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:amethyst_dust_packing" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json deleted file mode 100644 index c512415070..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_dust_unpacking.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:amethyst_dust_unpacking" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:amethyst_dust_unpacking" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json deleted file mode 100644 index b6ab3fb1d4..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/ancient_scroll_paper.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:scroll_paper" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:ancient_scroll_paper" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:ancient_scroll_paper" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json deleted file mode 100644 index aa49266e09..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence_gate.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_fence_gate" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_fence_gate" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_panel.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_panel.json deleted file mode 100644 index 6f6e2c2337..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_panel.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_panel" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_panel" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json deleted file mode 100644 index 12add8b1a5..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block_from_slates.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:slate" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:slate_block_from_slates" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:slate_block_from_slates" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json deleted file mode 100644 index 2d335c5e8a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stonecutting/amethyst_tiles.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "minecraft:amethyst_block" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:stonecutting/amethyst_tiles" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:stonecutting/amethyst_tiles" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json deleted file mode 100644 index d65dddf738..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/stripped_edified_wood.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:stripped_edified_log" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:stripped_edified_wood" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:stripped_edified_wood" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll.json deleted file mode 100644 index 895f37a270..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:scroll" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:scroll" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_medium.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_medium.json deleted file mode 100644 index 63a98dfc8d..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_medium.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:scroll_medium" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:scroll_medium" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json deleted file mode 100644 index 68357e8330..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_black.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_black" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_black" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json deleted file mode 100644 index b1d8d0917c..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_brown.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_brown" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_brown" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json deleted file mode 100644 index aaabb10574..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_green.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_green" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_green" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json deleted file mode 100644 index 4cc0d01d81..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_blue.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_light_blue" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_light_blue" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json deleted file mode 100644 index 7b475a18fe..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_light_gray.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_light_gray" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_light_gray" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json deleted file mode 100644 index ef137af43d..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_magenta.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_magenta" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_magenta" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json deleted file mode 100644 index ba8b485f60..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_orange.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_orange" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_orange" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json deleted file mode 100644 index 730d25023a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_purple.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_purple" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_purple" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json deleted file mode 100644 index 8decf1fb68..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_white.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_white" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_white" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json deleted file mode 100644 index 9d4ee92484..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_yellow.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_yellow" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_yellow" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json deleted file mode 100644 index 0dee46c659..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_agender.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_agender" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_agender" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json deleted file mode 100644 index e2a9be996e..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aroace.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_aroace" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_aroace" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json deleted file mode 100644 index 8bea973430..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_aromantic.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_aromantic" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_aromantic" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json deleted file mode 100644 index 935c3b3a13..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_asexual.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_asexual" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_asexual" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json deleted file mode 100644 index 9766430fc9..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_bisexual.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_bisexual" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_bisexual" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json deleted file mode 100644 index d1c0e598e0..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demiboy.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_demiboy" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_demiboy" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json deleted file mode 100644 index b83767cdc9..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_demigirl.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_demigirl" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_demigirl" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json deleted file mode 100644 index a4d03097a3..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_gay.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_gay" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_gay" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json deleted file mode 100644 index 3c83445f58..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderfluid.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_genderfluid" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_genderfluid" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json deleted file mode 100644 index d0a5c5ee5b..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_genderqueer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_genderqueer" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_genderqueer" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json deleted file mode 100644 index 9b1dfd07fa..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_intersex.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_intersex" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_intersex" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json deleted file mode 100644 index 05a75a9ef3..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_lesbian.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_lesbian" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_lesbian" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json deleted file mode 100644 index d8faac779d..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_nonbinary.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_nonbinary" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_nonbinary" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json deleted file mode 100644 index 2938abc3e3..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_pansexual" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_pansexual" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json deleted file mode 100644 index 096a3b8773..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_plural.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_plural" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_plural" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json deleted file mode 100644 index ef4569ca9a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_transgender.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_transgender" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_transgender" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json deleted file mode 100644 index a9c62b86c9..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_pressure_plate.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_pressure_plate" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_pressure_plate" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/artifact.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/artifact.json deleted file mode 100644 index 7cc848539e..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/artifact.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:artifact" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:artifact" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus.json deleted file mode 100644 index 4494bd1974..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:focus" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:focus" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mindsplice.json b/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mindsplice.json deleted file mode 100644 index 70be25e6c0..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mindsplice.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/mindsplice" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/mindsplice" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json b/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json deleted file mode 100644 index 359c43e79e..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:akashic_connector" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/akashic_connector" -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json b/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json deleted file mode 100644 index 32fb8948ab..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_edified_leaves.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:shears" - ] - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "tag": "c:shears" - } - } - ] - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ] - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_edified_leaves" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/amethyst_edified_leaves" -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json b/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json deleted file mode 100644 index a6d08c88dc..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/aventurine_edified_leaves.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:shears" - ] - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "tag": "c:shears" - } - } - ] - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ] - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:aventurine_edified_leaves" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/aventurine_edified_leaves" -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json b/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json deleted file mode 100644 index 5df55816a5..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/citrine_edified_leaves.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:any_of", - "terms": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:shears" - ] - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "tag": "c:shears" - } - } - ] - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch", - "levels": { - "min": 1 - } - } - ] - } - } - ] - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:citrine_edified_leaves" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/citrine_edified_leaves" -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay.json b/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay.json deleted file mode 100644 index 86b06b41d9..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:alternatives", - "children": [ - { - "type": "minecraft:item", - "conditions": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] - } - } - ], - "name": "hexcasting:quenched_allay" - }, - { - "type": "minecraft:item", - "functions": [ - { - "add": false, - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 2.0 - }, - "function": "minecraft:set_count" - }, - { - "add": true, - "conditions": [ - { - "chances": [ - 0.25, - 0.5, - 0.75, - 1.0 - ], - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune" - } - ], - "count": 1.0, - "function": "minecraft:set_count" - } - ], - "name": "hexcasting:quenched_allay_shard" - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/quenched_allay" -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_tables/inject/amethyst_cluster.json b/Fabric/src/generated/resources/data/hexcasting/loot_tables/inject/amethyst_cluster.json deleted file mode 100644 index 78e1601cb1..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/loot_tables/inject/amethyst_cluster.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] - } - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "tag": "minecraft:cluster_max_harvestables" - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_dust" - } - ], - "functions": [ - { - "add": false, - "count": { - "type": "minecraft:uniform", - "max": 4.0, - "min": 1.0 - }, - "function": "minecraft:set_count" - }, - { - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops", - "function": "minecraft:apply_bonus" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] - } - } - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:match_tool", - "predicate": { - "tag": "minecraft:cluster_max_harvestables" - } - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_dust" - } - ], - "functions": [ - { - "add": false, - "count": { - "type": "minecraft:uniform", - "max": 2.0, - "min": 0.0 - }, - "function": "minecraft:set_count" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] - } - } - }, - { - "condition": "minecraft:match_tool", - "predicate": { - "tag": "minecraft:cluster_max_harvestables" - } - }, - { - "chances": [ - 0.25, - 0.35, - 0.5, - 0.75, - 1.0 - ], - "condition": "minecraft:table_bonus", - "enchantment": "minecraft:fortune" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:charged_amethyst" - } - ], - "functions": [ - { - "add": false, - "count": 1.0, - "function": "minecraft:set_count" - } - ], - "rolls": 1.0 - }, - { - "bonus_rolls": 0.0, - "conditions": [ - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:match_tool", - "predicate": { - "enchantments": [ - { - "enchantment": "minecraft:silk_touch" - } - ] - } - } - }, - { - "condition": "minecraft:inverted", - "term": { - "condition": "minecraft:match_tool", - "predicate": { - "tag": "minecraft:cluster_max_harvestables" - } - } - }, - { - "chance": 0.125, - "condition": "minecraft:random_chance" - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:charged_amethyst" - } - ], - "functions": [ - { - "add": false, - "count": 1.0, - "function": "minecraft:set_count" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:inject/amethyst_cluster" -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/abacus.json b/Fabric/src/generated/resources/data/hexcasting/recipes/abacus.json deleted file mode 100644 index 0b922907fc..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/abacus.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "tag": "minecraft:planks" - } - }, - "pattern": [ - "WAW", - "SAS", - "WAW" - ], - "result": { - "item": "hexcasting:abacus" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/ageing_scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/recipes/ageing_scroll_paper_lantern.json deleted file mode 100644 index 9014a11a36..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/ageing_scroll_paper_lantern.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - [ - { - "item": "minecraft:brown_dye" - }, - { - "tag": "c:brown_dye" - }, - { - "tag": "c:brown_dyes" - } - ], - { - "item": "hexcasting:scroll_paper_lantern" - }, - { - "item": "hexcasting:scroll_paper_lantern" - }, - { - "item": "hexcasting:scroll_paper_lantern" - }, - { - "item": "hexcasting:scroll_paper_lantern" - }, - { - "item": "hexcasting:scroll_paper_lantern" - }, - { - "item": "hexcasting:scroll_paper_lantern" - }, - { - "item": "hexcasting:scroll_paper_lantern" - }, - { - "item": "hexcasting:scroll_paper_lantern" - } - ], - "result": { - "count": 8, - "item": "hexcasting:ancient_scroll_paper_lantern" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/akashic_bookshelf.json b/Fabric/src/generated/resources/data/hexcasting/recipes/akashic_bookshelf.json deleted file mode 100644 index 20ea2d020a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/akashic_bookshelf.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "C": { - "item": "minecraft:book" - }, - "L": { - "tag": "hexcasting:edified_logs" - }, - "P": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "LPL", - "CCC", - "LPL" - ], - "result": { - "item": "hexcasting:akashic_bookshelf" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_dust_unpacking.json b/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_dust_unpacking.json deleted file mode 100644 index 414db2b6f2..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_dust_unpacking.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - { - "item": "hexcasting:amethyst_dust_block" - } - ], - "result": { - "count": 4, - "item": "hexcasting:amethyst_dust" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_sconce.json b/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_sconce.json deleted file mode 100644 index 408880cf39..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/amethyst_sconce.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "B": [ - { - "item": "minecraft:copper_ingot" - }, - { - "tag": "c:copper_ingots" - } - ], - "T": { - "item": "hexcasting:charged_amethyst" - } - }, - "pattern": [ - "T", - "B" - ], - "result": { - "count": 4, - "item": "hexcasting:amethyst_sconce" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper.json deleted file mode 100644 index 237738b7ee..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - [ - { - "item": "minecraft:brown_dye" - }, - { - "tag": "c:brown_dye" - }, - { - "tag": "c:brown_dyes" - } - ], - { - "item": "hexcasting:scroll_paper" - }, - { - "item": "hexcasting:scroll_paper" - }, - { - "item": "hexcasting:scroll_paper" - }, - { - "item": "hexcasting:scroll_paper" - }, - { - "item": "hexcasting:scroll_paper" - }, - { - "item": "hexcasting:scroll_paper" - }, - { - "item": "hexcasting:scroll_paper" - }, - { - "item": "hexcasting:scroll_paper" - } - ], - "result": { - "count": 8, - "item": "hexcasting:ancient_scroll_paper" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/artifact.json b/Fabric/src/generated/resources/data/hexcasting/recipes/artifact.json deleted file mode 100644 index 24e47285dd..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/artifact.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "D": { - "tag": "minecraft:music_discs" - }, - "F": [ - { - "item": "minecraft:gold_ingot" - }, - { - "tag": "c:gold_ingots" - } - ] - }, - "pattern": [ - " F ", - "FAF", - " D " - ], - "result": { - "item": "hexcasting:artifact" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json deleted file mode 100644 index 6ff7558133..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "hexcasting:akashic_connector" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 5, - "profession": "librarian" - }, - "result": { - "name": "hexcasting:akashic_record" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/budding_amethyst.json b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/budding_amethyst.json deleted file mode 100644 index b58a6ec996..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/budding_amethyst.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "minecraft:amethyst_block" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 3 - }, - "result": { - "name": "minecraft:budding_amethyst" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_boolean.json b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_boolean.json deleted file mode 100644 index fd1c128f51..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_boolean.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "hexcasting:directrix/empty" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 1, - "profession": "shepherd" - }, - "result": { - "name": "hexcasting:directrix/boolean", - "properties": { - "energized": "false", - "facing": "north", - "state": "neither" - } - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_redstone.json b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_redstone.json deleted file mode 100644 index 3cfe40b7c0..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/directrix_redstone.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "hexcasting:directrix/empty" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 1, - "profession": "mason" - }, - "result": { - "name": "hexcasting:directrix/redstone", - "properties": { - "energized": "false", - "facing": "north", - "powered": "false" - } - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_storedplayer.json b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_storedplayer.json deleted file mode 100644 index 1bef4d4633..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_storedplayer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "hexcasting:impetus/empty" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 2, - "profession": "cleric" - }, - "result": { - "name": "hexcasting:impetus/redstone", - "properties": { - "energized": "false", - "facing": "north", - "powered": "true" - } - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/quench_allay.json b/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/quench_allay.json deleted file mode 100644 index d7943e7a49..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/brainsweep/quench_allay.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "minecraft:amethyst_block" - }, - "cost": 100000, - "entityIn": { - "type": "entity_type", - "entityType": "minecraft:allay" - }, - "result": { - "name": "hexcasting:quenched_allay" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json deleted file mode 100644 index 49c7336a81..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "create" - ] - } - ], - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:amethyst_shard" - } - ], - "processingTime": 150, - "results": [ - { - "count": 4, - "item": "hexcasting:amethyst_dust" - }, - { - "chance": 0.5, - "item": "hexcasting:amethyst_dust" - } - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json deleted file mode 100644 index 69b4010db5..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_door" - } - ], - "result": [ - { - "item": "hexcasting:edified_planks" - } - ], - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json deleted file mode 100644 index 4c873b6e03..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_trapdoor" - } - ], - "result": [ - { - "item": "hexcasting:edified_planks" - } - ], - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json deleted file mode 100644 index 69e8a265bf..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_wood" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_wood" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json deleted file mode 100644 index 6efdf08fb9..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json deleted file mode 100644 index 4d6103190c..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_amethyst" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json deleted file mode 100644 index d9d042afcb..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_aventurine" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json deleted file mode 100644 index 9ee0d9a40e..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_citrine" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json b/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json deleted file mode 100644 index 375b7e4160..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "farmersdelight" - ] - } - ], - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_purple" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool", - "tag": "c:tools/axes" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/cypher.json b/Fabric/src/generated/resources/data/hexcasting/recipes/cypher.json deleted file mode 100644 index 952b734751..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/cypher.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "C": [ - { - "item": "minecraft:copper_ingot" - }, - { - "tag": "c:copper_ingots" - } - ], - "I": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " C ", - "CIC", - " C " - ], - "result": { - "item": "hexcasting:cypher" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/dust.json b/Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/dust.json deleted file mode 100644 index 4a52d88ccf..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/dust.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "hexcasting:quenched_allay_shard" - }, - { - "item": "hexcasting:amethyst_dust" - } - ], - "result": { - "count": 31, - "item": "hexcasting:amethyst_dust" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/directrix/empty.json b/Fabric/src/generated/resources/data/hexcasting/recipes/directrix/empty.json deleted file mode 100644 index b622fd8844..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/directrix/empty.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "C": { - "item": "minecraft:comparator" - }, - "O": { - "item": "minecraft:observer" - }, - "S": { - "item": "hexcasting:slate_block" - } - }, - "pattern": [ - "CSS", - "OAO", - "SSC" - ], - "result": { - "item": "hexcasting:directrix/empty" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_blue.json b/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_blue.json deleted file mode 100644 index f9476f986d..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_blue.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:blue_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_blue" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_cyan.json b/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_cyan.json deleted file mode 100644 index 7f5167cb35..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_cyan.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:cyan_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_cyan" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_blue.json b/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_blue.json deleted file mode 100644 index 85d69c57b3..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_blue.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:light_blue_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_light_blue" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_gray.json b/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_gray.json deleted file mode 100644 index 2d66ef7c2a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/dye_colorizer_light_gray.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:light_gray_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_light_gray" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_door.json b/Fabric/src/generated/resources/data/hexcasting/recipes/edified_door.json deleted file mode 100644 index 899954c7ee..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_door.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "WW", - "WW", - "WW" - ], - "result": { - "count": 3, - "item": "hexcasting:edified_door" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence.json b/Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence.json deleted file mode 100644 index 25458e77e7..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "S": { - "item": "minecraft:stick" - }, - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "WSW", - "WSW" - ], - "result": { - "count": 3, - "item": "hexcasting:edified_fence" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence_gate.json b/Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence_gate.json deleted file mode 100644 index 799b582fb9..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_fence_gate.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "S": { - "item": "minecraft:stick" - }, - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "SWS", - "SWS" - ], - "result": { - "item": "hexcasting:edified_fence_gate" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_pressure_plate.json b/Fabric/src/generated/resources/data/hexcasting/recipes/edified_pressure_plate.json deleted file mode 100644 index 3a1d77b05a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_pressure_plate.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "WW" - ], - "result": { - "item": "hexcasting:edified_pressure_plate" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_slab.json b/Fabric/src/generated/resources/data/hexcasting/recipes/edified_slab.json deleted file mode 100644 index 83458a02bc..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_slab.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "WWW" - ], - "result": { - "count": 6, - "item": "hexcasting:edified_slab" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_tile.json b/Fabric/src/generated/resources/data/hexcasting/recipes/edified_tile.json deleted file mode 100644 index a19f9d35b0..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_tile.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "WW ", - "W W", - " WW" - ], - "result": { - "count": 6, - "item": "hexcasting:edified_tile" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/recipes/edified_wood.json deleted file mode 100644 index 17a530245a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/edified_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "W": { - "item": "hexcasting:edified_log" - } - }, - "pattern": [ - "WW", - "WW" - ], - "result": { - "count": 3, - "item": "hexcasting:edified_wood" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/focus.json b/Fabric/src/generated/resources/data/hexcasting/recipes/focus.json deleted file mode 100644 index 6c717fab81..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/focus.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "G": [ - { - "item": "minecraft:glowstone_dust" - }, - { - "tag": "c:glowstone_dusts" - } - ], - "L": { - "item": "minecraft:leather" - }, - "P": { - "item": "minecraft:paper" - } - }, - "pattern": [ - "GLG", - "PAP", - "GLG" - ], - "result": { - "item": "hexcasting:focus" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/focus_rotated.json b/Fabric/src/generated/resources/data/hexcasting/recipes/focus_rotated.json deleted file mode 100644 index 64b5c1fd81..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/focus_rotated.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "G": [ - { - "item": "minecraft:glowstone_dust" - }, - { - "tag": "c:glowstone_dusts" - } - ], - "L": { - "item": "minecraft:leather" - }, - "P": { - "item": "minecraft:paper" - } - }, - "pattern": [ - "GPG", - "LAL", - "GPG" - ], - "result": { - "item": "hexcasting:focus" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/impetus/empty.json b/Fabric/src/generated/resources/data/hexcasting/recipes/impetus/empty.json deleted file mode 100644 index c0f772d643..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/impetus/empty.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "B": { - "item": "minecraft:iron_bars" - }, - "P": { - "item": "minecraft:purpur_block" - }, - "S": { - "item": "hexcasting:slate_block" - } - }, - "pattern": [ - "PSS", - "BAB", - "SSP" - ], - "result": { - "item": "hexcasting:impetus/empty" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/jeweler_hammer.json b/Fabric/src/generated/resources/data/hexcasting/recipes/jeweler_hammer.json deleted file mode 100644 index 8832d19167..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/jeweler_hammer.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "I": [ - { - "item": "minecraft:iron_ingot" - }, - { - "tag": "c:iron_ingots" - } - ], - "N": [ - { - "item": "minecraft:iron_nugget" - }, - { - "tag": "c:iron_nuggets" - } - ], - "S": [ - { - "item": "minecraft:stick" - }, - { - "tag": "c:wood_sticks" - } - ] - }, - "pattern": [ - "IAN", - " S ", - " S " - ], - "result": { - "item": "hexcasting:jeweler_hammer" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json b/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json deleted file mode 100644 index d5f1d3054f..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "type": "hexcasting:mod_conditional", - "default": { - "item": "minecraft:carrot" - }, - "if_loaded": { - "item": "farmersdelight:skillet" - }, - "modid": "farmersdelight" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_pansexual" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll.json b/Fabric/src/generated/resources/data/hexcasting/recipes/scroll.json deleted file mode 100644 index 50fa3bb410..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "A": { - "item": "hexcasting:amethyst_dust" - }, - "P": { - "item": "minecraft:paper" - } - }, - "pattern": [ - "PPA", - "PPP", - "PPP" - ], - "result": { - "item": "hexcasting:scroll" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_medium.json b/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_medium.json deleted file mode 100644 index ad3445812d..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_medium.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "A": { - "item": "hexcasting:amethyst_dust" - }, - "P": { - "item": "minecraft:paper" - } - }, - "pattern": [ - " A", - "PP ", - "PP " - ], - "result": { - "item": "hexcasting:scroll_medium" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_paper.json deleted file mode 100644 index 18c3c67bec..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_paper.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "C": { - "item": "minecraft:paper" - }, - "D": { - "item": "minecraft:paper" - }, - "I": { - "item": "minecraft:amethyst_shard" - } - }, - "pattern": [ - "DCD", - "CIC", - "DCD" - ], - "result": { - "count": 8, - "item": "hexcasting:scroll_paper" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_small.json b/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_small.json deleted file mode 100644 index 1772485731..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/scroll_small.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "A": { - "item": "hexcasting:amethyst_dust" - }, - "P": { - "item": "minecraft:paper" - } - }, - "pattern": [ - " A", - "P " - ], - "result": { - "item": "hexcasting:scroll_small" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/slate_block_from_slates.json b/Fabric/src/generated/resources/data/hexcasting/recipes/slate_block_from_slates.json deleted file mode 100644 index a04d33319a..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/slate_block_from_slates.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "S": { - "item": "hexcasting:slate" - } - }, - "pattern": [ - "S", - "S" - ], - "result": { - "item": "hexcasting:slate_block" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/spellbook.json b/Fabric/src/generated/resources/data/hexcasting/recipes/spellbook.json deleted file mode 100644 index f3dcf64681..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/spellbook.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "B": { - "item": "minecraft:writable_book" - }, - "F": { - "item": "minecraft:chorus_fruit" - }, - "N": [ - { - "item": "minecraft:gold_nugget" - }, - { - "tag": "c:gold_nuggets" - } - ] - }, - "pattern": [ - "NBA", - "NFA", - "NBA" - ], - "result": { - "item": "hexcasting:spellbook" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/acacia.json b/Fabric/src/generated/resources/data/hexcasting/recipes/staff/acacia.json deleted file mode 100644 index b6dcd43429..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/acacia.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:acacia_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/acacia" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/cherry.json b/Fabric/src/generated/resources/data/hexcasting/recipes/staff/cherry.json deleted file mode 100644 index 36a96851b0..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/staff/cherry.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:cherry_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/cherry" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/stripped_edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/recipes/stripped_edified_wood.json deleted file mode 100644 index c0cab6f42f..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/stripped_edified_wood.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "W": { - "item": "hexcasting:stripped_edified_log" - } - }, - "pattern": [ - "WW", - "WW" - ], - "result": { - "count": 3, - "item": "hexcasting:stripped_edified_wood" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/thought_knot.json b/Fabric/src/generated/resources/data/hexcasting/recipes/thought_knot.json deleted file mode 100644 index 2f2c9f9504..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/thought_knot.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "equipment", - "ingredients": [ - { - "item": "hexcasting:amethyst_dust" - }, - { - "item": "minecraft:string" - } - ], - "result": { - "item": "hexcasting:thought_knot" - } -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/trinket.json b/Fabric/src/generated/resources/data/hexcasting/recipes/trinket.json deleted file mode 100644 index ce2ab679a7..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/trinket.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "C": [ - { - "item": "minecraft:iron_ingot" - }, - { - "tag": "c:iron_ingots" - } - ], - "I": { - "item": "minecraft:amethyst_shard" - } - }, - "pattern": [ - " C ", - "CIC", - " C " - ], - "result": { - "item": "hexcasting:trinket" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipes/uuid_colorizer.json b/Fabric/src/generated/resources/data/hexcasting/recipes/uuid_colorizer.json deleted file mode 100644 index 418123f8b7..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/recipes/uuid_colorizer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "hexcasting:amethyst_dust" - }, - "D": { - "item": "hexcasting:amethyst_dust" - }, - "I": { - "item": "minecraft:amethyst_shard" - } - }, - "pattern": [ - "DCD", - "CIC", - "DCD" - ], - "result": { - "item": "hexcasting:uuid_colorizer" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/action/can_start_enlighten.json b/Fabric/src/generated/resources/data/hexcasting/tags/action/can_start_enlighten.json deleted file mode 100644 index 86a6cd44ac..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/action/can_start_enlighten.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:lightning", - "hexcasting:flight", - "hexcasting:create_lava", - "hexcasting:teleport/great", - "hexcasting:sentinel/create/great", - "hexcasting:dispel_rain", - "hexcasting:summon_rain", - "hexcasting:brainsweep", - "hexcasting:craft/battery", - "hexcasting:potion/regeneration", - "hexcasting:potion/night_vision", - "hexcasting:potion/absorption", - "hexcasting:potion/haste", - "hexcasting:potion/strength" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/action/per_world_pattern.json b/Fabric/src/generated/resources/data/hexcasting/tags/action/per_world_pattern.json deleted file mode 100644 index 86a6cd44ac..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/action/per_world_pattern.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:lightning", - "hexcasting:flight", - "hexcasting:create_lava", - "hexcasting:teleport/great", - "hexcasting:sentinel/create/great", - "hexcasting:dispel_rain", - "hexcasting:summon_rain", - "hexcasting:brainsweep", - "hexcasting:craft/battery", - "hexcasting:potion/regeneration", - "hexcasting:potion/night_vision", - "hexcasting:potion/absorption", - "hexcasting:potion/haste", - "hexcasting:potion/strength" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/action/requires_enlightenment.json b/Fabric/src/generated/resources/data/hexcasting/tags/action/requires_enlightenment.json deleted file mode 100644 index 86a6cd44ac..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/action/requires_enlightenment.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:lightning", - "hexcasting:flight", - "hexcasting:create_lava", - "hexcasting:teleport/great", - "hexcasting:sentinel/create/great", - "hexcasting:dispel_rain", - "hexcasting:summon_rain", - "hexcasting:brainsweep", - "hexcasting:craft/battery", - "hexcasting:potion/regeneration", - "hexcasting:potion/night_vision", - "hexcasting:potion/absorption", - "hexcasting:potion/haste", - "hexcasting:potion/strength" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/brainswept_circle_components.json b/Fabric/src/generated/resources/data/hexcasting/tags/blocks/brainswept_circle_components.json deleted file mode 100644 index ea830ffa1d..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/brainswept_circle_components.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#hexcasting:impeti", - "#hexcasting:directrices" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/cheap_to_break_block.json b/Fabric/src/generated/resources/data/hexcasting/tags/blocks/cheap_to_break_block.json deleted file mode 100644 index 61cb019a11..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/cheap_to_break_block.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:conjured_block", - "hexcasting:conjured_light" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/directrices.json b/Fabric/src/generated/resources/data/hexcasting/tags/blocks/directrices.json deleted file mode 100644 index d30f04cb6f..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/directrices.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:directrix/redstone", - "hexcasting:directrix/boolean" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_logs.json b/Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_logs.json deleted file mode 100644 index 8e226d8922..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_logs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_log", - "hexcasting:edified_log_amethyst", - "hexcasting:edified_log_aventurine", - "hexcasting:edified_log_citrine", - "hexcasting:edified_log_purple", - "hexcasting:stripped_edified_log", - "hexcasting:edified_wood", - "hexcasting:stripped_edified_wood" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_planks.json b/Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_planks.json deleted file mode 100644 index 39c375c539..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/edified_planks.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_planks", - "hexcasting:edified_panel", - "hexcasting:edified_tile" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/impeti.json b/Fabric/src/generated/resources/data/hexcasting/tags/blocks/impeti.json deleted file mode 100644 index 0555067291..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/impeti.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:impetus/look", - "hexcasting:impetus/rightclick", - "hexcasting:impetus/redstone" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/water_plants.json b/Fabric/src/generated/resources/data/hexcasting/tags/blocks/water_plants.json deleted file mode 100644 index 036f0507d4..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/blocks/water_plants.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:kelp", - "minecraft:kelp_plant", - "minecraft:seagrass", - "minecraft:tall_seagrass" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/brainswept_circle_components.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/brainswept_circle_components.json deleted file mode 100644 index ea830ffa1d..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/brainswept_circle_components.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "#hexcasting:impeti", - "#hexcasting:directrices" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/directrices.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/directrices.json deleted file mode 100644 index d30f04cb6f..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/directrices.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:directrix/redstone", - "hexcasting:directrix/boolean" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/edified_logs.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/edified_logs.json deleted file mode 100644 index 8e226d8922..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/edified_logs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_log", - "hexcasting:edified_log_amethyst", - "hexcasting:edified_log_aventurine", - "hexcasting:edified_log_citrine", - "hexcasting:edified_log_purple", - "hexcasting:stripped_edified_log", - "hexcasting:edified_wood", - "hexcasting:stripped_edified_wood" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/edified_planks.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/edified_planks.json deleted file mode 100644 index 39c375c539..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/edified_planks.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_planks", - "hexcasting:edified_panel", - "hexcasting:edified_tile" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/grants_root_advancement.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/grants_root_advancement.json deleted file mode 100644 index 76ab3105e8..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/grants_root_advancement.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:amethyst_dust", - "minecraft:amethyst_shard", - "hexcasting:charged_amethyst", - "hexcasting:creative_unlocker" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/impeti.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/impeti.json deleted file mode 100644 index 0555067291..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/impeti.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:impetus/look", - "hexcasting:impetus/rightclick", - "hexcasting:impetus/redstone" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/phial_base.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/phial_base.json deleted file mode 100644 index b435278f57..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/phial_base.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:glass_bottle" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/seal_materials.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/seal_materials.json deleted file mode 100644 index ae13fc414c..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/seal_materials.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "minecraft:honeycomb" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/items/staves.json b/Fabric/src/generated/resources/data/hexcasting/tags/items/staves.json deleted file mode 100644 index eba74d80db..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/items/staves.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:staff/edified", - "hexcasting:staff/oak", - "hexcasting:staff/spruce", - "hexcasting:staff/birch", - "hexcasting:staff/jungle", - "hexcasting:staff/acacia", - "hexcasting:staff/dark_oak", - "hexcasting:staff/crimson", - "hexcasting:staff/warped", - "hexcasting:staff/mangrove", - "hexcasting:staff/cherry", - "hexcasting:staff/bamboo", - "hexcasting:staff/quenched", - "hexcasting:staff/mindsplice" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/buttons.json deleted file mode 100644 index 93d13da5f5..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/buttons.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_button" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/crystal_sound_blocks.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/crystal_sound_blocks.json deleted file mode 100644 index 694b24cf8a..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/crystal_sound_blocks.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:conjured_light", - "hexcasting:conjured_block", - "hexcasting:amethyst_tiles", - "hexcasting:amethyst_sconce" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/doors.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/doors.json deleted file mode 100644 index d63af5102c..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/doors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_door" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json deleted file mode 100644 index 4dff358b03..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/fence_gates.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_fence_gate" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/fences.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/fences.json deleted file mode 100644 index f64ac53060..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/fences.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_fence" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/leaves.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/leaves.json deleted file mode 100644 index d0139bd0b9..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/leaves.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:amethyst_edified_leaves", - "hexcasting:aventurine_edified_leaves", - "hexcasting:citrine_edified_leaves" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/logs.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/logs.json deleted file mode 100644 index 8e226d8922..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/logs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_log", - "hexcasting:edified_log_amethyst", - "hexcasting:edified_log_aventurine", - "hexcasting:edified_log_citrine", - "hexcasting:edified_log_purple", - "hexcasting:stripped_edified_log", - "hexcasting:edified_wood", - "hexcasting:stripped_edified_wood" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json deleted file mode 100644 index 8e226d8922..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/logs_that_burn.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_log", - "hexcasting:edified_log_amethyst", - "hexcasting:edified_log_aventurine", - "hexcasting:edified_log_citrine", - "hexcasting:edified_log_purple", - "hexcasting:stripped_edified_log", - "hexcasting:edified_wood", - "hexcasting:stripped_edified_wood" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json deleted file mode 100644 index 87aeaeea67..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/axe.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:akashic_record", - "hexcasting:akashic_bookshelf", - "hexcasting:akashic_connector", - "hexcasting:edified_log", - "hexcasting:edified_log_amethyst", - "hexcasting:edified_log_aventurine", - "hexcasting:edified_log_citrine", - "hexcasting:edified_log_purple", - "hexcasting:stripped_edified_log", - "hexcasting:edified_wood", - "hexcasting:stripped_edified_wood", - "hexcasting:edified_planks", - "hexcasting:edified_panel", - "hexcasting:edified_tile", - "hexcasting:edified_door", - "hexcasting:edified_trapdoor", - "hexcasting:edified_slab", - "hexcasting:edified_button", - "hexcasting:edified_stairs", - "hexcasting:edified_fence", - "hexcasting:edified_fence_gate" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/hoe.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/hoe.json deleted file mode 100644 index d0139bd0b9..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/hoe.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:amethyst_edified_leaves", - "hexcasting:aventurine_edified_leaves", - "hexcasting:citrine_edified_leaves" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json deleted file mode 100644 index 71a25063c6..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:slate_block", - "hexcasting:slate_tiles", - "hexcasting:slate_bricks", - "hexcasting:slate_bricks_small", - "hexcasting:slate_pillar", - "hexcasting:slate", - "hexcasting:directrix/empty", - "hexcasting:directrix/redstone", - "hexcasting:directrix/boolean", - "hexcasting:impetus/empty", - "hexcasting:impetus/rightclick", - "hexcasting:impetus/look", - "hexcasting:impetus/redstone", - "hexcasting:amethyst_tiles", - "hexcasting:amethyst_bricks", - "hexcasting:amethyst_bricks_small", - "hexcasting:amethyst_pillar", - "hexcasting:slate_amethyst_tiles", - "hexcasting:slate_amethyst_bricks", - "hexcasting:slate_amethyst_bricks_small", - "hexcasting:slate_amethyst_pillar", - "hexcasting:amethyst_sconce", - "hexcasting:quenched_allay", - "hexcasting:quenched_allay_tiles", - "hexcasting:quenched_allay_bricks", - "hexcasting:quenched_allay_bricks_small" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/shovel.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/shovel.json deleted file mode 100644 index 39b4fe0254..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/mineable/shovel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:amethyst_dust_block" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/planks.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/planks.json deleted file mode 100644 index 39c375c539..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/planks.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_planks", - "hexcasting:edified_panel", - "hexcasting:edified_tile" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json deleted file mode 100644 index 9701e8c0a0..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/pressure_plates.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_pressure_plate" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/slabs.json deleted file mode 100644 index b4894f4197..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/slabs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_slab" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/stairs.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/stairs.json deleted file mode 100644 index f91ba79b2a..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/stairs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_stairs" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json deleted file mode 100644 index 1d0b4a8b68..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/trapdoors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_trapdoor" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json deleted file mode 100644 index 4dff358b03..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/unstable_bottom_center.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_fence_gate" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json deleted file mode 100644 index 93d13da5f5..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_buttons.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_button" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json deleted file mode 100644 index d63af5102c..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_doors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_door" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json deleted file mode 100644 index ca68ade542..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_fences.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_fence", - "hexcasting:edified_fence" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json deleted file mode 100644 index 9701e8c0a0..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_pressure_plates.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_pressure_plate" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json deleted file mode 100644 index b4894f4197..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_slabs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_slab" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json deleted file mode 100644 index f91ba79b2a..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_stairs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_stairs" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json deleted file mode 100644 index 1d0b4a8b68..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/blocks/wooden_trapdoors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_trapdoor" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/items/buttons.json deleted file mode 100644 index 93d13da5f5..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/buttons.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_button" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/doors.json b/Fabric/src/generated/resources/data/minecraft/tags/items/doors.json deleted file mode 100644 index d63af5102c..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/doors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_door" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/leaves.json b/Fabric/src/generated/resources/data/minecraft/tags/items/leaves.json deleted file mode 100644 index d0139bd0b9..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/leaves.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:amethyst_edified_leaves", - "hexcasting:aventurine_edified_leaves", - "hexcasting:citrine_edified_leaves" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/logs.json b/Fabric/src/generated/resources/data/minecraft/tags/items/logs.json deleted file mode 100644 index 8e226d8922..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/logs.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_log", - "hexcasting:edified_log_amethyst", - "hexcasting:edified_log_aventurine", - "hexcasting:edified_log_citrine", - "hexcasting:edified_log_purple", - "hexcasting:stripped_edified_log", - "hexcasting:edified_wood", - "hexcasting:stripped_edified_wood" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/logs_that_burn.json b/Fabric/src/generated/resources/data/minecraft/tags/items/logs_that_burn.json deleted file mode 100644 index 8e226d8922..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/logs_that_burn.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_log", - "hexcasting:edified_log_amethyst", - "hexcasting:edified_log_aventurine", - "hexcasting:edified_log_citrine", - "hexcasting:edified_log_purple", - "hexcasting:stripped_edified_log", - "hexcasting:edified_wood", - "hexcasting:stripped_edified_wood" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/planks.json b/Fabric/src/generated/resources/data/minecraft/tags/items/planks.json deleted file mode 100644 index 39c375c539..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/planks.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_planks", - "hexcasting:edified_panel", - "hexcasting:edified_tile" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/items/slabs.json deleted file mode 100644 index b4894f4197..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/slabs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_slab" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/items/trapdoors.json deleted file mode 100644 index 1d0b4a8b68..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/trapdoors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_trapdoor" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json deleted file mode 100644 index 93d13da5f5..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_buttons.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_button" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_doors.json b/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_doors.json deleted file mode 100644 index d63af5102c..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_doors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_door" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json b/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json deleted file mode 100644 index 9701e8c0a0..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_pressure_plates.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_pressure_plate" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_slabs.json deleted file mode 100644 index b4894f4197..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_slabs.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_slab" - ] -} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json deleted file mode 100644 index 1d0b4a8b68..0000000000 --- a/Fabric/src/generated/resources/data/minecraft/tags/items/wooden_trapdoors.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "hexcasting:edified_trapdoor" - ] -} \ No newline at end of file diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java index a9851c4ccf..033b7d5c33 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.client.renderer.item.ItemPropertyFunction; import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; @@ -98,4 +99,9 @@ public boolean fabricAdditionalQuenchFrustumCheck(AABB aabb) { } return LEVEL_RENDERER_FRUSTUM.isVisible(aabb); } + + @Override + public String getModelLocVariant() { + return ModelResourceLocation.INVENTORY_VARIANT; + } } diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index e45b532b29..11a9de2ed5 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -20,6 +20,7 @@ configurations { canBeResolved = true canBeConsumed = false } + shadowCommon compileClasspath.extendsFrom common runtimeClasspath.extendsFrom common developmentNeoForge.extendsFrom common @@ -72,9 +73,11 @@ repositories { dependencies { neoForge "net.neoforged:neoforge:${neoforgeVersion}" - common(project(path: ':Common', configuration: 'namedElements')) { transitive false } + implementation(project(path: ':Common', configuration: 'namedElements')) { transitive false } shadowBundle(project(path: ':Common', configuration: 'transformProductionNeoForge')) { transitive false } - modImplementation "thedarkcolour:kotlinforforge-neoforge:$kotlinForForgeVersion" + modImplementation("thedarkcolour:kotlinforforge-neoforge:$kotlinForForgeVersion") { + exclude(group: "net.neoforged.fancymodloader", module: "loader") + } // === MANDATORY DEPS === @@ -107,6 +110,17 @@ dependencies { forgeRuntimeLibrary("io.wispforest:endec:0.1.8") forgeRuntimeLibrary("io.wispforest.endec:gson:0.1.5") forgeRuntimeLibrary("io.wispforest.endec:netty:0.1.4") + forgeRuntimeLibrary("io.wispforest.endec:jankson:0.1.5") + forgeRuntimeLibrary("org.jetbrains.kotlin:kotlin-reflect:2.1.20") + forgeRuntimeLibrary("org.jetbrains.kotlin:kotlin-stdlib:2.1.20") + forgeRuntimeLibrary("org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.1.20") + forgeRuntimeLibrary("org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.1.20") + forgeRuntimeLibrary("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.10.2") + forgeRuntimeLibrary("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.10.2") + forgeRuntimeLibrary("org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.8.1") + forgeRuntimeLibrary("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.8.1") + forgeRuntimeLibrary("blue.endless:jankson:1.2.2") + forgeRuntimeLibrary("blue.endless:jankson:0.1.5") } def generatedResources = project(":Common").file("src/generated/resources") @@ -121,6 +135,7 @@ loom { programArgs "--all", "--mod", project.modID programArgs "--output", generatedResources.absolutePath + programArgs "--existing", project(":Common").file("src/main/resources").absolutePath programArgs "--existing", file("src/main/resources").absolutePath programArgs "--existing", generatedResources.absolutePath } diff --git a/Neoforge/gradle.properties b/Neoforge/gradle.properties index a35d3a6636..3b624541aa 100644 --- a/Neoforge/gradle.properties +++ b/Neoforge/gradle.properties @@ -3,6 +3,8 @@ neoforgeVersion=21.1.172 loom.platform=neoforge kotlinForForgeVersion=5.8.0 +kotlinBaseVersion=2.1.20 +kotlinxCoroutinesVersion= curiosVersion=9.5.1 caelusVersion=7.0.1+1.21.1 diff --git a/Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_block.json b/Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_block.json deleted file mode 100644 index 8ad54e92f0..0000000000 --- a/Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_block.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "create" - } - ], - "recipe": { - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:amethyst_block" - } - ], - "processingTime": 150, - "results": [ - { - "count": 3, - "item": "minecraft:amethyst_shard" - }, - { - "chance": 0.5, - "count": 4, - "item": "hexcasting:amethyst_dust" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json b/Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json deleted file mode 100644 index 6673126525..0000000000 --- a/Neoforge/src/generated/resources/data/create/recipes/crushing/amethyst_cluster.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "create" - } - ], - "recipe": { - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:amethyst_cluster" - } - ], - "processingTime": 150, - "results": [ - { - "count": 7, - "item": "minecraft:amethyst_shard" - }, - { - "count": 5, - "item": "hexcasting:amethyst_dust" - }, - { - "chance": 0.25, - "item": "hexcasting:charged_amethyst" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json deleted file mode 100644 index f82c8fda2c..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/akashic_record.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/akashic_record" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/akashic_record" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json deleted file mode 100644 index 5ee9d46ffb..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/budding_amethyst.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/budding_amethyst" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/budding_amethyst" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json deleted file mode 100644 index bc173bd32b..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_boolean.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/directrix_boolean" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/directrix_boolean" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json deleted file mode 100644 index a6f48c1d34..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/directrix_redstone.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/directrix_redstone" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/directrix_redstone" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json deleted file mode 100644 index 086d039702..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_look.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/impetus_look" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/impetus_look" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json deleted file mode 100644 index 04b20e6fc7..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_rightclick.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/impetus_rightclick" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/impetus_rightclick" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json deleted file mode 100644 index 135a08cc3f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/impetus_storedplayer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/impetus_storedplayer" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/impetus_storedplayer" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json deleted file mode 100644 index 15691cf319..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/brainsweep/brainsweep/quench_allay.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:brainsweep/quench_allay" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:brainsweep/quench_allay" - ] - }, - "sends_telemetry_event": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json deleted file mode 100644 index 597cd897de..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/amethyst_tiles.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:amethyst_tiles" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:amethyst_tiles" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence.json deleted file mode 100644 index 8571f6d3d4..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_fence.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_fence" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_fence" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_planks.json deleted file mode 100644 index 804061465a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_planks.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_logs" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_planks" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_planks" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_slab.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_slab.json deleted file mode 100644 index 6643da70b9..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_slab.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_slab" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_slab" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json deleted file mode 100644 index 7a5b84d82a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_stairs.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_stairs" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_stairs" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_tile.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_tile.json deleted file mode 100644 index 2ec6b30c1f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_tile.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_tile" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_tile" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_wood.json deleted file mode 100644 index b71516d7ad..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/edified_wood.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:edified_log" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_wood" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_wood" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json deleted file mode 100644 index fb582f87d5..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/scroll_paper.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "minecraft:amethyst_shard" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:scroll_paper" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:scroll_paper" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block.json deleted file mode 100644 index 163e9a2934..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/building_blocks/slate_block.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:slate" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:slate_block" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:slate_block" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json deleted file mode 100644 index 5108125752..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ageing_scroll_paper_lantern.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:scroll_paper_lantern" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:ageing_scroll_paper_lantern" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:ageing_scroll_paper_lantern" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json deleted file mode 100644 index 171b4cc129..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/amethyst_sconce.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:amethyst_sconce" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:amethyst_sconce" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json deleted file mode 100644 index 52289cc5d7..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/ancient_scroll_paper_lantern.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:ancient_scroll_paper" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:ancient_scroll_paper_lantern" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:ancient_scroll_paper_lantern" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json deleted file mode 100644 index 41ac798ebc..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_paper_lantern.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:scroll_paper" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:scroll_paper_lantern" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:scroll_paper_lantern" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_small.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_small.json deleted file mode 100644 index 5954c5786a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/scroll_small.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:scroll_small" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:scroll_small" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/slate.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/slate.json deleted file mode 100644 index 3e3481c8c3..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/decorations/slate.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:slate" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:slate" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/food/sub_sandwich.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/food/sub_sandwich.json deleted file mode 100644 index 1acebe3d17..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/food/sub_sandwich.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "minecraft:amethyst_shard" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:sub_sandwich" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:sub_sandwich" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json deleted file mode 100644 index b8f39b64f4..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/charged.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:quenched_allay_shard" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:decompose_quenched_shard/charged" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:decompose_quenched_shard/charged" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json deleted file mode 100644 index c4bd1a2c6b..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/dust.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:quenched_allay_shard" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:decompose_quenched_shard/dust" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:decompose_quenched_shard/dust" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json deleted file mode 100644 index b82d6e8ddc..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/decompose_quenched_shard/shard.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:quenched_allay_shard" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:decompose_quenched_shard/shard" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:decompose_quenched_shard/shard" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/default_colorizer.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/default_colorizer.json deleted file mode 100644 index 4b94e3d969..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/default_colorizer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:default_colorizer" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:default_colorizer" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json deleted file mode 100644 index b0cb050ec7..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_blue.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_blue" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_blue" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json deleted file mode 100644 index aa88e65b3a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_cyan.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_cyan" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_cyan" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json deleted file mode 100644 index e77b2b4530..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_gray.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_gray" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_gray" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json deleted file mode 100644 index 08e2cf3998..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_lime.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_lime" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_lime" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json deleted file mode 100644 index 27e62c96d5..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_pink.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_pink" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_pink" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json deleted file mode 100644 index 532eb81eb6..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/dye_colorizer_red.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:dye_colorizer_red" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:dye_colorizer_red" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json deleted file mode 100644 index 2938abc3e3..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/pride_colorizer_pansexual.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:pride_colorizer_pansexual" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:pride_colorizer_pansexual" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/uuid_colorizer.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/uuid_colorizer.json deleted file mode 100644 index c2e9457bb0..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/misc/uuid_colorizer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:amethyst_dust" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:uuid_colorizer" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:uuid_colorizer" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json deleted file mode 100644 index d000cbc46a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_bookshelf.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:akashic_bookshelf" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:akashic_bookshelf" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json deleted file mode 100644 index 595f53ddba..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/akashic_connector.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "enlightenment": { - "conditions": { - "health_used": { - "min": 0.8 - }, - "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { - "max": 1.0, - "min": 2.2250738585072014E-308 - } - }, - "trigger": "hexcasting:overcast" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:akashic_connector" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "enlightenment", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:akashic_connector" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_button.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_button.json deleted file mode 100644 index 191916c5b2..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_button.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_button" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_button" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_door.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_door.json deleted file mode 100644 index ea21e4a47a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_door.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_door" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_door" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json deleted file mode 100644 index cc15ca3960..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/redstone/edified_trapdoor.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:edified_planks" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:edified_trapdoor" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:edified_trapdoor" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/abacus.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/abacus.json deleted file mode 100644 index 7349713cba..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/abacus.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:abacus" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:abacus" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/cypher.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/cypher.json deleted file mode 100644 index 46fe0a95a4..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/cypher.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:cypher" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:cypher" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus_rotated.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus_rotated.json deleted file mode 100644 index c1d45f0e21..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/focus_rotated.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:focus_rotated" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:focus_rotated" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/jeweler_hammer.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/jeweler_hammer.json deleted file mode 100644 index 0c38f6dcbd..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/jeweler_hammer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "minecraft:amethyst_shard" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:jeweler_hammer" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:jeweler_hammer" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/lens.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/lens.json deleted file mode 100644 index c6820e5be0..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/lens.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:lens" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:lens" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/spellbook.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/spellbook.json deleted file mode 100644 index 9ef640f920..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/spellbook.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_chorus": { - "conditions": { - "items": [ - { - "items": [ - "minecraft:chorus_fruit" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_focus": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:focus" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:spellbook" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_focus", - "has_chorus", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:spellbook" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/acacia.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/acacia.json deleted file mode 100644 index 3517416d4d..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/acacia.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/acacia" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/acacia" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/bamboo.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/bamboo.json deleted file mode 100644 index a6fa449db3..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/bamboo.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/bamboo" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/bamboo" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/birch.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/birch.json deleted file mode 100644 index ca645b3d2c..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/birch.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/birch" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/birch" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/cherry.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/cherry.json deleted file mode 100644 index a28e8cbc57..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/cherry.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/cherry" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/cherry" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/crimson.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/crimson.json deleted file mode 100644 index 273e6c63c9..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/crimson.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/crimson" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/crimson" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/dark_oak.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/dark_oak.json deleted file mode 100644 index 3f85a91af5..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/dark_oak.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/dark_oak" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/dark_oak" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/edified.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/edified.json deleted file mode 100644 index f311992c36..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/edified.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/edified" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/edified" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/jungle.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/jungle.json deleted file mode 100644 index e60ee05a9a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/jungle.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/jungle" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/jungle" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mangrove.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mangrove.json deleted file mode 100644 index 395c776a6e..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/mangrove.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/mangrove" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/mangrove" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/oak.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/oak.json deleted file mode 100644 index 9a2a7e466c..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/oak.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/oak" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/oak" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/quenched.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/quenched.json deleted file mode 100644 index efa9566aeb..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/quenched.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/quenched" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/quenched" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/spruce.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/spruce.json deleted file mode 100644 index d9a25ac43a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/spruce.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/spruce" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/spruce" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/warped.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/warped.json deleted file mode 100644 index a4cda1f21b..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/staff/warped.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "items": [ - "hexcasting:charged_amethyst" - ] - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:staff/warped" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:staff/warped" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/thought_knot.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/thought_knot.json deleted file mode 100644 index 86e0897a2d..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/thought_knot.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:thought_knot" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:thought_knot" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/trinket.json b/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/trinket.json deleted file mode 100644 index 09a44adcc8..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/advancements/recipes/tools/trinket.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_item": { - "conditions": { - "items": [ - { - "tag": "hexcasting:staves" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "hexcasting:trinket" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_item", - "has_the_recipe" - ] - ], - "rewards": { - "recipes": [ - "hexcasting:trinket" - ] - }, - "sends_telemetry_event": false -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_bookshelf.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_bookshelf.json deleted file mode 100644 index 78a36f62ec..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_bookshelf.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:akashic_bookshelf" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/akashic_bookshelf" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json deleted file mode 100644 index 359c43e79e..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_connector.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:akashic_connector" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/akashic_connector" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_record.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_record.json deleted file mode 100644 index 5c93f81681..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/akashic_record.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:akashic_record" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/akashic_record" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks_small.json deleted file mode 100644 index 3d39f82987..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_bricks_small.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_bricks_small" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/amethyst_bricks_small" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_dust_block.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_dust_block.json deleted file mode 100644 index 7c054a0aab..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_dust_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_dust_block" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/amethyst_dust_block" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_pillar.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_pillar.json deleted file mode 100644 index 2eeb112461..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_pillar.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_pillar" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/amethyst_pillar" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_sconce.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_sconce.json deleted file mode 100644 index e2c38fe09e..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_sconce.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_sconce" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/amethyst_sconce" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_tiles.json deleted file mode 100644 index 13010296ca..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/amethyst_tiles.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:amethyst_tiles" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/amethyst_tiles" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper.json deleted file mode 100644 index 2bb2887920..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:ancient_scroll_paper" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/ancient_scroll_paper" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper_lantern.json deleted file mode 100644 index f2ea006a03..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/ancient_scroll_paper_lantern.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:ancient_scroll_paper_lantern" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/ancient_scroll_paper_lantern" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/boolean.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/boolean.json deleted file mode 100644 index 7510be752b..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/boolean.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:directrix/boolean" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/directrix/boolean" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/empty.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/empty.json deleted file mode 100644 index 056282de33..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/empty.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:directrix/empty" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/directrix/empty" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/redstone.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/redstone.json deleted file mode 100644 index b130eb19de..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/directrix/redstone.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:directrix/redstone" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/directrix/redstone" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_button.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_button.json deleted file mode 100644 index a24172124e..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_button.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_button" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_button" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_door.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_door.json deleted file mode 100644 index 942a65484f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_door.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "conditions": [ - { - "block": "hexcasting:edified_door", - "condition": "minecraft:block_state_property", - "properties": { - "half": "lower" - } - } - ], - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_door" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_door" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence.json deleted file mode 100644 index f45eea22be..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_fence" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_fence" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence_gate.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence_gate.json deleted file mode 100644 index 01cbf2a5e1..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_fence_gate.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_fence_gate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_fence_gate" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log.json deleted file mode 100644 index 396a3fcb45..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_log" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_amethyst.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_amethyst.json deleted file mode 100644 index d6c0759bfa..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_amethyst.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_log_amethyst" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_log_amethyst" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_aventurine.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_aventurine.json deleted file mode 100644 index 31892f2177..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_aventurine.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_log_aventurine" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_log_aventurine" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_citrine.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_citrine.json deleted file mode 100644 index 21ac1cd0fb..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_citrine.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_log_citrine" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_log_citrine" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_purple.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_purple.json deleted file mode 100644 index f9c2c33343..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_log_purple.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_log_purple" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_log_purple" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_panel.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_panel.json deleted file mode 100644 index 83cb1f1b59..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_panel.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_panel" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_panel" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_planks.json deleted file mode 100644 index 5f1b5f7280..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_planks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_planks" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_planks" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_pressure_plate.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_pressure_plate.json deleted file mode 100644 index d733b30a49..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_pressure_plate.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_pressure_plate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_pressure_plate" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_slab.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_slab.json deleted file mode 100644 index 0bdc00f6b3..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_slab.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_slab" - } - ], - "functions": [ - { - "add": false, - "conditions": [ - { - "block": "hexcasting:edified_slab", - "condition": "minecraft:block_state_property", - "properties": { - "type": "double" - } - } - ], - "count": 2.0, - "function": "minecraft:set_count" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_slab" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_stairs.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_stairs.json deleted file mode 100644 index 7cb6566434..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_stairs.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_stairs" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_stairs" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_tile.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_tile.json deleted file mode 100644 index dbc6bd1426..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_tile.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_tile" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_tile" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_trapdoor.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_trapdoor.json deleted file mode 100644 index f76ea0437f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_trapdoor.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_trapdoor" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_trapdoor" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_wood.json deleted file mode 100644 index 2e1faee977..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/edified_wood.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:edified_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/edified_wood" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/empty.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/empty.json deleted file mode 100644 index 67fe1185ac..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/empty.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:impetus/empty" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/impetus/empty" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/look.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/look.json deleted file mode 100644 index 87f6f0ef09..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/look.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:impetus/look" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/impetus/look" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/redstone.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/redstone.json deleted file mode 100644 index 1635ee4207..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/redstone.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:impetus/redstone" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/impetus/redstone" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/rightclick.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/rightclick.json deleted file mode 100644 index 37f1e9df10..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/impetus/rightclick.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:impetus/rightclick" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/impetus/rightclick" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks.json deleted file mode 100644 index eb1a87b224..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:quenched_allay_bricks" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/quenched_allay_bricks" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks_small.json deleted file mode 100644 index 879089b6d4..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_bricks_small.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:quenched_allay_bricks_small" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/quenched_allay_bricks_small" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_tiles.json deleted file mode 100644 index 0c81157382..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/quenched_allay_tiles.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:quenched_allay_tiles" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/quenched_allay_tiles" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper.json deleted file mode 100644 index 8c3d628108..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:scroll_paper" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/scroll_paper" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper_lantern.json deleted file mode 100644 index ccea471c66..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/scroll_paper_lantern.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:scroll_paper_lantern" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/scroll_paper_lantern" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate.json deleted file mode 100644 index 6a7e00b7d0..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "functions": [ - { - "function": "minecraft:copy_nbt", - "ops": [ - { - "op": "replace", - "source": "pattern", - "target": "BlockEntityTag.pattern" - } - ], - "source": "block_entity" - } - ], - "name": "hexcasting:slate" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks.json deleted file mode 100644 index f6d9ea8d1a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_amethyst_bricks" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_amethyst_bricks" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks_small.json deleted file mode 100644 index 6f7cfb5825..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_bricks_small.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_amethyst_bricks_small" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_amethyst_bricks_small" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_pillar.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_pillar.json deleted file mode 100644 index 96dd26f7fb..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_pillar.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_amethyst_pillar" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_amethyst_pillar" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_tiles.json deleted file mode 100644 index e91ebad3ce..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_amethyst_tiles.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_amethyst_tiles" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_amethyst_tiles" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_block.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_block.json deleted file mode 100644 index d136fe7460..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_block.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_block" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_block" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks.json deleted file mode 100644 index d42593f8d5..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_bricks" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_bricks" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks_small.json deleted file mode 100644 index f77a608dec..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_bricks_small.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_bricks_small" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_bricks_small" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_pillar.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_pillar.json deleted file mode 100644 index 060b60ebf9..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_pillar.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_pillar" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_pillar" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_tiles.json deleted file mode 100644 index 81cda1a13a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/slate_tiles.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:slate_tiles" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/slate_tiles" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_log.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_log.json deleted file mode 100644 index 7dab40f3a1..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_log.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:stripped_edified_log" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/stripped_edified_log" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_wood.json deleted file mode 100644 index 60b009f032..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/loot_tables/blocks/stripped_edified_wood.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "pools": [ - { - "bonus_rolls": 0.0, - "entries": [ - { - "type": "minecraft:item", - "name": "hexcasting:stripped_edified_wood" - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "hexcasting:blocks/stripped_edified_wood" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/akashic_connector.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/akashic_connector.json deleted file mode 100644 index 218b59c739..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/akashic_connector.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "1": { - "item": "hexcasting:amethyst_dust" - }, - "2": { - "item": "minecraft:amethyst_shard" - }, - "3": { - "item": "hexcasting:charged_amethyst" - }, - "L": { - "tag": "hexcasting:edified_logs" - }, - "P": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "LPL", - "123", - "LPL" - ], - "result": { - "count": 4, - "item": "hexcasting:akashic_connector" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_dust_packing.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_dust_packing.json deleted file mode 100644 index a3fdd6a2bf..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_dust_packing.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "X": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - "XX", - "XX" - ], - "result": { - "item": "hexcasting:amethyst_dust_block" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_tiles.json deleted file mode 100644 index d41a67a785..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/amethyst_tiles.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "C": { - "item": "minecraft:amethyst_block" - }, - "D": { - "item": "minecraft:amethyst_block" - }, - "I": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - "DCD", - "CIC", - "DCD" - ], - "result": { - "count": 8, - "item": "hexcasting:amethyst_tiles" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper_lantern.json deleted file mode 100644 index 743cc6dddf..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/ancient_scroll_paper_lantern.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "B": { - "item": "minecraft:torch" - }, - "T": { - "item": "hexcasting:ancient_scroll_paper" - } - }, - "pattern": [ - "T", - "B" - ], - "result": { - "item": "hexcasting:ancient_scroll_paper_lantern" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json deleted file mode 100644 index 6ff7558133..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/akashic_record.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "hexcasting:akashic_connector" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 5, - "profession": "librarian" - }, - "result": { - "name": "hexcasting:akashic_record" - } -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json deleted file mode 100644 index 59338fc079..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_look.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "hexcasting:impetus/empty" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 2, - "profession": "fletcher" - }, - "result": { - "name": "hexcasting:impetus/look", - "properties": { - "energized": "false", - "facing": "north" - } - } -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_rightclick.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_rightclick.json deleted file mode 100644 index 5a106bd801..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/brainsweep/impetus_rightclick.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "hexcasting:brainsweep", - "blockIn": { - "type": "block", - "block": "hexcasting:impetus/empty" - }, - "cost": 1000000, - "entityIn": { - "type": "villager", - "minLevel": 2, - "profession": "toolsmith" - }, - "result": { - "name": "hexcasting:impetus/rightclick", - "properties": { - "energized": "false", - "facing": "north" - } - } -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json deleted file mode 100644 index 29c34436ed..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/create/crushing/amethyst_shard.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "create" - } - ], - "recipe": { - "type": "create:crushing", - "ingredients": [ - { - "item": "minecraft:amethyst_shard" - } - ], - "processingTime": 150, - "results": [ - { - "count": 4, - "item": "hexcasting:amethyst_dust" - }, - { - "chance": 0.5, - "item": "hexcasting:amethyst_dust" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json deleted file mode 100644 index 0105627704..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_door.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_door" - } - ], - "result": [ - { - "item": "hexcasting:edified_planks" - } - ], - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_dig" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json deleted file mode 100644 index 5564ed6205..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_trapdoor.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_trapdoor" - } - ], - "result": [ - { - "item": "hexcasting:edified_planks" - } - ], - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_dig" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json deleted file mode 100644 index 3a30ec3957..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/akashic_wood.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_wood" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_wood" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_strip" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json deleted file mode 100644 index ef802db2be..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_strip" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json deleted file mode 100644 index c44c2caaf7..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_amethyst.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_amethyst" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_strip" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json deleted file mode 100644 index ba426fbb3a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_aventurine.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_aventurine" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_strip" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json deleted file mode 100644 index 1251a678b9..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_citrine.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_citrine" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_strip" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json deleted file mode 100644 index c5995bf927..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/compat/farmersdelight/cutting/edified_log_purple.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "forge:conditional", - "recipes": [ - { - "conditions": [ - { - "type": "forge:mod_loaded", - "modid": "farmersdelight" - } - ], - "recipe": { - "type": "farmersdelight:cutting", - "ingredients": [ - { - "item": "hexcasting:edified_log_purple" - } - ], - "result": [ - { - "item": "hexcasting:stripped_edified_log" - }, - { - "item": "farmersdelight:tree_bark" - } - ], - "sound": "minecraft:item.axe.strip", - "tool": { - "type": "farmersdelight:tool_action", - "action": "axe_strip" - } - } - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/cypher.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/cypher.json deleted file mode 100644 index ab99a0fd0d..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/cypher.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "C": { - "tag": "forge:ingots/copper" - }, - "I": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " C ", - "CIC", - " C " - ], - "result": { - "item": "hexcasting:cypher" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/charged.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/charged.json deleted file mode 100644 index 9521bacbca..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/charged.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "hexcasting:quenched_allay_shard" - }, - { - "item": "hexcasting:charged_amethyst" - } - ], - "result": { - "count": 4, - "item": "hexcasting:charged_amethyst" - } -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/shard.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/shard.json deleted file mode 100644 index af22d06105..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/decompose_quenched_shard/shard.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "hexcasting:quenched_allay_shard" - }, - { - "item": "minecraft:amethyst_shard" - } - ], - "result": { - "count": 7, - "item": "minecraft:amethyst_shard" - } -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/default_colorizer.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/default_colorizer.json deleted file mode 100644 index 133b5b03bd..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/default_colorizer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "hexcasting:amethyst_dust" - }, - "D": { - "item": "hexcasting:amethyst_dust" - }, - "I": { - "item": "minecraft:copper_ingot" - } - }, - "pattern": [ - "DCD", - "CIC", - "DCD" - ], - "result": { - "item": "hexcasting:default_colorizer" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_black.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_black.json deleted file mode 100644 index 4131cc5643..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_black.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:black_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_black" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_brown.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_brown.json deleted file mode 100644 index 3d5459144d..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_brown.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:brown_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_brown" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_gray.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_gray.json deleted file mode 100644 index c491dd7650..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_gray.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:gray_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_gray" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_green.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_green.json deleted file mode 100644 index 96665a82f9..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_green.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:green_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_green" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_lime.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_lime.json deleted file mode 100644 index f35899f58f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_lime.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:lime_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_lime" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_magenta.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_magenta.json deleted file mode 100644 index 0449c7a303..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_magenta.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:magenta_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_magenta" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_orange.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_orange.json deleted file mode 100644 index fd2b480a12..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_orange.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:orange_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_orange" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_pink.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_pink.json deleted file mode 100644 index e208a43556..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_pink.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:pink_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_pink" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_purple.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_purple.json deleted file mode 100644 index da671f3ea5..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_purple.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:purple_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_purple" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_red.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_red.json deleted file mode 100644 index 3ff5f19d65..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_red.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:red_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_red" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_white.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_white.json deleted file mode 100644 index 8902cb1a1e..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_white.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:white_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_white" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_yellow.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_yellow.json deleted file mode 100644 index 1bddee39eb..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dye_colorizer_yellow.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:yellow_dye" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:dye_colorizer_yellow" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_focus.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_focus.json deleted file mode 100644 index 28edc09f6d..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_focus.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "hexcasting:seal_focus", - "category": "misc" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_spellbook.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_spellbook.json deleted file mode 100644 index 5bf703566d..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/dynamicseal_spellbook.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "hexcasting:seal_spellbook", - "category": "misc" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_button.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_button.json deleted file mode 100644 index 6e250ed1b2..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_button.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "redstone", - "ingredients": [ - { - "tag": "hexcasting:edified_planks" - } - ], - "result": { - "item": "hexcasting:edified_button" - } -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_panel.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_panel.json deleted file mode 100644 index af912d5628..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_panel.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "C": { - "tag": "hexcasting:edified_planks" - }, - "D": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "DCD", - "C C", - "DCD" - ], - "result": { - "count": 8, - "item": "hexcasting:edified_panel" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_planks.json deleted file mode 100644 index 10317d4b79..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_planks.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "building", - "ingredients": [ - { - "tag": "hexcasting:edified_logs" - } - ], - "result": { - "count": 4, - "item": "hexcasting:edified_planks" - } -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_stairs.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_stairs.json deleted file mode 100644 index cd17064167..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_stairs.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "W ", - "WW ", - "WWW" - ], - "result": { - "count": 4, - "item": "hexcasting:edified_stairs" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_trapdoor.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_trapdoor.json deleted file mode 100644 index fbe3f9b3da..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/edified_trapdoor.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "redstone", - "key": { - "W": { - "tag": "hexcasting:edified_planks" - } - }, - "pattern": [ - "WWW", - "WWW" - ], - "result": { - "count": 2, - "item": "hexcasting:edified_trapdoor" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_agender.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_agender.json deleted file mode 100644 index d92f22f1df..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_agender.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:glass" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_agender" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aroace.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aroace.json deleted file mode 100644 index cc747fec3e..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aroace.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:wheat_seeds" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_aroace" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aromantic.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aromantic.json deleted file mode 100644 index 421af44c47..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_aromantic.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:arrow" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_aromantic" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_asexual.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_asexual.json deleted file mode 100644 index 75245d5013..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_asexual.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:bread" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_asexual" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_bisexual.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_bisexual.json deleted file mode 100644 index 3f13a25e91..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_bisexual.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:wheat" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_bisexual" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demiboy.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demiboy.json deleted file mode 100644 index 9ff3ece1ec..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demiboy.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:raw_iron" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_demiboy" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demigirl.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demigirl.json deleted file mode 100644 index e8a8322040..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_demigirl.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:raw_copper" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_demigirl" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_gay.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_gay.json deleted file mode 100644 index da08d7d2e0..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_gay.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:stone_brick_wall" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_gay" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderfluid.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderfluid.json deleted file mode 100644 index ee84a87e50..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderfluid.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:water_bucket" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_genderfluid" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderqueer.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderqueer.json deleted file mode 100644 index a5d706b3f3..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_genderqueer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:glass_bottle" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_genderqueer" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_intersex.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_intersex.json deleted file mode 100644 index 592a3f5cf2..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_intersex.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:azalea" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_intersex" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_lesbian.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_lesbian.json deleted file mode 100644 index eefd174c3b..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_lesbian.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:honeycomb" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_lesbian" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_nonbinary.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_nonbinary.json deleted file mode 100644 index 87d59afe53..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_nonbinary.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:moss_block" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_nonbinary" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json deleted file mode 100644 index d5f1d3054f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_pansexual.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "type": "hexcasting:mod_conditional", - "default": { - "item": "minecraft:carrot" - }, - "if_loaded": { - "item": "farmersdelight:skillet" - }, - "modid": "farmersdelight" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_pansexual" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_plural.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_plural.json deleted file mode 100644 index 9b616724e0..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_plural.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:repeater" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_plural" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_transgender.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_transgender.json deleted file mode 100644 index cb09eaa35e..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/pride_colorizer_transgender.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "C": { - "item": "minecraft:egg" - }, - "D": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - " D ", - "DCD", - " D " - ], - "result": { - "item": "hexcasting:pride_colorizer_transgender" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_paper_lantern.json deleted file mode 100644 index 3b9aa6a140..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/scroll_paper_lantern.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "B": { - "item": "minecraft:torch" - }, - "T": { - "item": "hexcasting:scroll_paper" - } - }, - "pattern": [ - "T", - "B" - ], - "result": { - "item": "hexcasting:scroll_paper_lantern" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/slate.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/slate.json deleted file mode 100644 index 43863d1aa2..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/slate.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "A": { - "item": "hexcasting:amethyst_dust" - }, - "S": { - "item": "minecraft:deepslate" - } - }, - "pattern": [ - " A ", - "SSS" - ], - "result": { - "count": 6, - "item": "hexcasting:slate" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/slate_block.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/slate_block.json deleted file mode 100644 index 5bd7d2052f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/slate_block.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "building", - "key": { - "C": { - "item": "minecraft:deepslate" - }, - "D": { - "item": "minecraft:deepslate" - }, - "I": { - "item": "hexcasting:amethyst_dust" - } - }, - "pattern": [ - "DCD", - "CIC", - "DCD" - ], - "result": { - "count": 8, - "item": "hexcasting:slate_block" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/bamboo.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/bamboo.json deleted file mode 100644 index 2796a8b049..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/bamboo.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:bamboo_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/bamboo" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/birch.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/birch.json deleted file mode 100644 index 7c91ab627a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/birch.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:birch_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/birch" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/crimson.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/crimson.json deleted file mode 100644 index 105a164cfc..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/crimson.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:crimson_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/crimson" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/dark_oak.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/dark_oak.json deleted file mode 100644 index 14ed432aa3..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/dark_oak.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:dark_oak_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/dark_oak" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/edified.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/edified.json deleted file mode 100644 index 8ce0918491..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/edified.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "hexcasting:edified_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/edified" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/jungle.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/jungle.json deleted file mode 100644 index 383db50fce..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/jungle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:jungle_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/jungle" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mangrove.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mangrove.json deleted file mode 100644 index 33fb46a8ab..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mangrove.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:mangrove_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/mangrove" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mindsplice.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mindsplice.json deleted file mode 100644 index 8b14081c0c..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/mindsplice.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "tag": "hexcasting:brainswept_circle_components" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/mindsplice" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/oak.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/oak.json deleted file mode 100644 index 5c8e796b5a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/oak.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:oak_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/oak" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/quenched.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/quenched.json deleted file mode 100644 index 170c8373fc..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/quenched.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "hexcasting:quenched_allay_shard" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/quenched" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/spruce.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/spruce.json deleted file mode 100644 index 3670939402..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/spruce.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:spruce_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/spruce" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/warped.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/warped.json deleted file mode 100644 index c8f1b7ce6a..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/staff/warped.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "equipment", - "key": { - "A": { - "item": "hexcasting:charged_amethyst" - }, - "S": { - "item": "minecraft:stick" - }, - "W": { - "item": "minecraft:warped_planks" - } - }, - "pattern": [ - " SA", - " WS", - "S " - ], - "result": { - "item": "hexcasting:staff/warped" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/stonecutting/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/stonecutting/amethyst_tiles.json deleted file mode 100644 index 020b0ec65f..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/stonecutting/amethyst_tiles.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "minecraft:stonecutting", - "count": 1, - "ingredient": { - "item": "minecraft:amethyst_block" - }, - "result": "hexcasting:amethyst_tiles" -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipes/sub_sandwich.json b/Neoforge/src/generated/resources/data/hexcasting/recipes/sub_sandwich.json deleted file mode 100644 index 937deabc39..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/recipes/sub_sandwich.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:crafting_shaped", - "category": "misc", - "key": { - "A": { - "item": "minecraft:amethyst_shard" - }, - "B": { - "item": "minecraft:bread" - }, - "C": { - "item": "minecraft:cooked_beef" - }, - "S": { - "item": "minecraft:stick" - } - }, - "pattern": [ - " SA", - " C ", - " B " - ], - "result": { - "item": "hexcasting:sub_sandwich" - }, - "show_notification": true -} \ No newline at end of file diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java index 063845abf8..d642eb88f3 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/xplat/HexBlockStatesAndModels.java @@ -16,6 +16,7 @@ import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; import net.neoforged.neoforge.client.model.generators.ConfiguredModel; import net.neoforged.neoforge.client.model.generators.ModelBuilder; +import net.neoforged.neoforge.client.model.generators.ModelFile; import net.neoforged.neoforge.common.data.ExistingFileHelper; import static net.neoforged.neoforge.client.model.generators.ModelProvider.BLOCK_FOLDER; @@ -25,6 +26,12 @@ public HexBlockStatesAndModels(PackOutput output, ExistingFileHelper exFileHelpe super(output, HexAPI.MOD_ID, exFileHelper); } + @Override + protected void blockAndItem(Block block, BlockModelBuilder model) { + simpleBlock(block, model); + simpleBlockItem(block, model); + } + @Override protected void registerStatesAndModels() { var slateModel = models().getExistingFile(modLoc("slate")); @@ -124,7 +131,7 @@ protected void registerStatesAndModels() { }); - blockAndItem(HexBlocks.SLATE_BLOCK, models().cubeAll("slate_block", modLoc("block/slate"))); + blockAndItem(HexBlocks.SLATE_BLOCK, models().cubeAll("slate_block", modLoc("block/slate_block"))); blockAndItem(HexBlocks.SLATE_TILES, models().cubeAll("block/deco/slate_tiles", modLoc("block/deco/slate_tiles"))); blockAndItem(HexBlocks.SLATE_BRICKS, models().cubeAll("block/deco/slate_bricks", modLoc("block/deco/slate_bricks"))); blockAndItem(HexBlocks.SLATE_BRICKS_SMALL, models().cubeAll("block/deco/slate_bricks_small", modLoc("block/deco/slate_bricks_small"))); @@ -288,7 +295,7 @@ private void arrowCircleBlock(Block block, String name, ResourceLocation particl } private void impetus(Block block, String name, String stub, boolean itemModelIsLit) { - arrowCircleBlock(block, name, modLoc("block/slate"), + arrowCircleBlock(block, name, modLoc("block/slate_block"), "impetus/" + stub + "/front", "impetus/" + stub + "/top", "impetus/" + stub + "/left", @@ -299,7 +306,7 @@ private void impetus(Block block, String name, String stub, boolean itemModelIsL } private void doAllTheDirectrices() { - arrowCircleBlock(HexBlocks.EMPTY_DIRECTRIX, "directrix/empty", modLoc("block/slate"), + arrowCircleBlock(HexBlocks.EMPTY_DIRECTRIX, "directrix/empty", modLoc("block/slate_block"), "directrix/empty/front", "directrix/empty/top", "directrix/empty/left", "directrix/empty/right", "directrix/empty/back", false); @@ -338,7 +345,7 @@ private void doAllTheDirectrices() { var modelName = "block/circle/directrix/redstone/" + litness + "_" + poweredness + "_" + dir.getName(); var model = models().cube(modelName, modLoc(bottom), modLoc(top), modLoc(front), modLoc(back), modLoc(left), modLoc(right)) - .texture("particle", modLoc("block/slate")); + .texture("particle", modLoc("block/slate_block")); if (isLit && !isPowered && dir == Direction.EAST) { // getBuilder does not add the block/etc to the front if the path contains any slashes @@ -395,7 +402,7 @@ private void doAllTheDirectrices() { var modelName = "block/circle/directrix/boolean/" + litness + "_" + boolStateString + "_" + dir.getName(); var model = models().cube(modelName, modLoc(bottom), modLoc(top), modLoc(front), modLoc(back), modLoc(left), modLoc(right)) - .texture("particle", modLoc("block/slate")); + .texture("particle", modLoc("block/slate_block")); if (isLit && boolState == BlockBooleanDirectrix.State.FALSE && dir == Direction.EAST) { // getBuilder does not add the block/etc to the front if the path contains any slashes diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java index 0419b3c49a..451bbe82b6 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/xplat/ForgeClientXplatImpl.java @@ -9,6 +9,7 @@ import net.minecraft.client.renderer.item.ItemProperties; import net.minecraft.client.renderer.item.ItemPropertyFunction; import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; @@ -66,4 +67,9 @@ public void restoreLastFilter(AbstractTexture texture) { public boolean fabricAdditionalQuenchFrustumCheck(AABB aabb) { return true; // forge fixes this with a patch so we just say "yep" } + + @Override + public String getModelLocVariant() { + return ModelResourceLocation.STANDALONE_VARIANT; + } } From b0debeca86a000159d8dc5fcbea3edb90f8fe741 Mon Sep 17 00:00:00 2001 From: Ski <34802236+SuperKnux@users.noreply.github.com> Date: Wed, 3 Dec 2025 12:21:51 -0600 Subject: [PATCH 68/81] * Finally finished datagen! --- .../hexcasting/datagen/HexLootTables.java | 4 + .../datagen/tag/HexBlockTagProvider.java | 2 +- Fabric/build.gradle | 6 +- Fabric/libs/jankson-1.2.3.jar | Bin 0 -> 75817 bytes .../data/c/tags/item/amethyst_dusts.json | 5 + .../resources/data/c/tags/item/gems.json | 5 + .../data/create/tags/block/brittle.json | 8 + .../recipes/brainsweep/akashic_record.json | 35 +++ .../recipes/brainsweep/budding_amethyst.json | 35 +++ .../recipes/brainsweep/directrix_boolean.json | 35 +++ .../brainsweep/directrix_redstone.json | 35 +++ .../recipes/brainsweep/impetus_look.json | 35 +++ .../brainsweep/impetus_rightclick.json | 35 +++ .../brainsweep/impetus_storedplayer.json | 35 +++ .../recipes/brainsweep/quench_allay.json | 35 +++ .../amethyst_dust_packing.json | 32 +++ .../amethyst_dust_unpacking.json | 32 +++ .../building_blocks/amethyst_tiles.json | 32 +++ .../building_blocks/ancient_scroll_paper.json | 32 +++ .../building_blocks/edified_fence.json | 32 +++ .../building_blocks/edified_fence_gate.json | 32 +++ .../building_blocks/edified_panel.json | 32 +++ .../building_blocks/edified_planks.json | 32 +++ .../recipes/building_blocks/edified_slab.json | 32 +++ .../building_blocks/edified_stairs.json | 32 +++ .../recipes/building_blocks/edified_tile.json | 32 +++ .../recipes/building_blocks/edified_wood.json | 32 +++ .../recipes/building_blocks/scroll_paper.json | 32 +++ .../recipes/building_blocks/slate_block.json | 32 +++ .../slate_block_from_slates.json | 32 +++ .../stonecutting/amethyst_tiles.json | 32 +++ .../stripped_edified_wood.json | 32 +++ .../ageing_scroll_paper_lantern.json | 32 +++ .../recipes/decorations/amethyst_sconce.json | 32 +++ .../ancient_scroll_paper_lantern.json | 32 +++ .../recipes/decorations/scroll.json | 32 +++ .../recipes/decorations/scroll_medium.json | 32 +++ .../decorations/scroll_paper_lantern.json | 32 +++ .../recipes/decorations/scroll_small.json | 32 +++ .../recipes/decorations/slate.json | 32 +++ .../recipes/food/sub_sandwich.json | 32 +++ .../decompose_quenched_shard/charged.json | 32 +++ .../misc/decompose_quenched_shard/dust.json | 32 +++ .../misc/decompose_quenched_shard/shard.json | 32 +++ .../recipes/misc/default_colorizer.json | 32 +++ .../recipes/misc/dye_colorizer_black.json | 32 +++ .../recipes/misc/dye_colorizer_blue.json | 32 +++ .../recipes/misc/dye_colorizer_brown.json | 32 +++ .../recipes/misc/dye_colorizer_cyan.json | 32 +++ .../recipes/misc/dye_colorizer_gray.json | 32 +++ .../recipes/misc/dye_colorizer_green.json | 32 +++ .../misc/dye_colorizer_light_blue.json | 32 +++ .../misc/dye_colorizer_light_gray.json | 32 +++ .../recipes/misc/dye_colorizer_lime.json | 32 +++ .../recipes/misc/dye_colorizer_magenta.json | 32 +++ .../recipes/misc/dye_colorizer_orange.json | 32 +++ .../recipes/misc/dye_colorizer_pink.json | 32 +++ .../recipes/misc/dye_colorizer_purple.json | 32 +++ .../recipes/misc/dye_colorizer_red.json | 32 +++ .../recipes/misc/dye_colorizer_white.json | 32 +++ .../recipes/misc/dye_colorizer_yellow.json | 32 +++ .../recipes/misc/pride_colorizer_agender.json | 32 +++ .../recipes/misc/pride_colorizer_aroace.json | 32 +++ .../misc/pride_colorizer_aromantic.json | 32 +++ .../recipes/misc/pride_colorizer_asexual.json | 32 +++ .../misc/pride_colorizer_bisexual.json | 32 +++ .../recipes/misc/pride_colorizer_demiboy.json | 32 +++ .../misc/pride_colorizer_demigirl.json | 32 +++ .../recipes/misc/pride_colorizer_gay.json | 32 +++ .../misc/pride_colorizer_genderfluid.json | 32 +++ .../misc/pride_colorizer_genderqueer.json | 32 +++ .../misc/pride_colorizer_intersex.json | 32 +++ .../recipes/misc/pride_colorizer_lesbian.json | 32 +++ .../misc/pride_colorizer_nonbinary.json | 32 +++ .../recipes/misc/pride_colorizer_plural.json | 32 +++ .../misc/pride_colorizer_transgender.json | 32 +++ .../recipes/misc/uuid_colorizer.json | 32 +++ .../recipes/redstone/akashic_bookshelf.json | 35 +++ .../recipes/redstone/akashic_ligature.json | 35 +++ .../recipes/redstone/directrix/empty.json | 35 +++ .../recipes/redstone/edified_button.json | 32 +++ .../recipes/redstone/edified_door.json | 32 +++ .../redstone/edified_pressure_plate.json | 32 +++ .../recipes/redstone/edified_trapdoor.json | 32 +++ .../recipes/redstone/impetus/empty.json | 35 +++ .../advancement/recipes/tools/abacus.json | 32 +++ .../advancement/recipes/tools/artifact.json | 32 +++ .../advancement/recipes/tools/cypher.json | 32 +++ .../advancement/recipes/tools/focus.json | 32 +++ .../recipes/tools/focus_rotated.json | 32 +++ .../recipes/tools/jeweler_hammer.json | 32 +++ .../advancement/recipes/tools/lens.json | 32 +++ .../advancement/recipes/tools/spellbook.json | 43 ++++ .../recipes/tools/staff/acacia.json | 32 +++ .../recipes/tools/staff/bamboo.json | 32 +++ .../recipes/tools/staff/birch.json | 32 +++ .../recipes/tools/staff/cherry.json | 32 +++ .../recipes/tools/staff/crimson.json | 32 +++ .../recipes/tools/staff/dark_oak.json | 32 +++ .../recipes/tools/staff/edified.json | 32 +++ .../recipes/tools/staff/jungle.json | 32 +++ .../recipes/tools/staff/mangrove.json | 32 +++ .../recipes/tools/staff/mindsplice.json | 32 +++ .../advancement/recipes/tools/staff/oak.json | 32 +++ .../recipes/tools/staff/quenched.json | 32 +++ .../recipes/tools/staff/spruce.json | 32 +++ .../recipes/tools/staff/warped.json | 32 +++ .../recipes/tools/thought_knot.json | 32 +++ .../advancement/recipes/tools/trinket.json | 32 +++ .../loot_table/blocks/akashic_bookshelf.json | 15 ++ .../loot_table/blocks/akashic_ligature.json | 15 ++ .../loot_table/blocks/akashic_record.json | 15 ++ .../loot_table/blocks/amethyst_bricks.json | 15 ++ .../blocks/amethyst_bricks_small.json | 15 ++ .../blocks/amethyst_dust_block.json | 15 ++ .../blocks/amethyst_edified_leaves.json | 54 +++++ .../loot_table/blocks/amethyst_pillar.json | 15 ++ .../loot_table/blocks/amethyst_sconce.json | 15 ++ .../loot_table/blocks/amethyst_tiles.json | 15 ++ .../blocks/ancient_scroll_paper.json | 15 ++ .../blocks/ancient_scroll_paper_lantern.json | 15 ++ .../blocks/aventurine_edified_leaves.json | 54 +++++ .../blocks/citrine_edified_leaves.json | 54 +++++ .../loot_table/blocks/directrix/boolean.json | 15 ++ .../loot_table/blocks/directrix/empty.json | 15 ++ .../loot_table/blocks/directrix/redstone.json | 15 ++ .../loot_table/blocks/edified_button.json | 15 ++ .../loot_table/blocks/edified_door.json | 24 ++ .../loot_table/blocks/edified_fence.json | 15 ++ .../loot_table/blocks/edified_fence_gate.json | 15 ++ .../loot_table/blocks/edified_log.json | 15 ++ .../blocks/edified_log_amethyst.json | 15 ++ .../blocks/edified_log_aventurine.json | 15 ++ .../blocks/edified_log_citrine.json | 15 ++ .../loot_table/blocks/edified_log_purple.json | 15 ++ .../loot_table/blocks/edified_panel.json | 15 ++ .../loot_table/blocks/edified_planks.json | 15 ++ .../blocks/edified_pressure_plate.json | 15 ++ .../loot_table/blocks/edified_slab.json | 34 +++ .../loot_table/blocks/edified_stairs.json | 15 ++ .../loot_table/blocks/edified_tile.json | 15 ++ .../loot_table/blocks/edified_trapdoor.json | 15 ++ .../loot_table/blocks/edified_wood.json | 15 ++ .../loot_table/blocks/impetus/empty.json | 15 ++ .../loot_table/blocks/impetus/look.json | 15 ++ .../loot_table/blocks/impetus/redstone.json | 15 ++ .../loot_table/blocks/impetus/rightclick.json | 15 ++ .../loot_table/blocks/quenched_allay.json | 69 ++++++ .../blocks/quenched_allay_bricks.json | 15 ++ .../blocks/quenched_allay_bricks_small.json | 15 ++ .../blocks/quenched_allay_tiles.json | 15 ++ .../loot_table/blocks/scroll_paper.json | 15 ++ .../blocks/scroll_paper_lantern.json | 15 ++ .../hexcasting/loot_table/blocks/slate.json | 24 ++ .../blocks/slate_amethyst_bricks.json | 15 ++ .../blocks/slate_amethyst_bricks_small.json | 15 ++ .../blocks/slate_amethyst_pillar.json | 15 ++ .../blocks/slate_amethyst_tiles.json | 15 ++ .../loot_table/blocks/slate_block.json | 15 ++ .../loot_table/blocks/slate_bricks.json | 15 ++ .../loot_table/blocks/slate_bricks_small.json | 15 ++ .../loot_table/blocks/slate_pillar.json | 15 ++ .../loot_table/blocks/slate_tiles.json | 15 ++ .../blocks/stripped_edified_log.json | 15 ++ .../blocks/stripped_edified_wood.json | 15 ++ .../loot_table/inject/amethyst_cluster.json | 211 ++++++++++++++++++ .../data/hexcasting/recipe/abacus.json | 24 ++ .../recipe/ageing_scroll_paper_lantern.json | 45 ++++ .../hexcasting/recipe/akashic_bookshelf.json | 24 ++ .../hexcasting/recipe/akashic_ligature.json | 30 +++ .../recipe/amethyst_dust_packing.json | 17 ++ .../recipe/amethyst_dust_unpacking.json | 13 ++ .../hexcasting/recipe/amethyst_sconce.json | 25 +++ .../hexcasting/recipe/amethyst_tiles.json | 24 ++ .../recipe/ancient_scroll_paper.json | 45 ++++ .../recipe/ancient_scroll_paper_lantern.json | 20 ++ .../data/hexcasting/recipe/artifact.json | 29 +++ .../recipe/brainsweep/akashic_record.json | 16 ++ .../recipe/brainsweep/budding_amethyst.json | 15 ++ .../recipe/brainsweep/directrix_boolean.json | 21 ++ .../recipe/brainsweep/directrix_redstone.json | 21 ++ .../recipe/brainsweep/impetus_look.json | 20 ++ .../recipe/brainsweep/impetus_rightclick.json | 20 ++ .../brainsweep/impetus_storedplayer.json | 21 ++ .../recipe/brainsweep/quench_allay.json | 15 ++ .../data/hexcasting/recipe/cypher.json | 26 +++ .../decompose_quenched_shard/charged.json | 16 ++ .../recipe/decompose_quenched_shard/dust.json | 16 ++ .../decompose_quenched_shard/shard.json | 16 ++ .../hexcasting/recipe/default_colorizer.json | 24 ++ .../hexcasting/recipe/directrix/empty.json | 27 +++ .../recipe/dye_colorizer_black.json | 21 ++ .../hexcasting/recipe/dye_colorizer_blue.json | 21 ++ .../recipe/dye_colorizer_brown.json | 21 ++ .../hexcasting/recipe/dye_colorizer_cyan.json | 21 ++ .../hexcasting/recipe/dye_colorizer_gray.json | 21 ++ .../recipe/dye_colorizer_green.json | 21 ++ .../recipe/dye_colorizer_light_blue.json | 21 ++ .../recipe/dye_colorizer_light_gray.json | 21 ++ .../hexcasting/recipe/dye_colorizer_lime.json | 21 ++ .../recipe/dye_colorizer_magenta.json | 21 ++ .../recipe/dye_colorizer_orange.json | 21 ++ .../hexcasting/recipe/dye_colorizer_pink.json | 21 ++ .../recipe/dye_colorizer_purple.json | 21 ++ .../hexcasting/recipe/dye_colorizer_red.json | 21 ++ .../recipe/dye_colorizer_white.json | 21 ++ .../recipe/dye_colorizer_yellow.json | 21 ++ .../hexcasting/recipe/dynamicseal_focus.json | 4 + .../recipe/dynamicseal_spellbook.json | 4 + .../hexcasting/recipe/edified_button.json | 13 ++ .../data/hexcasting/recipe/edified_door.json | 18 ++ .../data/hexcasting/recipe/edified_fence.json | 20 ++ .../hexcasting/recipe/edified_fence_gate.json | 20 ++ .../data/hexcasting/recipe/edified_panel.json | 21 ++ .../hexcasting/recipe/edified_planks.json | 13 ++ .../recipe/edified_pressure_plate.json | 16 ++ .../data/hexcasting/recipe/edified_slab.json | 16 ++ .../hexcasting/recipe/edified_stairs.json | 18 ++ .../data/hexcasting/recipe/edified_tile.json | 18 ++ .../hexcasting/recipe/edified_trapdoor.json | 17 ++ .../data/hexcasting/recipe/edified_wood.json | 17 ++ .../data/hexcasting/recipe/focus.json | 32 +++ .../data/hexcasting/recipe/focus_rotated.json | 32 +++ .../data/hexcasting/recipe/impetus/empty.json | 27 +++ .../hexcasting/recipe/jeweler_hammer.json | 42 ++++ .../data/hexcasting/recipe/lens.json | 21 ++ .../recipe/pride_colorizer_agender.json | 21 ++ .../recipe/pride_colorizer_aroace.json | 21 ++ .../recipe/pride_colorizer_aromantic.json | 21 ++ .../recipe/pride_colorizer_asexual.json | 21 ++ .../recipe/pride_colorizer_bisexual.json | 21 ++ .../recipe/pride_colorizer_demiboy.json | 21 ++ .../recipe/pride_colorizer_demigirl.json | 21 ++ .../recipe/pride_colorizer_gay.json | 21 ++ .../recipe/pride_colorizer_genderfluid.json | 21 ++ .../recipe/pride_colorizer_genderqueer.json | 21 ++ .../recipe/pride_colorizer_intersex.json | 21 ++ .../recipe/pride_colorizer_lesbian.json | 21 ++ .../recipe/pride_colorizer_nonbinary.json | 21 ++ .../recipe/pride_colorizer_plural.json | 21 ++ .../recipe/pride_colorizer_transgender.json | 21 ++ .../data/hexcasting/recipe/scroll.json | 21 ++ .../data/hexcasting/recipe/scroll_medium.json | 21 ++ .../data/hexcasting/recipe/scroll_paper.json | 24 ++ .../recipe/scroll_paper_lantern.json | 20 ++ .../data/hexcasting/recipe/scroll_small.json | 20 ++ .../data/hexcasting/recipe/slate.json | 20 ++ .../data/hexcasting/recipe/slate_block.json | 24 ++ .../recipe/slate_block_from_slates.json | 17 ++ .../data/hexcasting/recipe/spellbook.json | 32 +++ .../data/hexcasting/recipe/staff/acacia.json | 24 ++ .../data/hexcasting/recipe/staff/bamboo.json | 24 ++ .../data/hexcasting/recipe/staff/birch.json | 24 ++ .../data/hexcasting/recipe/staff/cherry.json | 24 ++ .../data/hexcasting/recipe/staff/crimson.json | 24 ++ .../hexcasting/recipe/staff/dark_oak.json | 24 ++ .../data/hexcasting/recipe/staff/edified.json | 24 ++ .../data/hexcasting/recipe/staff/jungle.json | 24 ++ .../hexcasting/recipe/staff/mangrove.json | 24 ++ .../hexcasting/recipe/staff/mindsplice.json | 24 ++ .../data/hexcasting/recipe/staff/oak.json | 24 ++ .../hexcasting/recipe/staff/quenched.json | 24 ++ .../data/hexcasting/recipe/staff/spruce.json | 24 ++ .../data/hexcasting/recipe/staff/warped.json | 24 ++ .../recipe/stonecutting/amethyst_tiles.json | 10 + .../recipe/stripped_edified_wood.json | 17 ++ .../data/hexcasting/recipe/sub_sandwich.json | 27 +++ .../data/hexcasting/recipe/thought_knot.json | 16 ++ .../data/hexcasting/recipe/trinket.json | 26 +++ .../hexcasting/recipe/uuid_colorizer.json | 24 ++ .../block/brainswept_circle_components.json | 6 + .../tags/block/cheap_to_break_block.json | 6 + .../hexcasting/tags/block/directrices.json | 6 + .../hexcasting/tags/block/edified_logs.json | 12 + .../hexcasting/tags/block/edified_planks.json | 7 + .../tags/block/hex_unbreakable.json | 8 + .../data/hexcasting/tags/block/impeti.json | 7 + .../hexcasting/tags/block/water_plants.json | 8 + .../action/can_start_enlighten.json | 18 ++ .../hexcasting/action/per_world_pattern.json | 18 ++ .../action/requires_enlightenment.json | 18 ++ .../item/brainswept_circle_components.json | 6 + .../hexcasting/tags/item/directrices.json | 6 + .../hexcasting/tags/item/edified_logs.json | 12 + .../hexcasting/tags/item/edified_planks.json | 7 + .../tags/item/grants_root_advancement.json | 8 + .../data/hexcasting/tags/item/impeti.json | 7 + .../data/hexcasting/tags/item/phial_base.json | 5 + .../hexcasting/tags/item/seal_materials.json | 5 + .../data/hexcasting/tags/item/staves.json | 18 ++ .../data/minecraft/tags/block/buttons.json | 5 + .../tags/block/crystal_sound_blocks.json | 8 + .../data/minecraft/tags/block/doors.json | 5 + .../minecraft/tags/block/fence_gates.json | 5 + .../data/minecraft/tags/block/fences.json | 5 + .../data/minecraft/tags/block/leaves.json | 7 + .../data/minecraft/tags/block/logs.json | 12 + .../minecraft/tags/block/logs_that_burn.json | 12 + .../minecraft/tags/block/mineable/axe.json | 25 +++ .../minecraft/tags/block/mineable/hoe.json | 7 + .../tags/block/mineable/pickaxe.json | 30 +++ .../minecraft/tags/block/mineable/shovel.json | 5 + .../data/minecraft/tags/block/planks.json | 7 + .../minecraft/tags/block/pressure_plates.json | 5 + .../data/minecraft/tags/block/slabs.json | 5 + .../data/minecraft/tags/block/stairs.json | 5 + .../data/minecraft/tags/block/trapdoors.json | 5 + .../tags/block/unstable_bottom_center.json | 5 + .../minecraft/tags/block/wooden_buttons.json | 5 + .../minecraft/tags/block/wooden_doors.json | 5 + .../minecraft/tags/block/wooden_fences.json | 6 + .../tags/block/wooden_pressure_plates.json | 5 + .../minecraft/tags/block/wooden_slabs.json | 5 + .../minecraft/tags/block/wooden_stairs.json | 5 + .../tags/block/wooden_trapdoors.json | 5 + .../data/minecraft/tags/item/buttons.json | 5 + .../data/minecraft/tags/item/doors.json | 5 + .../data/minecraft/tags/item/leaves.json | 7 + .../data/minecraft/tags/item/logs.json | 12 + .../minecraft/tags/item/logs_that_burn.json | 12 + .../data/minecraft/tags/item/planks.json | 7 + .../data/minecraft/tags/item/slabs.json | 5 + .../data/minecraft/tags/item/trapdoors.json | 5 + .../minecraft/tags/item/wooden_buttons.json | 5 + .../minecraft/tags/item/wooden_doors.json | 5 + .../tags/item/wooden_pressure_plates.json | 5 + .../minecraft/tags/item/wooden_slabs.json | 5 + .../minecraft/tags/item/wooden_trapdoors.json | 5 + .../hexcasting/fabric/FabricHexInitializer.kt | 19 +- .../datagen/HexFabricDataGenerators.java | 8 + .../fabric/xplat/FabricXplatImpl.java | 6 +- Neoforge/build.gradle | 14 +- .../blockstates/akashic_bookshelf.json | 107 +++++++++ .../blockstates/akashic_ligature.json | 7 + .../blockstates/akashic_record.json | 7 + .../blockstates/amethyst_bricks.json | 7 + .../blockstates/amethyst_bricks_small.json | 7 + .../blockstates/amethyst_dust_block.json | 7 + .../blockstates/amethyst_edified_leaves.json | 7 + .../blockstates/amethyst_pillar.json | 30 +++ .../blockstates/amethyst_sconce.json | 7 + .../blockstates/amethyst_tiles.json | 7 + .../blockstates/ancient_scroll_paper.json | 7 + .../ancient_scroll_paper_lantern.json | 7 + .../aventurine_edified_leaves.json | 7 + .../blockstates/citrine_edified_leaves.json | 7 + .../blockstates/conjured_block.json | 7 + .../blockstates/conjured_light.json | 7 + .../blockstates/directrix/boolean.json | 142 ++++++++++++ .../blockstates/directrix/empty.json | 50 +++++ .../blockstates/directrix/redstone.json | 96 ++++++++ .../blockstates/edified_button.json | 118 ++++++++++ .../hexcasting/blockstates/edified_door.json | 124 ++++++++++ .../hexcasting/blockstates/edified_fence.json | 48 ++++ .../blockstates/edified_fence_gate.json | 80 +++++++ .../hexcasting/blockstates/edified_log.json | 16 ++ .../blockstates/edified_log_amethyst.json | 16 ++ .../blockstates/edified_log_aventurine.json | 16 ++ .../blockstates/edified_log_citrine.json | 16 ++ .../blockstates/edified_log_purple.json | 16 ++ .../hexcasting/blockstates/edified_panel.json | 7 + .../blockstates/edified_planks.json | 17 ++ .../blockstates/edified_pressure_plate.json | 10 + .../hexcasting/blockstates/edified_slab.json | 13 ++ .../blockstates/edified_stairs.json | 209 +++++++++++++++++ .../hexcasting/blockstates/edified_tile.json | 7 + .../blockstates/edified_trapdoor.json | 68 ++++++ .../hexcasting/blockstates/edified_wood.json | 16 ++ .../hexcasting/blockstates/impetus/empty.json | 50 +++++ .../hexcasting/blockstates/impetus/look.json | 50 +++++ .../blockstates/impetus/redstone.json | 96 ++++++++ .../blockstates/impetus/rightclick.json | 50 +++++ .../blockstates/quenched_allay.json | 7 + .../blockstates/quenched_allay_bricks.json | 7 + .../quenched_allay_bricks_small.json | 7 + .../blockstates/quenched_allay_tiles.json | 7 + .../hexcasting/blockstates/scroll_paper.json | 7 + .../blockstates/scroll_paper_lantern.json | 7 + .../assets/hexcasting/blockstates/slate.json | 122 ++++++++++ .../blockstates/slate_amethyst_bricks.json | 15 ++ .../slate_amethyst_bricks_small.json | 15 ++ .../blockstates/slate_amethyst_pillar.json | 16 ++ .../blockstates/slate_amethyst_tiles.json | 7 + .../hexcasting/blockstates/slate_block.json | 7 + .../hexcasting/blockstates/slate_bricks.json | 7 + .../blockstates/slate_bricks_small.json | 7 + .../hexcasting/blockstates/slate_pillar.json | 16 ++ .../hexcasting/blockstates/slate_tiles.json | 7 + .../blockstates/stripped_edified_log.json | 16 ++ .../blockstates/stripped_edified_wood.json | 16 ++ .../models/block/akashic_bookshelf.json | 68 ++++++ .../models/block/akashic_bookshelf_1.json | 6 + .../models/block/akashic_bookshelf_2.json | 6 + .../models/block/akashic_bookshelf_3.json | 6 + .../models/block/akashic_bookshelf_4.json | 6 + .../models/block/akashic_bookshelf_empty.json | 8 + .../models/block/akashic_ligature.json | 6 + .../models/block/akashic_record.json | 87 ++++++++ .../models/block/amethyst_dust_block.json | 6 + .../models/block/amethyst_edified_leaves.json | 7 + .../models/block/ancient_scroll_paper.json | 6 + .../block/ancient_scroll_paper_lantern.json | 8 + .../block/aventurine_edified_leaves.json | 7 + .../directrix/boolean/dim_false_down.json | 12 + .../directrix/boolean/dim_false_east.json | 12 + .../directrix/boolean/dim_false_north.json | 12 + .../directrix/boolean/dim_false_south.json | 12 + .../directrix/boolean/dim_false_up.json | 12 + .../directrix/boolean/dim_false_west.json | 12 + .../directrix/boolean/dim_neither_down.json | 12 + .../directrix/boolean/dim_neither_east.json | 12 + .../directrix/boolean/dim_neither_north.json | 12 + .../directrix/boolean/dim_neither_south.json | 12 + .../directrix/boolean/dim_neither_up.json | 12 + .../directrix/boolean/dim_neither_west.json | 12 + .../directrix/boolean/dim_true_down.json | 12 + .../directrix/boolean/dim_true_east.json | 12 + .../directrix/boolean/dim_true_north.json | 12 + .../directrix/boolean/dim_true_south.json | 12 + .../circle/directrix/boolean/dim_true_up.json | 12 + .../directrix/boolean/dim_true_west.json | 12 + .../directrix/boolean/lit_false_down.json | 12 + .../directrix/boolean/lit_false_east.json | 12 + .../directrix/boolean/lit_false_north.json | 12 + .../directrix/boolean/lit_false_south.json | 12 + .../directrix/boolean/lit_false_up.json | 12 + .../directrix/boolean/lit_false_west.json | 12 + .../directrix/boolean/lit_neither_down.json | 12 + .../directrix/boolean/lit_neither_east.json | 12 + .../directrix/boolean/lit_neither_north.json | 12 + .../directrix/boolean/lit_neither_south.json | 12 + .../directrix/boolean/lit_neither_up.json | 12 + .../directrix/boolean/lit_neither_west.json | 12 + .../directrix/boolean/lit_true_down.json | 12 + .../directrix/boolean/lit_true_east.json | 12 + .../directrix/boolean/lit_true_north.json | 12 + .../directrix/boolean/lit_true_south.json | 12 + .../circle/directrix/boolean/lit_true_up.json | 12 + .../directrix/boolean/lit_true_west.json | 12 + .../circle/directrix/empty/dim_down.json | 12 + .../circle/directrix/empty/dim_east.json | 12 + .../circle/directrix/empty/dim_north.json | 12 + .../circle/directrix/empty/dim_south.json | 12 + .../block/circle/directrix/empty/dim_up.json | 12 + .../circle/directrix/empty/dim_west.json | 12 + .../circle/directrix/empty/lit_down.json | 12 + .../circle/directrix/empty/lit_east.json | 12 + .../circle/directrix/empty/lit_north.json | 12 + .../circle/directrix/empty/lit_south.json | 12 + .../block/circle/directrix/empty/lit_up.json | 12 + .../circle/directrix/empty/lit_west.json | 12 + .../directrix/redstone/dim_powered_down.json | 12 + .../directrix/redstone/dim_powered_east.json | 12 + .../directrix/redstone/dim_powered_north.json | 12 + .../directrix/redstone/dim_powered_south.json | 12 + .../directrix/redstone/dim_powered_up.json | 12 + .../directrix/redstone/dim_powered_west.json | 12 + .../redstone/dim_unpowered_down.json | 12 + .../redstone/dim_unpowered_east.json | 12 + .../redstone/dim_unpowered_north.json | 12 + .../redstone/dim_unpowered_south.json | 12 + .../directrix/redstone/dim_unpowered_up.json | 12 + .../redstone/dim_unpowered_west.json | 12 + .../directrix/redstone/lit_powered_down.json | 12 + .../directrix/redstone/lit_powered_east.json | 12 + .../directrix/redstone/lit_powered_north.json | 12 + .../directrix/redstone/lit_powered_south.json | 12 + .../directrix/redstone/lit_powered_up.json | 12 + .../directrix/redstone/lit_powered_west.json | 12 + .../redstone/lit_unpowered_down.json | 12 + .../redstone/lit_unpowered_east.json | 12 + .../redstone/lit_unpowered_north.json | 12 + .../redstone/lit_unpowered_south.json | 12 + .../directrix/redstone/lit_unpowered_up.json | 12 + .../redstone/lit_unpowered_west.json | 12 + .../block/circle/impetus/empty/dim_down.json | 12 + .../block/circle/impetus/empty/dim_east.json | 12 + .../block/circle/impetus/empty/dim_north.json | 12 + .../block/circle/impetus/empty/dim_south.json | 12 + .../block/circle/impetus/empty/dim_up.json | 12 + .../block/circle/impetus/empty/dim_west.json | 12 + .../block/circle/impetus/empty/lit_down.json | 12 + .../block/circle/impetus/empty/lit_east.json | 12 + .../block/circle/impetus/empty/lit_north.json | 12 + .../block/circle/impetus/empty/lit_south.json | 12 + .../block/circle/impetus/empty/lit_up.json | 12 + .../block/circle/impetus/empty/lit_west.json | 12 + .../block/circle/impetus/look/dim_down.json | 12 + .../block/circle/impetus/look/dim_east.json | 12 + .../block/circle/impetus/look/dim_north.json | 12 + .../block/circle/impetus/look/dim_south.json | 12 + .../block/circle/impetus/look/dim_up.json | 12 + .../block/circle/impetus/look/dim_west.json | 12 + .../block/circle/impetus/look/lit_down.json | 12 + .../block/circle/impetus/look/lit_east.json | 12 + .../block/circle/impetus/look/lit_north.json | 12 + .../block/circle/impetus/look/lit_south.json | 12 + .../block/circle/impetus/look/lit_up.json | 12 + .../block/circle/impetus/look/lit_west.json | 12 + .../circle/impetus/redstone/dim_down.json | 12 + .../circle/impetus/redstone/dim_east.json | 12 + .../circle/impetus/redstone/dim_north.json | 12 + .../circle/impetus/redstone/dim_south.json | 12 + .../block/circle/impetus/redstone/dim_up.json | 12 + .../circle/impetus/redstone/dim_west.json | 12 + .../circle/impetus/redstone/lit_down.json | 12 + .../circle/impetus/redstone/lit_east.json | 12 + .../circle/impetus/redstone/lit_north.json | 12 + .../circle/impetus/redstone/lit_south.json | 12 + .../block/circle/impetus/redstone/lit_up.json | 12 + .../circle/impetus/redstone/lit_west.json | 12 + .../circle/impetus/rightclick/dim_down.json | 12 + .../circle/impetus/rightclick/dim_east.json | 12 + .../circle/impetus/rightclick/dim_north.json | 12 + .../circle/impetus/rightclick/dim_south.json | 12 + .../circle/impetus/rightclick/dim_up.json | 12 + .../circle/impetus/rightclick/dim_west.json | 12 + .../circle/impetus/rightclick/lit_down.json | 12 + .../circle/impetus/rightclick/lit_east.json | 12 + .../circle/impetus/rightclick/lit_north.json | 12 + .../circle/impetus/rightclick/lit_south.json | 12 + .../circle/impetus/rightclick/lit_up.json | 12 + .../circle/impetus/rightclick/lit_west.json | 12 + .../models/block/citrine_edified_leaves.json | 7 + .../hexcasting/models/block/conjured.json | 6 + .../models/block/deco/amethyst_bricks.json | 6 + .../block/deco/amethyst_bricks_small.json | 6 + .../models/block/deco/amethyst_pillar.json | 8 + .../models/block/deco/amethyst_tiles.json | 6 + .../block/deco/quenched_allay_bricks_0.json | 6 + .../block/deco/quenched_allay_bricks_1.json | 6 + .../block/deco/quenched_allay_bricks_2.json | 6 + .../block/deco/quenched_allay_bricks_3.json | 6 + .../deco/quenched_allay_bricks_small_0.json | 6 + .../deco/quenched_allay_bricks_small_1.json | 6 + .../deco/quenched_allay_bricks_small_2.json | 6 + .../deco/quenched_allay_bricks_small_3.json | 6 + .../block/deco/quenched_allay_tiles_0.json | 6 + .../block/deco/quenched_allay_tiles_1.json | 6 + .../block/deco/quenched_allay_tiles_2.json | 6 + .../block/deco/quenched_allay_tiles_3.json | 6 + .../block/deco/slate_amethyst_bricks_0.json | 6 + .../block/deco/slate_amethyst_bricks_1.json | 6 + .../block/deco/slate_amethyst_bricks_2.json | 6 + .../deco/slate_amethyst_bricks_small_0.json | 6 + .../deco/slate_amethyst_bricks_small_1.json | 6 + .../deco/slate_amethyst_bricks_small_2.json | 6 + .../block/deco/slate_amethyst_tiles.json | 6 + .../models/block/deco/slate_bricks.json | 6 + .../models/block/deco/slate_bricks_small.json | 6 + .../models/block/deco/slate_tiles.json | 6 + .../models/block/edified_button.json | 6 + .../models/block/edified_button_pressed.json | 6 + .../block/edified_door_bottom_left.json | 8 + .../block/edified_door_bottom_left_open.json | 8 + .../block/edified_door_bottom_right.json | 8 + .../block/edified_door_bottom_right_open.json | 8 + .../models/block/edified_door_top_left.json | 8 + .../block/edified_door_top_left_open.json | 8 + .../models/block/edified_door_top_right.json | 8 + .../block/edified_door_top_right_open.json | 8 + .../models/block/edified_fence_gate.json | 6 + .../models/block/edified_fence_gate_open.json | 6 + .../models/block/edified_fence_gate_wall.json | 6 + .../block/edified_fence_gate_wall_open.json | 6 + .../models/block/edified_fence_post.json | 6 + .../models/block/edified_fence_side.json | 6 + .../hexcasting/models/block/edified_log.json | 7 + .../models/block/edified_log_amethyst.json | 7 + .../edified_log_amethyst_horizontal.json | 7 + .../models/block/edified_log_aventurine.json | 7 + .../edified_log_aventurine_horizontal.json | 7 + .../models/block/edified_log_citrine.json | 7 + .../block/edified_log_citrine_horizontal.json | 7 + .../models/block/edified_log_horizontal.json | 7 + .../models/block/edified_log_purple.json | 7 + .../block/edified_log_purple_horizontal.json | 7 + .../models/block/edified_panel.json | 6 + .../models/block/edified_planks.json | 6 + .../models/block/edified_planks_2.json | 6 + .../models/block/edified_planks_3.json | 6 + .../models/block/edified_pressure_plate.json | 6 + .../block/edified_pressure_plate_down.json | 6 + .../hexcasting/models/block/edified_slab.json | 8 + .../models/block/edified_slab_top.json | 8 + .../models/block/edified_stairs.json | 8 + .../models/block/edified_stairs_inner.json | 8 + .../models/block/edified_stairs_outer.json | 8 + .../hexcasting/models/block/edified_tile.json | 6 + .../models/block/edified_trapdoor_bottom.json | 7 + .../models/block/edified_trapdoor_open.json | 7 + .../models/block/edified_trapdoor_top.json | 7 + .../hexcasting/models/block/edified_wood.json | 7 + .../models/block/edified_wood_horizontal.json | 7 + .../models/block/quenched_allay.json | 6 + .../models/block/quenched_allay_0.json | 6 + .../models/block/quenched_allay_1.json | 6 + .../models/block/quenched_allay_2.json | 6 + .../models/block/quenched_allay_3.json | 6 + .../models/block/quenched_allay_bricks.json | 6 + .../block/quenched_allay_bricks_small.json | 6 + .../models/block/quenched_allay_tiles.json | 6 + .../hexcasting/models/block/scroll_paper.json | 6 + .../models/block/scroll_paper_lantern.json | 8 + .../models/block/slate_amethyst_pillar.json | 7 + .../slate_amethyst_pillar_horizontal.json | 7 + .../hexcasting/models/block/slate_block.json | 6 + .../hexcasting/models/block/slate_pillar.json | 7 + .../models/block/slate_pillar_horizontal.json | 7 + .../models/block/stripped_edified_log.json | 7 + .../stripped_edified_log_horizontal.json | 7 + .../models/block/stripped_edified_wood.json | 7 + .../stripped_edified_wood_horizontal.json | 7 + .../assets/hexcasting/models/item/abacus.json | 6 + .../models/item/akashic_bookshelf.json | 3 + .../models/item/akashic_ligature.json | 3 + .../models/item/akashic_record.json | 3 + .../models/item/amethyst_bricks.json | 3 + .../models/item/amethyst_bricks_small.json | 3 + .../hexcasting/models/item/amethyst_dust.json | 6 + .../models/item/amethyst_dust_block.json | 3 + .../models/item/amethyst_edified_leaves.json | 3 + .../models/item/amethyst_pillar.json | 3 + .../models/item/amethyst_sconce.json | 3 + .../models/item/amethyst_tiles.json | 3 + .../models/item/ancient_cypher.json | 120 ++++++++++ .../models/item/ancient_cypher_0_filled.json | 7 + .../models/item/ancient_cypher_1.json | 6 + .../models/item/ancient_cypher_1_filled.json | 7 + .../models/item/ancient_cypher_2.json | 6 + .../models/item/ancient_cypher_2_filled.json | 7 + .../models/item/ancient_cypher_3.json | 6 + .../models/item/ancient_cypher_3_filled.json | 7 + .../models/item/ancient_cypher_4.json | 6 + .../models/item/ancient_cypher_4_filled.json | 7 + .../models/item/ancient_cypher_5.json | 6 + .../models/item/ancient_cypher_5_filled.json | 7 + .../models/item/ancient_cypher_6.json | 6 + .../models/item/ancient_cypher_6_filled.json | 7 + .../models/item/ancient_cypher_7.json | 6 + .../models/item/ancient_cypher_7_filled.json | 7 + .../models/item/ancient_scroll_paper.json | 3 + .../item/ancient_scroll_paper_lantern.json | 3 + .../hexcasting/models/item/artifact.json | 120 ++++++++++ .../models/item/artifact_0_filled.json | 7 + .../hexcasting/models/item/artifact_1.json | 6 + .../models/item/artifact_1_filled.json | 7 + .../hexcasting/models/item/artifact_2.json | 6 + .../models/item/artifact_2_filled.json | 7 + .../hexcasting/models/item/artifact_3.json | 6 + .../models/item/artifact_3_filled.json | 7 + .../hexcasting/models/item/artifact_4.json | 6 + .../models/item/artifact_4_filled.json | 7 + .../hexcasting/models/item/artifact_5.json | 6 + .../models/item/artifact_5_filled.json | 7 + .../hexcasting/models/item/artifact_6.json | 6 + .../models/item/artifact_6_filled.json | 7 + .../hexcasting/models/item/artifact_7.json | 6 + .../models/item/artifact_7_filled.json | 7 + .../item/aventurine_edified_leaves.json | 3 + .../hexcasting/models/item/battery.json | 179 +++++++++++++++ .../models/item/charged_amethyst.json | 6 + .../hexcasting/models/item/cherry_staff.json | 6 + .../models/item/citrine_edified_leaves.json | 3 + .../models/item/conjured_block.json | 6 + .../models/item/conjured_light.json | 6 + .../models/item/creative_unlocker.json | 6 + .../assets/hexcasting/models/item/cypher.json | 120 ++++++++++ .../models/item/cypher_0_filled.json | 7 + .../hexcasting/models/item/cypher_1.json | 6 + .../models/item/cypher_1_filled.json | 7 + .../hexcasting/models/item/cypher_2.json | 6 + .../models/item/cypher_2_filled.json | 7 + .../hexcasting/models/item/cypher_3.json | 6 + .../models/item/cypher_3_filled.json | 7 + .../hexcasting/models/item/cypher_4.json | 6 + .../models/item/cypher_4_filled.json | 7 + .../hexcasting/models/item/cypher_5.json | 6 + .../models/item/cypher_5_filled.json | 7 + .../hexcasting/models/item/cypher_6.json | 6 + .../models/item/cypher_6_filled.json | 7 + .../hexcasting/models/item/cypher_7.json | 6 + .../models/item/cypher_7_filled.json | 7 + .../models/item/default_colorizer.json | 6 + .../models/item/directrix/boolean.json | 3 + .../models/item/directrix/empty.json | 3 + .../models/item/directrix/redstone.json | 3 + .../models/item/dye_colorizer_black.json | 6 + .../models/item/dye_colorizer_blue.json | 6 + .../models/item/dye_colorizer_brown.json | 6 + .../models/item/dye_colorizer_cyan.json | 6 + .../models/item/dye_colorizer_gray.json | 6 + .../models/item/dye_colorizer_green.json | 6 + .../models/item/dye_colorizer_light_blue.json | 6 + .../models/item/dye_colorizer_light_gray.json | 6 + .../models/item/dye_colorizer_lime.json | 6 + .../models/item/dye_colorizer_magenta.json | 6 + .../models/item/dye_colorizer_orange.json | 6 + .../models/item/dye_colorizer_pink.json | 6 + .../models/item/dye_colorizer_purple.json | 6 + .../models/item/dye_colorizer_red.json | 6 + .../models/item/dye_colorizer_white.json | 6 + .../models/item/dye_colorizer_yellow.json | 6 + .../models/item/edified_button.json | 6 + .../hexcasting/models/item/edified_door.json | 6 + .../hexcasting/models/item/edified_fence.json | 3 + .../models/item/edified_fence_gate.json | 3 + .../hexcasting/models/item/edified_log.json | 3 + .../models/item/edified_log_amethyst.json | 3 + .../models/item/edified_log_aventurine.json | 3 + .../models/item/edified_log_citrine.json | 3 + .../models/item/edified_log_purple.json | 3 + .../hexcasting/models/item/edified_panel.json | 3 + .../models/item/edified_planks.json | 3 + .../models/item/edified_pressure_plate.json | 3 + .../hexcasting/models/item/edified_slab.json | 3 + .../models/item/edified_stairs.json | 3 + .../hexcasting/models/item/edified_tile.json | 3 + .../models/item/edified_trapdoor.json | 3 + .../hexcasting/models/item/edified_wood.json | 3 + .../assets/hexcasting/models/item/focus.json | 176 +++++++++++++++ .../models/item/focus_0_filled.json | 7 + .../models/item/focus_0_sealed.json | 7 + .../hexcasting/models/item/focus_1.json | 6 + .../models/item/focus_1_filled.json | 7 + .../models/item/focus_1_sealed.json | 7 + .../hexcasting/models/item/focus_2.json | 6 + .../models/item/focus_2_filled.json | 7 + .../models/item/focus_2_sealed.json | 7 + .../hexcasting/models/item/focus_3.json | 6 + .../models/item/focus_3_filled.json | 7 + .../models/item/focus_3_sealed.json | 7 + .../hexcasting/models/item/focus_4.json | 6 + .../models/item/focus_4_filled.json | 7 + .../models/item/focus_4_sealed.json | 7 + .../hexcasting/models/item/focus_5.json | 6 + .../models/item/focus_5_filled.json | 7 + .../models/item/focus_5_sealed.json | 7 + .../hexcasting/models/item/focus_6.json | 6 + .../models/item/focus_6_filled.json | 7 + .../models/item/focus_6_sealed.json | 7 + .../hexcasting/models/item/focus_7.json | 6 + .../models/item/focus_7_filled.json | 7 + .../models/item/focus_7_sealed.json | 7 + .../hexcasting/models/item/impetus/empty.json | 3 + .../hexcasting/models/item/impetus/look.json | 3 + .../models/item/impetus/redstone.json | 3 + .../models/item/impetus/rightclick.json | 3 + .../models/item/jeweler_hammer.json | 6 + .../assets/hexcasting/models/item/lens.json | 20 ++ .../hexcasting/models/item/lore_fragment.json | 6 + .../hexcasting/models/item/old_staff.json | 6 + .../models/item/patchouli_book.json | 6 + .../hexcasting/models/item/phial_large_0.json | 6 + .../hexcasting/models/item/phial_large_1.json | 6 + .../hexcasting/models/item/phial_large_2.json | 6 + .../hexcasting/models/item/phial_large_3.json | 6 + .../hexcasting/models/item/phial_large_4.json | 6 + .../models/item/phial_larger_0.json | 6 + .../models/item/phial_larger_1.json | 6 + .../models/item/phial_larger_2.json | 6 + .../models/item/phial_larger_3.json | 6 + .../models/item/phial_larger_4.json | 6 + .../models/item/phial_largest_0.json | 6 + .../models/item/phial_largest_1.json | 6 + .../models/item/phial_largest_2.json | 6 + .../models/item/phial_largest_3.json | 6 + .../models/item/phial_largest_4.json | 6 + .../models/item/phial_medium_0.json | 6 + .../models/item/phial_medium_1.json | 6 + .../models/item/phial_medium_2.json | 6 + .../models/item/phial_medium_3.json | 6 + .../models/item/phial_medium_4.json | 6 + .../hexcasting/models/item/phial_small_0.json | 6 + .../hexcasting/models/item/phial_small_1.json | 6 + .../hexcasting/models/item/phial_small_2.json | 6 + .../hexcasting/models/item/phial_small_3.json | 6 + .../hexcasting/models/item/phial_small_4.json | 6 + .../models/item/pride_colorizer_agender.json | 6 + .../models/item/pride_colorizer_aroace.json | 6 + .../item/pride_colorizer_aromantic.json | 6 + .../models/item/pride_colorizer_asexual.json | 6 + .../models/item/pride_colorizer_bisexual.json | 6 + .../models/item/pride_colorizer_demiboy.json | 6 + .../models/item/pride_colorizer_demigirl.json | 6 + .../models/item/pride_colorizer_gay.json | 6 + .../item/pride_colorizer_genderfluid.json | 6 + .../item/pride_colorizer_genderqueer.json | 6 + .../models/item/pride_colorizer_intersex.json | 6 + .../models/item/pride_colorizer_lesbian.json | 6 + .../item/pride_colorizer_nonbinary.json | 6 + .../item/pride_colorizer_pansexual.json | 6 + .../models/item/pride_colorizer_plural.json | 6 + .../item/pride_colorizer_transgender.json | 6 + .../models/item/quenched_allay.json | 28 +++ .../models/item/quenched_allay_bricks.json | 28 +++ .../item/quenched_allay_bricks_small.json | 28 +++ .../models/item/quenched_allay_shard.json | 28 +++ .../models/item/quenched_allay_tiles.json | 28 +++ .../models/item/quenched_shard_0.json | 6 + .../models/item/quenched_shard_1.json | 6 + .../models/item/quenched_shard_2.json | 6 + .../models/item/quenched_shard_3.json | 6 + .../assets/hexcasting/models/item/scroll.json | 16 ++ .../models/item/scroll_ancient_large.json | 6 + .../models/item/scroll_ancient_medium.json | 6 + .../models/item/scroll_ancient_small.json | 6 + .../hexcasting/models/item/scroll_medium.json | 16 ++ .../hexcasting/models/item/scroll_paper.json | 3 + .../models/item/scroll_paper_lantern.json | 3 + .../models/item/scroll_pristine_large.json | 6 + .../models/item/scroll_pristine_medium.json | 6 + .../models/item/scroll_pristine_small.json | 6 + .../hexcasting/models/item/scroll_small.json | 16 ++ .../assets/hexcasting/models/item/slate.json | 16 ++ .../models/item/slate_amethyst_bricks.json | 3 + .../item/slate_amethyst_bricks_small.json | 3 + .../models/item/slate_amethyst_pillar.json | 3 + .../models/item/slate_amethyst_tiles.json | 3 + .../hexcasting/models/item/slate_blank.json | 6 + .../hexcasting/models/item/slate_block.json | 3 + .../hexcasting/models/item/slate_bricks.json | 3 + .../models/item/slate_bricks_small.json | 3 + .../hexcasting/models/item/slate_pillar.json | 3 + .../hexcasting/models/item/slate_tiles.json | 3 + .../hexcasting/models/item/slate_written.json | 6 + .../hexcasting/models/item/spellbook.json | 176 +++++++++++++++ .../models/item/spellbook_0_filled.json | 7 + .../models/item/spellbook_0_sealed.json | 7 + .../hexcasting/models/item/spellbook_1.json | 6 + .../models/item/spellbook_1_filled.json | 7 + .../models/item/spellbook_1_sealed.json | 7 + .../hexcasting/models/item/spellbook_2.json | 6 + .../models/item/spellbook_2_filled.json | 7 + .../models/item/spellbook_2_sealed.json | 7 + .../hexcasting/models/item/spellbook_3.json | 6 + .../models/item/spellbook_3_filled.json | 7 + .../models/item/spellbook_3_sealed.json | 7 + .../hexcasting/models/item/spellbook_4.json | 6 + .../models/item/spellbook_4_filled.json | 7 + .../models/item/spellbook_4_sealed.json | 7 + .../hexcasting/models/item/spellbook_5.json | 6 + .../models/item/spellbook_5_filled.json | 7 + .../models/item/spellbook_5_sealed.json | 7 + .../hexcasting/models/item/spellbook_6.json | 6 + .../models/item/spellbook_6_filled.json | 7 + .../models/item/spellbook_6_sealed.json | 7 + .../hexcasting/models/item/spellbook_7.json | 6 + .../models/item/spellbook_7_filled.json | 7 + .../models/item/spellbook_7_sealed.json | 7 + .../hexcasting/models/item/staff/acacia.json | 6 + .../hexcasting/models/item/staff/bamboo.json | 6 + .../hexcasting/models/item/staff/birch.json | 6 + .../hexcasting/models/item/staff/cherry.json | 6 + .../hexcasting/models/item/staff/crimson.json | 6 + .../models/item/staff/dark_oak.json | 6 + .../hexcasting/models/item/staff/edified.json | 6 + .../hexcasting/models/item/staff/jungle.json | 6 + .../models/item/staff/mangrove.json | 6 + .../models/item/staff/mindsplice.json | 6 + .../hexcasting/models/item/staff/oak.json | 6 + .../models/item/staff/quenched.json | 28 +++ .../models/item/staff/quenched_0.json | 6 + .../models/item/staff/quenched_1.json | 6 + .../models/item/staff/quenched_2.json | 6 + .../models/item/staff/quenched_3.json | 6 + .../hexcasting/models/item/staff/spruce.json | 6 + .../hexcasting/models/item/staff/warped.json | 6 + .../models/item/stripped_edified_log.json | 3 + .../models/item/stripped_edified_wood.json | 3 + .../hexcasting/models/item/sub_sandwich.json | 6 + .../hexcasting/models/item/thought_knot.json | 20 ++ .../models/item/thought_knot_written.json | 7 + .../hexcasting/models/item/trinket.json | 120 ++++++++++ .../models/item/trinket_0_filled.json | 7 + .../hexcasting/models/item/trinket_1.json | 6 + .../models/item/trinket_1_filled.json | 7 + .../hexcasting/models/item/trinket_2.json | 6 + .../models/item/trinket_2_filled.json | 7 + .../hexcasting/models/item/trinket_3.json | 6 + .../models/item/trinket_3_filled.json | 7 + .../hexcasting/models/item/trinket_4.json | 6 + .../models/item/trinket_4_filled.json | 7 + .../hexcasting/models/item/trinket_5.json | 6 + .../models/item/trinket_5_filled.json | 7 + .../hexcasting/models/item/trinket_6.json | 6 + .../models/item/trinket_6_filled.json | 7 + .../hexcasting/models/item/trinket_7.json | 6 + .../models/item/trinket_7_filled.json | 7 + .../models/item/uuid_colorizer.json | 6 + .../hexcasting/models/staff/acacia.json | 16 ++ .../hexcasting/models/staff/bamboo.json | 16 ++ .../assets/hexcasting/models/staff/birch.json | 16 ++ .../hexcasting/models/staff/cherry.json | 16 ++ .../hexcasting/models/staff/crimson.json | 16 ++ .../hexcasting/models/staff/dark_oak.json | 16 ++ .../hexcasting/models/staff/edified.json | 16 ++ .../hexcasting/models/staff/jungle.json | 16 ++ .../hexcasting/models/staff/mangrove.json | 16 ++ .../hexcasting/models/staff/mindsplice.json | 16 ++ .../assets/hexcasting/models/staff/oak.json | 16 ++ .../hexcasting/models/staff/spruce.json | 16 ++ .../hexcasting/models/staff/warped.json | 16 ++ .../data/create/tags/block/brittle.json | 8 + .../data/forge/tags/item/dusts/amethyst.json | 5 + .../resources/data/forge/tags/item/gems.json | 5 + .../advancement/aaa_wasteful_cast.json | 32 +++ .../hexcasting/advancement/aab_big_cast.json | 32 +++ .../advancement/creative_unlocker.json | 36 +++ .../hexcasting/advancement/enlightenment.json | 38 ++++ .../data/hexcasting/advancement/lore.json | 32 +++ .../advancement/lore/cardamom1.json | 25 +++ .../advancement/lore/cardamom2.json | 25 +++ .../advancement/lore/cardamom3.json | 25 +++ .../advancement/lore/cardamom4.json | 25 +++ .../advancement/lore/cardamom5.json | 25 +++ .../advancement/lore/experiment1.json | 25 +++ .../advancement/lore/experiment2.json | 25 +++ .../advancement/lore/inventory.json | 25 +++ .../hexcasting/advancement/opened_eyes.json | 33 +++ .../recipes/brainsweep/akashic_record.json | 35 +++ .../recipes/brainsweep/budding_amethyst.json | 35 +++ .../recipes/brainsweep/directrix_boolean.json | 35 +++ .../brainsweep/directrix_redstone.json | 35 +++ .../recipes/brainsweep/impetus_look.json | 35 +++ .../brainsweep/impetus_rightclick.json | 35 +++ .../brainsweep/impetus_storedplayer.json | 35 +++ .../recipes/brainsweep/quench_allay.json | 35 +++ .../amethyst_dust_packing.json | 32 +++ .../amethyst_dust_unpacking.json | 32 +++ .../building_blocks/amethyst_tiles.json | 32 +++ .../building_blocks/ancient_scroll_paper.json | 32 +++ .../building_blocks/edified_fence.json | 32 +++ .../building_blocks/edified_fence_gate.json | 32 +++ .../building_blocks/edified_panel.json | 32 +++ .../building_blocks/edified_planks.json | 32 +++ .../recipes/building_blocks/edified_slab.json | 32 +++ .../building_blocks/edified_stairs.json | 32 +++ .../recipes/building_blocks/edified_tile.json | 32 +++ .../recipes/building_blocks/edified_wood.json | 32 +++ .../recipes/building_blocks/scroll_paper.json | 32 +++ .../recipes/building_blocks/slate_block.json | 32 +++ .../slate_block_from_slates.json | 32 +++ .../stonecutting/amethyst_tiles.json | 32 +++ .../stripped_edified_wood.json | 32 +++ .../ageing_scroll_paper_lantern.json | 32 +++ .../recipes/decorations/amethyst_sconce.json | 32 +++ .../ancient_scroll_paper_lantern.json | 32 +++ .../recipes/decorations/scroll.json | 32 +++ .../recipes/decorations/scroll_medium.json | 32 +++ .../decorations/scroll_paper_lantern.json | 32 +++ .../recipes/decorations/scroll_small.json | 32 +++ .../recipes/decorations/slate.json | 32 +++ .../recipes/food/sub_sandwich.json | 32 +++ .../decompose_quenched_shard/charged.json | 32 +++ .../misc/decompose_quenched_shard/dust.json | 32 +++ .../misc/decompose_quenched_shard/shard.json | 32 +++ .../recipes/misc/default_colorizer.json | 32 +++ .../recipes/misc/dye_colorizer_black.json | 32 +++ .../recipes/misc/dye_colorizer_blue.json | 32 +++ .../recipes/misc/dye_colorizer_brown.json | 32 +++ .../recipes/misc/dye_colorizer_cyan.json | 32 +++ .../recipes/misc/dye_colorizer_gray.json | 32 +++ .../recipes/misc/dye_colorizer_green.json | 32 +++ .../misc/dye_colorizer_light_blue.json | 32 +++ .../misc/dye_colorizer_light_gray.json | 32 +++ .../recipes/misc/dye_colorizer_lime.json | 32 +++ .../recipes/misc/dye_colorizer_magenta.json | 32 +++ .../recipes/misc/dye_colorizer_orange.json | 32 +++ .../recipes/misc/dye_colorizer_pink.json | 32 +++ .../recipes/misc/dye_colorizer_purple.json | 32 +++ .../recipes/misc/dye_colorizer_red.json | 32 +++ .../recipes/misc/dye_colorizer_white.json | 32 +++ .../recipes/misc/dye_colorizer_yellow.json | 32 +++ .../recipes/misc/pride_colorizer_agender.json | 32 +++ .../recipes/misc/pride_colorizer_aroace.json | 32 +++ .../misc/pride_colorizer_aromantic.json | 32 +++ .../recipes/misc/pride_colorizer_asexual.json | 32 +++ .../misc/pride_colorizer_bisexual.json | 32 +++ .../recipes/misc/pride_colorizer_demiboy.json | 32 +++ .../misc/pride_colorizer_demigirl.json | 32 +++ .../recipes/misc/pride_colorizer_gay.json | 32 +++ .../misc/pride_colorizer_genderfluid.json | 32 +++ .../misc/pride_colorizer_genderqueer.json | 32 +++ .../misc/pride_colorizer_intersex.json | 32 +++ .../recipes/misc/pride_colorizer_lesbian.json | 32 +++ .../misc/pride_colorizer_nonbinary.json | 32 +++ .../recipes/misc/pride_colorizer_plural.json | 32 +++ .../misc/pride_colorizer_transgender.json | 32 +++ .../recipes/misc/uuid_colorizer.json | 32 +++ .../recipes/redstone/akashic_bookshelf.json | 35 +++ .../recipes/redstone/akashic_ligature.json | 35 +++ .../recipes/redstone/directrix/empty.json | 35 +++ .../recipes/redstone/edified_button.json | 32 +++ .../recipes/redstone/edified_door.json | 32 +++ .../redstone/edified_pressure_plate.json | 32 +++ .../recipes/redstone/edified_trapdoor.json | 32 +++ .../recipes/redstone/impetus/empty.json | 35 +++ .../advancement/recipes/tools/abacus.json | 32 +++ .../advancement/recipes/tools/artifact.json | 32 +++ .../advancement/recipes/tools/cypher.json | 32 +++ .../advancement/recipes/tools/focus.json | 32 +++ .../recipes/tools/focus_rotated.json | 32 +++ .../recipes/tools/jeweler_hammer.json | 32 +++ .../advancement/recipes/tools/lens.json | 32 +++ .../advancement/recipes/tools/spellbook.json | 43 ++++ .../recipes/tools/staff/acacia.json | 32 +++ .../recipes/tools/staff/bamboo.json | 32 +++ .../recipes/tools/staff/birch.json | 32 +++ .../recipes/tools/staff/cherry.json | 32 +++ .../recipes/tools/staff/crimson.json | 32 +++ .../recipes/tools/staff/dark_oak.json | 32 +++ .../recipes/tools/staff/edified.json | 32 +++ .../recipes/tools/staff/jungle.json | 32 +++ .../recipes/tools/staff/mangrove.json | 32 +++ .../recipes/tools/staff/mindsplice.json | 32 +++ .../advancement/recipes/tools/staff/oak.json | 32 +++ .../recipes/tools/staff/quenched.json | 32 +++ .../recipes/tools/staff/spruce.json | 32 +++ .../recipes/tools/staff/warped.json | 32 +++ .../recipes/tools/thought_knot.json | 32 +++ .../advancement/recipes/tools/trinket.json | 32 +++ .../data/hexcasting/advancement/root.json | 34 +++ .../advancement/y_u_no_cast_angy.json | 26 +++ .../data/hexcasting/damage_type/overcast.json | 5 + .../loot_modifiers/amethyst_cluster.json | 10 + .../minecraft/chests/abandoned_mineshaft.json | 10 + .../cypher/minecraft/chests/ancient_city.json | 10 + .../minecraft/chests/desert_pyramid.json | 10 + .../minecraft/chests/jungle_temple.json | 10 + .../minecraft/chests/nether_bridge.json | 10 + .../minecraft/chests/simple_dungeon.json | 10 + .../minecraft/chests/stronghold_corridor.json | 10 + .../minecraft/chests/abandoned_mineshaft.json | 10 + .../minecraft/chests/pillager_outpost.json | 10 + .../lore/minecraft/chests/simple_dungeon.json | 10 + .../minecraft/chests/stronghold_library.json | 10 + .../chests/village/village_desert_house.json | 10 + .../chests/village/village_plains_house.json | 10 + .../chests/village/village_savanna_house.json | 10 + .../chests/village/village_snowy_house.json | 10 + .../chests/village/village_taiga_house.json | 10 + .../minecraft/chests/woodland_mansion.json | 10 + .../minecraft/chests/abandoned_mineshaft.json | 10 + .../scroll/minecraft/chests/ancient_city.json | 10 + .../minecraft/chests/bastion_other.json | 10 + .../minecraft/chests/bastion_treasure.json | 10 + .../minecraft/chests/desert_pyramid.json | 10 + .../minecraft/chests/end_city_treasure.json | 10 + .../minecraft/chests/jungle_temple.json | 10 + .../minecraft/chests/nether_bridge.json | 10 + .../minecraft/chests/pillager_outpost.json | 10 + .../minecraft/chests/shipwreck_map.json | 10 + .../minecraft/chests/simple_dungeon.json | 10 + .../minecraft/chests/stronghold_library.json | 10 + .../chests/village/village_cartographer.json | 10 + .../minecraft/chests/woodland_mansion.json | 10 + .../loot_table/blocks/akashic_bookshelf.json | 15 ++ .../loot_table/blocks/akashic_ligature.json | 15 ++ .../loot_table/blocks/akashic_record.json | 15 ++ .../loot_table/blocks/amethyst_bricks.json | 15 ++ .../blocks/amethyst_bricks_small.json | 15 ++ .../blocks/amethyst_dust_block.json | 15 ++ .../blocks/amethyst_edified_leaves.json | 41 ++++ .../loot_table/blocks/amethyst_pillar.json | 15 ++ .../loot_table/blocks/amethyst_sconce.json | 15 ++ .../loot_table/blocks/amethyst_tiles.json | 15 ++ .../blocks/ancient_scroll_paper.json | 15 ++ .../blocks/ancient_scroll_paper_lantern.json | 15 ++ .../blocks/aventurine_edified_leaves.json | 41 ++++ .../blocks/citrine_edified_leaves.json | 41 ++++ .../loot_table/blocks/directrix/boolean.json | 15 ++ .../loot_table/blocks/directrix/empty.json | 15 ++ .../loot_table/blocks/directrix/redstone.json | 15 ++ .../loot_table/blocks/edified_button.json | 15 ++ .../loot_table/blocks/edified_door.json | 24 ++ .../loot_table/blocks/edified_fence.json | 15 ++ .../loot_table/blocks/edified_fence_gate.json | 15 ++ .../loot_table/blocks/edified_log.json | 15 ++ .../blocks/edified_log_amethyst.json | 15 ++ .../blocks/edified_log_aventurine.json | 15 ++ .../blocks/edified_log_citrine.json | 15 ++ .../loot_table/blocks/edified_log_purple.json | 15 ++ .../loot_table/blocks/edified_panel.json | 15 ++ .../loot_table/blocks/edified_planks.json | 15 ++ .../blocks/edified_pressure_plate.json | 15 ++ .../loot_table/blocks/edified_slab.json | 34 +++ .../loot_table/blocks/edified_stairs.json | 15 ++ .../loot_table/blocks/edified_tile.json | 15 ++ .../loot_table/blocks/edified_trapdoor.json | 15 ++ .../loot_table/blocks/edified_wood.json | 15 ++ .../loot_table/blocks/impetus/empty.json | 15 ++ .../loot_table/blocks/impetus/look.json | 15 ++ .../loot_table/blocks/impetus/redstone.json | 15 ++ .../loot_table/blocks/impetus/rightclick.json | 15 ++ .../loot_table/blocks/quenched_allay.json | 69 ++++++ .../blocks/quenched_allay_bricks.json | 15 ++ .../blocks/quenched_allay_bricks_small.json | 15 ++ .../blocks/quenched_allay_tiles.json | 15 ++ .../loot_table/blocks/scroll_paper.json | 15 ++ .../blocks/scroll_paper_lantern.json | 15 ++ .../hexcasting/loot_table/blocks/slate.json | 24 ++ .../blocks/slate_amethyst_bricks.json | 15 ++ .../blocks/slate_amethyst_bricks_small.json | 15 ++ .../blocks/slate_amethyst_pillar.json | 15 ++ .../blocks/slate_amethyst_tiles.json | 15 ++ .../loot_table/blocks/slate_block.json | 15 ++ .../loot_table/blocks/slate_bricks.json | 15 ++ .../loot_table/blocks/slate_bricks_small.json | 15 ++ .../loot_table/blocks/slate_pillar.json | 15 ++ .../loot_table/blocks/slate_tiles.json | 15 ++ .../blocks/stripped_edified_log.json | 15 ++ .../blocks/stripped_edified_wood.json | 15 ++ .../loot_table/inject/amethyst_cluster.json | 211 ++++++++++++++++++ .../data/hexcasting/recipe/abacus.json | 24 ++ .../recipe/ageing_scroll_paper_lantern.json | 37 +++ .../hexcasting/recipe/akashic_bookshelf.json | 24 ++ .../hexcasting/recipe/akashic_ligature.json | 30 +++ .../recipe/amethyst_dust_packing.json | 17 ++ .../recipe/amethyst_dust_unpacking.json | 13 ++ .../hexcasting/recipe/amethyst_sconce.json | 20 ++ .../hexcasting/recipe/amethyst_tiles.json | 24 ++ .../recipe/ancient_scroll_paper.json | 37 +++ .../recipe/ancient_scroll_paper_lantern.json | 20 ++ .../data/hexcasting/recipe/artifact.json | 24 ++ .../recipe/brainsweep/akashic_record.json | 16 ++ .../recipe/brainsweep/budding_amethyst.json | 15 ++ .../recipe/brainsweep/directrix_boolean.json | 21 ++ .../recipe/brainsweep/directrix_redstone.json | 21 ++ .../recipe/brainsweep/impetus_look.json | 20 ++ .../recipe/brainsweep/impetus_rightclick.json | 20 ++ .../brainsweep/impetus_storedplayer.json | 21 ++ .../recipe/brainsweep/quench_allay.json | 15 ++ .../data/hexcasting/recipe/cypher.json | 21 ++ .../decompose_quenched_shard/charged.json | 16 ++ .../recipe/decompose_quenched_shard/dust.json | 16 ++ .../decompose_quenched_shard/shard.json | 16 ++ .../hexcasting/recipe/default_colorizer.json | 24 ++ .../hexcasting/recipe/directrix/empty.json | 27 +++ .../recipe/dye_colorizer_black.json | 21 ++ .../hexcasting/recipe/dye_colorizer_blue.json | 21 ++ .../recipe/dye_colorizer_brown.json | 21 ++ .../hexcasting/recipe/dye_colorizer_cyan.json | 21 ++ .../hexcasting/recipe/dye_colorizer_gray.json | 21 ++ .../recipe/dye_colorizer_green.json | 21 ++ .../recipe/dye_colorizer_light_blue.json | 21 ++ .../recipe/dye_colorizer_light_gray.json | 21 ++ .../hexcasting/recipe/dye_colorizer_lime.json | 21 ++ .../recipe/dye_colorizer_magenta.json | 21 ++ .../recipe/dye_colorizer_orange.json | 21 ++ .../hexcasting/recipe/dye_colorizer_pink.json | 21 ++ .../recipe/dye_colorizer_purple.json | 21 ++ .../hexcasting/recipe/dye_colorizer_red.json | 21 ++ .../recipe/dye_colorizer_white.json | 21 ++ .../recipe/dye_colorizer_yellow.json | 21 ++ .../hexcasting/recipe/dynamicseal_focus.json | 4 + .../recipe/dynamicseal_spellbook.json | 4 + .../hexcasting/recipe/edified_button.json | 13 ++ .../data/hexcasting/recipe/edified_door.json | 18 ++ .../data/hexcasting/recipe/edified_fence.json | 20 ++ .../hexcasting/recipe/edified_fence_gate.json | 20 ++ .../data/hexcasting/recipe/edified_panel.json | 21 ++ .../hexcasting/recipe/edified_planks.json | 13 ++ .../recipe/edified_pressure_plate.json | 16 ++ .../data/hexcasting/recipe/edified_slab.json | 16 ++ .../hexcasting/recipe/edified_stairs.json | 18 ++ .../data/hexcasting/recipe/edified_tile.json | 18 ++ .../hexcasting/recipe/edified_trapdoor.json | 17 ++ .../data/hexcasting/recipe/edified_wood.json | 17 ++ .../data/hexcasting/recipe/focus.json | 27 +++ .../data/hexcasting/recipe/focus_rotated.json | 27 +++ .../data/hexcasting/recipe/impetus/empty.json | 27 +++ .../hexcasting/recipe/jeweler_hammer.json | 32 +++ .../data/hexcasting/recipe/lens.json | 21 ++ .../recipe/pride_colorizer_agender.json | 21 ++ .../recipe/pride_colorizer_aroace.json | 21 ++ .../recipe/pride_colorizer_aromantic.json | 21 ++ .../recipe/pride_colorizer_asexual.json | 21 ++ .../recipe/pride_colorizer_bisexual.json | 21 ++ .../recipe/pride_colorizer_demiboy.json | 21 ++ .../recipe/pride_colorizer_demigirl.json | 21 ++ .../recipe/pride_colorizer_gay.json | 21 ++ .../recipe/pride_colorizer_genderfluid.json | 21 ++ .../recipe/pride_colorizer_genderqueer.json | 21 ++ .../recipe/pride_colorizer_intersex.json | 21 ++ .../recipe/pride_colorizer_lesbian.json | 21 ++ .../recipe/pride_colorizer_nonbinary.json | 21 ++ .../recipe/pride_colorizer_plural.json | 21 ++ .../recipe/pride_colorizer_transgender.json | 21 ++ .../data/hexcasting/recipe/scroll.json | 21 ++ .../data/hexcasting/recipe/scroll_medium.json | 21 ++ .../data/hexcasting/recipe/scroll_paper.json | 24 ++ .../recipe/scroll_paper_lantern.json | 20 ++ .../data/hexcasting/recipe/scroll_small.json | 20 ++ .../data/hexcasting/recipe/slate.json | 20 ++ .../data/hexcasting/recipe/slate_block.json | 24 ++ .../recipe/slate_block_from_slates.json | 17 ++ .../data/hexcasting/recipe/spellbook.json | 27 +++ .../data/hexcasting/recipe/staff/acacia.json | 24 ++ .../data/hexcasting/recipe/staff/bamboo.json | 24 ++ .../data/hexcasting/recipe/staff/birch.json | 24 ++ .../data/hexcasting/recipe/staff/cherry.json | 24 ++ .../data/hexcasting/recipe/staff/crimson.json | 24 ++ .../hexcasting/recipe/staff/dark_oak.json | 24 ++ .../data/hexcasting/recipe/staff/edified.json | 24 ++ .../data/hexcasting/recipe/staff/jungle.json | 24 ++ .../hexcasting/recipe/staff/mangrove.json | 24 ++ .../hexcasting/recipe/staff/mindsplice.json | 24 ++ .../data/hexcasting/recipe/staff/oak.json | 24 ++ .../hexcasting/recipe/staff/quenched.json | 24 ++ .../data/hexcasting/recipe/staff/spruce.json | 24 ++ .../data/hexcasting/recipe/staff/warped.json | 24 ++ .../recipe/stonecutting/amethyst_tiles.json | 10 + .../recipe/stripped_edified_wood.json | 17 ++ .../data/hexcasting/recipe/sub_sandwich.json | 27 +++ .../data/hexcasting/recipe/thought_knot.json | 16 ++ .../data/hexcasting/recipe/trinket.json | 21 ++ .../hexcasting/recipe/uuid_colorizer.json | 24 ++ .../block/brainswept_circle_components.json | 6 + .../tags/block/cheap_to_break_block.json | 6 + .../hexcasting/tags/block/directrices.json | 6 + .../hexcasting/tags/block/edified_logs.json | 12 + .../hexcasting/tags/block/edified_planks.json | 7 + .../tags/block/hex_unbreakable.json | 5 + .../data/hexcasting/tags/block/impeti.json | 7 + .../hexcasting/tags/block/water_plants.json | 8 + .../action/can_start_enlighten.json | 18 ++ .../hexcasting/action/per_world_pattern.json | 18 ++ .../action/requires_enlightenment.json | 18 ++ .../item/brainswept_circle_components.json | 6 + .../hexcasting/tags/item/directrices.json | 6 + .../hexcasting/tags/item/edified_logs.json | 12 + .../hexcasting/tags/item/edified_planks.json | 7 + .../tags/item/grants_root_advancement.json | 8 + .../data/hexcasting/tags/item/impeti.json | 7 + .../data/hexcasting/tags/item/phial_base.json | 5 + .../hexcasting/tags/item/seal_materials.json | 5 + .../data/hexcasting/tags/item/staves.json | 18 ++ .../data/minecraft/tags/block/buttons.json | 5 + .../tags/block/crystal_sound_blocks.json | 8 + .../data/minecraft/tags/block/doors.json | 5 + .../minecraft/tags/block/fence_gates.json | 5 + .../data/minecraft/tags/block/fences.json | 5 + .../data/minecraft/tags/block/leaves.json | 7 + .../data/minecraft/tags/block/logs.json | 12 + .../minecraft/tags/block/logs_that_burn.json | 12 + .../minecraft/tags/block/mineable/axe.json | 25 +++ .../minecraft/tags/block/mineable/hoe.json | 7 + .../tags/block/mineable/pickaxe.json | 30 +++ .../minecraft/tags/block/mineable/shovel.json | 5 + .../data/minecraft/tags/block/planks.json | 7 + .../minecraft/tags/block/pressure_plates.json | 5 + .../data/minecraft/tags/block/slabs.json | 5 + .../data/minecraft/tags/block/stairs.json | 5 + .../data/minecraft/tags/block/trapdoors.json | 5 + .../tags/block/unstable_bottom_center.json | 5 + .../minecraft/tags/block/wooden_buttons.json | 5 + .../minecraft/tags/block/wooden_doors.json | 5 + .../minecraft/tags/block/wooden_fences.json | 6 + .../tags/block/wooden_pressure_plates.json | 5 + .../minecraft/tags/block/wooden_slabs.json | 5 + .../minecraft/tags/block/wooden_stairs.json | 5 + .../tags/block/wooden_trapdoors.json | 5 + .../tags/damage_type/bypasses_armor.json | 5 + .../tags/damage_type/bypasses_effects.json | 5 + .../tags/damage_type/bypasses_shield.json | 5 + .../data/minecraft/tags/item/buttons.json | 5 + .../data/minecraft/tags/item/doors.json | 5 + .../data/minecraft/tags/item/leaves.json | 7 + .../data/minecraft/tags/item/logs.json | 12 + .../minecraft/tags/item/logs_that_burn.json | 12 + .../data/minecraft/tags/item/planks.json | 7 + .../data/minecraft/tags/item/slabs.json | 5 + .../data/minecraft/tags/item/trapdoors.json | 5 + .../minecraft/tags/item/wooden_buttons.json | 5 + .../minecraft/tags/item/wooden_doors.json | 5 + .../tags/item/wooden_pressure_plates.json | 5 + .../minecraft/tags/item/wooden_slabs.json | 5 + .../minecraft/tags/item/wooden_trapdoors.json | 5 + .../loot_modifiers/global_loot_modifiers.json | 37 +++ .../forge/datagen/ForgeHexDataGenerators.java | 8 +- build.gradle | 3 +- 1282 files changed, 22458 insertions(+), 22 deletions(-) create mode 100644 Fabric/libs/jankson-1.2.3.jar create mode 100644 Fabric/src/generated/resources/data/c/tags/item/amethyst_dusts.json create mode 100644 Fabric/src/generated/resources/data/c/tags/item/gems.json create mode 100644 Fabric/src/generated/resources/data/create/tags/block/brittle.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/abacus.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/artifact.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/cypher.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/default_colorizer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/directrix/empty.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_button.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_door.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_panel.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_planks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_slab.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_stairs.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_tile.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/edified_wood.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/focus.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/focus_rotated.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/impetus/empty.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/lens.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/scroll.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/scroll_medium.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/scroll_small.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/slate.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/slate_block.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/spellbook.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/acacia.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/birch.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/cherry.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/crimson.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/edified.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/jungle.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/oak.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/quenched.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/spruce.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/staff/warped.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/thought_knot.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/trinket.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/directrices.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/edified_logs.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/edified_planks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/impeti.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/water_plants.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/directrices.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/edified_logs.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/edified_planks.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/impeti.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/phial_base.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/seal_materials.json create mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/item/staves.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/buttons.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/doors.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/fence_gates.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/fences.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/leaves.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/logs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/mineable/axe.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/planks.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/pressure_plates.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/slabs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/stairs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/trapdoors.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/wooden_doors.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/wooden_fences.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/buttons.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/doors.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/leaves.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/logs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/planks.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/slabs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/trapdoors.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/wooden_doors.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json create mode 100644 Fabric/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_bookshelf.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_ligature.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_record.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_dust_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/aventurine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/citrine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_light.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/boolean.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/empty.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/redstone.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_button.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_door.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence_gate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_amethyst.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_aventurine.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_citrine.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_purple.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_panel.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_planks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_pressure_plate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_slab.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_stairs.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_tile.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_trapdoor.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_wood.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/empty.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/look.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/redstone.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/rightclick.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_log.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_wood.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_empty.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_ligature.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_record.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_dust_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/aventurine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/citrine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/conjured.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button_pressed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left_open.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right_open.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left_open.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right_open.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_open.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall_open.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_post.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_side.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_panel.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate_down.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab_top.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_inner.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_outer.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_tile.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_bottom.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_open.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_top.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood_horizontal.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/abacus.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_bookshelf.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_ligature.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_record.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_sconce.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_0_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/aventurine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/battery.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/charged_amethyst.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cherry_staff.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/citrine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_light.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/creative_unlocker.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_0_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/default_colorizer.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/boolean.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/empty.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/redstone.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_black.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_blue.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_brown.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_cyan.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_gray.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_green.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_blue.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_gray.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_lime.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_magenta.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_orange.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_pink.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_purple.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_red.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_white.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_yellow.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_button.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_door.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence_gate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_amethyst.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_aventurine.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_citrine.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_purple.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_panel.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_planks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_pressure_plate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_slab.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_stairs.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_tile.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_trapdoor.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_wood.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/empty.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/look.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/redstone.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/rightclick.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/jeweler_hammer.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/lens.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/lore_fragment.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/old_staff.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/patchouli_book.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_agender.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aroace.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aromantic.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_asexual.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_bisexual.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demiboy.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demigirl.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_gay.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderfluid.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderqueer.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_intersex.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_lesbian.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_nonbinary.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_pansexual.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_plural.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_transgender.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_shard.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_large.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_medium.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_medium.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_large.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_medium.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_blank.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_block.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks_small.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_pillar.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_tiles.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_written.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_sealed.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/acacia.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/bamboo.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/birch.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/cherry.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/crimson.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/dark_oak.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/edified.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/jungle.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mangrove.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mindsplice.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/oak.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_0.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/spruce.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/warped.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_log.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_wood.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/sub_sandwich.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot_written.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_0_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7_filled.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/item/uuid_colorizer.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/acacia.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/bamboo.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/birch.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/cherry.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/crimson.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/dark_oak.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/edified.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/jungle.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/mangrove.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/mindsplice.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/oak.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/spruce.json create mode 100644 Neoforge/src/generated/resources/assets/hexcasting/models/staff/warped.json create mode 100644 Neoforge/src/generated/resources/data/create/tags/block/brittle.json create mode 100644 Neoforge/src/generated/resources/data/forge/tags/item/dusts/amethyst.json create mode 100644 Neoforge/src/generated/resources/data/forge/tags/item/gems.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/aaa_wasteful_cast.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/aab_big_cast.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/creative_unlocker.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/enlightenment.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom1.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom2.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom3.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom4.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom5.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment1.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment2.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/lore/inventory.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/opened_eyes.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/root.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/advancement/y_u_no_cast_angy.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/damage_type/overcast.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/abacus.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/artifact.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/cypher.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/default_colorizer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/directrix/empty.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_button.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_door.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_panel.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_planks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_slab.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_stairs.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_tile.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/edified_wood.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/focus.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/focus_rotated.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/impetus/empty.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/lens.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/scroll.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_medium.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_small.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/slate.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/spellbook.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/acacia.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/birch.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/cherry.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/crimson.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/edified.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/jungle.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/oak.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/quenched.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/spruce.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/staff/warped.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/thought_knot.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/trinket.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/directrices.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_logs.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_planks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/impeti.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/water_plants.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/directrices.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_logs.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_planks.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/impeti.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/phial_base.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/seal_materials.json create mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/item/staves.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/buttons.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/doors.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/fence_gates.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/fences.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/leaves.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/logs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/axe.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/planks.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/pressure_plates.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/slabs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/stairs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/trapdoors.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_doors.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_fences.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_effects.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_shield.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/buttons.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/doors.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/leaves.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/logs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/planks.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/slabs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/trapdoors.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_doors.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json create mode 100644 Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json create mode 100644 Neoforge/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java b/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java index 071842dd0d..7def1328b6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/HexLootTables.java @@ -127,12 +127,16 @@ protected void makeLootTables(Map blockTables, .when(noSilkTouchCond).when(goodAtAmethystingCond.invert()) .when(LootItemRandomChanceCondition.randomChance(0.125f)); + HexAPI.LOGGER.info("Doing amethyst cluster injection shit"); + lootTables.put(HexLootHandler.TABLE_INJECT_AMETHYST_CLUSTER, LootTable.lootTable() .withPool(dustPoolWhenGood) .withPool(dustPoolWhenBad) .withPool(isThatAnMFingBrandonSandersonReference) .withPool(isThatAnMFingBadBrandonSandersonReference)); + HexAPI.LOGGER.info("Quenched bugged...?"); + // it looks like loot groups are bugged? // so instead we add some and then *increment* the amount, gated behind the cond var quenchedPool = LootPool.lootPool().add(AlternativesEntry.alternatives( diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java index ae8fa463d5..9d8372aeac 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java @@ -36,7 +36,7 @@ protected void addTags(HolderLookup.Provider provider) { .addTag(HexTags.Blocks.DIRECTRICES); tag(HexTags.Blocks.HEX_UNBREAKABLE) - .addTag(BlockTags.NEEDS_DIAMOND_TOOL); + .addOptionalTag(BlockTags.NEEDS_DIAMOND_TOOL.location()); add(tag(BlockTags.MINEABLE_WITH_PICKAXE), HexBlocks.SLATE_BLOCK, HexBlocks.SLATE_TILES, HexBlocks.SLATE_BRICKS, diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 2aee8820a5..f69770face 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -146,7 +146,7 @@ dependencies { modLocalRuntime "dev.architectury:architectury-fabric:$architecturyVersion" modLocalRuntime "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" modLocalRuntime "at.petra-k:paucal:$paucalVersion+$minecraftVersion-fabric" - localRuntime "blue.endless:jankson:1.2.2" + localRuntime "hexcasting:jankson:1.2.3" // modImplementation "maven.modrinth:gravity-api:$gravityApiVersion" @@ -200,4 +200,8 @@ remapJar { dependsOn shadowJar } +tasks.named('processResources') { + duplicatesStrategy = DuplicatesStrategy.WARN +} + jar.finalizedBy(remapJar) \ No newline at end of file diff --git a/Fabric/libs/jankson-1.2.3.jar b/Fabric/libs/jankson-1.2.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..d5479eda0d21566b0e633bc196dfac72058cb77a GIT binary patch literal 75817 zcmb@t1#BJ5wk_%yVrFJ$W@d_+nPHi|%uF#eGcz+YGc&UtGsJAi5dZ9R&VB#sOMB~F z=`VG)TB@G2yGPX=HELEZMHw(~G!Q5#C=la{Cv}kj>j(YkT25S5m|jX=f)NZvQ3ev~ zuUgRm+@komhG_q{p`5V1l!Um7DubNFz1-BKtPDNFJiH7&&CJwnqcYPH>)w$g9sT&M z9NoC=%Hy;G^|aLTqs)|Cv+|hq)Fi{q?BUVD5$L}jE==cl%KOJP_n-3j4~O_uYi#2J z_+Py-{QnpMfTlJ8C#V0FG5Y`4*vbfK?PLf1Upb-qJ15frc19-RVrgRvaAYvCF>-Qh z*05H=Rm1W{fCeA1qAs>Tr>brWn&T*jsFV|fPJ$`HBo2wx-X??WaBdvG1lk*p#1MYu z<-Q5~efPa(AuTrP_Flxc6CA(gr_4lh)GGpnT&_QNop|KjUwX}~e;n=-`h8)FaS_zs zyX~*cL$`&~!#yv-Sx__KccyLcSK$!V5o2ZZO6W($l6sk&LHc&?L2w|UeUgH{p&0F@ zz5->Lo<-1+pRuB+w%X1u+3NeUcP2!MMwp{?Ll?sYw~WVU(1sv>pOJG+5h$o4VhlC1 z#S#LssRXgjHDVt%upV1bF^<`w)yYNJLSu@rF&BA4HTvTs1K`BklYFRR$!-oiP%mUN z8)m83TxCxj*UHY{l)|apA^~caE#Xc^%%ni&E^OF>$t+%{AT0P5t0S^s9B5ThV+)%z zdF@`H4Y8OPpu#mhrvje6ua0fgMPTERS5j;x51VYFc7s6871)SgGhIQ=YYl97wPnto zJj3A}EXV?d^NFSzh&2KicZgw`g0PCLp~~S=p*4#hZ-+bV3V?-DDlRWaJA#ik=o+e< zPb=`Z_Hw}@a7ZR+i=u7|n)Je<2nt!0W2=g(VsS5Rw4AXgE5Uv@6G$wQ%%^aPa2{=- zR#PZ@06*J-_PpxM7`9)@_Ja!#TTS=+`+OgtQ518MS4y&;QE0|sH07v}iFWJ;_F-_G7-jjL2lFT&wRZgk{tcqFKJj1Ufo%v&h`aY<$ z(Bwk;DMYE7r+=vHm#!ZBo2CC2Z|5;%cR-?*e-B6_+@8Vy%6ZhqO^=aFIvmOl3Vd&o zVC=|#hz9+oV1R_=_u#3}du4b~8SFcHcFn`L1R4YB)*leNud^;bitsKxi_p=N3WAC< z09F^f4|qOv`hnUd%UsNaq;UhIXSu$w=1yKFv7Qt=vxj&So8uLhv*+e~5wCc#34O`x zTsKQTWk|g2k6c{|C37k-c7p>@Q0~;25qs#?KlchWR&kV7g~=X)(;J?ukrHlvgy1(I zKZQkkI3kA7t3`S+3(oVMQfey6!>k1N5fA7A(pV7KEu*u=VhzJ60~IgPfIJV+ZF1EZ>z=r4?vHzehy4%E*EPX} zd?K$tqnkoV!adOg3xAqXiui;=9Sf1cZ-rpG?sLn(3I7^dh!hJxXTU)~@{#_D+$sN- zCI9fPg0U6A#F>ow-xL|Grl+zYgvO8S4-!pYu)N|M76CJlBlrra*S;8wLcan_Ig=p- zy)|ntD_nTsdsJKi z6A4@*pmN*=s6l_t^;&O~%jKfuCo|Z2$6VWX1_%lBGUYiVmu3JrJpuPp6^3&NSxYx6 zZolFXV4Z>>UgRZV#taP*#%@I?%VQ}U9ZApE3DH~Bu~ePvu*|&vIw(Y;6G0qqgiQ)_ zZJ1rOn*Bi8r`V@uKFiC`sGgyZS z>?kSziJMy^yWJ@qx{L3_A>1;Av{9o`{w~(v^h@}@X$m(~V*TJ?=^TBK1{+?*`#F$! zJ|Aw;AD8Z=j4{$|nq$i>@cVp++GBRcG#XDQed-m03(g{f-z5TuCsy;0t<}vJTO_|O zO*;-6K0BEHaBI29fLIb<*Wn7@q1M^$LQl03nUHW0LA0tv^!B~&1(MPWc4zXL$_$aF z#s=%nu6kSSn8ER*x>C^*jKMuY(D(uY<-WM!qKX4#5Q`GGkQ{<^0q7}}5zy+EVOlbh zjdzH&7W*$+Zy`Dc)MWe2(Z~hq7PFsj3B8S^2zwdL7PwmMr=4|7zln<#i)Cv=E+R=svsp(Ngrl}vvQeaP@#(y@MOq}O9mBg-xl3PlP% z145c*WOu+3TKk>&`&oUyBj3fIQ|EZxJ9XU@SdSS6svnZ+gL>~D( zY~UKLF^~R{UF~20DK?1yE;fvSKs#q6XUqSkB4PM1{K>o6*cchx0RA0v!3zD-gFjIOPbww3#Hqpjq#?am$e=@VDD77;!7A+Z8uNTnb{tf zUERH1pj^W-fgycLWipQAvTW$VxH5@o=?=xr>B;KM4>Hw&vhn^1A;y$s=VrFpYc(tt zQ~V|fgyYKqhZisio>r}NNjBvS@Qz(t1*_aXeMOu~!+zCM}Q^E ziwa5{xe94Y6U{g^#Ovp`TGr|UY}~B98A7krldP-7yDlohOy#7ghOU_YjgQ)&UM1Qn zdoQhmf#PcTkC{$>K0tI4D|GTBBqS~_f#Q~K%-R7e)C?KEvHBo821O@wux6<_m; zqTeU$W{kE9Sw6M3cf!s$PBGUKniNl8_bJu!)aj67HAo^Y`BzxyNQBc3XKVKjwB+D| zN8()~wXBWDdKXdFBds8l=`2tf~0P`4ERmvq^gNoVRYzaXQ(n`l27k|W`fJRrnko$Hb1n3`B$u< z8ozhK{sFr4AHin%FTfT9IQRo+W~=pNJGR!3}9yDV&nWD=7^pAi#b9* z%WX|As`Y88!VU^(nHj(_YYL(Sw-YYkGYpjT0vgS2a9bf~(tf z0Y^T2i|^y$6OwJSP%0M4v#5JT7>+45k8hoSwA&IeSu$Cd91ZThM%m~l(DvLkb(ghB zd$Lu{%rs>|+n0q`#V8n=5Fc=ulAWR zf8zVoHWYtGiNB{9rvIXS{tw0cpFZC$Kgjf_&(k-B+%2+@1PQ_6W8Dml1T7K8QHfg` z8aWQA9qsW@xzZ#{n(TdXrwSSr!Xhymf1=#I#~;r%_(=#dQ%^ZZoK;d{JpQy^=ftA% zG>ooJV+~u|g}`;FOk23yhNejg=hUpaK*gK7$aXRX`v4_5eL?tmhY9_mrId_qU^y5h ztm3Jj8T8TCpwIZC#G8!+l$GS_v9*m|Z>&BGnA5Acfgd={J@qkiZh;91BfL(?loI2z z(Lhm~Sr7do^~T521(iL1o-A6%8J=))<}OB56}&Cp&4VO(@|9!I2dRwEOef0r(y(=e z63OKIKIdPM8dETtJpKVJ`5(JH?%zRbYh-R|^8Zf;;NPxPJ?sH;e>we+yw&*Sr@D;( zxs&eCiA{hc0Y|i%#7-vq6{>-}2;N`F3WLn3^?Y(l=Fad=-}^pfT79WSxoHK+AZ%;R zNw3Xo!HcA%tDRcVd=dM>_$u=#D%1PiGtQGZfXMoD+i8~jnQqr<#z*7xZ3G?U;x-lv z6v_(fEG?iM^hh$wM1sV2tvfvCn$&CoHBH-YJ!O>$sYs+m3R&nv;J2yOF&P8?<&i`BO*%fn)Ohcb-a;0|U(UJZ(Tarmi zNLh>ylTKa%TV@~Id7|AFpR(Z-S8#TY^?J7pvZ`TBNITE*ev3oTD;#JBpmYiqpC2@T zB1Mf}+0Z{GSd&aKW!%*q#s)o^o}T>CI_&HPG(}M*_VBfYu9of?kG4ugv(zYE$Og1| z`!*xHDtp6$#1g?h#l%{ZxUP%~{H@xV#Ok0evzUkA-cvo>!G`5_$xjxdDHRS#ei?(qTt?I zNp)Vn5i2Jpg^5l|KkGIW2QijJx6qz_r7qj)3rUaIJ1$&aHj1WCpjeDbX#&1g%4gmwW*6h3HyJVB$%D8o4F6P|&82qWwk3x|v^dBuCvxrJzF-$Ri#PR_bT zX+{)Wq_a3c$r-VlMm^t%(`Am7~9~*L)4FXhShHwcU#?e zTRxz-nbJSQ`f(6Wxxz&06lfQX8_^#W^R383C(51}@D2L6`B=`@9>!Rc&nWzP7Bx~I ztDFm_u?%tBFhfFs_)<)mi=$V{#H4)0Fc72^^_7y6jIZx7mX0>+t{i9FHA1#W`vr
|hv6IgX9o6~UnRz=k+AyxPB0f>Xdpvma< zOxLJu1Tx%aBl>5_PrjNb;I>)=(gCM;5=biu_YZ3d$nx9rE%CZ2`74b=p9 z$+;`HLjD1B!NcW+0`ZUG3hlIZOoMEQyo!mm+raA3~f?^rbu|? zd3?W19$t|BD^LhpQ_8}5xUYN2nXJ*QJELR?Z!!9@!O2Mo7jJF(Uqig@J|2A?D3)qfD$w?!vpW;IQP;J_;&q_%7*W!EoHDE_b<@OB<7g-3{W5btEQ zHd`mi#V^&dTm$Y5@z?$E?_9~CVLbkQ)HbxN0< zANV!x@UuLe!>u7k^2Tg*X2l~>UVX)1(<=Zgef>V=~*JJQa#njJShFvk7Dy@=1HI(e9yh)HMUws@qo5z>FnXA z>m8^y!0LS%0s5^0&Zs;oR*7k<<$8n|yYMNFFy6jomiY~DwL}4rukxZ3SY*;x?&2bK z`)b;8Q;&4!+yGp#X)%p5i&`>?PWl1QJu{2&-Ny0v{V&oQ&==;DvN%GL_fKeQXaR^^ zl?nzCT}3*^8@~#Yntp{}wQq1Q*uFF7>0KQpRKdf&FIghmHRpO3flwOVU~)aF@W!mW zlOarUdCeQURqC0dY1DHVjJ30eD2PEfSPH_1+E zIPgCz0xuZywP_4^%b>g~@rNWFS6b8&_g%kSx9W|Q1Y*{cYp0H`xD!Nsi?!Y}#+nh# z_3*3`*p7$eb#H~3T@EQ{4cFS|%*NeyhVIh$A-r}a5{h=d=q>mI)}||e`+E9(Pu&eH z8zh$Am5cG33qW&|Q}&#jzK97X#oD7M2g59V@xyt(4}!cwk-YWb3rf9Z(jO+Jsc~aY zv3B2Kyph>xL{{qh)+Kbe*IQy5cR}PEi1(?$ii&xI<2HNe^~2?Q zBIx8sX9BeMur>hAfJMPKmv;71{MuGbtTzM#XW}!k9fxMf6<+2O-a)R0!6&91uv#zd z+nQoswoGQ#_KCgx!i6({3z4R)p0~HW3<&{-q8O5-!A#sQ(?+_gojsZj*Ab+Y)`kBg zsXvD0v@fxUPdrH=8rxk0LLvh{|C;kQC4ri;&3Rt1UcB(@ZUilAmAltagbRdjXfb-~ zTyiGJ)yb$3ukPF@f*-N+0_jGv!BvrxNnVTs^wUYj-I_vFPspIyJ^z;oOWRvSCVGZg zOHA&0b#!l7Z345+$TDk2IywfcmY`!q<6%G%A_CYl1y?1E5dMw7C-U_siR6PBE=G_>0ox@Y+I?FhDCp6G(2~e)_e58;BTR?|%MN}*RzRQ{(}>>{6b9X1bx_-vmG+$~ zo&A)`hm#enS#&tiMTJOm^N#6rktHm_S82LfLZd+<`%QL*L-Xr1y(<0eU7Vd76N}Le zo|XJf%;Lim)Lu{xK=zw?rXADCR;m7{zL3w?odBKSU<}5rTLs|P>Km;J|(>i@ud#c~F zWn!~^x6_}6F%;B)656zXrwXP2-!!E-(Am-B zKUz*zMg>(E>9=QM9Wxy`vzQW+hb6%`kX)=GNXB|0#QHK31sP2vqsIQrk%Zm>!Z|R= zYUQS?g@s7S&+nWDN5g@T^plBzbyh7TCRMJ>r-v!$=Vu>&R=ZC=Kj=NOnoEDsT$tVv zkP4`5R`vOB*iTgeE_o~AR?O_K?2d`v3szW(l`E|J?Ex0y>0>AEL09NURM=NNe!$t2 zF3ll^tQQ0RL6$JQ7ZQmod|JyH0*ZJ2iz*aO0F4!t%V&UexF}Si{IEX!uP8P?HWTgRUvEym|V`nFo(Zv568SS?(P`$ zjZR;F8|<6Kw}Qw`Lmtw0ayP9Buf)TUyGA$$KBJA1W@F$8)z+Ljov1T)?s7GCw;{}K z=0oRwNt}~8O=f0}*`0^m4wcPSduXnZhlt$Ba${uTYk~$b6;>(}bDx8V#f*LEO04|Y z`VX7V%+eftX89?dbF!je4P z-^X>XspnIQNKiNj}B7=}#JFsh{rHS@OWWrEVLkEeysNe|P#d1j=2aByV^C z#Ft&GJM^USArnPRzgb0E%JtYfLao8yF1_I&CG2?dJ$`Bd7|n<k7GyZWOdz(7Ev|1m>K_P1gApEcJ1EFJjB3BwEsAx&GT3t`R}3qsTl#8<(1j!kk2B%BAm@wbVlyFloaT ziOL`3XbamFOPdO+ki%wMs#!OZL%>IRU+)%C(`>j|SCVz{%G=j;jj5PEo)0OXrc~{s zTw`=uLWRB~e0kmR!V-FgL-vU6MadzMdieUUsi`cUN7kQjS^QJ}ezs5gw_p2*g#Jq0 z{+oP~RX2f)LP-3$l+70uO+}nA4>ROv^t#eI-y+K@0zip3P4m5Z1Q>|_oCfL?3BtwyB$;&OB<#ZTb_ z8^;tbgp&SU^ggDMTre$f1;!{oPRrE%EB+qShD$q*g;|T=W73Os{jDPcb3W~<~3ah@-1n3Y^e_=U*{7STyLG0c^ zl~1$q91z(S>GkDKgouV@Z-bq_#WEr&;~F(O_gBcu>8~R`lyaxv4rO8@8Q#9(_om`O z%|c=cAo?VTkPHhGtVh3!yaRr(u)lR{ktZ~BfO3eEus1-*5P{WB*TXjPD=$f#RPcM%)Hq3jqEnUm2~ssl2F&rdKK_ zRV|KGBqR<|t{tJs7$$uiuvMkvAc2SH0eb}1&vsT+exnxC(-$>$+DTYklUM{{El%KA z<5k=IM1C?lTe}M)yYB&tEaqY%H8e*&*KOj>c9&vgcVu9DIo3cq$85b(@~laefv+P& z6vN7cB9$esZ0J5%G1=9`Nv~CTsr_|hlL2XuDm8(I~=}iu6P>oLo>NsP< zCg^}*DqeJeC{g`PHN6{sgHxtvoSH@oyaEsgF2qBh)tX}b#AfprF4+#JBxaxB7ZNYY zGx)2tZN-?35AC<>@GopIeQ0(IPMIW;@2;6e^wTnfGitL`e(sj4A9QE#o(qVLTXRf4 z5eycYy<)5-+Sas?pDY*MV>1@z&k={!E0t=afRYR-F&&q4pcX@VMbGxAG*|h1GxC!z zIH;BYsX5pE<6hb!!>pEl%n<@nk3Dif*C@iLJr*Z71sIsDA0OTO#->tFd))Xp8!KlxCQihm42@_!1!e=qR=d)R8$ zf%R5hPXF{v^dN7Cjzh91>c2rq54wRvLL&AzbO&eR0~fTjv#%W0fB&2)jBlsZZ`^ zf<5CB(m!w-#W)?(&zSPBu7-@)$g&Xcy1jFp3yip{MS7f5WYHRZ9*5={G9aK6Mj`v4y zQ;f@e*W8024u}_`ldTC+e7YWWS>dCO8lpm!z{Luz59nGVH#M{-(kASpD2cAuzrwQ1 z14jj);o#@zlJ6v+ThTS52?l*Fj}%blG$RIVriUvh;iiSb5Y+RxC3=(1S?4|2PB%6( zVXN?^SsCJ#s9^GA+S9nJN#>DjuWn()fLnvk=jG**CC>#to_Aq?H8W1>YbF)KfGAwh zq3@?27p6ADO$&^)xV2zXM+LHHvtLnLFWp5ZkIte-(Vk^@6^D;+9SAoYiq+CK$C?@o ze5D#>WK)b3U((DgFNZ`-fu^XM6~V{wsvGK4rjt?D-g4=Vipxk5O1e(YHI?9(N_VQ? z>Vv5&n!3WThv=vGkHNU!jFUK4MNmF1R#H8$v0*bzhOC6I>euc+^&LWm2p`QeRFXPx z_t9>}6j;I5jD-)FvS31iX$o?k*PvNE>-dSvQje_RZeQ##2L%=3xvjXHUv#sw%vqIT zV9*$cUFLRRRo$W-@@m0?q`GA`S26LK0dFH7R$?u0zxu$Rlm5s6J6zD7DiJJA|SVF<^n8!6nBHw60eTN;4ITMR8^P+Hs7cOrm3V!_K+%z$^3evDKXuKk#Nx0*rJ2 zcqc+DBO3JZT+yZyARc1vG5&hb_k;n~TEPn0w8&K7tfPfraOFRe=jqz%uW*2HEJ~kj zC@W~X(9ylvr`MM085O)t+8^blN#9e?5DjUz0Gi8uqjd=&-^2?8XM_(mxn(22=w2JG z-PU@+yT0G^1$%QK(!Uegk7!0#yBL$m>&~Wxl}=3PTM;Vq4?$>Q|9Th?v|FI`(?2t- zov1Wmx0=wK@!iX0vDF~jHypycB+ z-IL-Q7F*y=s9%&T8es7VSs za?nFxN6~QIse#QNaPufkzrWH}V(Pbd_#T}fRbnt0_Dh3c=Q&-B(;v0j!G@$%8RX6os{P)|r+d=_ z`$-jgg96F?J0k!lLX7|Ai<0Pb4Npq`vC!oEH>c2sl>uv9;(TM{Y&vhkpEODK@sOV)0o@x`;$%xW5y7rE56?F}{(i#>TFIdE=k{&n zScY5N>4+ns1?hJpG-G0@6v)w$oV--vSmsNzP5XuFZ7Ap zL>qPNc;V%e@TfRTg`X@pyD#`Y3`o`1i-_l{VqKwvSTCf%i^}QYX+e(ZwD^qbJ?}8V zJ_CELteWZfzwfB>=Bx9+&h<&Y7|^gH=^tHj=4+ftWXim0uBIWG9?prCn2;_ z59VIvnKss-+#x?I8ZM%Pr`aDk_gxCazd|#-X}UBEs;S-q>Lg*{ut`L*%lMg)_6?|b z1aaWmTOrDxwWVw7gkV&a<$oaM5)Ybk+0Lz@0AZh$5K)jC(6CuV+_A@D*f<=w)5a4i zpv|76{T}6rqCM3dljB38lsP3GQQ^e+SSWzz7Y&Oo{AtyH1G^UErUDIw5EDeAP+50hPQ5t~6 z!ZpC(^);~r=K6;*%D0YL2dfsIra4kIsa0tpYx_is7RzW{V!h74$<=hpnm!=mMqeklzDobIbrT~DEl z6H^0C9;@ljg1t!|K<+!p_ugtLa~tb0Vg3dMFGU({&X}T-QZ=((Hr z?QwH?QM$Rd>==vNtInoEdJHT08fbCRth8E32cff+0l3vJJr(3SO4=m|Nn5ghrEy*j za43U-CJ&TwBg=0=n;T2)QeMug1_s%}C3K6UQ!?`h_uaEkzCLn5gSAA_gy^waRH6^Yy)i;U9^&-U`|-lUI~{AvCGeN!)mw71wa>59Siz3jo*rjQtws^ zZOg$YEai82NaZ?<{Tx`xhSSyQmk6|2&5aBQ((44Wf6`~!y7Jq&^N~egATiMj?$Jai zF47Y_mf%!Q11K!yTcemVCatDKtcXvYFT%>(Yx=ADapX&N#J}4TSR9-?%Y-#aS=4*v zK{PB@lU^QoXg7WxLU!v29@^6#^OGQ3TSE?Cc*LO2Bc`$007FKX`eiA^d5@Xu^+PIP zd?o4mt^Y;9*Ck7cpTE%JkdNc3$?{m9ZM;jH(>p@Y+H3JBLa z44U6^in4q#6aLw-U^EgV6j|{xo+oebaW|C}l*`d36Da;loEXzY>v=Hd_w)s*U&&_d z;wVIjll|0|!(?T{X!EFh0{j^^t+Bn(m0;TAQbO~MGV*RsJ-7t&VU1WbMcvi!eE#?E zZ;YBrvOfv)n%aKkib=~F#fcS`OYh_f=! zxj$ARj^glaY^Ey(%0VyN>TVEtXW+21P7nA3A7?CW>h(oAo;d~AzrMO74;CyVU5BxK zwSJs77vikSDLZB6U2SfLAmxFu6l$CkJ0hrr^^YG51|w04_cy9A8NIdo&iTr2U-6u7 zRi#h2ac|9xT%bSYc+4_GcPPLAJhxC7w_tL^7n-$zI%eR81~F?ihTLt5FL?hAY3p*x z6qp-eBb)q~#XNP@Ak1*mIwsK$ikkFb_rDD)JRX<*X1G1mqloGoj zrbS2uwGuKz5-k8#l5fXYE*i9qC^D0q0Pe)n)Pw1cjfRiv1L_VL!uAJhaXN)G%8#`| zZ55p)-E%!?OhpDQk%ow9pB7y;`P{_>n+%-v0=0H;1|6p1;QX#=&T~>v*zlUZx4qG0E^@}w<$05s59YSXv0jD7taQJ8~GFm%1RdL1= zi)cDcy!nqVu2xM=*j7Imc%;yH>l0X?a6#aQabO61z&yp5ufFqclPArj$rV=19kH+Q ziCb~>mC&7BF;851fw9_pC=yIa$=uCcu=JK?#F<^fDGl-4s@`|9uC3DXDjqvHF`L-> zcExT)(~^fmY-NYb-kR-c+h6?SCrp#2-1PG6c;jQ^_{uDWj$o$EhfTu+Yb=WM#i&q7 zdG2j^P1~^J@JGC z0;2{hde^W@a~kj|zJ(MN+HP%!;_l1x@VX z0$f>;;b!7yGryh{vdRPi;dJldU^VW_i9c}i(Jq%2XsHoUoUP4_nm+!0yJ?5g;>W{qby!6r&D{tjxM@TEg;E~auyC?V9nE!BxJ zTZn=6{TR?feLhJq%BKw6^xqfZRc(J4(7?n=*3uuWW8p6sph?zlbvD}Em}xXvMdk6E zzHNVeX5$~$J$AY;gtb*8$SsA9|FCz<**1^AC7WyOCp*6u3DsZB`CaA$ZPcNu(FT@u z_9bfY#Ig^P8Q;LLz$=XUXQXpCBXc(Y0LX6^_!p`gQA*&@p{%_@f46%^qoh6F>>dQ4 zHLfe9wPe!qL)=F8Mi#@u7AbQ!_~FR81*^lB!xm6n(j}Jg_Smp5YWHX%UF!GikLsB_GupZpUUVZcDgO z0awq8&FHf;SBeX*spY6`(mzqnZ+tHx3%PAA23E_O>XYc*E3DT$uKbviy(>Yq+p_4K z`FTe1=~*N)A5S;VMIL@2Fgi~fxgFd}-?t=@Ooh$B6=EIYw%;+paCtUht2U#Y+gJvh z%M-~M=rhR6~AjDC8 zg`8X2`Fq};mba%M-;6vLD^2!s?G%YQsvo9WM^&kKwml{{r&M&QV%(jK^7WTSQgkV zNanfR)$*{P<4H4(z4vcj5AC2D>&$#J$qIyFtQo)Ha&A2=cMne;nH;y}#lMFEInCL?^)2 zIF7r&QUB+Pd`fXVKfxK_J!f%uJM`;aW@JQD3XCrFf>+YRw$;N)cYaBy&$E*3-brkF z>&`G$mn8Tb>QvtwIFcZs&qQjSGMKj&1mbIF`XRP5VWJnAP)wXp9gG zR&KFuN=_UEhAuTmwTo}p2bEjtnuaDsYzO6v(N^sE>Y#2X3j6UK@tMBOa#`WCz;Lr< z;NS&9vk_q?`@Fp&CioaU{nE@3FSO~ins#DH1rdEa0yoW0oEut zj~1DW^Ee!S8n(H#@#qN0he&GRq1G=&o-GJqt4UE*)v_j7Dp8GJCyq$Gvl3n}fxKy_%m9 z>t8gsJcSXlkL#_>OGv+b_m#iCV6+yL0oamjbtYA@$2BkeG*Ue0B3i#43HfQgiPKnL zjBR)}wD?!qUP4+UW+7VVrb50=Za|h-K{&tSiS=Sr^!wI51>YN85&ts&V==3`B4TQb ztFRS9--4XDO18OV8M{k@C=V72F!X7f`J*9tzmc~4u%kjjYPuY}=Q24*yP4E@%G zjlw6|GOneQd5v|v+|c3f2q+E(gbS9v`!pBB*vQ9UIXzOO`i#yxF^+HrvY1S}h^byo z>QDW%cs<$zp|ojCnE=6oDS6&Bc2^ekOS7r%85cJdRO#kaWk_F}B+4>H&Ke>FWvhpq znZ=rm4wgM5o!ii>bEmZm0n9yLZZd_1r9p>UzG0V{ARcF~d<67C)>AmRSib33g*VkZ zP%oUq5TVickew@47v;C9&h_k z00M@e39tt;YK+FXn1m~apLh36zdZx6zF|iDCH444`Fr9W9(l+np@Qo%5)m;PcXmaU zWeqWSK&(zwwyE{}`HK!`or3(nz%L4dM9!O_u5i*j4E>~5hXgkH@n@SpU)pj((L}TT zu;upYg7s%B^IMYdw9SpC2O`cHb9!0>t|^E%=D+$JG1#BglEogzE)9O&*j@=SP-Js9 zgS9td#>6&Zhve?qioyk`3%yU zW0jdRN7AGpBGK7%U7C$+n)SFh7OgB4V>-Fej=>e_a$Ty=Np^uoyk00)X5Uj*c6Kv2 z(<df*K`C;<;m5kB`NU z=`VAH>la5Lw89^(8)C+z#S32BqiV22NsKSw9v|jYv3OSJ*r;iom%qWSmT;p-u2+|F zOf4qS>!l($h-xrUnwIS_hC*LFOxVL3_GIR{VlRxuBx-EnNA|-#@{`+L(eF3)89eU{ zbwx>RUeTKo{i7vjPe<5ZZIev+wqj7=?2`(n_DeA)PYF;R>P-@^2msLCO+l?naBo*F zUTs@Di|2w~Y@L>_kkb!$g)L~Yn#xnn#r6**;z|i<$-dia%Ovk~!r)iiF=uG`2_#cR zP>rYiYG_9Cpl{q9Z%(#PClmF~mj-DeAJRJqvQN1UJ4&kAar3fiCX3*f0Z$*4rdu5g zcZJH1y6?`$R=c}C_Y3&4qoD5iu*@q;k!LY3X=iJ3NJ-n;wGDxeFoAbm9ucd&PRGA~ zFeS6#mzY%ZIg99_*7w7#j?$s3>a_YDN#LMAAelNd0)NnR8pw20@+U-*_EA}w%5o^h z5Si3t-{a}ndPrBtlq8gHaEQ7zV3v1wuney0do`E|vPwJ_b@ojTCBb$TvfG+=3l(O- zcx)+;J)kNJ7s|_QlSA2B3s_D zObad=scIJffJ3;v#_(DJh)6%lDSpa)`I1)pB{Tqy);3*(;-%K;wRVgy_{+?G zH{#=puP4*8*K^6^&T4oO9)H*Bdtqo#ck2RO`B~SqfalMThn+tM*uxIw>%-3KpkyBLhB;ut`1Y-*ceQT64$OJvjfD@(G8ntm0hxQoB)NzZ3-8+ zn-0_Y_EXL6PJLTmdjW^}R{Dl1Mr}Rr;tA%-DJ)*h$1MFaN)y-|WZ6j`oKNHxXrx{f z(Uf{mScRF?4wHr=8FgRuS-g2XXO&zr0@*}gjh*@3-Nc{wUP%adi*( zAwu_=jjR6h=e_^@vp)k8sm$q=B0x2eMaAnuXE0X9e55HE8Xh)0>vc5wlBXb(`fm-P2I$hRk_+4K zJA?#lrFBeeb<984Z|s*GoRfueEe$a$&_G3>x(40@Vp8+IHVZ6ar$uwaoM6~Xj^k|-WlrA119NgOFddI$G^h&3n70z)C??gu0S!TGgx~E zRsK-|p`;nYHWl>*TQiCrCZ{bYCqDnmv7+qqylzO+q&=oNiEbQ?Y#oX?&RYfNCaXTends-4o7QROH!! zE?-j2n6#v5XqB#29-_{}L#@@JEvh;+J0 z+|MVD|6c1yhJ%aNYm-4`#`QFN!Q`d_4QW3YD*CmizZn&xf)5fs3T*y?AQC>L&&=xT zO3$m?ANR*h`JgFJw=H5fJ3Agh*w}{LSKtW!Qu1-cjv|P{MinBiJ0h@{VG&wOS(8~x zXdLfy+$4K=sn7Q7PUz-Y_s72Jj|DLjTb{Cjjq6c-?@OpXdGEQUv38EB7=`S~i|#I*v`uc26=C!mz4_>lVbbxmzVLxBrK=bL`S=UDk9~s?u3$+qP9{ z+qP}nwr$(CZQH1{*}3-KXPnbLdarRB?+!jT^=x5lq=;T<;e68XL;1J|dIHlS2;6{qVq^ ze!1?jc=zjTsGYI0k`P^+>crd5^g9y-(neH#OEo@`_J{?n#SPmp&9TJIr>3S&m$c$U*SF9(_9d- ze;8{cSK_taLxJ!4^&3A6MtGlW^$`nbJMsP^yr?ZGXg=8B@(olgaX>900*dHS*yH&} zA-B_{;myLxHSNB)fz4fwfgLii=FgwsAMe-u!VSoGI_{K8IMM~@fByXF2>Ob-rQaQv zeqip6t)C3erkg{K%V$Uw0I1$S=6gojYg`4%cM+uUB0KLUuYp)2w|kB(*=?5Fxj&$* zsgxu26t?>8l=-wC9av>~N(uPX*@=Ee;FlDGh!1ofJ!B|a-a#Jx5WF~HG!GcP5Ed6y zpH9!~fD{;fOlJ0H84<{Dr2eu;(~`yA!HHSkKKyR{S>ha7wz`Y z*TcnJM>onjayFlf-$F2aFXc&xK~w^9J_wZ!WQ2rPM{}JA#69lt6Ytx;=PWSI+y8-s zKIP+Ny^0@kITJnC#mJE@xvSfGBF})xzSh)m1h0XR00csywa@roOPy;2nD{bHp>U{a zVvhKy@wi(N88X>1frpEcR4G2y&#lAT$j|H&QQw@A8GBEWu@OPBMR?(G<6I$ZliZbYdi^&QBT>+HjdMc%T#VHRsVj(=pDvdNntHj zch4-Hj>KZDVrRb&de@+6X`gn;T-+}C$dJf6S5>wjw0p#>@ z7A*`@GZJI8#WBKID?DRpb}p(`CZWi%1jsR#4+tSWd!@BSRt=BpfQ*QYN;(dt6sVfy zNl`vCQl+V9{6>&TO!9-{q0pm@R zk@q>xT*ct)WZeLEbO zL}bfVqut@@Ilsb4?q2p31N7&5;aPbau0^PL*^i)`_ZuRI#|fgiG+a_-Ck=ib4)wUw zMaG@AP=YK>8`y}Ea)S2fIsNiJIo9T!2n-aoV^KP2*LkTA!qxoV3ARetZ5YY8f=v2* zLHcU+at1h(?7H_Q=CpYbgbNCd3vR3hmaDX!WL*=-D_HrgO938#aq!4Y-(_~)0TrK! z&aE=+;Wwe-w5I4#WJpA*NUV&z*lwM@MZnW`gj=VcWb{)O?efW(i8#$&`r5$w_HAA6 zDSf6SV|m`Emj%m3%680{0BhxOV(iBaZuHZbCDC|~MD9NT0e+ru3P2$tkZXnoOO)$ZA*sauQk0e2d8moTmTKHb8g8zS9XlqzyYY#FUF+XYC~~yw~mgJ-8aTNk+vYF`AaOTuBol4 z%q+^t*+b1xgk-z_)F@+d-O2yhoBe&%H$8oa`5U?3RJ$*=P^I6PB*|PSa>Eu|Y>`n> z$_l*Sk2L?(EGTHR&~Q%<2~$~4@90y^{L6tUUM_9WmPx~y7FLiu;aMROmg!xA@Y;By z_CUQ-wYpa2i(2*Rc9jk7oPz6jxE|j^pXzG_v49QvQnaV^4>a8Y(8&Z&26C^pqk3ZJy%jSyKGL|0k z)oR3rA8HnK#H&={Cw&6eP^KY@hr0>qs!)#))`cfHBaCC~t*Qeg-4PGgsZfz2jvuzF z>=k6-Ch6*lBKs72eT#t>=^@9dlrYPdRn)i?vyx?G4`*$}$~gz*dBP}g%DpKer@cTg zfl_?^QzFeVUCt~yADFY;_Ee|bJxk_XIQ3nO(p{8F5P!{OA(A9*5MxRFqz!gk6EnJ!>sll0S~~$&8zhM_F67HeBJ=V?jD%-7 zNTTyX%9)Tysctdce{e?`%#-TryK?26dZYk;h7_q=XVsi0sXG`t_`;-#X}zek3{c@s zvHR+V+44-jwaIRbP%0gkVhpxtPqZCtCG2v0PRre8curF`Ch5wY%C^IV(4Wcp6+?M7 zN;%3+bf`O~iY_%qBc}XX3@R$V*&-mVx`VF60KP_LMse2dXZYRZ!>S`}&RSKmMMd44bJXViggU(*SfVCbbg_ke_YeE$ z7hADUgcQ-%jPUPP98S>^_oUvwti^z_EeLi$0Jiato8OOpTaDo9S+Xo$D*KFLsp~t! ztl|1+xU7DRgd^)~{Lh~H;u|8xfaC?njtRfh@rf52hE*>~s=;N&pIxPH*Ho5x$~h^# zZE}wDpdRl|*=p6)1+W#p$BmM1ssocV%Sv+8NbhTLrS6fq~o&W%DH_nko+Hg~hvuTs>Fw zk=V`dh|&h_XB1KJtJcXQ_BYVwQk*)2{cOcEWAHaPZt48fIhCrM3JHU8*Y@A0Q_T8N zC9`VRM5ixwu^XVE0-QV;9=m{CwkF|8Srmo?QZ9O~nUC?VPJuTUIHITib8ccA=0L6A;Mtv$Yhh^*$NqI^T9>(yD%=fSrG5GwG0m$t zg(YL(ZA~ruFj>jwG4ZEaZU?~P`w3lG%LmiRdeuj2zmPM>+c(gc54QOp8kNY;xWTJx zmHQ8L&xQ&xFLB+^ILG~~MoMZz$W2!1hgfwQ=LvcBhCh^jMwT4-r5Ki?n3^&nD3v+Oq4VjcC|%6bbt=h`o+<>DgnB#ZSKu=1|Irq` zkqkCu)qg!SYe$+VQWWiDtO#IR`ZZF8cAEKlwQQmS8o~M$}#oiS1 znrs{}0bRy_=>b-ah|vqqw~oL2yxHSpqkb2+;ANtUpt*$%@4DN$ zj0Lg`---~D9NgwqTT8RH8EEjs*c!F?R?tYhim9nF`s3!t1JxVT$k>hCmvW#*za_D+ zpexar7_kF=b=q#nBt#}PheH%ga~qvKf;l7|Dz@*k{l!TtPW!ML5Z3vk-kBj;G*v%D z(rP7T5yPwLf!NU0nnh|uDHr@WCC6P7Z6{Lv4O_9}3r6GOy)5K8pu8w^Qz~)OmJoYS zx9Pj^bjNPUP|;umU3|q5TLt5BX(Mx9YC_lsbqMlG2y%*=-HDLVnZ;(yc0e>(dC1J% zq}JtY6{|OQ^z)NO^vPIxva)3-r_oK@T4&pm>_y{93v+xXW*KQca#wNYVNE#rDFw{n zMAG{Rynb05m}3Q$Uj;-`i5BJl2DxKszlm|Fry4JHM)iD@K*wT}juM9g(l5G}1-(pK zg$bqk!B@s*>D|Whac>t)o=?BXegm&^f;3QzHDAo!pOm@l_)7c;8@KVC%@@z!+k1*= zB<;!caPum<=R0gI%u&mtmL*OZN+t2!l>o+w%v}5AYu+hT+B|B{8bzR%92sJe<00;W zAWaEJo7H<$A+(Fd@M6Q-ewa<#o2j_pWGv?%a{J%hTC4|j@UZ%3BcFM%j11VpOn(F; z*Mvjp)CRdL2xi0;0F}$iEsM@DCH^!p)x^JM(@6o*$Gcjq0!mM&W5$n?ixVl^%f}>E zkN&Ycf2g*FsMe-_{sseHaJFynY6iL13R0BbO`(Z*Cd*Rbx1P4GCmhT>V1Bv6cRL*e z&zq+TRoN4!oig*x|JibF6QkQ{cd!ywx6z)puJW}4E!`Gv&~qtMoi89raky53f*cze zV{B_LLts?gg39Q(GCN+6$}u|IAx%|M^vOV+-JM2@7QsHTK{z^Bc zb9<(@XnA2C@O7_tfPThQ0bPPnS@Ti$B;++6*1Z23m%}=6Wu{n{ta0 zd)4u?WOcj~hQb-8*&Athzx5>%2=+*~+|1x1ex&!|+!TY8l1c>WM)ZxnV^&Zl_#0Ew zQP)bLummvzJ*-OB$N#P+5;OLfTbhFU>e7fLcm5%ktD7EV%K=ovd8Gr8ICCIG!9SWA z!;{vn<{2~e#@@Xh*z-^C&-s%43gtJWm67T1y08D1cJ`NLSJ+P1(o)y%e`c^ICX7oV z@_sXm($pCw#}#FP5AjcEA^vD0KtU4EmLP}#s#214ClKf0t$9`)5qgYI~ zk&=7=`;}fxZ$$Zs8S0)^f?W&WVwZ&zPS7d-tzC9!U7C~=!nJ&m9|82%@V<}UW{eN# z6^(o|%qR)rlu2Mj$D$c2=+v#bY>+;a$wU{dABxLr#tfV%3Uwukeo6&ZR_IHM^uxto zcnE)Oze;9{4Kjc1T(T2g@mAziA9*N|JLBveFFEVJIr<|UnOJUnH&&(B8ACFnek z(x35hC(d+;Sc;Rh@~2*L?7CDUe9D{&XMsQ@9Ux4J_ddg2G<|8q`64s3L0uR{CUbU- zQxW)+=!S-4rdecKMT_va2|s`q`D@N#QE6agxqV&|8!)S680TM+5NpC943*q@j$|ZT zm2D;KlT3@(%$2%(F*$ILlD$bWPI`^R&`hru5EEw;;Dcl12RSx--9( zVYK31+R-{dCNZWDGOu<92gK=JnvNt5ZmAuvx8ScdL9g15B#m#0Ib5znpK>9snd6;H z{hwl8vgut|7_W$}OtUhpeDn6O^2JJ@Uj}NBn23eD>%yFESOn*O3i1qdCH!-c@Jo`m z!1~+9*6Y6tLCE3xN9@)Z4n@X6z9z;1PoLhnW>v+2@Yw%?by;39fXRk9hbWSa9#=hwJH#YPqvF}yX z#dzx^tL4Gaq0B^O#wK||RIyAAHB?WzC0Jzc5tzcL_wL!bKo z7W{#8M1|pwlw{#l`H(iptx%>=>ba9Er#&W*^R^~tiQg#a{o7k! z;bG!pC(`Xa}l_=oha7zr-*AC`g@jM6u8!bH>BjTz%5& z4b?InYKIA1Qa3KGl0^rU$!peO#j+R$e~7*aKi@E|gYPL*yRnjFv1R(E)kEm6g@b0X znL~xy9mOz97L{w(IXIM~Xa5~Wl0HO;;b`naY#eaES@Gpsr=;+nu!8|1c0C%UuPl~6 zJgP-0Dzq?2)Fn#OO8rICDN#&+ONA95t{P?KKrD&~%OSW?yUsI+s9KDyJo^@(Z-r1X z{{x_Xb@?LzVwQY7qP2KfJmAaTZ933C>)@F&r0+8yCIetB`Z0VUnf)VJcut-^vOQp^ z<9xTMbflvivl^$1-<-_iO;kkGo0ZR8OWV4Um{^);d2_3g+fyV{x=7J(6O{YlHRTJI zAKh2&A`jc*laKoggWU7A{n4IJ0=EX{p_2Xi6_biq#oR*aNe$g!W1EDBx;#2&7 zbYxZAZ{{iTtMF{`+b%iHdF5xU{`0cFpJC(Ug-CLC!FZmWvkvZB;~iF_pZ64p6XL3@ zz1ZQ`o&(R*NkQ-8f%e21!wZ}McsMY_&M%Eal&LJTRTlgS1m1k{{UMlhb|artn_ye< zbQ6F@sa&DJMI+ihq|(^KWF6C)8a)FnufFWofW|j?({QZ8tvj5#cx8E6Uy&RAmYC)V zUp~k$AjWLbHd)mMQP#S*yn=hR!s@IyIdQ35ftm23EEg`N8t!DIgi4SQN^G1c*bz{~x*xUJ! zVUW}OD0|OQZ^x=1AYRaTb^dKZ8z6v$yWSNES4f;Glj6ZJhT zF3%Sec{=fY92b1~-ABVnc9)=@ef$1+O6#3x|;0a7)XREKrsnQ2h9?Hvwh@(?VV5Qk)&`h+K?|S`LbDadcBUSS9{q7sq{G?<6FmkimPlKwd_n$?e$2`@`jkip7}dYt#DdCaF5-JqDS zy>!#AzfDeeqnuF(>vIBitkYmdedphvPiYt^T*%##DZ$^I!9JkuxDc^6%Tb^KWU0 z41X7Z{|f&UaWHwP>{x{%j;QpSuBa92N=XgXhzfZ40OXX*x*#{Rdt~Jbxsbr zoRfuL45&!Of_g>djVqAtlDmufUZ_W9 zQIm@P@`RahLn*8VDpjB6O948-mZF4};i8ddvG8coHo?>>n3_S0wQdF}U+K@W?tGu8 zhtG(n6^u3Ti5X=e8{8|0R^4(p-P+bypxnsg(?O6Hku`}!gRK+l?qCBQc8 zgnW@>X$g!bj_n|N9~{a1A5swH>0lf7@5hqtZ!0*K|K6kd52mxAi@u@Fe?Fdxag$OQ ze=%w$>Cw>n`n7#NXM+3$M1JLmiBbNx$Vn{8v&vcJ=!FRC^*18+SxGAPDLx^WL-7RI zDx`P}F`o{}V^mcjSbbVM_Tbikx!hg02FSk7^?|CRwi9F>K`4qEY`yl#<=8qNZ{iGB z%mII)Dpc%{98pqE8=})YpaDBH+ppH;fl0iyAP$qwCxtfyLY!8DiR#2(?VAd zrB%klx1-~IUb$_bi+`O-mOa3N^n?dlLogm&PmG01yk1QF)^>mNyVT7l=ni~5b!q~7 z5=Hz0W)BODO7}~ZdOtq;e0AFYiPwyPDaKct+wi``WjT7?BY-Qx?8j^mJl`UXVt*4G z26i6#CDkNqBdtowp7b$o2$#`xBGjRZ?LrjL=QRVpej85DdlZ~mZ#1FO!@5oX+a*#| z;)Zil6V&ja<%pzbpR&5*PJ)x85&NV#apFd$=IDvCY6nSqP+*{j1$itQAH<@5&g8Dq z4c3ZBH#Si`i8j7O&aZS!ZwvcUrR`hBI*zlmbXLxV_^LZ@QKqIs6wB4SfoN3bjLD&2 zTgVGH{95X$R0R`iqC%`U=!T5_4^9Q~^sZIg_su2soj(43f&Xtg6@QhCg7*5lHvf?~ zB9&gG5tT8&Iy#M<(14Yce$WWa9I7aX140Pu3aYB`wqqvBIjVr7q8cr4szzruH8wT| zS2kKUh?+}aq%+bj5{odIB6ypm6@3(TGo40%E`9Z={CS$Zumhvw+v<4gdir==4sP}a zu7S>W)$!N#;rBzJ4tlqJX~A4D@MK)!Vyqf~0#%MLD;Hw$-_%|`4gzZihz`IMfhy!z zQv)Y|ttl#y>$O$Q78!iV$&m54EKSLfiGvz{Z1`h&8hMXt8tD+so)6^;CojAv)2O3B zht5T4mm0u%z#tMfip&&O#yuu;96hn7{{w?Rx>lK*5N^j%<%P9{snV=pY|fwW8Mq>* z243(EbIQ!oG>qFUA{8c>i}W`*>=gNT!qHeAepwb#33n7g!-$Wk3JL@dRhiboz&xPD zAWX>jBRvrC>+AoeGLRTpWNcx9SQ{EH7FKf5PMw!_#g7l@fddD3(2l1^u|3{0rdDN# z(QoE`@&&wX8zhO%s1xjy36DNIP~(xrEkHd=*DsNoW|k=tu-8B4+frt{fq9*S)((7; zG~=g4?klJ=?(WDWWKpTc$;|t@M*xL%H>sAbXm3S|u zr3y=eY!=YmQdLHSir@h13NjqTw60o@Nz$-Gm!?#tEC45}@1~?EdNS>gFjXmYaYjsb zc+*pGXSxKcOkir>YLG&CZ3)Z@XsBs7Gm@f-VOzhxNGipJo8Ry z(4k?AN1A+A5a;Wzg6UFoWD!(lY6s-If4v5rJ_+of8c3{`+jSR6+%nrMwFNn9iUu*V zCCZTo&1o1}6q4!W3&-RJ@EA4V6sJRzn5?Wnn~TK61B1^=bwU^~Qq^D(kCMH%N#x+r z%qZ7^UE^!zZAx0Nj-wq})}*saD|)R;g3XV7T+)Fr+7r55LugHkjF6DW>2OHH3)I!^ z!$80&O6tB)Av&*~V{-rO)-Y5r^N1p=sIq^}*oLRDnuljFpGW|iCx@-s@ojs573Xk;ObWFd5*zP4H zD_MK~vtivPl+fVi*%VzfspY{KlM(?Ee#c&NKb0MC2Z0_qp!4zisR!}Z1r*Z=lzJu{ zd_i6UT_ymFR1kqNEraYLPtPQmvT2X;affov2IlP=Zp{`B>lrii8Sw3fsqGrNlVI8Q z*L=tx$^9Pn>kVWlu(u9?w;bbFUdeX9?0Y2MQSJ{dk$HD2$;$^BRkk5jXyO$o^!fIg zo;8!1E}f$u$@|6v^?V#dCY7k=Yxc}0dF1ULG%!-b^K0VXj1hgugl>idxJ8j7ujf-r z-Bee%^!NJN>PDjueyx=otEMf94e-8B2!oC9!D9oQ2~yL4~Y`!9e8z_hD=%l2rd zC(+zRqN{kadmp2*cLcv{E&A|#WYCUj*%9%g8%|5a8xf|&G8-f!)%#z)9lL*NnANYVVW}TBOngYVVc_sY>Ib7eo<;?{5?9 zOgK8{0KQuBb@z#=l;3NJNX=20F2Gsb1n_^3gc$Hu=4h#T2`;MFl2(-VcWpI=v8Uh+ zsvmxS)T;5So<196>584be)vjZQ=8x5;((w-AO)WKy<_jI<&*0Gx0mg~8zm(*nxv4W z=vF=qzx$R!$A-|=%ytxQ-|K)vBtY0ZAnI2Az5)Z$Kk8DEpEx-|LS!VAR{d$VaAfZ| zF%0NSu>+gN=qD|Se6CVJT+hMh``ML~#x5-!nnu2I9_{Fy?mP7=Q{2jR06WCViX+aH za7OB{EW=*a_St2FJE+9n1!31dv0~KKtbR*HMU@_xn#hR6PM*l9HV`5BZlo}&cv>=K zSGH*i8u6pvUY-y>?`ld~y1^6|mElqK&5Y5*$5vl;1gESFBP2D+(6iTu2O5d zypGy>OT#txC(0f^bh%>%Z=_C?Bjt!a)@H(dgyQ15G(-ytqABC6$*N%?v}kl(9?y!R z{8G#%p}#4X8Iy<1u$u)c9Q32AZ~BtFoe&75*gOLHy6SN+#6o$^nh1!P^HQnGc#jd5 zx=rn^$H)ny#=#73C}N@c+_M3N_eD*?VH15JyfMvYLv=sY@Oy4f5NPj4!4Ai(Kb?1W zs>;(2JR^B6bs@NX<@^Q~_#dV1Oq!q`fL9#7__dF*$NdYdhij< zybj-S4i*+VyJN})G2IPHpmJd za>KD zK2M6eY%F@#wu+jzEB66Dv#xe!TpC6~UEcND$PsADn$($v!8))p2Rhli0{AOV$#3&! zJq%1FPiAp;ofCzZA#&EOajN~Ib^k<04||3xMO2^Hw&tJzToe^- z6Lv{7^lJeh8Bql;S@EpiZ=bZQaDUxQ8vDrt!ik-O(L=b#2LAnK2hOq571#Of(W_|x*d-D0GBn_|NiDMf$bl`MlTFB<@%BS* z*gVXQH^Yr zqHuLP3y88jNaW;K;#TtpvZdBC_)Fz{PR*%U)6$sMzP3JTGr|tGgvB)sx1pwKTOy25QA^ z@DpeUMSXAWb~IBZXI)-h{*r#M2Gj`lE{^yrm1gY+Tm+1iEt6(Lsr9%>t56WMBkr{l z-Ha{2aCk+)NKvb-+nk&2iK_tBC4&fPEg@ZT`_KQD+-6y-UuFC1* z;}s)wb!2)gbzV-W4di-Ib9cbN13mlM2u4lw&^H#ylvL-f9O@qhDum`a9&im|Uj4_o zF$F4`0-e`x3ToZaFSD8G0YUq2NJ~7VWtkzWiH8qawIWU2iR*1{WsFKXhtD1&KHdCO0i^Q~+V){!*J!u@ur zUT!nPjre8Zu3NNHwmmLGnQSVYWOqYpX$V2`TW}q0x-7q`s#XLj8KXU1MT;Jex@&1v z!LfjrnMCD@4K5}UUqihN#?{G+w)nZzn5$J^)@z3>jp`l|r9w*IvvVTu`KCqQ#1?D; zih_|;LIj;FW9{8y#3z7bE2Fso)NE3p@ocfWvgoGPF^a=rertHdDEYd&Jkr>95x4nL zmyQ5rrq@laJi7Q|$3%4w37R@t22onQq^9}Kmy+&>oaT|x+#K339*+ScUSz-{$t`7v zU~MQ^&!P{#BD!9k?q{-!MQ28~Kc*_>v8;2P6j+Ujm_eu@iS|@-p+aRs zJp-PxD6TwzP>>_K(r?D+f(UVHD{gYFs5;XrJ8rUe1=c#)SP$fE@!;CdMh`F!i&Tsk zd)GtVb6c=hbB#p7Dqamm*Rk6j##{4zZ2QwgX5n~Mwu?_SBLl^$JO%NP}|hG6nUVdZ)OH=xPZtmd3fgi79&lOy#O&hVg0E6?QEvO4RyP ziN*<{qqI(qNjw1hV4CX}GP(x$v~hlwTlz700iCe;5KwwF+wR!I)h{ZKs2gXtVLags zmqSEbOZueFf0TR&dA(-2N-%?}9Z{F*uzBQMK5)6m0$u%|U3Rlq_X9Cu_mc457s;yg z=mWaB9UcK9Ur*Ow(0)=cxRNcrraP~8!i+B6)xGi% z&oNzsqdE?}I2T9lukEnD{;e4W3?TVOuhG^O^Zvoft zw`{?2-Z_^DCfK+E_`>XGvB8v{sgSn6r*a5~=j;MzY!gQ9sRD6h znHqT&^OPSEb)^<7FaE_999ZXf5+fLPeh5?-r_~A6JVH)vRdj2`nZ_yyCj^|xX6LIh zve6PU-&UB)-kO$HDnjAw1$v0?gw*99nZ+)6!!2 z(yndtJ{o#OEj@>i1Z+<<@f%2`32i+jE&WUnEJukI(062(9q5fP7F&+3zTz8Zm>n#+ zH=y`8P0p}-Rw`8&G2m$tP%p|<7ex&h$+{c%%%`Lh>pW~*(X4|JM%nC-J=0GK{K+fn zf|oxl*&=snp^VwFBKA)ujNRTAX*81AN7$Boj9+Y8M3#x<%Cdlo;ca}=VYl(mPZF3% z?O0!&y?^TAZ>Bs$NtX?&Xaw{kmqabYDjp|(vgvDQEm1_(^@>hu&B;E;98=*8NMm#+ zMr0|+Q7%qGc32yZcL1B%*!x*#EvU-m3L&dQl&a<#6oJJYgT)L$s3*8ZX{XC1Xh$Fy zCgdf2#0to6v65rR2j-H{4?hi554q_rzI{9SLV&Gb1(@qaR%LC_4&_jj%3b0gtm%hp zv@-2XCnRg85~=LyM2XPK(6slqIuvVT#W9(c%f1Q+i`(@)u+QZd>`7c&EU}kLc-e>o z)7^oaEepQLlw`uyhw$6|LdQY#zM6bY)Cc!f=pwdBeqUxH#=P;vA3#joRm4agC=BKp zu(~wj{xDOfRf37m@c@HFr=S4SMPl|-ECNtDB)fIQl1(^rl@@a%Hlv6mRiTYLdvA}i z25M_N!@)P1-X9-0KuVxdkm<6~>N*C1SbXDruyTeIHkp4o;e++PG1};}vrCY9N_mj@ zA!Y>XpC(g}23-e2)!>ftXPqcHFIelM@Z)K2j75~dDhaDaG0mo!aX&{R>a74I_)rWp zUMVAi*+aalPk*krtRuXq6@v#6h(?S<3qBsL<)^g>%2uM)XhIgS%%ffvNJ450!s0>f zB)QxECj@8>%c65z>*A^327Bf~H*_>DDrXd40c+Z@8 zR1KMIe8{ubbO+w}IXbHvfol;+#^DHqHMbL|cJ(M)Qx*E@%N<3IO77z9ym+?NPSxC< z^XJ=;lZt`!nmq)x-J%Ygl0*5bbAEdz0pbOM^CON)wJF~+EEod@J5~A%uZC^Ki@G7> z?<1wLB`P`jDK&Y7JV^bl`*Kl(G4m=7K4getOdr8FqMT`Hx$kG1UYe|$pm-=fS8Pt@Jv`Y=<=NFcd*@*IWzc&`qGMtJH&byHZo5L0jDRJK8wKuf{xHEjjPzci*37gYFc~S z3m~O$pU~`AC;>Sff93DH+Ly73l_L9u)k&OkK3ti09X6#J(qE#`ScEdc0+^zqZX&*2 z9h$OehlrMkZ>jq8uDk70M)3pu)0D}Q(m7Q-N#kSS9zSeHE+gS3FV-FQRHd#f3_!+s z=pe&tkwcY+&X|m1icjl5!UQ8X~mfqFvftIxtZav%HgBN@%?e>^`J3+?8^H5?5;kM#X zdn|ojKB0c0ib7j{QAj4aUfQsc`OYrvdb<@71<~REn(qYx{ls%fTBjwB?PWFWY^|$r z>~1HR`EnMHVkNUpwok0C%rOY4H_}NnPSU$X3spUevV^~3R6ioBvnbu1{$q*C*5#GG z%%`m#r?OOv+8&);c_P;o)RYX|9`^TK(LjB)Ku_c7L{wY@ssO3f9rMq@CZB{~Q&#TP}{m z!HzTyH&e{pS43DE&Um&bj}41W5F;E0S(DO@du9{8BJQGCf|n|Kj~iY^fFNl`sMQhv z%CT)0*54~9B@GAGVF}P&1y zRr(3F3X*h-lFVuK`z5AERhDD(7eZLWeDso?nb;nL`lvFy$!QH?Zw?TuziB zVIhdxJ$?=(ZeUH^)SBQ1fP$}@=U)Tpe0zJ@XQ6yetn>JN8Lmn`vQ^c36+);K*QM_D5%s+yAX9n> z`!mEX6ON)RxRap83twai)7U7ZVy1P+qVE8UY<+b*!Xd;2$Po|dd7*`)@CBPgsLL-* z;!IB!UWuBKB#!JtAAtKEn&B5R=iruq&Nt?1RMIG}5$6JRKw_&5c2pb}bciL%6e+|k zP>Cu(w;A21P9yo_EoF5}KEBAq%J@4C@VUWARm(NEfhu4OzEwy{zX8LKo2bOL`rPqaES+J ziXyrc8E+_(T`Ds`rO)gI?H6D%g!+(NqZPbb0^l0vMnA0t&cv?^9arT2=e0* ziDcE;P1kz|>Ma!Yk2Krwlwm-fX-r*@AtKkBmA%G=>oiLj+tw(XSPQ^CrqpKBK~Fcm zt6v`TF$?377s-+|tT0TkgUFD@b~?$UO@21e%;E%3;0PDLg13q-YNG40F%Pf^Nouyi zYI!6Db_oP_(PxR?R8W0zWbOnFGVl4j@}%@77!b_w4eM>`mvyZI7B6 z?)@L>j)%pm>i73FI}_~h(%m;413=Hh(U8W_%D}?V-k!$npYJ4%silp@|B;-M=xB(zW;-`H<|m6d)ZU7nZG1&rfPiH0PFDI@`lv2qAH(bi{fa z+Cdb^;>L4RzxIn;|JsqQ|1%$z7sbgQhpoD)+IpG>AgTrn@0SUzLvP%qOufCG#8Gdd zP?=~^p?}^ zckxa#`P;aPc9P1~p|@~O-?df!KGoApd<75~Z^bl{BKXfigp$X_5g9F&?5c+=2No=x z;?*-u8i))^$t`KfbQ@(;>-MMRcI*TT-^}yA1GB#7u~OfoCOT8@_ArE%kE3f*0xpEk z{D6I#-#Q?NaG&u?aQMFuio>?6bC22q9HXC4mTKwB(^qbp?o&XoVg9^w%v=U;v_twX2+G9NoIb%fU_`v$}g<7FU$4AlY` z+x&U^RQaC@C?w^@%{QB9lb2Yk&Kw%e4RZpNSmOVr7x5dBSaT$HtVsboRs(A(5#)n~n-Ch>9df z#`4NSnio3K@~^zaJN3O=pVfi|UjgGz=z)U2AgVUSTSG$R;Bp5%0UU)#Ii7qQkdD1~b#i7C~tz5W-zu4H$5a+HgJ6 zB+`QUn~7J}`9_Lh^W=asC-AF%AUQ#1G#J;C+ZEIStDtb}!4bpB1jop7tqI`TVBPHE zG}%{)Gchf?L?X5Tsf)xK*f+Gak!dtuB7XG^24Wl-G1h>TNJp0qt-!`qsC=McBElKL zievImx(HXg|H0Th1&I=MYl5eE%C>FWwr$(CZQHh8b;`DF+cvsx-y1P86WxEzORkI+ z`Ixcy!iV!SQd){~`x;D0EoI}a%u1qxoOb^8GCT#SY-fH{=WN=)_DT2}sEkG9?&^fn zBj`3=iuE{Z*-?&+9dwh(%G1!?1zZZAA}WITujSg^H>qVHMun&W)gw09gDY{cI#*K#h1pP^J4n-E)i~;-I=!qPOqy zLF9d6iRyL5_*etXa~P&%GPE(~UG5U;D{boY;l}pd+q^l$&3C?K-XlNO6l-tRbww|Dj5S?lnmiV?* zwN2W(_z&!_(|){B=NSv>I>@F=Ldo#juR@?5m$(GUZr1hLURAE;-Y|^tEytY(tkN0E zdlWYuWUNQKcB1fb7_q7=>jm&p?ObsMO%}omqv!@bKW3Ka7f*(?%*Hv22O_|XUAva& z30)Y(QkkWft053(=3=60JTHqw%VTqvdEWC^$jesL8ZjRwXAE3@5CJe)cTu8k7sdr& ztGzi9YI_lC;XB_TrfA_MoVtWAUWjfFV7v*NpifI|1Cog6LU6pKC^@gDevPaAm>Z&Z zY7^{LT?U+uQbg1bu~?xR4oZ9W24TURom1yrx(v9C$T=YFDIp5wG0!oe1zVyb=CF>z zy?Y>rv=;*+6~K%+8^kPO^EhHQ>(PLTCgK^kJp*G-YDlA(zY{G5QnhG_Mj}6y8Lr1s zHfJB0=H>9RjpDsU*Ua*skXh!QC^>TVn=YU^Cc<){!Eo1sjIrvz(!{<)sK=i9USh*O z?zF@RvytT`6|9_sb_}ALoOuNo1DsX$MnI}I{NYPXkrx_elxH+JMJWWx*N((=4pygD z*!YPZDem>rO~KYQhS@QMK~EQ+00oVs!q1T3lkA_6OMLU?fKbxE%!+T&35rms9+{$c zxxP;9{I}JB*h2X|OrYWQQ_Dm|^yVF}!G~{=8D23GUqMyx02fpUWZ=BvJb?*LmxNi1&39OOQ#WTcq&UNL7Ydzk><+oq+c~5V5e zQBkw5j0&yL!6zoRg|7_S941{%Q(@C_3Rpf-b6SHy*2Hbg1w#ZQT#b6O?SA7k-Sskw z`SZBq`ts+Je;eqph7wzs+%Cdt+RFBv0sB-|q;&D|lap{SvqhSSu~Z)MChLJeW;F$u zPL;oF`kPa+QJN#5%y=iCYMZUYk-nBkt7kn5HeiK3Pa3VtcH=&Y@++{13P+S`w3Z01 zcqmd&(sLyBsDptBo40W6&@8~&a(pWKiLt&>d zB4HnH$LOJKb!R}?0^X!4A0_bXd8}k)lBz<*5WshMwuq=+%~ai^y)@N?(~8+~IM{N{ zrzV_>3ct2C`=AF_HD+PlaoO;A{bIn^?vmOVY(c}QT#Zzjyhc@+8mXa?Y8^e6bB%!Z zDN8L*@?o;MN{z?m5aHSBhAs$r?bKIg7NU-_dV9%{XanUqTQ4RC;~~^SMMF0Wg||J~ z3`)YP18-tr1avSF}C#GnME4&{BF)^H* zNh`>D38lvSy?wRW%cSG&R+CN@8c1W+egdB4#PFE;n$i-62X}88G)J2kz-owBkG^ zf>wMRdHY>p)zoJ6ek4`ftzZ2sB4f&(aaJ?p>>eY!;0E4z!u0~?GUg`gUiS;nD$aqC z>5Wr#d(f=8-CpdfSl}$?AQR&l6iU(7qmJO#2NmG@=nEGicUCENTnI{<68mw$tyori z!@biHDjCh<#{;N@C}g3()B9NUS*_!aO+cuZ0<;=#tZPF)M#wOaP>Xfmqhrh*MM4Gq zJqxv)ebb~zAE!_{HZ*|u4DzhDl;D&)3R%$fe9ppvm;yxV=i%5`@ zH5_Oo(CbZr1+E9oEmp#RzotPJ3%dI-bToQH;diz%o~J~-3z?&$$*2WsdMNWYJ7Vtq z_Fb=Vk6v|@r zfJ&kaFwZSV(%-$Q*dW)7JY-LCJcl(bN{WjkV%_rJ<>ZJ|p7+TVk@AN)TZ%>P$9&HrxU zWt^=Ij2-@a!X{|@+aZy@~usk`Sq%J*P-i(u%r||TJf8yV$=mm56N1tI2pJclaT2q_wk8jD`hhiow z6C8kj2krTs-hlpY8$xLM089h{(D-B!8Flh`go(5k;!~qX%o{S(6~iDKObPE=__pv*^SsbHj|l*Pg}Lo*iuW#bbeJMGm+@XyUX zj5VbzKTw%{t;NUR4Z$pWIb>tYkH(FFu&|k|dnH3FS+8S7)h_A~uhZq|Nwm{buQ{ss zV=LYgd8jL18OTp<08%$IKb!aw2{=ivfL z{Uk^bj6Z7be>LN~vrL|;bD{Rf1thWwV^m9QBx;FJd&{^!N=~*+6KTnM5vysw_Z?I9 z(>b1%9U^p|h++?;Uy}+l2dMsN#%B@sa2jXlsNM=oK?qriHe-FbZ?X4OsUUw#i$Bql zyYW|qqDNF>4NFFKR1)!a7w`#((60_fT{RX3Z>mLWvzy^dQKkWWSyxdMNt-wS!(+W; zA6PbpqCOdGsYY0o+Ykq5ru1~+*OUA-s%A7ldDfR<>4Q6sq5WyE=?{^ETUBg+Jf6%m zpDLf`6Sr~QViKqW#?eNWram33p9m>T0i~K~>fcqfz-e`&Ms=J_%e1Isj*`6ewv=i% zw7Be4QE=2y$yI!yxAnn}FpiLsay4)enHA75X-cz+3-O4l?hH%7s!Uxu#R)x29SeY2 zE9dbNM!Bq9x@um|yE{W2z5wjIJO6BPp#^CNP-AJYD#-BZN zX97DgW4y3K=);8A9&8osL!V-=TpQ{nOw=+>?IE0Pe?Dut)QT6h4Tw!jKbYQ1T85rF z7;4LiU!XacsRUn|KeE+TyUAK%k4&f>Xpi=3snii8$3#IkS@lTh)7wmQ9fjt_?Oi? zoQu4>v)lnfTG80{9l$d@gP`@X>N$N>y)e1$uyJCB+P8>tiXH}fiCp8cs79$x_AC|Y z>(zs8LDV;%zR}FMnO|GQbcEvSB8gs)_V7w{cLVHptP<+PF1ypIZRYCw2Cs*8w?nIE zM3-0<@l;~dUrb1_buJBTbGSsvX~Me6D+oK$_4Ze}P>?C5-tlC^_>$ZZH<`x{zGvo1 zp8)W$e606lH*TiebE};kDf|fRt8r#%Ebcz_i`HrXhFj=1$o5d|tF*`+O(EFrTH-5Q z=J6a{+gNH!wlP+fC#>gkOu@HFK~5j2%{+@7;uOBlDF?c6!cQmpE?v9*U^L0`n|f5q zUtX8Ocw62+S@apMoeTMu)dwb*uK6Kw63B@UrYuGsn(+4dYH*@+jW z$S23o{#u{;YM@!Xhwgu1$WFoD%yiH^QE`bQkVV&ufDGt&Jkgjx5rW28GOeN=6Q}9B8k+TI-|nfFC|`+ZLbZ65Otoq`c<1s zESkJPRR4)w2%}o!;rlWr-8InK+UW4P0KDJkgB;pI`vyfO^2jWbM8Kj@d(hnMF7WV0QID;-v7U+Kp(!(b{-FSGWMt^7QMdRfS%yg1v?PL?pQmpCW)z zEE)_$J6eFRjkHYigz|yz`1foG1nRbhb137Hg5?uag&`238l|5V5)FUvgmiNNB|l<^ zdLYCT8cXl*tB>&0hjhIMG8cq;c1BzeLK|swCi=*`1w#=~{C+UaT^}7-7cDG#XUh5d| zF1P97`0QKyA^bk%`T6wyuRC;jaroij7hTWsADbJx|JdB{+t}DT={x-nEB{|s#0vlI z-+j?W4=$r9Fj0IoucC#3ST7*3pAQDEeCt;bV1^t%BHaLixol}v3!e*ufQ$h9E9elM z)+{Zj3F(%eot^GDeR=u$`gXh7p^8D6saA->z}#3PxndCR#AI$q zlqQAWCk`#qQW{E=S$w>$glr>6vg60I;^M1sEtNrwdu;&RJXH64hPwY}WN;%?JV)lp z@o2cg{(bI6`|oQ0&ZAi$*Q<^E=)=~^{Mw&F=?=bhoUQG)tHMT1Z;;545wHT!ky9_4 zJk+sgFtAM$&%e~0Llp07rK2w31E4ej!6&Ecd+hwMsbe>8NbLeJ()o3ns})J?TUu`t zk05=e#X5~(Fp$x8RAo#x%4-Ry95#z^&N7JHuaNR3Wg*8f8v7ysR#{P)~*N(Ovu&|E~IE?E>VH}a2T+H5!;x)0@e_tF->LJ!?DMgG4l5M z`eriDPsKWgZ%u7OJArFTX-UhbqWoSpxk%!evKE8w_hCYTxs*C1XQT?*rxpouTxPkb zb9C)I>TUINi&Ta2Ig4YlX)|dn%`W2QdA|@td1PXH#$t3rTDwpb1NxFPK*<6lbrnRc zukiJyF=bb=fB!P~fQD;0-xx`87@vurcC)KPdMU>rej~i4q8x@ewTtRIcM7kIxm>7$ zYzqa9CxeIwB~{fb!;Ca^l81W^-(TmauhI>^IP1exBwaHtwI}-W+PZTB2C0`M&qWW{e*F_AW#u+= zI^ztcsD`xtk&n;rUZE-zwvPe`S!?UPx?l#!HgR?*48;|U8wg!$sg7RV3-xPbjYW*Y z>}Vts)p}f|&zuOgd-D=PvKjF=f<3X4A~VEZz4QST4s#~Omy}@k2}R8q=%W((056V1 z>po4jBT7k<5ugn?`K_d1rvm@MUUwHGoq{Wtn`9AQA{>HGEqj z8hCOIe32j$`2j}f{2&bu%p^pU7UJc4oGm0GGwo*k072eP;@5i_+sW8Q7Yz=DG2AR_ck>bZ(FSO%e04^%S}XK z+}uOx9Z&bAR6X`L(OIl{330Jn7iwlXRf@OHT}h$S50yVw-6kK8KdJ-b>!m`BoGCNU zk0fE&sKzBj34_^^QSI}uN%WC=>GSq#PPDZ2ru-Bz^pI9IzNG6=>c0d+$aJC4PF$`n{OW z?sYH9CPQc@?U9N*wCK94Zdx(l-f$5~Qn<}D>yc8Zn5DUeq~i>(%WPiqks%DU!pN`O z^mx9Qe$j58QtE4+i0xm=aO1Re=$UZ+K_$tT%EqvwWq!x0YXO)*e&RM?g|%a7D^<0q z3Nw{b*N~G$lak`O7qam-25XnNJIyS`uCgPMJjQk`d&5@IEI=m*h?@vLrP3WFFX$nc0%*9N%&!WrSakbq=J`oPTbbBbvAFJBkDTg< zh2VC6WkWH|dj>gbhMzc{esOJ(^+M%iNW*Ce3=E1ns`ms_0U=TBlJeGmOz0^u33mRC zyyl7r5OqH6NghjpnNye+nei)qqIf4sebYGZ?dxYV?`@4^LxlB;yE7ZZYbSH~(S?G>!4q(2;+JtkdSMK>id~8pvLM;q4eHv!bGjKz!kfam{7KWf)J=vBHT6CUBXLr%7?uvr zxv;Bdd6yy`p!FS7Smkt-LoVl885luWgP3(r4;$Ah0Jwa7m3s}}6v<>e+(CbO#~7t^ zh?^J6t>HruR%h@b94+7q>JfT#tnabbx=Dhvm6eY*VR);ZAGC5#4&O*<^|H)7hVU$9 zlacvY0F{$UU@nJ?1)S=~BnS1|{Z6%P^J<1`yFds}(!6MXW--8#2k9g|tQvz#kRa~g zNObWm%>+{C70^aVjY&XL(zV8oRm3dO;r)r|^!gnVRqfbQ#!qy$n;{4f4A}UhBJfqX zM=9}bR^#F2?So7E4K@-yV_$G%js;1<}k~5v&{icij?Y3qt%!Ab1qfuE1cH} zjf4$Do9O4vzA&riPihjU=oLJsdM{!Jwp1)-XrS}zgarW4Sj+Hcu^k0=N=}(Lx)y%0 zqd=+~IJv$5Bdm;Uz=8eLVwY2-__m8Fbw137MiV1%=X9L51`fjVAWgC}xj_{v`{GVX zl=T>X#p;2^<48Hi7HHg5lJrm`YCoxkUMdX6l^Pk)9qTPZzs@yJjVlLgA zIQSzCQb|gZ%W^wB1Mhs@^q}ad&Bt5l7}7OC&a^x$%3$nxZUbv zll#uqSH<+VbgJ2;+jNJ!@><9Hyiu-yRQw6a7e}M6L3eXL%siF`9V@j5nze{@Bq$8j zyyoNBza+FmY|_!PV!Y^lp;8$Z?2kI)y@+WsHw9Ii18YqwPJT^bSS@~z@C5q2Lx!wI zqQ9;1H3gUc(3(oh$H^Y^ardj-WMmQyunlUsu$|~x|rUWeY z1hPw2a)8NNN4Nprg_(bdZ(RF|H>vpOb=}rnJZ9?AMVL#}Xml)zP=QMi*H>=EnSD&J zky^KiMGzRq=C#DPK0a(Hv<|eUj&^K>{nd5PtF5Rce_EfR2w(0h+;RXZHX7%anGZWy z662RL%{px4pIqfu$K)OEMdGG=ehotQU^!k)oNQxBr+EMzjUR1xdH-ksd5E@QBthCb zeK@-uuJQ!@l;lin{xEbCgu|4MR&3s5Mo*Z-WUL7M=y*_WeK!n6n-=!sOa`(L5Yu(z z#vF*sP&`%r@YgGOJDA5CXwg9{NcM4ga3utn^axpf89l9Bze-Rx?KIcb%f2Ad!3B0% zM3@bbCKM?w;yUghewC(|T}^9C4FTSgN|Z9>O_OXs8)Q;Tr+@Ka+e|-&xKVF<(Qt{i z61C+LT9_NL{|9|ZCx zT^s1|PV8Q7Qy)|%ABJleKYQ@>)FoN!9*#9XJ&3xtnCFK#fA9Kh#j?S#nyrBl~P5o-oNWD3C9ycij;yw!4f8yn#($1yr zl;X^%xDwyBSK&nCe?~@v4rZjAwXLNUH0SD7IWnZ2Ln~wzo=#V3v3uy2uFl_yoVhu2 z5@LW#+NHHKi)w^N7Uu7w%59W26BbdNxM;CMrJN(%ImET2V^E6^h!w3BGZPj`oH_}x zdsvpH&c}(Ii8*{Iv1`-MNt*G+t@%bU=kH3&ZIn`p%O_^;crKuMxm-z6$@%PX3==Zl$pm5|rb0*jLM zDRMQ!m*LEznUhubgbYwVzP5k0=5NO{Jw16(hUUakKV%Hq0*p%c!xz|~MGK!x_rpx2 zO8|<@faz7`x&9s5(!uAG0?<960zUBGr6VkVBOGuKtn21y<1Bxpu6qxx|CB6{`S%># z&OT6kyu&4a9;^y(`q>`e+@jZdmhL(dWCKv8|BHb7lw2gfI60ie>5fH!)_5f2fQlx7 zO%Y-oD^mZ&h{Q zuU9=O;-DhCNF)mS5Oj|wwujA5%#Y*-~jLbKYxV(n%VgiPTg@mt;+_cLhVQjLSlI^ zP3e!N9*<6&7g@nCo1tvLZ{739s+McrVhdTCo=Ty zF=;GAmaN^}8LPqikERYG`zbT)H>}zU(kTM#deSSbT4t*>dLf%(05F3RoLRt#RX6aM zGz|l1t*W5~8h;a0%fE?^QPBLgA(S%a4k9qYOvymHrcNp_!N!R|I;IV{pb5dKCKFZQ zy$CqU>hz%tdF&eFQWk}nXO6$pL(}OY*`6fO!xqtb1{6gQ88SXp(#+YCsQnSludOHy zpk|CxbIhAy3R{?M%o;Ym|^k?x86oNQTFh+-u-pr^c8V6 zqh+Y>vh;*saJGQ!4`RD(U0vBH4IaoXWwSx+4z2Ox^Scae`j?Z?&;UDoycg{xEf{{? zQJ<60n0b1fP?e=ed!KyR{T)Wf+IuFlfaaw+oeet-Jal0GSIULfUCp?x4~{l9i$euH4e>ItH$P6UETk-deF##y1j9s> zL0;XEAOU^7uS3DB(=sN}M$YkQz~zA|+1glxd6NNJ+jgWCnl37hgr3r~ZBEQJtRW*B zv3_4hbErlmjpXrC(0{gSD0MV3Pk3ssFdSbVQIMaNUP6hRgkLoh!hYIeKD#BXG@ljK zK%KG$Z85k4(tus4N^Z1u{I{v;@1h)BL*Bo%7+N!S#KD(G=dNwNP3{>5mF{D`Hk9jk zsK}n<1i{?97HMzI*$-hAtDAw51(}ggWg5Ay5^3+r$AjTK;Xhlv3TSI;3ki5V46%yt zbbIArZ`4-g;q$~eJBeOYf{U%!MPggX$}rAo>`gxQaF7b1AI?6PkzN%KoYyM9{tOsw z8U$LL75h8Ck9l_H5g{vSwR(E2J@Orw%~c+sQ(Gz_$Ezf(&G!-KKjf7UfE`*LGcbQ= zdA6!3OV08ly!>KYMYxl((P&3|ZH!AoMIx=vrQC{whHM$B7L} zV8Y@cftahX%P>q-L~?p8a~^3dJDM=J7$kBX$+tLohKX3WdsFg{2#*~ud1U^qDU$?0 ze7b0>BJ?~o%a?SsOD-DLgVwc};PTP5zA;zO&jZK!6|#&+2l#oSmq!ZZ5reGLAMA&u ztTUME69(a`!wH}(H0+0T@D&zr?kDQ?8=u?nCU?YT5eaHU^cJe#vTOfDu0rEYh z`>^{F`K7eh9n5>6@Jy2?@1`v+=62|jTUTPl4Uy6Z4#hhP+bizi)!gN-md#&xPv{#c z^OM+BaZtSCFKH!DR>8X?EVG}YGRcdQ`ljZQJuY+1N5$Qytn}fx1x9HlBfDVotzL6j zXxW2X8O4EAb3)^y#k7j*y`3{>_s#LbB6n6T;RpbhRRlc4gA$KLt#wiWTZ(M>tSiEo zLUd5IMHyeTLLt1CsA4@v;5|EzJSG1KCu+oCjs+E676q*QbO6bEq0Be3c7=@UfnPn$ zlBz$&pcs1eNJds@cQTWRbgxyZhO|1y3Nbt>+R&dh`CnIvg0zrnxkR|DhNX7;&n&6mjXHGU72KO@vCi7B}fe$`MsFz0L_PkuLIS zakeTe7YCBUI3lmh{^(fy3DQ9^&ci zaFls8Y>trVvxux1ozg7Dc=DLh)oeaC&c)ujh7I~6c~_=+6H;tYoT^uB=>ECVWTa|@ zzVvu@h3|1cWfW4XhJ=8FsLPYF@Tl25SwXM}7q8JY=1=xhPFosfE7FrdCq^@J)(G#g;>HVfG z4))w%m}kL~8LyXDkKuli5Lx6|;b}w&oy6Rd&H?K(lEwBpLRD8uaVR%tMzR`SEqB1t zW=6GQ$1S2z==K`|?STUA*7#fe_*>8*;0D@ouA742NHr3U=x@}6!`lHAhad^0?~n$LI5qZA(bPvFwrpFP{HU@vUYs%v!0P%L>)c*PrIfit=7@gXB_3HNXetx0&=t!X5+qtbg zZS7WF+esGTJy0+Ns%_};98Zm3Cw$07nvrSx}o|dP<5j7ue_5K$Za_7d8O*;E) zs}y11U9n5f=83#F$&~DJ$7Hd8)|5L_Kx%*Ok!d=2q7{(Ejrs4*>Tv&GoE6W@AqbZr z>OGjwU~p%e={>?XK5g*e$t?p0Wd^L-+kcd#m7q=OH1 zMi=;{>#M+boaHNJ%|T(O$k2mE^6149xfguH=a2=NZh?%TCz5VRlxJ{8uPQ-@trDYK zBE?Ci60>gg@~ug8PHS1@8;8;J#Zt3Zphr?`1?j8E6V^_V&jf4bihHI_Pv-zy{|g$sSFL<6XLRE$k0HR0E!ENAsN~L#wj^ApnnTVg>d(6R zOk8@LL(l_zpGCG_T_`U7PfrtRad;g3xtuknv4!p@!e-X1%rBT}rdS8`DvT&Jj` zQ0!lbLpc+hpAlo!e7trjzVD7mATv^^gkcMZB(foh=R6cM&>FYD=qwob`7ruwzE7S> zfh}S3Y9Xg!VQsJo;wdt-WHO$uuk_7Dd!M*%VNiDUF<#|MsZAN4+}`f#sgfxWtB!Lq zemjAEncHk4$DrI&{@gv>FcXGlERX-Ve$Ao~#0eI&>P z>Ny;#X`a~Wd-i6Mv-5r0P5Iy$;%xFGb@`1LwlJ-Q6jIQ`WrJZ*o>*$4saSYE4d0r5 z&^$1yxJ7IbOG$o(d`=r-61a*tC+i1h#6a%i4SzPwz}sKJ>6`LgB~Gqm&T%jn*fSG= zjFBP=OZ;$n<#CN(e3|YiGNj=@6)fBKL7;5zFZ4;nH7XDE$z~A1e}uv8k`kO=;Kw=b z3B+yOQR;F3LO9WjBoV!#lHZ@Ku-YdQ?apo`Ip6m*AJv2=EJ9qW0b=7;oUc0h)R%|n zM(~?zB4sOQ$OKnd1y0j$pZsGv-9!>T5s?1%6IgdD*>HLX!~S5( z>Zjesf-0aLQ*UFQ!W=Mr2AJ|IQ4h7)DIj;nWjKx_AcJtVM5_U6vt+tnKhUYQG^|-^ z|Bcl2E0$mOwJXPI7tV9PafyEAVn0!%R{A$4$W*Tk|K`ivCx^KghNZ_j#3C=ovYq`< zZUmmgyVW<~idA`5N8ezlH=Pp_Q36koECQvSQ2LXlF4LXkbmKD@fj%V&e?U3$QO+g? z#9pF^wt$LI{T`9e$KlLl_}^WnKRu}CQ=4TyXvA!lGS`#esjD1+6D_hHEMmIFH8!f} zyexN|^ zGK#n?cO!FDG!TY!v{AxX<%f*uP&JAxt&|@-nXkC@M!GxQm%@17f$J8DI5vqYSXb~D z{i9@&P;|CjHnD08^`e_j0XX&ThOupLz}y8jhOw(I0XXodtAsY}{IO+MzmfYlp8ZBn z@z}OH!q~R2-|znGd%>lRB1h|adjj(&#n%C{q2Me7PtwhDf)dWH^6Lir$fKVS$#-J$ zol@N0NwZ&1R2^%CCs_nBK}siV+FC);rLBA3f6BZN-Qo*)Um4N$UqvaGM>DvDDJSE% zJ26rLB%Do3FJ+#_Hm4-Eq`SC=_Y&iBFMDdYicgGBVIjXf@x=p{#j@u$xkiuvkQ}AI z)~BiG>X;rfU*jP`cIgc9?D7IRKj;OYv`^8{-jy+{voGgmAn0t-YjFd1>v0oeP}7W39krEn+>5DL0UoP`+<{zC zO?a?{vSAKCa7X_9%>Q~nMavSowFv! zE2okLnNstg)(*A)7Ns)Nob9)rou8gopR?-786dT2R&TNZNk7e?ze7;p0Oq+!;^OBy zVxl{KSghy~tYj4iHU@UeD^97skq7`h@QQd0i!a3t4niu3Ak@|^((U64xD<7MA5QsGMVx%sI=_ayDRI^cTr{O)EivbS z!_vpSAs8E$=!)XP?~D}aq9f)DqflcWfv}SGQhdo_7K?O~nMrRd9i(0J=!9dlDq`W4 z#i&R+3)Fcj_*uE>*vIxh5c>Ropdx{VAP_d}utc?Dk$)$V{}Mg_B}TFpG6!V<=FK^q zyJ6)n*@5itH?cA($w*KZCyQCBF&6_>x7VBjVxXDChT18H;E`VNRE17Jj-%^GrpP1q zQFJ>bhKVrU-Igv4W>;0`qyaG_reNhjX9+`^&Pl{q+f4h;Mz+#dRX|*meopi;sY_(? zi$jmI6a?($r7K0{#V<0H2Wc3CCZ>o)wgs`kYuZBwt}I&BKrvR3juTif>tnuna}G?7 zU7jB6ZPM(kI4NkPi)(M}5R?|_r$g0_0sXV*X~A0>f@^<<*cF7@(yHD-vl%5cru@<( zM@yvSf#fFea8HIqDimHTOat83fy=&1&*xFc4Xw~t!`sCM>02#^9zSPm*y1AGR67*T z(%*tn=7}RYoCwFW2ebUz^TAQ!Y$KP(JnXw#dCWt?!fR0tkm`FBK$(M$&>O>9yL37? z=N5k8ps0X_00oAM5VKdKn!cF3YG)`~ZC<8CZ()?o6F`hZsYiWJo*1IQm8YgDcJsfw zJUzwefO2RNs|%0v^Coyc=v78tK-Q9>Z!T-e#Ue!?G*^ET!b#j;9?T}V?&lPrDKa9; zY!0&8vbNUgj6_mkEJxyX5*y@pV>PbqWF;()vL|b;loyn)MZF;=P@Ean*&NwDD{W-* z!nIdj^zm_o@w@|o;J0@1;FTU&I}0SzNnS+YiV_9pqSzOFr5pI{%&{Sb4)@mdtg5W< zO0Vea|71Hc#biUmLA-K28 z^YG&pJVhWK+Um54gZROO4^mMt?0rQF)ZsZxvRZ#z;QTJJ6X3^}6&LgdFQ2DxasUa= z|MS=YS8--SrZ6fOJ9cp>Br`FFOK%)Yk&d3-Bu66Av)norazP%EIZCE0HF0Y19@($W zZrZTA>}V`@LL$uwt(ZE$VZ>NY95rv?wGn!=s|>J%e8=sTyP313DgP2*9baZlCNK8& z$h7pRU*RhFuTj-O{swLh&?be7kfP9u-Do~h%l-|lBV^(Jr`0@?N=lQ_zExeK*x+&9 z=Jvp-+zE9Q;Rhwi0{odmalrgfrT2#X3IewnxEa2x2$}eOwcg|1 zD1QfGz4V6e-8;oZv-+VoYL-kbEIYK2%;6Z`v^#Qr zV9}=ZncBitena-k#zJ;QTR>QLi0n9&h5#%<xl`7DO&e$e-57MZ_BJ1Fl#IUM*z&q*(~v(huSGt zko+ZH>_3^rV$N87lVDyitYYNv^#ii<+ZEnm_dz>U)vIT5rHv`p>pW<3*T5(z^_Uw$ z_OIpmg@Mz42oH;DAp}c1(&c@;a&K6hqDn7r98sVceL@+1#A!XoIhMUpvtdiKA>2A> zU!lK_`ka~Jnrm7f)H4GxDzdim%4|j;3}$~Pz=?3Rdr#c$%$?v<$;xKt?wNk)RKeB8 zM@NmRGPJZKsAf~rrOWb#nLGYUn8Dp)?`J8I7L7FH`(viqZLxOls|dUkBy9vaA~Odd z1|zq^0v7QD%f|WCd{Cvh14=l>e7L~}!KNdd#t&V&r?{hiroDR~SbS72?MScFuDxxyv?tBV4pId*T}>7g%K_J~x{=yf=B@`F6Y4@K{_B zW6ddCt&~`9vCLOa59Ul*Z7Ufpp07@ZY<8;|H8jTy?{>Ri%TDFJrH}*uuo?^MIy_II zK(K0xeX^yd?Xnu}+mI(`!qqA37#5k-X{*twFbuP9#4VW;*D{~sJQv?0AeT2q13mSb z0*-$X@#t|8ssI@@`En)UiPj{b>P(;-sL>2s<@6_x^_{3-3*F#l<$z1;M7*N+txop5 zUU&Ls03OH88qAk-)l?M}6jW56W!uOvojTa_bYzLRNFxNBl{OmD%?3<`WuB2^jdkh4 zkK!B-Fqhv_ZyT0+0&D|*1ZM=1*Mf27{NL&s-@$!2Sl-uGPf@2&oqv}-<1!&TyRJ%c z$DgSGg}V(j9U}JlWjJ9Y{ioXQKeL=<4J?ceo&FD{UA5YWE0QYq&*o*wmKA7%O+O<5 zC>T*kkQI3niU529sC$rV;NIN4OGA1cP-6PkwG|$8Q%j15re?DNvl_Jpa&lR;Kv`b3 z?5xJl%?kTB;AC*#<0Grk*_=k=tw*Uih@o6k+Q_XV%&&YwCI-4={^5t{`Lx3wcsG?tcK=n!hLE z)|&8vVutxSy8n9n>LH1xIbl4hRgz8&<*x$i{bgHqVIf8zMpYtT$AsZL4l(Eo z<*J_usFozj6BAH(hu?K@-8`D5bMrKNNc!oxy7&klGpaFLQKp4mY=E@e-{2C*wWQwX za-ygsZeq)H7)@Xci1zmC6^Euo>h!2=@O*VWo9!-Znc=z^mLsS}#TlX5AU-rr5F1DP z5|YsD+U4y(4+kPI9mwaiw%T*j(|MB*4 zgz^QGPDz7&ZM|os<)(>4j=8q+fIia+qP{x-ATu`SCWpo(y_H-+qUhFPWIksoN>k(`~O{>yZ2&Vy<^O(nom{z zo-Bf{F&K!pV}B`!G}{rAWW{T1#tiz39xy4e z>{jYMcujDZRPX7%F$2Jz?*W z4V~ZfMp#*qc1U_)#GVs^af)Hmu-E_cn7I?g&GebkS6K*xndBS@lA?p;1oTUFo)5r0 zcn4Q8?VI>Vs;UJ0HB>wL zf&KKp8q5$6Qye-^;i{#Sd4F6Diz!^5qyRNED*9NnWMv^-Av(mR33SQHy|zi|Dvm;A zz)2&JOQw~{WVaQz<8=4!jkTcYZsICbw->5a-XN9jG#ZaJ1hLUs6BKVnBjT(7WN62w z+{AOJm%6$KBLQg*u3Lwr6y4C*B&GvFq=daGmD&^Tur#ABX1nvJk!sBx`3{3Ba&E48 zd>_4$$a$9&7JCY36V$eNHuY|JhK@*ZzkHH^)Qiyn5X`n;8{xxa>Xh?R^|WfThweh_ z<++iBb)tX9?o!x3^x&!@&J~Q*T;jc)Zqo){Anxd{3i{qZTIWA!3xKV0YTaaMYToPn zCKaey?|p1Gd~`GUl9z50WVfu2SGp6h48A-HKOZ9m`rOy~5f4>p? zev=j~hs!ubN)yOP6IifqcX>Ote|!XQ=(ZF{C)KTb4dq`;*liM&dAbka%uBgQ8z{?q zlbxw2dowhCY0xJDk?6>kP+KhAMAU}ZV&CZAqve`O-1f!eyp_EP?Y2u3+g|dY#veUj ziG95J|J1+e#%aG&y=54bdU?Z@Qo4Oq?e`LUgBO3p7Yzq~&7P6p^jM^fNfrB#r^Z9w z*0LIU;GO1=)#OcK%_Ei_F-aDCj;V}fzLfQm_y0w7dDOgF`sG%XwI>4_x?$gbETXEa ze})tq;W|~jNB<55cH{bnPW~XK%^iZpcZwi9x5R$@^lf!Y*D!NY+sj5;l%u{+xl8>r`WN3IGv1Z z4CPP&I(+6@ysgcEBQU#RIjW`&e$4;{F~;=-ddtG?H$>q^GM-C(vKPt&O3RG!ko9k) zKgHT|n46LGRfP{;CW7541ht{v)b8k$#BWe_%+3fTkjJrbD7qwBgk#y$1|q8>|mCTA|{s4>UYTe8thNLgK7K2K+L9 zTS>6wVgz{iO6U`c%&PBV-6Be>Bbmi_-aTU`()i^KT19keeHTPY)hNc24aEndeu}!i zAgZXaRhqhJ_gb~$Q@&d^P3;8d3BnlMql2Nd9EL*0fayo%UFcq^27h$%4{V8Qpdp6X)-6AL32b&pFWLAMgxCZ?b8(fz=7U z2FG;Tr*yc4_s+zG?uqjp)D5?NknZ|yL>e+$8gmLhG7OUCgyJd|v{(7JOzQ7!~ z#lKa#AhkYJceTKlV}NHb?fRw!;&3;@$blU5k76DQ*f#=OSR+GK1)S@aTLWhlI*S*^ z$QnWrg1WtP4$oYnt^G(u3p)G@J*3VJ;k^!ku>9rz%M03ss=ECbmCF`gmvAA;p;_@! zCflLk^s(`UT;1VW)s+;&{8KcrTu6EpTQyp4j^}t-0kQ4vC-<=#j&gF6 zIf{({Gwj(cu0AzY6#T5KY9|o$P^%mdCFVeP`l}KS*^VCxxEE31;c~=z3S&*1D_5iQ zAVDUX(;zE(_-S||Wco9o1CU$a9(-#uWbS%(*?ROg zdF8*Jy!H8hg7b~$j}+Pu)|iA~YEFcHVjHCfc?pg~j^t3Ox?@<*yd|U!JS^A}=n@KR z5z3gdU`<+Zu~1n9%OaHu>9t9L*_fdw8}obH>ZFmZg$m9bx{12tR4ybbW_0bMD!ry; zgK0*vM6(7W_*Fc5+pz+hlxNx)0Jz^$=01@e&mqgggRG3MNq58Olw4kwFcr z=TSd5HAPjIk_gQgr(EY2&de8F~K!kD#@ZaOi@!OSW`Bn%gwH(}JVW;xhQJv2~* z$6m^|n2cKhxDBbOI!idGhP|A+iYTI(#5=*{E@}Lvd0$e<8;%0PRdFUJfp@Q}bY^NO zpeU!n+{o3LCbC&-AYUL$8ATdz+z$Tn7{Kx5j&xYKWPzsq~H;y(~p1fTmh)o7NA`oVKcgqQh3PkT)jm{&v5|!vVELDaqC678F zc}%QHK_9lTmuT)99{V-}f9P$_M8((GapgI>``6Oi#VKBv0cRPLrJEy7Vi``;d>zeR zeL3Rrjvjo(+)lCS6dg6arQkQC-ro)vNvQ6vH>>m{d?c)L0eVyp5f{@6jmST?sX?3o z8&I(D#fReD02zj){Q!2g?K-A$NjvY$&RBjVBla!GNpO&pswiW7;_; z-6iU}Sc-pTN1FOv5>$ADD9FY7hF%)zky&R^yOv0UCD$dS3^3Q zm<0cQ2S-WxhGLTWPb^?S3h&`_qwB{KIx&sujD@@RA^gZA%MPlUl-BfV$-Q5LpK1DP z;F4VurC+98FfrfrQqO>LdC(Y#{hY!ZhCVu<^ZVp;#LR^vU7tv^;?@pp^-!7QP;GKu zV8X|?lncI2&Yu?-Y@e8X@jI=daMqLlUMPWH3I8}Yf05rea{7Z>xI@h?Q5yO~Q=FNB zeUu+Pm>-lO-LN}OxA!QPA;J8nG?o%Dmr(&NG``M8lsC#newDQ@KyE2S1#Zd zDj&~s^J!{mo==2?iho!A}Q!4=kXrxqPW>lqq0d+cs+ zAeF51Ht4om78ov_A(jG{zunv;MQD&{o^vDV=^Cf=~mO$j`j2Rs|Gd_&tR$=S|3-EGKNfQS>I<2lKQo5_lsK@x-!PP+5wqmc z3nFOY3Q!G2BBaS-wI7n!dlE+Eb26{%7Av&v7XAUDs-5~_G^g>wX^qzwPHnw5fQ{`N zz>P(r^ES`d%ZtcFeksi;gmIZ*vs2(zaneYKFB9-@x_>XjxTY)ldzwF6!*g zwe98=sqGeZYah)8G%-$&V-^{^ta~NuFNy#W+B3t{{A8@{re6RuznV?AQ5@na#FH$K1Essjj z-~5Kp^-Z{SZOWCDI@Lt%pyrN0rlDDS76rNrj4_ni7@CZDwPth!!T1nrct8odF^i3s=!>^UBVm&R`QYWM1b;G-*yJXdHBik^5xT*`Fpmc zwV0tpd+S<$jlQ0HM*VEnNNM|rDxh@3f+A)HO-TA$`bt+LEAAccQJ6B4S+cWDgJNjm(%L$0lu?3z4Az4BDOgijV-*<}BO zP6x2SDBVuUKT7S6SFsVD+vrA%}mO4TS*>y@3T(+cvZ|CBt?x zqz8sUs*S}9*LL@M*w*7@YR5#60M*w|uyWLM)jaXD)CmhRsamhKD<*qYF~(B3f16u3 z@YzF*K_$EL3t&f=az1k@bh?yjOsM#3X0;&ZVIcm=&9o8eO}Pz(;hS4T1O(Kd!n@D` zSzU_R$D1b$*x>s$sC9oFVK?=g(J`RQ8Cp9D*xE7AET}MuW=Ae)ixJOJ#(Mv34Fa&z z*m_-C+g??3%>Xf9Fg&IF0f2bqgdG=D%}NjASw~VMZTo6N30K&T4~TX(F9{#Y5Au;uv@`Tk!L~FafsRr6m0B_vAg# zpHQC1;SmNwd zQacV2AyeS!MDF89W7A-=LbMn_H3;?cVWnQNyYO6^%#K8i*5j2!8ssUMUly)y8El0f~2^jAZcqj0=0+&px;~M5Uoz5F@ z%CX;zX{KUn)bsM|1ctB|lnpK$-v35QVWwxEW7CimC90bPN^ZZ<;aZtSP()k?BJUxQ z7v4#iQIuzUD#e-ZvK7mV!oR9$`{%p|dyp}vcC)K^p@WFeLXe;S;ZH^>9C(~wv zTa#VkFspvhObYL^RYrD2V*MMB@9w2Vk4~it7`0)^Ualcj>HpS`ThCWAIlnI6(bpp) zx?%Kb8Vxt5IOBZ?(Wp&^yuC)<_4^85vci8l>9nrEwuq-37=C_q^EOvvvEip#zvG*51`-W^LL5pq%W*HjcUB+kbbX?@Y zI9jD_%jN?+Wj^ zJo0DnR2^wN&c( zhuN<>i}EPDpX@hmAL9W}VGJUBzlQ#?z-x{+e6qVpXO=J<$!UaIY|ojcb^-a?GId16 zZ?&!5J<&SdV6?3Ee`t3Et3m5KTaueNAi|!w+p>I0hkv}yxfX4mc{l$M@Q!DqV=Y$J zh$60RTu2}bzJu=4eljSxW4~H*Yd8I8%p5mV2xU6T`cEOswUol6GRag;6836j0IzvQ z!qZkk-#|)flIT3gg`6$v&#O0=SBVD{J3a#v9K0k-kw#?9QFsj3fqAO^!ib@1X&X8l z&B5UaubL=4b$0;Po|`J166=9Fom8?;n8D-~lZ zVjPiXJK$Y*uT5XTOXM`K^mU5?`rsf87b#L_Mt>8i1_W|jB+awZ(VQi6vO*5zvtuhNOoZxe{wY zRCz95U(E7j0HK_xZGQLi`P|c2&5nHEVS()j-@jB{gG;$x7o$qry*Ii}8Vh-0C_;t7 zc66o&+c%fgn`5rx9N(c0nLw#60$Q7GrEF5(ZH?b(ofA>wN2jjJny3*EH{$JN@)yMr z-DrCnWEaTH$yRr{I!R;zV)Z1=!2>nbmEZv8y-{wrK{lhr`$Jmt`4Mlt!aDze0F_25 z?zGE*_)_-4+HoF4D@5gQNcT;_ke%#j6IF$)2^ubmiubLO zSTDY#Ve(dGI7G}MZ*cr8SjBS)4RaoNpzz6<4h+KUxE^I2{%JlQYNPDC(fOH!%lOo? zMjH&Bg`!Kg@c>N11(vAF0QKuKSOdm0UOBBw8&j*LpZd#lf0!xy;@YDB4%#>K@D1*t zrE4m#k$7#z8)e9C+!J1L#*I-yy{@dRmK?$Azx&R29F2Y!M1DH)Ftt%C{$SELoR|SC z&ZpWF;$naDh*F&A&~8Pvk7OpI!=EgtfMJF2)^ju3c9s1k`K6Yk!a_Npjo+K3U!$*7 z_DwTm0hp?wCUeeKBkN7uLY5dQo{CmN{Zp&*&qfA-LoRIC0!?)CsN+e5Rr_Z zyRSK$0&;WK=G~{c(*m@hP>%G=)Nepl~&G)m#QM&EQ<0$Gqwi=Nb2#jh1!Y*dj5Z| z8lELR#Oq=4I#0+Y#(2|V9Jn3X?u3~HDp(RDGgQx%#jzp|ngY49CFq)^e!qzi(}|#N ztG?_Pj^tP9+Uo)>cGh)lu}?L=_u1C#s=B21BJi{4ZH}*Z^N;8lcNI75G_evpU5)xy zFMmEE>R`lA2K^>+PZM}tkNPNl=vxJM zv~Vr+e1UKkc5X_cGm>wVyb1895_m(w3}X-!WNqqew@$}? zRI`T_(A8k;c&oD5a(`U>^XVoxw^$66**J@{}pZ(A2@ zdE|C&Y{3)871pjY8*5z6bG#wEaFltH#S^e?cjX#WzrQ{p#*>jE;G{7FvJt_FPuINDr99_}(W zVxjCk3SD^82$gC1r{_&+g{|C-?v%q`%ETcojlm9YeaP@<;-V9JOxGi#T?q27Bsqxt zsd#@`;De~#ZK(#Yk=uV&v&$zSSdjI~6}_&`1@to^J&3^AZs=0Rx`&{=?vp?IaK3pA z3yXf@y8jL$--#!S4!sRuFtQEVpJEjXyHacBudG*1Qw~ZWEuGQ%s(6=t!k0^Pp1=TJ zGS$s>&$EtIyb*GC0U}$KtiQViTlAIBs^NXxO&of?-1~qJXIH~@`JWn?(C^OB!71(@!4t=%;>L}!BBvJ;YN0kTxF9p$nqsw1gI2hUSIa0wnJQmeq2rC28YRkE z6l00J(b(Sb;U=QEiECjeQ>ksJA+Qq|(x-=@EhdwS>td=orYX`#U4io9!|>@?B-SMn zj&yLke_{i_Lvb8z?aU?8$cha`e&wBymC_(Q>20dU)gZdpyy#UUp8rSRCz3}Y zk}L3pFH860kJ5(qR6bwdhef+t+43=qox%|GoA)nFO+@aL4NNW1@tr*KzmDX}3cqWu zO`?IC_Faq2-Q1BAxEh!M+54JKegXa#4`H(t<+>>_t}wPY|B%l3+E2JRfjDw|ie)A8 zh|=M~(oD|WffMgI8B-jyg}V$H;DQ+svp9-QE6!ML{CYs9KtQPe8#nh(dkay`u3|^r z>kV{nZ+6N*Aw$rbjU_gk)_^Dr*P&d@`kl&>vZ0KI9fqV#ss6wshr4=k+ymYD9N`9w zOnTvKWBr}G-1jvxxvOMMz=Z<;+KG)-ysIbO?faLf+0?YyY5amLiU}sfI?c5bd?_4X z2(}{)II>9Le9a=hK}UK-R|A&i&6x>O>yAYoMa2qcK)B{x0z-GSiZ=~~S6mwNYG{Lj zq7uK~q1~cSlpsz-)!d4g;K~zzmsBwQEZZS+P>WzU+yb&mwdmX8-*E6^IwJ@K|_m^L1 zgk{#g!BzbeQZWq&biEmGYsA1Fc1Qi$F(%FEhLI95j<{cdZX)r~Kln)X{)SR4gS|NT ziM#L&Hwp3+_!KVgpGxSTa>3XvJ!g^bHA?dBo^>`DoS;!5BRIbNMkQ-bq4$!*p~XG2 zz!&R~JT=CZg}AnlKpAno*l2%nl2#BZ)r`s1q0d2YWX^kM^Q^J3W8KbNec`)=X0}r! zR3)uqzWpwyZM)s4!}n{1#$BE-tTnDJ$g@+zl|POz)C}ygw89W=N;4$hQ(a?Kg`z+G zgpLhT17@I*T&fu|rB9zmqaw|7c1QQ8N3m<>EtnlTwR{?hAEj{oHi?g)R#q5B15$S{ zrGEt7bA;4+vv%0l&94t)z%xYcd*Psu&{J1bxFg357cE)}!G?Q663d7J{zi&WV1Ztz z6w?85qwf4@x{RU|bn(J?O^Y;kFaHT^6w(dqh)nBrJ50z4R(K(g%7;k@=f%sk@$knihh2bAP!O4Hj8;;7NdmWHeH(r^KBERKV6oST1+DPKw;II$zk`aT9n<-b z0aUPK09PC-u@?EuG(Y!WYm847-+EJlX*DAO@?v%yZ->X$N@ve)kAIW4lG3(LH7AaG zc|rTfX7(KYocn=QNcP6EQ9;o6FOFgH}457U7vH-EU(#$GH+a-#hRe_C`d~9NHqT%W#Wd>6U(Dv(i7Qdc zkJFfK*K^3^w9Ouf7*<;a9geDjfWp3AkBf1WJyc!S>eqnSyMUC~!ex%E2YptDy}yVA zQl$=rfF>9Brr1~=Zq=t`{C}nUHbX|Yh_AWnPB%j~7l%`Z0Hr%z(Br7k&#n&2*8|ev zPo)29n+Ykl){J9(`-br)2L7L0Iqd(jZ6@OCYU1<1G;#o%I%)(`s2|X9*o$YRW5%X? z%b-CKbnq8XQ-4Tv`?0iZut7FB>S#_;gh~SouY+H1UuvHKrBa|=aa4E zb>44Q)Mr>uLAaR^HCz_60V{K?{1?U#uZbCoB2jCEM9Nx?^VQeTt;N8d=sr9-kqzz@ z*LUg2Tlomek(WU`Z3fOLp^mhQG?+FKXvy9oT~xZ%+pgI1kDLz2dSvF_8)$A$7|T6Z zU_jq8-auZG57P6HjwojbR zvJz|P9vXkx=LCdvQta>hl;vB{@7iVaarq8;67XIiYkLTCW22)XWZymgCgi3h*ozZmwZ5M0?7yiJO<>1$=8 z(;3q#>ds&|bPVCTu_BA z%r*7uoX4sVBwP0 z<+(E+#AQI^=u{JQ6We0NAj;-1qa}c4FdawXX<IJu)jn4?d`};d9yHw^fHE0iEO79cACQI>f&E*N5B+C^HCX+Lk_cVQg3eYtfO$f z(Zv1M2@?22$f_{p$=H~2sJJ=4I)UV^HmK*V2jYj{9Pmpal#}M#OZ(opN5=zB`RDLh zlfC+Tm_q15p>P^WLsWv*cE>5`QaQr2q!u_fo10T8|B|6ne!6Xm?}X? z-fF;nn6wUz?lhDlM-)vAVaf4SLbxQl=*?5nvec*ez0`0myYA?+$VLxO+0#VxXNbX8 zLAfAm`)}V*e?Q|l5PMs|UD4nXX!*CKZTm<&uE=q(VVf<* za=am7{v+$Z6HUy&qPZvVj5FDTF$i2>L{P!j%H3ce*r9Z+NB;kQN{S=!+qE-}>jD-~1wRSD9+I#R2Q+*Z6ERv>vovf_g(jLG0GxbYq z0uv2=+0>_*aMFHiQwgX`c%zBs=glwM&8N7yH)d^cEzC#e09$TpUg*%x3)*A$x=pjc zQMKI*Y7AzcZSCY_pc~;Gy|1vVo-8|A!y3x6Y{N_VWw4u5K67&A4ol;ii7|-#j^cK= zOTRJ8nr*{2O4a^;JE1m3-sPRWH*SqgX1=BsIUOWh2O;ch;_I=>2`1uVL`Sj(eP5@h zL0nSVitC=C-WlkYo{Ud7;4|#4y!_Zf_0R{#r}x`yfkJ^lpyuZ(iU z%M^3_)qCPa`v0F%)Sc`s9RHV$602_DL?D4FxM%Q_X>HJB720{0)5hANc|?>zl&oCN z4&6D6yM#IMT8-x{l4HboY1JT|^p6m^p)%#>zmR@6;vcqi@RWhyx_`lZz@hI<4o1aZ zgpA&fpRfB(wLXmlUiR{ge!{RuM}@(r@TwE3^y8}P9b(M=RVa0=0y?=c7)LO{N#c7qP8@bQ*=J5RUGarkb2{uLwod@+PF~g-+7x@d zU|I2p6~gXi!>iD}LFH3&+bMAz(j1hG>8Rd4c-mZX^@tRmA6|MOpo>x;E9Uo@V{Z&6 zl~K!jnG;rdtJm+Y0eTJ@K5&VNsD+4yE4w3cIPNifJH}YQUn8d3(E1gSf!~C<$FvY2^1#^Me(tD8hMn;_8mE!z9QBG_HrvbIxIQ+5 z_A<;`T>UHW-6I+OV@t>*L97krgdh0}+DDrdZX1Vne)?k#OY%y?SC1w5_V9Tomd-*$ z?)w6LCrCRlK}GcKATm!)(+EA_UNb%Z3(O>e!{n*%k)m~aeH4PtMigq7ZiKd7}{ z`mMjvdF5Nyb+nXLG_yxzvm1(&&B4m;5adV*~=eis7YX*OLfE!E^fKj4Y zvai$tKY`LXfC_SM$zA+Wfgsz_yrOaq-D+&QR=KMM$}L(V)MTQ2eo|74ER=#7CP#yn z@-0tUjt*mDk42Jewr5vyU3VdRcPV)BHz@iG?8_bGYRuaXxo&V74eBlO>LT}csoV42 zWM$%3UCJw1p<)kkTh+X0g39NZF7>+f88ecr2T%-(bfKC;h;`9VyszzyzW<3J@auPcyI+{?KA8U$LH_f|znZ(Njic57 z7D6W2~-k<4QNN}L>4I{a8qbup`(oVviAD3A>j76iYeYXCK{4lRagBK6OHI|IK2} zd7Tt|T6dcgJo1{{*!sBAA_21oHTygFR`(QwqQQfDVmuY22f5tnSA~TNhZuu`1Hx>y z9l$T0-<{FmRf>8_K`0u=N8SR3QXX#Pz|y%Hya|D1#S9fQZoGJ8ZMwc3zKY^m-wFy7 z-G4a^#ieGtsyL_=v$N1x1Zb$VqZyKnY=2OSTW70DY5#gGpbe?|4Mr#((~)rZGCif0 zEeBVFkG9m4DlfkN60BD3mLK3gaW!ESd2*Ly5fA;gubLXgLQ46U?QHN@Aa`LlTN|Ff z)ohbS;coP-)76T+DE=z*UyCKPc;T6bb|0lNLk9uwKT5>*SG@Bp2Vz7Z_)`t>>*G?; zSw`V!*!MqE4@&UfppA!(+dzH|PV!M}n-NO0G1l;!8H{)Y^$>ny;Bt{E zPZl0FL+$y@;q^bJ>RWOq`o~?Fe^^TsbatzfkVMS=LRhaNAp!+c_>0r4q?+M=cc7x7 zm!?IO_Ml=ao(yEyp9y_=)(@z?thy1*fu2}9HmJCQ^j#sF2fUVy6vP(_{SCZIH-u+b zB>E%TlSvo8c~OCcSl4=yoBclIs&Z~qao4^V9bUp=U{Js5!&n*rnrQstA%oCNNul+6 zX7W*8FxcAbtLOb=EIuF;!>(M(M>MA^8?A%h6P234fgO~t%)7GFm+qq5n*oos2hR0U zIJ{#$YP=om){(>@LfN=KFlOcCr17I+;ZS2fNz#2g*v7^UP_9m{0h^0)o+DQ$b&NsA zfR;s>Am$ND%G|Uh1I856kl^MoX3d_s(^22eV4h(kw?vH}5Md(u2;cyxdJ!N_Th7uj zA@3zsI$2~B1VrkwJLTPRTS1)?uNN$G(rnEErgDYm16ur?f8=NEHWX(r{vCW*bYXwW zMHbBl6fChmbd8_4{PYV1YceV-%ONt40|qa$z;__Lx=f4Z}1I`W1xd?LM&?5)bQ3srVQl zLvu?iDj(t%dgZmHqzaj@?`q6d{jfvdIm60oEB!yz5R>0p7*)^7VbgHe7oWyGL07dVIBc{brTW zJ_m!zjaGy6xrJGKNar zdv$~OG5&PJg4@4U{;otg)cw5tp4~3AqjuCwr}Ar#{1+SAK7(dZMp-a3$X}S;pCQXQ z!m?k2!EyjBqku?eW~^%iMh=mJLUA{THxz+9?5LkJ7l)&THpyGY{JM@eUT#-HA6x6X z!W*e3((au9YS-fiqJ!?xMS*eGfnd?$&B8C1^=FW=r&=L2OVXWk4JOWr4^>XOh|(n$ z!F`e+Ud><1E>Rae*`^o0kWb-^``35S)tiIzf`a;XJV`0vaoifP@wJXofTYLW)&p?IxA6h*^V*S-h7Q%zWAX$X=P0Y@SlR>d@0~RqUmqonid@l z$%U|>Lg6{8w>>@(sBPdkeAJ_~VZ-MA;u=im*7=S>^)Iz)1CG)dEX!Uz^gfB&KU=RSKL2~*80wz0 zs`jfI!2XXmE%g5wZ3NJh3bp@kLQ6%(COq+^25hxuFM-zFkWHp-V(3h-I6Mp zm7E~Cv z-%fBRRJED#KTfM_!?9lj%mowX zZQfa0JLfW%3caYzBP~^?xFg7HSqgZRbzEV+?j-~TWHDteQ7XZXZPASmPD@%2v1UYS zE<|({$_pFxztaL&pnB0ejmm10)dM8vxO2H|E&6=^q%-}tQ?5B)jJnKNM?t2lu|@BV zybE<85DzjDc>hE**Th9Pz#OZZp*%BOaOQ(S@31uX2(uoUW6&G>=lM-}g|#D8*i3z$ zyR=Y(l+20f5S&Yb^gW#@KR65#)MXa=SwjbC(pW^D+#IAN zE4nNmWp7vRC$QTSc$z?{YCJ6U?RLX%`je2aP9V~!=E&rJ7gcS0yTJ9t} zj1+#$rfA{fT!sCl&+5&DlNX{NCT25zQm3iX!y1 z(b&CBjdQu!#)PPj4Z?OubzU;M+UXKzYisxZC8Zqr-}i-PY+7ac%eC9+>mC08L)HEN z+!q;l3s)0&C)fYEHvmnM|9XRejD$#(t;B?r09XI93xYy+-Ufvt;P8@f#w-EN{36FJtllg)pE_SQ z{Wv~8@?MR=dBfuiVU0;+^21P};UbX&hRhs-1nlg*GSz|h1u*syZbiE z@+Msh$(e24;ZI8c3Db$MY+7cw^^jVfvhfCEK_^#@EzrPfPF0m?Dj2)E$j@xFa{ow^6ndK(%9V4nRmqPjcs>)%K{mJF0f!;lcx4lkS_S;=M>AOYv za9yqCiQ~p0qy9Y|AXwO3&+x9^2eji3106jQTCZHm9@t^7U7){J1^b$1$hMNixS;9b zCee)avc>_u;n7DX|1_{l@ASx_;Y7_xv8}tMR3A_&!!=j?gr=BvC1A7FrJ6Xy42YT~ zWXFFHmk{0gi9uUNx<#0+uiH2Z{b$`^KR)-&@@05VD&5Y*PeY%(D5_Qyb`CwIW~jgd z&aZc#NQ&2_3VraC-`z1TE}Nw&(Czoo^C9&m7BjX_=X8qu({;yqTDAbR zcZ}6#5c`Tj2wa|-dAI^Z3up^BKEDRFs0OXj$vM@*3<;+rviTdA-XK?4K=u)SJkpqK z^gWTp3s9A^B`+GH@CtswN2Y;aR$=Gu*jXOqvr_5&bct?YCN<$M)ND zShDp_(LzOk<_gKkTnGR=*xy@3m`qgoDJIN`9mN7pBsI23`~|%HY{f5Qb>QR&&MFJ9 zcz4qQ%gQW!oD0e4P8yJpaIw*?+Q0Z*S)4cW)@h=V zJVA;~e(8hsc8!l{jgK{{gKX7<{tka>!S#B>R|)nNLH&+sIewy`i$*AHn;&dFIV?R4 z?_k$%XJGpR4x*XuE$ejl?QUfU0-JNK%i$bP&V@9>J>j-*ux+Z;J%UCeShw9WP~bEF z^GYwhc)Wmw{Pryb{y)VS+W(Z3m0fKdY}{=;E&eC6r0V$S>n~t^Fs~7W;gE(fnSbp^ z;oD*-OV2~XqKTu6Q6g!anR)k6_90Fp>eyE6RyH;c7RSn-IqGo@Ffv1MG1o>n)mAq) zIeOUG+dT!S*)?tjTuu1ZC&v6_z3Oti65MJ%%6SFc1rqvvCJuoyVtF{4lj(`XMd|Ou zsXsl3KllnxpDp$6{HxYA*5k!3bK0BI?G`G7AqV%V^anHA=L|Z}T4jb}4x-a*ywL45 zLbzYzL9!;BAea$@UkAsU6t|+>N4V!fetqlo9gg)kZ)cVH=Biy(fSX*dLx4}-&=bjZ zF~Uz^t0taS2VHI&rLL0I;1)2Yxk2!Ka?%wGs|?dwBKWZAhmFE%TA07ONmlR)y`^zU zPYxVWBiTN|y@daoN6`8Oz7||c5&qYfe*QFCGYrH#{2?qRf8F7>bG(rjYdkgHtOygk z^49U06O#CS;K^XCHtB>Bt+M7^)}S?1Be+Cd%K*tdx#N6K;Vxtj?e=AI67!rqbi+XG zN}1LTS`KAC?qSVU@@n>8V|JLzYZ9a%e;ABkkw$c_{J@AdbHddZJ>$Z`aU3LD{*Gy> zprF^Gc=F9wpGrA5LlN*Vw9mJvvfTxL6e}n9n~kqpFMiNSTmu{K{h96$5e$ff2)*~f zPNTaTxCfLmb;I_#N)!qI-d_lI<@4$qMCX-p=lHXgII&L&91~khVr)psSQ9!8f zYq3RqlTaPOpOr?&Xp$jEDQ`g~D>3yZ#f|E_Oi3nw;ixj@_k_i~$M-p6v`OPJP9HB- zf|YN)qdUps9M;H7aqP$#Nga%>ZZvSz50=Byr}hZoduii3Gu+BQOh=uNL0we;z1}^e z5Y-|&kjf5oOD=*Z%L4=*Vfq^mEIf-cN`+Ghb*HwD#|j)aA08Q-;9tu2S#Geic~!P7 z!Y=*7CbouuWY+)=A;EW*?aD2?F%lc$%tFI({nI;P(^1}rEV;i~oO0v6qh7E2(lyd= zu!6GWdDt1ep2-_Lls7y77M)(A!1+~1tx;Oep!Q*}2y90m?~p05_bIf94FFoAQ|xkN zjSZo#Y!kpB;meg2} z4=_(4W-9VRW^)^cGA~G&lJkmilXDcz) z2Rgrks)K}d;zwxXucLCUJ1<>#R4k>=74TnL8m{5)cGx2yPc@ zko+3SD16)4q85gs@KUY&`c`gTQ^sbVGzfb+1TxY+MABvB&?vK^bbPh;!s!D;tZd#( zVviE4OB+i6b_PAaDPP@&2J9Defz`EABf$6RSZrTaE!mp{NU@SewgrVJ@TB>yUm_e^&a4-y1leN- zGol*k4%2KgnJAj~NW~`eQDk|o>8vJDxXL@~eV$!GTGlc>g<$Zg*^<&GeZ}=EW zthpXXE0`@D8XZy^@%&<`#o_gA^=R$csyOxFIhL~N4)SE(?9p+w)su5KXh;K8-^DRX zOtTk~v4(g9z$=tg&gF->dv7gFQEV)>A$>-q_n|2uZWFM$Ha1SQ!`eEz-P*waAq%U8 z_pKW?u|j~;==nPA+6;$Gv>jW!T5KXmS4JhLvKqeE`m!B8b)p>*y%r9eO#=7OQz!J3{uBZ)HN?6-%;1>%h_2>ng=L` z04%@H)jwbK@cBV$E*AZnme+VBEbY-HiAIXrZXWA+_RQ$mLW^-nMnOvaalhG8n@Y3 zdyVwkE$;5wKXnQ(f0cG7P)!|O z01k?>s6bf+gda6*0aP%^5=11(E=1N!M3Dp@5DW<>Kmn^2=qd@1ev`<)?FHZv$`BlUb8K{6@2 z0EIKtF+$-d5f8QOhO={WJA3Y-_LYPUUku)n81`JP>*!F?px0QsoZH|F*@75d*+|)) zx*C7p@bzPQ|C(KJVr?Gtx}VwomUTzXwpAXcHn)bgQGRIE>gs1iPdI?J=&bJK$rF2j zcE67gIIV5!G<@p>}ab_GW={Y62uiPa2!H(mX z_Gn)X?v=olESF=KMQWsIys_TCr9wA*g;RQTbAE==vWDiXc=Ss9C3$r#et_gZ;PPxX3}2X>_g7CXx+}4{ z&@|H5>iTk9s4=cNEDy7rOwWG0dE?N%OCvX$LtM+AI=obuQ8+lI zL!&kVwZH6n|13(7Lj?daI&YerPWtnyb`Km2AQteW2B z8f*B}b3A_acT<+%4@c&$5BcqAjsa~l&2Hz&UF+JlXOnKS(F4$<)I*Nn;ih~Z%j}Pt zZ15WSRXsm~?YYl_`Rsd#!^6`kO6t&zy65BkiS*Fb2crLo@4M|)tY&7*+^-3#pHEQS zRm~WwzIjUe_3wu%SMhz13%+&tOyCsdnoq2^!o^Ats5M!c(nFlCB|x`l_QNulXD`vxn+>sca zjTZeFdiMBeT>ZhuO?A#65>w;eq5nzU%idGhQ7~xsXzCaIs{X(vn~sjRdgj-sXQsmA z@av@TnqO2hCy8S>^Hc~HhZ?JbM|X^j-Wt31&rgLt?Yna$w0=-np(8yuSzlfATGrPM zU01(XIStv;cVshly;+KrL4th2L}lF+jlOWl7@e9A&jw}0GXT~nY z08d}G#@%z5J#r5JN-pj0F&w2WevRs5qO8+<8`aVg<5zb1q_Hius50;OHZ_TX?=@OI z_v>^xBo+HzQ`V1iRn(1{weXAb885mM-x-YR_fUP|Aw%zH7^--azB=xu|JCKnq8>}5 zw6b1_S{a{X#NxK?yWLcfO?U&_UYo2@H80f`j7yeIY=y1c&g#*S1j{U1iH|}lS_1k$ zCz_l!E}x9fN13LeO(h`nf_#P2*fq=)j6vZJ&jjP#ia*M}t+|Fd{noUPJWyJ@E&euV ztm?6IXy94vvE^@?)Q-O2P+)N|z$75RCM=_(x6W86^#OACri>zD@x`qnl9cAZOV+-f zm4cTVymL|X-Mkus7}Dgu1VJFcR|ALd2 zaeeLOnxiSdRJuE*>uLO?7vMVk#C=6^O|FG}$mFSOLj@^OyVe%6nIV>Ddw? zu$vP9+zx(#0SDM0Z9y(D;BOX^xnprIjt<^FTihK532+jwVlY{>ARKHp_)H{6LyMHc zzu_hUYdjW&gM9`*e@p^Vg2@n_E;gykLP7+BgGGU@B>0ks6DWs3Ni9Nb@F0+*e| z3J3%|;mZ{kBSI9ybq=Lt2d)c)q4{YnK}Tp1*jw8{wrauK!1cLMaAq;S1K$WW4W1^O z+geU%>)aKrAQa|sU9|!JXI?nitDuyHLJ4zk6DJADx}1LD6(x|#$KZfpG|d$jWA+nh zxM(t&KqSv!YYSScM0|g172w_i2fT3yS6B?ns--RUhG--LnG_EN;|LKVG}J16?KlIl zxj+NFo|G#rMjr^_rF^mYNp!&+)OLi8L72v^EgD=jICHQ%pNXJH5JE{o zi(;htudfs6ph_r$g}wYSLKP44iHn5XVWjZve@nl+#|A9SNCy#N#A6_fVFm0Jnth%a z;koxBSaw7=&A2=O>;;DoAGljf6nH+UMMPdx;ES7sz?s&-RBb+D!+KFf5YBLr2+zCH zt$uA|koU^~sK*C_stEY=8tVgx!~G3^faOABlsM3X2$7;ZGyF=1sRo+7Y|vWq*DqzV2XZrKI`JS`4A~@c zrtu(MDB#8i`IMeH@rg=>Df6IG$vWH+awkLug*g&PWGHxv z8Xpp)fISUr(li*K?BcWLo0R|48sSy#fc*s07$|H8V*_hGg{PUHsBpgdU1})P_Mq+6 zFbHNVkTw1$X-k$kO}OX?B199iY*Vl)4X;jjx(7-!6GRUGNQ`z)oC56J@EVj28H#`? zBF1^VFBIYL^YZe=(f@6!T|gKKF9hBVt@%gVmJQ+Xk=tYo zD&XD!58hFcD=daJ7{Lkcw&$7^(2+s3T~rXau_8RryK@!4cP>57lYIdA literal 0 HcmV?d00001 diff --git a/Fabric/src/generated/resources/data/c/tags/item/amethyst_dusts.json b/Fabric/src/generated/resources/data/c/tags/item/amethyst_dusts.json new file mode 100644 index 0000000000..d936f71efc --- /dev/null +++ b/Fabric/src/generated/resources/data/c/tags/item/amethyst_dusts.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:amethyst_dust" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/c/tags/item/gems.json b/Fabric/src/generated/resources/data/c/tags/item/gems.json new file mode 100644 index 0000000000..6c55bdef92 --- /dev/null +++ b/Fabric/src/generated/resources/data/c/tags/item/gems.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:charged_amethyst" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/create/tags/block/brittle.json b/Fabric/src/generated/resources/data/create/tags/block/brittle.json new file mode 100644 index 0000000000..fb66be6093 --- /dev/null +++ b/Fabric/src/generated/resources/data/create/tags/block/brittle.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#hexcasting:slate", + "required": false + } + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json new file mode 100644 index 0000000000..d36fd4dc3b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:akashic_record" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:akashic_record" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json new file mode 100644 index 0000000000..18f9ea380f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:budding_amethyst" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:budding_amethyst" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json new file mode 100644 index 0000000000..cc4c924b54 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix_boolean" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix_boolean" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json new file mode 100644 index 0000000000..8a43f8bac3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix_redstone" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix_redstone" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json new file mode 100644 index 0000000000..939dcb6e4e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_look" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_look" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json new file mode 100644 index 0000000000..c4fc49fd24 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_rightclick" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_rightclick" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json new file mode 100644 index 0000000000..31d9085f82 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_storedplayer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_storedplayer" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json new file mode 100644 index 0000000000..6dfe849d9f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:quench_allay" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:quench_allay" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json new file mode 100644 index 0000000000..96746726ec --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_dust_packing" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_dust_packing" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json new file mode 100644 index 0000000000..ff10efd290 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_dust_unpacking" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_dust_unpacking" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json new file mode 100644 index 0000000000..a5ab663568 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_tiles" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_tiles" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json new file mode 100644 index 0000000000..ab1194da4a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:scroll_paper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:ancient_scroll_paper" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:ancient_scroll_paper" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json new file mode 100644 index 0000000000..31556a4ca8 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_fence" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_fence" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json new file mode 100644 index 0000000000..1d09e6fdf8 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_fence_gate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_fence_gate" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json new file mode 100644 index 0000000000..ab66016e10 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_panel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_panel" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json new file mode 100644 index 0000000000..f031431d00 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_logs" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_planks" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_planks" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json new file mode 100644 index 0000000000..317bd1fd11 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_slab" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json new file mode 100644 index 0000000000..069989ca28 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_stairs" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_stairs" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json new file mode 100644 index 0000000000..5179827061 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_tile" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_tile" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json new file mode 100644 index 0000000000..f0aaf4b1fd --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:edified_log" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_wood" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_wood" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json new file mode 100644 index 0000000000..d676daa7f7 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_paper" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_paper" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json new file mode 100644 index 0000000000..770d62ab2b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:slate" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:slate_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:slate_block" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json new file mode 100644 index 0000000000..b2f96c2797 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:slate" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:slate_block_from_slates" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:slate_block_from_slates" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json new file mode 100644 index 0000000000..3c2f410ce6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_block" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:stonecutting/amethyst_tiles" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:stonecutting/amethyst_tiles" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json new file mode 100644 index 0000000000..4d048fc250 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:stripped_edified_log" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:stripped_edified_wood" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:stripped_edified_wood" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json new file mode 100644 index 0000000000..6ae4bdbbb6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:scroll_paper_lantern" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:ageing_scroll_paper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:ageing_scroll_paper_lantern" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json new file mode 100644 index 0000000000..91debb7ca5 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_sconce" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_sconce" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..f36c1abfc2 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:ancient_scroll_paper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:ancient_scroll_paper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:ancient_scroll_paper_lantern" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json new file mode 100644 index 0000000000..1bff0c5ff6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json new file mode 100644 index 0000000000..2dc4651527 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_medium" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_medium" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json new file mode 100644 index 0000000000..63884d313e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:scroll_paper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_paper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_paper_lantern" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json new file mode 100644 index 0000000000..2e68c56849 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_small" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_small" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json new file mode 100644 index 0000000000..551899a3a3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:slate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:slate" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json new file mode 100644 index 0000000000..bb64c267e5 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:sub_sandwich" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:sub_sandwich" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json new file mode 100644 index 0000000000..b032476ae7 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:quenched_allay_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:decompose_quenched_shard/charged" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:decompose_quenched_shard/charged" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json new file mode 100644 index 0000000000..299d8a4550 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:quenched_allay_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:decompose_quenched_shard/dust" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:decompose_quenched_shard/dust" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json new file mode 100644 index 0000000000..d9f9dfbb25 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:quenched_allay_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:decompose_quenched_shard/shard" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:decompose_quenched_shard/shard" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json new file mode 100644 index 0000000000..e04ea0f7b0 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:default_colorizer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:default_colorizer" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json new file mode 100644 index 0000000000..486da412cd --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_black" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_black" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json new file mode 100644 index 0000000000..c23b00add5 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_blue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_blue" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json new file mode 100644 index 0000000000..daf49d8674 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_brown" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_brown" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json new file mode 100644 index 0000000000..bc159a4f91 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_cyan" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_cyan" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json new file mode 100644 index 0000000000..959c3b871a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_gray" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_gray" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json new file mode 100644 index 0000000000..ae496bdb93 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_green" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_green" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json new file mode 100644 index 0000000000..9e660ad5de --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_light_blue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_light_blue" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json new file mode 100644 index 0000000000..b2b51d665b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_light_gray" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_light_gray" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json new file mode 100644 index 0000000000..b21321754b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_lime" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_lime" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json new file mode 100644 index 0000000000..38097fe636 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_magenta" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_magenta" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json new file mode 100644 index 0000000000..a5e2054cd0 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_orange" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_orange" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json new file mode 100644 index 0000000000..868366c0a4 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_pink" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_pink" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json new file mode 100644 index 0000000000..b9d4282404 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_purple" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_purple" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json new file mode 100644 index 0000000000..515062d384 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_red" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_red" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json new file mode 100644 index 0000000000..3fbaf1ba20 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_white" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_white" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json new file mode 100644 index 0000000000..e707bc9937 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_yellow" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_yellow" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json new file mode 100644 index 0000000000..e07c954cd3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_agender" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_agender" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json new file mode 100644 index 0000000000..8413c66774 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_aroace" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_aroace" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json new file mode 100644 index 0000000000..37604e5939 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_aromantic" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_aromantic" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json new file mode 100644 index 0000000000..74df9afba7 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_asexual" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_asexual" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json new file mode 100644 index 0000000000..a3e18ad420 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_bisexual" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_bisexual" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json new file mode 100644 index 0000000000..e131fc73f1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_demiboy" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_demiboy" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json new file mode 100644 index 0000000000..a164b59ce6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_demigirl" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_demigirl" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json new file mode 100644 index 0000000000..59c4f8fdeb --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_gay" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_gay" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json new file mode 100644 index 0000000000..5c3233fa98 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_genderfluid" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_genderfluid" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json new file mode 100644 index 0000000000..fd6f1355ef --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_genderqueer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_genderqueer" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json new file mode 100644 index 0000000000..091329fe3f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_intersex" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_intersex" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json new file mode 100644 index 0000000000..3d4dec1d10 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_lesbian" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_lesbian" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json new file mode 100644 index 0000000000..83c4964af9 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_nonbinary" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_nonbinary" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json new file mode 100644 index 0000000000..89512b05e1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_plural" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_plural" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json new file mode 100644 index 0000000000..70dced6396 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_transgender" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_transgender" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json new file mode 100644 index 0000000000..fbcdbfebf4 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:uuid_colorizer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:uuid_colorizer" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json new file mode 100644 index 0000000000..44a4110650 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:akashic_bookshelf" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:akashic_bookshelf" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json new file mode 100644 index 0000000000..b2a6f52851 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:akashic_ligature" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:akashic_ligature" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json new file mode 100644 index 0000000000..e00a4fdf00 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix/empty" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix/empty" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json new file mode 100644 index 0000000000..b6cd73817c --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_button" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_button" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json new file mode 100644 index 0000000000..72dce77364 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_door" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_door" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json new file mode 100644 index 0000000000..f207372eeb --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_pressure_plate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_pressure_plate" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json new file mode 100644 index 0000000000..be0fadb15b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_trapdoor" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_trapdoor" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json new file mode 100644 index 0000000000..0b4aa3256c --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus/empty" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus/empty" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json new file mode 100644 index 0000000000..b1cb841b3e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:abacus" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:abacus" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json new file mode 100644 index 0000000000..221cf418c3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:artifact" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:artifact" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json new file mode 100644 index 0000000000..5489ea0467 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:cypher" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:cypher" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json new file mode 100644 index 0000000000..4e19de9e5e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:focus" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:focus" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json new file mode 100644 index 0000000000..f67d8502aa --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:focus_rotated" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:focus_rotated" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json new file mode 100644 index 0000000000..6a24d2b333 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:jeweler_hammer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:jeweler_hammer" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json new file mode 100644 index 0000000000..3411cb2187 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:lens" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:lens" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json new file mode 100644 index 0000000000..ef5a492652 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_chorus": { + "conditions": { + "items": [ + { + "items": "minecraft:chorus_fruit" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_focus": { + "conditions": { + "items": [ + { + "items": "hexcasting:focus" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:spellbook" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_focus", + "has_chorus" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:spellbook" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json new file mode 100644 index 0000000000..c1e018b4ec --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/acacia" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/acacia" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json new file mode 100644 index 0000000000..19094ad2fe --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/bamboo" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/bamboo" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json new file mode 100644 index 0000000000..ca6c180cfa --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/birch" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/birch" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json new file mode 100644 index 0000000000..38107a9b52 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/cherry" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/cherry" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json new file mode 100644 index 0000000000..da68b592c5 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/crimson" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/crimson" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json new file mode 100644 index 0000000000..da9937e87d --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/dark_oak" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/dark_oak" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json new file mode 100644 index 0000000000..99d19ed3bf --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/edified" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/edified" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json new file mode 100644 index 0000000000..80fe7c43f6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/jungle" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/jungle" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json new file mode 100644 index 0000000000..0064814593 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/mangrove" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/mangrove" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json new file mode 100644 index 0000000000..adb60836c1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/mindsplice" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/mindsplice" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json new file mode 100644 index 0000000000..d11084b78d --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/oak" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/oak" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json new file mode 100644 index 0000000000..1ce63b78e3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/quenched" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/quenched" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json new file mode 100644 index 0000000000..cbad54cf88 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/spruce" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/spruce" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json new file mode 100644 index 0000000000..ffff5199c6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/warped" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/warped" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json new file mode 100644 index 0000000000..f50c1673fa --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:thought_knot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:thought_knot" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json new file mode 100644 index 0000000000..17c0d69b1f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:trinket" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:trinket" + ] + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json new file mode 100644 index 0000000000..78a36f62ec --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:akashic_bookshelf" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/akashic_bookshelf" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json new file mode 100644 index 0000000000..02be275bc1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:akashic_ligature" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/akashic_ligature" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json new file mode 100644 index 0000000000..5c93f81681 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:akashic_record" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/akashic_record" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json new file mode 100644 index 0000000000..4c60a77364 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_bricks" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json new file mode 100644 index 0000000000..3d39f82987 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_bricks_small" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json new file mode 100644 index 0000000000..7c054a0aab --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_dust_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_dust_block" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json new file mode 100644 index 0000000000..1d66e9bbad --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json @@ -0,0 +1,54 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#c:shears" + } + } + ] + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_edified_leaves" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_edified_leaves" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json new file mode 100644 index 0000000000..2eeb112461 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_pillar" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_pillar" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json new file mode 100644 index 0000000000..e2c38fe09e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_sconce" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_sconce" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json new file mode 100644 index 0000000000..13010296ca --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_tiles" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json new file mode 100644 index 0000000000..2bb2887920 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:ancient_scroll_paper" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/ancient_scroll_paper" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..f2ea006a03 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:ancient_scroll_paper_lantern" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/ancient_scroll_paper_lantern" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json new file mode 100644 index 0000000000..19a6706346 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json @@ -0,0 +1,54 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#c:shears" + } + } + ] + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:aventurine_edified_leaves" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/aventurine_edified_leaves" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json new file mode 100644 index 0000000000..8318d3456c --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json @@ -0,0 +1,54 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "minecraft:shears" + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#c:shears" + } + } + ] + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:citrine_edified_leaves" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/citrine_edified_leaves" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json new file mode 100644 index 0000000000..7510be752b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:directrix/boolean" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/directrix/boolean" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json new file mode 100644 index 0000000000..056282de33 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:directrix/empty" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/directrix/empty" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json new file mode 100644 index 0000000000..b130eb19de --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:directrix/redstone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/directrix/redstone" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json new file mode 100644 index 0000000000..a24172124e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_button" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_button" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json new file mode 100644 index 0000000000..942a65484f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json @@ -0,0 +1,24 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "block": "hexcasting:edified_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_door" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_door" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json new file mode 100644 index 0000000000..f45eea22be --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_fence" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_fence" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json new file mode 100644 index 0000000000..01cbf2a5e1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_fence_gate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_fence_gate" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json new file mode 100644 index 0000000000..396a3fcb45 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json new file mode 100644 index 0000000000..d6c0759bfa --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_amethyst" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_amethyst" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json new file mode 100644 index 0000000000..31892f2177 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_aventurine" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_aventurine" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json new file mode 100644 index 0000000000..21ac1cd0fb --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_citrine" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_citrine" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json new file mode 100644 index 0000000000..f9c2c33343 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_purple" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_purple" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json new file mode 100644 index 0000000000..83cb1f1b59 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_panel" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_panel" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json new file mode 100644 index 0000000000..5f1b5f7280 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_planks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_planks" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json new file mode 100644 index 0000000000..d733b30a49 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_pressure_plate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_pressure_plate" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json new file mode 100644 index 0000000000..0bdc00f6b3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json @@ -0,0 +1,34 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_slab" + } + ], + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "hexcasting:edified_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_slab" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json new file mode 100644 index 0000000000..7cb6566434 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_stairs" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_stairs" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json new file mode 100644 index 0000000000..dbc6bd1426 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_tile" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_tile" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json new file mode 100644 index 0000000000..f76ea0437f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_trapdoor" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_trapdoor" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json new file mode 100644 index 0000000000..2e1faee977 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_wood" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_wood" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json new file mode 100644 index 0000000000..67fe1185ac --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/empty" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/empty" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json new file mode 100644 index 0000000000..87f6f0ef09 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/look" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/look" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json new file mode 100644 index 0000000000..1635ee4207 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/redstone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/redstone" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json new file mode 100644 index 0000000000..37f1e9df10 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/rightclick" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/rightclick" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json new file mode 100644 index 0000000000..92c0175113 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json @@ -0,0 +1,69 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "name": "minecraft:air" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 4.0, + "min": 2.0 + }, + "function": "minecraft:set_count" + }, + { + "add": true, + "conditions": [ + { + "chances": [ + 0.25, + 0.5, + 0.75, + 1.0 + ], + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune" + } + ], + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "hexcasting:quenched_allay_shard" + } + ] + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json new file mode 100644 index 0000000000..eb1a87b224 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:quenched_allay_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay_bricks" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json new file mode 100644 index 0000000000..879089b6d4 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:quenched_allay_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay_bricks_small" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json new file mode 100644 index 0000000000..0c81157382 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:quenched_allay_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay_tiles" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json new file mode 100644 index 0000000000..8c3d628108 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:scroll_paper" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/scroll_paper" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json new file mode 100644 index 0000000000..ccea471c66 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:scroll_paper_lantern" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/scroll_paper_lantern" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json new file mode 100644 index 0000000000..eeb8f5c955 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json @@ -0,0 +1,24 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "hexcasting:pattern" + ], + "source": "block_entity" + } + ], + "name": "hexcasting:slate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json new file mode 100644 index 0000000000..f6d9ea8d1a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_bricks" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json new file mode 100644 index 0000000000..6f7cfb5825 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_bricks_small" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json new file mode 100644 index 0000000000..96dd26f7fb --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_pillar" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_pillar" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json new file mode 100644 index 0000000000..e91ebad3ce --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_tiles" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json new file mode 100644 index 0000000000..d136fe7460 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_block" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json new file mode 100644 index 0000000000..d42593f8d5 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_bricks" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json new file mode 100644 index 0000000000..f77a608dec --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_bricks_small" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json new file mode 100644 index 0000000000..060b60ebf9 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_pillar" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_pillar" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json new file mode 100644 index 0000000000..81cda1a13a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_tiles" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json new file mode 100644 index 0000000000..7dab40f3a1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:stripped_edified_log" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/stripped_edified_log" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json new file mode 100644 index 0000000000..60b009f032 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:stripped_edified_wood" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/stripped_edified_wood" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json b/Fabric/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json new file mode 100644 index 0000000000..e87bc89af2 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json @@ -0,0 +1,211 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_dust" + } + ], + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 4.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_dust" + } + ], + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 0.0 + }, + "function": "minecraft:set_count" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + }, + { + "chances": [ + 0.25, + 0.35, + 0.5, + 0.75, + 1.0 + ], + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:charged_amethyst" + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + } + }, + { + "chance": 0.125, + "condition": "minecraft:random_chance" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:charged_amethyst" + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:inject/amethyst_cluster" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/abacus.json b/Fabric/src/generated/resources/data/hexcasting/recipe/abacus.json new file mode 100644 index 0000000000..76d393b033 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/abacus.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:amethyst_shard" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "minecraft:planks" + } + }, + "pattern": [ + "WAW", + "SAS", + "WAW" + ], + "result": { + "count": 1, + "id": "hexcasting:abacus" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json new file mode 100644 index 0000000000..fca2df35ca --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + [ + { + "item": "minecraft:brown_dye" + }, + { + "tag": "c:brown_dye" + }, + { + "tag": "c:brown_dyes" + } + ], + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + } + ], + "result": { + "count": 8, + "id": "hexcasting:ancient_scroll_paper_lantern" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json b/Fabric/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json new file mode 100644 index 0000000000..055ac48308 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "C": { + "item": "minecraft:book" + }, + "L": { + "tag": "hexcasting:edified_logs" + }, + "P": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "LPL", + "CCC", + "LPL" + ], + "result": { + "count": 1, + "id": "hexcasting:akashic_bookshelf" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json b/Fabric/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json new file mode 100644 index 0000000000..bbcc3f83e7 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "1": { + "item": "hexcasting:amethyst_dust" + }, + "2": { + "item": "minecraft:amethyst_shard" + }, + "3": { + "item": "hexcasting:charged_amethyst" + }, + "L": { + "tag": "hexcasting:edified_logs" + }, + "P": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "LPL", + "123", + "LPL" + ], + "result": { + "count": 4, + "id": "hexcasting:akashic_ligature" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json new file mode 100644 index 0000000000..1da337229f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "X": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + "XX", + "XX" + ], + "result": { + "count": 1, + "id": "hexcasting:amethyst_dust_block" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json new file mode 100644 index 0000000000..db42cb3711 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "item": "hexcasting:amethyst_dust_block" + } + ], + "result": { + "count": 4, + "id": "hexcasting:amethyst_dust" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json new file mode 100644 index 0000000000..6c20a9e580 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": [ + { + "item": "minecraft:copper_ingot" + }, + { + "tag": "c:copper_ingots" + } + ], + "T": { + "item": "hexcasting:charged_amethyst" + } + }, + "pattern": [ + "T", + "B" + ], + "result": { + "count": 4, + "id": "hexcasting:amethyst_sconce" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json new file mode 100644 index 0000000000..300139c437 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "item": "minecraft:amethyst_block" + }, + "D": { + "item": "minecraft:amethyst_block" + }, + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:amethyst_tiles" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json new file mode 100644 index 0000000000..cef3280ce8 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json @@ -0,0 +1,45 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + [ + { + "item": "minecraft:brown_dye" + }, + { + "tag": "c:brown_dye" + }, + { + "tag": "c:brown_dyes" + } + ], + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + } + ], + "result": { + "count": 8, + "id": "hexcasting:ancient_scroll_paper" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..d99d9ba91b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "minecraft:torch" + }, + "T": { + "item": "hexcasting:ancient_scroll_paper" + } + }, + "pattern": [ + "T", + "B" + ], + "result": { + "count": 1, + "id": "hexcasting:ancient_scroll_paper_lantern" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/artifact.json b/Fabric/src/generated/resources/data/hexcasting/recipe/artifact.json new file mode 100644 index 0000000000..9db7d8ad92 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/artifact.json @@ -0,0 +1,29 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "D": { + "tag": "minecraft:creeper_drop_music_discs" + }, + "F": [ + { + "item": "minecraft:gold_ingot" + }, + { + "tag": "c:gold_ingots" + } + ] + }, + "pattern": [ + " F ", + "FAF", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:artifact" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json new file mode 100644 index 0000000000..750ad2dcfe --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json @@ -0,0 +1,16 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:akashic_ligature" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 5, + "profession": "minecraft:librarian" + }, + "result": { + "Name": "hexcasting:akashic_record" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json new file mode 100644 index 0000000000..0532b2e5ed --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json @@ -0,0 +1,15 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "minecraft:amethyst_block" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 3 + }, + "result": { + "Name": "minecraft:budding_amethyst" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json new file mode 100644 index 0000000000..5e97ada05f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json @@ -0,0 +1,21 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:directrix/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 1, + "profession": "minecraft:shepherd" + }, + "result": { + "Name": "hexcasting:directrix/boolean", + "Properties": { + "energized": "false", + "facing": "north", + "state": "neither" + } + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json new file mode 100644 index 0000000000..afb314d043 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json @@ -0,0 +1,21 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:directrix/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 1, + "profession": "minecraft:mason" + }, + "result": { + "Name": "hexcasting:directrix/redstone", + "Properties": { + "energized": "false", + "facing": "north", + "powered": "false" + } + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json new file mode 100644 index 0000000000..7d77364f78 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json @@ -0,0 +1,20 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:impetus/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 2, + "profession": "minecraft:fletcher" + }, + "result": { + "Name": "hexcasting:impetus/look", + "Properties": { + "energized": "false", + "facing": "north" + } + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json new file mode 100644 index 0000000000..02fbae2538 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json @@ -0,0 +1,20 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:impetus/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 2, + "profession": "minecraft:toolsmith" + }, + "result": { + "Name": "hexcasting:impetus/rightclick", + "Properties": { + "energized": "false", + "facing": "north" + } + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json new file mode 100644 index 0000000000..f79dca1d11 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json @@ -0,0 +1,21 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:impetus/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 2, + "profession": "minecraft:cleric" + }, + "result": { + "Name": "hexcasting:impetus/redstone", + "Properties": { + "energized": "false", + "facing": "north", + "powered": "true" + } + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json new file mode 100644 index 0000000000..076b4e0745 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json @@ -0,0 +1,15 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "minecraft:amethyst_block" + }, + "cost": 100000, + "entityIn": { + "type": "hexcasting:entity_type", + "entityType": "minecraft:allay" + }, + "result": { + "Name": "hexcasting:quenched_allay" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/cypher.json b/Fabric/src/generated/resources/data/hexcasting/recipe/cypher.json new file mode 100644 index 0000000000..f45f438c5b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/cypher.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "C": [ + { + "item": "minecraft:copper_ingot" + }, + { + "tag": "c:copper_ingots" + } + ], + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " C ", + "CIC", + " C " + ], + "result": { + "count": 1, + "id": "hexcasting:cypher" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json b/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json new file mode 100644 index 0000000000..4d9e9902e8 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "hexcasting:quenched_allay_shard" + }, + { + "item": "hexcasting:charged_amethyst" + } + ], + "result": { + "count": 4, + "id": "hexcasting:charged_amethyst" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json b/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json new file mode 100644 index 0000000000..5023760773 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "hexcasting:quenched_allay_shard" + }, + { + "item": "hexcasting:amethyst_dust" + } + ], + "result": { + "count": 31, + "id": "hexcasting:amethyst_dust" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json b/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json new file mode 100644 index 0000000000..e441d9bf5f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "hexcasting:quenched_allay_shard" + }, + { + "item": "minecraft:amethyst_shard" + } + ], + "result": { + "count": 7, + "id": "minecraft:amethyst_shard" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/default_colorizer.json b/Fabric/src/generated/resources/data/hexcasting/recipe/default_colorizer.json new file mode 100644 index 0000000000..b61e7ef20a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/default_colorizer.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "hexcasting:amethyst_dust" + }, + "D": { + "item": "hexcasting:amethyst_dust" + }, + "I": { + "item": "minecraft:copper_ingot" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 1, + "id": "hexcasting:default_colorizer" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/directrix/empty.json b/Fabric/src/generated/resources/data/hexcasting/recipe/directrix/empty.json new file mode 100644 index 0000000000..986fa97d99 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/directrix/empty.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "C": { + "item": "minecraft:comparator" + }, + "O": { + "item": "minecraft:observer" + }, + "S": { + "item": "hexcasting:slate_block" + } + }, + "pattern": [ + "CSS", + "OAO", + "SSC" + ], + "result": { + "count": 1, + "id": "hexcasting:directrix/empty" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json new file mode 100644 index 0000000000..43dcd86862 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:black_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_black" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json new file mode 100644 index 0000000000..b9cd3b99c3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:blue_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_blue" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json new file mode 100644 index 0000000000..f02b87049c --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:brown_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_brown" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json new file mode 100644 index 0000000000..93380132c6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:cyan_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_cyan" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json new file mode 100644 index 0000000000..c803427d5a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:gray_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_gray" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json new file mode 100644 index 0000000000..e592b36cca --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:green_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_green" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json new file mode 100644 index 0000000000..d8eb9b5986 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:light_blue_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_light_blue" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json new file mode 100644 index 0000000000..e6efc2af9a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:light_gray_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_light_gray" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json new file mode 100644 index 0000000000..645db81176 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:lime_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_lime" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json new file mode 100644 index 0000000000..9476c0a098 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:magenta_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_magenta" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json new file mode 100644 index 0000000000..f6f815b95f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:orange_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_orange" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json new file mode 100644 index 0000000000..065db19c23 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:pink_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_pink" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json new file mode 100644 index 0000000000..85dab6119e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:purple_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_purple" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json new file mode 100644 index 0000000000..8acba0fc1a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:red_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_red" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json new file mode 100644 index 0000000000..d76ee9ba69 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:white_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_white" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json new file mode 100644 index 0000000000..35ffbdd8df --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:yellow_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_yellow" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json new file mode 100644 index 0000000000..28edc09f6d --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json @@ -0,0 +1,4 @@ +{ + "type": "hexcasting:seal_focus", + "category": "misc" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json b/Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json new file mode 100644 index 0000000000..5bf703566d --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json @@ -0,0 +1,4 @@ +{ + "type": "hexcasting:seal_spellbook", + "category": "misc" +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_button.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_button.json new file mode 100644 index 0000000000..10ad25b4aa --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_button.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "ingredients": [ + { + "tag": "hexcasting:edified_planks" + } + ], + "result": { + "count": 1, + "id": "hexcasting:edified_button" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_door.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_door.json new file mode 100644 index 0000000000..6ff2941615 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WW", + "WW", + "WW" + ], + "result": { + "count": 3, + "id": "hexcasting:edified_door" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence.json new file mode 100644 index 0000000000..f1a7c7ec45 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WSW", + "WSW" + ], + "result": { + "count": 3, + "id": "hexcasting:edified_fence" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json new file mode 100644 index 0000000000..a38d45ca38 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "SWS", + "SWS" + ], + "result": { + "count": 1, + "id": "hexcasting:edified_fence_gate" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_panel.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_panel.json new file mode 100644 index 0000000000..0baf420f31 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_panel.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "tag": "hexcasting:edified_planks" + }, + "D": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "DCD", + "C C", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:edified_panel" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_planks.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_planks.json new file mode 100644 index 0000000000..7ea641db71 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "tag": "hexcasting:edified_logs" + } + ], + "result": { + "count": 4, + "id": "hexcasting:edified_planks" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json new file mode 100644 index 0000000000..fb80df82d1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WW" + ], + "result": { + "count": 1, + "id": "hexcasting:edified_pressure_plate" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_slab.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_slab.json new file mode 100644 index 0000000000..efda8df52a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WWW" + ], + "result": { + "count": 6, + "id": "hexcasting:edified_slab" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_stairs.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_stairs.json new file mode 100644 index 0000000000..ca2e03f9c3 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "W ", + "WW ", + "WWW" + ], + "result": { + "count": 4, + "id": "hexcasting:edified_stairs" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_tile.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_tile.json new file mode 100644 index 0000000000..bfca8c3437 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_tile.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WW ", + "W W", + " WW" + ], + "result": { + "count": 6, + "id": "hexcasting:edified_tile" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json new file mode 100644 index 0000000000..89928fcc73 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WWW", + "WWW" + ], + "result": { + "count": 2, + "id": "hexcasting:edified_trapdoor" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_wood.json new file mode 100644 index 0000000000..4e95e0bdc6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/edified_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "item": "hexcasting:edified_log" + } + }, + "pattern": [ + "WW", + "WW" + ], + "result": { + "count": 3, + "id": "hexcasting:edified_wood" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/focus.json b/Fabric/src/generated/resources/data/hexcasting/recipe/focus.json new file mode 100644 index 0000000000..011cde4d82 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/focus.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "G": [ + { + "item": "minecraft:glowstone_dust" + }, + { + "tag": "c:glowstone_dusts" + } + ], + "L": { + "item": "minecraft:leather" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + "GLG", + "PAP", + "GLG" + ], + "result": { + "count": 1, + "id": "hexcasting:focus" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/focus_rotated.json b/Fabric/src/generated/resources/data/hexcasting/recipe/focus_rotated.json new file mode 100644 index 0000000000..b91b4363b9 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/focus_rotated.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "G": [ + { + "item": "minecraft:glowstone_dust" + }, + { + "tag": "c:glowstone_dusts" + } + ], + "L": { + "item": "minecraft:leather" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + "GPG", + "LAL", + "GPG" + ], + "result": { + "count": 1, + "id": "hexcasting:focus" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/impetus/empty.json b/Fabric/src/generated/resources/data/hexcasting/recipe/impetus/empty.json new file mode 100644 index 0000000000..b5d3b9fd5c --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/impetus/empty.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "B": { + "item": "minecraft:iron_bars" + }, + "P": { + "item": "minecraft:purpur_block" + }, + "S": { + "item": "hexcasting:slate_block" + } + }, + "pattern": [ + "PSS", + "BAB", + "SSP" + ], + "result": { + "count": 1, + "id": "hexcasting:impetus/empty" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json b/Fabric/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json new file mode 100644 index 0000000000..e1ec585bb6 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json @@ -0,0 +1,42 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:amethyst_shard" + }, + "I": [ + { + "item": "minecraft:iron_ingot" + }, + { + "tag": "c:iron_ingots" + } + ], + "N": [ + { + "item": "minecraft:iron_nugget" + }, + { + "tag": "c:iron_nuggets" + } + ], + "S": [ + { + "item": "minecraft:stick" + }, + { + "tag": "c:wood_sticks" + } + ] + }, + "pattern": [ + "IAN", + " S ", + " S " + ], + "result": { + "count": 1, + "id": "hexcasting:jeweler_hammer" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/lens.json b/Fabric/src/generated/resources/data/hexcasting/recipe/lens.json new file mode 100644 index 0000000000..d7e33ac36b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/lens.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "C": { + "item": "minecraft:glass" + }, + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " C ", + "CIC", + " C " + ], + "result": { + "count": 1, + "id": "hexcasting:lens" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json new file mode 100644 index 0000000000..d5401c0952 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:glass" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_agender" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json new file mode 100644 index 0000000000..25c32f412c --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:wheat_seeds" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_aroace" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json new file mode 100644 index 0000000000..ab923e9b61 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:arrow" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_aromantic" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json new file mode 100644 index 0000000000..c41a3223de --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:bread" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_asexual" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json new file mode 100644 index 0000000000..157dff5b64 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:wheat" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_bisexual" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json new file mode 100644 index 0000000000..c79d6fd805 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:raw_iron" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_demiboy" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json new file mode 100644 index 0000000000..4a87fb83dd --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:raw_copper" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_demigirl" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json new file mode 100644 index 0000000000..3922bf5fa1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:stone_brick_wall" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_gay" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json new file mode 100644 index 0000000000..788be0d074 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:water_bucket" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_genderfluid" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json new file mode 100644 index 0000000000..db56478852 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:glass_bottle" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_genderqueer" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json new file mode 100644 index 0000000000..0cf8605f6e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:azalea" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_intersex" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json new file mode 100644 index 0000000000..60faeb98cb --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:honeycomb" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_lesbian" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json new file mode 100644 index 0000000000..1592908ece --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:moss_block" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_nonbinary" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json new file mode 100644 index 0000000000..662aaf38fc --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:repeater" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_plural" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json new file mode 100644 index 0000000000..cce2b91ea8 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:egg" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_transgender" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/scroll.json b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll.json new file mode 100644 index 0000000000..cf7a4fcfb1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + "PPA", + "PPP", + "PPP" + ], + "result": { + "count": 1, + "id": "hexcasting:scroll" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_medium.json b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_medium.json new file mode 100644 index 0000000000..85b2a98f34 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_medium.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + " A", + "PP ", + "PP " + ], + "result": { + "count": 1, + "id": "hexcasting:scroll_medium" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper.json b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper.json new file mode 100644 index 0000000000..1feb96a530 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:paper" + }, + "I": { + "item": "minecraft:amethyst_shard" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:scroll_paper" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json new file mode 100644 index 0000000000..5434f4c7f1 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "minecraft:torch" + }, + "T": { + "item": "hexcasting:scroll_paper" + } + }, + "pattern": [ + "T", + "B" + ], + "result": { + "count": 1, + "id": "hexcasting:scroll_paper_lantern" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_small.json b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_small.json new file mode 100644 index 0000000000..c64a3e544a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/scroll_small.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + " A", + "P " + ], + "result": { + "count": 1, + "id": "hexcasting:scroll_small" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/slate.json b/Fabric/src/generated/resources/data/hexcasting/recipe/slate.json new file mode 100644 index 0000000000..eb718972c2 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/slate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "S": { + "item": "minecraft:deepslate" + } + }, + "pattern": [ + " A ", + "SSS" + ], + "result": { + "count": 6, + "id": "hexcasting:slate" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/slate_block.json b/Fabric/src/generated/resources/data/hexcasting/recipe/slate_block.json new file mode 100644 index 0000000000..975fea26a0 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/slate_block.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "item": "minecraft:deepslate" + }, + "D": { + "item": "minecraft:deepslate" + }, + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:slate_block" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json b/Fabric/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json new file mode 100644 index 0000000000..92bf412fdf --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "S": { + "item": "hexcasting:slate" + } + }, + "pattern": [ + "S", + "S" + ], + "result": { + "count": 1, + "id": "hexcasting:slate_block" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/spellbook.json b/Fabric/src/generated/resources/data/hexcasting/recipe/spellbook.json new file mode 100644 index 0000000000..0d8bbb5971 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/spellbook.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "B": { + "item": "minecraft:writable_book" + }, + "F": { + "item": "minecraft:chorus_fruit" + }, + "N": [ + { + "item": "minecraft:gold_nugget" + }, + { + "tag": "c:gold_nuggets" + } + ] + }, + "pattern": [ + "NBA", + "NFA", + "NBA" + ], + "result": { + "count": 1, + "id": "hexcasting:spellbook" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/acacia.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/acacia.json new file mode 100644 index 0000000000..a5e01a9c9a --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/acacia.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:acacia_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/acacia" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json new file mode 100644 index 0000000000..8c648a860c --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:bamboo_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/bamboo" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/birch.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/birch.json new file mode 100644 index 0000000000..2cee68c976 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/birch.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:birch_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/birch" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/cherry.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/cherry.json new file mode 100644 index 0000000000..fb19b26271 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/cherry.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:cherry_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/cherry" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/crimson.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/crimson.json new file mode 100644 index 0000000000..6f8b4dd09e --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/crimson.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:crimson_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/crimson" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json new file mode 100644 index 0000000000..b4a9aea823 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:dark_oak_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/dark_oak" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/edified.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/edified.json new file mode 100644 index 0000000000..29378f8085 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/edified.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "hexcasting:edified_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/edified" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/jungle.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/jungle.json new file mode 100644 index 0000000000..a3b382cf11 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/jungle.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:jungle_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/jungle" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json new file mode 100644 index 0000000000..2ad01c0d69 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:mangrove_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/mangrove" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json new file mode 100644 index 0000000000..41c9e8abb0 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "hexcasting:brainswept_circle_components" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/mindsplice" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/oak.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/oak.json new file mode 100644 index 0000000000..75d6d9daab --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/oak.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:oak_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/oak" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/quenched.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/quenched.json new file mode 100644 index 0000000000..91fd1fc452 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/quenched.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "hexcasting:quenched_allay_shard" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/quenched" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/spruce.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/spruce.json new file mode 100644 index 0000000000..0ab7166a60 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/spruce.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:spruce_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/spruce" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/staff/warped.json b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/warped.json new file mode 100644 index 0000000000..8a71b96aaf --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/staff/warped.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:warped_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/warped" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json b/Fabric/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json new file mode 100644 index 0000000000..7eb40a9ada --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:amethyst_block" + }, + "result": { + "count": 1, + "id": "hexcasting:amethyst_tiles" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json b/Fabric/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json new file mode 100644 index 0000000000..0ccb5ae8e2 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "item": "hexcasting:stripped_edified_log" + } + }, + "pattern": [ + "WW", + "WW" + ], + "result": { + "count": 3, + "id": "hexcasting:stripped_edified_wood" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json b/Fabric/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json new file mode 100644 index 0000000000..82a511fde4 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "minecraft:amethyst_shard" + }, + "B": { + "item": "minecraft:bread" + }, + "C": { + "item": "minecraft:cooked_beef" + }, + "S": { + "item": "minecraft:stick" + } + }, + "pattern": [ + " SA", + " C ", + " B " + ], + "result": { + "count": 1, + "id": "hexcasting:sub_sandwich" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/thought_knot.json b/Fabric/src/generated/resources/data/hexcasting/recipe/thought_knot.json new file mode 100644 index 0000000000..d89ad83310 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/thought_knot.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "equipment", + "ingredients": [ + { + "item": "hexcasting:amethyst_dust" + }, + { + "item": "minecraft:string" + } + ], + "result": { + "count": 1, + "id": "hexcasting:thought_knot" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/trinket.json b/Fabric/src/generated/resources/data/hexcasting/recipe/trinket.json new file mode 100644 index 0000000000..f2e371553d --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/trinket.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "C": [ + { + "item": "minecraft:iron_ingot" + }, + { + "tag": "c:iron_ingots" + } + ], + "I": { + "item": "minecraft:amethyst_shard" + } + }, + "pattern": [ + " C ", + "CIC", + " C " + ], + "result": { + "count": 1, + "id": "hexcasting:trinket" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json b/Fabric/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json new file mode 100644 index 0000000000..235a2aff68 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "hexcasting:amethyst_dust" + }, + "D": { + "item": "hexcasting:amethyst_dust" + }, + "I": { + "item": "minecraft:amethyst_shard" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 1, + "id": "hexcasting:uuid_colorizer" + } +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json new file mode 100644 index 0000000000..aa71f4b195 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#hexcasting:impeti", + "#hexcasting:directrices" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json new file mode 100644 index 0000000000..7fc52a816b --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:conjured_block", + "hexcasting:conjured_light" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/directrices.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/directrices.json new file mode 100644 index 0000000000..824259f178 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/directrices.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:directrix/redstone", + "hexcasting:directrix/boolean" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/edified_logs.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/edified_logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/edified_logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/edified_planks.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/edified_planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/edified_planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json new file mode 100644 index 0000000000..e2e4a77147 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#minecraft:needs_diamond_tool", + "required": false + } + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/impeti.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/impeti.json new file mode 100644 index 0000000000..358990d5b4 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/impeti.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:impetus/look", + "hexcasting:impetus/rightclick", + "hexcasting:impetus/redstone" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/water_plants.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/water_plants.json new file mode 100644 index 0000000000..0f2bcab34f --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/block/water_plants.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:kelp", + "minecraft:kelp_plant", + "minecraft:seagrass", + "minecraft:tall_seagrass" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json b/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json new file mode 100644 index 0000000000..3113294d13 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:lightning", + "hexcasting:flight", + "hexcasting:create_lava", + "hexcasting:teleport/great", + "hexcasting:sentinel/create/great", + "hexcasting:dispel_rain", + "hexcasting:summon_rain", + "hexcasting:brainsweep", + "hexcasting:craft/battery", + "hexcasting:potion/regeneration", + "hexcasting:potion/night_vision", + "hexcasting:potion/absorption", + "hexcasting:potion/haste", + "hexcasting:potion/strength" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json b/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json new file mode 100644 index 0000000000..3113294d13 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:lightning", + "hexcasting:flight", + "hexcasting:create_lava", + "hexcasting:teleport/great", + "hexcasting:sentinel/create/great", + "hexcasting:dispel_rain", + "hexcasting:summon_rain", + "hexcasting:brainsweep", + "hexcasting:craft/battery", + "hexcasting:potion/regeneration", + "hexcasting:potion/night_vision", + "hexcasting:potion/absorption", + "hexcasting:potion/haste", + "hexcasting:potion/strength" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json b/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json new file mode 100644 index 0000000000..3113294d13 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:lightning", + "hexcasting:flight", + "hexcasting:create_lava", + "hexcasting:teleport/great", + "hexcasting:sentinel/create/great", + "hexcasting:dispel_rain", + "hexcasting:summon_rain", + "hexcasting:brainsweep", + "hexcasting:craft/battery", + "hexcasting:potion/regeneration", + "hexcasting:potion/night_vision", + "hexcasting:potion/absorption", + "hexcasting:potion/haste", + "hexcasting:potion/strength" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json new file mode 100644 index 0000000000..aa71f4b195 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#hexcasting:impeti", + "#hexcasting:directrices" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/directrices.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/directrices.json new file mode 100644 index 0000000000..824259f178 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/directrices.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:directrix/redstone", + "hexcasting:directrix/boolean" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/edified_logs.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/edified_logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/edified_logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/edified_planks.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/edified_planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/edified_planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json new file mode 100644 index 0000000000..1f7070a707 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json @@ -0,0 +1,8 @@ +{ + "values": [ + "hexcasting:amethyst_dust", + "minecraft:amethyst_shard", + "hexcasting:charged_amethyst", + "hexcasting:creative_unlocker" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/impeti.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/impeti.json new file mode 100644 index 0000000000..358990d5b4 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/impeti.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:impetus/look", + "hexcasting:impetus/rightclick", + "hexcasting:impetus/redstone" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/phial_base.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/phial_base.json new file mode 100644 index 0000000000..52ac4c0c96 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/phial_base.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glass_bottle" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/seal_materials.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/seal_materials.json new file mode 100644 index 0000000000..674a370049 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/seal_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:honeycomb" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/item/staves.json b/Fabric/src/generated/resources/data/hexcasting/tags/item/staves.json new file mode 100644 index 0000000000..29f4595c62 --- /dev/null +++ b/Fabric/src/generated/resources/data/hexcasting/tags/item/staves.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:staff/edified", + "hexcasting:staff/oak", + "hexcasting:staff/spruce", + "hexcasting:staff/birch", + "hexcasting:staff/jungle", + "hexcasting:staff/acacia", + "hexcasting:staff/dark_oak", + "hexcasting:staff/crimson", + "hexcasting:staff/warped", + "hexcasting:staff/mangrove", + "hexcasting:staff/cherry", + "hexcasting:staff/bamboo", + "hexcasting:staff/quenched", + "hexcasting:staff/mindsplice" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/block/buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json b/Fabric/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json new file mode 100644 index 0000000000..7a23dc1ec1 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + "hexcasting:conjured_light", + "hexcasting:conjured_block", + "hexcasting:amethyst_tiles", + "hexcasting:amethyst_sconce" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/doors.json b/Fabric/src/generated/resources/data/minecraft/tags/block/doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/fence_gates.json b/Fabric/src/generated/resources/data/minecraft/tags/block/fence_gates.json new file mode 100644 index 0000000000..f27c95c784 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/fence_gates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_fence_gate" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/fences.json b/Fabric/src/generated/resources/data/minecraft/tags/block/fences.json new file mode 100644 index 0000000000..269de59e0a --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/fences.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_fence" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/leaves.json b/Fabric/src/generated/resources/data/minecraft/tags/block/leaves.json new file mode 100644 index 0000000000..ff8e420cc6 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/leaves.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:amethyst_edified_leaves", + "hexcasting:aventurine_edified_leaves", + "hexcasting:citrine_edified_leaves" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/logs.json b/Fabric/src/generated/resources/data/minecraft/tags/block/logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json b/Fabric/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/axe.json b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/axe.json new file mode 100644 index 0000000000..0d6037e186 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/axe.json @@ -0,0 +1,25 @@ +{ + "values": [ + "hexcasting:akashic_record", + "hexcasting:akashic_bookshelf", + "hexcasting:akashic_ligature", + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood", + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile", + "hexcasting:edified_door", + "hexcasting:edified_trapdoor", + "hexcasting:edified_slab", + "hexcasting:edified_button", + "hexcasting:edified_stairs", + "hexcasting:edified_fence", + "hexcasting:edified_fence_gate" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json new file mode 100644 index 0000000000..ff8e420cc6 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:amethyst_edified_leaves", + "hexcasting:aventurine_edified_leaves", + "hexcasting:citrine_edified_leaves" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json new file mode 100644 index 0000000000..a8b1c2eb67 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -0,0 +1,30 @@ +{ + "values": [ + "hexcasting:slate_block", + "hexcasting:slate_tiles", + "hexcasting:slate_bricks", + "hexcasting:slate_bricks_small", + "hexcasting:slate_pillar", + "hexcasting:slate", + "hexcasting:directrix/empty", + "hexcasting:directrix/redstone", + "hexcasting:directrix/boolean", + "hexcasting:impetus/empty", + "hexcasting:impetus/rightclick", + "hexcasting:impetus/look", + "hexcasting:impetus/redstone", + "hexcasting:amethyst_tiles", + "hexcasting:amethyst_bricks", + "hexcasting:amethyst_bricks_small", + "hexcasting:amethyst_pillar", + "hexcasting:slate_amethyst_tiles", + "hexcasting:slate_amethyst_bricks", + "hexcasting:slate_amethyst_bricks_small", + "hexcasting:slate_amethyst_pillar", + "hexcasting:amethyst_sconce", + "hexcasting:quenched_allay", + "hexcasting:quenched_allay_tiles", + "hexcasting:quenched_allay_bricks", + "hexcasting:quenched_allay_bricks_small" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json new file mode 100644 index 0000000000..02d08df2b3 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:amethyst_dust_block" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/planks.json b/Fabric/src/generated/resources/data/minecraft/tags/block/planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/pressure_plates.json b/Fabric/src/generated/resources/data/minecraft/tags/block/pressure_plates.json new file mode 100644 index 0000000000..8880072112 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/pressure_plates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_pressure_plate" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/block/slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/stairs.json b/Fabric/src/generated/resources/data/minecraft/tags/block/stairs.json new file mode 100644 index 0000000000..c2e7fad75b --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/stairs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_stairs" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/block/trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json b/Fabric/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json new file mode 100644 index 0000000000..f27c95c784 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_fence_gate" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_doors.json b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_fences.json b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_fences.json new file mode 100644 index 0000000000..117722b2be --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_fences.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:edified_fence", + "hexcasting:edified_fence" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json new file mode 100644 index 0000000000..8880072112 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_pressure_plate" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json new file mode 100644 index 0000000000..c2e7fad75b --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_stairs" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/item/buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/doors.json b/Fabric/src/generated/resources/data/minecraft/tags/item/doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/leaves.json b/Fabric/src/generated/resources/data/minecraft/tags/item/leaves.json new file mode 100644 index 0000000000..ff8e420cc6 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/leaves.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:amethyst_edified_leaves", + "hexcasting:aventurine_edified_leaves", + "hexcasting:citrine_edified_leaves" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/logs.json b/Fabric/src/generated/resources/data/minecraft/tags/item/logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json b/Fabric/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/planks.json b/Fabric/src/generated/resources/data/minecraft/tags/item/planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/item/slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/item/trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_doors.json b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json new file mode 100644 index 0000000000..8880072112 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_pressure_plate" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Fabric/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index 6eebc918c4..e63b3e12b2 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -1,5 +1,6 @@ package at.petrak.hexcasting.fabric +import at.petrak.hexcasting.api.HexAPI import at.petrak.hexcasting.api.HexAPI.modLoc import at.petrak.hexcasting.api.addldata.ADMediaHolder import at.petrak.hexcasting.api.advancements.HexAdvancementTriggers @@ -13,7 +14,6 @@ import at.petrak.hexcasting.common.casting.PatternRegistryManifest import at.petrak.hexcasting.common.casting.actions.spells.OpFlight import at.petrak.hexcasting.common.casting.actions.spells.great.OpAltiora import at.petrak.hexcasting.common.command.PatternResKeyArgument -import at.petrak.hexcasting.common.command.PatternResLocArgument import at.petrak.hexcasting.common.entities.HexEntities import at.petrak.hexcasting.common.items.ItemJewelerHammer import at.petrak.hexcasting.common.lib.* @@ -23,6 +23,8 @@ import at.petrak.hexcasting.common.misc.BrainsweepingEvents import at.petrak.hexcasting.common.misc.PlayerPositionRecorder import at.petrak.hexcasting.common.misc.RegisterMisc import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry +import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredients +import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredients import at.petrak.hexcasting.fabric.cc.HexCardinalComponents import at.petrak.hexcasting.fabric.cc.adimpl.CCMediaHolder import at.petrak.hexcasting.fabric.event.VillagerConversionCallback @@ -46,26 +48,16 @@ import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents import net.fabricmc.fabric.api.loot.v3.LootTableEvents import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer import net.fabricmc.fabric.api.registry.FlammableBlockRegistry -import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.commands.synchronization.SingletonArgumentInfo import net.minecraft.core.Registry import net.minecraft.core.registries.BuiltInRegistries -import net.minecraft.core.registries.Registries import net.minecraft.resources.ResourceLocation -import net.minecraft.tags.ItemTags import net.minecraft.world.InteractionResult import net.minecraft.world.entity.player.Player import net.minecraft.world.item.Items -import net.minecraft.world.item.enchantment.Enchantments import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.state.properties.BlockSetType -import net.minecraft.world.level.storage.loot.LootPool -import net.minecraft.world.level.storage.loot.entries.LootItem -import net.minecraft.world.level.storage.loot.functions.ApplyBonusCount import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction -import net.minecraft.world.level.storage.loot.predicates.MatchTool -import net.minecraft.world.level.storage.loot.providers.number.ConstantValue -import net.minecraft.world.level.storage.loot.providers.number.LootNumberProviderType import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator import java.util.function.BiConsumer @@ -74,6 +66,7 @@ object FabricHexInitializer : ModInitializer { override fun onInitialize() { this.CONFIG = FabricHexConfig.setup() + HexAPI.LOGGER.info("Testing for datagen...") FabricPacketHandler.initPackets() FabricPacketHandler.init() @@ -166,6 +159,7 @@ object FabricHexInitializer : ModInitializer { HexAttributes.register() HexMobEffects.register(bind(BuiltInRegistries.MOB_EFFECT)) HexPotions.registerPotions(bind(BuiltInRegistries.POTION)) + HexDataComponents.registerDataComponents(bind(BuiltInRegistries.DATA_COMPONENT_TYPE)) HexRecipeStuffRegistry.registerSerializers(bind(BuiltInRegistries.RECIPE_SERIALIZER)) HexRecipeStuffRegistry.registerTypes(bind(BuiltInRegistries.RECIPE_TYPE)) @@ -180,6 +174,9 @@ object FabricHexInitializer : ModInitializer { HexArithmetics.register(bind(IXplatAbstractions.INSTANCE.arithmeticRegistry)) HexContinuationTypes.registerContinuations(bind(IXplatAbstractions.INSTANCE.continuationTypeRegistry)) HexEvalSounds.register(bind(IXplatAbstractions.INSTANCE.evalSoundRegistry)) + StateIngredients.register(bind(IXplatAbstractions.INSTANCE.stateIngredientRegistry)) + BrainsweepeeIngredients.register(bind(IXplatAbstractions.INSTANCE.brainsweepeeIngredientRegistry)) + // Because of Java's lazy-loading of classes, can't use Kotlin static initialization for // any calls that will eventually touch FeatureUtils.register(), as the growers here do, diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java index 828eddea9d..c559c45eb8 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/datagen/HexFabricDataGenerators.java @@ -8,11 +8,14 @@ import at.petrak.hexcasting.datagen.tag.HexActionTagProvider; import at.petrak.hexcasting.datagen.tag.HexBlockTagProvider; import at.petrak.hexcasting.datagen.tag.HexItemTagProvider; +import at.petrak.hexcasting.fabric.FabricHexInitializer; import at.petrak.hexcasting.fabric.recipe.FabricModConditionalIngredient; +import at.petrak.hexcasting.fabric.xplat.FabricXplatImpl; import at.petrak.hexcasting.xplat.IXplatAbstractions; import com.google.gson.JsonObject; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; +import net.minecraft.core.RegistrySetBuilder; import net.minecraft.core.registries.Registries; import net.minecraft.data.loot.LootTableProvider; import net.minecraft.resources.ResourceLocation; @@ -165,4 +168,9 @@ private static TagKey tag(String s) { private static TagKey tag(String namespace, String s) { return TagKey.create(Registries.ITEM, ResourceLocation.fromNamespaceAndPath(namespace, s)); } + + @Override + public void buildRegistry(RegistrySetBuilder registryBuilder) { + + } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java index 47edc89a98..dc8fc104bf 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java @@ -449,14 +449,16 @@ public String getModName(String namespace) { ); private static final Supplier>> STATE_INGREDIENT_REGISTRY = Suppliers.memoize(() -> - FabricRegistryBuilder.from(new MappedRegistry<>( + FabricRegistryBuilder.from(new DefaultedMappedRegistry<>( + HexAPI.MOD_ID + ":none", HexRegistries.STATE_INGREDIENT, Lifecycle.stable(), false)) .buildAndRegister() ); private static final Supplier>> BRAINSWEEPEE_INGREDIENT_REGISTRY = Suppliers.memoize(() -> - FabricRegistryBuilder.from(new MappedRegistry<>( + FabricRegistryBuilder.from(new DefaultedMappedRegistry<>( + HexAPI.MOD_ID + ":none", HexRegistries.BRAINSWEEPEE_INGREDIENT, Lifecycle.stable(), false)) .buildAndRegister() diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 11a9de2ed5..0e9c83558e 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -127,7 +127,7 @@ def generatedResources = project(":Common").file("src/generated/resources") loom { runs { - create("forgeXplatDatagen") { + create("xplatDatagen") { data() name "Forge Xplat Datagen" @@ -139,6 +139,18 @@ loom { programArgs "--existing", file("src/main/resources").absolutePath programArgs "--existing", generatedResources.absolutePath } + create("Datagen") { + data() + name "NeoForge Datagen" + + vmArg("-Dhexcasting.neoforge_datagen") + + programArgs "--all", "--mod", project.modID + programArgs "--output", file("src/generated/resources").absolutePath + programArgs "--existing", project(":Common").file("src/main/resources").absolutePath + programArgs "--existing", file("src/main/resources").absolutePath + programArgs "--existing", file("src/generated/resources").absolutePath + } } } diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_bookshelf.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_bookshelf.json new file mode 100644 index 0000000000..2f79ec12a3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_bookshelf.json @@ -0,0 +1,107 @@ +{ + "variants": { + "facing=east,has_books=false": { + "model": "hexcasting:block/akashic_bookshelf_empty", + "uvlock": true, + "y": 90 + }, + "facing=east,has_books=true": [ + { + "model": "hexcasting:block/akashic_bookshelf_1", + "uvlock": true, + "y": 90 + }, + { + "model": "hexcasting:block/akashic_bookshelf_2", + "uvlock": true, + "y": 90 + }, + { + "model": "hexcasting:block/akashic_bookshelf_3", + "uvlock": true, + "y": 90 + }, + { + "model": "hexcasting:block/akashic_bookshelf_4", + "uvlock": true, + "y": 90 + } + ], + "facing=north,has_books=false": { + "model": "hexcasting:block/akashic_bookshelf_empty", + "uvlock": true + }, + "facing=north,has_books=true": [ + { + "model": "hexcasting:block/akashic_bookshelf_1", + "uvlock": true + }, + { + "model": "hexcasting:block/akashic_bookshelf_2", + "uvlock": true + }, + { + "model": "hexcasting:block/akashic_bookshelf_3", + "uvlock": true + }, + { + "model": "hexcasting:block/akashic_bookshelf_4", + "uvlock": true + } + ], + "facing=south,has_books=false": { + "model": "hexcasting:block/akashic_bookshelf_empty", + "uvlock": true, + "y": 180 + }, + "facing=south,has_books=true": [ + { + "model": "hexcasting:block/akashic_bookshelf_1", + "uvlock": true, + "y": 180 + }, + { + "model": "hexcasting:block/akashic_bookshelf_2", + "uvlock": true, + "y": 180 + }, + { + "model": "hexcasting:block/akashic_bookshelf_3", + "uvlock": true, + "y": 180 + }, + { + "model": "hexcasting:block/akashic_bookshelf_4", + "uvlock": true, + "y": 180 + } + ], + "facing=west,has_books=false": { + "model": "hexcasting:block/akashic_bookshelf_empty", + "uvlock": true, + "y": 270 + }, + "facing=west,has_books=true": [ + { + "model": "hexcasting:block/akashic_bookshelf_1", + "uvlock": true, + "y": 270 + }, + { + "model": "hexcasting:block/akashic_bookshelf_2", + "uvlock": true, + "y": 270 + }, + { + "model": "hexcasting:block/akashic_bookshelf_3", + "uvlock": true, + "y": 270 + }, + { + "model": "hexcasting:block/akashic_bookshelf_4", + "uvlock": true, + "y": 270 + } + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_ligature.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_ligature.json new file mode 100644 index 0000000000..c4552b4918 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_ligature.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/akashic_ligature" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_record.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_record.json new file mode 100644 index 0000000000..c2aa512a1e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/akashic_record.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/akashic_record" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks.json new file mode 100644 index 0000000000..267e1b4d43 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/deco/amethyst_bricks" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks_small.json new file mode 100644 index 0000000000..66b78f9a12 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_bricks_small.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/deco/amethyst_bricks_small" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_dust_block.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_dust_block.json new file mode 100644 index 0000000000..c27c62ffcb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_dust_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/amethyst_dust_block" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_edified_leaves.json new file mode 100644 index 0000000000..db8af585b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_edified_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/amethyst_edified_leaves" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_pillar.json new file mode 100644 index 0000000000..257e10ca4d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_pillar.json @@ -0,0 +1,30 @@ +{ + "variants": { + "facing=down": { + "model": "hexcasting:block/deco/amethyst_pillar", + "x": 180 + }, + "facing=east": { + "model": "hexcasting:block/deco/amethyst_pillar", + "x": 90, + "y": 90 + }, + "facing=north": { + "model": "hexcasting:block/deco/amethyst_pillar", + "x": 90 + }, + "facing=south": { + "model": "hexcasting:block/deco/amethyst_pillar", + "x": 90, + "y": 180 + }, + "facing=up": { + "model": "hexcasting:block/deco/amethyst_pillar" + }, + "facing=west": { + "model": "hexcasting:block/deco/amethyst_pillar", + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json new file mode 100644 index 0000000000..af52410929 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_sconce.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/amethyst_sconce" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_tiles.json new file mode 100644 index 0000000000..b716f2a5a9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/amethyst_tiles.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/deco/amethyst_tiles" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper.json new file mode 100644 index 0000000000..1c809c022b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/ancient_scroll_paper" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..3a632c39f3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/ancient_scroll_paper_lantern.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/ancient_scroll_paper_lantern" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/aventurine_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/aventurine_edified_leaves.json new file mode 100644 index 0000000000..10383418f7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/aventurine_edified_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/aventurine_edified_leaves" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/citrine_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/citrine_edified_leaves.json new file mode 100644 index 0000000000..3207814e50 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/citrine_edified_leaves.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/citrine_edified_leaves" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_block.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_block.json new file mode 100644 index 0000000000..5e8ffe700c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/conjured" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_light.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_light.json new file mode 100644 index 0000000000..5e8ffe700c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/conjured_light.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/conjured" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/boolean.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/boolean.json new file mode 100644 index 0000000000..155f55cfe6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/boolean.json @@ -0,0 +1,142 @@ +{ + "variants": { + "energized=false,facing=down,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/dim_false_down", + "x": 90 + }, + "energized=false,facing=down,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/dim_neither_down", + "x": 90 + }, + "energized=false,facing=down,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/dim_true_down", + "x": 90 + }, + "energized=false,facing=east,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/dim_false_east", + "y": 90 + }, + "energized=false,facing=east,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/dim_neither_east", + "y": 90 + }, + "energized=false,facing=east,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/dim_true_east", + "y": 90 + }, + "energized=false,facing=north,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/dim_false_north" + }, + "energized=false,facing=north,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/dim_neither_north" + }, + "energized=false,facing=north,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/dim_true_north" + }, + "energized=false,facing=south,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/dim_false_south", + "y": 180 + }, + "energized=false,facing=south,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/dim_neither_south", + "y": 180 + }, + "energized=false,facing=south,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/dim_true_south", + "y": 180 + }, + "energized=false,facing=up,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/dim_false_up", + "x": -90 + }, + "energized=false,facing=up,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/dim_neither_up", + "x": -90 + }, + "energized=false,facing=up,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/dim_true_up", + "x": -90 + }, + "energized=false,facing=west,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/dim_false_west", + "y": 270 + }, + "energized=false,facing=west,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/dim_neither_west", + "y": 270 + }, + "energized=false,facing=west,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/dim_true_west", + "y": 270 + }, + "energized=true,facing=down,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/lit_false_down", + "x": 90 + }, + "energized=true,facing=down,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/lit_neither_down", + "x": 90 + }, + "energized=true,facing=down,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/lit_true_down", + "x": 90 + }, + "energized=true,facing=east,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/lit_false_east", + "y": 90 + }, + "energized=true,facing=east,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/lit_neither_east", + "y": 90 + }, + "energized=true,facing=east,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/lit_true_east", + "y": 90 + }, + "energized=true,facing=north,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/lit_false_north" + }, + "energized=true,facing=north,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/lit_neither_north" + }, + "energized=true,facing=north,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/lit_true_north" + }, + "energized=true,facing=south,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/lit_false_south", + "y": 180 + }, + "energized=true,facing=south,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/lit_neither_south", + "y": 180 + }, + "energized=true,facing=south,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/lit_true_south", + "y": 180 + }, + "energized=true,facing=up,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/lit_false_up", + "x": -90 + }, + "energized=true,facing=up,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/lit_neither_up", + "x": -90 + }, + "energized=true,facing=up,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/lit_true_up", + "x": -90 + }, + "energized=true,facing=west,state=false": { + "model": "hexcasting:block/circle/directrix/boolean/lit_false_west", + "y": 270 + }, + "energized=true,facing=west,state=neither": { + "model": "hexcasting:block/circle/directrix/boolean/lit_neither_west", + "y": 270 + }, + "energized=true,facing=west,state=true": { + "model": "hexcasting:block/circle/directrix/boolean/lit_true_west", + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/empty.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/empty.json new file mode 100644 index 0000000000..33b013562c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/empty.json @@ -0,0 +1,50 @@ +{ + "variants": { + "energized=false,facing=down": { + "model": "hexcasting:block/circle/directrix/empty/dim_down", + "x": 90 + }, + "energized=false,facing=east": { + "model": "hexcasting:block/circle/directrix/empty/dim_east", + "y": 90 + }, + "energized=false,facing=north": { + "model": "hexcasting:block/circle/directrix/empty/dim_north" + }, + "energized=false,facing=south": { + "model": "hexcasting:block/circle/directrix/empty/dim_south", + "y": 180 + }, + "energized=false,facing=up": { + "model": "hexcasting:block/circle/directrix/empty/dim_up", + "x": -90 + }, + "energized=false,facing=west": { + "model": "hexcasting:block/circle/directrix/empty/dim_west", + "y": 270 + }, + "energized=true,facing=down": { + "model": "hexcasting:block/circle/directrix/empty/lit_down", + "x": 90 + }, + "energized=true,facing=east": { + "model": "hexcasting:block/circle/directrix/empty/lit_east", + "y": 90 + }, + "energized=true,facing=north": { + "model": "hexcasting:block/circle/directrix/empty/lit_north" + }, + "energized=true,facing=south": { + "model": "hexcasting:block/circle/directrix/empty/lit_south", + "y": 180 + }, + "energized=true,facing=up": { + "model": "hexcasting:block/circle/directrix/empty/lit_up", + "x": -90 + }, + "energized=true,facing=west": { + "model": "hexcasting:block/circle/directrix/empty/lit_west", + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/redstone.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/redstone.json new file mode 100644 index 0000000000..c93068cabf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/directrix/redstone.json @@ -0,0 +1,96 @@ +{ + "variants": { + "energized=false,facing=down,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/dim_unpowered_down", + "x": 90 + }, + "energized=false,facing=down,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/dim_powered_down", + "x": 90 + }, + "energized=false,facing=east,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/dim_unpowered_east", + "y": 90 + }, + "energized=false,facing=east,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/dim_powered_east", + "y": 90 + }, + "energized=false,facing=north,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/dim_unpowered_north" + }, + "energized=false,facing=north,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/dim_powered_north" + }, + "energized=false,facing=south,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/dim_unpowered_south", + "y": 180 + }, + "energized=false,facing=south,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/dim_powered_south", + "y": 180 + }, + "energized=false,facing=up,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/dim_unpowered_up", + "x": -90 + }, + "energized=false,facing=up,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/dim_powered_up", + "x": -90 + }, + "energized=false,facing=west,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/dim_unpowered_west", + "y": 270 + }, + "energized=false,facing=west,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/dim_powered_west", + "y": 270 + }, + "energized=true,facing=down,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/lit_unpowered_down", + "x": 90 + }, + "energized=true,facing=down,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/lit_powered_down", + "x": 90 + }, + "energized=true,facing=east,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/lit_unpowered_east", + "y": 90 + }, + "energized=true,facing=east,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/lit_powered_east", + "y": 90 + }, + "energized=true,facing=north,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/lit_unpowered_north" + }, + "energized=true,facing=north,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/lit_powered_north" + }, + "energized=true,facing=south,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/lit_unpowered_south", + "y": 180 + }, + "energized=true,facing=south,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/lit_powered_south", + "y": 180 + }, + "energized=true,facing=up,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/lit_unpowered_up", + "x": -90 + }, + "energized=true,facing=up,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/lit_powered_up", + "x": -90 + }, + "energized=true,facing=west,powered=false": { + "model": "hexcasting:block/circle/directrix/redstone/lit_unpowered_west", + "y": 270 + }, + "energized=true,facing=west,powered=true": { + "model": "hexcasting:block/circle/directrix/redstone/lit_powered_west", + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_button.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_button.json new file mode 100644 index 0000000000..81efad6fd6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_button.json @@ -0,0 +1,118 @@ +{ + "variants": { + "face=ceiling,facing=east,powered=false": { + "model": "hexcasting:block/edified_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,powered=false": { + "model": "hexcasting:block/edified_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,powered=false": { + "model": "hexcasting:block/edified_button", + "x": 180 + }, + "face=ceiling,facing=south,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,powered=false": { + "model": "hexcasting:block/edified_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,powered=false": { + "model": "hexcasting:block/edified_button", + "y": 90 + }, + "face=floor,facing=east,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "y": 90 + }, + "face=floor,facing=north,powered=false": { + "model": "hexcasting:block/edified_button" + }, + "face=floor,facing=north,powered=true": { + "model": "hexcasting:block/edified_button_pressed" + }, + "face=floor,facing=south,powered=false": { + "model": "hexcasting:block/edified_button", + "y": 180 + }, + "face=floor,facing=south,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "y": 180 + }, + "face=floor,facing=west,powered=false": { + "model": "hexcasting:block/edified_button", + "y": 270 + }, + "face=floor,facing=west,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "y": 270 + }, + "face=wall,facing=east,powered=false": { + "model": "hexcasting:block/edified_button", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=east,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "uvlock": true, + "x": 90, + "y": 90 + }, + "face=wall,facing=north,powered=false": { + "model": "hexcasting:block/edified_button", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=north,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "uvlock": true, + "x": 90 + }, + "face=wall,facing=south,powered=false": { + "model": "hexcasting:block/edified_button", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=south,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "uvlock": true, + "x": 90, + "y": 180 + }, + "face=wall,facing=west,powered=false": { + "model": "hexcasting:block/edified_button", + "uvlock": true, + "x": 90, + "y": 270 + }, + "face=wall,facing=west,powered=true": { + "model": "hexcasting:block/edified_button_pressed", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_door.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_door.json new file mode 100644 index 0000000000..029d3bd5d2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_door.json @@ -0,0 +1,124 @@ +{ + "variants": { + "facing=east,half=lower,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_bottom_left" + }, + "facing=east,half=lower,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_bottom_left_open", + "y": 90 + }, + "facing=east,half=lower,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_bottom_right" + }, + "facing=east,half=lower,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_bottom_right_open", + "y": 270 + }, + "facing=east,half=upper,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_top_left" + }, + "facing=east,half=upper,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_top_left_open", + "y": 90 + }, + "facing=east,half=upper,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_top_right" + }, + "facing=east,half=upper,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_top_right_open", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_bottom_left", + "y": 270 + }, + "facing=north,half=lower,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_bottom_left_open" + }, + "facing=north,half=lower,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_bottom_right", + "y": 270 + }, + "facing=north,half=lower,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_bottom_right_open", + "y": 180 + }, + "facing=north,half=upper,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_top_left", + "y": 270 + }, + "facing=north,half=upper,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_top_left_open" + }, + "facing=north,half=upper,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_top_right", + "y": 270 + }, + "facing=north,half=upper,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_top_right_open", + "y": 180 + }, + "facing=south,half=lower,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_bottom_left", + "y": 90 + }, + "facing=south,half=lower,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_bottom_left_open", + "y": 180 + }, + "facing=south,half=lower,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_bottom_right", + "y": 90 + }, + "facing=south,half=lower,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_bottom_right_open" + }, + "facing=south,half=upper,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_top_left", + "y": 90 + }, + "facing=south,half=upper,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_top_left_open", + "y": 180 + }, + "facing=south,half=upper,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_top_right", + "y": 90 + }, + "facing=south,half=upper,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_top_right_open" + }, + "facing=west,half=lower,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_bottom_left", + "y": 180 + }, + "facing=west,half=lower,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_bottom_left_open", + "y": 270 + }, + "facing=west,half=lower,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_bottom_right", + "y": 180 + }, + "facing=west,half=lower,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_bottom_right_open", + "y": 90 + }, + "facing=west,half=upper,hinge=left,open=false": { + "model": "hexcasting:block/edified_door_top_left", + "y": 180 + }, + "facing=west,half=upper,hinge=left,open=true": { + "model": "hexcasting:block/edified_door_top_left_open", + "y": 270 + }, + "facing=west,half=upper,hinge=right,open=false": { + "model": "hexcasting:block/edified_door_top_right", + "y": 180 + }, + "facing=west,half=upper,hinge=right,open=true": { + "model": "hexcasting:block/edified_door_top_right_open", + "y": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence.json new file mode 100644 index 0000000000..7167013cf7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence.json @@ -0,0 +1,48 @@ +{ + "multipart": [ + { + "apply": { + "model": "hexcasting:block/edified_fence_post" + } + }, + { + "apply": { + "model": "hexcasting:block/edified_fence_side", + "uvlock": true + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "hexcasting:block/edified_fence_side", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "hexcasting:block/edified_fence_side", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "hexcasting:block/edified_fence_side", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence_gate.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence_gate.json new file mode 100644 index 0000000000..f925ddfddd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_fence_gate.json @@ -0,0 +1,80 @@ +{ + "variants": { + "facing=east,in_wall=false,open=false": { + "model": "hexcasting:block/edified_fence_gate", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=false,open=true": { + "model": "hexcasting:block/edified_fence_gate_open", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=false": { + "model": "hexcasting:block/edified_fence_gate_wall", + "uvlock": true, + "y": 270 + }, + "facing=east,in_wall=true,open=true": { + "model": "hexcasting:block/edified_fence_gate_wall_open", + "uvlock": true, + "y": 270 + }, + "facing=north,in_wall=false,open=false": { + "model": "hexcasting:block/edified_fence_gate", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=false,open=true": { + "model": "hexcasting:block/edified_fence_gate_open", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=false": { + "model": "hexcasting:block/edified_fence_gate_wall", + "uvlock": true, + "y": 180 + }, + "facing=north,in_wall=true,open=true": { + "model": "hexcasting:block/edified_fence_gate_wall_open", + "uvlock": true, + "y": 180 + }, + "facing=south,in_wall=false,open=false": { + "model": "hexcasting:block/edified_fence_gate", + "uvlock": true + }, + "facing=south,in_wall=false,open=true": { + "model": "hexcasting:block/edified_fence_gate_open", + "uvlock": true + }, + "facing=south,in_wall=true,open=false": { + "model": "hexcasting:block/edified_fence_gate_wall", + "uvlock": true + }, + "facing=south,in_wall=true,open=true": { + "model": "hexcasting:block/edified_fence_gate_wall_open", + "uvlock": true + }, + "facing=west,in_wall=false,open=false": { + "model": "hexcasting:block/edified_fence_gate", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=false,open=true": { + "model": "hexcasting:block/edified_fence_gate_open", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=false": { + "model": "hexcasting:block/edified_fence_gate_wall", + "uvlock": true, + "y": 90 + }, + "facing=west,in_wall=true,open=true": { + "model": "hexcasting:block/edified_fence_gate_wall_open", + "uvlock": true, + "y": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log.json new file mode 100644 index 0000000000..4cd8fe5d14 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/edified_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/edified_log" + }, + "axis=z": { + "model": "hexcasting:block/edified_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_amethyst.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_amethyst.json new file mode 100644 index 0000000000..7526dda321 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_amethyst.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/edified_log_amethyst_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/edified_log_amethyst" + }, + "axis=z": { + "model": "hexcasting:block/edified_log_amethyst_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_aventurine.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_aventurine.json new file mode 100644 index 0000000000..ed8e454e7e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_aventurine.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/edified_log_aventurine_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/edified_log_aventurine" + }, + "axis=z": { + "model": "hexcasting:block/edified_log_aventurine_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_citrine.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_citrine.json new file mode 100644 index 0000000000..258b377acb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_citrine.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/edified_log_citrine_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/edified_log_citrine" + }, + "axis=z": { + "model": "hexcasting:block/edified_log_citrine_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_purple.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_purple.json new file mode 100644 index 0000000000..078f72a986 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_log_purple.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/edified_log_purple_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/edified_log_purple" + }, + "axis=z": { + "model": "hexcasting:block/edified_log_purple_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_panel.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_panel.json new file mode 100644 index 0000000000..17d99a7903 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_panel.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/edified_panel" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_planks.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_planks.json new file mode 100644 index 0000000000..a2d790f061 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_planks.json @@ -0,0 +1,17 @@ +{ + "variants": { + "": [ + { + "model": "hexcasting:block/edified_planks", + "weight": 3 + }, + { + "model": "hexcasting:block/edified_planks_2", + "weight": 3 + }, + { + "model": "hexcasting:block/edified_planks_3" + } + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_pressure_plate.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_pressure_plate.json new file mode 100644 index 0000000000..6da4bab988 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_pressure_plate.json @@ -0,0 +1,10 @@ +{ + "variants": { + "powered=false": { + "model": "hexcasting:block/edified_pressure_plate" + }, + "powered=true": { + "model": "hexcasting:block/edified_pressure_plate_down" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_slab.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_slab.json new file mode 100644 index 0000000000..6a4d4be0d2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=bottom": { + "model": "hexcasting:block/edified_slab" + }, + "type=double": { + "model": "hexcasting:block/edified_planks" + }, + "type=top": { + "model": "hexcasting:block/edified_slab_top" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_stairs.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_stairs.json new file mode 100644 index 0000000000..23ac40ca7e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "hexcasting:block/edified_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "hexcasting:block/edified_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "hexcasting:block/edified_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "hexcasting:block/edified_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "hexcasting:block/edified_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "hexcasting:block/edified_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "hexcasting:block/edified_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "hexcasting:block/edified_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "hexcasting:block/edified_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "hexcasting:block/edified_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_tile.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_tile.json new file mode 100644 index 0000000000..23d71da006 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_tile.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/edified_tile" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_trapdoor.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_trapdoor.json new file mode 100644 index 0000000000..0df527ca32 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_trapdoor.json @@ -0,0 +1,68 @@ +{ + "variants": { + "facing=east,half=bottom,open=false": { + "model": "hexcasting:block/edified_trapdoor_bottom", + "y": 90 + }, + "facing=east,half=bottom,open=true": { + "model": "hexcasting:block/edified_trapdoor_open", + "y": 90 + }, + "facing=east,half=top,open=false": { + "model": "hexcasting:block/edified_trapdoor_top", + "y": 90 + }, + "facing=east,half=top,open=true": { + "model": "hexcasting:block/edified_trapdoor_open", + "x": 180, + "y": 270 + }, + "facing=north,half=bottom,open=false": { + "model": "hexcasting:block/edified_trapdoor_bottom" + }, + "facing=north,half=bottom,open=true": { + "model": "hexcasting:block/edified_trapdoor_open" + }, + "facing=north,half=top,open=false": { + "model": "hexcasting:block/edified_trapdoor_top" + }, + "facing=north,half=top,open=true": { + "model": "hexcasting:block/edified_trapdoor_open", + "x": 180, + "y": 180 + }, + "facing=south,half=bottom,open=false": { + "model": "hexcasting:block/edified_trapdoor_bottom", + "y": 180 + }, + "facing=south,half=bottom,open=true": { + "model": "hexcasting:block/edified_trapdoor_open", + "y": 180 + }, + "facing=south,half=top,open=false": { + "model": "hexcasting:block/edified_trapdoor_top", + "y": 180 + }, + "facing=south,half=top,open=true": { + "model": "hexcasting:block/edified_trapdoor_open", + "x": 180 + }, + "facing=west,half=bottom,open=false": { + "model": "hexcasting:block/edified_trapdoor_bottom", + "y": 270 + }, + "facing=west,half=bottom,open=true": { + "model": "hexcasting:block/edified_trapdoor_open", + "y": 270 + }, + "facing=west,half=top,open=false": { + "model": "hexcasting:block/edified_trapdoor_top", + "y": 270 + }, + "facing=west,half=top,open=true": { + "model": "hexcasting:block/edified_trapdoor_open", + "x": 180, + "y": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_wood.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_wood.json new file mode 100644 index 0000000000..1d963101fc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/edified_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/edified_wood_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/edified_wood" + }, + "axis=z": { + "model": "hexcasting:block/edified_wood_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/empty.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/empty.json new file mode 100644 index 0000000000..057ad53aa6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/empty.json @@ -0,0 +1,50 @@ +{ + "variants": { + "energized=false,facing=down": { + "model": "hexcasting:block/circle/impetus/empty/dim_down", + "x": 90 + }, + "energized=false,facing=east": { + "model": "hexcasting:block/circle/impetus/empty/dim_east", + "y": 90 + }, + "energized=false,facing=north": { + "model": "hexcasting:block/circle/impetus/empty/dim_north" + }, + "energized=false,facing=south": { + "model": "hexcasting:block/circle/impetus/empty/dim_south", + "y": 180 + }, + "energized=false,facing=up": { + "model": "hexcasting:block/circle/impetus/empty/dim_up", + "x": -90 + }, + "energized=false,facing=west": { + "model": "hexcasting:block/circle/impetus/empty/dim_west", + "y": 270 + }, + "energized=true,facing=down": { + "model": "hexcasting:block/circle/impetus/empty/lit_down", + "x": 90 + }, + "energized=true,facing=east": { + "model": "hexcasting:block/circle/impetus/empty/lit_east", + "y": 90 + }, + "energized=true,facing=north": { + "model": "hexcasting:block/circle/impetus/empty/lit_north" + }, + "energized=true,facing=south": { + "model": "hexcasting:block/circle/impetus/empty/lit_south", + "y": 180 + }, + "energized=true,facing=up": { + "model": "hexcasting:block/circle/impetus/empty/lit_up", + "x": -90 + }, + "energized=true,facing=west": { + "model": "hexcasting:block/circle/impetus/empty/lit_west", + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/look.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/look.json new file mode 100644 index 0000000000..0db9af4b2d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/look.json @@ -0,0 +1,50 @@ +{ + "variants": { + "energized=false,facing=down": { + "model": "hexcasting:block/circle/impetus/look/dim_down", + "x": 90 + }, + "energized=false,facing=east": { + "model": "hexcasting:block/circle/impetus/look/dim_east", + "y": 90 + }, + "energized=false,facing=north": { + "model": "hexcasting:block/circle/impetus/look/dim_north" + }, + "energized=false,facing=south": { + "model": "hexcasting:block/circle/impetus/look/dim_south", + "y": 180 + }, + "energized=false,facing=up": { + "model": "hexcasting:block/circle/impetus/look/dim_up", + "x": -90 + }, + "energized=false,facing=west": { + "model": "hexcasting:block/circle/impetus/look/dim_west", + "y": 270 + }, + "energized=true,facing=down": { + "model": "hexcasting:block/circle/impetus/look/lit_down", + "x": 90 + }, + "energized=true,facing=east": { + "model": "hexcasting:block/circle/impetus/look/lit_east", + "y": 90 + }, + "energized=true,facing=north": { + "model": "hexcasting:block/circle/impetus/look/lit_north" + }, + "energized=true,facing=south": { + "model": "hexcasting:block/circle/impetus/look/lit_south", + "y": 180 + }, + "energized=true,facing=up": { + "model": "hexcasting:block/circle/impetus/look/lit_up", + "x": -90 + }, + "energized=true,facing=west": { + "model": "hexcasting:block/circle/impetus/look/lit_west", + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/redstone.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/redstone.json new file mode 100644 index 0000000000..2ad46e21cd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/redstone.json @@ -0,0 +1,96 @@ +{ + "variants": { + "energized=false,facing=down,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/dim_down", + "x": 90 + }, + "energized=false,facing=down,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/dim_down", + "x": 90 + }, + "energized=false,facing=east,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/dim_east", + "y": 90 + }, + "energized=false,facing=east,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/dim_east", + "y": 90 + }, + "energized=false,facing=north,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/dim_north" + }, + "energized=false,facing=north,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/dim_north" + }, + "energized=false,facing=south,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/dim_south", + "y": 180 + }, + "energized=false,facing=south,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/dim_south", + "y": 180 + }, + "energized=false,facing=up,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/dim_up", + "x": -90 + }, + "energized=false,facing=up,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/dim_up", + "x": -90 + }, + "energized=false,facing=west,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/dim_west", + "y": 270 + }, + "energized=false,facing=west,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/dim_west", + "y": 270 + }, + "energized=true,facing=down,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/lit_down", + "x": 90 + }, + "energized=true,facing=down,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/lit_down", + "x": 90 + }, + "energized=true,facing=east,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/lit_east", + "y": 90 + }, + "energized=true,facing=east,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/lit_east", + "y": 90 + }, + "energized=true,facing=north,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/lit_north" + }, + "energized=true,facing=north,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/lit_north" + }, + "energized=true,facing=south,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/lit_south", + "y": 180 + }, + "energized=true,facing=south,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/lit_south", + "y": 180 + }, + "energized=true,facing=up,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/lit_up", + "x": -90 + }, + "energized=true,facing=up,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/lit_up", + "x": -90 + }, + "energized=true,facing=west,powered=false": { + "model": "hexcasting:block/circle/impetus/redstone/lit_west", + "y": 270 + }, + "energized=true,facing=west,powered=true": { + "model": "hexcasting:block/circle/impetus/redstone/lit_west", + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/rightclick.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/rightclick.json new file mode 100644 index 0000000000..32a772b27e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/impetus/rightclick.json @@ -0,0 +1,50 @@ +{ + "variants": { + "energized=false,facing=down": { + "model": "hexcasting:block/circle/impetus/rightclick/dim_down", + "x": 90 + }, + "energized=false,facing=east": { + "model": "hexcasting:block/circle/impetus/rightclick/dim_east", + "y": 90 + }, + "energized=false,facing=north": { + "model": "hexcasting:block/circle/impetus/rightclick/dim_north" + }, + "energized=false,facing=south": { + "model": "hexcasting:block/circle/impetus/rightclick/dim_south", + "y": 180 + }, + "energized=false,facing=up": { + "model": "hexcasting:block/circle/impetus/rightclick/dim_up", + "x": -90 + }, + "energized=false,facing=west": { + "model": "hexcasting:block/circle/impetus/rightclick/dim_west", + "y": 270 + }, + "energized=true,facing=down": { + "model": "hexcasting:block/circle/impetus/rightclick/lit_down", + "x": 90 + }, + "energized=true,facing=east": { + "model": "hexcasting:block/circle/impetus/rightclick/lit_east", + "y": 90 + }, + "energized=true,facing=north": { + "model": "hexcasting:block/circle/impetus/rightclick/lit_north" + }, + "energized=true,facing=south": { + "model": "hexcasting:block/circle/impetus/rightclick/lit_south", + "y": 180 + }, + "energized=true,facing=up": { + "model": "hexcasting:block/circle/impetus/rightclick/lit_up", + "x": -90 + }, + "energized=true,facing=west": { + "model": "hexcasting:block/circle/impetus/rightclick/lit_west", + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay.json new file mode 100644 index 0000000000..c6bce09cb5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/quenched_allay" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks.json new file mode 100644 index 0000000000..e3d66f7ed3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/quenched_allay_bricks" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks_small.json new file mode 100644 index 0000000000..72aad9ca91 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_bricks_small.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/quenched_allay_bricks_small" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_tiles.json new file mode 100644 index 0000000000..ddb791a0b1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/quenched_allay_tiles.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/quenched_allay_tiles" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper.json new file mode 100644 index 0000000000..2621fa1b04 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/scroll_paper" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper_lantern.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper_lantern.json new file mode 100644 index 0000000000..328e1b46d9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/scroll_paper_lantern.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/scroll_paper_lantern" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate.json new file mode 100644 index 0000000000..8d7a817cc1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate.json @@ -0,0 +1,122 @@ +{ + "variants": { + "energized=false,face=ceiling,facing=east": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=false,face=ceiling,facing=north": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=false,face=ceiling,facing=south": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=false,face=ceiling,facing=west": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=false,face=floor,facing=east": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=false,face=floor,facing=north": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=false,face=floor,facing=south": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=false,face=floor,facing=west": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=false,face=wall,facing=east": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90, + "y": 90 + }, + "energized=false,face=wall,facing=north": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90 + }, + "energized=false,face=wall,facing=south": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90, + "y": 180 + }, + "energized=false,face=wall,facing=west": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90, + "y": 270 + }, + "energized=true,face=ceiling,facing=east": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=true,face=ceiling,facing=north": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=true,face=ceiling,facing=south": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=true,face=ceiling,facing=west": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 180 + }, + "energized=true,face=floor,facing=east": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=true,face=floor,facing=north": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=true,face=floor,facing=south": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=true,face=floor,facing=west": { + "model": "hexcasting:block/slate", + "uvlock": true + }, + "energized=true,face=wall,facing=east": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90, + "y": 90 + }, + "energized=true,face=wall,facing=north": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90 + }, + "energized=true,face=wall,facing=south": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90, + "y": 180 + }, + "energized=true,face=wall,facing=west": { + "model": "hexcasting:block/slate", + "uvlock": true, + "x": 90, + "y": 270 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks.json new file mode 100644 index 0000000000..e99315f3fa --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks.json @@ -0,0 +1,15 @@ +{ + "variants": { + "": [ + { + "model": "hexcasting:block/deco/slate_amethyst_bricks_0" + }, + { + "model": "hexcasting:block/deco/slate_amethyst_bricks_1" + }, + { + "model": "hexcasting:block/deco/slate_amethyst_bricks_2" + } + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks_small.json new file mode 100644 index 0000000000..e6b5557c2f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_bricks_small.json @@ -0,0 +1,15 @@ +{ + "variants": { + "": [ + { + "model": "hexcasting:block/deco/slate_amethyst_bricks_small_0" + }, + { + "model": "hexcasting:block/deco/slate_amethyst_bricks_small_1" + }, + { + "model": "hexcasting:block/deco/slate_amethyst_bricks_small_2" + } + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_pillar.json new file mode 100644 index 0000000000..056bc449b3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/slate_amethyst_pillar_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/slate_amethyst_pillar" + }, + "axis=z": { + "model": "hexcasting:block/slate_amethyst_pillar_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_tiles.json new file mode 100644 index 0000000000..4c5f5d614b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_amethyst_tiles.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/deco/slate_amethyst_tiles" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_block.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_block.json new file mode 100644 index 0000000000..35169aaa2f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/slate_block" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks.json new file mode 100644 index 0000000000..003a0daafe --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/deco/slate_bricks" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks_small.json new file mode 100644 index 0000000000..cdd21fd4d3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_bricks_small.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/deco/slate_bricks_small" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_pillar.json new file mode 100644 index 0000000000..6d0e098f31 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_pillar.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/slate_pillar_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/slate_pillar" + }, + "axis=z": { + "model": "hexcasting:block/slate_pillar_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_tiles.json new file mode 100644 index 0000000000..1482ae0827 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/slate_tiles.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "hexcasting:block/deco/slate_tiles" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_log.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_log.json new file mode 100644 index 0000000000..cb09f0122f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_log.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/stripped_edified_log_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/stripped_edified_log" + }, + "axis=z": { + "model": "hexcasting:block/stripped_edified_log_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_wood.json b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_wood.json new file mode 100644 index 0000000000..b6b89e3f85 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/blockstates/stripped_edified_wood.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "hexcasting:block/stripped_edified_wood_horizontal", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "hexcasting:block/stripped_edified_wood" + }, + "axis=z": { + "model": "hexcasting:block/stripped_edified_wood_horizontal", + "x": 90 + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf.json new file mode 100644 index 0000000000..dd5103c118 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf.json @@ -0,0 +1,68 @@ +{ + "elements": [ + { + "faces": { + "down": { + "cullface": "down", + "texture": "#top_bottom" + }, + "east": { + "cullface": "east", + "texture": "#side" + }, + "north": { + "cullface": "north", + "texture": "#front" + }, + "south": { + "cullface": "south", + "texture": "#side" + }, + "up": { + "cullface": "up", + "texture": "#top_bottom" + }, + "west": { + "cullface": "west", + "texture": "#side" + } + }, + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ] + }, + { + "faces": { + "north": { + "cullface": "north", + "texture": "#overlay", + "tintindex": 0 + } + }, + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ] + } + ], + "render_type": "minecraft:cutout", + "textures": { + "front": "hexcasting:block/akashic_bookshelf", + "particle": "hexcasting:block/akashic_bookshelf_vert", + "side": "hexcasting:block/akashic_bookshelf_horiz", + "top_bottom": "hexcasting:block/akashic_bookshelf_vert" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_1.json new file mode 100644 index 0000000000..2402c6c597 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_1.json @@ -0,0 +1,6 @@ +{ + "parent": "hexcasting:block/akashic_bookshelf", + "textures": { + "overlay": "hexcasting:block/akashic_bookshelf_overlay_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_2.json new file mode 100644 index 0000000000..4846d3c2e6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_2.json @@ -0,0 +1,6 @@ +{ + "parent": "hexcasting:block/akashic_bookshelf", + "textures": { + "overlay": "hexcasting:block/akashic_bookshelf_overlay_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_3.json new file mode 100644 index 0000000000..9352317b12 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_3.json @@ -0,0 +1,6 @@ +{ + "parent": "hexcasting:block/akashic_bookshelf", + "textures": { + "overlay": "hexcasting:block/akashic_bookshelf_overlay_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_4.json new file mode 100644 index 0000000000..4f98ee656b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_4.json @@ -0,0 +1,6 @@ +{ + "parent": "hexcasting:block/akashic_bookshelf", + "textures": { + "overlay": "hexcasting:block/akashic_bookshelf_overlay_4" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_empty.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_empty.json new file mode 100644 index 0000000000..9b788e5d7c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_bookshelf_empty.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/orientable", + "textures": { + "front": "hexcasting:block/akashic_bookshelf", + "side": "hexcasting:block/akashic_bookshelf_horiz", + "top": "hexcasting:block/akashic_bookshelf_vert" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_ligature.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_ligature.json new file mode 100644 index 0000000000..72a32c3aa8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_ligature.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/akashic_ligature" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_record.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_record.json new file mode 100644 index 0000000000..7068b7d62f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/akashic_record.json @@ -0,0 +1,87 @@ +{ + "parent": "minecraft:block/block", + "elements": [ + { + "faces": { + "down": { + "cullface": "down", + "texture": "#outer" + }, + "east": { + "cullface": "east", + "texture": "#outer" + }, + "north": { + "cullface": "north", + "texture": "#outer" + }, + "south": { + "cullface": "south", + "texture": "#outer" + }, + "up": { + "cullface": "up", + "texture": "#outer" + }, + "west": { + "cullface": "west", + "texture": "#outer" + } + }, + "from": [ + 0, + 0, + 0 + ], + "to": [ + 16, + 16, + 16 + ] + }, + { + "faces": { + "down": { + "rotation": 180, + "texture": "#inner" + }, + "east": { + "rotation": 180, + "texture": "#inner" + }, + "north": { + "rotation": 180, + "texture": "#inner" + }, + "south": { + "rotation": 180, + "texture": "#inner" + }, + "up": { + "rotation": 180, + "texture": "#inner" + }, + "west": { + "rotation": 180, + "texture": "#inner" + } + }, + "from": [ + 15.75, + 15.75, + 15.75 + ], + "to": [ + 0.25, + 0.25, + 0.25 + ] + } + ], + "render_type": "minecraft:translucent", + "textures": { + "inner": "hexcasting:block/akashic_ligature", + "outer": "hexcasting:block/akashic_record", + "particle": "hexcasting:block/akashic_ligature" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_dust_block.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_dust_block.json new file mode 100644 index 0000000000..8fa450ab32 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_dust_block.json @@ -0,0 +1,6 @@ +{ + "parent": "hexcasting:block/cube_half_mirrored", + "textures": { + "all": "hexcasting:block/amethyst_dust_block" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_edified_leaves.json new file mode 100644 index 0000000000..463617eb53 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/amethyst_edified_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/leaves", + "render_type": "minecraft:cutout_mipped", + "textures": { + "all": "hexcasting:block/amethyst_edified_leaves" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper.json new file mode 100644 index 0000000000..5b5b77bbf0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/ancient_scroll_paper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..19fc5366df --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/ancient_scroll_paper_lantern.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "hexcasting:block/ancient_scroll_paper_lantern_bottom", + "side": "hexcasting:block/ancient_scroll_paper_lantern_side", + "top": "hexcasting:block/ancient_scroll_paper_lantern_top" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/aventurine_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/aventurine_edified_leaves.json new file mode 100644 index 0000000000..eb1802e0b9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/aventurine_edified_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/leaves", + "render_type": "minecraft:cutout_mipped", + "textures": { + "all": "hexcasting:block/aventurine_edified_leaves" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json new file mode 100644 index 0000000000..c132d88be4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json new file mode 100644 index 0000000000..c132d88be4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json new file mode 100644 index 0000000000..c132d88be4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json new file mode 100644 index 0000000000..c132d88be4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json new file mode 100644 index 0000000000..c132d88be4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json new file mode 100644 index 0000000000..c132d88be4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_false_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_dim_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_neither_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json new file mode 100644 index 0000000000..3477cd9b15 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json new file mode 100644 index 0000000000..3477cd9b15 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json new file mode 100644 index 0000000000..3477cd9b15 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json new file mode 100644 index 0000000000..3477cd9b15 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json new file mode 100644 index 0000000000..3477cd9b15 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json new file mode 100644 index 0000000000..3477cd9b15 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/dim_true_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_dim_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json new file mode 100644 index 0000000000..ccc4319820 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json new file mode 100644 index 0000000000..ccc4319820 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json new file mode 100644 index 0000000000..ccc4319820 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json new file mode 100644 index 0000000000..ccc4319820 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json new file mode 100644 index 0000000000..ccc4319820 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json new file mode 100644 index 0000000000..ccc4319820 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_false_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_false", + "north": "hexcasting:block/circle/directrix/boolean/front_lit_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_false", + "west": "hexcasting:block/circle/directrix/boolean/right_false" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json new file mode 100644 index 0000000000..20c3b6cedf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_neither_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_neither", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_not_true", + "up": "hexcasting:block/circle/directrix/boolean/top_neither", + "west": "hexcasting:block/circle/directrix/boolean/right_neither" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json new file mode 100644 index 0000000000..5c453220fd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json new file mode 100644 index 0000000000..5c453220fd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json new file mode 100644 index 0000000000..5c453220fd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json new file mode 100644 index 0000000000..5c453220fd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json new file mode 100644 index 0000000000..5c453220fd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json new file mode 100644 index 0000000000..5c453220fd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/boolean/lit_true_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/boolean/left_true", + "north": "hexcasting:block/circle/directrix/boolean/front_not_false", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/boolean/back_lit_true", + "up": "hexcasting:block/circle/directrix/boolean/top_true", + "west": "hexcasting:block/circle/directrix/boolean/right_true" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json new file mode 100644 index 0000000000..8178542bf4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_dim", + "north": "hexcasting:block/circle/directrix/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_dim", + "up": "hexcasting:block/circle/directrix/empty/top_dim", + "west": "hexcasting:block/circle/directrix/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json new file mode 100644 index 0000000000..8178542bf4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_dim", + "north": "hexcasting:block/circle/directrix/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_dim", + "up": "hexcasting:block/circle/directrix/empty/top_dim", + "west": "hexcasting:block/circle/directrix/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json new file mode 100644 index 0000000000..8178542bf4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_dim", + "north": "hexcasting:block/circle/directrix/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_dim", + "up": "hexcasting:block/circle/directrix/empty/top_dim", + "west": "hexcasting:block/circle/directrix/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json new file mode 100644 index 0000000000..8178542bf4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_dim", + "north": "hexcasting:block/circle/directrix/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_dim", + "up": "hexcasting:block/circle/directrix/empty/top_dim", + "west": "hexcasting:block/circle/directrix/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json new file mode 100644 index 0000000000..8178542bf4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_dim", + "north": "hexcasting:block/circle/directrix/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_dim", + "up": "hexcasting:block/circle/directrix/empty/top_dim", + "west": "hexcasting:block/circle/directrix/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json new file mode 100644 index 0000000000..8178542bf4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/dim_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_dim", + "north": "hexcasting:block/circle/directrix/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_dim", + "up": "hexcasting:block/circle/directrix/empty/top_dim", + "west": "hexcasting:block/circle/directrix/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json new file mode 100644 index 0000000000..8da64102c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_lit", + "north": "hexcasting:block/circle/directrix/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_lit", + "up": "hexcasting:block/circle/directrix/empty/top_lit", + "west": "hexcasting:block/circle/directrix/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json new file mode 100644 index 0000000000..8da64102c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_lit", + "north": "hexcasting:block/circle/directrix/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_lit", + "up": "hexcasting:block/circle/directrix/empty/top_lit", + "west": "hexcasting:block/circle/directrix/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json new file mode 100644 index 0000000000..8da64102c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_lit", + "north": "hexcasting:block/circle/directrix/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_lit", + "up": "hexcasting:block/circle/directrix/empty/top_lit", + "west": "hexcasting:block/circle/directrix/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json new file mode 100644 index 0000000000..8da64102c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_lit", + "north": "hexcasting:block/circle/directrix/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_lit", + "up": "hexcasting:block/circle/directrix/empty/top_lit", + "west": "hexcasting:block/circle/directrix/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json new file mode 100644 index 0000000000..8da64102c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_lit", + "north": "hexcasting:block/circle/directrix/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_lit", + "up": "hexcasting:block/circle/directrix/empty/top_lit", + "west": "hexcasting:block/circle/directrix/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json new file mode 100644 index 0000000000..8da64102c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/empty/lit_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/empty/left_lit", + "north": "hexcasting:block/circle/directrix/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/empty/back_lit", + "up": "hexcasting:block/circle/directrix/empty/top_lit", + "west": "hexcasting:block/circle/directrix/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json new file mode 100644 index 0000000000..adb3eb5128 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json new file mode 100644 index 0000000000..adb3eb5128 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json new file mode 100644 index 0000000000..adb3eb5128 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json new file mode 100644 index 0000000000..adb3eb5128 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json new file mode 100644 index 0000000000..adb3eb5128 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json new file mode 100644 index 0000000000..adb3eb5128 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_powered_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json new file mode 100644 index 0000000000..c191d8a113 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json new file mode 100644 index 0000000000..c191d8a113 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json new file mode 100644 index 0000000000..c191d8a113 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json new file mode 100644 index 0000000000..c191d8a113 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json new file mode 100644 index 0000000000..c191d8a113 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json new file mode 100644 index 0000000000..c191d8a113 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/dim_unpowered_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json new file mode 100644 index 0000000000..97d3da2808 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json new file mode 100644 index 0000000000..97d3da2808 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json new file mode 100644 index 0000000000..97d3da2808 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json new file mode 100644 index 0000000000..97d3da2808 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json new file mode 100644 index 0000000000..97d3da2808 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json new file mode 100644 index 0000000000..97d3da2808 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_powered_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_powered", + "north": "hexcasting:block/circle/directrix/redstone/front_lit_powered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_dim_powered", + "up": "hexcasting:block/circle/directrix/redstone/top_powered", + "west": "hexcasting:block/circle/directrix/redstone/right_powered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json new file mode 100644 index 0000000000..722076a071 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json new file mode 100644 index 0000000000..722076a071 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json new file mode 100644 index 0000000000..722076a071 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json new file mode 100644 index 0000000000..722076a071 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json new file mode 100644 index 0000000000..722076a071 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json new file mode 100644 index 0000000000..722076a071 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/directrix/redstone/lit_unpowered_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/directrix/redstone/left_unpowered", + "north": "hexcasting:block/circle/directrix/redstone/front_dim_unpowered", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/directrix/redstone/back_lit_unpowered", + "up": "hexcasting:block/circle/directrix/redstone/top_unpowered", + "west": "hexcasting:block/circle/directrix/redstone/right_unpowered" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json new file mode 100644 index 0000000000..479ee7c42b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_dim", + "north": "hexcasting:block/circle/impetus/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/empty/top_dim", + "west": "hexcasting:block/circle/impetus/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json new file mode 100644 index 0000000000..479ee7c42b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_dim", + "north": "hexcasting:block/circle/impetus/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/empty/top_dim", + "west": "hexcasting:block/circle/impetus/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json new file mode 100644 index 0000000000..479ee7c42b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_dim", + "north": "hexcasting:block/circle/impetus/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/empty/top_dim", + "west": "hexcasting:block/circle/impetus/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json new file mode 100644 index 0000000000..479ee7c42b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_dim", + "north": "hexcasting:block/circle/impetus/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/empty/top_dim", + "west": "hexcasting:block/circle/impetus/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json new file mode 100644 index 0000000000..479ee7c42b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_dim", + "north": "hexcasting:block/circle/impetus/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/empty/top_dim", + "west": "hexcasting:block/circle/impetus/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json new file mode 100644 index 0000000000..479ee7c42b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/dim_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_dim", + "north": "hexcasting:block/circle/impetus/empty/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/empty/top_dim", + "west": "hexcasting:block/circle/impetus/empty/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json new file mode 100644 index 0000000000..1fb7369cd2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_lit", + "north": "hexcasting:block/circle/impetus/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/empty/top_lit", + "west": "hexcasting:block/circle/impetus/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json new file mode 100644 index 0000000000..1fb7369cd2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_lit", + "north": "hexcasting:block/circle/impetus/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/empty/top_lit", + "west": "hexcasting:block/circle/impetus/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json new file mode 100644 index 0000000000..1fb7369cd2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_lit", + "north": "hexcasting:block/circle/impetus/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/empty/top_lit", + "west": "hexcasting:block/circle/impetus/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json new file mode 100644 index 0000000000..1fb7369cd2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_lit", + "north": "hexcasting:block/circle/impetus/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/empty/top_lit", + "west": "hexcasting:block/circle/impetus/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json new file mode 100644 index 0000000000..1fb7369cd2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_lit", + "north": "hexcasting:block/circle/impetus/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/empty/top_lit", + "west": "hexcasting:block/circle/impetus/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json new file mode 100644 index 0000000000..1fb7369cd2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/empty/lit_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/empty/left_lit", + "north": "hexcasting:block/circle/impetus/empty/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/empty/top_lit", + "west": "hexcasting:block/circle/impetus/empty/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json new file mode 100644 index 0000000000..76165760a5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_dim", + "north": "hexcasting:block/circle/impetus/look/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/look/top_dim", + "west": "hexcasting:block/circle/impetus/look/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json new file mode 100644 index 0000000000..76165760a5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_dim", + "north": "hexcasting:block/circle/impetus/look/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/look/top_dim", + "west": "hexcasting:block/circle/impetus/look/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json new file mode 100644 index 0000000000..76165760a5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_dim", + "north": "hexcasting:block/circle/impetus/look/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/look/top_dim", + "west": "hexcasting:block/circle/impetus/look/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json new file mode 100644 index 0000000000..76165760a5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_dim", + "north": "hexcasting:block/circle/impetus/look/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/look/top_dim", + "west": "hexcasting:block/circle/impetus/look/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json new file mode 100644 index 0000000000..76165760a5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_dim", + "north": "hexcasting:block/circle/impetus/look/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/look/top_dim", + "west": "hexcasting:block/circle/impetus/look/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json new file mode 100644 index 0000000000..76165760a5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/dim_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_dim", + "north": "hexcasting:block/circle/impetus/look/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/look/top_dim", + "west": "hexcasting:block/circle/impetus/look/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json new file mode 100644 index 0000000000..504eba8930 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_lit", + "north": "hexcasting:block/circle/impetus/look/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/look/top_lit", + "west": "hexcasting:block/circle/impetus/look/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json new file mode 100644 index 0000000000..504eba8930 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_lit", + "north": "hexcasting:block/circle/impetus/look/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/look/top_lit", + "west": "hexcasting:block/circle/impetus/look/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json new file mode 100644 index 0000000000..504eba8930 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_lit", + "north": "hexcasting:block/circle/impetus/look/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/look/top_lit", + "west": "hexcasting:block/circle/impetus/look/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json new file mode 100644 index 0000000000..504eba8930 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_lit", + "north": "hexcasting:block/circle/impetus/look/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/look/top_lit", + "west": "hexcasting:block/circle/impetus/look/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json new file mode 100644 index 0000000000..504eba8930 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_lit", + "north": "hexcasting:block/circle/impetus/look/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/look/top_lit", + "west": "hexcasting:block/circle/impetus/look/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json new file mode 100644 index 0000000000..504eba8930 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/look/lit_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/look/left_lit", + "north": "hexcasting:block/circle/impetus/look/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/look/top_lit", + "west": "hexcasting:block/circle/impetus/look/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json new file mode 100644 index 0000000000..71ea895f6a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_dim", + "north": "hexcasting:block/circle/impetus/redstone/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/redstone/top_dim", + "west": "hexcasting:block/circle/impetus/redstone/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json new file mode 100644 index 0000000000..71ea895f6a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_dim", + "north": "hexcasting:block/circle/impetus/redstone/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/redstone/top_dim", + "west": "hexcasting:block/circle/impetus/redstone/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json new file mode 100644 index 0000000000..71ea895f6a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_dim", + "north": "hexcasting:block/circle/impetus/redstone/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/redstone/top_dim", + "west": "hexcasting:block/circle/impetus/redstone/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json new file mode 100644 index 0000000000..71ea895f6a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_dim", + "north": "hexcasting:block/circle/impetus/redstone/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/redstone/top_dim", + "west": "hexcasting:block/circle/impetus/redstone/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json new file mode 100644 index 0000000000..71ea895f6a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_dim", + "north": "hexcasting:block/circle/impetus/redstone/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/redstone/top_dim", + "west": "hexcasting:block/circle/impetus/redstone/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json new file mode 100644 index 0000000000..71ea895f6a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/dim_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_dim", + "north": "hexcasting:block/circle/impetus/redstone/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/redstone/top_dim", + "west": "hexcasting:block/circle/impetus/redstone/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json new file mode 100644 index 0000000000..12630ca3cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_lit", + "north": "hexcasting:block/circle/impetus/redstone/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/redstone/top_lit", + "west": "hexcasting:block/circle/impetus/redstone/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json new file mode 100644 index 0000000000..12630ca3cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_lit", + "north": "hexcasting:block/circle/impetus/redstone/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/redstone/top_lit", + "west": "hexcasting:block/circle/impetus/redstone/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json new file mode 100644 index 0000000000..12630ca3cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_lit", + "north": "hexcasting:block/circle/impetus/redstone/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/redstone/top_lit", + "west": "hexcasting:block/circle/impetus/redstone/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json new file mode 100644 index 0000000000..12630ca3cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_lit", + "north": "hexcasting:block/circle/impetus/redstone/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/redstone/top_lit", + "west": "hexcasting:block/circle/impetus/redstone/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json new file mode 100644 index 0000000000..12630ca3cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_lit", + "north": "hexcasting:block/circle/impetus/redstone/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/redstone/top_lit", + "west": "hexcasting:block/circle/impetus/redstone/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json new file mode 100644 index 0000000000..12630ca3cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/redstone/lit_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/redstone/left_lit", + "north": "hexcasting:block/circle/impetus/redstone/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/redstone/top_lit", + "west": "hexcasting:block/circle/impetus/redstone/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json new file mode 100644 index 0000000000..c5fdbc02b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_dim", + "north": "hexcasting:block/circle/impetus/rightclick/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/rightclick/top_dim", + "west": "hexcasting:block/circle/impetus/rightclick/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json new file mode 100644 index 0000000000..c5fdbc02b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_dim", + "north": "hexcasting:block/circle/impetus/rightclick/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/rightclick/top_dim", + "west": "hexcasting:block/circle/impetus/rightclick/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json new file mode 100644 index 0000000000..c5fdbc02b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_dim", + "north": "hexcasting:block/circle/impetus/rightclick/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/rightclick/top_dim", + "west": "hexcasting:block/circle/impetus/rightclick/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json new file mode 100644 index 0000000000..c5fdbc02b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_dim", + "north": "hexcasting:block/circle/impetus/rightclick/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/rightclick/top_dim", + "west": "hexcasting:block/circle/impetus/rightclick/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json new file mode 100644 index 0000000000..c5fdbc02b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_dim", + "north": "hexcasting:block/circle/impetus/rightclick/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/rightclick/top_dim", + "west": "hexcasting:block/circle/impetus/rightclick/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json new file mode 100644 index 0000000000..c5fdbc02b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/dim_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_dim", + "north": "hexcasting:block/circle/impetus/rightclick/front_dim", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_dim", + "up": "hexcasting:block/circle/impetus/rightclick/top_dim", + "west": "hexcasting:block/circle/impetus/rightclick/right_dim" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json new file mode 100644 index 0000000000..3840e6cb08 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_down.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_lit", + "north": "hexcasting:block/circle/impetus/rightclick/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/rightclick/top_lit", + "west": "hexcasting:block/circle/impetus/rightclick/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json new file mode 100644 index 0000000000..3840e6cb08 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_east.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_lit", + "north": "hexcasting:block/circle/impetus/rightclick/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/rightclick/top_lit", + "west": "hexcasting:block/circle/impetus/rightclick/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json new file mode 100644 index 0000000000..3840e6cb08 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_north.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_lit", + "north": "hexcasting:block/circle/impetus/rightclick/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/rightclick/top_lit", + "west": "hexcasting:block/circle/impetus/rightclick/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json new file mode 100644 index 0000000000..3840e6cb08 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_south.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_lit", + "north": "hexcasting:block/circle/impetus/rightclick/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/rightclick/top_lit", + "west": "hexcasting:block/circle/impetus/rightclick/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json new file mode 100644 index 0000000000..3840e6cb08 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_up.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_lit", + "north": "hexcasting:block/circle/impetus/rightclick/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/rightclick/top_lit", + "west": "hexcasting:block/circle/impetus/rightclick/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json new file mode 100644 index 0000000000..3840e6cb08 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/circle/impetus/rightclick/lit_west.json @@ -0,0 +1,12 @@ +{ + "parent": "minecraft:block/cube", + "textures": { + "down": "hexcasting:block/circle/bottom", + "east": "hexcasting:block/circle/impetus/rightclick/left_lit", + "north": "hexcasting:block/circle/impetus/rightclick/front_lit", + "particle": "hexcasting:block/slate_block", + "south": "hexcasting:block/circle/impetus/back_lit", + "up": "hexcasting:block/circle/impetus/rightclick/top_lit", + "west": "hexcasting:block/circle/impetus/rightclick/right_lit" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/citrine_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/citrine_edified_leaves.json new file mode 100644 index 0000000000..3bef12c734 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/citrine_edified_leaves.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/leaves", + "render_type": "minecraft:cutout_mipped", + "textures": { + "all": "hexcasting:block/citrine_edified_leaves" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/conjured.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/conjured.json new file mode 100644 index 0000000000..9f80c11ee0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/conjured.json @@ -0,0 +1,6 @@ +{ + "render_type": "minecraft:cutout", + "textures": { + "particle": "minecraft:block/amethyst_block" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks.json new file mode 100644 index 0000000000..89c8ec51c2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/amethyst_bricks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks_small.json new file mode 100644 index 0000000000..fc1202b603 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_bricks_small.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/amethyst_bricks_small" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_pillar.json new file mode 100644 index 0000000000..5ee8934b7a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_pillar.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "hexcasting:block/deco/amethyst_pillar_bottom", + "side": "hexcasting:block/deco/amethyst_pillar_side", + "top": "hexcasting:block/deco/amethyst_pillar_top" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_tiles.json new file mode 100644 index 0000000000..ab9ffcda39 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/amethyst_tiles.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/amethyst_tiles" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_0.json new file mode 100644 index 0000000000..e0c97c18e6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_1.json new file mode 100644 index 0000000000..61215cda68 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_2.json new file mode 100644 index 0000000000..536da9000b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_3.json new file mode 100644 index 0000000000..e45bf99d14 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_0.json new file mode 100644 index 0000000000..2b93f32793 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_small_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_1.json new file mode 100644 index 0000000000..91ade20515 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_small_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_2.json new file mode 100644 index 0000000000..e6b6bd7b22 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_small_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_3.json new file mode 100644 index 0000000000..7da0cdfcf8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_bricks_small_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_small_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_0.json new file mode 100644 index 0000000000..3d953c5628 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_tiles_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_1.json new file mode 100644 index 0000000000..6d6150b8d5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_tiles_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_2.json new file mode 100644 index 0000000000..758194fe82 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_tiles_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_3.json new file mode 100644 index 0000000000..5c83c33eb0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/quenched_allay_tiles_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_tiles_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_0.json new file mode 100644 index 0000000000..910ec09904 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_amethyst_bricks_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_1.json new file mode 100644 index 0000000000..4d565a54ae --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_amethyst_bricks_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_2.json new file mode 100644 index 0000000000..a9072bacc0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_amethyst_bricks_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_0.json new file mode 100644 index 0000000000..ad3c92af5d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_amethyst_bricks_small_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_1.json new file mode 100644 index 0000000000..1f24ff9a6d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_amethyst_bricks_small_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_2.json new file mode 100644 index 0000000000..e106adbead --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_bricks_small_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_amethyst_bricks_small_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_tiles.json new file mode 100644 index 0000000000..2c80ba1498 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_amethyst_tiles.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_amethyst_tiles" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks.json new file mode 100644 index 0000000000..7fb51bcd7c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_bricks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks_small.json new file mode 100644 index 0000000000..3b262eafff --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_bricks_small.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_bricks_small" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_tiles.json new file mode 100644 index 0000000000..d18efee914 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/deco/slate_tiles.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/slate_tiles" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button.json new file mode 100644 index 0000000000..1c75ef18d3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button_pressed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button_pressed.json new file mode 100644 index 0000000000..a026dba7ad --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_pressed", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left.json new file mode 100644 index 0000000000..610c3ae5b9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_bottom_left", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left_open.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left_open.json new file mode 100644 index 0000000000..acf2e96275 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_bottom_left_open", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right.json new file mode 100644 index 0000000000..2eaa905b77 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_bottom_right", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right_open.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right_open.json new file mode 100644 index 0000000000..8a46564f74 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_bottom_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_bottom_right_open", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left.json new file mode 100644 index 0000000000..90ea9df1d9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_top_left", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left_open.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left_open.json new file mode 100644 index 0000000000..5573390683 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_left_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_top_left_open", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right.json new file mode 100644 index 0000000000..3a78e863b7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_top_right", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right_open.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right_open.json new file mode 100644 index 0000000000..26d8c1a200 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_door_top_right_open.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/door_top_right_open", + "render_type": "minecraft:cutout", + "textures": { + "bottom": "hexcasting:block/edified_door_lower", + "top": "hexcasting:block/edified_door_upper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate.json new file mode 100644 index 0000000000..c3015ca6d3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_open.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_open.json new file mode 100644 index 0000000000..ac141eb406 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_open", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall.json new file mode 100644 index 0000000000..ea98b16740 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall_open.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall_open.json new file mode 100644 index 0000000000..86d82ca2fc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_gate_wall_open.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_fence_gate_wall_open", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_post.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_post.json new file mode 100644 index 0000000000..281f2acc6d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_post", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_side.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_side.json new file mode 100644 index 0000000000..707af51bf2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_fence_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/fence_side", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log.json new file mode 100644 index 0000000000..9ba1530b0c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst.json new file mode 100644 index 0000000000..e9833c81a8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_amethyst" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst_horizontal.json new file mode 100644 index 0000000000..fdfc8bd1c1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_amethyst_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_amethyst" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine.json new file mode 100644 index 0000000000..f9f832f6ee --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_aventurine" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine_horizontal.json new file mode 100644 index 0000000000..e7ddcd8ed5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_aventurine_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_aventurine" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine.json new file mode 100644 index 0000000000..ea1b1d60a5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_citrine" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine_horizontal.json new file mode 100644 index 0000000000..2ae70b9aef --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_citrine_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_citrine" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_horizontal.json new file mode 100644 index 0000000000..84e434e72a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple.json new file mode 100644 index 0000000000..70736370d2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_purple" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple_horizontal.json new file mode 100644 index 0000000000..235890db18 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_log_purple_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/edified_log_top", + "side": "hexcasting:block/deco/edified_log_purple" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_panel.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_panel.json new file mode 100644 index 0000000000..3d790f2af0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_panel.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/edified_panel" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks.json new file mode 100644 index 0000000000..a722301054 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_2.json new file mode 100644 index 0000000000..d0c4c5832b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/edified_planks_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_3.json new file mode 100644 index 0000000000..bad8e6ac05 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_planks_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/edified_planks_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate.json new file mode 100644 index 0000000000..5a1b2b5727 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_up", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate_down.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate_down.json new file mode 100644 index 0000000000..eeaa36461c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_pressure_plate_down.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pressure_plate_down", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab.json new file mode 100644 index 0000000000..09d601ec7b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "hexcasting:block/edified_planks", + "side": "hexcasting:block/edified_planks", + "top": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab_top.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab_top.json new file mode 100644 index 0000000000..f4d2fcf98c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "hexcasting:block/edified_planks", + "side": "hexcasting:block/edified_planks", + "top": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs.json new file mode 100644 index 0000000000..6e9ae9aaae --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "hexcasting:block/edified_planks", + "side": "hexcasting:block/edified_planks", + "top": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_inner.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_inner.json new file mode 100644 index 0000000000..7597f2c8a4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "hexcasting:block/edified_planks", + "side": "hexcasting:block/edified_planks", + "top": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_outer.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_outer.json new file mode 100644 index 0000000000..62d7ab50a9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "hexcasting:block/edified_planks", + "side": "hexcasting:block/edified_planks", + "top": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_tile.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_tile.json new file mode 100644 index 0000000000..595adf007a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_tile.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/edified_tile" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_bottom.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_bottom.json new file mode 100644 index 0000000000..9c65b36965 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_bottom.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_bottom", + "render_type": "minecraft:cutout", + "textures": { + "texture": "hexcasting:block/edified_trapdoor" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_open.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_open.json new file mode 100644 index 0000000000..40217afd9c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_open.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_open", + "render_type": "minecraft:cutout", + "textures": { + "texture": "hexcasting:block/edified_trapdoor" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_top.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_top.json new file mode 100644 index 0000000000..325f5d4351 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_trapdoor_top.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/template_orientable_trapdoor_top", + "render_type": "minecraft:cutout", + "textures": { + "texture": "hexcasting:block/edified_trapdoor" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood.json new file mode 100644 index 0000000000..22851df079 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/edified_log", + "side": "hexcasting:block/edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood_horizontal.json new file mode 100644 index 0000000000..72149b4bc9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/edified_wood_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/edified_log", + "side": "hexcasting:block/edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay.json new file mode 100644 index 0000000000..6c2a8abe6d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/quenched_allay_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_0.json new file mode 100644 index 0000000000..6c2a8abe6d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/quenched_allay_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_1.json new file mode 100644 index 0000000000..441d91052a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/quenched_allay_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_2.json new file mode 100644 index 0000000000..a561a358cc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/quenched_allay_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_3.json new file mode 100644 index 0000000000..a6fe237391 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/quenched_allay_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks.json new file mode 100644 index 0000000000..e0c97c18e6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks_small.json new file mode 100644 index 0000000000..2b93f32793 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_bricks_small.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_bricks_small_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_tiles.json new file mode 100644 index 0000000000..3d953c5628 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/quenched_allay_tiles.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/deco/quenched_allay_tiles_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper.json new file mode 100644 index 0000000000..621451b72c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/scroll_paper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper_lantern.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper_lantern.json new file mode 100644 index 0000000000..3c16a2113f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/scroll_paper_lantern.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/cube_bottom_top", + "textures": { + "bottom": "hexcasting:block/scroll_paper_lantern_bottom", + "side": "hexcasting:block/scroll_paper_lantern_side", + "top": "hexcasting:block/scroll_paper_lantern_top" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar.json new file mode 100644 index 0000000000..1ec3ef6cf3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/deco/slate_amethyst_pillar_end", + "side": "hexcasting:block/deco/slate_amethyst_pillar_side" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar_horizontal.json new file mode 100644 index 0000000000..bbd24d1c98 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_amethyst_pillar_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/deco/slate_amethyst_pillar_end", + "side": "hexcasting:block/deco/slate_amethyst_pillar_side" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_block.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_block.json new file mode 100644 index 0000000000..2d8635f925 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "hexcasting:block/slate_block" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar.json new file mode 100644 index 0000000000..697f4daab2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/deco/slate_pillar_end", + "side": "hexcasting:block/deco/slate_pillar_side" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar_horizontal.json new file mode 100644 index 0000000000..cca16a0c07 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/slate_pillar_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/deco/slate_pillar_end", + "side": "hexcasting:block/deco/slate_pillar_side" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log.json new file mode 100644 index 0000000000..4aa871e92c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/stripped_edified_log_top", + "side": "hexcasting:block/stripped_edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log_horizontal.json new file mode 100644 index 0000000000..0925c23c78 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_log_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/stripped_edified_log_top", + "side": "hexcasting:block/stripped_edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood.json new file mode 100644 index 0000000000..8ef17c0d21 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "hexcasting:block/stripped_edified_log", + "side": "hexcasting:block/stripped_edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood_horizontal.json b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood_horizontal.json new file mode 100644 index 0000000000..57dcfcc53c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/block/stripped_edified_wood_horizontal.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column_horizontal", + "textures": { + "end": "hexcasting:block/stripped_edified_log", + "side": "hexcasting:block/stripped_edified_log" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/abacus.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/abacus.json new file mode 100644 index 0000000000..f6947c4360 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/abacus.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/abacus" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_bookshelf.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_bookshelf.json new file mode 100644 index 0000000000..7c88c3e218 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_bookshelf.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/akashic_bookshelf_empty" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_ligature.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_ligature.json new file mode 100644 index 0000000000..de9a37be49 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_ligature.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/akashic_ligature" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_record.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_record.json new file mode 100644 index 0000000000..1ea5e0eeb6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/akashic_record.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/akashic_record" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks.json new file mode 100644 index 0000000000..5ec0842948 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/amethyst_bricks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks_small.json new file mode 100644 index 0000000000..1b8fe48dd2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_bricks_small.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/amethyst_bricks_small" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust.json new file mode 100644 index 0000000000..140659dfab --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/amethyst_dust" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust_block.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust_block.json new file mode 100644 index 0000000000..8cd53fc3ab --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_dust_block.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/amethyst_dust_block" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_edified_leaves.json new file mode 100644 index 0000000000..d6015ea1f2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_edified_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/amethyst_edified_leaves" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_pillar.json new file mode 100644 index 0000000000..98d9d0c82f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/amethyst_pillar" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_sconce.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_sconce.json new file mode 100644 index 0000000000..bb1657f9a1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_sconce.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/amethyst_sconce" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_tiles.json new file mode 100644 index 0000000000..b8ecd40c70 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/amethyst_tiles.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/amethyst_tiles" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json new file mode 100644 index 0000000000..ffc8b5e1cc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher.json @@ -0,0 +1,120 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/ancient_cypher", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_0_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_1", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_1_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_2", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_2_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_3", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_3_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_4", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_4_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_5", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_5_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_6", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_6_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_7", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/ancient_cypher_7_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 7.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/cad/0_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json new file mode 100644 index 0000000000..b38ad18d6d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_0_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_ancient_cypher", + "layer1": "hexcasting:item/cad/0_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json new file mode 100644 index 0000000000..e8b7b12d55 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json new file mode 100644 index 0000000000..856b0a26d7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_1_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_ancient_cypher", + "layer1": "hexcasting:item/cad/1_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json new file mode 100644 index 0000000000..3badfcdd0f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json new file mode 100644 index 0000000000..effb9e0198 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_2_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_ancient_cypher", + "layer1": "hexcasting:item/cad/2_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json new file mode 100644 index 0000000000..98aabd91e8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json new file mode 100644 index 0000000000..2f19e9feea --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_3_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_ancient_cypher", + "layer1": "hexcasting:item/cad/3_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json new file mode 100644 index 0000000000..93318f7bc4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json new file mode 100644 index 0000000000..081cfd65c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_4_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_ancient_cypher", + "layer1": "hexcasting:item/cad/4_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json new file mode 100644 index 0000000000..9d247cdd23 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json new file mode 100644 index 0000000000..0ed6accc2a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_5_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_ancient_cypher", + "layer1": "hexcasting:item/cad/5_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json new file mode 100644 index 0000000000..bf9c9fe505 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json new file mode 100644 index 0000000000..199292d90f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_6_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_ancient_cypher", + "layer1": "hexcasting:item/cad/6_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json new file mode 100644 index 0000000000..56e0653080 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_ancient_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json new file mode 100644 index 0000000000..b408892c14 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_cypher_7_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_ancient_cypher", + "layer1": "hexcasting:item/cad/7_ancient_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper.json new file mode 100644 index 0000000000..810d0e68c5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/ancient_scroll_paper" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..39cf0ac289 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/ancient_scroll_paper_lantern.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/ancient_scroll_paper_lantern" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact.json new file mode 100644 index 0000000000..d0db0e434f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact.json @@ -0,0 +1,120 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/artifact", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/artifact_0_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/artifact_1", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/artifact_1_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/artifact_2", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/artifact_2_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/artifact_3", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/artifact_3_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/artifact_4", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/artifact_4_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/artifact_5", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/artifact_5_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/artifact_6", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/artifact_6_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/artifact_7", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/artifact_7_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 7.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/cad/0_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_0_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_0_filled.json new file mode 100644 index 0000000000..1e835b5f74 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_0_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_artifact", + "layer1": "hexcasting:item/cad/0_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1.json new file mode 100644 index 0000000000..870900b6f1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1_filled.json new file mode 100644 index 0000000000..a0f005be3f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_1_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_artifact", + "layer1": "hexcasting:item/cad/1_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2.json new file mode 100644 index 0000000000..f2f7fbea97 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2_filled.json new file mode 100644 index 0000000000..cade3931d1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_2_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_artifact", + "layer1": "hexcasting:item/cad/2_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3.json new file mode 100644 index 0000000000..2cb6553e13 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3_filled.json new file mode 100644 index 0000000000..23c0456285 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_3_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_artifact", + "layer1": "hexcasting:item/cad/3_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4.json new file mode 100644 index 0000000000..216c308d2c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4_filled.json new file mode 100644 index 0000000000..d48959f9d1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_4_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_artifact", + "layer1": "hexcasting:item/cad/4_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5.json new file mode 100644 index 0000000000..4a6f9ef1fb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5_filled.json new file mode 100644 index 0000000000..1f64bdfda5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_5_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_artifact", + "layer1": "hexcasting:item/cad/5_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6.json new file mode 100644 index 0000000000..c66d93ec85 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6_filled.json new file mode 100644 index 0000000000..3d5f969ddf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_6_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_artifact", + "layer1": "hexcasting:item/cad/6_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7.json new file mode 100644 index 0000000000..1b89f90904 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7_filled.json new file mode 100644 index 0000000000..0e9043060d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/artifact_7_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_artifact", + "layer1": "hexcasting:item/cad/7_artifact_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/aventurine_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/aventurine_edified_leaves.json new file mode 100644 index 0000000000..0ae3302116 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/aventurine_edified_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/aventurine_edified_leaves" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/battery.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/battery.json new file mode 100644 index 0000000000..11be0c6cd1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/battery.json @@ -0,0 +1,179 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/phial_small_0", + "predicate": { + "hexcasting:max_media": 0.0, + "hexcasting:media": 0.0 + } + }, + { + "model": "hexcasting:item/phial_small_1", + "predicate": { + "hexcasting:max_media": 0.0, + "hexcasting:media": 0.25 + } + }, + { + "model": "hexcasting:item/phial_small_2", + "predicate": { + "hexcasting:max_media": 0.0, + "hexcasting:media": 0.5 + } + }, + { + "model": "hexcasting:item/phial_small_3", + "predicate": { + "hexcasting:max_media": 0.0, + "hexcasting:media": 0.75 + } + }, + { + "model": "hexcasting:item/phial_small_4", + "predicate": { + "hexcasting:max_media": 0.0, + "hexcasting:media": 1.0 + } + }, + { + "model": "hexcasting:item/phial_medium_0", + "predicate": { + "hexcasting:max_media": 1.0, + "hexcasting:media": 0.0 + } + }, + { + "model": "hexcasting:item/phial_medium_1", + "predicate": { + "hexcasting:max_media": 1.0, + "hexcasting:media": 0.25 + } + }, + { + "model": "hexcasting:item/phial_medium_2", + "predicate": { + "hexcasting:max_media": 1.0, + "hexcasting:media": 0.5 + } + }, + { + "model": "hexcasting:item/phial_medium_3", + "predicate": { + "hexcasting:max_media": 1.0, + "hexcasting:media": 0.75 + } + }, + { + "model": "hexcasting:item/phial_medium_4", + "predicate": { + "hexcasting:max_media": 1.0, + "hexcasting:media": 1.0 + } + }, + { + "model": "hexcasting:item/phial_large_0", + "predicate": { + "hexcasting:max_media": 2.0, + "hexcasting:media": 0.0 + } + }, + { + "model": "hexcasting:item/phial_large_1", + "predicate": { + "hexcasting:max_media": 2.0, + "hexcasting:media": 0.25 + } + }, + { + "model": "hexcasting:item/phial_large_2", + "predicate": { + "hexcasting:max_media": 2.0, + "hexcasting:media": 0.5 + } + }, + { + "model": "hexcasting:item/phial_large_3", + "predicate": { + "hexcasting:max_media": 2.0, + "hexcasting:media": 0.75 + } + }, + { + "model": "hexcasting:item/phial_large_4", + "predicate": { + "hexcasting:max_media": 2.0, + "hexcasting:media": 1.0 + } + }, + { + "model": "hexcasting:item/phial_larger_0", + "predicate": { + "hexcasting:max_media": 3.0, + "hexcasting:media": 0.0 + } + }, + { + "model": "hexcasting:item/phial_larger_1", + "predicate": { + "hexcasting:max_media": 3.0, + "hexcasting:media": 0.25 + } + }, + { + "model": "hexcasting:item/phial_larger_2", + "predicate": { + "hexcasting:max_media": 3.0, + "hexcasting:media": 0.5 + } + }, + { + "model": "hexcasting:item/phial_larger_3", + "predicate": { + "hexcasting:max_media": 3.0, + "hexcasting:media": 0.75 + } + }, + { + "model": "hexcasting:item/phial_larger_4", + "predicate": { + "hexcasting:max_media": 3.0, + "hexcasting:media": 1.0 + } + }, + { + "model": "hexcasting:item/phial_largest_0", + "predicate": { + "hexcasting:max_media": 4.0, + "hexcasting:media": 0.0 + } + }, + { + "model": "hexcasting:item/phial_largest_1", + "predicate": { + "hexcasting:max_media": 4.0, + "hexcasting:media": 0.25 + } + }, + { + "model": "hexcasting:item/phial_largest_2", + "predicate": { + "hexcasting:max_media": 4.0, + "hexcasting:media": 0.5 + } + }, + { + "model": "hexcasting:item/phial_largest_3", + "predicate": { + "hexcasting:max_media": 4.0, + "hexcasting:media": 0.75 + } + }, + { + "model": "hexcasting:item/phial_largest_4", + "predicate": { + "hexcasting:max_media": 4.0, + "hexcasting:media": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/charged_amethyst.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/charged_amethyst.json new file mode 100644 index 0000000000..2d147958cb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/charged_amethyst.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/charged_amethyst" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cherry_staff.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cherry_staff.json new file mode 100644 index 0000000000..1fb6398518 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cherry_staff.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/cherry" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/citrine_edified_leaves.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/citrine_edified_leaves.json new file mode 100644 index 0000000000..f44ca6c924 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/citrine_edified_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/citrine_edified_leaves" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_block.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_block.json new file mode 100644 index 0000000000..a0bab4ff76 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/amethyst_shard" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_light.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_light.json new file mode 100644 index 0000000000..a0bab4ff76 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/conjured_light.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "minecraft:item/amethyst_shard" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/creative_unlocker.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/creative_unlocker.json new file mode 100644 index 0000000000..452b44f612 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/creative_unlocker.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/creative_unlocker" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher.json new file mode 100644 index 0000000000..1a93187096 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher.json @@ -0,0 +1,120 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/cypher", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/cypher_0_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/cypher_1", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/cypher_1_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/cypher_2", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/cypher_2_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/cypher_3", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/cypher_3_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/cypher_4", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/cypher_4_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/cypher_5", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/cypher_5_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/cypher_6", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/cypher_6_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/cypher_7", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/cypher_7_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 7.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/cad/0_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_0_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_0_filled.json new file mode 100644 index 0000000000..190be7e602 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_0_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_cypher", + "layer1": "hexcasting:item/cad/0_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1.json new file mode 100644 index 0000000000..71a9ff7cc0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1_filled.json new file mode 100644 index 0000000000..abff99cd2f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_1_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_cypher", + "layer1": "hexcasting:item/cad/1_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2.json new file mode 100644 index 0000000000..f7b22a7958 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2_filled.json new file mode 100644 index 0000000000..75143f8a30 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_2_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_cypher", + "layer1": "hexcasting:item/cad/2_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3.json new file mode 100644 index 0000000000..da55138305 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3_filled.json new file mode 100644 index 0000000000..cbac2eaf44 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_3_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_cypher", + "layer1": "hexcasting:item/cad/3_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4.json new file mode 100644 index 0000000000..90430a8f8a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4_filled.json new file mode 100644 index 0000000000..e56ed90c0a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_4_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_cypher", + "layer1": "hexcasting:item/cad/4_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5.json new file mode 100644 index 0000000000..138fe59a96 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5_filled.json new file mode 100644 index 0000000000..eeb6161967 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_5_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_cypher", + "layer1": "hexcasting:item/cad/5_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6.json new file mode 100644 index 0000000000..bdb310d836 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6_filled.json new file mode 100644 index 0000000000..f9ed07c951 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_6_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_cypher", + "layer1": "hexcasting:item/cad/6_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7.json new file mode 100644 index 0000000000..29e4768e9a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7_filled.json new file mode 100644 index 0000000000..2de0bb8752 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/cypher_7_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_cypher", + "layer1": "hexcasting:item/cad/7_cypher_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/default_colorizer.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/default_colorizer.json new file mode 100644 index 0000000000..0b76dd8f8f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/default_colorizer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/uuid" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/boolean.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/boolean.json new file mode 100644 index 0000000000..cd729d804c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/boolean.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/circle/directrix/boolean/lit_false_east" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/empty.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/empty.json new file mode 100644 index 0000000000..98be3ef487 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/empty.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/circle/directrix/empty/dim_east" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/redstone.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/redstone.json new file mode 100644 index 0000000000..e2b947d5a9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/directrix/redstone.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/circle/directrix/redstone/lit_unpowered_east" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_black.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_black.json new file mode 100644 index 0000000000..2f55b6c22b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_black.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_black" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_blue.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_blue.json new file mode 100644 index 0000000000..add421a999 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_blue" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_brown.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_brown.json new file mode 100644 index 0000000000..3be301eb1a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_brown.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_brown" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_cyan.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_cyan.json new file mode 100644 index 0000000000..c436f3155b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_cyan.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_cyan" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_gray.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_gray.json new file mode 100644 index 0000000000..146f01411c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_gray" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_green.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_green.json new file mode 100644 index 0000000000..679f147944 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_green.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_green" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_blue.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_blue.json new file mode 100644 index 0000000000..433877e853 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_blue.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_light_blue" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_gray.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_gray.json new file mode 100644 index 0000000000..f5625b67c2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_light_gray.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_light_gray" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_lime.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_lime.json new file mode 100644 index 0000000000..c1cf22959e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_lime.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_lime" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_magenta.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_magenta.json new file mode 100644 index 0000000000..12dcaa82c4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_magenta.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_magenta" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_orange.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_orange.json new file mode 100644 index 0000000000..99679c17f8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_orange.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_orange" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_pink.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_pink.json new file mode 100644 index 0000000000..c138e93ff0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_pink.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_pink" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_purple.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_purple.json new file mode 100644 index 0000000000..d31e3b601c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_purple.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_purple" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_red.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_red.json new file mode 100644 index 0000000000..1fb8f9dd4d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_red.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_red" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_white.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_white.json new file mode 100644 index 0000000000..db4d15eb32 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_white.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_white" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_yellow.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_yellow.json new file mode 100644 index 0000000000..594bb0a09d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/dye_colorizer_yellow.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/dye_yellow" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_button.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_button.json new file mode 100644 index 0000000000..e18736c2c8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_button.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/button_inventory", + "textures": { + "texture": "hexcasting:block/edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_door.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_door.json new file mode 100644 index 0000000000..5d6fb8d7ff --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_door.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/edified_door" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence.json new file mode 100644 index 0000000000..db31b01904 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_fence_inventory" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence_gate.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence_gate.json new file mode 100644 index 0000000000..3dfe521195 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_fence_gate.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_fence_gate" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log.json new file mode 100644 index 0000000000..d3c7aeeb06 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_log" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_amethyst.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_amethyst.json new file mode 100644 index 0000000000..8e80eb679a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_amethyst.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_log_amethyst" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_aventurine.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_aventurine.json new file mode 100644 index 0000000000..45007ec40b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_aventurine.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_log_aventurine" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_citrine.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_citrine.json new file mode 100644 index 0000000000..9cae394851 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_citrine.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_log_citrine" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_purple.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_purple.json new file mode 100644 index 0000000000..62c67453ce --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_log_purple.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_log_purple" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_panel.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_panel.json new file mode 100644 index 0000000000..355e2765e1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_panel.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_panel" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_planks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_planks.json new file mode 100644 index 0000000000..4ed5d45aab --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_planks.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_planks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_pressure_plate.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_pressure_plate.json new file mode 100644 index 0000000000..921f7f5bd0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_pressure_plate.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_pressure_plate" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_slab.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_slab.json new file mode 100644 index 0000000000..4772af6ed1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_slab" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_stairs.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_stairs.json new file mode 100644 index 0000000000..90eb4d5123 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_stairs" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_tile.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_tile.json new file mode 100644 index 0000000000..05702f6ed8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_tile.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_tile" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_trapdoor.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_trapdoor.json new file mode 100644 index 0000000000..8c89f1e881 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_trapdoor.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_trapdoor_bottom" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_wood.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_wood.json new file mode 100644 index 0000000000..c9bfee3a01 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/edified_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/edified_wood" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus.json new file mode 100644 index 0000000000..78328a9dee --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus.json @@ -0,0 +1,176 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/focus", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/focus_0_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/focus_0_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/focus_1", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/focus_1_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/focus_1_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/focus_2", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/focus_2_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/focus_2_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/focus_3", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/focus_3_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/focus_3_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/focus_4", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/focus_4_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/focus_4_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/focus_5", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/focus_5_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/focus_5_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/focus_6", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/focus_6_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/focus_6_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/focus_7", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/focus_7_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/focus_7_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 7.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/cad/0_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_filled.json new file mode 100644 index 0000000000..508a3497f6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_focus_filled", + "layer1": "hexcasting:item/cad/0_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_sealed.json new file mode 100644 index 0000000000..0a64292241 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_0_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_focus_sealed", + "layer1": "hexcasting:item/cad/0_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1.json new file mode 100644 index 0000000000..75d8bf400d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_filled.json new file mode 100644 index 0000000000..bd04934627 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_focus_filled", + "layer1": "hexcasting:item/cad/1_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_sealed.json new file mode 100644 index 0000000000..001bf05b5a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_1_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_focus_sealed", + "layer1": "hexcasting:item/cad/1_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2.json new file mode 100644 index 0000000000..a9ef859978 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_filled.json new file mode 100644 index 0000000000..05c2799dfc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_focus_filled", + "layer1": "hexcasting:item/cad/2_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_sealed.json new file mode 100644 index 0000000000..1c7c230bef --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_2_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_focus_sealed", + "layer1": "hexcasting:item/cad/2_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3.json new file mode 100644 index 0000000000..fb366d08b2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_filled.json new file mode 100644 index 0000000000..3ad27dfcdf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_focus_filled", + "layer1": "hexcasting:item/cad/3_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_sealed.json new file mode 100644 index 0000000000..447b7b4198 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_3_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_focus_sealed", + "layer1": "hexcasting:item/cad/3_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4.json new file mode 100644 index 0000000000..a3c1bf4eb2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_filled.json new file mode 100644 index 0000000000..8b9eb2024f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_focus_filled", + "layer1": "hexcasting:item/cad/4_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_sealed.json new file mode 100644 index 0000000000..2831235f44 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_4_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_focus_sealed", + "layer1": "hexcasting:item/cad/4_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5.json new file mode 100644 index 0000000000..e13b4fa14b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_filled.json new file mode 100644 index 0000000000..cbac2be535 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_focus_filled", + "layer1": "hexcasting:item/cad/5_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_sealed.json new file mode 100644 index 0000000000..248801d925 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_5_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_focus_sealed", + "layer1": "hexcasting:item/cad/5_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6.json new file mode 100644 index 0000000000..3bc3f8518f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_filled.json new file mode 100644 index 0000000000..e950df1223 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_focus_filled", + "layer1": "hexcasting:item/cad/6_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_sealed.json new file mode 100644 index 0000000000..c10282e6b1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_6_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_focus_sealed", + "layer1": "hexcasting:item/cad/6_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7.json new file mode 100644 index 0000000000..8ad8085617 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_focus_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_filled.json new file mode 100644 index 0000000000..e6d7b1f28d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_focus_filled", + "layer1": "hexcasting:item/cad/7_focus_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_sealed.json new file mode 100644 index 0000000000..52d149f4ae --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/focus_7_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_focus_sealed", + "layer1": "hexcasting:item/cad/7_focus_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/empty.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/empty.json new file mode 100644 index 0000000000..68e7192da1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/empty.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/circle/impetus/empty/dim_east" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/look.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/look.json new file mode 100644 index 0000000000..73f69303be --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/look.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/circle/impetus/look/lit_east" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/redstone.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/redstone.json new file mode 100644 index 0000000000..523b5343b6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/redstone.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/circle/impetus/redstone/lit_east" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/rightclick.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/rightclick.json new file mode 100644 index 0000000000..381232171f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/impetus/rightclick.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/circle/impetus/rightclick/lit_east" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/jeweler_hammer.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/jeweler_hammer.json new file mode 100644 index 0000000000..22447e1fbd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/jeweler_hammer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "hexcasting:item/jeweler_hammer" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/lens.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/lens.json new file mode 100644 index 0000000000..2fdc8f9ce5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/lens.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:item/generated", + "display": { + "head": { + "scale": [ + 0.4, + 0.4, + 0.4 + ], + "translation": [ + -2.5, + 0, + -8 + ] + } + }, + "textures": { + "layer0": "hexcasting:item/lens" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/lore_fragment.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/lore_fragment.json new file mode 100644 index 0000000000..2b2f9e66fa --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/lore_fragment.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/lore_fragment" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/old_staff.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/old_staff.json new file mode 100644 index 0000000000..f40e6b8ab1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/old_staff.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/old" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/patchouli_book.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/patchouli_book.json new file mode 100644 index 0000000000..a840c0e427 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/patchouli_book.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/patchouli_book" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_0.json new file mode 100644 index 0000000000..db3db02acd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_large_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_1.json new file mode 100644 index 0000000000..bdff2d1022 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_large_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_2.json new file mode 100644 index 0000000000..9c09bea449 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_large_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_3.json new file mode 100644 index 0000000000..085960c8d8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_large_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_4.json new file mode 100644 index 0000000000..c39357f8de --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_large_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_large_4" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_0.json new file mode 100644 index 0000000000..d5e18bb295 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_larger_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_1.json new file mode 100644 index 0000000000..b19928c486 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_larger_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_2.json new file mode 100644 index 0000000000..ac7ed775cc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_larger_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_3.json new file mode 100644 index 0000000000..b02ce98e95 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_larger_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_4.json new file mode 100644 index 0000000000..8b313df86f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_larger_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_larger_4" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_0.json new file mode 100644 index 0000000000..0e44b418f2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_largest_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_1.json new file mode 100644 index 0000000000..4f456814f5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_largest_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_2.json new file mode 100644 index 0000000000..ab2bdf4a2b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_largest_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_3.json new file mode 100644 index 0000000000..10d70acab3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_largest_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_4.json new file mode 100644 index 0000000000..3c0682e560 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_largest_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_largest_4" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_0.json new file mode 100644 index 0000000000..cb8b4c0920 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_medium_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_1.json new file mode 100644 index 0000000000..a7f30e8113 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_medium_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_2.json new file mode 100644 index 0000000000..f9f5615cf2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_medium_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_3.json new file mode 100644 index 0000000000..dbfcb528bd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_medium_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_4.json new file mode 100644 index 0000000000..a7501a8e1b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_medium_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_medium_4" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_0.json new file mode 100644 index 0000000000..fda398e2d9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_small_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_1.json new file mode 100644 index 0000000000..df784108aa --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_small_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_2.json new file mode 100644 index 0000000000..f868032c36 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_small_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_3.json new file mode 100644 index 0000000000..ce4a7999b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_small_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_4.json new file mode 100644 index 0000000000..bde40839db --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/phial_small_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/phial/phial_small_4" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_agender.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_agender.json new file mode 100644 index 0000000000..9c68ff47ff --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_agender.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_agender" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aroace.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aroace.json new file mode 100644 index 0000000000..eb0fabc595 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aroace.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_aroace" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aromantic.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aromantic.json new file mode 100644 index 0000000000..7ea60f31e3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_aromantic.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_aromantic" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_asexual.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_asexual.json new file mode 100644 index 0000000000..d40b1f2bcb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_asexual.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_asexual" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_bisexual.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_bisexual.json new file mode 100644 index 0000000000..e1d4b2d77f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_bisexual.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_bisexual" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demiboy.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demiboy.json new file mode 100644 index 0000000000..cd0fe06093 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demiboy.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_demiboy" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demigirl.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demigirl.json new file mode 100644 index 0000000000..afda4cabea --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_demigirl.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_demigirl" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_gay.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_gay.json new file mode 100644 index 0000000000..353816c8ad --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_gay.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_gay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderfluid.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderfluid.json new file mode 100644 index 0000000000..fe3641c797 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderfluid.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_genderfluid" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderqueer.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderqueer.json new file mode 100644 index 0000000000..270eeb011f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_genderqueer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_genderqueer" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_intersex.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_intersex.json new file mode 100644 index 0000000000..506facd3de --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_intersex.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_intersex" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_lesbian.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_lesbian.json new file mode 100644 index 0000000000..61d110d4cc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_lesbian.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_lesbian" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_nonbinary.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_nonbinary.json new file mode 100644 index 0000000000..0212b47a17 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_nonbinary.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_nonbinary" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_pansexual.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_pansexual.json new file mode 100644 index 0000000000..706726a311 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_pansexual.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_pansexual" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_plural.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_plural.json new file mode 100644 index 0000000000..e6ecd7890e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_plural.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_plural" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_transgender.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_transgender.json new file mode 100644 index 0000000000..2655a8e596 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/pride_colorizer_transgender.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/pride_transgender" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay.json new file mode 100644 index 0000000000..c6ee6b0951 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay.json @@ -0,0 +1,28 @@ +{ + "overrides": [ + { + "model": "hexcasting:block/quenched_allay_0", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:block/quenched_allay_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:block/quenched_allay_2", + "predicate": { + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:block/quenched_allay_3", + "predicate": { + "hexcasting:variant": 3.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks.json new file mode 100644 index 0000000000..c3a1b63856 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks.json @@ -0,0 +1,28 @@ +{ + "overrides": [ + { + "model": "hexcasting:block/deco/quenched_allay_bricks_0", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_bricks_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_bricks_2", + "predicate": { + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_bricks_3", + "predicate": { + "hexcasting:variant": 3.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks_small.json new file mode 100644 index 0000000000..c0e376a548 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_bricks_small.json @@ -0,0 +1,28 @@ +{ + "overrides": [ + { + "model": "hexcasting:block/deco/quenched_allay_bricks_small_0", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_bricks_small_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_bricks_small_2", + "predicate": { + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_bricks_small_3", + "predicate": { + "hexcasting:variant": 3.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_shard.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_shard.json new file mode 100644 index 0000000000..495e817b78 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_shard.json @@ -0,0 +1,28 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/quenched_shard_0", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/quenched_shard_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/quenched_shard_2", + "predicate": { + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/quenched_shard_3", + "predicate": { + "hexcasting:variant": 3.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_tiles.json new file mode 100644 index 0000000000..5ea5cf33c5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_allay_tiles.json @@ -0,0 +1,28 @@ +{ + "overrides": [ + { + "model": "hexcasting:block/deco/quenched_allay_tiles_0", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_tiles_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_tiles_2", + "predicate": { + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:block/deco/quenched_allay_tiles_3", + "predicate": { + "hexcasting:variant": 3.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_0.json new file mode 100644 index 0000000000..bdd43ddc80 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "hexcasting:item/quenched_shard_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_1.json new file mode 100644 index 0000000000..4cffa2efe0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "hexcasting:item/quenched_shard_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_2.json new file mode 100644 index 0000000000..e24c8dafbf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "hexcasting:item/quenched_shard_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_3.json new file mode 100644 index 0000000000..208890fe3d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/quenched_shard_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld", + "textures": { + "layer0": "hexcasting:item/quenched_shard_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll.json new file mode 100644 index 0000000000..5453ed3ec6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/scroll_pristine_large", + "predicate": { + "hexcasting:ancient": 0.0 + } + }, + { + "model": "hexcasting:item/scroll_ancient_large", + "predicate": { + "hexcasting:ancient": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_large.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_large.json new file mode 100644 index 0000000000..192b9920a6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_large.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/scroll_ancient_large" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_medium.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_medium.json new file mode 100644 index 0000000000..eccfe83cb7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_medium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/scroll_ancient_medium" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_small.json new file mode 100644 index 0000000000..5f66417b21 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_ancient_small.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/scroll_ancient_small" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_medium.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_medium.json new file mode 100644 index 0000000000..7752e9be45 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_medium.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/scroll_pristine_medium", + "predicate": { + "hexcasting:ancient": 0.0 + } + }, + { + "model": "hexcasting:item/scroll_ancient_medium", + "predicate": { + "hexcasting:ancient": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper.json new file mode 100644 index 0000000000..ee576746b9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/scroll_paper" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper_lantern.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper_lantern.json new file mode 100644 index 0000000000..8fafbd4a86 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_paper_lantern.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/scroll_paper_lantern" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_large.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_large.json new file mode 100644 index 0000000000..0042b78487 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_large.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/scroll_pristine_large" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_medium.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_medium.json new file mode 100644 index 0000000000..a219c7855d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_medium.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/scroll_pristine_medium" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_small.json new file mode 100644 index 0000000000..6405ebefb2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_pristine_small.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/scroll_pristine_small" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_small.json new file mode 100644 index 0000000000..583fd0f3c8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/scroll_small.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/scroll_pristine_small", + "predicate": { + "hexcasting:ancient": 0.0 + } + }, + { + "model": "hexcasting:item/scroll_ancient_small", + "predicate": { + "hexcasting:ancient": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate.json new file mode 100644 index 0000000000..146695e299 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/slate_blank", + "predicate": { + "hexcasting:written": 0.0 + } + }, + { + "model": "hexcasting:item/slate_written", + "predicate": { + "hexcasting:written": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks.json new file mode 100644 index 0000000000..727a50c807 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/slate_amethyst_bricks_0" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks_small.json new file mode 100644 index 0000000000..accf94f2b3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_bricks_small.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/slate_amethyst_bricks_small_0" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_pillar.json new file mode 100644 index 0000000000..749887313c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/slate_amethyst_pillar" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_tiles.json new file mode 100644 index 0000000000..e20b742c26 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_amethyst_tiles.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/slate_amethyst_tiles" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_blank.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_blank.json new file mode 100644 index 0000000000..df037ffa4b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_blank.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/slate_blank" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_block.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_block.json new file mode 100644 index 0000000000..c40e37f12b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_block.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/slate_block" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks.json new file mode 100644 index 0000000000..adc880399e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/slate_bricks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks_small.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks_small.json new file mode 100644 index 0000000000..4d0555b2c6 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_bricks_small.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/slate_bricks_small" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_pillar.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_pillar.json new file mode 100644 index 0000000000..8d6a18fa25 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_pillar.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/slate_pillar" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_tiles.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_tiles.json new file mode 100644 index 0000000000..c2bf7616b8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_tiles.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/deco/slate_tiles" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_written.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_written.json new file mode 100644 index 0000000000..a17de30bf5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/slate_written.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/slate_written" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook.json new file mode 100644 index 0000000000..5acb33c2cd --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook.json @@ -0,0 +1,176 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/spellbook", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/spellbook_0_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/spellbook_0_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/spellbook_1", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/spellbook_1_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/spellbook_1_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/spellbook_2", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/spellbook_2_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/spellbook_2_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/spellbook_3", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/spellbook_3_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/spellbook_3_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/spellbook_4", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/spellbook_4_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/spellbook_4_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/spellbook_5", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/spellbook_5_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/spellbook_5_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/spellbook_6", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/spellbook_6_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/spellbook_6_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/spellbook_7", + "predicate": { + "hexcasting:overlay_layer": 0.0, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/spellbook_7_filled", + "predicate": { + "hexcasting:overlay_layer": 1.0, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/spellbook_7_sealed", + "predicate": { + "hexcasting:overlay_layer": 2.0, + "hexcasting:variant": 7.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/cad/0_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_filled.json new file mode 100644 index 0000000000..1727f3854d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_spellbook_filled", + "layer1": "hexcasting:item/cad/0_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_sealed.json new file mode 100644 index 0000000000..e580e3ceb5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_0_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_spellbook_sealed", + "layer1": "hexcasting:item/cad/0_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1.json new file mode 100644 index 0000000000..6b832d7806 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_filled.json new file mode 100644 index 0000000000..3ded667934 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_spellbook_filled", + "layer1": "hexcasting:item/cad/1_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_sealed.json new file mode 100644 index 0000000000..91c0ed2bc4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_1_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_spellbook_sealed", + "layer1": "hexcasting:item/cad/1_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2.json new file mode 100644 index 0000000000..2d1355b5e9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_filled.json new file mode 100644 index 0000000000..9af15dfbbb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_spellbook_filled", + "layer1": "hexcasting:item/cad/2_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_sealed.json new file mode 100644 index 0000000000..bd336d2d1a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_2_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_spellbook_sealed", + "layer1": "hexcasting:item/cad/2_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3.json new file mode 100644 index 0000000000..e18eaf0d3c --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_filled.json new file mode 100644 index 0000000000..6b611c62b0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_spellbook_filled", + "layer1": "hexcasting:item/cad/3_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_sealed.json new file mode 100644 index 0000000000..25a265b6d3 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_3_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_spellbook_sealed", + "layer1": "hexcasting:item/cad/3_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4.json new file mode 100644 index 0000000000..38cd5d8fc0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_filled.json new file mode 100644 index 0000000000..ebccd06cef --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_spellbook_filled", + "layer1": "hexcasting:item/cad/4_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_sealed.json new file mode 100644 index 0000000000..d281078d45 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_4_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_spellbook_sealed", + "layer1": "hexcasting:item/cad/4_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5.json new file mode 100644 index 0000000000..2f82f7d8a2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_filled.json new file mode 100644 index 0000000000..99cc74e732 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_spellbook_filled", + "layer1": "hexcasting:item/cad/5_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_sealed.json new file mode 100644 index 0000000000..0a4a822a5b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_5_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_spellbook_sealed", + "layer1": "hexcasting:item/cad/5_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6.json new file mode 100644 index 0000000000..608c5cdd24 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_filled.json new file mode 100644 index 0000000000..b47cfbac66 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_spellbook_filled", + "layer1": "hexcasting:item/cad/6_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_sealed.json new file mode 100644 index 0000000000..2fa15268d2 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_6_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_spellbook_sealed", + "layer1": "hexcasting:item/cad/6_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7.json new file mode 100644 index 0000000000..1e7e436978 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_spellbook_empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_filled.json new file mode 100644 index 0000000000..8438b02ac0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_spellbook_filled", + "layer1": "hexcasting:item/cad/7_spellbook_filled_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_sealed.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_sealed.json new file mode 100644 index 0000000000..d91512283f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/spellbook_7_sealed.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_spellbook_sealed", + "layer1": "hexcasting:item/cad/7_spellbook_sealed_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/acacia.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/acacia.json new file mode 100644 index 0000000000..ea1bd514d1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/acacia.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/acacia" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/bamboo.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/bamboo.json new file mode 100644 index 0000000000..cb00188989 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/bamboo.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/bamboo" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/birch.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/birch.json new file mode 100644 index 0000000000..c56b377279 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/birch.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/birch" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/cherry.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/cherry.json new file mode 100644 index 0000000000..1fb6398518 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/cherry.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/cherry" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/crimson.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/crimson.json new file mode 100644 index 0000000000..fa68214ae5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/crimson.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/crimson" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/dark_oak.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/dark_oak.json new file mode 100644 index 0000000000..ef89b141c8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/dark_oak.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/dark_oak" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/edified.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/edified.json new file mode 100644 index 0000000000..2ecbbaa4b8 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/edified.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/edified" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/jungle.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/jungle.json new file mode 100644 index 0000000000..81fc631e34 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/jungle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/jungle" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mangrove.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mangrove.json new file mode 100644 index 0000000000..1d055a8943 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mangrove.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/mangrove" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mindsplice.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mindsplice.json new file mode 100644 index 0000000000..a2a679a5b5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/mindsplice.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/mindsplice" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/oak.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/oak.json new file mode 100644 index 0000000000..c9a35a19c7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/oak.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/oak" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched.json new file mode 100644 index 0000000000..16e5858599 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched.json @@ -0,0 +1,28 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/staff/quenched_0", + "predicate": { + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/staff/quenched_1", + "predicate": { + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/staff/quenched_2", + "predicate": { + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/staff/quenched_3", + "predicate": { + "hexcasting:variant": 3.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_0.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_0.json new file mode 100644 index 0000000000..d34dbbfe48 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/quenched_0" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_1.json new file mode 100644 index 0000000000..b3b4d49426 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/quenched_1" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_2.json new file mode 100644 index 0000000000..9d34fae3ed --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/quenched_2" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_3.json new file mode 100644 index 0000000000..61a55746b1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/quenched_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/quenched_3" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/spruce.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/spruce.json new file mode 100644 index 0000000000..aa60185a6a --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/spruce.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/spruce" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/warped.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/warped.json new file mode 100644 index 0000000000..4a157768aa --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/staff/warped.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/handheld_rod", + "textures": { + "layer0": "hexcasting:item/staff/warped" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_log.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_log.json new file mode 100644 index 0000000000..69e448436d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_log.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/stripped_edified_log" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_wood.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_wood.json new file mode 100644 index 0000000000..45e5b99e81 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/stripped_edified_wood.json @@ -0,0 +1,3 @@ +{ + "parent": "hexcasting:block/stripped_edified_wood" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/sub_sandwich.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/sub_sandwich.json new file mode 100644 index 0000000000..c5dd346a84 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/sub_sandwich.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/sub_sandwich" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot.json new file mode 100644 index 0000000000..4a9917224b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot.json @@ -0,0 +1,20 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/thought_knot", + "predicate": { + "hexcasting:written": 0.0 + } + }, + { + "model": "hexcasting:item/thought_knot_written", + "predicate": { + "hexcasting:written": 1.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/thought_knot" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot_written.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot_written.json new file mode 100644 index 0000000000..f5b12c99d9 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/thought_knot_written.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/thought_knot", + "layer1": "hexcasting:item/thought_knot_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket.json new file mode 100644 index 0000000000..19102d169b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket.json @@ -0,0 +1,120 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "hexcasting:item/trinket", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/trinket_0_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 0.0 + } + }, + { + "model": "hexcasting:item/trinket_1", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/trinket_1_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 1.0 + } + }, + { + "model": "hexcasting:item/trinket_2", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/trinket_2_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 2.0 + } + }, + { + "model": "hexcasting:item/trinket_3", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/trinket_3_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 3.0 + } + }, + { + "model": "hexcasting:item/trinket_4", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/trinket_4_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 4.0 + } + }, + { + "model": "hexcasting:item/trinket_5", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/trinket_5_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 5.0 + } + }, + { + "model": "hexcasting:item/trinket_6", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/trinket_6_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 6.0 + } + }, + { + "model": "hexcasting:item/trinket_7", + "predicate": { + "hexcasting:has_patterns": -0.01, + "hexcasting:variant": 7.0 + } + }, + { + "model": "hexcasting:item/trinket_7_filled", + "predicate": { + "hexcasting:has_patterns": 0.99, + "hexcasting:variant": 7.0 + } + } + ], + "textures": { + "layer0": "hexcasting:item/cad/0_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_0_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_0_filled.json new file mode 100644 index 0000000000..77da0e72e5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_0_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/0_trinket", + "layer1": "hexcasting:item/cad/0_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1.json new file mode 100644 index 0000000000..4eb168d7f1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1_filled.json new file mode 100644 index 0000000000..80a274ce90 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_1_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/1_trinket", + "layer1": "hexcasting:item/cad/1_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2.json new file mode 100644 index 0000000000..f38c5e5dc4 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2_filled.json new file mode 100644 index 0000000000..6c60bb9486 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_2_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/2_trinket", + "layer1": "hexcasting:item/cad/2_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3.json new file mode 100644 index 0000000000..4410e1a4ff --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3_filled.json new file mode 100644 index 0000000000..4aea4da78e --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_3_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/3_trinket", + "layer1": "hexcasting:item/cad/3_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4.json new file mode 100644 index 0000000000..87903d7d9b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4_filled.json new file mode 100644 index 0000000000..9b61c263fb --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_4_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/4_trinket", + "layer1": "hexcasting:item/cad/4_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5.json new file mode 100644 index 0000000000..4cc6440a50 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5_filled.json new file mode 100644 index 0000000000..fbc3567288 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_5_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/5_trinket", + "layer1": "hexcasting:item/cad/5_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6.json new file mode 100644 index 0000000000..6cc75f387d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6_filled.json new file mode 100644 index 0000000000..bdd007f345 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_6_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/6_trinket", + "layer1": "hexcasting:item/cad/6_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7.json new file mode 100644 index 0000000000..a2f57e04cc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7_filled.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7_filled.json new file mode 100644 index 0000000000..e83c8fa4bc --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/trinket_7_filled.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/cad/7_trinket", + "layer1": "hexcasting:item/cad/7_trinket_overlay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/item/uuid_colorizer.json b/Neoforge/src/generated/resources/assets/hexcasting/models/item/uuid_colorizer.json new file mode 100644 index 0000000000..0b76dd8f8f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/item/uuid_colorizer.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "hexcasting:item/colorizer/uuid" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/acacia.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/acacia.json new file mode 100644 index 0000000000..6a28f12462 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/acacia.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/acacia_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/bamboo.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/bamboo.json new file mode 100644 index 0000000000..c0f063051f --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/bamboo.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/bamboo_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/birch.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/birch.json new file mode 100644 index 0000000000..571e454dd7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/birch.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/birch_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/cherry.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/cherry.json new file mode 100644 index 0000000000..9a663a248b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/cherry.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/crimson.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/crimson.json new file mode 100644 index 0000000000..059589861d --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/crimson.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/crimson_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/dark_oak.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/dark_oak.json new file mode 100644 index 0000000000..31dc19c0e5 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/dark_oak.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/dark_oak_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/edified.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/edified.json new file mode 100644 index 0000000000..903e47409b --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/edified.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/edified_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/jungle.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/jungle.json new file mode 100644 index 0000000000..06b8e032d0 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/jungle.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/jungle_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/mangrove.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/mangrove.json new file mode 100644 index 0000000000..0d75f169c1 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/mangrove.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/mangrove_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/mindsplice.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/mindsplice.json new file mode 100644 index 0000000000..5c469011ad --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/mindsplice.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/mindsplice_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/oak.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/oak.json new file mode 100644 index 0000000000..8903a42caf --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/oak.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/oak_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/spruce.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/spruce.json new file mode 100644 index 0000000000..3f3562c473 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/spruce.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/spruce_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/assets/hexcasting/models/staff/warped.json b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/warped.json new file mode 100644 index 0000000000..62ab1990d7 --- /dev/null +++ b/Neoforge/src/generated/resources/assets/hexcasting/models/staff/warped.json @@ -0,0 +1,16 @@ +{ + "overrides": [ + { + "model": "hexcasting:item/warped_staff", + "predicate": { + "hexcasting:funny_level": 0.0 + } + }, + { + "model": "hexcasting:item/cherry_staff", + "predicate": { + "hexcasting:funny_level": 2.0 + } + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/create/tags/block/brittle.json b/Neoforge/src/generated/resources/data/create/tags/block/brittle.json new file mode 100644 index 0000000000..fb66be6093 --- /dev/null +++ b/Neoforge/src/generated/resources/data/create/tags/block/brittle.json @@ -0,0 +1,8 @@ +{ + "values": [ + { + "id": "#hexcasting:slate", + "required": false + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/forge/tags/item/dusts/amethyst.json b/Neoforge/src/generated/resources/data/forge/tags/item/dusts/amethyst.json new file mode 100644 index 0000000000..d936f71efc --- /dev/null +++ b/Neoforge/src/generated/resources/data/forge/tags/item/dusts/amethyst.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:amethyst_dust" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/forge/tags/item/gems.json b/Neoforge/src/generated/resources/data/forge/tags/item/gems.json new file mode 100644 index 0000000000..6c55bdef92 --- /dev/null +++ b/Neoforge/src/generated/resources/data/forge/tags/item/gems.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:charged_amethyst" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/aaa_wasteful_cast.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/aaa_wasteful_cast.json new file mode 100644 index 0000000000..158691c260 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/aaa_wasteful_cast.json @@ -0,0 +1,32 @@ +{ + "parent": "hexcasting:root", + "criteria": { + "waste_amt": { + "conditions": { + "health_used": { + "min": 89000 + }, + "media_generated": {} + }, + "trigger": "hexcasting:spend_media" + } + }, + "display": { + "description": { + "translate": "advancement.hexcasting:wasteful_cast.desc" + }, + "icon": { + "count": 1, + "id": "minecraft:glistering_melon_slice" + }, + "title": { + "translate": "advancement.hexcasting:wasteful_cast" + } + }, + "requirements": [ + [ + "waste_amt" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/aab_big_cast.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/aab_big_cast.json new file mode 100644 index 0000000000..4664381e91 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/aab_big_cast.json @@ -0,0 +1,32 @@ +{ + "parent": "hexcasting:root", + "criteria": { + "cast_amt": { + "conditions": { + "health_used": {}, + "media_generated": { + "min": 6400000 + } + }, + "trigger": "hexcasting:spend_media" + } + }, + "display": { + "description": { + "translate": "advancement.hexcasting:big_cast.desc" + }, + "icon": { + "count": 1, + "id": "hexcasting:charged_amethyst" + }, + "title": { + "translate": "advancement.hexcasting:big_cast" + } + }, + "requirements": [ + [ + "cast_amt" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/creative_unlocker.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/creative_unlocker.json new file mode 100644 index 0000000000..66694b8389 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/creative_unlocker.json @@ -0,0 +1,36 @@ +{ + "parent": "hexcasting:root", + "criteria": { + "has_creative_unlocker": { + "conditions": { + "items": [ + { + "items": "hexcasting:creative_unlocker" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": false, + "background": "minecraft:textures/block/calcite.png", + "description": { + "translate": "advancement.hexcasting:creative_unlocker.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:creative_unlocker" + }, + "title": { + "translate": "advancement.hexcasting:creative_unlocker" + } + }, + "requirements": [ + [ + "has_creative_unlocker" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/enlightenment.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/enlightenment.json new file mode 100644 index 0000000000..6beb493204 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/enlightenment.json @@ -0,0 +1,38 @@ +{ + "parent": "hexcasting:opened_eyes", + "criteria": { + "health_used": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + } + }, + "display": { + "description": { + "translate": "advancement.hexcasting:enlightenment.desc" + }, + "frame": "challenge", + "hidden": true, + "icon": { + "count": 1, + "id": "minecraft:music_disc_11" + }, + "title": { + "translate": "advancement.hexcasting:enlightenment" + } + }, + "requirements": [ + [ + "health_used" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore.json new file mode 100644 index 0000000000..42c9fd8c5f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore.json @@ -0,0 +1,32 @@ +{ + "criteria": { + "used_item": { + "conditions": { + "item": { + "items": "hexcasting:lore_fragment" + } + }, + "trigger": "minecraft:consume_item" + } + }, + "display": { + "background": "hexcasting:textures/block/slate_block.png", + "description": { + "translate": "advancement.hexcasting:lore.desc" + }, + "frame": "goal", + "icon": { + "count": 1, + "id": "hexcasting:akashic_ligature" + }, + "title": { + "translate": "advancement.hexcasting:lore" + } + }, + "requirements": [ + [ + "used_item" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom1.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom1.json new file mode 100644 index 0000000000..314c3fa628 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom1.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/cardamom1" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom2.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom2.json new file mode 100644 index 0000000000..6f3e2b9d20 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom2.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/cardamom2" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom3.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom3.json new file mode 100644 index 0000000000..2147c12792 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom3.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/cardamom3" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom4.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom4.json new file mode 100644 index 0000000000..1374bfcca4 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom4.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/cardamom4" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom5.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom5.json new file mode 100644 index 0000000000..06c329a939 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/cardamom5.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/cardamom5" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment1.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment1.json new file mode 100644 index 0000000000..9d2183c268 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment1.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/experiment1" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment2.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment2.json new file mode 100644 index 0000000000..4ac3cadb4f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/experiment2.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/experiment2" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/inventory.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/inventory.json new file mode 100644 index 0000000000..abef5eb653 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/lore/inventory.json @@ -0,0 +1,25 @@ +{ + "parent": "hexcasting:lore", + "criteria": { + "grant": { + "trigger": "minecraft:impossible" + } + }, + "display": { + "description": "", + "hidden": true, + "icon": { + "count": 1, + "id": "hexcasting:lore_fragment" + }, + "title": { + "translate": "advancement.hexcasting:lore/inventory" + } + }, + "requirements": [ + [ + "grant" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/opened_eyes.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/opened_eyes.json new file mode 100644 index 0000000000..89583b9134 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/opened_eyes.json @@ -0,0 +1,33 @@ +{ + "parent": "hexcasting:y_u_no_cast_angy", + "criteria": { + "health_used": { + "conditions": { + "health_used": {}, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "min": 0.0 + } + }, + "trigger": "hexcasting:overcast" + } + }, + "display": { + "description": { + "translate": "advancement.hexcasting:opened_eyes.desc" + }, + "icon": { + "count": 1, + "id": "minecraft:ender_eye" + }, + "title": { + "translate": "advancement.hexcasting:opened_eyes" + } + }, + "requirements": [ + [ + "health_used" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json new file mode 100644 index 0000000000..d36fd4dc3b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/akashic_record.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:akashic_record" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:akashic_record" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json new file mode 100644 index 0000000000..18f9ea380f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/budding_amethyst.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:budding_amethyst" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:budding_amethyst" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json new file mode 100644 index 0000000000..cc4c924b54 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_boolean.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix_boolean" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix_boolean" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json new file mode 100644 index 0000000000..8a43f8bac3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/directrix_redstone.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix_redstone" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix_redstone" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json new file mode 100644 index 0000000000..939dcb6e4e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_look.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_look" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_look" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json new file mode 100644 index 0000000000..c4fc49fd24 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_rightclick.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_rightclick" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_rightclick" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json new file mode 100644 index 0000000000..31d9085f82 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/impetus_storedplayer.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus_storedplayer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus_storedplayer" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json new file mode 100644 index 0000000000..6dfe849d9f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/brainsweep/quench_allay.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:quench_allay" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:quench_allay" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json new file mode 100644 index 0000000000..96746726ec --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_packing.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_dust_packing" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_dust_packing" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json new file mode 100644 index 0000000000..ff10efd290 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_dust_unpacking.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_dust_unpacking" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_dust_unpacking" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json new file mode 100644 index 0000000000..a5ab663568 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/amethyst_tiles.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_tiles" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_tiles" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json new file mode 100644 index 0000000000..ab1194da4a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/ancient_scroll_paper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:scroll_paper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:ancient_scroll_paper" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:ancient_scroll_paper" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json new file mode 100644 index 0000000000..31556a4ca8 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_fence" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_fence" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json new file mode 100644 index 0000000000..1d09e6fdf8 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_fence_gate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_fence_gate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_fence_gate" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json new file mode 100644 index 0000000000..ab66016e10 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_panel.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_panel" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_panel" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json new file mode 100644 index 0000000000..f031431d00 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_planks.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_logs" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_planks" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_planks" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json new file mode 100644 index 0000000000..317bd1fd11 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_slab.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_slab" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_slab" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json new file mode 100644 index 0000000000..069989ca28 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_stairs.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_stairs" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_stairs" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json new file mode 100644 index 0000000000..5179827061 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_tile.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_tile" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_tile" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json new file mode 100644 index 0000000000..f0aaf4b1fd --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/edified_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:edified_log" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_wood" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_wood" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json new file mode 100644 index 0000000000..d676daa7f7 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/scroll_paper.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_paper" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_paper" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json new file mode 100644 index 0000000000..770d62ab2b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:slate" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:slate_block" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:slate_block" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json new file mode 100644 index 0000000000..b2f96c2797 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/slate_block_from_slates.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:slate" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:slate_block_from_slates" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:slate_block_from_slates" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json new file mode 100644 index 0000000000..3c2f410ce6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stonecutting/amethyst_tiles.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_block" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:stonecutting/amethyst_tiles" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:stonecutting/amethyst_tiles" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json new file mode 100644 index 0000000000..4d048fc250 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/building_blocks/stripped_edified_wood.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:stripped_edified_log" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:stripped_edified_wood" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:stripped_edified_wood" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json new file mode 100644 index 0000000000..6ae4bdbbb6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ageing_scroll_paper_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:scroll_paper_lantern" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:ageing_scroll_paper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:ageing_scroll_paper_lantern" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json new file mode 100644 index 0000000000..91debb7ca5 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/amethyst_sconce.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:amethyst_sconce" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:amethyst_sconce" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..f36c1abfc2 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/ancient_scroll_paper_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:ancient_scroll_paper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:ancient_scroll_paper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:ancient_scroll_paper_lantern" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json new file mode 100644 index 0000000000..1bff0c5ff6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json new file mode 100644 index 0000000000..2dc4651527 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_medium.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_medium" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_medium" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json new file mode 100644 index 0000000000..63884d313e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_paper_lantern.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:scroll_paper" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_paper_lantern" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_paper_lantern" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json new file mode 100644 index 0000000000..2e68c56849 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/scroll_small.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:scroll_small" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:scroll_small" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json new file mode 100644 index 0000000000..551899a3a3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/decorations/slate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:slate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:slate" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json new file mode 100644 index 0000000000..bb64c267e5 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/food/sub_sandwich.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:sub_sandwich" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:sub_sandwich" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json new file mode 100644 index 0000000000..b032476ae7 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/charged.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:quenched_allay_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:decompose_quenched_shard/charged" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:decompose_quenched_shard/charged" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json new file mode 100644 index 0000000000..299d8a4550 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/dust.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:quenched_allay_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:decompose_quenched_shard/dust" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:decompose_quenched_shard/dust" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json new file mode 100644 index 0000000000..d9f9dfbb25 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/decompose_quenched_shard/shard.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:quenched_allay_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:decompose_quenched_shard/shard" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:decompose_quenched_shard/shard" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json new file mode 100644 index 0000000000..e04ea0f7b0 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/default_colorizer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:default_colorizer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:default_colorizer" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json new file mode 100644 index 0000000000..486da412cd --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_black.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_black" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_black" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json new file mode 100644 index 0000000000..c23b00add5 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_blue.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_blue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_blue" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json new file mode 100644 index 0000000000..daf49d8674 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_brown.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_brown" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_brown" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json new file mode 100644 index 0000000000..bc159a4f91 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_cyan.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_cyan" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_cyan" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json new file mode 100644 index 0000000000..959c3b871a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_gray.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_gray" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_gray" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json new file mode 100644 index 0000000000..ae496bdb93 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_green.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_green" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_green" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json new file mode 100644 index 0000000000..9e660ad5de --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_blue.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_light_blue" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_light_blue" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json new file mode 100644 index 0000000000..b2b51d665b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_light_gray.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_light_gray" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_light_gray" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json new file mode 100644 index 0000000000..b21321754b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_lime.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_lime" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_lime" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json new file mode 100644 index 0000000000..38097fe636 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_magenta.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_magenta" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_magenta" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json new file mode 100644 index 0000000000..a5e2054cd0 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_orange.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_orange" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_orange" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json new file mode 100644 index 0000000000..868366c0a4 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_pink.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_pink" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_pink" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json new file mode 100644 index 0000000000..b9d4282404 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_purple.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_purple" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_purple" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json new file mode 100644 index 0000000000..515062d384 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_red.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_red" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_red" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json new file mode 100644 index 0000000000..3fbaf1ba20 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_white.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_white" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_white" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json new file mode 100644 index 0000000000..e707bc9937 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/dye_colorizer_yellow.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:dye_colorizer_yellow" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:dye_colorizer_yellow" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json new file mode 100644 index 0000000000..e07c954cd3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_agender.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_agender" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_agender" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json new file mode 100644 index 0000000000..8413c66774 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aroace.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_aroace" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_aroace" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json new file mode 100644 index 0000000000..37604e5939 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_aromantic.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_aromantic" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_aromantic" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json new file mode 100644 index 0000000000..74df9afba7 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_asexual.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_asexual" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_asexual" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json new file mode 100644 index 0000000000..a3e18ad420 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_bisexual.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_bisexual" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_bisexual" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json new file mode 100644 index 0000000000..e131fc73f1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demiboy.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_demiboy" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_demiboy" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json new file mode 100644 index 0000000000..a164b59ce6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_demigirl.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_demigirl" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_demigirl" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json new file mode 100644 index 0000000000..59c4f8fdeb --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_gay.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_gay" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_gay" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json new file mode 100644 index 0000000000..5c3233fa98 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderfluid.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_genderfluid" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_genderfluid" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json new file mode 100644 index 0000000000..fd6f1355ef --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_genderqueer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_genderqueer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_genderqueer" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json new file mode 100644 index 0000000000..091329fe3f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_intersex.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_intersex" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_intersex" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json new file mode 100644 index 0000000000..3d4dec1d10 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_lesbian.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_lesbian" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_lesbian" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json new file mode 100644 index 0000000000..83c4964af9 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_nonbinary.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_nonbinary" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_nonbinary" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json new file mode 100644 index 0000000000..89512b05e1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_plural.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_plural" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_plural" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json new file mode 100644 index 0000000000..70dced6396 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/pride_colorizer_transgender.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:pride_colorizer_transgender" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:pride_colorizer_transgender" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json new file mode 100644 index 0000000000..fbcdbfebf4 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/misc/uuid_colorizer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:amethyst_dust" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:uuid_colorizer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:uuid_colorizer" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json new file mode 100644 index 0000000000..44a4110650 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_bookshelf.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:akashic_bookshelf" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:akashic_bookshelf" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json new file mode 100644 index 0000000000..b2a6f52851 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/akashic_ligature.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:akashic_ligature" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:akashic_ligature" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json new file mode 100644 index 0000000000..e00a4fdf00 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/directrix/empty.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:directrix/empty" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:directrix/empty" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json new file mode 100644 index 0000000000..b6cd73817c --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_button" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_button" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json new file mode 100644 index 0000000000..72dce77364 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_door.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_door" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_door" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json new file mode 100644 index 0000000000..f207372eeb --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_pressure_plate.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_pressure_plate" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_pressure_plate" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json new file mode 100644 index 0000000000..be0fadb15b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/edified_trapdoor.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:edified_planks" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:edified_trapdoor" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:edified_trapdoor" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json new file mode 100644 index 0000000000..0b4aa3256c --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/redstone/impetus/empty.json @@ -0,0 +1,35 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "enlightenment": { + "conditions": { + "health_used": { + "min": 0.8 + }, + "media_generated": {}, + "mojang_i_am_begging_and_crying_please_add_an_entity_health_criterion": { + "max": 1.0, + "min": 2.2250738585072014E-308 + } + }, + "trigger": "hexcasting:overcast" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:impetus/empty" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "enlightenment" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:impetus/empty" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json new file mode 100644 index 0000000000..b1cb841b3e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/abacus.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:abacus" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:abacus" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json new file mode 100644 index 0000000000..221cf418c3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/artifact.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:artifact" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:artifact" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json new file mode 100644 index 0000000000..5489ea0467 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/cypher.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:cypher" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:cypher" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json new file mode 100644 index 0000000000..4e19de9e5e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:focus" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:focus" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json new file mode 100644 index 0000000000..f67d8502aa --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/focus_rotated.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:focus_rotated" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:focus_rotated" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json new file mode 100644 index 0000000000..6a24d2b333 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/jeweler_hammer.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "minecraft:amethyst_shard" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:jeweler_hammer" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:jeweler_hammer" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json new file mode 100644 index 0000000000..3411cb2187 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/lens.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:lens" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:lens" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json new file mode 100644 index 0000000000..ef5a492652 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/spellbook.json @@ -0,0 +1,43 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_chorus": { + "conditions": { + "items": [ + { + "items": "minecraft:chorus_fruit" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_focus": { + "conditions": { + "items": [ + { + "items": "hexcasting:focus" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:spellbook" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_focus", + "has_chorus" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:spellbook" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json new file mode 100644 index 0000000000..c1e018b4ec --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/acacia.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/acacia" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/acacia" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json new file mode 100644 index 0000000000..19094ad2fe --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/bamboo.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/bamboo" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/bamboo" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json new file mode 100644 index 0000000000..ca6c180cfa --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/birch.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/birch" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/birch" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json new file mode 100644 index 0000000000..38107a9b52 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/cherry.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/cherry" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/cherry" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json new file mode 100644 index 0000000000..da68b592c5 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/crimson.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/crimson" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/crimson" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json new file mode 100644 index 0000000000..da9937e87d --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/dark_oak.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/dark_oak" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/dark_oak" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json new file mode 100644 index 0000000000..99d19ed3bf --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/edified.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/edified" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/edified" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json new file mode 100644 index 0000000000..80fe7c43f6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/jungle.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/jungle" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/jungle" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json new file mode 100644 index 0000000000..0064814593 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mangrove.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/mangrove" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/mangrove" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json new file mode 100644 index 0000000000..adb60836c1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/mindsplice.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/mindsplice" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/mindsplice" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json new file mode 100644 index 0000000000..d11084b78d --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/oak.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/oak" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/oak" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json new file mode 100644 index 0000000000..1ce63b78e3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/quenched.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/quenched" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/quenched" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json new file mode 100644 index 0000000000..cbad54cf88 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/spruce.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/spruce" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/spruce" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json new file mode 100644 index 0000000000..ffff5199c6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/staff/warped.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "hexcasting:charged_amethyst" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:staff/warped" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:staff/warped" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json new file mode 100644 index 0000000000..f50c1673fa --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/thought_knot.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:thought_knot" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:thought_knot" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json new file mode 100644 index 0000000000..17c0d69b1f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/recipes/tools/trinket.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_item": { + "conditions": { + "items": [ + { + "items": "#hexcasting:staves" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "hexcasting:trinket" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_item" + ] + ], + "rewards": { + "recipes": [ + "hexcasting:trinket" + ] + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/root.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/root.json new file mode 100644 index 0000000000..1b2763aed8 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/root.json @@ -0,0 +1,34 @@ +{ + "criteria": { + "has_charged_amethyst": { + "conditions": { + "items": [ + { + "items": "#hexcasting:grants_root_advancement" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "background": "minecraft:textures/block/calcite.png", + "description": { + "translate": "advancement.hexcasting:root.desc" + }, + "hidden": true, + "icon": { + "count": 1, + "id": "minecraft:budding_amethyst" + }, + "title": { + "translate": "advancement.hexcasting:root" + } + }, + "requirements": [ + [ + "has_charged_amethyst" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/advancement/y_u_no_cast_angy.json b/Neoforge/src/generated/resources/data/hexcasting/advancement/y_u_no_cast_angy.json new file mode 100644 index 0000000000..00a5641e4d --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/advancement/y_u_no_cast_angy.json @@ -0,0 +1,26 @@ +{ + "parent": "hexcasting:root", + "criteria": { + "did_the_thing": { + "trigger": "hexcasting:fail_to_cast_great_spell" + } + }, + "display": { + "description": { + "translate": "advancement.hexcasting:y_u_no_cast_angy.desc" + }, + "icon": { + "count": 1, + "id": "minecraft:blaze_powder" + }, + "title": { + "translate": "advancement.hexcasting:y_u_no_cast_angy" + } + }, + "requirements": [ + [ + "did_the_thing" + ] + ], + "sends_telemetry_event": true +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/damage_type/overcast.json b/Neoforge/src/generated/resources/data/hexcasting/damage_type/overcast.json new file mode 100644 index 0000000000..012582c4b2 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/damage_type/overcast.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0.0, + "message_id": "hexcasting.overcast", + "scaling": "when_caused_by_living_non_player" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json new file mode 100644 index 0000000000..70af09ea61 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/amethyst_cluster.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:amethyst_cluster", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:blocks/amethyst_cluster" + } + ], + "shardDelta": -0.5 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json new file mode 100644 index 0000000000..2cde006e3e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/abandoned_mineshaft.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/abandoned_mineshaft" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json new file mode 100644 index 0000000000..79ede35c14 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/ancient_city.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/ancient_city" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json new file mode 100644 index 0000000000..f51d2dabf0 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/desert_pyramid.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/desert_pyramid" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json new file mode 100644 index 0000000000..78250990ed --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/jungle_temple.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/jungle_temple" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json new file mode 100644 index 0000000000..b9e7041dbc --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/nether_bridge.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/nether_bridge" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json new file mode 100644 index 0000000000..5cb215e05e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/simple_dungeon.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/simple_dungeon" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json new file mode 100644 index 0000000000..6dfe6d03d3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/cypher/minecraft/chests/stronghold_corridor.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_cyphers", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/stronghold_corridor" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json new file mode 100644 index 0000000000..c636a2f73a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/abandoned_mineshaft.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/abandoned_mineshaft" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json new file mode 100644 index 0000000000..215f625f7d --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/pillager_outpost.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/pillager_outpost" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json new file mode 100644 index 0000000000..ad1b0666d8 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/simple_dungeon.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/simple_dungeon" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json new file mode 100644 index 0000000000..f55d8f4cc0 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/stronghold_library.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/stronghold_library" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json new file mode 100644 index 0000000000..3aaf4b8498 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_desert_house.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/village/village_desert_house" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json new file mode 100644 index 0000000000..93d27d6661 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_plains_house.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/village/village_plains_house" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json new file mode 100644 index 0000000000..bb224944b7 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_savanna_house.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/village/village_savanna_house" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json new file mode 100644 index 0000000000..ec4f567a6e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_snowy_house.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/village/village_snowy_house" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json new file mode 100644 index 0000000000..d2132c79bf --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/village/village_taiga_house.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/village/village_taiga_house" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json new file mode 100644 index 0000000000..be9d6b6d12 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/lore/minecraft/chests/woodland_mansion.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_lore", + "chance": 0.4, + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/woodland_mansion" + } + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json new file mode 100644 index 0000000000..27d1e1ba46 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/abandoned_mineshaft.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/abandoned_mineshaft" + } + ], + "countRange": 1 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json new file mode 100644 index 0000000000..d4d94d6652 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/ancient_city.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/ancient_city" + } + ], + "countRange": 4 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json new file mode 100644 index 0000000000..17372d9896 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_other.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/bastion_other" + } + ], + "countRange": 1 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json new file mode 100644 index 0000000000..ff8851c233 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/bastion_treasure.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/bastion_treasure" + } + ], + "countRange": 3 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json new file mode 100644 index 0000000000..b91f49fb8a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/desert_pyramid.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/desert_pyramid" + } + ], + "countRange": 2 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json new file mode 100644 index 0000000000..f5371dd519 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/end_city_treasure.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/end_city_treasure" + } + ], + "countRange": 3 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json new file mode 100644 index 0000000000..c1bf948ade --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/jungle_temple.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/jungle_temple" + } + ], + "countRange": 2 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json new file mode 100644 index 0000000000..68725eddce --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/nether_bridge.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/nether_bridge" + } + ], + "countRange": 1 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json new file mode 100644 index 0000000000..b06f4d95a6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/pillager_outpost.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/pillager_outpost" + } + ], + "countRange": 4 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json new file mode 100644 index 0000000000..3c7b528cda --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/shipwreck_map.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/shipwreck_map" + } + ], + "countRange": 3 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json new file mode 100644 index 0000000000..141eebbe09 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/simple_dungeon.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/simple_dungeon" + } + ], + "countRange": 1 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json new file mode 100644 index 0000000000..f08c93cb45 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/stronghold_library.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/stronghold_library" + } + ], + "countRange": 5 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json new file mode 100644 index 0000000000..a59db105dd --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/village/village_cartographer.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/village/village_cartographer" + } + ], + "countRange": 2 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json new file mode 100644 index 0000000000..cc97ecc7c2 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_modifiers/scroll/minecraft/chests/woodland_mansion.json @@ -0,0 +1,10 @@ +{ + "type": "hexcasting:inject_scrolls", + "conditions": [ + { + "condition": "neoforge:loot_table_id", + "loot_table_id": "minecraft:chests/woodland_mansion" + } + ], + "countRange": 5 +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json new file mode 100644 index 0000000000..78a36f62ec --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_bookshelf.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:akashic_bookshelf" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/akashic_bookshelf" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json new file mode 100644 index 0000000000..02be275bc1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_ligature.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:akashic_ligature" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/akashic_ligature" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json new file mode 100644 index 0000000000..5c93f81681 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/akashic_record.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:akashic_record" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/akashic_record" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json new file mode 100644 index 0000000000..4c60a77364 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_bricks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json new file mode 100644 index 0000000000..3d39f82987 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_bricks_small" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json new file mode 100644 index 0000000000..7c054a0aab --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_dust_block.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_dust_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_dust_block" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json new file mode 100644 index 0000000000..911c281497 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_edified_leaves.json @@ -0,0 +1,41 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "ability": "shears_dig", + "condition": "neoforge:can_item_perform_ability" + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_edified_leaves" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_edified_leaves" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json new file mode 100644 index 0000000000..2eeb112461 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_pillar.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_pillar" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_pillar" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json new file mode 100644 index 0000000000..e2c38fe09e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_sconce.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_sconce" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_sconce" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json new file mode 100644 index 0000000000..13010296ca --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/amethyst_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/amethyst_tiles" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json new file mode 100644 index 0000000000..2bb2887920 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:ancient_scroll_paper" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/ancient_scroll_paper" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..f2ea006a03 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/ancient_scroll_paper_lantern.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:ancient_scroll_paper_lantern" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/ancient_scroll_paper_lantern" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json new file mode 100644 index 0000000000..d2bfc7c956 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/aventurine_edified_leaves.json @@ -0,0 +1,41 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "ability": "shears_dig", + "condition": "neoforge:can_item_perform_ability" + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:aventurine_edified_leaves" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/aventurine_edified_leaves" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json new file mode 100644 index 0000000000..88f319d753 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/citrine_edified_leaves.json @@ -0,0 +1,41 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:any_of", + "terms": [ + { + "ability": "shears_dig", + "condition": "neoforge:can_item_perform_ability" + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ] + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:citrine_edified_leaves" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/citrine_edified_leaves" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json new file mode 100644 index 0000000000..7510be752b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/boolean.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:directrix/boolean" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/directrix/boolean" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json new file mode 100644 index 0000000000..056282de33 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/empty.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:directrix/empty" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/directrix/empty" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json new file mode 100644 index 0000000000..b130eb19de --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/directrix/redstone.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:directrix/redstone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/directrix/redstone" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json new file mode 100644 index 0000000000..a24172124e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_button.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_button" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_button" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json new file mode 100644 index 0000000000..942a65484f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_door.json @@ -0,0 +1,24 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "block": "hexcasting:edified_door", + "condition": "minecraft:block_state_property", + "properties": { + "half": "lower" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_door" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_door" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json new file mode 100644 index 0000000000..f45eea22be --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_fence" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_fence" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json new file mode 100644 index 0000000000..01cbf2a5e1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_fence_gate.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_fence_gate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_fence_gate" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json new file mode 100644 index 0000000000..396a3fcb45 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json new file mode 100644 index 0000000000..d6c0759bfa --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_amethyst.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_amethyst" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_amethyst" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json new file mode 100644 index 0000000000..31892f2177 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_aventurine.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_aventurine" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_aventurine" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json new file mode 100644 index 0000000000..21ac1cd0fb --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_citrine.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_citrine" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_citrine" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json new file mode 100644 index 0000000000..f9c2c33343 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_log_purple.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_log_purple" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_log_purple" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json new file mode 100644 index 0000000000..83cb1f1b59 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_panel.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_panel" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_panel" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json new file mode 100644 index 0000000000..5f1b5f7280 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_planks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_planks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_planks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json new file mode 100644 index 0000000000..d733b30a49 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_pressure_plate.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_pressure_plate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_pressure_plate" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json new file mode 100644 index 0000000000..0bdc00f6b3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_slab.json @@ -0,0 +1,34 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_slab" + } + ], + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "hexcasting:edified_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_slab" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json new file mode 100644 index 0000000000..7cb6566434 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_stairs.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_stairs" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_stairs" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json new file mode 100644 index 0000000000..dbc6bd1426 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_tile.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_tile" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_tile" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json new file mode 100644 index 0000000000..f76ea0437f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_trapdoor.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_trapdoor" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_trapdoor" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json new file mode 100644 index 0000000000..2e1faee977 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/edified_wood.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:edified_wood" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/edified_wood" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json new file mode 100644 index 0000000000..67fe1185ac --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/empty.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/empty" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/empty" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json new file mode 100644 index 0000000000..87f6f0ef09 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/look.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/look" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/look" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json new file mode 100644 index 0000000000..1635ee4207 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/redstone.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/redstone" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/redstone" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json new file mode 100644 index 0000000000..37f1e9df10 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/impetus/rightclick.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:impetus/rightclick" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/impetus/rightclick" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json new file mode 100644 index 0000000000..09fe8b6fd3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay.json @@ -0,0 +1,69 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:alternatives", + "children": [ + { + "type": "minecraft:item", + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + ], + "name": "hexcasting:quenched_allay" + }, + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 4.0, + "min": 2.0 + }, + "function": "minecraft:set_count" + }, + { + "add": true, + "conditions": [ + { + "chances": [ + 0.25, + 0.5, + 0.75, + 1.0 + ], + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune" + } + ], + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "name": "hexcasting:quenched_allay_shard" + } + ] + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json new file mode 100644 index 0000000000..eb1a87b224 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:quenched_allay_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay_bricks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json new file mode 100644 index 0000000000..879089b6d4 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:quenched_allay_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay_bricks_small" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json new file mode 100644 index 0000000000..0c81157382 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/quenched_allay_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:quenched_allay_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/quenched_allay_tiles" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json new file mode 100644 index 0000000000..8c3d628108 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:scroll_paper" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/scroll_paper" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json new file mode 100644 index 0000000000..ccea471c66 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/scroll_paper_lantern.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:scroll_paper_lantern" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/scroll_paper_lantern" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json new file mode 100644 index 0000000000..eeb8f5c955 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate.json @@ -0,0 +1,24 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "function": "minecraft:copy_components", + "include": [ + "hexcasting:pattern" + ], + "source": "block_entity" + } + ], + "name": "hexcasting:slate" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json new file mode 100644 index 0000000000..f6d9ea8d1a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_bricks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json new file mode 100644 index 0000000000..6f7cfb5825 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_bricks_small" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json new file mode 100644 index 0000000000..96dd26f7fb --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_pillar.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_pillar" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_pillar" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json new file mode 100644 index 0000000000..e91ebad3ce --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_amethyst_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_amethyst_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_amethyst_tiles" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json new file mode 100644 index 0000000000..d136fe7460 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_block.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_block" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_block" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json new file mode 100644 index 0000000000..d42593f8d5 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_bricks" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_bricks" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json new file mode 100644 index 0000000000..f77a608dec --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_bricks_small.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_bricks_small" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_bricks_small" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json new file mode 100644 index 0000000000..060b60ebf9 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_pillar.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_pillar" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_pillar" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json new file mode 100644 index 0000000000..81cda1a13a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/slate_tiles.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:slate_tiles" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/slate_tiles" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json new file mode 100644 index 0000000000..7dab40f3a1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_log.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:stripped_edified_log" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/stripped_edified_log" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json new file mode 100644 index 0000000000..60b009f032 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/blocks/stripped_edified_wood.json @@ -0,0 +1,15 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:stripped_edified_wood" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:blocks/stripped_edified_wood" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json b/Neoforge/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json new file mode 100644 index 0000000000..e87bc89af2 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/loot_table/inject/amethyst_cluster.json @@ -0,0 +1,211 @@ +{ + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_dust" + } + ], + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 4.0, + "min": 1.0 + }, + "function": "minecraft:set_count" + }, + { + "enchantment": "minecraft:fortune", + "formula": "minecraft:ore_drops", + "function": "minecraft:apply_bonus" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:amethyst_dust" + } + ], + "functions": [ + { + "add": false, + "count": { + "type": "minecraft:uniform", + "max": 2.0, + "min": 0.0 + }, + "function": "minecraft:set_count" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + }, + { + "chances": [ + 0.25, + 0.35, + 0.5, + 0.75, + 1.0 + ], + "condition": "minecraft:table_bonus", + "enchantment": "minecraft:fortune" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:charged_amethyst" + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "rolls": 1.0 + }, + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "predicates": { + "minecraft:enchantments": [ + { + "enchantments": "minecraft:silk_touch", + "levels": { + "min": 1 + } + } + ] + } + } + } + }, + { + "condition": "minecraft:inverted", + "term": { + "condition": "minecraft:match_tool", + "predicate": { + "items": "#minecraft:cluster_max_harvestables" + } + } + }, + { + "chance": 0.125, + "condition": "minecraft:random_chance" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "hexcasting:charged_amethyst" + } + ], + "functions": [ + { + "add": false, + "count": 1.0, + "function": "minecraft:set_count" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "hexcasting:inject/amethyst_cluster" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/abacus.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/abacus.json new file mode 100644 index 0000000000..76d393b033 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/abacus.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:amethyst_shard" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "minecraft:planks" + } + }, + "pattern": [ + "WAW", + "SAS", + "WAW" + ], + "result": { + "count": 1, + "id": "hexcasting:abacus" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json new file mode 100644 index 0000000000..54de4e69be --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/ageing_scroll_paper_lantern.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "tag": "c:dyes/brown" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + }, + { + "item": "hexcasting:scroll_paper_lantern" + } + ], + "result": { + "count": 8, + "id": "hexcasting:ancient_scroll_paper_lantern" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json new file mode 100644 index 0000000000..055ac48308 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_bookshelf.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "C": { + "item": "minecraft:book" + }, + "L": { + "tag": "hexcasting:edified_logs" + }, + "P": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "LPL", + "CCC", + "LPL" + ], + "result": { + "count": 1, + "id": "hexcasting:akashic_bookshelf" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json new file mode 100644 index 0000000000..bbcc3f83e7 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/akashic_ligature.json @@ -0,0 +1,30 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "1": { + "item": "hexcasting:amethyst_dust" + }, + "2": { + "item": "minecraft:amethyst_shard" + }, + "3": { + "item": "hexcasting:charged_amethyst" + }, + "L": { + "tag": "hexcasting:edified_logs" + }, + "P": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "LPL", + "123", + "LPL" + ], + "result": { + "count": 4, + "id": "hexcasting:akashic_ligature" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json new file mode 100644 index 0000000000..1da337229f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_packing.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "X": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + "XX", + "XX" + ], + "result": { + "count": 1, + "id": "hexcasting:amethyst_dust_block" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json new file mode 100644 index 0000000000..db42cb3711 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_dust_unpacking.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "item": "hexcasting:amethyst_dust_block" + } + ], + "result": { + "count": 4, + "id": "hexcasting:amethyst_dust" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json new file mode 100644 index 0000000000..1ece2856f0 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_sconce.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "tag": "c:ingots/copper" + }, + "T": { + "item": "hexcasting:charged_amethyst" + } + }, + "pattern": [ + "T", + "B" + ], + "result": { + "count": 4, + "id": "hexcasting:amethyst_sconce" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json new file mode 100644 index 0000000000..300139c437 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/amethyst_tiles.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "item": "minecraft:amethyst_block" + }, + "D": { + "item": "minecraft:amethyst_block" + }, + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:amethyst_tiles" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json new file mode 100644 index 0000000000..33db9b82c9 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper.json @@ -0,0 +1,37 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "tag": "c:dyes/brown" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + }, + { + "item": "hexcasting:scroll_paper" + } + ], + "result": { + "count": 8, + "id": "hexcasting:ancient_scroll_paper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json new file mode 100644 index 0000000000..d99d9ba91b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/ancient_scroll_paper_lantern.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "minecraft:torch" + }, + "T": { + "item": "hexcasting:ancient_scroll_paper" + } + }, + "pattern": [ + "T", + "B" + ], + "result": { + "count": 1, + "id": "hexcasting:ancient_scroll_paper_lantern" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/artifact.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/artifact.json new file mode 100644 index 0000000000..a03e30a2a8 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/artifact.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "D": { + "tag": "minecraft:creeper_drop_music_discs" + }, + "F": { + "tag": "c:ingots/gold" + } + }, + "pattern": [ + " F ", + "FAF", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:artifact" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json new file mode 100644 index 0000000000..750ad2dcfe --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/akashic_record.json @@ -0,0 +1,16 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:akashic_ligature" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 5, + "profession": "minecraft:librarian" + }, + "result": { + "Name": "hexcasting:akashic_record" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json new file mode 100644 index 0000000000..0532b2e5ed --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/budding_amethyst.json @@ -0,0 +1,15 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "minecraft:amethyst_block" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 3 + }, + "result": { + "Name": "minecraft:budding_amethyst" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json new file mode 100644 index 0000000000..5e97ada05f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_boolean.json @@ -0,0 +1,21 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:directrix/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 1, + "profession": "minecraft:shepherd" + }, + "result": { + "Name": "hexcasting:directrix/boolean", + "Properties": { + "energized": "false", + "facing": "north", + "state": "neither" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json new file mode 100644 index 0000000000..afb314d043 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/directrix_redstone.json @@ -0,0 +1,21 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:directrix/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 1, + "profession": "minecraft:mason" + }, + "result": { + "Name": "hexcasting:directrix/redstone", + "Properties": { + "energized": "false", + "facing": "north", + "powered": "false" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json new file mode 100644 index 0000000000..7d77364f78 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_look.json @@ -0,0 +1,20 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:impetus/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 2, + "profession": "minecraft:fletcher" + }, + "result": { + "Name": "hexcasting:impetus/look", + "Properties": { + "energized": "false", + "facing": "north" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json new file mode 100644 index 0000000000..02fbae2538 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_rightclick.json @@ -0,0 +1,20 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:impetus/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 2, + "profession": "minecraft:toolsmith" + }, + "result": { + "Name": "hexcasting:impetus/rightclick", + "Properties": { + "energized": "false", + "facing": "north" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json new file mode 100644 index 0000000000..f79dca1d11 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/impetus_storedplayer.json @@ -0,0 +1,21 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "hexcasting:impetus/empty" + }, + "cost": 1000000, + "entityIn": { + "type": "hexcasting:villager", + "minLevel": 2, + "profession": "minecraft:cleric" + }, + "result": { + "Name": "hexcasting:impetus/redstone", + "Properties": { + "energized": "false", + "facing": "north", + "powered": "true" + } + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json new file mode 100644 index 0000000000..076b4e0745 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/brainsweep/quench_allay.json @@ -0,0 +1,15 @@ +{ + "type": "hexcasting:brainsweep", + "blockIn": { + "type": "hexcasting:block", + "block": "minecraft:amethyst_block" + }, + "cost": 100000, + "entityIn": { + "type": "hexcasting:entity_type", + "entityType": "minecraft:allay" + }, + "result": { + "Name": "hexcasting:quenched_allay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/cypher.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/cypher.json new file mode 100644 index 0000000000..80e1837536 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/cypher.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "C": { + "tag": "c:ingots/copper" + }, + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " C ", + "CIC", + " C " + ], + "result": { + "count": 1, + "id": "hexcasting:cypher" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json new file mode 100644 index 0000000000..4d9e9902e8 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/charged.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "hexcasting:quenched_allay_shard" + }, + { + "item": "hexcasting:charged_amethyst" + } + ], + "result": { + "count": 4, + "id": "hexcasting:charged_amethyst" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json new file mode 100644 index 0000000000..5023760773 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/dust.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "hexcasting:quenched_allay_shard" + }, + { + "item": "hexcasting:amethyst_dust" + } + ], + "result": { + "count": 31, + "id": "hexcasting:amethyst_dust" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json new file mode 100644 index 0000000000..e441d9bf5f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/decompose_quenched_shard/shard.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "hexcasting:quenched_allay_shard" + }, + { + "item": "minecraft:amethyst_shard" + } + ], + "result": { + "count": 7, + "id": "minecraft:amethyst_shard" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/default_colorizer.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/default_colorizer.json new file mode 100644 index 0000000000..b61e7ef20a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/default_colorizer.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "hexcasting:amethyst_dust" + }, + "D": { + "item": "hexcasting:amethyst_dust" + }, + "I": { + "item": "minecraft:copper_ingot" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 1, + "id": "hexcasting:default_colorizer" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/directrix/empty.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/directrix/empty.json new file mode 100644 index 0000000000..986fa97d99 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/directrix/empty.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "C": { + "item": "minecraft:comparator" + }, + "O": { + "item": "minecraft:observer" + }, + "S": { + "item": "hexcasting:slate_block" + } + }, + "pattern": [ + "CSS", + "OAO", + "SSC" + ], + "result": { + "count": 1, + "id": "hexcasting:directrix/empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json new file mode 100644 index 0000000000..43dcd86862 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_black.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:black_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_black" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json new file mode 100644 index 0000000000..b9cd3b99c3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_blue.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:blue_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_blue" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json new file mode 100644 index 0000000000..f02b87049c --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_brown.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:brown_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_brown" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json new file mode 100644 index 0000000000..93380132c6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_cyan.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:cyan_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_cyan" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json new file mode 100644 index 0000000000..c803427d5a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_gray.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:gray_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_gray" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json new file mode 100644 index 0000000000..e592b36cca --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_green.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:green_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_green" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json new file mode 100644 index 0000000000..d8eb9b5986 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_blue.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:light_blue_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_light_blue" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json new file mode 100644 index 0000000000..e6efc2af9a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_light_gray.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:light_gray_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_light_gray" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json new file mode 100644 index 0000000000..645db81176 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_lime.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:lime_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_lime" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json new file mode 100644 index 0000000000..9476c0a098 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_magenta.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:magenta_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_magenta" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json new file mode 100644 index 0000000000..f6f815b95f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_orange.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:orange_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_orange" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json new file mode 100644 index 0000000000..065db19c23 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_pink.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:pink_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_pink" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json new file mode 100644 index 0000000000..85dab6119e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_purple.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:purple_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_purple" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json new file mode 100644 index 0000000000..8acba0fc1a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_red.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:red_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_red" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json new file mode 100644 index 0000000000..d76ee9ba69 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_white.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:white_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_white" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json new file mode 100644 index 0000000000..35ffbdd8df --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dye_colorizer_yellow.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:yellow_dye" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:dye_colorizer_yellow" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json new file mode 100644 index 0000000000..28edc09f6d --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_focus.json @@ -0,0 +1,4 @@ +{ + "type": "hexcasting:seal_focus", + "category": "misc" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json new file mode 100644 index 0000000000..5bf703566d --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/dynamicseal_spellbook.json @@ -0,0 +1,4 @@ +{ + "type": "hexcasting:seal_spellbook", + "category": "misc" +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_button.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_button.json new file mode 100644 index 0000000000..10ad25b4aa --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_button.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "redstone", + "ingredients": [ + { + "tag": "hexcasting:edified_planks" + } + ], + "result": { + "count": 1, + "id": "hexcasting:edified_button" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_door.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_door.json new file mode 100644 index 0000000000..6ff2941615 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_door.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WW", + "WW", + "WW" + ], + "result": { + "count": 3, + "id": "hexcasting:edified_door" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence.json new file mode 100644 index 0000000000..f1a7c7ec45 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WSW", + "WSW" + ], + "result": { + "count": 3, + "id": "hexcasting:edified_fence" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json new file mode 100644 index 0000000000..a38d45ca38 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_fence_gate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "SWS", + "SWS" + ], + "result": { + "count": 1, + "id": "hexcasting:edified_fence_gate" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_panel.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_panel.json new file mode 100644 index 0000000000..0baf420f31 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_panel.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "tag": "hexcasting:edified_planks" + }, + "D": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "DCD", + "C C", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:edified_panel" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_planks.json new file mode 100644 index 0000000000..7ea641db71 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_planks.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "building", + "ingredients": [ + { + "tag": "hexcasting:edified_logs" + } + ], + "result": { + "count": 4, + "id": "hexcasting:edified_planks" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json new file mode 100644 index 0000000000..fb80df82d1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_pressure_plate.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WW" + ], + "result": { + "count": 1, + "id": "hexcasting:edified_pressure_plate" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_slab.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_slab.json new file mode 100644 index 0000000000..efda8df52a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WWW" + ], + "result": { + "count": 6, + "id": "hexcasting:edified_slab" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_stairs.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_stairs.json new file mode 100644 index 0000000000..ca2e03f9c3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "W ", + "WW ", + "WWW" + ], + "result": { + "count": 4, + "id": "hexcasting:edified_stairs" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_tile.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_tile.json new file mode 100644 index 0000000000..bfca8c3437 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_tile.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WW ", + "W W", + " WW" + ], + "result": { + "count": 6, + "id": "hexcasting:edified_tile" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json new file mode 100644 index 0000000000..89928fcc73 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_trapdoor.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "W": { + "tag": "hexcasting:edified_planks" + } + }, + "pattern": [ + "WWW", + "WWW" + ], + "result": { + "count": 2, + "id": "hexcasting:edified_trapdoor" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_wood.json new file mode 100644 index 0000000000..4e95e0bdc6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/edified_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "item": "hexcasting:edified_log" + } + }, + "pattern": [ + "WW", + "WW" + ], + "result": { + "count": 3, + "id": "hexcasting:edified_wood" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/focus.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/focus.json new file mode 100644 index 0000000000..ff88244378 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/focus.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "G": { + "tag": "c:dusts/glowstone" + }, + "L": { + "tag": "c:leathers" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + "GLG", + "PAP", + "GLG" + ], + "result": { + "count": 1, + "id": "hexcasting:focus" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/focus_rotated.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/focus_rotated.json new file mode 100644 index 0000000000..62aba7f62e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/focus_rotated.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "G": { + "tag": "c:dusts/glowstone" + }, + "L": { + "tag": "c:leathers" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + "GPG", + "LAL", + "GPG" + ], + "result": { + "count": 1, + "id": "hexcasting:focus" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/impetus/empty.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/impetus/empty.json new file mode 100644 index 0000000000..b5d3b9fd5c --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/impetus/empty.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "B": { + "item": "minecraft:iron_bars" + }, + "P": { + "item": "minecraft:purpur_block" + }, + "S": { + "item": "hexcasting:slate_block" + } + }, + "pattern": [ + "PSS", + "BAB", + "SSP" + ], + "result": { + "count": 1, + "id": "hexcasting:impetus/empty" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json new file mode 100644 index 0000000000..fef55bcb4b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/jeweler_hammer.json @@ -0,0 +1,32 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "minecraft:amethyst_shard" + }, + "I": { + "tag": "c:ingots/iron" + }, + "N": { + "tag": "c:nuggets/iron" + }, + "S": [ + { + "item": "minecraft:stick" + }, + { + "tag": "forge:rods/wooden" + } + ] + }, + "pattern": [ + "IAN", + " S ", + " S " + ], + "result": { + "count": 1, + "id": "hexcasting:jeweler_hammer" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/lens.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/lens.json new file mode 100644 index 0000000000..d7e33ac36b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/lens.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "C": { + "item": "minecraft:glass" + }, + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " C ", + "CIC", + " C " + ], + "result": { + "count": 1, + "id": "hexcasting:lens" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json new file mode 100644 index 0000000000..d5401c0952 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_agender.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:glass" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_agender" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json new file mode 100644 index 0000000000..25c32f412c --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aroace.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:wheat_seeds" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_aroace" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json new file mode 100644 index 0000000000..ab923e9b61 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_aromantic.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:arrow" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_aromantic" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json new file mode 100644 index 0000000000..c41a3223de --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_asexual.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:bread" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_asexual" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json new file mode 100644 index 0000000000..157dff5b64 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_bisexual.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:wheat" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_bisexual" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json new file mode 100644 index 0000000000..c79d6fd805 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demiboy.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:raw_iron" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_demiboy" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json new file mode 100644 index 0000000000..4a87fb83dd --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_demigirl.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:raw_copper" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_demigirl" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json new file mode 100644 index 0000000000..3922bf5fa1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_gay.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:stone_brick_wall" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_gay" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json new file mode 100644 index 0000000000..788be0d074 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderfluid.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:water_bucket" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_genderfluid" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json new file mode 100644 index 0000000000..db56478852 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_genderqueer.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:glass_bottle" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_genderqueer" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json new file mode 100644 index 0000000000..0cf8605f6e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_intersex.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:azalea" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_intersex" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json new file mode 100644 index 0000000000..60faeb98cb --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_lesbian.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:honeycomb" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_lesbian" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json new file mode 100644 index 0000000000..1592908ece --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_nonbinary.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:moss_block" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_nonbinary" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json new file mode 100644 index 0000000000..662aaf38fc --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_plural.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:repeater" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_plural" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json new file mode 100644 index 0000000000..cce2b91ea8 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/pride_colorizer_transgender.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "minecraft:egg" + }, + "D": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + " D ", + "DCD", + " D " + ], + "result": { + "count": 1, + "id": "hexcasting:pride_colorizer_transgender" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll.json new file mode 100644 index 0000000000..cf7a4fcfb1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + "PPA", + "PPP", + "PPP" + ], + "result": { + "count": 1, + "id": "hexcasting:scroll" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_medium.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_medium.json new file mode 100644 index 0000000000..85b2a98f34 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_medium.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + " A", + "PP ", + "PP " + ], + "result": { + "count": 1, + "id": "hexcasting:scroll_medium" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper.json new file mode 100644 index 0000000000..1feb96a530 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "item": "minecraft:paper" + }, + "D": { + "item": "minecraft:paper" + }, + "I": { + "item": "minecraft:amethyst_shard" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:scroll_paper" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json new file mode 100644 index 0000000000..5434f4c7f1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_paper_lantern.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "B": { + "item": "minecraft:torch" + }, + "T": { + "item": "hexcasting:scroll_paper" + } + }, + "pattern": [ + "T", + "B" + ], + "result": { + "count": 1, + "id": "hexcasting:scroll_paper_lantern" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_small.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_small.json new file mode 100644 index 0000000000..c64a3e544a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/scroll_small.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "P": { + "item": "minecraft:paper" + } + }, + "pattern": [ + " A", + "P " + ], + "result": { + "count": 1, + "id": "hexcasting:scroll_small" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/slate.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/slate.json new file mode 100644 index 0000000000..eb718972c2 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/slate.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "hexcasting:amethyst_dust" + }, + "S": { + "item": "minecraft:deepslate" + } + }, + "pattern": [ + " A ", + "SSS" + ], + "result": { + "count": 6, + "id": "hexcasting:slate" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block.json new file mode 100644 index 0000000000..975fea26a0 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "C": { + "item": "minecraft:deepslate" + }, + "D": { + "item": "minecraft:deepslate" + }, + "I": { + "item": "hexcasting:amethyst_dust" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 8, + "id": "hexcasting:slate_block" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json new file mode 100644 index 0000000000..92bf412fdf --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/slate_block_from_slates.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "S": { + "item": "hexcasting:slate" + } + }, + "pattern": [ + "S", + "S" + ], + "result": { + "count": 1, + "id": "hexcasting:slate_block" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/spellbook.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/spellbook.json new file mode 100644 index 0000000000..d9e9250926 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/spellbook.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "B": { + "item": "minecraft:writable_book" + }, + "F": { + "item": "minecraft:chorus_fruit" + }, + "N": { + "tag": "c:nuggets/gold" + } + }, + "pattern": [ + "NBA", + "NFA", + "NBA" + ], + "result": { + "count": 1, + "id": "hexcasting:spellbook" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/acacia.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/acacia.json new file mode 100644 index 0000000000..a5e01a9c9a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/acacia.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:acacia_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/acacia" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json new file mode 100644 index 0000000000..8c648a860c --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/bamboo.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:bamboo_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/bamboo" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/birch.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/birch.json new file mode 100644 index 0000000000..2cee68c976 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/birch.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:birch_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/birch" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/cherry.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/cherry.json new file mode 100644 index 0000000000..fb19b26271 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/cherry.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:cherry_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/cherry" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/crimson.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/crimson.json new file mode 100644 index 0000000000..6f8b4dd09e --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/crimson.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:crimson_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/crimson" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json new file mode 100644 index 0000000000..b4a9aea823 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/dark_oak.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:dark_oak_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/dark_oak" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/edified.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/edified.json new file mode 100644 index 0000000000..29378f8085 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/edified.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "hexcasting:edified_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/edified" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/jungle.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/jungle.json new file mode 100644 index 0000000000..a3b382cf11 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/jungle.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:jungle_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/jungle" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json new file mode 100644 index 0000000000..2ad01c0d69 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mangrove.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:mangrove_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/mangrove" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json new file mode 100644 index 0000000000..41c9e8abb0 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/mindsplice.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "tag": "hexcasting:brainswept_circle_components" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/mindsplice" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/oak.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/oak.json new file mode 100644 index 0000000000..75d6d9daab --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/oak.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:oak_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/oak" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/quenched.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/quenched.json new file mode 100644 index 0000000000..91fd1fc452 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/quenched.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "hexcasting:quenched_allay_shard" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/quenched" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/spruce.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/spruce.json new file mode 100644 index 0000000000..0ab7166a60 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/spruce.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:spruce_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/spruce" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/warped.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/warped.json new file mode 100644 index 0000000000..8a71b96aaf --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/staff/warped.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "A": { + "item": "hexcasting:charged_amethyst" + }, + "S": { + "item": "minecraft:stick" + }, + "W": { + "item": "minecraft:warped_planks" + } + }, + "pattern": [ + " SA", + " WS", + "S " + ], + "result": { + "count": 1, + "id": "hexcasting:staff/warped" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json new file mode 100644 index 0000000000..7eb40a9ada --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/stonecutting/amethyst_tiles.json @@ -0,0 +1,10 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "minecraft:amethyst_block" + }, + "result": { + "count": 1, + "id": "hexcasting:amethyst_tiles" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json new file mode 100644 index 0000000000..0ccb5ae8e2 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/stripped_edified_wood.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "W": { + "item": "hexcasting:stripped_edified_log" + } + }, + "pattern": [ + "WW", + "WW" + ], + "result": { + "count": 3, + "id": "hexcasting:stripped_edified_wood" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json new file mode 100644 index 0000000000..82a511fde4 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/sub_sandwich.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "minecraft:amethyst_shard" + }, + "B": { + "item": "minecraft:bread" + }, + "C": { + "item": "minecraft:cooked_beef" + }, + "S": { + "item": "minecraft:stick" + } + }, + "pattern": [ + " SA", + " C ", + " B " + ], + "result": { + "count": 1, + "id": "hexcasting:sub_sandwich" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/thought_knot.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/thought_knot.json new file mode 100644 index 0000000000..d89ad83310 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/thought_knot.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "equipment", + "ingredients": [ + { + "item": "hexcasting:amethyst_dust" + }, + { + "item": "minecraft:string" + } + ], + "result": { + "count": 1, + "id": "hexcasting:thought_knot" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/trinket.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/trinket.json new file mode 100644 index 0000000000..f0c905012a --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/trinket.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "key": { + "C": { + "tag": "c:ingots/iron" + }, + "I": { + "item": "minecraft:amethyst_shard" + } + }, + "pattern": [ + " C ", + "CIC", + " C " + ], + "result": { + "count": 1, + "id": "hexcasting:trinket" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json b/Neoforge/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json new file mode 100644 index 0000000000..235a2aff68 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/recipe/uuid_colorizer.json @@ -0,0 +1,24 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "C": { + "item": "hexcasting:amethyst_dust" + }, + "D": { + "item": "hexcasting:amethyst_dust" + }, + "I": { + "item": "minecraft:amethyst_shard" + } + }, + "pattern": [ + "DCD", + "CIC", + "DCD" + ], + "result": { + "count": 1, + "id": "hexcasting:uuid_colorizer" + } +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json new file mode 100644 index 0000000000..aa71f4b195 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/brainswept_circle_components.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#hexcasting:impeti", + "#hexcasting:directrices" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json new file mode 100644 index 0000000000..7fc52a816b --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/cheap_to_break_block.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:conjured_block", + "hexcasting:conjured_light" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/directrices.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/directrices.json new file mode 100644 index 0000000000..824259f178 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/directrices.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:directrix/redstone", + "hexcasting:directrix/boolean" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_logs.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/edified_planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json new file mode 100644 index 0000000000..094771ef74 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json @@ -0,0 +1,5 @@ +{ + "values": [ + "#minecraft:needs_diamond_tool" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/impeti.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/impeti.json new file mode 100644 index 0000000000..358990d5b4 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/impeti.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:impetus/look", + "hexcasting:impetus/rightclick", + "hexcasting:impetus/redstone" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/water_plants.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/water_plants.json new file mode 100644 index 0000000000..0f2bcab34f --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/block/water_plants.json @@ -0,0 +1,8 @@ +{ + "values": [ + "minecraft:kelp", + "minecraft:kelp_plant", + "minecraft:seagrass", + "minecraft:tall_seagrass" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json b/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json new file mode 100644 index 0000000000..3113294d13 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/can_start_enlighten.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:lightning", + "hexcasting:flight", + "hexcasting:create_lava", + "hexcasting:teleport/great", + "hexcasting:sentinel/create/great", + "hexcasting:dispel_rain", + "hexcasting:summon_rain", + "hexcasting:brainsweep", + "hexcasting:craft/battery", + "hexcasting:potion/regeneration", + "hexcasting:potion/night_vision", + "hexcasting:potion/absorption", + "hexcasting:potion/haste", + "hexcasting:potion/strength" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json b/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json new file mode 100644 index 0000000000..3113294d13 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/per_world_pattern.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:lightning", + "hexcasting:flight", + "hexcasting:create_lava", + "hexcasting:teleport/great", + "hexcasting:sentinel/create/great", + "hexcasting:dispel_rain", + "hexcasting:summon_rain", + "hexcasting:brainsweep", + "hexcasting:craft/battery", + "hexcasting:potion/regeneration", + "hexcasting:potion/night_vision", + "hexcasting:potion/absorption", + "hexcasting:potion/haste", + "hexcasting:potion/strength" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json b/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json new file mode 100644 index 0000000000..3113294d13 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/hexcasting/action/requires_enlightenment.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:lightning", + "hexcasting:flight", + "hexcasting:create_lava", + "hexcasting:teleport/great", + "hexcasting:sentinel/create/great", + "hexcasting:dispel_rain", + "hexcasting:summon_rain", + "hexcasting:brainsweep", + "hexcasting:craft/battery", + "hexcasting:potion/regeneration", + "hexcasting:potion/night_vision", + "hexcasting:potion/absorption", + "hexcasting:potion/haste", + "hexcasting:potion/strength" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json new file mode 100644 index 0000000000..aa71f4b195 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/brainswept_circle_components.json @@ -0,0 +1,6 @@ +{ + "values": [ + "#hexcasting:impeti", + "#hexcasting:directrices" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/directrices.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/directrices.json new file mode 100644 index 0000000000..824259f178 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/directrices.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:directrix/redstone", + "hexcasting:directrix/boolean" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_logs.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_planks.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/edified_planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json new file mode 100644 index 0000000000..1f7070a707 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/grants_root_advancement.json @@ -0,0 +1,8 @@ +{ + "values": [ + "hexcasting:amethyst_dust", + "minecraft:amethyst_shard", + "hexcasting:charged_amethyst", + "hexcasting:creative_unlocker" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/impeti.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/impeti.json new file mode 100644 index 0000000000..358990d5b4 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/impeti.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:impetus/look", + "hexcasting:impetus/rightclick", + "hexcasting:impetus/redstone" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/phial_base.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/phial_base.json new file mode 100644 index 0000000000..52ac4c0c96 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/phial_base.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:glass_bottle" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/seal_materials.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/seal_materials.json new file mode 100644 index 0000000000..674a370049 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/seal_materials.json @@ -0,0 +1,5 @@ +{ + "values": [ + "minecraft:honeycomb" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/item/staves.json b/Neoforge/src/generated/resources/data/hexcasting/tags/item/staves.json new file mode 100644 index 0000000000..29f4595c62 --- /dev/null +++ b/Neoforge/src/generated/resources/data/hexcasting/tags/item/staves.json @@ -0,0 +1,18 @@ +{ + "values": [ + "hexcasting:staff/edified", + "hexcasting:staff/oak", + "hexcasting:staff/spruce", + "hexcasting:staff/birch", + "hexcasting:staff/jungle", + "hexcasting:staff/acacia", + "hexcasting:staff/dark_oak", + "hexcasting:staff/crimson", + "hexcasting:staff/warped", + "hexcasting:staff/mangrove", + "hexcasting:staff/cherry", + "hexcasting:staff/bamboo", + "hexcasting:staff/quenched", + "hexcasting:staff/mindsplice" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/buttons.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json new file mode 100644 index 0000000000..7a23dc1ec1 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/crystal_sound_blocks.json @@ -0,0 +1,8 @@ +{ + "values": [ + "hexcasting:conjured_light", + "hexcasting:conjured_block", + "hexcasting:amethyst_tiles", + "hexcasting:amethyst_sconce" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/doors.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/fence_gates.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/fence_gates.json new file mode 100644 index 0000000000..f27c95c784 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/fence_gates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_fence_gate" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/fences.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/fences.json new file mode 100644 index 0000000000..269de59e0a --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/fences.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_fence" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/leaves.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/leaves.json new file mode 100644 index 0000000000..ff8e420cc6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/leaves.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:amethyst_edified_leaves", + "hexcasting:aventurine_edified_leaves", + "hexcasting:citrine_edified_leaves" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/logs.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/logs_that_burn.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/axe.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/axe.json new file mode 100644 index 0000000000..0d6037e186 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/axe.json @@ -0,0 +1,25 @@ +{ + "values": [ + "hexcasting:akashic_record", + "hexcasting:akashic_bookshelf", + "hexcasting:akashic_ligature", + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood", + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile", + "hexcasting:edified_door", + "hexcasting:edified_trapdoor", + "hexcasting:edified_slab", + "hexcasting:edified_button", + "hexcasting:edified_stairs", + "hexcasting:edified_fence", + "hexcasting:edified_fence_gate" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json new file mode 100644 index 0000000000..ff8e420cc6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/hoe.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:amethyst_edified_leaves", + "hexcasting:aventurine_edified_leaves", + "hexcasting:citrine_edified_leaves" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json new file mode 100644 index 0000000000..a8b1c2eb67 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -0,0 +1,30 @@ +{ + "values": [ + "hexcasting:slate_block", + "hexcasting:slate_tiles", + "hexcasting:slate_bricks", + "hexcasting:slate_bricks_small", + "hexcasting:slate_pillar", + "hexcasting:slate", + "hexcasting:directrix/empty", + "hexcasting:directrix/redstone", + "hexcasting:directrix/boolean", + "hexcasting:impetus/empty", + "hexcasting:impetus/rightclick", + "hexcasting:impetus/look", + "hexcasting:impetus/redstone", + "hexcasting:amethyst_tiles", + "hexcasting:amethyst_bricks", + "hexcasting:amethyst_bricks_small", + "hexcasting:amethyst_pillar", + "hexcasting:slate_amethyst_tiles", + "hexcasting:slate_amethyst_bricks", + "hexcasting:slate_amethyst_bricks_small", + "hexcasting:slate_amethyst_pillar", + "hexcasting:amethyst_sconce", + "hexcasting:quenched_allay", + "hexcasting:quenched_allay_tiles", + "hexcasting:quenched_allay_bricks", + "hexcasting:quenched_allay_bricks_small" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json new file mode 100644 index 0000000000..02d08df2b3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/mineable/shovel.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:amethyst_dust_block" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/planks.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/pressure_plates.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/pressure_plates.json new file mode 100644 index 0000000000..8880072112 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/pressure_plates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_pressure_plate" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/slabs.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/stairs.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/stairs.json new file mode 100644 index 0000000000..c2e7fad75b --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/stairs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_stairs" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/trapdoors.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json new file mode 100644 index 0000000000..f27c95c784 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/unstable_bottom_center.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_fence_gate" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_doors.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_fences.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_fences.json new file mode 100644 index 0000000000..117722b2be --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_fences.json @@ -0,0 +1,6 @@ +{ + "values": [ + "hexcasting:edified_fence", + "hexcasting:edified_fence" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json new file mode 100644 index 0000000000..8880072112 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_pressure_plates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_pressure_plate" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json new file mode 100644 index 0000000000..c2e7fad75b --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_stairs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_stairs" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/block/wooden_trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json b/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json new file mode 100644 index 0000000000..4209c89aa3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_armor.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:overcast" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_effects.json b/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_effects.json new file mode 100644 index 0000000000..4209c89aa3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_effects.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:overcast" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_shield.json b/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_shield.json new file mode 100644 index 0000000000..4209c89aa3 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/damage_type/bypasses_shield.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:overcast" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/buttons.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/doors.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/leaves.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/leaves.json new file mode 100644 index 0000000000..ff8e420cc6 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/leaves.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:amethyst_edified_leaves", + "hexcasting:aventurine_edified_leaves", + "hexcasting:citrine_edified_leaves" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/logs.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/logs.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/logs.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json new file mode 100644 index 0000000000..22fc9e7a51 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/logs_that_burn.json @@ -0,0 +1,12 @@ +{ + "values": [ + "hexcasting:edified_log", + "hexcasting:edified_log_amethyst", + "hexcasting:edified_log_aventurine", + "hexcasting:edified_log_citrine", + "hexcasting:edified_log_purple", + "hexcasting:stripped_edified_log", + "hexcasting:edified_wood", + "hexcasting:stripped_edified_wood" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/planks.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/planks.json new file mode 100644 index 0000000000..36cc46d6db --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/planks.json @@ -0,0 +1,7 @@ +{ + "values": [ + "hexcasting:edified_planks", + "hexcasting:edified_panel", + "hexcasting:edified_tile" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/slabs.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/trapdoors.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json new file mode 100644 index 0000000000..672bbc1a69 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_button" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_doors.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_doors.json new file mode 100644 index 0000000000..e5614ff46f --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_doors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_door" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json new file mode 100644 index 0000000000..8880072112 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_pressure_plates.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_pressure_plate" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json new file mode 100644 index 0000000000..af4c10b029 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_slabs.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_slab" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json new file mode 100644 index 0000000000..0e9f576897 --- /dev/null +++ b/Neoforge/src/generated/resources/data/minecraft/tags/item/wooden_trapdoors.json @@ -0,0 +1,5 @@ +{ + "values": [ + "hexcasting:edified_trapdoor" + ] +} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json b/Neoforge/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json new file mode 100644 index 0000000000..6699a7a66e --- /dev/null +++ b/Neoforge/src/generated/resources/data/neoforge/loot_modifiers/global_loot_modifiers.json @@ -0,0 +1,37 @@ +{ + "entries": [ + "hexcasting:scroll/minecraft/chests/simple_dungeon", + "hexcasting:scroll/minecraft/chests/abandoned_mineshaft", + "hexcasting:scroll/minecraft/chests/bastion_other", + "hexcasting:scroll/minecraft/chests/nether_bridge", + "hexcasting:scroll/minecraft/chests/jungle_temple", + "hexcasting:scroll/minecraft/chests/desert_pyramid", + "hexcasting:scroll/minecraft/chests/village/village_cartographer", + "hexcasting:scroll/minecraft/chests/shipwreck_map", + "hexcasting:scroll/minecraft/chests/bastion_treasure", + "hexcasting:scroll/minecraft/chests/end_city_treasure", + "hexcasting:scroll/minecraft/chests/ancient_city", + "hexcasting:scroll/minecraft/chests/pillager_outpost", + "hexcasting:scroll/minecraft/chests/woodland_mansion", + "hexcasting:scroll/minecraft/chests/stronghold_library", + "hexcasting:lore/minecraft/chests/simple_dungeon", + "hexcasting:lore/minecraft/chests/abandoned_mineshaft", + "hexcasting:lore/minecraft/chests/pillager_outpost", + "hexcasting:lore/minecraft/chests/woodland_mansion", + "hexcasting:lore/minecraft/chests/stronghold_library", + "hexcasting:lore/minecraft/chests/village/village_desert_house", + "hexcasting:lore/minecraft/chests/village/village_plains_house", + "hexcasting:lore/minecraft/chests/village/village_savanna_house", + "hexcasting:lore/minecraft/chests/village/village_snowy_house", + "hexcasting:lore/minecraft/chests/village/village_taiga_house", + "hexcasting:cypher/minecraft/chests/simple_dungeon", + "hexcasting:cypher/minecraft/chests/abandoned_mineshaft", + "hexcasting:cypher/minecraft/chests/stronghold_corridor", + "hexcasting:cypher/minecraft/chests/jungle_temple", + "hexcasting:cypher/minecraft/chests/desert_pyramid", + "hexcasting:cypher/minecraft/chests/ancient_city", + "hexcasting:cypher/minecraft/chests/nether_bridge", + "hexcasting:amethyst_cluster" + ], + "replace": false +} \ No newline at end of file diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java index 0598ab7110..d50c7aa784 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/datagen/ForgeHexDataGenerators.java @@ -46,8 +46,8 @@ public static void generateData(GatherDataEvent ev) { //if (System.getProperty("hexcasting.xplat_datagen") != null) { configureXplatDatagen(ev); //} - //if (System.getProperty("hexcasting.forge_datagen") != null) { - configureForgeDatagen(ev); + //if (System.getProperty("hexcasting.neoforge_datagen") != null) { + configureNeoforgeDatagen(ev); //} } @@ -80,8 +80,8 @@ private static void configureXplatDatagen(GatherDataEvent ev) { } @SuppressWarnings({"DataFlowIssue", "UnreachableCode"}) - private static void configureForgeDatagen(GatherDataEvent ev) { - HexAPI.LOGGER.info("Starting Forge-specific datagen"); + private static void configureNeoforgeDatagen(GatherDataEvent ev) { + HexAPI.LOGGER.info("Starting NeoForge-specific datagen"); DataGenerator gen = ev.getGenerator(); var output = gen.getPackOutput(); diff --git a/build.gradle b/build.gradle index 627274291d..c0eb6812a5 100644 --- a/build.gradle +++ b/build.gradle @@ -93,7 +93,6 @@ subprojects { tasks.withType(GenerateModuleMetadata).configureEach { enabled = false } - } allprojects { @@ -124,6 +123,6 @@ compileTestKotlin { tasks.register("runAllDatagen") { dependsOn ":Neoforge:runXplatDatagen" - dependsOn ":Neoforge:runForgeDatagen" + dependsOn ":Neoforge:runDatagen" dependsOn ":Fabric:runDatagen" } From cf1a3aa19387a4c15827eb6e62c2a7133455a0bd Mon Sep 17 00:00:00 2001 From: Noelle Date: Wed, 10 Dec 2025 15:56:49 -0600 Subject: [PATCH 69/81] Fixed crash with impeti breaking (also, fixed failure of item stacks visualizing on impeti scrying sight mishap) Fixed slate rendering both as a block entity and an item stack. --- .../circles/BlockEntityAbstractImpetus.java | 8 ++-- .../blocks/circles/BlockEntitySlate.java | 19 ++++++++ .../common/items/storage/ItemSlate.java | 44 ++++-------------- .../hexcasting/lang/en_us.flatten.json5 | 2 +- .../hexcasting/textures/block/slate.png | Bin 0 -> 320 bytes .../architecture_extensions/slate_block.json | 2 +- Fabric/build.gradle | 4 +- .../hexcasting/fabric/FabricHexInitializer.kt | 1 - Neoforge/build.gradle | 4 ++ 9 files changed, 38 insertions(+), 46 deletions(-) create mode 100644 Common/src/main/resources/assets/hexcasting/textures/block/slate.png diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java index c37ed07f58..ec9a2d4a6c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java @@ -296,9 +296,7 @@ protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { if (this.displayMsg != null && this.displayItem != null) { tag.putString(TAG_ERROR_MSG, Component.Serializer.toJson(this.displayMsg, registries)); - var itemTag = new CompoundTag(); - this.displayItem.save(registries, itemTag); - tag.put(TAG_ERROR_DISPLAY, itemTag); + tag.put(TAG_ERROR_DISPLAY, this.displayItem.save(registries, new CompoundTag())); } if (this.pigment != null) tag.put(TAG_PIGMENT, FrozenPigment.CODEC.encodeStart(NbtOps.INSTANCE, pigment).getOrThrow()); @@ -319,7 +317,7 @@ protected void loadModData(CompoundTag tag, HolderLookup.Provider registries) { if (tag.contains(TAG_ERROR_MSG, Tag.TAG_STRING) && tag.contains(TAG_ERROR_DISPLAY, Tag.TAG_COMPOUND)) { var msg = Component.Serializer.fromJson(tag.getString(TAG_ERROR_MSG), registries); - var display = ItemStack.parseOptional(registries, tag); + var display = ItemStack.parseOptional(registries, tag.getCompound(TAG_ERROR_DISPLAY)); this.displayMsg = msg; this.displayItem = display; } else { @@ -376,7 +374,7 @@ protected int semitoneFromScale(int note) { // this is a good use of my time private static final int[] MAJOR_SCALE = {0, 2, 4, 5, 7, 9, 11, 12}; - private static final int[] MINOR_SCALE = {0, 2, 3, 5, 7, 8, 11, 12}; + private static final int[] MINOR_SCALE = {0, 2, 3, 5, 7, 8, 10, 12}; private static final int[] DORIAN_SCALE = {0, 2, 3, 5, 7, 9, 10, 12}; private static final int[] MIXOLYDIAN_SCALE = {0, 2, 4, 5, 7, 9, 10, 12}; private static final int[] BLUES_SCALE = {0, 3, 5, 6, 7, 10, 12}; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java index acb0c4ca4b..1bda8d2a48 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/blocks/circles/BlockEntitySlate.java @@ -3,8 +3,10 @@ import at.petrak.hexcasting.api.block.HexBlockEntity; import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.common.lib.HexBlockEntities; +import at.petrak.hexcasting.common.lib.HexDataComponents; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.nbt.Tag; @@ -21,6 +23,23 @@ public BlockEntitySlate(BlockPos pos, BlockState state) { super(HexBlockEntities.SLATE_TILE, pos, state); } + @Override + protected void collectImplicitComponents(DataComponentMap.Builder components) { + super.collectImplicitComponents(components); + if (this.pattern != null) { + components.set(HexDataComponents.PATTERN, this.pattern); + } + } + + @Override + protected void applyImplicitComponents(DataComponentInput componentInput) { + super.applyImplicitComponents(componentInput); + var pat = componentInput.get(HexDataComponents.PATTERN); + if (pat != null) { + this.pattern = pat; + } + } + @Override protected void saveModData(CompoundTag tag, HolderLookup.Provider registries) { if (this.pattern != null) { diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java index e01858f660..69d8a4078c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemSlate.java @@ -9,6 +9,7 @@ import at.petrak.hexcasting.api.utils.NBTHelper; import at.petrak.hexcasting.client.gui.PatternTooltipComponent; import at.petrak.hexcasting.common.blocks.circles.BlockEntitySlate; +import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.hex.HexIotaTypes; import at.petrak.hexcasting.common.misc.PatternTooltip; import at.petrak.hexcasting.interop.inline.InlinePatternData; @@ -49,13 +50,7 @@ public Component getName(ItemStack pStack) { } public static Optional getPattern(ItemStack stack){ - var bet = stack.get(DataComponents.BLOCK_ENTITY_DATA); - - if (bet != null && bet.contains(BlockEntitySlate.TAG_PATTERN)) { - var pattern = bet.read(HexPattern.CODEC.fieldOf(BlockEntitySlate.TAG_PATTERN)).result().orElse(null); - return Optional.ofNullable(pattern); - } - return Optional.empty(); + return Optional.ofNullable(stack.get(HexDataComponents.PATTERN)); } public static boolean hasPattern(ItemStack stack) { @@ -65,7 +60,7 @@ public static boolean hasPattern(ItemStack stack) { @SoftImplement("IForgeItem") public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) { if (!hasPattern(stack)) { - stack.remove(DataComponents.BLOCK_ENTITY_DATA); + stack.remove(HexDataComponents.PATTERN); } return false; } @@ -73,22 +68,13 @@ public boolean onEntityItemUpdate(ItemStack stack, ItemEntity entity) { @Override public void inventoryTick(ItemStack pStack, Level pLevel, Entity pEntity, int pSlotId, boolean pIsSelected) { if (!hasPattern(pStack)) { - pStack.remove(DataComponents.BLOCK_ENTITY_DATA); + pStack.remove(HexDataComponents.PATTERN); } } @Override public @Nullable Iota readIota(ItemStack stack) { - var bet = stack.get(DataComponents.BLOCK_ENTITY_DATA);; - - if (bet == null || !bet.contains(BlockEntitySlate.TAG_PATTERN)) { - return null; - } - - return bet.read(HexPattern.CODEC.fieldOf(BlockEntitySlate.TAG_PATTERN)) - .result() - .map(PatternIota::new) - .orElse(null); + return getPattern(stack).map(PatternIota::new).orElse(null); } @Override @@ -103,25 +89,11 @@ public boolean canWrite(ItemStack stack, Iota datum) { @Override public void writeDatum(ItemStack stack, Iota datum) { - if (this.canWrite(stack, datum)) { + if(this.canWrite(stack, datum)) { if (datum == null) { - var beData = stack.get(DataComponents.BLOCK_ENTITY_DATA); - beData.update(tag -> { - tag.remove(BlockEntitySlate.TAG_PATTERN); - }); - - if(beData.isEmpty()) - stack.remove(DataComponents.BLOCK_ENTITY_DATA); + stack.remove(HexDataComponents.PATTERN); } else if (datum instanceof PatternIota pat) { - stack.update(DataComponents.BLOCK_ENTITY_DATA, CustomData.of(new CompoundTag()), data -> { - data.update(tag -> - tag.put(BlockEntitySlate.TAG_PATTERN, HexPattern.CODEC - .encodeStart(NbtOps.INSTANCE, pat.getPattern()) - .getOrThrow() - ) - ); - return data; - }); + stack.set(HexDataComponents.PATTERN, pat.getPattern()); } } } diff --git a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 index 86c043ce36..f433d2925f 100644 --- a/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 +++ b/Common/src/main/resources/assets/hexcasting/lang/en_us.flatten.json5 @@ -141,7 +141,7 @@ akashic_: { record: "Akashic Record", bookshelf: "Akashic Bookshelf", - connector: "Akashic Ligature", + ligature: "Akashic Ligature", }, slate: { diff --git a/Common/src/main/resources/assets/hexcasting/textures/block/slate.png b/Common/src/main/resources/assets/hexcasting/textures/block/slate.png new file mode 100644 index 0000000000000000000000000000000000000000..db79150b59dc3d3291c534594210d9cdafa4952d GIT binary patch literal 320 zcmV-G0l)rPx#`bk7VR5*>5QZWv~Fbq6UCyJ^tRH{&U4o_g^^Fk6O2LQn1^+aep{re{SHHuQ4 znH8LwLCcJ>A29Yqxk6^v$(QpP05HX)I*S2mD>DMr=9 zGm#K*#UL{m#h!^5v}oY%vrG~ZGBd`0sN7H+MPVtn0$L5M4$45lmPsPQ6r+NL&8CQA zB`tH|yLCo1sP4e8;iqf~STK-#x8SXFwt`m-Y{(k+?`xYxgm+Hx;d5&>0PqDi$-+Dq SMf(^40000 Date: Tue, 16 Dec 2025 09:18:07 -0600 Subject: [PATCH 70/81] * Added handlers to S2C Payloads --- .../hexcasting/common/msgs/MsgBeepS2C.java | 31 +++++---- .../hexcasting/common/msgs/MsgBlinkS2C.java | 16 +++-- .../common/msgs/MsgCastParticleS2C.java | 69 ++++++++++--------- .../msgs/MsgClearSpiralPatternsS2C.java | 23 ++++--- .../common/msgs/MsgNewSpellPatternS2C.java | 31 +++++---- .../common/msgs/MsgNewSpiralPatternsS2C.java | 27 +++++--- .../common/msgs/MsgNewWallScrollS2C.java | 29 +++++--- .../common/msgs/MsgOpenSpellGuiS2C.java | 21 ++++-- .../msgs/MsgRecalcWallScrollDisplayS2C.java | 25 ++++--- 9 files changed, 166 insertions(+), 106 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java index 29e2f4d431..da658ebf5d 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBeepS2C.java @@ -30,18 +30,25 @@ public CustomPacketPayload.Type type() { return TYPE; } - public static void handle(MsgBeepS2C msg) { - Minecraft.getInstance().execute(() -> { - var minecraft = Minecraft.getInstance(); - var world = minecraft.level; - if (world != null) { - float pitch = (float) Math.pow(2, (msg.note() - 12) / 12.0); - world.playLocalSound(msg.target().x, msg.target().y, msg.target().z, - msg.instrument().getSoundEvent().value(), SoundSource.PLAYERS, 3, pitch, false); - world.addParticle(ParticleTypes.NOTE, msg.target().x, msg.target().y + 0.2, msg.target().z, - msg.note() / 24.0, 0, 0); - } - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgBeepS2C msg) { + Minecraft.getInstance().execute(() -> { + var minecraft = Minecraft.getInstance(); + var world = minecraft.level; + if (world != null) { + float pitch = (float) Math.pow(2, (msg.note() - 12) / 12.0); + world.playLocalSound(msg.target().x, msg.target().y, msg.target().z, + msg.instrument().getSoundEvent().value(), SoundSource.PLAYERS, 3, pitch, false); + world.addParticle(ParticleTypes.NOTE, msg.target().x, msg.target().y + 0.2, msg.target().z, + msg.note() / 24.0, 0, 0); + } + }); + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java index a572291628..5d08f8483b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgBlinkS2C.java @@ -31,14 +31,18 @@ public CustomPacketPayload.Type type() { return TYPE; } - public static void handle(MsgBlinkS2C self) { - Minecraft.getInstance().execute(new Runnable() { - @Override - public void run() { + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgBlinkS2C self) { + Minecraft.getInstance().execute(() -> { var player = Minecraft.getInstance().player; player.setPos(player.position().add(self.addedPosition())); - } - }); + }); + } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java index 1b64420ffe..a84ac38e63 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgCastParticleS2C.java @@ -45,40 +45,47 @@ private static Vec3 randomInCircle(double maxTh) { return new Vec3(Math.sqrt(1.0 - z * z) * Math.cos(th), Math.sqrt(1.0 - z * z) * Math.sin(th), z); } - public static void handle(MsgCastParticleS2C msg) { - Minecraft.getInstance().execute(() -> { - var colProvider = msg.colorizer().getColorProvider(); - for (int i = 0; i < msg.spray().getCount(); i++) { - // For the colors, pick any random time to get a mix of colors + public void handle() { + Handler.handle(this); + } - var offset = randomInCircle(Mth.TWO_PI).normalize() - .scale(RANDOM.nextFloat() * msg.spray().getFuzziness() / 2); - var pos = msg.spray().getPos().add(offset); + public static final class Handler { - var phi = Math.acos(1.0 - RANDOM.nextDouble() * (1.0 - Math.cos(msg.spray().getSpread()))); - var theta = Math.PI * 2.0 * RANDOM.nextDouble(); - var v = msg.spray().getVel().normalize(); - // pick any old vector to get a vector normal to v with - Vec3 k; - if (v.x == 0.0 && v.y == 0.0) { - // oops, pick a *different* normal - k = new Vec3(1.0, 0.0, 0.0); - } else { - k = v.cross(new Vec3(0.0, 0.0, 1.0)); - } - var velUnlen = v.scale(Math.cos(phi)) - .add(k.scale(Math.sin(phi) * Math.cos(theta))) - .add(v.cross(k).scale(Math.sin(phi) * Math.sin(theta))); - var vel = velUnlen.scale(msg.spray().getVel().length() / 20); + public static void handle(MsgCastParticleS2C msg) { + Minecraft.getInstance().execute(() -> { + var colProvider = msg.colorizer().getColorProvider(); + for (int i = 0; i < msg.spray().getCount(); i++) { + // For the colors, pick any random time to get a mix of colors + + var offset = randomInCircle(Mth.TWO_PI).normalize() + .scale(RANDOM.nextFloat() * msg.spray().getFuzziness() / 2); + var pos = msg.spray().getPos().add(offset); - var color = colProvider.getColor(ClientTickCounter.getTotal(), velUnlen); + var phi = Math.acos(1.0 - RANDOM.nextDouble() * (1.0 - Math.cos(msg.spray().getSpread()))); + var theta = Math.PI * 2.0 * RANDOM.nextDouble(); + var v = msg.spray().getVel().normalize(); + // pick any old vector to get a vector normal to v with + Vec3 k; + if (v.x == 0.0 && v.y == 0.0) { + // oops, pick a *different* normal + k = new Vec3(1.0, 0.0, 0.0); + } else { + k = v.cross(new Vec3(0.0, 0.0, 1.0)); + } + var velUnlen = v.scale(Math.cos(phi)) + .add(k.scale(Math.sin(phi) * Math.cos(theta))) + .add(v.cross(k).scale(Math.sin(phi) * Math.sin(theta))); + var vel = velUnlen.scale(msg.spray().getVel().length() / 20); - Minecraft.getInstance().level.addParticle( - new ConjureParticleOptions(color), - pos.x, pos.y, pos.z, - vel.x, vel.y, vel.z - ); - } - }); + var color = colProvider.getColor(ClientTickCounter.getTotal(), velUnlen); + + Minecraft.getInstance().level.addParticle( + new ConjureParticleOptions(color), + pos.x, pos.y, pos.z, + vel.x, vel.y, vel.z + ); + } + }); + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java index ef4d539a6e..b0a74a52c4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgClearSpiralPatternsS2C.java @@ -30,13 +30,20 @@ public CustomPacketPayload.Type type() { return TYPE; } - public static void handle(MsgClearSpiralPatternsS2C self) { - Minecraft.getInstance().execute(() -> { - var mc = Minecraft.getInstance(); - assert mc.level != null; - var player = mc.level.getPlayerByUUID(self.playerUUID); - var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); - stack.slowClear(); - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgClearSpiralPatternsS2C self) { + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + assert mc.level != null; + var player = mc.level.getPlayerByUUID(self.playerUUID); + var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); + stack.slowClear(); + }); + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java index bb0af803ac..1f4501e9eb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpellPatternS2C.java @@ -38,17 +38,24 @@ public CustomPacketPayload.Type type() { return TYPE; } - public static void handle(MsgNewSpellPatternS2C self) { - Minecraft.getInstance().execute(() -> { - var mc = Minecraft.getInstance(); - if (self.info().isStackClear()) { - // don't pay attention to the screen, so it also stops when we die - mc.getSoundManager().stop(HexSounds.CASTING_AMBIANCE.getLocation(), null); - } - var screen = Minecraft.getInstance().screen; - if (screen instanceof GuiSpellcasting spellGui) { - spellGui.recvServerUpdate(self.info(), self.index()); - } - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgNewSpellPatternS2C self) { + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + if (self.info().isStackClear()) { + // don't pay attention to the screen, so it also stops when we die + mc.getSoundManager().stop(HexSounds.CASTING_AMBIANCE.getLocation(), null); + } + var screen = Minecraft.getInstance().screen; + if (screen instanceof GuiSpellcasting spellGui) { + spellGui.recvServerUpdate(self.info(), self.index()); + } + }); + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java index 9b1a844353..0a24254e46 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewSpiralPatternsS2C.java @@ -34,15 +34,22 @@ public CustomPacketPayload.Type type() { return TYPE; } - public static void handle(MsgNewSpiralPatternsS2C self) { - Minecraft.getInstance().execute(() -> { - var mc = Minecraft.getInstance(); - assert mc.level != null; - var player = mc.level.getPlayerByUUID(self.playerUUID); - var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); - - for (var pattern : self.patterns) - stack.addPattern(pattern, self.lifetime); - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgNewSpiralPatternsS2C self) { + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + assert mc.level != null; + var player = mc.level.getPlayerByUUID(self.playerUUID); + var stack = IClientXplatAbstractions.INSTANCE.getClientCastingStack(player); + + for (var pattern : self.patterns) + stack.addPattern(pattern, self.lifetime); + }); + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java index d7d367315a..a87ffc304c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgNewWallScrollS2C.java @@ -40,17 +40,24 @@ public CustomPacketPayload.Type type() { return TYPE; } - public static void handle(MsgNewWallScrollS2C self) { - Minecraft.getInstance().execute(() -> { - var player = Minecraft.getInstance().player; - if (player != null) { - player.connection.handleAddEntity(self.inner); - var e = player.level().getEntity(self.inner.getId()); - if (e instanceof EntityWallScroll scroll) { - scroll.readSpawnData(self.pos, self.dir, self.scrollItem, self.showsStrokeOrder, - self.blockSize); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgNewWallScrollS2C self) { + Minecraft.getInstance().execute(() -> { + var player = Minecraft.getInstance().player; + if (player != null) { + player.connection.handleAddEntity(self.inner); + var e = player.level().getEntity(self.inner.getId()); + if (e instanceof EntityWallScroll scroll) { + scroll.readSpawnData(self.pos, self.dir, self.scrollItem, self.showsStrokeOrder, + self.blockSize); + } } - } - }); + }); + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java index f50ed7d26d..25d178cf28 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgOpenSpellGuiS2C.java @@ -56,12 +56,19 @@ public Type type() { return TYPE; } - public static void handle(MsgOpenSpellGuiS2C msg) { - Minecraft.getInstance().execute(() -> { - var mc = Minecraft.getInstance(); - mc.setScreen( - new GuiSpellcasting(msg.hand(), msg.patterns(), msg.stack, msg.ravenmind, - msg.parenCount)); - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgOpenSpellGuiS2C msg) { + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + mc.setScreen( + new GuiSpellcasting(msg.hand(), msg.patterns(), msg.stack, msg.ravenmind, + msg.parenCount)); + }); + } } } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java index 44ee8f9b21..7b1b8c4e50 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/msgs/MsgRecalcWallScrollDisplayS2C.java @@ -34,14 +34,21 @@ public CustomPacketPayload.Type type() { return TYPE; } - public static void handle(MsgRecalcWallScrollDisplayS2C msg) { - Minecraft.getInstance().execute(() -> { - var mc = Minecraft.getInstance(); - var entity = mc.level.getEntity(msg.entityId); - if (entity instanceof EntityWallScroll scroll - && scroll.getShowsStrokeOrder() != msg.showStrokeOrder) { - scroll.recalculateDisplay(); - } - }); + public void handle() { + Handler.handle(this); + } + + public static final class Handler { + + public static void handle(MsgRecalcWallScrollDisplayS2C msg) { + Minecraft.getInstance().execute(() -> { + var mc = Minecraft.getInstance(); + var entity = mc.level.getEntity(msg.entityId); + if (entity instanceof EntityWallScroll scroll + && scroll.getShowsStrokeOrder() != msg.showStrokeOrder) { + scroll.recalculateDisplay(); + } + }); + } } } From b64763f296a4a00ff07469bc8827aed63b698525 Mon Sep 17 00:00:00 2001 From: Noelle Date: Tue, 16 Dec 2025 13:55:28 -0600 Subject: [PATCH 71/81] Duplicates strategy stuff --- Fabric/build.gradle | 3 +++ Neoforge/build.gradle | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 99dffb2982..48a1becf4a 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -203,5 +203,8 @@ remapJar { tasks.named('processResources') { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } +tasks.named('sourcesJar') { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} jar.finalizedBy(remapJar) \ No newline at end of file diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 492617c542..94ad005b97 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -179,6 +179,10 @@ tasks.named('processResources') { duplicatesStrategy = DuplicatesStrategy.EXCLUDE } +tasks.named('sourcesJar') { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE +} + shadowJar { configurations = [project.configurations.shadowBundle] archiveClassifier = 'dev-shadow' From b58bec6382958a0721061f52ab1a1acbf6604be1 Mon Sep 17 00:00:00 2001 From: Noelle Date: Wed, 17 Dec 2025 10:59:30 -0600 Subject: [PATCH 72/81] * Adjusted FabricRegister to work correctly, fixes attribute errors on Fabric; might overhaul the registry with it. * Registered ItemApiLookups (ParticleSprays function on Fabric!!!) * Readded BrainsweepeeIngredient.getSomeKindOfReasonableIDForEmi(), EMI recipes work for the most part * Fixed Fabric Creative Tabs (mostly) --- .../common/lib/HexCreativeTabs.java | 7 ++ .../brainsweep/BrainsweepeeIngredient.java | 2 + .../brainsweep/BrainsweepeeIngredients.java | 5 + .../brainsweep/EntityTagIngredient.java | 8 ++ .../brainsweep/EntityTypeIngredient.java | 8 ++ .../brainsweep/VillagerIngredient.java | 25 +++++ Fabric/build.gradle | 4 +- .../hexcasting/fabric/FabricHexInitializer.kt | 94 +++++++++++++++++-- .../fabric/cc/HexCardinalComponents.java | 6 +- .../interop/emi/BrainsweepeeEmiStack.java | 4 +- .../fabric/mixin/FabricPlayerMixin.java | 30 ------ .../fabric/xplat/FabricRegister.java | 40 ++++---- .../fabric/xplat/FabricXplatImpl.java | 4 +- .../main/resources/fabricasting.mixins.json | 1 - gradle.properties | 2 +- 15 files changed, 169 insertions(+), 71 deletions(-) delete mode 100644 Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java index dc5bc430fc..9feb903d56 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexCreativeTabs.java @@ -1,6 +1,8 @@ package at.petrak.hexcasting.common.lib; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; @@ -10,6 +12,7 @@ import java.util.Map; import java.util.function.BiConsumer; +import static at.petrak.hexcasting.api.HexAPI.MOD_ID; import static at.petrak.hexcasting.api.HexAPI.modLoc; public class HexCreativeTabs { @@ -24,9 +27,13 @@ public static void registerCreativeTabs(BiConsumer new ItemStack(HexItems.SPELLBOOK))); + public static final ResourceKey HEX_KEY = ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), modLoc("hexcasting")); + public static final CreativeModeTab SCROLLS = register("scrolls", CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) .icon(() -> new ItemStack(HexItems.SCROLL_LARGE))); + public static final ResourceKey SCROLLS_KEY = ResourceKey.create(BuiltInRegistries.CREATIVE_MODE_TAB.key(), modLoc("scrolls")); + private static CreativeModeTab register(String name, CreativeModeTab.Builder tabBuilder) { var tab = tabBuilder.title(Component.translatable("itemGroup.hexcasting." + name)).build(); var old = TABS.put(modLoc(name), tab); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java index 16cc965a18..950e18a03e 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredient.java @@ -30,6 +30,8 @@ public abstract class BrainsweepeeIngredient { public abstract List getTooltip(boolean advanced); + public abstract String getSomeKindOfReasonableIDForEmi(); + /** * For the benefit of showing to the client, return an example of the entity. *

diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java index 7ad77853aa..054619ee7f 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/BrainsweepeeIngredients.java @@ -69,6 +69,11 @@ public List getTooltip(boolean advanced) { return List.of(); } + @Override + public String getSomeKindOfReasonableIDForEmi() { + return "none"; + } + @Override public @Nullable Entity exampleEntity(Level level) { return null; diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java index 978b0d4cce..841cb7466a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTagIngredient.java @@ -77,6 +77,14 @@ public List getTooltip(boolean advanced) { return out; } + @Override + public String getSomeKindOfReasonableIDForEmi() { + var resloc = this.entityTypeTag.location(); + return resloc.getNamespace() + + "//" + + resloc.getPath(); + } + @Override public Entity exampleEntity(Level level) { var someEntityTys = BuiltInRegistries.ENTITY_TYPE.getTagOrEmpty(this.entityTypeTag).iterator(); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java index 68383eda31..7ce69c45eb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/EntityTypeIngredient.java @@ -55,6 +55,14 @@ public List getTooltip(boolean advanced) { ); } + @Override + public String getSomeKindOfReasonableIDForEmi() { + var resloc = BuiltInRegistries.ENTITY_TYPE.getKey(this.entityType); + return resloc.getNamespace() + + "//" + + resloc.getPath(); + } + @Override public Entity exampleEntity(Level level) { return this.entityType.create(level); diff --git a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java index ab91129415..506982407a 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/recipe/ingredient/brainsweep/VillagerIngredient.java @@ -130,6 +130,31 @@ public List getTooltip(boolean advanced) { return tooltip; } + @Override + public String getSomeKindOfReasonableIDForEmi() { + var bob = new StringBuilder(); + if (this.profession != null) { + var profLoc = BuiltInRegistries.VILLAGER_PROFESSION.getKey(this.profession); + bob.append(profLoc.getNamespace()) + .append("//") + .append(profLoc.getPath()); + } else { + bob.append("null"); + } + bob.append("_"); + if (this.biome != null) { + var biomeLoc = BuiltInRegistries.VILLAGER_TYPE.getKey(this.biome); + bob.append(biomeLoc.getNamespace()) + .append("//") + .append(biomeLoc.getPath()); + } else { + bob.append("null"); + } + + bob.append(this.minLevel); + return bob.toString(); + } + @Override public Component getName() { MutableComponent component = Component.literal(""); diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 48a1becf4a..af691233b7 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -49,7 +49,7 @@ loom { } configureEach { - runDir "run" + runDir "Fabric/run" ideConfigGenerated(true) } } @@ -121,7 +121,7 @@ dependencies { shadowBundle project(path: ':Common', configuration: 'transformProductionFabric') // === MANDATORY DEPS === - modCompileOnly("at.petra-k:paucal:$paucalVersion+$minecraftVersion-common") + modCompileOnly("at.petra-k:paucal:$paucalVersion+$minecraftVersion-fabric") // dear mod devs, don't put the platform in the middle of your version code modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-FABRIC-SNAPSHOT" modImplementation "com.samsthenerd.inline:inline-fabric:$minecraftVersion-$inlineVersion" diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index 9eb504282e..0bcc874d33 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -1,13 +1,19 @@ package at.petrak.hexcasting.fabric -import at.petrak.hexcasting.api.HexAPI import at.petrak.hexcasting.api.HexAPI.modLoc import at.petrak.hexcasting.api.addldata.ADMediaHolder import at.petrak.hexcasting.api.advancements.HexAdvancementTriggers +import at.petrak.hexcasting.api.casting.ActionRegistryEntry import at.petrak.hexcasting.api.casting.iota.DoubleIota +import at.petrak.hexcasting.api.item.HexHolderItem +import at.petrak.hexcasting.api.item.IotaHolderItem +import at.petrak.hexcasting.api.item.PigmentItem +import at.petrak.hexcasting.api.item.VariantItem import at.petrak.hexcasting.api.misc.MediaConstants import at.petrak.hexcasting.api.mod.HexConfig import at.petrak.hexcasting.api.mod.HexStatistics +import at.petrak.hexcasting.api.mod.HexTags +import at.petrak.hexcasting.api.utils.isOfTag import at.petrak.hexcasting.common.blocks.behavior.HexComposting import at.petrak.hexcasting.common.blocks.behavior.HexStrippables import at.petrak.hexcasting.common.casting.PatternRegistryManifest @@ -16,6 +22,7 @@ import at.petrak.hexcasting.common.casting.actions.spells.great.OpAltiora import at.petrak.hexcasting.common.command.PatternResKeyArgument import at.petrak.hexcasting.common.entities.HexEntities import at.petrak.hexcasting.common.items.ItemJewelerHammer +import at.petrak.hexcasting.common.items.storage.ItemScroll import at.petrak.hexcasting.common.lib.* import at.petrak.hexcasting.common.lib.hex.* import at.petrak.hexcasting.common.misc.AkashicTreeGrower @@ -26,13 +33,19 @@ import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry import at.petrak.hexcasting.common.recipe.ingredient.brainsweep.BrainsweepeeIngredients import at.petrak.hexcasting.common.recipe.ingredient.state.StateIngredients import at.petrak.hexcasting.fabric.cc.HexCardinalComponents +import at.petrak.hexcasting.fabric.cc.adimpl.CCHexHolder +import at.petrak.hexcasting.fabric.cc.adimpl.CCIotaHolder +import at.petrak.hexcasting.fabric.cc.adimpl.CCItemIotaHolder import at.petrak.hexcasting.fabric.cc.adimpl.CCMediaHolder +import at.petrak.hexcasting.fabric.cc.adimpl.CCPigment +import at.petrak.hexcasting.fabric.cc.adimpl.CCVariantItem import at.petrak.hexcasting.fabric.event.VillagerConversionCallback import at.petrak.hexcasting.fabric.loot.FabricHexLootModJankery import at.petrak.hexcasting.fabric.network.FabricPacketHandler import at.petrak.hexcasting.fabric.recipe.FabricModConditionalIngredient import at.petrak.hexcasting.fabric.recipe.FabricUnsealedIngredient import at.petrak.hexcasting.fabric.storage.FabricImpetusStorage +import at.petrak.hexcasting.fabric.xplat.FabricXplatImpl import at.petrak.hexcasting.interop.HexInterop import at.petrak.hexcasting.xplat.IXplatAbstractions import net.fabricmc.api.ModInitializer @@ -46,20 +59,26 @@ import net.fabricmc.fabric.api.event.player.UseEntityCallback import net.fabricmc.fabric.api.item.v1.DefaultItemComponentEvents import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents import net.fabricmc.fabric.api.loot.v3.LootTableEvents +import net.fabricmc.fabric.api.`object`.builder.v1.entity.FabricDefaultAttributeRegistry import net.fabricmc.fabric.api.recipe.v1.ingredient.CustomIngredientSerializer import net.fabricmc.fabric.api.registry.FlammableBlockRegistry import net.minecraft.commands.synchronization.SingletonArgumentInfo import net.minecraft.core.Registry import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation import net.minecraft.world.InteractionResult +import net.minecraft.world.entity.EntityType import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.state.properties.BlockSetType import net.minecraft.world.level.storage.loot.functions.SetItemCountFunction import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator import java.util.function.BiConsumer +import java.util.function.Function object FabricHexInitializer : ModInitializer { lateinit var CONFIG: FabricHexConfig @@ -132,30 +151,56 @@ object FabricHexInitializer : ModInitializer { } } - ItemGroupEvents.MODIFY_ENTRIES_ALL.register { tab, entries -> - HexBlocks.registerBlockCreativeTab(entries::accept, tab) - HexItems.registerItemCreativeTab(entries, tab) + ItemGroupEvents.modifyEntriesEvent(HexCreativeTabs.SCROLLS_KEY).register { r -> + val keyList = ArrayList?>() + val regi = FabricXplatImpl.INSTANCE.getActionRegistry() + for (key in regi.registryKeySet()) if (isOfTag( + regi, + key, + HexTags.Actions.PER_WORLD_PATTERN + ) + ) keyList.add(key) + keyList.sortWith(Comparator.comparing?, ResourceLocation?>(Function { obj: ResourceKey? -> obj!!.location() })) + for (key in keyList) { + r.accept( + ItemScroll.withPerWorldPattern( + ItemStack(HexItems.SCROLL_LARGE), + key + ) + ) + } + } + ItemGroupEvents.modifyEntriesEvent(HexCreativeTabs.HEX_KEY).register { r -> + for (item in this.itemsToAddToCreativeTab) { + r.accept(item) + } } } private fun initRegistries() { - fabricOnlyRegistration() - HexBlockSetTypes.registerBlocks(BlockSetType::register) HexCreativeTabs.registerCreativeTabs(bind(BuiltInRegistries.CREATIVE_MODE_TAB)) HexSounds.registerSounds(bind(BuiltInRegistries.SOUND_EVENT)) HexBlocks.registerBlocks(bind(BuiltInRegistries.BLOCK)) - HexBlocks.registerBlockItems(bind(BuiltInRegistries.ITEM)) + HexBlocks.registerBlockItems(boundForItem) HexBlockEntities.registerTiles(bind(BuiltInRegistries.BLOCK_ENTITY_TYPE)) - HexItems.registerItems(bind(BuiltInRegistries.ITEM)) + HexItems.registerItems(boundForItem) // Registry.register(IngredientDeserializer.REGISTRY, FabricModConditionalIngredient.ID, FabricModConditionalIngredient.Deserializer.INSTANCE) CustomIngredientSerializer.register(FabricUnsealedIngredient.Serializer.INSTANCE); CustomIngredientSerializer.register(FabricModConditionalIngredient.Serializer.INSTANCE); HexEntities.registerEntities(bind(BuiltInRegistries.ENTITY_TYPE)) HexAttributes.register() + FabricDefaultAttributeRegistry.register(EntityType.PLAYER, + Player.createAttributes() + .add(HexAttributes.GRID_ZOOM) + .add(HexAttributes.SCRY_SIGHT) + .add(HexAttributes.FEEBLE_MIND) + .add(HexAttributes.AMBIT_RADIUS) + .add(HexAttributes.MEDIA_CONSUMPTION_MODIFIER) + .add(HexAttributes.SENTINEL_RADIUS)) HexMobEffects.register(bind(BuiltInRegistries.MOB_EFFECT)) HexPotions.registerPotions(bind(BuiltInRegistries.POTION)) HexDataComponents.registerDataComponents(bind(BuiltInRegistries.DATA_COMPONENT_TYPE)) @@ -186,6 +231,8 @@ object FabricHexInitializer : ModInitializer { butYouCouldBeFire() HexStatistics.register() + + fabricOnlyRegistration() } // sorry lex (not sorry) @@ -196,6 +243,29 @@ object FabricHexInitializer : ModInitializer { }) } + for (item in BuiltInRegistries.ITEM) { + if (item is PigmentItem) { + HexCardinalComponents.PIGMENT_ITEM_LOOKUP.registerForItems({ + item, _ -> CCPigment.ItemBased(item); + }, item) + } + if (item is IotaHolderItem) { + HexCardinalComponents.IOTA_HOLDER_LOOKUP.registerForItems({ + item, _ -> CCItemIotaHolder.ItemBased(item); + }, item) + } + if (item is HexHolderItem) { + HexCardinalComponents.HEX_HOLDER_LOOKUP.registerForItems({ + item, _ -> CCHexHolder.ItemBased(item); + }, item) + } + if (item is VariantItem) { + HexCardinalComponents.VARIANT_ITEM_LOOKUP.registerForItems({ + item, _ -> CCVariantItem.ItemBased(item); + }, item) + } + } + HexCardinalComponents.MEDIA_HOLDER_LOOKUP.registerForItems({ stack, _ -> CCMediaHolder.Static({ HexConfig.common().dustMediaAmount() }, ADMediaHolder.AMETHYST_DUST_PRIORITY, stack) }, HexItems.AMETHYST_DUST) @@ -217,6 +287,14 @@ object FabricHexInitializer : ModInitializer { }, HexBlocks.QUENCHED_ALLAY.asItem()) } + private val itemsToAddToCreativeTab : MutableSet = mutableSetOf() + + private val boundForItem : BiConsumer = BiConsumer { + t, id -> this.itemsToAddToCreativeTab.add(t) + Registry.register(BuiltInRegistries.ITEM, id, t) + } + + private fun butYouCouldBeFire() { val flameOn = FlammableBlockRegistry.getDefaultInstance() for (log in listOf( diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java index 89489990ab..27f647d864 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/cc/HexCardinalComponents.java @@ -58,13 +58,13 @@ public class HexCardinalComponents implements EntityComponentInitializer, ItemCo public static final ComponentKey VARIANT_ITEM = ComponentRegistry.getOrCreate(modLoc("variant_item"), CCVariantItem.class); - public static final ItemApiLookup MEDIA_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("media_holder"), ADMediaHolder.class, Void.class); + public static final ItemApiLookup MEDIA_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("media_holder_item"), ADMediaHolder.class, Void.class); - public static final ItemApiLookup IOTA_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("iota_holder"), ADIotaHolder.class, Void.class); + public static final ItemApiLookup IOTA_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("iota_holder_item"), ADIotaHolder.class, Void.class); public static final ItemApiLookup PIGMENT_ITEM_LOOKUP = ItemApiLookup.get(modLoc("pigment_item"), ADPigment.class, Void.class); - public static final ItemApiLookup HEX_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("hex_holder"), ADHexHolder.class, Void.class); + public static final ItemApiLookup HEX_HOLDER_LOOKUP = ItemApiLookup.get(modLoc("hex_holder_item"), ADHexHolder.class, Void.class); public static final ItemApiLookup VARIANT_ITEM_LOOKUP = ItemApiLookup.get(modLoc("variant_item"), ADVariantItem.class, Void.class); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/BrainsweepeeEmiStack.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/BrainsweepeeEmiStack.java index ad0cb9145f..ef5a1d6124 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/BrainsweepeeEmiStack.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/interop/emi/BrainsweepeeEmiStack.java @@ -26,9 +26,7 @@ public class BrainsweepeeEmiStack extends EmiStack { public BrainsweepeeEmiStack(BrainsweepeeIngredient ingr) { this.ingredient = ingr; - - var bareId = this.ingredient.toString(); - this.id = modLoc(bareId); + this.id = modLoc(this.ingredient.getSomeKindOfReasonableIDForEmi()); } @Override diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java deleted file mode 100644 index 45a22117b7..0000000000 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/mixin/FabricPlayerMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package at.petrak.hexcasting.fabric.mixin; - -import at.petrak.hexcasting.common.lib.HexAttributes; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.ai.attributes.AttributeSupplier; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(Player.class) -public abstract class FabricPlayerMixin extends LivingEntity { - protected FabricPlayerMixin(EntityType entityType, Level level) { - super(entityType, level); - } - - @Inject(at = @At("RETURN"), method = "createAttributes") - private static void hex$addAttributes(CallbackInfoReturnable cir) { - var out = cir.getReturnValue(); - out.add(HexAttributes.GRID_ZOOM); - out.add(HexAttributes.SCRY_SIGHT); - out.add(HexAttributes.FEEBLE_MIND); - out.add(HexAttributes.MEDIA_CONSUMPTION_MODIFIER); - out.add(HexAttributes.AMBIT_RADIUS); - out.add(HexAttributes.SENTINEL_RADIUS); - } -} diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java index a234928246..aa2acf1ab1 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricRegister.java @@ -5,6 +5,8 @@ import net.minecraft.core.Holder; import net.minecraft.core.MappedRegistry; import net.minecraft.core.RegistrationInfo; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; import java.util.HashMap; @@ -14,44 +16,40 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public class FabricRegister implements IXplatRegister { - private final MappedRegistry register; + private final Registry register; private final Map map; - public FabricRegister(MappedRegistry register) { - this.register = register; + @SuppressWarnings("unchecked") + public FabricRegister(ResourceKey> registryKey) { + this.register = (Registry) BuiltInRegistries.REGISTRY.get(registryKey.location()); this.map = new HashMap<>(); } - public FabricRegister(MappedRegistry register, Map map) { - this.register = register; + @SuppressWarnings("unchecked") + public FabricRegister(ResourceKey> registryKey, Map map) { + this.register = (Registry) BuiltInRegistries.REGISTRY.get(registryKey.location()); this.map = map; } + @Override public Supplier register(String id, Supplier provider) { - var key = ResourceKey.create( - register.key(), - modLoc(id) - ); - var value = provider.get(); - var info = RegistrationInfo.BUILT_IN; - register.register(key, value, info); - return provider; + T value = provider.get(); + Registry.register(register, modLoc(id), value); + return () -> value; } @Override public Holder registerHolder(String id, Supplier provider) { - map.put(id, provider.get()); - return register.wrapAsHolder(provider.get()); + T value = provider.get(); + map.put(id, value); + return register.wrapAsHolder(value); } @Override public void registerAll() { - map.forEach((string, provider) -> - register.register( - ResourceKey.create( - register.key(), modLoc(string) - ), provider, RegistrationInfo.BUILT_IN) - ); + map.forEach((string, value) -> + Registry.register(register, modLoc(string), value) + ); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java index dc8fc104bf..ea1f2efad2 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java @@ -278,7 +278,7 @@ public boolean isPigment(ItemStack stack) { @Override public ColorProvider getColorProvider(FrozenPigment pigment) { - var cc = HexCardinalComponents.PIGMENT.maybeGet(pigment.item()); + var cc = Optional.ofNullable(HexCardinalComponents.PIGMENT_ITEM_LOOKUP.find(pigment.item(), null)); return cc.map(col -> col.provideColor(pigment.owner())).orElse(ColorProvider.MISSING); } @@ -525,7 +525,7 @@ public boolean isPlacingAllowed(ServerLevel world, BlockPos pos, ItemStack block @Override public IXplatRegister createRegistar(ResourceKey> registryKey) { - return new FabricRegister<>(FabricRegistryBuilder.createSimple(registryKey).buildAndRegister()); + return new FabricRegister<>(registryKey); } private static PehkuiInterop.ApiAbstraction PEHKUI_API = null; diff --git a/Fabric/src/main/resources/fabricasting.mixins.json b/Fabric/src/main/resources/fabricasting.mixins.json index 6c35fa8fb9..2a51dc2e0c 100644 --- a/Fabric/src/main/resources/fabricasting.mixins.json +++ b/Fabric/src/main/resources/fabricasting.mixins.json @@ -12,7 +12,6 @@ "FabricItemEntityMixin", "FabricLivingEntityMixin", "FabricMobMixin", - "FabricPlayerMixin", "FabricVillagerTurnIntoWitchMixin" ], "client": [ diff --git a/gradle.properties b/gradle.properties index 4ec28791ba..cce69bc225 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ fabric_loader_version=0.16.14 # this is the version published to modrinth/cf i swear # haha not anymore it's from mavenLocal -paucalVersion=0.7.1 +paucalVersion=0.7.1-pre-25 patchouliVersion=88 accessoriesVersion=1.1.0-beta.16+1.21.1 From 96e569ef593a703ab23a9c8c359e3989b798a5e1 Mon Sep 17 00:00:00 2001 From: Noelle Date: Fri, 19 Dec 2025 15:28:46 -0600 Subject: [PATCH 73/81] * Turned MobEffects into Holders. Might have to do this for other things. * Fixed Fabric interop naming. --- .../hexcasting/common/lib/HexMobEffects.java | 36 ++++++++----------- .../hexcasting/common/lib/HexPotions.java | 12 +++---- .../petrak/hexcasting/interop/HexInterop.java | 2 +- .../fabric/xplat/FabricClientXplatImpl.java | 2 +- .../fabric/xplat/FabricXplatImpl.java | 5 +-- .../hexcasting/forge/ForgeHexInitializer.java | 2 +- 6 files changed, 24 insertions(+), 35 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java index d9a3f6cf1b..f6be2e2757 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexMobEffects.java @@ -2,7 +2,10 @@ import at.petrak.hexcasting.api.HexAPI; import at.petrak.hexcasting.common.misc.HexMobEffect; +import at.petrak.hexcasting.xplat.IXplatAbstractions; +import at.petrak.hexcasting.xplat.IXplatRegister; import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; @@ -15,29 +18,18 @@ import static at.petrak.hexcasting.api.HexAPI.modLoc; public class HexMobEffects { - public static void register(BiConsumer r) { - for (var e : EFFECTS.entrySet()) { - r.accept(e.getValue(), e.getKey()); - } - } - - private static final Map EFFECTS = new LinkedHashMap<>(); - public static final MobEffect ENLARGE_GRID = make("enlarge_grid", - new HexMobEffect(MobEffectCategory.BENEFICIAL, 0xc875ff)) - .addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("enlarge_grid"), - 0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); - public static final MobEffect SHRINK_GRID = make("shrink_grid", - new HexMobEffect(MobEffectCategory.HARMFUL, 0xc0e660)) - .addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("shrink_grid"), - -0.2, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL); + private static final IXplatRegister REGISTER = IXplatAbstractions.INSTANCE + .createRegistar(Registries.MOB_EFFECT); - - private static T make(String id, T effect) { - var old = EFFECTS.put(modLoc(id), effect); - if (old != null) { - throw new IllegalArgumentException("Typo? Duplicate id " + id); - } - return effect; + public static void register() { + REGISTER.registerAll(); } + + public static final Holder ENLARGE_GRID = REGISTER.registerHolder("enlarge_grid", + () -> new HexMobEffect(MobEffectCategory.BENEFICIAL, 0xc875ff).addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("enlarge_grid"), + 0.25, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); + public static final Holder SHRINK_GRID = REGISTER.registerHolder("shrink_grid", + () -> new HexMobEffect(MobEffectCategory.HARMFUL, 0xc0e660).addAttributeModifier(HexAttributes.GRID_ZOOM, HexAPI.modLoc("shrink_grid"), + -0.2, AttributeModifier.Operation.ADD_MULTIPLIED_TOTAL)); } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java index 11ed7f7dcb..e9cad03dd4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/lib/HexPotions.java @@ -20,18 +20,18 @@ public class HexPotions { private static final Map POTIONS = new LinkedHashMap<>(); public static final Potion ENLARGE_GRID = make("enlarge_grid", - new Potion("enlarge_grid", new MobEffectInstance(Holder.direct(HexMobEffects.ENLARGE_GRID), 3600))); + new Potion("enlarge_grid", new MobEffectInstance(HexMobEffects.ENLARGE_GRID, 3600))); public static final Potion ENLARGE_GRID_LONG = make("enlarge_grid_long", - new Potion("enlarge_grid_long", new MobEffectInstance(Holder.direct(HexMobEffects.ENLARGE_GRID), 9600))); + new Potion("enlarge_grid_long", new MobEffectInstance(HexMobEffects.ENLARGE_GRID, 9600))); public static final Potion ENLARGE_GRID_STRONG = make("enlarge_grid_strong", - new Potion("enlarge_grid_strong", new MobEffectInstance(Holder.direct(HexMobEffects.ENLARGE_GRID), 1800, 1))); + new Potion("enlarge_grid_strong", new MobEffectInstance(HexMobEffects.ENLARGE_GRID, 1800, 1))); public static final Potion SHRINK_GRID = make("shrink_grid", - new Potion("shrink_grid", new MobEffectInstance(Holder.direct(HexMobEffects.SHRINK_GRID), 3600))); + new Potion("shrink_grid", new MobEffectInstance(HexMobEffects.SHRINK_GRID, 3600))); public static final Potion SHRINK_GRID_LONG = make("shrink_grid_long", - new Potion("shrink_grid_long", new MobEffectInstance(Holder.direct(HexMobEffects.SHRINK_GRID), 9600))); + new Potion("shrink_grid_long", new MobEffectInstance(HexMobEffects.SHRINK_GRID, 9600))); public static final Potion SHRINK_GRID_STRONG = make("shrink_grid_strong", - new Potion("shrink_grid_strong", new MobEffectInstance(Holder.direct(HexMobEffects.SHRINK_GRID), 1800, 1))); + new Potion("shrink_grid_strong", new MobEffectInstance(HexMobEffects.SHRINK_GRID, 1800, 1))); public static void registerPotions(BiConsumer r) { for (var e : POTIONS.entrySet()) { diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java b/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java index 6ecbc2d40f..f0c878373b 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/HexInterop.java @@ -20,7 +20,7 @@ public static final class Forge { } public static final class Fabric { - public static final String TRINKETS_API_ID = "trinkets"; + public static final String ACCESSORIES_API_ID = "accessories"; } public static void init() { diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java index 033b7d5c33..bd5048cdfe 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricClientXplatImpl.java @@ -44,7 +44,7 @@ public void setRenderLayer(Block block, RenderType type) { @Override public void initPlatformSpecific() { - if (IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Fabric.TRINKETS_API_ID)) { + if (IXplatAbstractions.INSTANCE.isModPresent(HexInterop.Fabric.ACCESSORIES_API_ID)) { AccessoriesApiInterop.clientInit(); } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java index ea1f2efad2..643166430f 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/xplat/FabricXplatImpl.java @@ -53,8 +53,6 @@ import net.fabricmc.loader.api.ModContainer; import net.minecraft.advancements.critereon.ItemPredicate; import net.minecraft.core.*; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -84,7 +82,6 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.predicates.MatchTool; import net.minecraft.world.phys.Vec3; -import org.apache.commons.codec.binary.Hex; import org.jetbrains.annotations.Nullable; import virtuoel.pehkui.api.ScaleTypes; @@ -113,7 +110,7 @@ public boolean isModPresent(String id) { @Override public void initPlatformSpecific() { - if (this.isModPresent(HexInterop.Fabric.TRINKETS_API_ID)) { + if (this.isModPresent(HexInterop.Fabric.ACCESSORIES_API_ID)) { AccessoriesApiInterop.init(); } } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index 53128fdf48..d1857a9f08 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -125,7 +125,7 @@ private static void initRegistry() { bind(Registries.ENTITY_TYPE, HexEntities::registerEntities); // Testing out new registration system HexAttributes.register(); - bind(Registries.MOB_EFFECT, HexMobEffects::register); + HexMobEffects.register(); bind(Registries.POTION, HexPotions::registerPotions); bind(Registries.PARTICLE_TYPE, HexParticles::registerParticles); From 7987ab545fd149db4d3bf7f26654204efcc34e3a Mon Sep 17 00:00:00 2001 From: Noelle Date: Wed, 24 Dec 2025 11:45:45 -0600 Subject: [PATCH 74/81] * Fixed Impeti not spraying particles or making noise when activated (Not when erroring) * Adjusted Fabric creative mode tab entries (untested) * Fixed scrolls being unreadable * Fixed rendering artifacts when both toasts and casting stack are present on screen --- .../circles/BlockEntityAbstractImpetus.java | 1 + .../hexcasting/client/render/RenderLib.kt | 2 ++ .../common/items/storage/ItemScroll.java | 7 ++++++ .../hexcasting/fabric/FabricHexInitializer.kt | 25 +++++++++++++------ 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java index ec9a2d4a6c..85de2c23fc 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/BlockEntityAbstractImpetus.java @@ -190,6 +190,7 @@ public void startExecution(@Nullable ServerPlayer player) { this.executionState.getTickSpeed()); serverLevel.setBlockAndUpdate(this.getBlockPos(), this.getBlockState().setValue(BlockCircleComponent.ENERGIZED, true)); + ICircleComponent.sfx(this.getBlockPos(), this.getBlockState(), this.level, this, true); } @Contract(pure = true) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt b/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt index cc01757023..3263d314cb 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/RenderLib.kt @@ -7,6 +7,7 @@ import at.petrak.hexcasting.api.mod.HexConfig import at.petrak.hexcasting.api.utils.TAU import at.petrak.hexcasting.client.ClientTickCounter import at.petrak.hexcasting.client.gui.GuiSpellcasting +import com.mojang.blaze3d.vertex.BufferUploader import com.mojang.blaze3d.vertex.DefaultVertexFormat import com.mojang.blaze3d.vertex.PoseStack import com.mojang.blaze3d.vertex.Tesselator @@ -456,4 +457,5 @@ fun renderQuad( .setColor(color) buf.addVertex(mat, x + w, y, 0f) .setColor(color) + BufferUploader.drawWithShader(buf.buildOrThrow()) } diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java index 5e105c50f6..9ba2cb5aec 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/storage/ItemScroll.java @@ -2,6 +2,7 @@ import at.petrak.hexcasting.api.casting.ActionRegistryEntry; import at.petrak.hexcasting.api.casting.iota.Iota; +import at.petrak.hexcasting.api.casting.iota.NullIota; import at.petrak.hexcasting.api.casting.iota.PatternIota; import at.petrak.hexcasting.api.casting.math.HexPattern; import at.petrak.hexcasting.api.item.IotaHolderItem; @@ -188,4 +189,10 @@ public Optional getTooltipImage(ItemStack stack) { return Optional.empty(); } + + @Override + public @Nullable Iota readIota(ItemStack stack) { + var pattern = stack.get(HexDataComponents.PATTERN); + return pattern != null ? new PatternIota(pattern) : null; + } } diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index 0bcc874d33..bdc0f0adb4 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -22,6 +22,7 @@ import at.petrak.hexcasting.common.casting.actions.spells.great.OpAltiora import at.petrak.hexcasting.common.command.PatternResKeyArgument import at.petrak.hexcasting.common.entities.HexEntities import at.petrak.hexcasting.common.items.ItemJewelerHammer +import at.petrak.hexcasting.common.items.magic.ItemMediaBattery import at.petrak.hexcasting.common.items.storage.ItemScroll import at.petrak.hexcasting.common.lib.* import at.petrak.hexcasting.common.lib.hex.* @@ -172,7 +173,15 @@ object FabricHexInitializer : ModInitializer { } ItemGroupEvents.modifyEntriesEvent(HexCreativeTabs.HEX_KEY).register { r -> for (item in this.itemsToAddToCreativeTab) { - r.accept(item) + if (item is ItemMediaBattery) { + r.accept(HexItems.BATTERY_DUST_STACK.get()) + r.accept(HexItems.BATTERY_SHARD_STACK.get()) + r.accept(HexItems.BATTERY_CRYSTAL_STACK.get()) + r.accept(HexItems.BATTERY_QUENCHED_SHARD_STACK.get()) + r.accept(HexItems.BATTERY_QUENCHED_BLOCK_STACK.get()) + } else { + r.accept(item) + } } } } @@ -201,7 +210,7 @@ object FabricHexInitializer : ModInitializer { .add(HexAttributes.AMBIT_RADIUS) .add(HexAttributes.MEDIA_CONSUMPTION_MODIFIER) .add(HexAttributes.SENTINEL_RADIUS)) - HexMobEffects.register(bind(BuiltInRegistries.MOB_EFFECT)) + HexMobEffects.register() HexPotions.registerPotions(bind(BuiltInRegistries.POTION)) HexDataComponents.registerDataComponents(bind(BuiltInRegistries.DATA_COMPONENT_TYPE)) @@ -237,12 +246,6 @@ object FabricHexInitializer : ModInitializer { // sorry lex (not sorry) private fun fabricOnlyRegistration() { - DefaultItemComponentEvents.MODIFY.register { - it.modify(Items.PUMPKIN_PIE, { - it.set(HexDataComponents.IOTA, DoubleIota(Math.PI)) - }) - } - for (item in BuiltInRegistries.ITEM) { if (item is PigmentItem) { HexCardinalComponents.PIGMENT_ITEM_LOOKUP.registerForItems({ @@ -285,6 +288,12 @@ object FabricHexInitializer : ModInitializer { HexCardinalComponents.MEDIA_HOLDER_LOOKUP.registerForItems({ stack, _ -> CCMediaHolder.Static({ MediaConstants.QUENCHED_BLOCK_UNIT }, ADMediaHolder.QUENCHED_ALLAY_PRIORITY, stack) }, HexBlocks.QUENCHED_ALLAY.asItem()) + + HexCardinalComponents.IOTA_HOLDER_LOOKUP.registerForItems({ + stack, _ -> CCItemIotaHolder.Static(stack) { + return@Static DoubleIota(Math.PI) + } + }, Items.PUMPKIN_PIE) } private val itemsToAddToCreativeTab : MutableSet = mutableSetOf() From 871d6ffadce16ae5a4ddad4a7b0977e8f768c6e8 Mon Sep 17 00:00:00 2001 From: Noelle Date: Wed, 24 Dec 2025 15:20:24 -0600 Subject: [PATCH 75/81] * Fixed slate rendering, scroll rendering, inline pattern rendering (partially) --- .../render/WorldlyPatternRenderHelpers.java | 17 ++++++++++++----- .../interop/inline/InlinePatternRenderer.java | 4 +++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java b/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java index b1da11a2a9..e7ad9b9d69 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/render/WorldlyPatternRenderHelpers.java @@ -9,7 +9,9 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.Direction; import net.minecraft.core.Vec3i; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.AttachFace; @@ -52,7 +54,7 @@ public static void renderPatternForScroll(HexPattern pattern, EntityWallScroll s ps.pushPose(); ps.translate(-blockSize / 2f, -blockSize / 2f, 1f / 32f); // there's almost certainly a better way to do this, but we're just flipping the y and z axes to fix normals - ps.last().normal().mul(new Matrix3f(1, 0, 0, 0, 0, 1, 0, 1, 0)); + // no need for this anymore :D renderPattern(pattern, showStrokeOrder ? READABLE_SCROLL_SETTINGS : SCROLL_SETTINGS, showStrokeOrder ? PatternColors.READABLE_SCROLL_COLORS : PatternColors.DEFAULT_PATTERN_COLOR, scroll.getPos().hashCode(), ps, bufSource, null, null, light, blockSize); @@ -61,7 +63,7 @@ public static void renderPatternForScroll(HexPattern pattern, EntityWallScroll s private static final int[] WALL_ROTATIONS = {180, 270, 0, 90}; private static final Vec3i[] SLATE_FACINGS = {new Vec3i(0, -1, 0), new Vec3i(-1, -1, 0), new Vec3i(-1, -1, 1), new Vec3i(0, -1 , 1)}; - private static final Vec3[] WALL_NORMALS = {new Vec3(0, 0, -1), new Vec3(-1, 0, 0), new Vec3(0, 0, -1), new Vec3(-1, 0, 0)}; + private static final Vec3[] WALL_NORMALS = {new Vec3(0, 0, 1), new Vec3(-1, 0, 0), new Vec3(0, 0, -1), new Vec3(1, 0, 0)}; private static final Vec3i[] SLATE_FLOORCEIL_FACINGS = {new Vec3i(0,0,0), new Vec3i(1,0,0), new Vec3i(1,0,1), new Vec3i(0,0,1)}; public static void renderPatternForSlate(BlockEntitySlate tile, HexPattern pattern, PoseStack ps, MultiBufferSource buffer, int light, BlockState bs) @@ -89,12 +91,17 @@ public static void renderPatternForSlate(BlockEntitySlate tile, HexPattern patte ps.mulPose(Axis.YP.rotationDegrees(facing*-90)); ps.mulPose(Axis.XP.rotationDegrees(90 * (isOnCeiling ? -1 : 1))); if(isOnCeiling) ps.translate(0,-1,1); + + // Set the normal for floor/ceiling slates so lighting is correct + // Floor faces up, ceiling faces down + normal = isOnCeiling ? new Vec3(0, -1, 0) : new Vec3(0, 1, 0); } + int actualLight = LevelRenderer.getLightColor(tile.getLevel(), tile.getBlockPos().relative(Direction.getNearest(normal))); renderPattern(pattern, - wombly ? WORLDLY_SETTINGS_WOBBLY : WORLDLY_SETTINGS, - wombly ? PatternColors.SLATE_WOBBLY_PURPLE_COLOR : PatternColors.DEFAULT_PATTERN_COLOR, - tile.getBlockPos().hashCode(), ps, buffer, normal, null, light, 1); + wombly ? WORLDLY_SETTINGS_WOBBLY : WORLDLY_SETTINGS, + wombly ? PatternColors.SLATE_WOBBLY_PURPLE_COLOR : PatternColors.DEFAULT_PATTERN_COLOR, + tile.getBlockPos().hashCode(), ps, buffer, normal, null, actualLight, 1); ps.popPose(); } diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java index eb7b798487..39130f4e96 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java @@ -5,6 +5,7 @@ import com.samsthenerd.inline.api.client.InlineRenderer; import com.samsthenerd.inline.impl.InlineStyle; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.renderer.LightTexture; import net.minecraft.network.chat.Style; import net.minecraft.resources.ResourceLocation; @@ -61,7 +62,8 @@ public int render(InlinePatternData data, GuiGraphics drawContext, int index, St drawContext.pose().pushPose(); drawContext.pose().translate(isGlowy ? -1f : 0, isGlowy ? -1.5f : -0.5f, 0f); int color = trContext.usableColor(); - PatternRenderer.renderPattern(data.pattern, drawContext.pose(), new PatternRenderer.WorldlyBits(drawContext.bufferSource(), trContext.light(), null), + boolean isFlat = InlineRenderer.isFlat(drawContext.pose(), trContext.layerType()); + PatternRenderer.renderPattern(data.pattern, drawContext.pose(), !isFlat ? new PatternRenderer.WorldlyBits(drawContext.bufferSource(), trContext.light(), null) : null, isGlowy ? INLINE_SETTINGS_GLOWY : INLINE_SETTINGS, isGlowy ? new PatternColors(color, 0xFF_000000 | glowyParentColor) : PatternColors.singleStroke(color), 0, INLINE_TEXTURE_RES); From 47d68ccd9a967f5834d22f650be6223c5d1427e4 Mon Sep 17 00:00:00 2001 From: Noelle Date: Fri, 26 Dec 2025 19:17:20 -0600 Subject: [PATCH 76/81] * Added a workaround for https://github.com/SamsTheNerd/inline/issues/34 * Fixed Media Cube implementation killing server * Adjusted neoforge.mods.toml --- .../common/items/magic/ItemCreativeUnlocker.java | 8 +++++--- .../at/petrak/hexcasting/fabric/FabricHexInitializer.kt | 4 ++++ Neoforge/build.gradle | 2 +- .../at/petrak/hexcasting/forge/ForgeHexInitializer.java | 3 +++ Neoforge/src/main/resources/META-INF/neoforge.mods.toml | 7 ++++++- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java index 60348c00e2..9d989c3af6 100644 --- a/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java +++ b/Common/src/main/java/at/petrak/hexcasting/common/items/magic/ItemCreativeUnlocker.java @@ -8,8 +8,8 @@ import at.petrak.hexcasting.common.lib.HexDataComponents; import at.petrak.hexcasting.common.lib.HexItems; import at.petrak.hexcasting.common.lib.HexSounds; -import com.mojang.authlib.minecraft.client.MinecraftClient; import net.minecraft.ChatFormatting; +import net.minecraft.Util; import net.minecraft.advancements.AdvancementNode; import net.minecraft.client.Minecraft; import net.minecraft.core.component.DataComponentType; @@ -84,6 +84,7 @@ public static boolean isDebug(ItemStack stack, String flag) { } public static Component infiniteMedia(Level level) { + String prefix = "item.hexcasting.creative_unlocker."; String emphasis = Language.getInstance().getOrDefault(prefix + "for_emphasis"); @@ -235,7 +236,8 @@ public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity cons private static MutableComponent rainbow(MutableComponent component, int shift, Level level) { if (level == null) { - return component.withStyle(ChatFormatting.WHITE); + return component.withStyle((s) -> s.withColor( + TextColor.fromRgb(Mth.hsvToRgb((((float) Util.getMillis() / 50) + shift) * 2 % 360 / 360F, 1F, 1F)))); } return component.withStyle((s) -> s.withColor( @@ -245,7 +247,7 @@ private static MutableComponent rainbow(MutableComponent component, int shift, L @Override public void appendHoverText(ItemStack stack, TooltipContext context, List tooltipComponents, TooltipFlag isAdvanced) { - Component emphasized = infiniteMedia(Minecraft.getInstance().level); + Component emphasized = infiniteMedia(null); MutableComponent modName = Component.translatable("item.hexcasting.creative_unlocker.mod_name").withStyle( (s) -> s.withColor(ItemMediaHolder.HEX_COLOR)); diff --git a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt index bdc0f0adb4..8b0f36220a 100644 --- a/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt +++ b/Fabric/src/main/java/at/petrak/hexcasting/fabric/FabricHexInitializer.kt @@ -49,6 +49,8 @@ import at.petrak.hexcasting.fabric.storage.FabricImpetusStorage import at.petrak.hexcasting.fabric.xplat.FabricXplatImpl import at.petrak.hexcasting.interop.HexInterop import at.petrak.hexcasting.xplat.IXplatAbstractions +import com.samsthenerd.inline.utils.EntityCradle +import com.samsthenerd.inline.utils.cradles.EntTypeCradle import net.fabricmc.api.ModInitializer import net.fabricmc.fabric.api.command.v2.ArgumentTypeRegistry import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback @@ -86,6 +88,8 @@ object FabricHexInitializer : ModInitializer { override fun onInitialize() { this.CONFIG = FabricHexConfig.setup() + // workaround for Inline EntTypeCradles not being available on server, related to https://github.com/SamsTheNerd/inline/issues/34 + EntTypeCradle.fromTypeId(ResourceLocation.fromNamespaceAndPath("minecraft", "pig")).get().getType(); FabricPacketHandler.initPackets() FabricPacketHandler.init() diff --git a/Neoforge/build.gradle b/Neoforge/build.gradle index 94ad005b97..8a04a9d5e6 100644 --- a/Neoforge/build.gradle +++ b/Neoforge/build.gradle @@ -90,7 +90,7 @@ dependencies { modImplementation "at.petra-k:paucal:$paucalVersion+$minecraftVersion-neoforge" modImplementation "vazkii.patchouli:Patchouli:1.21-$patchouliVersion-NEOFORGE-SNAPSHOT" modImplementation "com.illusivesoulworks.caelus:caelus-neoforge:$caelusVersion" - modImplementation "com.samsthenerd.inline:inline-common:1.21.1-1.2.2-74" + modImplementation "com.samsthenerd.inline:inline-neoforge:1.21.1-1.2.2-74" // needed for inline to run modRuntimeOnly("me.shedaniel.cloth:cloth-config-forge:$clothConfigVersion") modRuntimeOnly "com.samsthenerd.inline:inline-neoforge:$minecraftVersion-$inlineVersion" diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java index d1857a9f08..1e7f103253 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexInitializer.java @@ -30,6 +30,7 @@ import at.petrak.hexcasting.forge.network.MsgBrainsweepAck; import at.petrak.hexcasting.interop.HexInterop; import at.petrak.hexcasting.xplat.IXplatAbstractions; +import com.samsthenerd.inline.utils.cradles.EntTypeCradle; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; @@ -76,6 +77,8 @@ public class ForgeHexInitializer { public ForgeHexInitializer(ModContainer modContainer) { initConfig(modContainer); + // workaround for Inline EntTypeCradles not being available on server, related to https://github.com/SamsTheNerd/inline/issues/34 + EntTypeCradle.fromTypeId(ResourceLocation.fromNamespaceAndPath("minecraft", "pig")).get().getType(); initRegistries(); initRegistry(); initListeners(); diff --git a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml index 75ffd0b01d..6b5b68b202 100644 --- a/Neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/Neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -59,4 +59,9 @@ modId = "inline" mandatory = true versionRange = "[1.21.1-1.2.2,)" ordering = "NONE" -side = "BOTH" \ No newline at end of file +side = "BOTH" + +[[dependencies.hexcasting]] +modId = "accessories" +mandatory = false +versionRange = "[1.1.0-beta.16+1.21.1,)" \ No newline at end of file From 9a9e54a5502a5b01029ca4b906d79d067ae6aec0 Mon Sep 17 00:00:00 2001 From: Noelle Date: Fri, 26 Dec 2025 19:20:06 -0600 Subject: [PATCH 77/81] * i guess non-flat inline patterns will be fullbright for now :N_Disbelief: --- .../petrak/hexcasting/interop/inline/InlinePatternRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java index 39130f4e96..33372c62d8 100644 --- a/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java +++ b/Common/src/main/java/at/petrak/hexcasting/interop/inline/InlinePatternRenderer.java @@ -63,7 +63,7 @@ public int render(InlinePatternData data, GuiGraphics drawContext, int index, St drawContext.pose().translate(isGlowy ? -1f : 0, isGlowy ? -1.5f : -0.5f, 0f); int color = trContext.usableColor(); boolean isFlat = InlineRenderer.isFlat(drawContext.pose(), trContext.layerType()); - PatternRenderer.renderPattern(data.pattern, drawContext.pose(), !isFlat ? new PatternRenderer.WorldlyBits(drawContext.bufferSource(), trContext.light(), null) : null, + PatternRenderer.renderPattern(data.pattern, drawContext.pose(), !isFlat ? new PatternRenderer.WorldlyBits(drawContext.bufferSource(), LightTexture.FULL_BRIGHT, null) : null, isGlowy ? INLINE_SETTINGS_GLOWY : INLINE_SETTINGS, isGlowy ? new PatternColors(color, 0xFF_000000 | glowyParentColor) : PatternColors.singleStroke(color), 0, INLINE_TEXTURE_RES); From 057042c33ec9c28c650a050f431c6ffd03278f9c Mon Sep 17 00:00:00 2001 From: SuperKnux <34802236+SuperKnux@users.noreply.github.com> Date: Sat, 27 Dec 2025 08:27:15 -0600 Subject: [PATCH 78/81] Update artifact preparation to include Neoforge --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index c30d27f7d3..54de83fdc3 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,7 +34,7 @@ jobs: - name: Prepare artifacts for upload run: | mkdir -p dist - cp {Common,Forge,Fabric}/build/libs/*.jar dist + cp {Common,Neoforge,Fabric}/build/libs/*.jar dist - name: Upload artifacts uses: actions/upload-artifact@v4 From b9beb48c88e73bcfff9e81fe4b96dc3fc7839ead Mon Sep 17 00:00:00 2001 From: Noelle Date: Sat, 27 Dec 2025 23:49:30 -0600 Subject: [PATCH 79/81] * Fixed particle texture bleeding on Neo * Fixed ClientCastingStacks not ticking on Neo --- .../hexcasting/client/particles/ConjureParticle.java | 2 +- .../hexcasting/forge/ForgeHexClientInitializer.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java b/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java index 411b089535..9f0ae031a3 100644 --- a/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java +++ b/Common/src/main/java/at/petrak/hexcasting/client/particles/ConjureParticle.java @@ -99,7 +99,7 @@ public BufferBuilder begin(Tesselator tess, TextureManager texMan) { RenderSystem.setShaderTexture(0, TextureAtlas.LOCATION_PARTICLES); var tex = texMan.getTexture(TextureAtlas.LOCATION_PARTICLES); - IClientXplatAbstractions.INSTANCE.setFilterSave(tex, true, false); + IClientXplatAbstractions.INSTANCE.setFilterSave(tex, false, false); RenderSystem.enableDepthTest(); return tess.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.PARTICLE); } diff --git a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java index 394ecec74f..1440b80076 100644 --- a/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java +++ b/Neoforge/src/main/java/at/petrak/hexcasting/forge/ForgeHexClientInitializer.java @@ -12,18 +12,21 @@ import at.petrak.hexcasting.common.casting.PatternRegistryManifest; import at.petrak.hexcasting.common.lib.HexParticles; import at.petrak.hexcasting.common.misc.PatternTooltip; +import at.petrak.hexcasting.forge.lib.ForgeHexAttachments; import at.petrak.hexcasting.interop.HexInterop; import net.minecraft.client.Minecraft; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.color.item.ItemColors; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.ParticleProvider; import net.minecraft.client.particle.SpriteSet; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; +import net.minecraft.world.entity.player.Player; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.*; @@ -72,6 +75,13 @@ public static void clientInit(FMLClientSetupEvent evt) { evBus.addListener((ClientTickEvent.Post e) -> { ClientTickCounter.clientTickEnd(); ShiftScrollListener.clientTickEnd(); + ClientLevel level = Minecraft.getInstance().level; + if (level != null) { + for (Player player : level.players()) { + if (!player.hasData(ForgeHexAttachments.CLIENT_CASTING_STACK.get())) continue; + player.getData(ForgeHexAttachments.CLIENT_CASTING_STACK.get()).tick(); + } + } }); evBus.addListener((InputEvent.MouseScrollingEvent e) -> { From 6f8d18240c93eb4b5d611c53f5bda6ba70bc24c1 Mon Sep 17 00:00:00 2001 From: Noelle Date: Sun, 28 Dec 2025 12:44:17 -0600 Subject: [PATCH 80/81] * Removed the hex_unbreakable.jsons in generated data --- .../data/hexcasting/tags/block/hex_unbreakable.json | 5 ----- .../api/casting/mishaps/MishapOsirisUnderWaterLevel.java | 4 ++++ .../hexcasting/datagen/tag/HexBlockTagProvider.java | 3 --- .../data/hexcasting/tags/block/hex_unbreakable.json | 8 -------- .../data/hexcasting/tags/block/hex_unbreakable.json | 5 ----- 5 files changed, 4 insertions(+), 21 deletions(-) delete mode 100644 Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json create mode 100644 Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java delete mode 100644 Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json delete mode 100644 Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json diff --git a/Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json b/Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json deleted file mode 100644 index 094771ef74..0000000000 --- a/Common/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#minecraft:needs_diamond_tool" - ] -} \ No newline at end of file diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java new file mode 100644 index 0000000000..360a93345e --- /dev/null +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java @@ -0,0 +1,4 @@ +package at.petrak.hexcasting.api.casting.mishaps; + +public class MishapOsirisUnderWaterLevel { +} diff --git a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java index 9d8372aeac..c826a0efd4 100644 --- a/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java +++ b/Common/src/main/java/at/petrak/hexcasting/datagen/tag/HexBlockTagProvider.java @@ -35,9 +35,6 @@ protected void addTags(HolderLookup.Provider provider) { .addTag(HexTags.Blocks.IMPETI) .addTag(HexTags.Blocks.DIRECTRICES); - tag(HexTags.Blocks.HEX_UNBREAKABLE) - .addOptionalTag(BlockTags.NEEDS_DIAMOND_TOOL.location()); - add(tag(BlockTags.MINEABLE_WITH_PICKAXE), HexBlocks.SLATE_BLOCK, HexBlocks.SLATE_TILES, HexBlocks.SLATE_BRICKS, HexBlocks.SLATE_BRICKS_SMALL, HexBlocks.SLATE_PILLAR, HexBlocks.SLATE, diff --git a/Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json b/Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json deleted file mode 100644 index e2e4a77147..0000000000 --- a/Fabric/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "values": [ - { - "id": "#minecraft:needs_diamond_tool", - "required": false - } - ] -} \ No newline at end of file diff --git a/Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json b/Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json deleted file mode 100644 index 094771ef74..0000000000 --- a/Neoforge/src/generated/resources/data/hexcasting/tags/block/hex_unbreakable.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "values": [ - "#minecraft:needs_diamond_tool" - ] -} \ No newline at end of file From 8c860c546967c7d975a3108fbb4c718003b9555e Mon Sep 17 00:00:00 2001 From: Noelle Date: Sun, 28 Dec 2025 12:44:44 -0600 Subject: [PATCH 81/81] * oops --- .../api/casting/mishaps/MishapOsirisUnderWaterLevel.java | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java deleted file mode 100644 index 360a93345e..0000000000 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/mishaps/MishapOsirisUnderWaterLevel.java +++ /dev/null @@ -1,4 +0,0 @@ -package at.petrak.hexcasting.api.casting.mishaps; - -public class MishapOsirisUnderWaterLevel { -}