From 1ecccdc3792349f92da68ff39b8cdc7420101217 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 30 Nov 2025 14:52:15 +0200 Subject: [PATCH 01/40] start the aspect update --- .../impl/client/event/T7ClientModEvents.kt | 4 +- .../thavma/impl/client/gui/WorkbenchScreen.kt | 4 +- .../thavma/impl/client/gui/layer/WandLayer.kt | 2 +- .../client/gui/research_table/AspectWidget.kt | 2 +- .../client/gui/research_table/SocketWidget.kt | 6 +- .../impl/client/gui/tooltip/TooltipHelper.kt | 8 +- .../thavma/impl/common/aspect/Aspect.kt | 9 +- .../thavma/impl/common/aspect/AspectMap.kt | 6 +- .../common/data/capability/AspectContainer.kt | 8 +- .../thavma/impl/common/entity/VisEntity.kt | 4 +- .../impl/common/research/ResearchState.kt | 11 +- .../thavma/impl/common/scanning/ScanHelper.kt | 5 +- .../data/providers/T7BlockLootSubProvider.kt | 4 +- .../init/data/providers/T7DataMapProvider.kt | 317 ++++++++---------- .../init/data/providers/T7RecipeProvider.kt | 40 +-- .../impl/init/data/worldgen/ore/InfusedOre.kt | 4 +- .../impl/init/registries/deferred/Aspects.kt | 71 ++-- 17 files changed, 226 insertions(+), 279 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientModEvents.kt b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientModEvents.kt index 0f179c4b..b634b82b 100644 --- a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientModEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientModEvents.kt @@ -111,7 +111,7 @@ private fun registerGeometryLoaders(event: RegisterGeometryLoaders) { } private fun registerItemColorHandlers(event: RegisterColorHandlersEvent.Item) { - for (aspect in Aspects.PRIMAL_ASPECTS) { + for (aspect in Aspects.DATAGEN_PRIMALS) { event.register( { _, tintIndex -> when (tintIndex) { @@ -156,7 +156,7 @@ private fun registerItemColorHandlers(event: RegisterColorHandlersEvent.Item) { } private fun registerBlockColorHandlers(event: RegisterColorHandlersEvent.Block) { - for (aspect in Aspects.PRIMAL_ASPECTS) { + for (aspect in Aspects.DATAGEN_PRIMALS) { event.register( { _, _, _, tintIndex -> when (tintIndex) { diff --git a/src/main/java/me/alegian/thavma/impl/client/gui/WorkbenchScreen.kt b/src/main/java/me/alegian/thavma/impl/client/gui/WorkbenchScreen.kt index 24a353ff..df35c4e1 100644 --- a/src/main/java/me/alegian/thavma/impl/client/gui/WorkbenchScreen.kt +++ b/src/main/java/me/alegian/thavma/impl/client/gui/WorkbenchScreen.kt @@ -65,7 +65,7 @@ open class WorkbenchScreen(val menu: WorkbenchMenu, pPlayerInventory: Inventory, // TODO: cleanup protected open val renderAspects = Renderable { guiGraphics: GuiGraphics, _: Int, _: Int, _: Float -> val BASE_RADIUS = 50 - val ANGLE = 360f / Aspects.PRIMAL_ASPECTS.size + val ANGLE = 360f / Aspects.DATAGEN_PRIMALS.size val middleSlot = menu.craftingContainer.range.slots[4] if (middleSlot !is DynamicSlot<*>) return@Renderable @@ -74,7 +74,7 @@ open class WorkbenchScreen(val menu: WorkbenchMenu, pPlayerInventory: Inventory, translateXY((middleSlot.size - ASPECT_SOCKET.width) / 2.0, (middleSlot.size - ASPECT_SOCKET.height) / 2.0) // draw aspects at pentagon points (or N-gon if more primals are added by addons) - for ((i, a) in Aspects.PRIMAL_ASPECTS.withIndex()) { + for ((i, a) in Aspects.DATAGEN_PRIMALS.withIndex()) { val requiredAmount = menu.requiredAspects[a.get()] val requiredStack = AspectStack(a.get(), requiredAmount) guiGraphics.usePose { diff --git a/src/main/java/me/alegian/thavma/impl/client/gui/layer/WandLayer.kt b/src/main/java/me/alegian/thavma/impl/client/gui/layer/WandLayer.kt index ebb155f4..ed95abec 100644 --- a/src/main/java/me/alegian/thavma/impl/client/gui/layer/WandLayer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/gui/layer/WandLayer.kt @@ -35,7 +35,7 @@ object WandLayer : LayeredDraw.Layer { rotateZ(-16f) // draw the bars with stacking rotations - for (deferredAspect in Aspects.PRIMAL_ASPECTS) { + for (deferredAspect in Aspects.DATAGEN_PRIMALS) { val a = deferredAspect.get() graphics.usePose { translateXY(0.0, CIRCLE.height) diff --git a/src/main/java/me/alegian/thavma/impl/client/gui/research_table/AspectWidget.kt b/src/main/java/me/alegian/thavma/impl/client/gui/research_table/AspectWidget.kt index 5aa372fd..ea438087 100644 --- a/src/main/java/me/alegian/thavma/impl/client/gui/research_table/AspectWidget.kt +++ b/src/main/java/me/alegian/thavma/impl/client/gui/research_table/AspectWidget.kt @@ -18,7 +18,7 @@ class AspectWidget(position: Vec2, private val researchScreen: ResearchScreen, p tooltip = T7Tooltip( message, Component.translatable(descriptionTranslationId).withStyle(ChatFormatting.GRAY), - Component.translatable(costTranslationId).append(" ${aspect.rank}").withStyle(ChatFormatting.GRAY) + Component.translatable(costTranslationId).append(" 1").withStyle(ChatFormatting.GRAY) ) } diff --git a/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt b/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt index fa09ed54..385395d9 100644 --- a/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt +++ b/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt @@ -77,9 +77,9 @@ class SocketWidget(val position: Vec2, private val indices: Indices, private val private fun renderConnections(aspect: Aspect, guiGraphics: GuiGraphics) { for (neighborIdx in indices.axial.axialNeighbors) { - val neighbor = screen.socketWidgets[neighborIdx] - if (neighbor == null) continue - if (neighbor.state.aspect?.components?.map { it.get() }?.contains(aspect) != true) continue + val neighbor = screen.socketWidgets[neighborIdx] ?: continue + // TODO: think of some other logic here + //if (neighbor.state.aspect?.components?.map { it.get() }?.contains(aspect) != true) continue val dx = neighbor.position.x - position.x val dy = neighbor.position.y - position.y val angleDegrees = atan2(dy, dx) * 180 / Math.PI diff --git a/src/main/java/me/alegian/thavma/impl/client/gui/tooltip/TooltipHelper.kt b/src/main/java/me/alegian/thavma/impl/client/gui/tooltip/TooltipHelper.kt index 8739451b..8688959e 100644 --- a/src/main/java/me/alegian/thavma/impl/client/gui/tooltip/TooltipHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/client/gui/tooltip/TooltipHelper.kt @@ -1,17 +1,17 @@ package me.alegian.thavma.impl.client.gui.tooltip import me.alegian.thavma.impl.common.aspect.AspectMap -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRIMAL_ASPECTS +import me.alegian.thavma.impl.init.registries.deferred.Aspects.DATAGEN_PRIMALS import net.minecraft.network.chat.Component import net.minecraft.network.chat.MutableComponent fun containedPrimalsComponent(contents: AspectMap): MutableComponent { return Component.empty().also { - for (i in PRIMAL_ASPECTS.indices) { - val a = PRIMAL_ASPECTS[i].get() + for (i in DATAGEN_PRIMALS.indices) { + val a = DATAGEN_PRIMALS[i].get() val newPart = Component.literal(contents[a].toString()).withColor(a.color) it.append(newPart) - if (i != PRIMAL_ASPECTS.size - 1) it.append(Component.literal(" | ")) + if (i != DATAGEN_PRIMALS.size - 1) it.append(Component.literal(" | ")) } } } diff --git a/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt b/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt index 6c659429..6881d881 100644 --- a/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt +++ b/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt @@ -4,18 +4,11 @@ import me.alegian.thavma.impl.init.registries.T7Registries.ASPECT import net.minecraft.Util import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.resources.ResourceLocation -import java.util.function.Supplier -class Aspect(var id: String, var color: Int, var components: List>) { - val isPrimal: Boolean - get() = components.isEmpty() +class Aspect(var id: String, var color: Int, val isPrimal: Boolean){ val translationId by lazy { Util.makeDescriptionId(ASPECT.key().location().path, ASPECT.getKey(this)) } - val rank: Int by lazy { - if (isPrimal) 1 - else components.maxOf { a -> a.get().rank } + 1 - } val resourceKey get() = ASPECT.getResourceKey(this).get() diff --git a/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt b/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt index 67e619f0..8d83be9b 100644 --- a/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt +++ b/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt @@ -1,7 +1,7 @@ package me.alegian.thavma.impl.common.aspect import com.mojang.serialization.Codec -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRIMAL_ASPECTS +import me.alegian.thavma.impl.init.registries.deferred.Aspects.DATAGEN_PRIMALS import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec import java.util.* @@ -168,7 +168,7 @@ class AspectMap(map: Map = LinkedHashMap()) : Iterable fun randomPrimals(scale: Int): AspectMap { val random = Random() val map = LinkedHashMap() - val primals = ArrayList(PRIMAL_ASPECTS) + val primals = ArrayList(DATAGEN_PRIMALS) primals.shuffle() val randomPrimals = primals.subList(0, random.nextInt(primals.size) + 1) for (a in randomPrimals) map[a.get()] = random.nextInt(scale) + 1 @@ -181,7 +181,7 @@ class AspectMap(map: Map = LinkedHashMap()) : Iterable fun ofPrimals(amount: Int): AspectMap { val builder = Builder() - for (a in PRIMAL_ASPECTS) { + for (a in DATAGEN_PRIMALS) { builder.add(a.get(), amount) } return builder.build() diff --git a/src/main/java/me/alegian/thavma/impl/common/data/capability/AspectContainer.kt b/src/main/java/me/alegian/thavma/impl/common/data/capability/AspectContainer.kt index a3b28023..ca6e47ce 100644 --- a/src/main/java/me/alegian/thavma/impl/common/data/capability/AspectContainer.kt +++ b/src/main/java/me/alegian/thavma/impl/common/data/capability/AspectContainer.kt @@ -6,7 +6,7 @@ import me.alegian.thavma.impl.common.aspect.AspectStack import me.alegian.thavma.impl.common.aspect.AspectStack.Companion.of import me.alegian.thavma.impl.init.registries.T7Capabilities.AspectContainer.BLOCK import me.alegian.thavma.impl.init.registries.T7Capabilities.AspectContainer.ITEM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRIMAL_ASPECTS +import me.alegian.thavma.impl.init.registries.deferred.Aspects.DATAGEN_PRIMALS import me.alegian.thavma.impl.init.registries.deferred.T7DataComponents.ASPECTS import net.minecraft.core.BlockPos import net.minecraft.world.item.ItemStack @@ -59,7 +59,7 @@ open class AspectContainer( } open fun canTransferPrimals(): Boolean { - return PRIMAL_ASPECTS.stream() + return DATAGEN_PRIMALS.stream() .anyMatch { a -> simulateTransfer(a.get(), 1) > 0 } } @@ -84,9 +84,9 @@ open class AspectContainer( } open fun transferPrimal(indexOffset: Int, idealAmount: Int): AspectStack? { - val primals = PRIMAL_ASPECTS.size + val primals = DATAGEN_PRIMALS.size for (i in 0.. 0) level.updateBlockEntityS2C(blockPosition()) } diff --git a/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt b/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt index 0535b276..774c5226 100644 --- a/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt +++ b/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt @@ -72,11 +72,12 @@ private fun calculateCompleted(defaultStates: List, socketStates: M for (neighborIdx in idx.axialNeighbors) { if (explored.contains(neighborIdx)) continue - val neighbor = graph[neighborIdx] ?: continue - val neighborAspect = neighbor.aspect ?: continue - val connected = currAspect.components.map { it.get() }.contains(neighborAspect) - || neighborAspect.components.map { it.get() }.contains(currAspect) - if (!connected) continue + // TODO: think of some other logic here +// val neighbor = graph[neighborIdx] ?: continue +// val neighborAspect = neighbor.aspect ?: continue +// val connected = currAspect.components.map { it.get() }.contains(neighborAspect) +// || neighborAspect.components.map { it.get() }.contains(currAspect) +// if (!connected) continue connections.add(neighborIdx) toExplore.add(neighborIdx) diff --git a/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt b/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt index 39f292fa..7948a699 100644 --- a/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt @@ -47,8 +47,9 @@ private fun ServerPlayer.tryScan(key: ResourceKey<*>, aspectMap: AspectMap?) { else if (hasScanned(key)) scanResult = ScanResult.SUCCESS else { val aspects = aspectMap.map { it.aspect } - if (aspects.flatMap { it.components }.any { !knowsAspect(it.get()) }) scanResult = ScanResult.LOCKED - else + // TODO: think of some other logic here +// if (aspects.flatMap { it.components }.any { !knowsAspect(it.get()) }) scanResult = ScanResult.LOCKED +// else addKnowledge( aspects .filter { !knowsAspect(it) } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7BlockLootSubProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7BlockLootSubProvider.kt index b01e39fe..3c5bb204 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7BlockLootSubProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7BlockLootSubProvider.kt @@ -3,7 +3,7 @@ package me.alegian.thavma.impl.init.data.providers import me.alegian.thavma.impl.common.block.InfusedBlock import me.alegian.thavma.impl.common.item.ShardItem import me.alegian.thavma.impl.init.registries.T7BlockStateProperties -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRIMAL_ASPECTS +import me.alegian.thavma.impl.init.registries.deferred.Aspects.DATAGEN_PRIMALS import me.alegian.thavma.impl.init.registries.deferred.T7Blocks import me.alegian.thavma.impl.init.registries.deferred.T7Blocks.ARCANE_LEVITATOR import me.alegian.thavma.impl.init.registries.deferred.T7Blocks.ARCANE_WORKBENCH @@ -92,7 +92,7 @@ class T7BlockLootSubProvider(lookupProvider: HolderLookup.Provider) : BlockLootS add(T7Blocks.SEALING_JAR.get()) { b -> createJarTable(b) } - for (aspect in PRIMAL_ASPECTS) { + for (aspect in DATAGEN_PRIMALS) { infusedBlock(INFUSED_STONES[aspect], SHARDS[aspect]) infusedBlock(INFUSED_DEEPSLATES[aspect], SHARDS[aspect]) } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt index 153bb450..3e0b334c 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt @@ -3,36 +3,7 @@ package me.alegian.thavma.impl.init.data.providers import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.init.data.providers.aspects.* import me.alegian.thavma.impl.init.registries.T7DataMaps -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AER -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AETHER -import me.alegian.thavma.impl.init.registries.deferred.Aspects.ALIENIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.ALKIMIA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AQUA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AVERSIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.BESTIA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.COGNITIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.DESIDERIUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.EXANIMIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.FABRICO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.GELUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.HERBA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.HUMANUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.IGNIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.INSTRUMENTUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.LUX -import me.alegian.thavma.impl.init.registries.deferred.Aspects.METALLUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.MOTUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.POTENTIA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRAECANTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRAEMUNIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.SENSUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TENEBRAE -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TERRA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VACUOS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VICTUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VINCULUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VITREUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VOLATUS +import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Blocks import me.alegian.thavma.impl.init.registries.deferred.T7Items import net.minecraft.core.HolderLookup @@ -67,257 +38,257 @@ class T7DataMapProvider(packOutput: PackOutput, lookupProvider: CompletableFutur val i = builder(T7DataMaps.AspectContent.ITEM) i.item(Items.BLAZE_POWDER) { - it.add(IGNIS, 2) - .add(POTENTIA, 1) - .add(ALKIMIA, 2) + it.add(Aspects.IGNIS, 2) + .add(Aspects.ALKIMIA, 1) } i.item(Tags.Items.GUNPOWDERS) { - it.add(POTENTIA, 4) - .add(ALKIMIA, 2) - .add(TERRA, 1) + it.add(Aspects.IGNIS, 4) + .add(Aspects.ALKIMIA, 2) + .add(Aspects.TERRA, 1) } i.item(Tags.Items.RODS_BLAZE) { - it.add(IGNIS, 8) - .add(POTENTIA, 4) + it.add(Aspects.IGNIS, 4) + .add(Aspects.ALKIMIA, 2) + .add(Aspects.CORPUS, 2) } i.item(Tags.Items.RODS_BREEZE) { - it.add(AER, 8) - .add(MOTUS, 4) + it.add(Aspects.AER, 8) + .add(Aspects.MOTUS, 4) + .add(Aspects.CORPUS, 2) } i.item(Items.WIND_CHARGE) { - it.add(AER, 2) - .add(MOTUS, 1) + it.add(Aspects.AER, 2) + .add(Aspects.MOTUS, 1) } i.item(Items.FIRE_CHARGE) { - it.add(POTENTIA, 4) - .add(IGNIS, 4) - .add(AVERSIO, 2) + it.add(Aspects.ALKIMIA, 4) + .add(Aspects.IGNIS, 4) + .add(Aspects.INSTRUMENTUM, 2) } i.item(Tags.Items.LEATHERS) { - it.add(BESTIA, 8) + it.add(Aspects.CORPUS, 3) } i.item(T7Items.FABRIC) { - it.add(FABRICO, 4).add(PRAECANTATIO, 1) + it.add(Aspects.FABRICO, 4).add(Aspects.AETHER, 1) } i.item(T7Items.ARCANE_LENS) { - it.add(METALLUM, 16) - .add(DESIDERIUM, 32) - .add(PRAECANTATIO, 2) - .add(VITREUS, 2) + it.add(Aspects.METALLUM, 16) + .add(Aspects.AETHER, 2) + .add(Aspects.VITREUS, 2) } i.item(T7Items.ROTTEN_BRAIN) { - it.add(COGNITIO, 16) - .add(EXANIMIS, 8) + it.add(Aspects.COGNITIO, 12) + .add(Aspects.HOSTILIS, 2) + .add(Aspects.CORPUS, 2) } i.item(Items.ROTTEN_FLESH) { - it.add(HUMANUS, 2) - .add(EXANIMIS, 2) + it.add(Aspects.HOSTILIS, 2) + .add(Aspects.CORPUS, 2) } i.item(Items.ARMADILLO_SCUTE) { - it.add(BESTIA, 2) - .add(PRAEMUNIO, 1) + it.add(Aspects.CORPUS, 2) + .add(Aspects.PRAEMUNIO, 1) } i.item(Items.TURTLE_SCUTE) { - it.add(BESTIA, 2) - .add(PRAEMUNIO, 1) - .add(AQUA, 1) + it.add(Aspects.CORPUS, 2) + .add(Aspects.PRAEMUNIO, 1) + .add(Aspects.AQUA, 1) } i.item(Items.FLINT) { - it.add(TERRA, 4) - .add(INSTRUMENTUM, 2) + it.add(Aspects.TERRA, 4) + .add(Aspects.INSTRUMENTUM, 2) } i.item(Tags.Items.FEATHERS) { - it.add(VOLATUS, 4) - .add(AER, 4) + it.add(Aspects.VOLATUS, 4) + .add(Aspects.AER, 4) + .add(Aspects.CORPUS, 2) } i.item(Tags.Items.ENDER_PEARLS) { - it.add(MOTUS, 4) - .add(ALIENIS, 4) + it.add(Aspects.INSTRUMENTUM, 4) + .add(Aspects.TENEBRAE, 4) + .add(Aspects.CORPUS, 2) } i.item(Items.ENDER_EYE) { - it.add(MOTUS, 4) - .add(ALIENIS, 4) - .add(PRAECANTATIO, 2) + it.add(Aspects.INSTRUMENTUM, 4) + .add(Aspects.TENEBRAE, 4) + .add(Aspects.AETHER, 2) } i.item(Tags.Items.STRINGS) { - it.add(BESTIA, 1) - .add(FABRICO, 1) + it.add(Aspects.CORPUS, 1) + .add(Aspects.FABRICO, 1) } i.item(Items.GHAST_TEAR) { - it.add(EXANIMIS, 4) - .add(ALKIMIA, 4) + it.add(Aspects.HOSTILIS, 4) + .add(Aspects.ALKIMIA, 4) } i.item(Items.SUGAR) { - it.add(HERBA, 2) - .add(VICTUS, 1) + it.add(Aspects.HERBA, 2) + .add(Aspects.VICTUS, 1) } i.item(Items.PAPER) { - it.add(COGNITIO, 1) - .add(HERBA, 1) + it.add(Aspects.COGNITIO, 1) + .add(Aspects.HERBA, 1) } i.item(Items.FIREWORK_ROCKET) { - it.add(POTENTIA, 1) - .add(SENSUS, 1) + it.add(Aspects.IGNIS, 1) + .add(Aspects.ORNATUS, 1) } i.item(Items.FIREWORK_STAR) { - it.add(POTENTIA, 1) - .add(SENSUS, 2) - } - i.item(Items.SNOWBALL) { it.add(GELUM, 1) } - i.item(Items.NETHER_BRICK) { it.add(TERRA, 1).add(IGNIS, 1) } - i.item(Items.PRISMARINE_CRYSTALS) { it.add(VITREUS, 4).add(AQUA, 4).add(LUX, 2) } - i.item(Items.PRISMARINE_SHARD) { it.add(AQUA, 2).add(TERRA, 2) } - i.item(Items.CHORUS_FRUIT) { it.add(HERBA, 2).add(ALIENIS, 2) } - i.item(Items.POPPED_CHORUS_FRUIT) { it.add(HERBA, 2).add(ALIENIS, 2) } - i.item(Items.CLAY_BALL) { it.add(TERRA, 1).add(AQUA, 1) } - i.item(Items.BRICK) { it.add(TERRA, 1).add(IGNIS, 1) } + it.add(Aspects.IGNIS, 1) + .add(Aspects.ORNATUS, 2) + } + i.item(Items.SNOWBALL) { it.add(Aspects.AQUA, 1) } + i.item(Items.NETHER_BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + i.item(Items.PRISMARINE_CRYSTALS) { it.add(Aspects.VITREUS, 4).add(Aspects.AQUA, 4).add(Aspects.LUX, 2) } + i.item(Items.PRISMARINE_SHARD) { it.add(Aspects.AQUA, 2).add(Aspects.TERRA, 2) } + i.item(Items.CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + i.item(Items.POPPED_CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + i.item(Items.CLAY_BALL) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } + i.item(Items.BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - i.item(Tags.Items.RODS_WOODEN) { it.add(HERBA, 2) } + i.item(Tags.Items.RODS_WOODEN) { it.add(Aspects.HERBA, 2) } - i.item(Tags.Items.EGGS) { it.add(VICTUS, 4).add(BESTIA, 2) } + i.item(Tags.Items.EGGS) { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } - i.item(Tags.Items.CROPS_WHEAT) { it.add(VICTUS, 2).add(HERBA, 2) } + i.item(Tags.Items.CROPS_WHEAT) { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } i.item(Items.END_CRYSTAL) { - it.add(VITREUS, 14) - .add(POTENTIA, 8) - .add(ALIENIS, 4) - .add(IGNIS, 4) + it.add(Aspects.VITREUS, 14) + .add(Aspects.IGNIS, 8) + .add(Aspects.TENEBRAE, 4) + .add(Aspects.AETHER, 4) } - i.item(Blocks.NETHER_WART) { it.add(HERBA, 2).add(IGNIS, 2) } - i.item(Blocks.CHORUS_PLANT) { it.add(HERBA, 2).add(ALIENIS, 2) } - i.item(Blocks.CHORUS_FLOWER) { it.add(HERBA, 4).add(ALIENIS, 4) } - i.item(Tags.Items.NETHERRACKS) { it.add(TERRA, 1).add(IGNIS, 1) } - i.item(Blocks.MUD) { it.add(TERRA, 1).add(AQUA, 1) } - i.item(Blocks.PACKED_MUD) { it.add(TERRA, 2).add(HERBA, 2) } - i.item(ItemTags.DIRT) { it.add(TERRA, 1) } - i.item(Blocks.COARSE_DIRT) { it.add(TERRA, 1) } - i.item(Tags.Items.GRAVELS) { it.add(TERRA, 2) } - i.item(Tags.Items.STONES) { it.add(TERRA, 2) } - i.item(Tags.Items.COBBLESTONES) { it.add(TERRA, 2) } - i.item(Tags.Items.SANDS) { it.add(TERRA, 2) } - i.item(Blocks.CLAY) { it.add(TERRA, 4).add(AQUA, 4) } + i.item(Blocks.NETHER_WART) { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + i.item(Blocks.CHORUS_PLANT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + i.item(Blocks.CHORUS_FLOWER) { it.add(Aspects.HERBA, 4).add(Aspects.TENEBRAE, 4) } + i.item(Tags.Items.NETHERRACKS) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + i.item(Blocks.MUD) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } + i.item(Blocks.PACKED_MUD) { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + i.item(ItemTags.DIRT) { it.add(Aspects.TERRA, 1) } + i.item(Blocks.COARSE_DIRT) { it.add(Aspects.TERRA, 1) } + i.item(Tags.Items.GRAVELS) { it.add(Aspects.TERRA, 2) } + i.item(Tags.Items.STONES) { it.add(Aspects.TERRA, 2) } + i.item(Tags.Items.COBBLESTONES) { it.add(Aspects.TERRA, 2) } + i.item(Tags.Items.SANDS) { it.add(Aspects.TERRA, 2) } + i.item(Blocks.CLAY) { it.add(Aspects.TERRA, 4).add(Aspects.AQUA, 4) } i.item(Blocks.GRASS_BLOCK) { - it.add(TERRA, 1).add(HERBA, 1) + it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } i.item(Blocks.PODZOL) { - it.add(TERRA, 1).add(HERBA, 1) + it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } i.item(Blocks.SHORT_GRASS) { - it.add(HERBA, 1).add(AER, 1) + it.add(Aspects.HERBA, 1) } i.item(Blocks.TALL_GRASS) { - it.add(HERBA, 1).add(AER, 1) + it.add(Aspects.HERBA, 1) } i.item(ItemTags.TERRACOTTA) { - it.add(TERRA, 4) - .add(IGNIS, 4) - .add(SENSUS, 1) + it.add(Aspects.TERRA, 4) + .add(Aspects.IGNIS, 4) + .add(Aspects.ORNATUS, 1) } i.item(Tags.Items.CONCRETE_POWDERS) { - it.add(TERRA, 3) + it.add(Aspects.TERRA, 3) } i.item(Tags.Items.CONCRETES) { - it.add(TERRA, 3) - .add(AQUA, 1) - .add(AETHER, 1) + it.add(Aspects.TERRA, 3) + .add(Aspects.AQUA, 1) + .add(Aspects.AETHER, 1) } - i.item(ItemTags.LEAVES) { it.add(HERBA, 2) } - i.item(ItemTags.SAPLINGS) { it.add(HERBA, 4).add(VICTUS, 4) } - i.item(ItemTags.LOGS) { it.add(HERBA, 8) } - i.item(ItemTags.FLOWERS) { it.add(HERBA, 4).add(VICTUS, 1) } + i.item(ItemTags.LEAVES) { it.add(Aspects.HERBA, 2) } + i.item(ItemTags.SAPLINGS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 4) } + i.item(ItemTags.LOGS) { it.add(Aspects.HERBA, 8) } + i.item(ItemTags.FLOWERS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 1) } i.item(Blocks.SUGAR_CANE) { - it.add(HERBA, 2) - .add(AQUA, 1) - .add(AER, 1) + it.add(Aspects.HERBA, 2) + .add(Aspects.AQUA, 1) } - i.item(T7Blocks.TABLE) { it.add(HERBA, 12) } + i.item(T7Blocks.TABLE) { it.add(Aspects.HERBA, 12) } i.item(T7Blocks.RESEARCH_TABLE) { - it.add(HERBA, 12) - .add(PRAECANTATIO, 2) + it.add(Aspects.HERBA, 12) + .add(Aspects.AETHER, 2) } i.item(ItemTags.WOOL) { - it.add(BESTIA, 4).add(SENSUS, 2).add(FABRICO, 4) + it.add(Aspects.CORPUS, 4).add(Aspects.ORNATUS, 2).add(Aspects.FABRICO, 4) } - i.item(Tags.Items.GLASS_BLOCKS_CHEAP) { it.add(VITREUS, 2) } - i.item(Tags.Items.GLASS_PANES) { it.add(VITREUS, 1) } + i.item(Tags.Items.GLASS_BLOCKS_CHEAP) { it.add(Aspects.VITREUS, 2) } + i.item(Tags.Items.GLASS_PANES) { it.add(Aspects.VITREUS, 1) } - i.item(ItemTags.WOOL) { it.add(BESTIA, 8).add(FABRICO, 4) } + i.item(ItemTags.WOOL) { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } - i.item(Blocks.TORCH) { it.add(LUX, 4) } + i.item(Blocks.TORCH) { it.add(Aspects.LUX, 4) } - i.item(Blocks.SNOW) { it.add(GELUM, 1) } - i.item(Blocks.SNOW_BLOCK) { it.add(GELUM, 4) } - i.item(Blocks.POWDER_SNOW) { it.add(GELUM, 2) } + i.item(Blocks.SNOW) { it.add(Aspects.AQUA, 1) } + i.item(Blocks.SNOW_BLOCK) { it.add(Aspects.AQUA, 4) } + i.item(Blocks.POWDER_SNOW) { it.add(Aspects.AQUA, 2) } i.item(Blocks.BEDROCK) { - it.add(VACUOS, 25) - .add(TERRA, 25) - .add(TENEBRAE, 25) + it.add(Aspects.TERRA, 25) + .add(Aspects.TENEBRAE, 25) } i.item(T7Blocks.ETERNAL_FLAME) { - it.add(LUX, 12) - .add(POTENTIA, 8) - .add(IGNIS, 8) + it.add(Aspects.LUX, 12) + .add(Aspects.IGNIS, 8) } i.item(T7Blocks.CRACKED_ELEMENTAL_STONE) { - it.add(TERRA, 4) - .add(PRAECANTATIO, 1) + it.add(Aspects.TERRA, 4) + .add(Aspects.AETHER, 1) } i.item(T7Blocks.ELEMENTAL_STONE_BRICKS) { - it.add(TERRA, 4) - .add(PRAECANTATIO, 1) + it.add(Aspects.TERRA, 4) + .add(Aspects.AETHER, 1) } i.item(T7Blocks.ELEMENTAL_CORE) { - it.add(TERRA, 6) - .add(PRAECANTATIO, 2) + it.add(Aspects.TERRA, 6) + .add(Aspects.AETHER, 2) } i.item(Blocks.CRAFTING_TABLE) { - it.add(FABRICO, 8) - .add(HERBA, 4) + it.add(Aspects.FABRICO, 8) + .add(Aspects.HERBA, 4) } i.item(T7Blocks.ARCANE_WORKBENCH) { - it.add(FABRICO, 12) - .add(HERBA, 4) - .add(PRAECANTATIO, 2) + it.add(Aspects.FABRICO, 12) + .add(Aspects.HERBA, 4) + .add(Aspects.AETHER, 2) } i.item(Items.CAULDRON) { - it.add(METALLUM, 56) - .add(ALKIMIA, 8) + it.add(Aspects.METALLUM, 56) + .add(Aspects.ALKIMIA, 8) } i.item(T7Blocks.CRUCIBLE) { - it.add(METALLUM, 56) - .add(ALKIMIA, 8) - .add(PRAECANTATIO, 2) + it.add(Aspects.METALLUM, 56) + .add(Aspects.ALKIMIA, 8) + .add(Aspects.AETHER, 2) } i.item(T7Blocks.SEALING_JAR) { - it.add(VITREUS, 4) - .add(VACUOS, 2) - .add(PRAECANTATIO, 2) + it.add(Aspects.VITREUS, 4) + .add(Aspects.ALKIMIA, 2) + .add(Aspects.AETHER, 2) } i.item(Blocks.TNT) { - it.add(POTENTIA, 20) - .add(TERRA, 1) + it.add(Aspects.ALKIMIA, 8) + .add(Aspects.IGNIS, 8) + .add(Aspects.TERRA, 1) } i.item(Blocks.TRIPWIRE_HOOK) { - it.add(VINCULUM, 2) - .add(METALLUM, 2) + it.add(Aspects.MACHINA, 2) + .add(Aspects.METALLUM, 1) } i.item(Blocks.HEAVY_CORE) { - it.add(METALLUM, 16) - .add(DESIDERIUM, 8) - .add(VACUOS, 2) + it.add(Aspects.METALLUM, 16) + .add(Aspects.INSTRUMENTUM, 6) } - i.item(Blocks.BAMBOO) { it.add(HERBA, 1) } - i.item(ItemTags.BAMBOO_BLOCKS) { it.add(HERBA, 4) } + i.item(Blocks.BAMBOO) { it.add(Aspects.HERBA, 1) } + i.item(ItemTags.BAMBOO_BLOCKS) { it.add(Aspects.HERBA, 4) } } } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt index 1ee0ad9a..e6df31b9 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt @@ -11,8 +11,6 @@ import me.alegian.thavma.impl.init.registries.deferred.T7Items import me.alegian.thavma.impl.init.registries.deferred.T7Items.wandOrThrow import me.alegian.thavma.impl.init.registries.deferred.WandCoreMaterials import me.alegian.thavma.impl.init.registries.deferred.WandPlatingMaterials -import net.minecraft.advancements.Criterion -import net.minecraft.advancements.critereon.InventoryChangeTrigger import net.minecraft.advancements.critereon.ItemPredicate import net.minecraft.core.HolderLookup import net.minecraft.core.registries.BuiltInRegistries @@ -48,7 +46,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< wandPlatingCrafting(pRecipeOutput, T7Items.IRON_PLATING.get(), Items.IRON_INGOT, Items.IRON_NUGGET) wandPlatingWorkbench(pRecipeOutput, T7Items.GOLD_PLATING.get(), Items.GOLD_INGOT, Items.GOLD_NUGGET, AspectMap.ofPrimals(8)) wandPlatingWorkbench(pRecipeOutput, T7Items.ORICHALCUM_PLATING.get(), T7Items.ORICHALCUM_INGOT, T7Items.ORICHALCUM_NUGGET, AspectMap.ofPrimals(4)) - wandPlatingInfusion(pRecipeOutput, T7Items.THAVMITE_PLATING.get(), T7Items.THAVMITE_INGOT, T7Items.THAVMITE_NUGGET, AspectMap.builder().add(Aspects.PRAECANTATIO, 16).build()) + wandPlatingInfusion(pRecipeOutput, T7Items.THAVMITE_PLATING.get(), T7Items.THAVMITE_INGOT, T7Items.THAVMITE_NUGGET, AspectMap.builder().add(Aspects.AETHER, 16).build()) ShapedRecipeBuilder.shaped(RecipeCategory.COMBAT, T7Items.THAVMITE_SWORD.get()) .define('a', T7Items.THAVMITE_INGOT.get()) @@ -225,7 +223,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(T7Blocks.SILVERWOOD_LOG), listOf(Ingredient.of(T7Items.SHARDS[Aspects.AETHER]!!), Ingredient.of(T7Items.SHARDS[Aspects.AETHER]!!), Ingredient.of(T7Items.SHARDS[Aspects.AETHER]!!), Ingredient.of(T7Items.SHARDS[Aspects.AETHER]!!)), AspectMap.builder() - .add(Aspects.PRAECANTATIO, 16) + .add(Aspects.AETHER, 16) .build(), ).save(pRecipeOutput) @@ -233,7 +231,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< .unlockedBy(T7Blocks.ELEMENTAL_STONE) .save(pRecipeOutput) - for (a in Aspects.PRIMAL_ASPECTS) { + for (a in Aspects.DATAGEN_PRIMALS) { SimpleCookingRecipeBuilder.blasting(Ingredient.of(T7Blocks.INFUSED_STONES[a], T7Blocks.INFUSED_DEEPSLATES[a]), RecipeCategory.MISC, T7Items.SHARDS[a]!!, 1f, 100) .unlockedBy(T7Tags.Items.INFUSED_STONES) .save(pRecipeOutput, T7Items.SHARDS[a]!!.id.withSuffix("_blasting")) @@ -245,7 +243,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< CrucibleRecipeBuilder( T7Items.THAVMITE_INGOT.get().defaultInstance, AspectMap.builder() - .add(Aspects.PRAECANTATIO.get(), 4) + .add(Aspects.AETHER.get(), 4) .build(), Ingredient.of(Items.IRON_INGOT) ).save(pRecipeOutput) @@ -263,7 +261,6 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< AspectMap.builder() .add(Aspects.IGNIS.get(), 8) .add(Aspects.LUX.get(), 8) - .add(Aspects.POTENTIA.get(), 8) .build(), Ingredient.of(Items.GLOWSTONE_DUST) ).save(pRecipeOutput) @@ -273,7 +270,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(T7Items.THAVMITE_HELMET), listOf(Ingredient.of(Items.NETHERITE_INGOT), Ingredient.of(Items.DIAMOND), Ingredient.of(Items.LEATHER)), AspectMap.builder() - .add(Aspects.PRAECANTATIO, 16) + .add(Aspects.AETHER, 16) .add(Aspects.PRAEMUNIO, 32) .build(), ).save(pRecipeOutput) @@ -282,7 +279,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(T7Items.THAVMITE_CHESTPLATE), listOf(Ingredient.of(Items.NETHERITE_INGOT), Ingredient.of(Items.DIAMOND), Ingredient.of(Items.LEATHER)), AspectMap.builder() - .add(Aspects.PRAECANTATIO, 16) + .add(Aspects.AETHER, 16) .add(Aspects.PRAEMUNIO, 32) .build(), ).save(pRecipeOutput) @@ -291,7 +288,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(T7Items.THAVMITE_LEGGINGS), listOf(Ingredient.of(Items.NETHERITE_INGOT), Ingredient.of(Items.DIAMOND), Ingredient.of(Items.LEATHER)), AspectMap.builder() - .add(Aspects.PRAECANTATIO, 16) + .add(Aspects.AETHER, 16) .add(Aspects.PRAEMUNIO, 32) .build(), ).save(pRecipeOutput) @@ -300,7 +297,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(T7Items.THAVMITE_BOOTS), listOf(Ingredient.of(Items.NETHERITE_INGOT), Ingredient.of(Items.DIAMOND), Ingredient.of(Items.LEATHER)), AspectMap.builder() - .add(Aspects.PRAECANTATIO, 16) + .add(Aspects.AETHER, 16) .add(Aspects.PRAEMUNIO, 32) .build(), ).save(pRecipeOutput) @@ -328,8 +325,8 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(T7Items.THAVMITE_SWORD), listOf(Ingredient.of(T7Items.THAVMITE_PLATING), Ingredient.of(T7Items.THAVMITE_PLATING), Ingredient.of(T7Items.GREATWOOD_CORE), Ingredient.of(Items.NETHERITE_INGOT)), AspectMap.builder() - .add(Aspects.PRAECANTATIO, 16) - .add(Aspects.AVERSIO, 16) + .add(Aspects.AETHER, 16) + .add(Aspects.INSTRUMENTUM, 16) .build(), ).save(pRecipeOutput) @@ -338,8 +335,8 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(Items.ENDER_PEARL), listOf(Ingredient.of(T7Items.THAVMITE_PLATING), Ingredient.of(T7Items.THAVMITE_PLATING), Ingredient.of(Blocks.DISPENSER)), AspectMap.builder() - .add(Aspects.MOTUS, 32) - .add(Aspects.ALIENIS, 16) + .add(Aspects.AETHER, 20) + .add(Aspects.TENEBRAE, 16) .add(Aspects.INSTRUMENTUM, 16) .build(), ).save(pRecipeOutput) @@ -348,7 +345,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< Ingredient.of(Items.QUARTZ_BLOCK), listOf(Ingredient.of(Items.GOLD_INGOT), Ingredient.of(Items.GOLD_INGOT), Ingredient.of(Items.LAPIS_LAZULI)), AspectMap.builder() - .add(Aspects.PERMUTATIO, 40) + .add(Aspects.ORNATUS, 40) .add(Aspects.INSTRUMENTUM, 16) .build(), ).save(pRecipeOutput) @@ -365,7 +362,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< .unlockedBy(Tags.Items.STORAGE_BLOCKS_COAL) .save(pRecipeOutput) WorkbenchRecipeBuilder.shaped(T7Items.FOCUS_ENDERCHEST, 1) - .requireAspects(AspectMap.builder().add(Aspects.TERRA, 12).add(Aspects.AER, 12).build()) + .requireAspects(AspectMap.builder().add(Aspects.TERRA, 12).add(Aspects.AETHER, 12).build()) .define('e', Blocks.ENDER_CHEST) .define('o', Tags.Items.OBSIDIANS) .define('b', Items.BUNDLE) @@ -378,7 +375,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< .save(pRecipeOutput) WorkbenchRecipeBuilder.shaped(T7Blocks.HUNGRY_CHEST, 1) - .requireAspects(AspectMap.builder().add(Aspects.AER, 8).add(Aspects.AETHER, 4).build()) + .requireAspects(AspectMap.builder().add(Aspects.TERRA, 8).add(Aspects.AETHER, 4).build()) .define('t', ItemTags.TRAPDOORS) .define('w', T7Blocks.GREATWOOD_PLANKS) .pattern("wtw") @@ -446,14 +443,13 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< WorkbenchRecipeBuilder.shaped(T7Blocks.ARCANE_LEVITATOR, 1) .requireAspects( AspectMap.builder() - .add(Aspects.AER, 12) - .add(Aspects.TERRA, 4) - .add(Aspects.AETHER, 4) + .add(Aspects.TERRA, 8) + .add(Aspects.AETHER, 8) .build() ) .define('s', T7Blocks.ELEMENTAL_STONE) .define('c', T7Blocks.ELEMENTAL_CORE) - .define('a', T7Items.SHARDS[Aspects.AER]!!) + .define('a', T7Items.SHARDS[Aspects.TERRA]!!) .pattern("sas") .pattern("scs") .pattern("sas") diff --git a/src/main/java/me/alegian/thavma/impl/init/data/worldgen/ore/InfusedOre.kt b/src/main/java/me/alegian/thavma/impl/init/data/worldgen/ore/InfusedOre.kt index e276fec5..16fc9245 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/worldgen/ore/InfusedOre.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/worldgen/ore/InfusedOre.kt @@ -20,13 +20,13 @@ object InfusedOre { } fun registerConfigured(context: BootstrapContext>) { - Aspects.PRIMAL_ASPECTS.forEach { + Aspects.DATAGEN_PRIMALS.forEach { registerConfiguredInfusedStone(context, CONFIGURED_FEATURES[it], T7Blocks.INFUSED_STONES[it]!!.get().defaultBlockState(), T7Blocks.INFUSED_DEEPSLATES[it]!!.get().defaultBlockState()) } } fun registerPlaced(context: BootstrapContext) { - Aspects.PRIMAL_ASPECTS.forEach { + Aspects.DATAGEN_PRIMALS.forEach { registerPlacedInfusedStone(context, CONFIGURED_FEATURES[it], PLACED_FEATURES[it]) } } diff --git a/src/main/java/me/alegian/thavma/impl/init/registries/deferred/Aspects.kt b/src/main/java/me/alegian/thavma/impl/init/registries/deferred/Aspects.kt index 0de52fc7..1ef11c6e 100644 --- a/src/main/java/me/alegian/thavma/impl/init/registries/deferred/Aspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/registries/deferred/Aspects.kt @@ -5,64 +5,49 @@ import me.alegian.thavma.impl.client.T7Colors import me.alegian.thavma.impl.common.aspect.Aspect import me.alegian.thavma.impl.init.registries.deferred.util.DeferredAspect import me.alegian.thavma.impl.init.registries.deferred.util.T7DeferredRegister -import java.util.function.Supplier object Aspects { val REGISTRAR: T7DeferredRegister.Aspects = T7DeferredRegister.createAspects(Thavma.MODID) // PRIMAL - val AER = register("aer", 0xffffff7e.toInt(), listOf()) - val TERRA = register("terra", 0xff56c000.toInt(), listOf()) - val IGNIS = register("ignis", 0xffff5a01.toInt(), listOf()) - val AQUA = register("aqua", 0xff3cd4fc.toInt(), listOf()) - val AETHER = register("aether", 0xffd5d4ec.toInt(), listOf()) + val TERRA = register("terra", 0xff56c000.toInt(), true) + val IGNIS = register("ignis", 0xffff5a01.toInt(), true) + val AQUA = register("aqua", 0xff3cd4fc.toInt(), true) + val AETHER = register("aether", T7Colors.PURPLE, true) - // DO NOT use this to check if an aspect is primal. This array is used to auto-generate ores and other content. Instead, use Aspect::isPrimal - val PRIMAL_ASPECTS = listOf(IGNIS, AER, TERRA, AQUA, AETHER) + // DO NOT use this to check if an aspect is primal. This array is used to datagen ores and other content. Instead, use Aspect::isPrimal + val DATAGEN_PRIMALS = listOf(IGNIS, TERRA, AQUA, AETHER) // SECONDARY - val VACUOS = register("vacuos", 0xffa0a0a0.toInt(), listOf(AETHER, TERRA)) - val LUX = register("lux", 0xffffffc0.toInt(), listOf(AER, IGNIS)) - val MOTUS = register("motus", 0xffcdccf4.toInt(), listOf(AER, AETHER)) - val GELUM = register("gelum", 0xffe1ffff.toInt(), listOf(AER, AQUA)) - val VITREUS = register("vitreus", 0xff80ffff.toInt(), listOf(TERRA, AER)) - val METALLUM = register("metallum", 0xffb5b5cd.toInt(), listOf(TERRA, IGNIS)) - val VICTUS = register("victus", 0xffde0005.toInt(), listOf(AETHER, AQUA)) - val HERBA = register("herba", 0xff01ac00.toInt(), listOf(AQUA, TERRA)) - val POTENTIA = register("potentia", 0xffc0ffff.toInt(), listOf(AETHER, IGNIS)) - val PERMUTATIO = register("permutatio", 0xff578357.toInt(), listOf(AQUA, IGNIS)) + val LUX = register("lux", 0xffffffc0.toInt()) + val VITREUS = register("vitreus", 0xff80ffff.toInt()) + val METALLUM = register("metallum", 0xffb5b5cd.toInt()) + val VICTUS = register("victus", 0xffde0005.toInt()) + val HERBA = register("herba", 0xff01ac00.toInt()) // TERTIARY - val MORTUUS = register("mortuus", 0xff6a0005.toInt(), listOf(VICTUS, VACUOS)) - val PRAECANTATIO = register("praecantatio", T7Colors.PURPLE, listOf(POTENTIA, AER)) - val AURAM = register("auram", 0xffffc0ff.toInt(), listOf(PRAECANTATIO, AER)) - val ALKIMIA = register("alkimia", 0xff23ac9d.toInt(), listOf(PRAECANTATIO, AQUA)) - val VITIUM = register("vitium", 0xff800080.toInt(), listOf(VICTUS, PRAECANTATIO)) - val TENEBRAE = register("tenebrae", 0xff222222.toInt(), listOf(VACUOS, LUX)) - val ALIENIS = register("alienis", 0xff805080.toInt(), listOf(VACUOS, TENEBRAE)) - val VOLATUS = register("volatus", 0xffe7e7d7.toInt(), listOf(AER, MOTUS)) - val INSTRUMENTUM = register("instrumentum", 0xff4040ee.toInt(), listOf(METALLUM, POTENTIA)) - val FABRICO = register("fabrico", 0xff809d80.toInt(), listOf(PERMUTATIO, INSTRUMENTUM)) - val MACHINA = register("machina", 0xff8080a0.toInt(), listOf(MOTUS, INSTRUMENTUM)) - val VINCULUM = register("vinculum", 0xff9a8080.toInt(), listOf(MOTUS, IGNIS)) - val EXANIMIS = register("exanimis", 0xffebebfb.toInt(), listOf(VICTUS, MORTUUS)) - val COGNITIO = register("cognitio", 0xfff9967f.toInt(), listOf(IGNIS, VICTUS)) - val SENSUS = register("sensus", 0xffc0ffc0.toInt(), listOf(AER, COGNITIO)) - val AVERSIO = register("aversio", 0xffc05050.toInt(), listOf(INSTRUMENTUM, METALLUM)) - val DESIDERIUM = register("desiderium", 0xffe6be44.toInt(), listOf(COGNITIO, VACUOS)) - val BESTIA = register("bestia", 0xff9f6409.toInt(), listOf(MOTUS, VICTUS)) - val PRAEMUNIO = register("praemunio", 0xff00c0c0.toInt(), listOf(BESTIA, METALLUM)) - val HUMANUS = register("humanus", 0xffffd7c0.toInt(), listOf(BESTIA, COGNITIO)) - - private fun register(id: String, color: Int, components: List>): DeferredAspect { - return REGISTRAR.registerAspect(id) { Aspect(id, color, components) } + val ALKIMIA = register("alkimia", 0xff23ac9d.toInt()) + val TENEBRAE = register("tenebrae", 0xff222222.toInt()) + val INSTRUMENTUM = register("instrumentum", 0xff4040ee.toInt()) + val FABRICO = register("fabrico", 0xff809d80.toInt()) + val MACHINA = register("machina", 0xff8080a0.toInt()) + val VAS = register("vas", 0xff9a8080.toInt()) + val COGNITIO = register("cognitio", 0xfff9967f.toInt()) + val ORNATUS = register("ornatus", 0xffc0ffc0.toInt()) + val HOSTILIS = register("hostilis", 0xffc05050.toInt()) + val CORPUS = register("corpus", 0xff9f6409.toInt()) + val PRAEMUNIO = register("praemunio", 0xff00c0c0.toInt()) + val CIVILIS = register("civilis", 0xffffd7c0.toInt()) + + private fun register(id: String, color: Int, isPrimal: Boolean = false): DeferredAspect { + return REGISTRAR.registerAspect(id) { Aspect(id, color, isPrimal) } } } fun linkedMapWithPrimalKeys(mapper: (DeferredAspect) -> T): LinkedHashMap, T> { - return linkedMapOf(*Aspects.PRIMAL_ASPECTS.map { Pair(it, mapper(it)) }.toTypedArray()) + return linkedMapOf(*Aspects.DATAGEN_PRIMALS.map { Pair(it, mapper(it)) }.toTypedArray()) } fun listFromPrimals(mapper: (DeferredAspect) -> T): List { - return Aspects.PRIMAL_ASPECTS.map { mapper(it) } + return Aspects.DATAGEN_PRIMALS.map { mapper(it) } } From b3e06563046dd2a154228eac82c4c40c2dbac993 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 30 Nov 2025 15:01:10 +0200 Subject: [PATCH 02/40] more aspects --- .../init/data/providers/T7DataMapProvider.kt | 11 +- .../data/providers/aspects/ToolAspects.kt | 241 ++++++++---------- 2 files changed, 108 insertions(+), 144 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt index 3e0b334c..c41b8be1 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt @@ -52,13 +52,13 @@ class T7DataMapProvider(packOutput: PackOutput, lookupProvider: CompletableFutur .add(Aspects.CORPUS, 2) } i.item(Tags.Items.RODS_BREEZE) { - it.add(Aspects.AER, 8) - .add(Aspects.MOTUS, 4) + it.add(Aspects.AETHER, 6) .add(Aspects.CORPUS, 2) } i.item(Items.WIND_CHARGE) { - it.add(Aspects.AER, 2) - .add(Aspects.MOTUS, 1) + it.add(Aspects.ALKIMIA, 4) + .add(Aspects.AETHER, 4) + .add(Aspects.INSTRUMENTUM, 2) } i.item(Items.FIRE_CHARGE) { it.add(Aspects.ALKIMIA, 4) @@ -99,8 +99,7 @@ class T7DataMapProvider(packOutput: PackOutput, lookupProvider: CompletableFutur .add(Aspects.INSTRUMENTUM, 2) } i.item(Tags.Items.FEATHERS) { - it.add(Aspects.VOLATUS, 4) - .add(Aspects.AER, 4) + it.add(Aspects.INSTRUMENTUM, 1) .add(Aspects.CORPUS, 2) } i.item(Tags.Items.ENDER_PEARLS) { diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt index 47c88b90..1a0ae71d 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt @@ -3,21 +3,7 @@ package me.alegian.thavma.impl.init.data.providers.aspects import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AER -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AQUA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AVERSIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.DESIDERIUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.FABRICO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.HERBA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.INSTRUMENTUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.METALLUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.MOTUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PERMUTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRAECANTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TENEBRAE -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TERRA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VICTUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VITREUS +import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Items import net.minecraft.core.HolderLookup import net.minecraft.tags.ItemTags @@ -28,227 +14,206 @@ object ToolAspects { fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { item(Items.WOODEN_SWORD) { - it.add(HERBA, 8) - .add(AVERSIO, 1) + it.add(Aspects.HERBA, 8) + .add(Aspects.INSTRUMENTUM, 1) } item(Items.WOODEN_PICKAXE) { - it.add(HERBA, 12) - .add(INSTRUMENTUM, 1) + it.add(Aspects.HERBA, 12) + .add(Aspects.INSTRUMENTUM, 1) } item(Items.WOODEN_AXE) { - it.add(HERBA, 12) - .add(INSTRUMENTUM, 1) + it.add(Aspects.HERBA, 12) + .add(Aspects.INSTRUMENTUM, 1) } item(Items.WOODEN_SHOVEL) { - it.add(HERBA, 4) - .add(INSTRUMENTUM, 1) + it.add(Aspects.HERBA, 4) + .add(Aspects.INSTRUMENTUM, 1) } item(Items.WOODEN_HOE) { - it.add(HERBA, 8) - .add(INSTRUMENTUM, 1) + it.add(Aspects.HERBA, 8) + .add(Aspects.INSTRUMENTUM, 1) } item(Items.STONE_SWORD) { - it.add(TERRA, 8) - .add(AVERSIO, 2) + it.add(Aspects.TERRA, 8) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.STONE_PICKAXE) { - it.add(TERRA, 12) - .add(INSTRUMENTUM, 2) + it.add(Aspects.TERRA, 12) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.STONE_AXE) { - it.add(TERRA, 12) - .add(INSTRUMENTUM, 2) + it.add(Aspects.TERRA, 12) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.STONE_SHOVEL) { - it.add(TERRA, 4) - .add(INSTRUMENTUM, 2) + it.add(Aspects.TERRA, 4) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.STONE_HOE) { - it.add(TERRA, 8) - .add(INSTRUMENTUM, 2) + it.add(Aspects.TERRA, 8) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.IRON_SWORD) { - it.add(METALLUM, 16) - .add(AVERSIO, 3) + it.add(Aspects.METALLUM, 16) + .add(Aspects.INSTRUMENTUM, 3) } item(Items.IRON_PICKAXE) { - it.add(METALLUM, 24) - .add(INSTRUMENTUM, 3) + it.add(Aspects.METALLUM, 24) + .add(Aspects.INSTRUMENTUM, 3) } item(Items.IRON_AXE) { - it.add(METALLUM, 24) - .add(INSTRUMENTUM, 3) + it.add(Aspects.METALLUM, 24) + .add(Aspects.INSTRUMENTUM, 3) } item(Items.IRON_SHOVEL) { - it.add(METALLUM, 8) - .add(INSTRUMENTUM, 3) + it.add(Aspects.METALLUM, 8) + .add(Aspects.INSTRUMENTUM, 3) } item(Items.IRON_HOE) { - it.add(METALLUM, 16) - .add(INSTRUMENTUM, 3) + it.add(Aspects.METALLUM, 16) + .add(Aspects.INSTRUMENTUM, 3) } item(T7Items.THAVMITE_SWORD) { - it.add(METALLUM, 16) - .add(PRAECANTATIO, 8) - .add(AVERSIO, 4) + it.add(Aspects.METALLUM, 16) + .add(Aspects.AETHER, 8) + .add(Aspects.INSTRUMENTUM, 4) } item(T7Items.THAVMITE_PICKAXE) { - it.add(METALLUM, 24) - .add(PRAECANTATIO, 12) - .add(INSTRUMENTUM, 4) + it.add(Aspects.METALLUM, 24) + .add(Aspects.AETHER, 12) + .add(Aspects.INSTRUMENTUM, 4) } item(T7Items.THAVMITE_AXE) { - it.add(METALLUM, 24) - .add(PRAECANTATIO, 12) - .add(INSTRUMENTUM, 4) + it.add(Aspects.METALLUM, 24) + .add(Aspects.AETHER, 12) + .add(Aspects.INSTRUMENTUM, 4) } item(T7Items.THAVMITE_SHOVEL) { - it.add(METALLUM, 8) - .add(PRAECANTATIO, 4) - .add(INSTRUMENTUM, 4) + it.add(Aspects.METALLUM, 8) + .add(Aspects.AETHER, 4) + .add(Aspects.INSTRUMENTUM, 4) } item(T7Items.THAVMITE_HOE) { - it.add(METALLUM, 16) - .add(PRAECANTATIO, 8) - .add(INSTRUMENTUM, 4) + it.add(Aspects.METALLUM, 16) + .add(Aspects.AETHER, 8) + .add(Aspects.INSTRUMENTUM, 4) } item(T7Items.THAVMITE_HAMMER) { - it.add(METALLUM, 48) - .add(PRAECANTATIO, 24) - .add(INSTRUMENTUM, 4) + it.add(Aspects.METALLUM, 48) + .add(Aspects.AETHER, 24) + .add(Aspects.INSTRUMENTUM, 4) } item(Items.GOLDEN_SWORD) { - it.add(METALLUM, 8) - .add(DESIDERIUM, 16) - .add(AVERSIO, 2) + it.add(Aspects.METALLUM, 8) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.GOLDEN_PICKAXE) { - it.add(METALLUM, 12) - .add(DESIDERIUM, 24) - .add(INSTRUMENTUM, 2) + it.add(Aspects.METALLUM, 12) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.GOLDEN_AXE) { - it.add(METALLUM, 12) - .add(DESIDERIUM, 24) - .add(INSTRUMENTUM, 2) + it.add(Aspects.METALLUM, 12) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.GOLDEN_SHOVEL) { - it.add(METALLUM, 4) - .add(DESIDERIUM, 8) - .add(INSTRUMENTUM, 2) + it.add(Aspects.METALLUM, 4) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.GOLDEN_HOE) { - it.add(METALLUM, 8) - .add(DESIDERIUM, 16) - .add(INSTRUMENTUM, 2) + it.add(Aspects.METALLUM, 8) + .add(Aspects.INSTRUMENTUM, 2) } item(Items.DIAMOND_SWORD) { - it.add(VITREUS, 16) - .add(DESIDERIUM, 16) - .add(AVERSIO, 4) + it.add(Aspects.VITREUS, 16) + .add(Aspects.INSTRUMENTUM, 4) } item(Items.DIAMOND_PICKAXE) { - it.add(VITREUS, 24) - .add(DESIDERIUM, 24) - .add(INSTRUMENTUM, 4) + it.add(Aspects.VITREUS, 24) + .add(Aspects.INSTRUMENTUM, 4) } item(Items.DIAMOND_AXE) { - it.add(VITREUS, 24) - .add(DESIDERIUM, 24) - .add(INSTRUMENTUM, 4) + it.add(Aspects.VITREUS, 24) + .add(Aspects.INSTRUMENTUM, 4) } item(Items.DIAMOND_SHOVEL) { - it.add(VITREUS, 8) - .add(DESIDERIUM, 8) - .add(INSTRUMENTUM, 4) + it.add(Aspects.VITREUS, 8) + .add(Aspects.INSTRUMENTUM, 4) } item(Items.DIAMOND_HOE) { - it.add(VITREUS, 16) - .add(DESIDERIUM, 16) - .add(INSTRUMENTUM, 4) + it.add(Aspects.VITREUS, 16) + .add(Aspects.INSTRUMENTUM, 4) } item(Items.NETHERITE_SWORD) { - it.add(METALLUM, 32) - .add(DESIDERIUM, 16) - .add(AVERSIO, 6) - .add(TENEBRAE, 8) + it.add(Aspects.METALLUM, 32) + .add(Aspects.INSTRUMENTUM, 6) + .add(Aspects.TENEBRAE, 8) } item(Items.NETHERITE_PICKAXE) { - it.add(METALLUM, 48) - .add(DESIDERIUM, 24) - .add(INSTRUMENTUM, 6) - .add(TENEBRAE, 12) + it.add(Aspects.METALLUM, 48) + .add(Aspects.INSTRUMENTUM, 6) + .add(Aspects.TENEBRAE, 12) } item(Items.NETHERITE_AXE) { - it.add(METALLUM, 48) - .add(DESIDERIUM, 24) - .add(INSTRUMENTUM, 6) - .add(TENEBRAE, 12) + it.add(Aspects.METALLUM, 48) + .add(Aspects.INSTRUMENTUM, 6) + .add(Aspects.TENEBRAE, 12) } item(Items.NETHERITE_SHOVEL) { - it.add(METALLUM, 16) - .add(DESIDERIUM, 8) - .add(INSTRUMENTUM, 6) - .add(TENEBRAE, 4) + it.add(Aspects.METALLUM, 16) + .add(Aspects.INSTRUMENTUM, 6) + .add(Aspects.TENEBRAE, 4) } item(Items.NETHERITE_HOE) { - it.add(METALLUM, 32) - .add(DESIDERIUM, 16) - .add(INSTRUMENTUM, 6) - .add(TENEBRAE, 8) + it.add(Aspects.METALLUM, 32) + .add(Aspects.INSTRUMENTUM, 6) + .add(Aspects.TENEBRAE, 8) } item(T7Items.IRON_PLATING) { - it.add(METALLUM, 16) + it.add(Aspects.METALLUM, 16) } item(T7Items.GOLD_PLATING) { - it.add(METALLUM, 8) - .add(DESIDERIUM, 16) + it.add(Aspects.METALLUM, 8) } item(T7Items.ORICHALCUM_PLATING) { - it.add(METALLUM, 8) - .add(PERMUTATIO, 8) - .add(INSTRUMENTUM, 8) + it.add(Aspects.METALLUM, 8) + .add(Aspects.INSTRUMENTUM, 8) } item(T7Items.THAVMITE_PLATING) { - it.add(METALLUM, 16) - .add(PRAECANTATIO, 8) + it.add(Aspects.METALLUM, 16) + .add(Aspects.AETHER, 8) } item(ItemTags.ARROWS) { - it.add(AVERSIO, 2) - .add(MOTUS, 1) + it.add(Aspects.INSTRUMENTUM, 2) } item(Items.MACE) { - it.add(METALLUM, 16) - .add(AER, 8) - .add(MOTUS, 8) + it.add(Aspects.METALLUM, 16) + .add(Aspects.AETHER, 8) } item(Items.TRIDENT) { - it.add(METALLUM, 12) - .add(AQUA, 8) - .add(MOTUS, 8) + it.add(Aspects.METALLUM, 12) + .add(Aspects.AQUA, 8) } item(Tags.Items.TOOLS_BOW) { - it.add(AVERSIO, 8) - .add(HERBA, 2) - .add(FABRICO, 2) + it.add(Aspects.INSTRUMENTUM, 8) + .add(Aspects.HERBA, 2) + .add(Aspects.FABRICO, 2) } item(Tags.Items.TOOLS_CROSSBOW) { - it.add(AVERSIO, 8) - .add(METALLUM, 4) - .add(FABRICO, 2) + it.add(Aspects.INSTRUMENTUM, 8) + .add(Aspects.METALLUM, 4) + .add(Aspects.FABRICO, 2) } item(Items.TOTEM_OF_UNDYING) { - it.add(VICTUS, 16) - .add(PRAECANTATIO, 8) - .add(DESIDERIUM, 8) + it.add(Aspects.VICTUS, 16) + .add(Aspects.AETHER, 8) } } } From ceaccfe9b5796e40b129559146d579fdaad9b893 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 30 Nov 2025 16:31:38 +0200 Subject: [PATCH 03/40] fix icons --- raw-assets/game-icons-map.md | 31 +++++------------- .../assets/thavma/textures/aspect/aer.png | Bin 6590 -> 0 bytes .../assets/thavma/textures/aspect/aether.png | Bin 4205 -> 5409 bytes .../assets/thavma/textures/aspect/alienis.png | Bin 6685 -> 0 bytes .../assets/thavma/textures/aspect/alkimia.png | Bin 4882 -> 6239 bytes .../assets/thavma/textures/aspect/auram.png | Bin 5313 -> 0 bytes .../assets/thavma/textures/aspect/aversio.png | Bin 4905 -> 0 bytes .../assets/thavma/textures/aspect/bestia.png | Bin 4370 -> 0 bytes .../aspect/{humanus.png => civilis.png} | Bin .../assets/thavma/textures/aspect/corpus.png | Bin 0 -> 7654 bytes .../thavma/textures/aspect/desiderium.png | Bin 4584 -> 0 bytes .../thavma/textures/aspect/exanimis.png | Bin 5188 -> 0 bytes .../assets/thavma/textures/aspect/gelum.png | Bin 5046 -> 0 bytes .../thavma/textures/aspect/hostilis.png | Bin 0 -> 5883 bytes .../assets/thavma/textures/aspect/mortuus.png | Bin 5532 -> 0 bytes .../assets/thavma/textures/aspect/motus.png | Bin 4999 -> 0 bytes .../assets/thavma/textures/aspect/ornatus.png | Bin 0 -> 4217 bytes .../thavma/textures/aspect/perditio.png | Bin 6759 -> 0 bytes .../thavma/textures/aspect/permutatio.png | Bin 5117 -> 0 bytes .../thavma/textures/aspect/potentia.png | Bin 4981 -> 0 bytes .../thavma/textures/aspect/praecantatio.png | Bin 5409 -> 0 bytes .../assets/thavma/textures/aspect/sensus.png | Bin 7039 -> 0 bytes .../assets/thavma/textures/aspect/vacuos.png | Bin 5685 -> 0 bytes .../assets/thavma/textures/aspect/vas.png | Bin 0 -> 5989 bytes .../thavma/textures/aspect/vinculum.png | Bin 5171 -> 0 bytes .../assets/thavma/textures/aspect/vitium.png | Bin 4926 -> 0 bytes .../assets/thavma/textures/aspect/volatus.png | Bin 3940 -> 0 bytes 27 files changed, 8 insertions(+), 23 deletions(-) delete mode 100644 src/main/resources/assets/thavma/textures/aspect/aer.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/alienis.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/auram.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/aversio.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/bestia.png rename src/main/resources/assets/thavma/textures/aspect/{humanus.png => civilis.png} (100%) create mode 100644 src/main/resources/assets/thavma/textures/aspect/corpus.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/desiderium.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/exanimis.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/gelum.png create mode 100644 src/main/resources/assets/thavma/textures/aspect/hostilis.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/mortuus.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/motus.png create mode 100644 src/main/resources/assets/thavma/textures/aspect/ornatus.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/perditio.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/permutatio.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/potentia.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/praecantatio.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/sensus.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/vacuos.png create mode 100644 src/main/resources/assets/thavma/textures/aspect/vas.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/vinculum.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/vitium.png delete mode 100644 src/main/resources/assets/thavma/textures/aspect/volatus.png diff --git a/raw-assets/game-icons-map.md b/raw-assets/game-icons-map.md index 30de6896..2810b5bd 100644 --- a/raw-assets/game-icons-map.md +++ b/raw-assets/game-icons-map.md @@ -4,41 +4,26 @@ transparent background, black blur 16 shadows and 64px dimensions. ## Map between Game-Icons names and Aspect names - ignis: Small fire -- aer: Gold shell - aqua: At sea - terra: Mountains -- ordo: Overmind -- perditio: Shatter -- vacuos: Glass ball - lux: Candle light -- motus: Dodging -- gelum: Snowflake 2 - vitreus: Emerald - metallum: Metal bar - victus: Shining heart -- mortuus: Pirate grave -- potentia: Thor fist -- permutatio: Cycle -- praecantatio: Fairy wand -- auram: Sun -- alkimia: Round potion -- vitium: Tentacle strike +- aether: Fairy wand +- alkimia: Cauldron - tenebrae: Eclipse -- alienis: Orbital -- volatus: Feather - herba: Three leaves - instrumentum: Dig dug - fabrico: Hammer and nails - machina: Gears -- vinculum: Wolf trap -- spiritus: Spectre - cognitio: Brain -- sensus: Owl -- aversio: Broad dagger +- ornatus: Owl - praemunio: Breastplate -- desiderium: Grab -- exanimis: Dread skull -- bestia: Wolf -- humanus: Two shadows +- civilis: Two shadows +- vas: Locked Chest +- hostilis: Dread Skull +- corpus: Dinosaur Bones +- ornatus: Painted Pottery - unknown: Help \ No newline at end of file diff --git a/src/main/resources/assets/thavma/textures/aspect/aer.png b/src/main/resources/assets/thavma/textures/aspect/aer.png deleted file mode 100644 index f09adccdd6198300be0ae8c7f68aa7a1560dc2f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6590 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 LNkvXXu0mjfaffWD delta 4196 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 Ef}0VRegFUf diff --git a/src/main/resources/assets/thavma/textures/aspect/auram.png b/src/main/resources/assets/thavma/textures/aspect/auram.png deleted file mode 100644 index 72149f1fff32886b54c49f1c061cea760045c5ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5313 zcmV;y6h7;TP)j{00001b5ch_0Itp) z=>Px}dr3q=RA@uZTM1N?=bHYaWs4#v5s)nbL3Y<-M}%H2;=MYEq;RHshgPj;ENWZZ zx(ukLa_0u=2x{S8YrT$ITdlqAR79(_DoO>V6{SU4tP8TpQh|g;A)uJ?$@yQ-M@$G< zJs2zCvxDW&+;I_ zA+!Z!%!)B)$ryW1Skyhnn3gft#Tdh9DC7Ty@T55UON$!F;&3knhrnXS*ihlL$jZuc zoIH8*SVu?4J&dutjImC^3!s1}ay+i($xX>}SPXzl|XH$nD#= zk6*ZO;RZ`fOIbrh!x;w$ha|>W4P&f{F?NS@{bwRP364d>Rjq|s#bOYXa81M~DWNY9 zfYR^`xVi&lOwrQPl0IzMu+ex}eSQ5;PEJmLWsFrY#%?pl+Jt96Gq)#e0hr*bwzqEG zny1ld>c)&2lP6dQ@d=RX3!zDgP#)afl`%G2r_+5-CM_!~%l7y8|AaAioiSF+7;Amj z!oyk=qY}oL?B2b5hwAI=PrA9e{f`iv8o^3X03kG4i#&mM`4NmUkMrlxFPt=K(yJuA zTCJ{<$zF$20R!-i3lCIydz`GtF*NA9X~(6=_Hj_t8KNhv02R+D`kvTGRB}(C={5|A3!y$ zpn;-2gon%9F~*!OUAnYr%$PB6;w_z>oz3a#>FM$D@nu4c0;FIq3IlinLIDfMdlB!p zj4@}%m~T~8)fzW9x3T<+4<0=D@yjp2e2_6#&KPUt5dWDA?|kCKiOBHq@b$d4%FD|y z1_T6r$r$@hSg=}%SIX5;011zHcVmqCcXV`Ywzjs0NA(<~rKP6>0s_(*W7mLz0;Uj_ z7+RJ$B>&kY{}`y{387)Jk&LlX8jWW2@ZrNp@hgGL78VvB4+#l5A}9f94J9BH;JR24 zJV?eEb7zbN=ybX*hSCUepTHQqB7hz|3E6~4e3AicBi=!Oi4OB2*W)z<6&}|E@W93Z zREmOvg84x~LGz6Tm{zN8`TqOw_bQdj9L89kfCoTrgaDA<9tzCO&3!F2G*oH$3?c4U z2ytH}04kJ6!tnGMAqgBYC&aY2=0#sj`;1j z-;x|0970Sf?&{U6-}(6XY!b*0ga^%q@RTu#a{w=Jf`336xCYlER6vg@`}7n@k0U%^ zj3D-rsyvdDlY`f;T^rw5enCpKva&)h$6`cx@811HEEe}dc*FazUAuO~+uIv>0JjHj zz=AlSJXjfP0OuHyk&)pubLPzO(W6I4;9Vk-=s{Cc(-9{pr&Nw212gm#{BeXQ>%;xQ z%kg3tFtp0b%2jf?JkXQ^y1Kg5d3kvm)2C0*7c8S+d|FzXhlhuU+}_^aNuf}9%H{F^ zdPYM-L#~5^L!yB8zzd)~-i>=Sl$0q62?=0jy^fBKj<$k=f}E*Sr=Awl9%2yM=ig5PiIbC)o&5a# zB-5u)4{L62{#l_={9W)C)DCcWC><6@*f|sz7ymgRAYhu|dvDyhamdTd>u*A)pyG&1 zW8LEjPxlyBWw5@dTCM&si9~|*#TpwM>(bNHkE>KFK@;uy~z6UtUl9Q9Yt3L zaCrUo*I#sZclR{}LThVlD=>zgsB!)!I3Hpu~5`u!{ z;3P6Z*Xhys{Q2`CFTC)=RUzfr>2$iC<`%nW&z>U-7cRWIckfh7I=bz4zXmrZ@raD=8_-2@DL}#u&RHfFxfH_G*9VliU=5x^9S#UH_K z*RNmioRpNb#MJXdA`!krb%|IfQUrH@r1MLlMZy7SaDpU|g^4-g|3M&zrlzL4&Y3f3 z3Kn2zXJ9Zltv^bCi*8NB+N4=6bVpQS9hnSrA6!O>kHg4 zdQ?_cmb$yU|1X|@>eQ(zFTM0qPx(tXlh&Bl!z-9ke{18r?>9RmXc|6pu&7cXA?G$<%28LR9bqNfjQ^OYOl>oe*0d}#=xg4Pmj8cU0h*a1wE+xq>ihI5DJhD`$jA@^8-d26ZEd5|=^iO+o`x2Ll$HfV&(F{I z4h{|mn8TXA+4q!A3ogg z!Gj0SJRsI020x(+P5apOkKs#U8n>jTpR z>A~Owf1w<0UnQ-fSMbe3a(_|)4K4MP9HFx#M}M!Trsf4_XXi)w`tNa##KgqiDwV3? z)TvX?8>6}Wvr!!)H1qTGzY@3rdJ7;yt>)@^dJcsHjg-+vfqUES+O^Bw+uM6&XlUpq z0Vnirtu<@bj9tEb`OJ|cN8;a4^bmuD&dn%MT#r+S}Wg4fGvl zWo29Z{r%BoY3PseWObUY={q*xe*5i=h=_<)Fe&DA*4Eb0Xh&97R^XgDbKZFprq0UB zx{;fkTOJ!5D|^_-8zGfST3A^85j40z!c(6f z;0E%8ewmj}r$cVgohnSJ(0Ui#s|x?uf`*LNu;9NfEG#hY(tBQedwX+zef^EYhY#n*$H!x&P3ewO8}dEQj{N+5X>f4xujbI6 z-;974xgR`uaJI4jI2KVO|=dHeS521iH7)925hA2(^zB%i*7hgGw)vv)*9M4W}? zFI>3b8x#}-I!k?jk^w?NF%XRCEit+tO3UpU>+Xx>P+J<7LGE_{=9_Q+H99&v&dg#p zCr_T-HGB4K?5Gfb_0?C;M@B|Q^KIrYzWCywv9YlgpMU~dwXO4PvdT~Dit!km5I;e6?|o9bV|!JI-om949Z;nK%%LsDY37v4rpdq zSJ&;XuCAH`2M+9eJyZ5uak+!w+i0&LB2^ONCTKvVVnBNH0}IFK2{6Nn53 zk&3divczK=92u+W<~Z=%1B<|4+=ppb|=ycExX@<4Q~Km71RNkT#bkQ=-k7P6|V zt6L_KNPMnezh0!%=?0aSmR8N3I~RbZ?=>VQCXRULop=63rL-`$-71W%(bb{-d9XZh zVY6FTj1@LCgdj5Gdg#!h@W{x>cMUBhOh%CMun0Y6imVhEQZrqp@A0Lml zGZv4uMHvD$gmY?Y>bOOV7X61QQq|ntd{ZKkppJn1W1k*8k?_MT_?heE@MCF8BY5Z| z%|OAb`t-zYRU4I=nWUXhlT_J@@#S0)<@fA;LztkBR<%D!2W@l%Iy*PyYaDAG}_6dCEsybu1V9uS0 z7NZITGxTk0YT97vx(Vi%?2QN%4z|i<>WzNEBF{u*2)$ z1=54(5a}_u&H-;i>`w}zN|1I`kIu`>n;#Mq(reQ}T3Xust5>hiJ`ENqaPn(mUnC1H;upx1xxJMc6k&=?~VnRX! zSXs{@5{X_jvX`FUR*Gw>eMTD|piuoj|83j0jb5^3$tTUt%_k%h2`0p_y4kU`;X(&0 zoVn{MUBX)6^(cRRbvoTY=teHZ(bf^KsG`*$lVD}5)ou&{8~^Upv3nUVZ#Dozd4uYO*Tlar&E zHfk(bhFAP~Sl{7$cj_$wm}zNW2DYxToRve4aM^^#g>Y+JMT>C-x)3flB{>tmzp{ T3}2_a00000NkvXXu0mjf<#bI8 diff --git a/src/main/resources/assets/thavma/textures/aspect/aversio.png b/src/main/resources/assets/thavma/textures/aspect/aversio.png deleted file mode 100644 index c6313d5489f3bccb387f1c0565accf2279ea828a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4905 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 M07*qoM6N<$f@IQ>3;+NC diff --git a/src/main/resources/assets/thavma/textures/aspect/humanus.png b/src/main/resources/assets/thavma/textures/aspect/civilis.png similarity index 100% rename from src/main/resources/assets/thavma/textures/aspect/humanus.png rename to src/main/resources/assets/thavma/textures/aspect/civilis.png diff --git a/src/main/resources/assets/thavma/textures/aspect/corpus.png b/src/main/resources/assets/thavma/textures/aspect/corpus.png new file mode 100644 index 0000000000000000000000000000000000000000..159b42d4d488bef487de9d37cfd48f23f1fca228 GIT binary patch literal 7654 zcmVj{000mGNkle}f%wj!vg zs3Yzuh~fsKQrs=zg2`GVSksGAE1lufqZ*4y-S%iYE=?5hOZ?F)~)bAR%2ZYZ4YUGU z0t&$~mIx(b>AONnLmuN4j<^*@dQD5Z{`V(yAhb11kl==w-BubgSWAQRB}kAs36_B( zaLJ&|7NIX0ZS}ziADmEGS$Wqt-+XgE{cQmI1qH%;5(vIKz6FaYFu}S)%oKua3k+ig zknQTpWH@t-lQZ9UT~A?1FO+6hVq`d%4mG6Kim12w_SvwEPNy!BrJ9fN~w$4B&;V*yr%lTDRRnrj47~U0P5oKJDQVSDb z4s8Ej0+12#q#ii~QR=1fHvwag6I>*RE*C9iyrvCf2_Q&VOZtj1?awJgadE2wlpO#C z(DtjZzFJN_p#9#IdjK-pb<<=+Dxxf0 zwrtr~l%ZwI!ald$a?3u{6+nAjVLSEsTz~!beW-L1mM&c?eySl{KYn~aD&2tYd3kx= zDZ{2sRhuZIHCV1#v0}`E1q%kxm@#8N-W9m+AZ-c(TuEt`et{u7e;l;)o>VLSNfFAh z3&^zQEflqG-TJ4^nl&pKJb3V>3|G5aLd)-#E!)g{e5$Lf)tH2LXxp}}nvU&b$BrGo zdGqEglgYZVKl|CwhQ&sHuDIfgQ$GCg!;_~>nfjwPZQAsrDU_9!)lxdQ>m7I8aZsmD zoz6S>;DhfuVLX&HJ3Bf)Qh)m=%X5g|^+J)bL z|NUGi5WtRxC^f7A+MIIgscT_+gMH_ncizCYYuBEiOeU`$IB?)Gwh09V1%&{3623M- zyY}r%4m|L{0srzZ|NPTbe+Za<$@SM=w=aXbAAkJuLn-64#~ypUNJaCPE+H)l-BJO_ zL(>JAka`l4!I1h(;yS6CzszuA4s{U~u}vLM;JJo(8B_o*o_Xe(`872)>+}_Z+mGlg z0oq@8-F4kz*7;%2J@+g{IQVyTs<5ScOBG`R0$DwK_UyT{X3cs7O)s)d*n&B1*^(OL zyTC5dYs}cOXU?2C^T>`JON(;Fm^yzBS({bLsd4r#L;tAbP+L}YZw5vR-L11|1 zlgwnkp~HdcAgA>5KKkgRqYgUgp#SVhG=BBfSJj@27L6D&Vlzy98^GPCPoE!!5IX(& z&woDgrkifM2(1Fn|AANM( zzC?$%TUa9fC5c30GK?Cf!wDyxpkGQ<<;IO0*E)v&I)rOr+)U84v^g}(&fZF;x^LgU zYL03MnDeSuty)P-eD|k)yY?km*acYHpndnsnrIWKRz4X#mY+>)}YiO#~<(FSRjELQB_3G89Fs9*o_0?H# z_v+d66&fldgH-TYBlQ-lTQ+Ri5SeGE=z(yz(Y6hDXwYi?oH{hC_UH~_%$PB~I&|!) zFB|z+&Y3f3cJauH*gk#wyvqawUt3DSx_I&!Bd_u(&>fnXeS(%|fXq6f z)$}K(_vPJ16-IVxY3cLq$((u6-@g6b#~yp^3wPdm=Y1+7j(~Ck zY-0TQ@d~-!?YH0Fm-o4g7cbWTg?J9WsAAvgX0_rF&F zN>D4v#T?&Uv}jQbM$ydS6f<86ECEL#t?fuzEnq22DFY_E=fsJ>meB-(irvB15YUuu zt|`!%4D8|Us6=5?Hau*r3){A9dovA-g=??9_Wk_){81!4AMhRu3i4b2>Q}!S`p6@X z^dB{9)J?Ya>eXuurF7>|%AXLh=-^-KCB#>y;(IePu`>$_3Jz@1qD8+;F1h4>4jm)W zQfUameYBvss91mEHH7kY<;#2a?D_Qk`Sahm0gZLV7nSz5BaS#C3dwe2gY&a6@%3A` z)~vU!q@+YfWn8V$ln4aYylbwxrUQbB2@Z`$_E}xJbh(qdnd8@#-=?8+=gxQH>$q9M zpxgP}bI(1KzWBWI$}7L7k_X7VYsg<#NJf66*~@e$gznvYJp1OGZ(c*{TE@fxk%x{L zG2#k*?TFW2d+need-gEehxO~%f5RR=i80GqbUtPnnY!@83y-EPnmKLm$67>B+FU0Y zSe<&nBCx2q6=mtOwh;?jUv<@0M<9F!7~X#S?WgzIXP>F`eGjYzj1Oxde{~3n6(NN0 z5!6Fi)GX=^&*P6j{s@6qx6_L9=}-v9vj!n32?-Lcs|D)GI-=$Wxw*Ml;-fNEk)NMm zjP_1A=9ps!f+!{#Xn7)awXlqG#dqI*_ZDR!SPj5Z^x4|-^73fr3r!SLvQDs6pbA1EWXUk|Xn8LJk@#T3dq8iMKo0#`Ns7ttQDS0(h&UW}|RaI5o z4RUgF+}g@3Dk@}v;UTasaEpkHH@Dy;nLsy z<~I^A9fI?vSIDH@_FU-C!A<@wZWI|tj~;yZMqV{?5EG-h<6}=!hrnPGqvmAPdIkCVJ^0%h z-Me?chcRo&zUB}cURk+vnjPobd+xc%v%9;4Rw>h#zVAV> zyYTeWPy1Jy1s6{upujIa{`li}aWR!dTL>*%w%nVo*!0`^k$DswAUv`C`xPq|RBf*M zIPJI2fbgymb+C0LyJ^4u_Ir!ECa4A^z+j^EqcrJjhD3O%1@T7ztl=%Dt(5p^qKZ=A zG=M22-KLB--AGt}_~HNb2G+0$4F>{mn?ZvH4ZZi?d(#5&O3NIf1jc`{_uhLS9~>A` zf7}T^#cA@f{rBJhS$2&(KKbO6w^Ka?i*4I-8EWi_W)I^Mn5^dHHn*@v;pHs$%NJgF zVbZ6ce)@V@S((8s&c$q3b6oAjWSCCqJDuq8Hb$$k-jVlqNYh+ip)f8eW#fm!(o}Oo zNGcpHN1-5$pxX%6ZL=>yLiO&#g$rX6BZIimQ1HvN_}dde`_g^_Z4D1umbT0)e zY=95*gE)p=r$a~vmDfyjg;tplE*$-qQROF{bkaPu{2c!F67SF(0y%n55}1pUb;;YR ztGC?FUEM_B4qV|fv~)Ry4xc%5=0HreKUz9~c?zW-5=LBwBk>9(mwtty@YCQs!U_2t zbNgYsr+Bdu7iVy3Y3WebPykw4s}oN=F>bqbH9Ty0x{>&{(WnrU!-o%dE9MnU$#})3 zt7gl*jR+tCL?I}71rarI_St9e?EthLi}X)kUS4aCrKLdco;`b>j9^a1JuXH&*Krkf zHwT}4$*-s5xBo@Nzpb*e;&u)}6UZJ%kP4p*9<9KrEyKLVxRdkVd+!~}$?wL~PCM-q zVvn~&^reS{fG|9~|X+ll54m zJ(hS1?%9Vi-MD-?_Vm+FZ*+|Y%_n1$BLTT!&?og%C8IxEwkEYDQ3wI;Ro!ySt(ExG z(xZ+#YCh3<29kdQ#>N9<^Yik4fi?Uhkw^@?|Ni^0^D?i7n-k?#emUMr=(9x7g>I=T2Y{ zbC;;(Ua=vHhm?Va%)jRRWxm(fm6yy%&HJJjvbj+yAv0@_iS~xsJw3BK!2$U6p7`4U za{d!BqhAgkI`nFoGH|(s2zh;?z@5eGiMOq`l$6HCFPar(uU`=%}yME1`jT7gh^3 z1f)NaUOv8L$>Qh9$rqB~sL}dqA>Nh{z}%N(8)m)*BG@4k?%8ROc-n$N(})`|!vi%- zT<2@f+A^R#vqLgyb%OY$L4WqpB7%(0={@Ia2zK3CPc7EQbr|QJlo*RHMFKYG;umY!p{36d$b!d`#aVTZktRtV!vesqiVt2vG`XNL#c z0%?0kI-=P(Fb~CQO{rH_BuPq9|@d-M00bN32DgbHG1=P6o$hd3TuK;W-$6E3IWI#DB zxyeD$VdGnGy=5v5${ioJVAqP8mtX~;iPkdIQi#mpQwk(7K~3r_YRS3?oSO!w;shbc zhzu3qcH3>GIeB>!6NvcB7cW_I5<(bF?6`=?J!;C7Df)CFi1L^$?gVx5xxNg_ED8vM z%qr+KjS3+Oi0yG|O--#D4@dsw$UflO!k41OtmS-On?9`VnILMuz9*4jVF{2BwdVHF z9Hwawp+}D%-S~Jhh*)r8O-;>zR#a48&qT*(Q99Rg3dZ>+8Lc?HoN6Qe0T=0m@9%}% z6zNLrC`;IiOhP<0x}N5rCFhJ+@Cu*?an^*80D?@bB>OCV*ZNe>Ix@RAo!g~rm;QYC zQ23j1xpoL#KAx^hn9Ty*PjqXPUd3pVkGx(nv!!lD3lW2{|Uc37(Z;E zlhe#hig}P1qN$5YVaR+7GO)ea&kqPc_+zVEK5pE#Pq3RjLJ)(g1i}akTILm=cp!yn z5;zzo1B@nR*fvVNiuMo`&Q=Di{Yv7)l-l|vi=(SwdaJOoSzESL+uwu=?)?<{b|uaH z022up&SkQYscH$XZ!^{?<=7ugS^4y{h{MGf4iF|zocJ`_oQ{;A!fzV3 z82Tcm^<`r6n+-+i~rT!pL7roZ74IlOtVxXA@Yf;k0DFl-?uB}L5| zNXj~n2>%Dn{jqe=JL{~o{6gw{wQFFr6vSh@xVEviZRKc5GLwM)hIRd%wDSG;-~XIX zOz)$mg=^NVdAp*b;??h$FZU7@^Nz#C!KC_v+Abak)Ujv{awQlhD=)a z+}w1geFYZy3Q5+z+%VlpMtW%?kr+gx_9{3xNVG^?xQ2#JXPj}yCzPhF=}fI0M!uoV zTUr0bg#KBCM1RU5$Ll4xz#NF+iI!7+&N=6N(V=69Uy}mgQIqF9RJzNF1u_V_)Npi85%S%^Xcg6wqo`qGR!Gd^Oe->Dt;6|YlDcEza#iv zK6uEGUxJLtnrH?kY3B983KvG|Gl?5l&YwSjS~?LSrVQX4-??bQ!;?g~Ma6Z%CG#>w zwf+%neRXFA>q@(d+rm)k7GD|d<_3amsK^z}M;O7p!EsyCnrCd(ngRe(5(pAvyPud8 z2y=rsu!qD7KXu&sQ4rmeYCeri9FBJprM#3Z>|um(8D{<#K3SHPm9=f)z=5wZS3(ss zW*gm3#$8jOo2RkH%MOo+B1c34P!W%Ubp3irTDpb|TiS2HtCe6eGA~BY^y0QqFQND*rFw-Z@`QGPg{Dg#tQiS5TYPiC{YEn3i>g<_-Sc5R`5cP9zFgj;w3M<}cW#SZx;N+U}^744GfVLhah+MN^!2&-W z1rr~xnFcViHPC@P-D@f92qWpo1BD8nq*B(zFtwyw*39)o8K*6t6C5Lfj0f9JpCo~M zryW0ROwzDhh+=dE10|B8;juX~PD@our;a_V8CO%FXIMh=4YRM76m{A{V~yg z!20#;$Ft{O#X-W$L^CH-RV*O5&$^b3$)G~e#07(*W*E&6+^$Ozb_u&3;3~|lFPhYN zY4T*^$zP^4xKd6i04yM|3k2gp zdJXZ)tb(vq$hNs=69WIe{$yZ>C=xPHcVWzcFn}elP4btN?ajm z0d9%z5T?V%17TXc3uUpF*-UaHhdLLLn#s zaSAL`Ur=j!GMh5%4Fei0yJKF)1ueiJwRzaEGd|7D$vK{{ofm=PD{y}^Zrr$!$=+^Q zwrrVa0-93~c|g`P&pdP3efQnxZH@kKAWTCmMp-vM&@HqK>hWx!*-l%q-vFA2(Q6GE zG)o?scJ=Jg4aFH_GZ59cHtn}D%{<#v!Y?EwEWybCJ-E%@RxxNTIe?#$sHPqSQp~;m zcZ1Q}w{L&@wbx$rA2a2JWZXWbSt^Cp zVwt}XmHE26x`>+gH=XQT9Ru`x1D<=dQNMyVx51dSJow;)S)2whrY-*C1uiEZBtCpq zQ-8BUobVquxa~EkePUHr)t`U|xso0kLfjht9~5rGrC!EjJVdGKd_HS+;T+JJ!;t?Z zU6bFD-tf2l$xh?=T_Vd6t1}b;K`$P7jQnncSVC~?i|1&VdX+=VS|a`ZTqDiqs5*vo z{YB*QQ@Id%kR@xUO`F!KxVU&QA5!`YoDID2(3hK$Om*hC>ki>RH}#8d9XJws;xVS_hh+rI05DH)&%#PxmeleE_ zepXt-EdMReGS2O{mzI`3%=-ockq-0|29V)Tlq4(fG@Z=eY*8^)f))ND#-VMeeC(2Wx!UQBri~7hdHqnWM4&O247D#^x7P)j{00001b5ch_0Itp) z=>Px`qDe$SRA@uZTMJN>SC&2vA`d~K8xRODbtq||1=^S>8po*d5m!0_*`Q14G0wON zDc9Lx83@Qju+juGGTAt8bZ4fS~!^E>BUBsB3$LPYr35s|&{!N2jHnTQ6s&!F(##P3Sjz(l>s z8ngouO(r5oBErA%djS8QhN=H*VZW3=9m6xq9{LaivmOLPV`Z z)J8-PiKyF#6^yrnEYBM+@C-N)8rp@XrxB5ih`f&B#fWj7n z2M-?9OQq5eiKvl?jDi)w6--3bFT?@Ff^l8r0iH#1_%$@`K}4R=^hY0k6ux@(>SYlT z5sOFKb#HI)qoSgs-=?Rh|BbT(xB&!!*Z}b3Du8DN&r%pP4&VUow`b3u=vAv$tqu(h zT{;qI{`V%6sk6SmzCtdS|DK2%i0D2Mbr4a{LM(Kt+S=OGnKNg;HX6{@ z*BT6lZ{%|MABgA<5j7FfgNYD;Snxw#hwqWfpmiT2n%Udi`zJ?7N0|OIt!vk={WUy1 z90I841b|F{7%(nDa3t`2`hst>#quu$Kb44{Bcf2V+5G2cLe1SQ2;e^i0U!`E3*gDn zm|r&>c%G8NwDDorv)}_EK=S|}Ktyu0*^JHpU>S|ZPG4VNp15#16j z;1Ln^4WWG=4^NP6lBMCy*_x;zZ$kiBkUSzVe!?PP_Rkd-7B1ShZCgH%u)MtdPE1V9 z)zs8fhuyn(FCR5}M7{g>%YA%&GK3%q9)JLdck>p=tdzG-{C-HfYzsVNXwWFn&Y)cg z0KW%tYyfEpn?RcLK5^p2>a}av{+b6^QBiSo{`~p>3*wTNmNxan4?lc;ECOh3Z2U_= zKmfP^*dX2w-^XGW%2F;Xm;f4kW1pvrCTsBQK@2!3sW*bzqeqVl9336K+S=M`FJ8QO zPNh;+5)n)g8-aw~E?l?}H*em&Bx`Vbz5Z`XrSdy$BqJlkGb1A-&e_>{idZ2$eE6`| z-Q9hgK!V`+Oz3RCut@9~9|!^afr4-yK5&z#$Py2pXKK(mfFptj8VrVC&YnGc1;1HP zQ=LwCdf~!_e-&OJ(P%V*Yu2n;VvE#Vx^$@`GBWZEHkO&0>Ai8|#+PQ!ocXhn1km2z z-XN37KIWJo3L$`jCIOVy5U@&E;H3Tg_j_*Mytz)O6(B6e79o%)nSuw;%mxpEiBBh@ zV69fWA}%iOpNHBch)Hd2ZIwcyC>12`kd>9?6Bid36&V>hkH7Eo<;&;h%$WlLU^(jb z`o&REQO^(c?5e7&3sF%~rv#z{(2VRb0EkN#O0Cgo0#qthjE|4cEO&SJ8A6=cEeH)Y z10zdMQY8b=Gc`nIn0jDwaq+7vmFnG*w1eN9Os1~$=g(IxUAh$X6q~c#v15mH>(;F+ zWilDkpk={g3JMAi<>cgmx=zZ>%=BEcWJz#jWF*q0#MRZ+wWg-Vpw((G=jZ3Qz+7{4 zbEm%b)?1*+W{E_?m%0)c7Z<6AhewdDJqnqEu|=dxUI2p(JTo8E+^E2iwnEHi^L{bF z`D-AAqeqW^ot&HuvwNJKojol+K0ZRBP{i;8xOwyD6@@}kE_}y01ltdb;&z{Z{&{dx zQqq_iqret{{u1kUQSMq zTS7uYWO#V^OY9oBOifKq&C#PrYj*A01xo;E$p;^N;2s|z56&=Y?%cUHD?vP?rKRQm z;NYPB^y$-4Qw+Hb21BV_F8`e%0MrW>uE0l2XdMp;E-o&PRjE{4#tNJR*KIHu3`(W) z8=*!Y$j#05+`fJLMkgmH#FZzjr>6)0Or4#bJtKjEbsaf!bHCM?qLfk z2)VSh^babP>c0fGh;-S_`#Ls*=pNGE-oD$z!z1`v!SfnEapFXAVq)S|Xf``LJ4mHc z&5w?b9<^oZ^?IFBsf4@0Rovct@4di}KmK^clDWOT{fTAIt)G4NS%Af(A_81oT)+cHy|h~G?-LRdYEl07^z^(VmgvCDU0huLC=eI>($doC<;$1+9=qa&r0=5#2-z>2xngM@K8g+-vKas;a8} zQBhF`i0JN9;E70KHk%O{pRDfg?!K#6uhzf#;)^g@)YRb1Fgw+5?Qxj8Q{&p9O}B|$2cf`5#8H8nMz_x1J75jsQ`p9eRF&%^93;Cp&{G|tY> zC{u@A2tZ|JWx7{hdF8So1j@+BkjBNuK?u?8M#0=I4UWvrOuxLmyks%E@9ysI)oQih zsMTtHZf>q?R#w(lG56WJ2CVYbsZ$4Ed+oK;LU9DT`;dW000Xm|A!z=$VqXLy7z~CQ zrBZp0_1UwsvZij@v}r+LU|>XEUfw5JSy>=3uFcKO8@#-{P&0^HATi$F-stJ~wYIkY zLMD^>i@H&`NN9*+E^tUlZy-1rj#vsE)`nsPXGTRu#l{z2cwxh6UV>{8k;}`=FDzTO z45cm`JE8Iddj#-gFE20fh*7OWhYlS}N=mBE%F6Q2&CNxm7PT508ZHF}27=at)3ad+ zl)$ROet<_+1n^!kd!x~q=i}q^qNq36xCs6C;^N|y>({RbnE+jN*6DPwi1BkN)vKT7fm*HhKte*owVgY62JG0eW5`U=*w|PV5D>7> zYV^g|^8EPA4Dj%G3;2Tv4=N)fB3?F`Oz!>t{Zj@92PdO&kV>UbcsR;VcXxL;H#au~ zM9FYI3|AN_aEcL1Nl8gjY-}uAVUA^GWvgRiViNfKIBkC`m^srn(lS5uV-p`s)d=ta z0dSUSi}1m}@ja}9KS;pd$!Y>iRhXHXiTelTa=EL&zrUqR8x#~2?CtFx_^jZCiVVIB z)5Tt-_wL>MS6^S>7x12rj*dDH4-fSAVB+v?7SQ;{hs`D?Hg6dnA3l6oDU-?Oba!{l z`uh5&J%0Sy5hbO;VCZBGg#7$`l!8Byp5WK`jvX{$T~(LL%E}dd+7qK?{u*I`nJMID zw4<k0*q?emz$4IkpE+~p9~LiOtP!(8 zq&HmG)z#J2+1Y6kPF-DHqrJWT_sz}C_uqKq4FtQ%2M->c^X8jxs>D3g`Wk^B*{JnBSFT+7R-sUw z$;ikE$j{IJ#aN!H(P;A0)6>rjT4(KQmO7E4kV3IwX^7x#jxemY`Mm%U6plqv_aaG@4!M>FJ=#n9ZSk%g*TV6BoYaj#rD) zv^6d~1O*NF_Rp%TtA9P(0|i3~N+OXI2;f(WWp@n?4VME0192Y$CbW*|jey3_<(^eH zPwoeJmg9rI_~HvyY;5e9tEV3X6Nvfr_x{5=H)1^H=dX=eqkTbhjAm}%TV zvj+h@*d1EdetY-sou87D@^9nu7KucHW}$;#uU{(${GB^@t^@@ILF>%dL28B?MUTf8 zEqRi0dz7?(ot>Tg92^{c%x1G)cXxLe=xk?aXE%O6eE1OmH@CO9qe!qUsZ{F9NRYj~ z{bM^jyS_=2CVelL%l{h%lU}b^i2;A?*s;&zM1vAcZ9=tk4qA;a0J(P+Hr=jWFz_&T%>%R*isb^02OKd^BX2m?M406RH}EZ}$j z`t^50LPFMz=AomxwxgrtmWPK&ngAS)2Sj*QiH#|RiG4rImrMw3JTH`+}u0|1_m5#Rd*;u>+9>!hlYmY#1+om@kh=;S0_~K z%;)*Y&$JKI2ki}MXlTe7ZeZEg)^^uuG~U)~wfdZ#9FP*`r!1a0WM^l4#mC1h6bgl9 zLL-!+D56k?0yNSZG|rBjOsKE(fO+KsJOUeh9?il~f$~}o3bTcwqQPLeF?a6VGR{O9 z1G8}N?CflJWQLtPccRpUCVLAC3LF&*h4ZVgzKVhc-?K6l-4^RIRIK%m`8sQw$iM?E zJ6iT9{^`Q>h8_7pWFN@L$e0=*A0LMF`2U^K5Wa!Io!meV9-4-Au;b;nT1|L(;2xqE1_#d0&Y;eW zw?8={@nZxxTN|}y_8>Bd_UQ1;EH5ut&!0d44bdovx$xx4lfPNJcI_8Jg983;U8;`9 zYeYZ88a)1wbcc>EW_JO5_Uu{s_S{%ROXXv5*=l1N`6O){r{4Zmjl7jp+ zG&Fo?G#bw?Uc49u4=5}mJv&VJqeORW0a%+o1JC{>jQM_$Mx$Bq{`>D|iFGJ2xVpN! z%JA^;V?t^}ierC8g-$HX>l4o8hT5|&@Vxff@icUJXH-{LzcXB?2RZ%Lty{X1l9KPz z($dg!Mnp$S16cOAb6{~iq4`O)ZY$OC`5%H|2aqjAPEk?OJhfWA1;;yiX$t3XOBXI& zh*K1dwE-|YG77LTaa3yT_~%dN>qC(o9usR3qtZjS2LkZ@@YGD0LYHV*|TR~TC`|UwJ;Syx&m0H zWi~Z=G77daJ^9H@-CDcD3DCOKMgGSJH9zfPWr(PwC3^2|lpqPwqK-0ZA|iShMDHz8qB92h5Q2z0 zdY93=|NVEZ_wHJ+t#{AaXYYM(jES_o*V3zy;0U`s=#@2KTz(nY& zr>aO$H4NP(AYiyrM<^J)RGKg+H!xVwx#ebY=0qpurNa2Bx*5cun-Ur6fFJ8F=ZL>= z%5XY}1xw}kBk!4;JZ3EzXh}(P3hb_8i6wnOKq*lpAJ3`A(XA6XOvO8Rk?DDxH6+wy z)Enwzo?gU zpT?I}iVLeb&p+WIV=cOZw2O01Ax$($jZeakot77~PB4O#fNn^@Pl)S!mBjqBcCMum z2uUucQvAMlE>eGX+3R)Q z3juXeVA8;ln=UO{xopW(ue1CV-TtkmAQn4-G6dd7zjL!V-6JuqoWiDaB1W~`m6?56}|PY4_s_xgQgcpWH`${{Sqatp71VY}OS@4pp{6&(korG0wrE#(_nOl* zVWh>Si{{MC46B#7x13XKvJmEG(T121OXd}Dm&0%D?FL&&jdbu$;Aj$`{-pEYEBtbQ z-QeJ$Jvn*Qtz+y!(|<7P!0hD@P>#3mtO111?vt-BPj;6&J3H0wYX5XpgUV%%b#>p4 zU@&W}7!xqEA^~~lL1Wa}p(S%XISzP@rcDAdtb36iAxiTzsEt~YwYph6l>`QeV1Bvi`7K17H26^MprcvZG1 zlF^rLXV9joy@1O{re^lh(UA>4pyJ1m9~oCyR~O8pj#Rsp zV0wCbRGO6MT6Ju#9mYhQTw8L^I7$ZYW@=`3k(`}9Cj)_7TFzC<6ew&FK5(biB}!P7 zxO%)PO9dlk4@^Zb@Dj6VEhO_}Agn1lIkK)t8^7$lv1~HFLgF$q774kz`^!5!ugX6X zKu=ReF$Yr18^4?$*)K(OTd} z+{ML(Z_2>x0e7>76|f*5*WoOw&DdHqt3|^6c-zGP=RJbc?a`xh zYq+s}Rz`;Oul|0XuirmP@rQ?*MSF7- z6BFW`pEsPeT8_%g%I;-kX7)ThX&DPyi~qmv)x?0Q54;)zx(>JuS_| zRe?RfJOC(2n6|by?duwuz_Wkd|8PAWtF!Ez&(y7%4iF&2ATi~%^C7_wjXTuT*BUd9 zTkY#$!UTCef_yuL!N<$X%RE1`pT5g0IvrZ|=mY93QTF<1T&83JxX2yLB0i`&cj(b< zQB_?{D>=x*%1Rlbh1e?^=!ZI^i zz35O(k@S~o#>U2iqN1YP6LWX(-Akci7FiL=ADx_>G!2J2c`}xkmNM%XX$*vEns%Vt zZr1+GysfOQ#ede}wdhl7&+ITx{iEYUTJ?0cJtzPl#er&CEUYy;&r{5MSz1*kAjr?p zpQ`rYj+@&)SW8Pw$k)smg+eJSC@5SvIFGlyy#~U;#3X2?vAGw($H%vKb8{04V4hS( zMMa(+C$MyF^_izO3LeIw^niX~3iv6mM#Ym9_L8!)1XB}}&fK0N`LCD2^_)tdm87Jkv@$X>!##3t({;*cJJa=q zd3kxuKvf4`)KN!W*|HzFT+49yxwB(?T0U*;>|EuxzdCBk1%pVQHe+MqWcvgd$m_Y5 z3BSJ$&Nq8|d&~YalHA;mhkqMgtKG3&ScN*}^dd7k+Le#Y$P?%Rc4A?p#cOlycp#A{ zcU4ahrALIO;&@Z{dPd^3RKHlu=iNKwd#1migv!%(K`yfauFx)&XvA`LD>+8l6K5@4 zst5;LwO(u%=h8DhF$>RtKG$1>P~CNiw)~6(vfdwfJYhT}K201dUz4NM9-lg`8$VuJ z6|3xAiPX@D4Ys#m!AO3*ilAf~BO)dSk9JDxTM-b6z0Id2g6;SWVzDMGI2=At8nV2! z6c=0;W^Rk)?%l%L*y9n-=Rgse2L@jKr(2*x-O$*0 zml*<~q6d*^)3Ql7;Oa+Y3v9?H7j8Cw6@*gWdwgcX_PDXJG1<}4@o7`Ty>zy((Sxtp zwp@Hc?n&uJE-qVk92^`D3d$TL?)0g-6<9q16ToE{#n3_)eo12@T$`LP-C~0VD90Ae4kD&|tke{FLe#b?uD`v%I zBQ4<0y|J-T)4nsrCC>s5S&$EDC#HBH78ff#H9S0gs~04!hdDbtGq<(1 zturh)O5dGrJ}eyi8ANDyoDN8mrD>i0Kmma19)RTHm|_qi-?b?VEB8BYQ8QZ;(#8jmM2d0}L1d}@qDB72DjlXG%%#;2!C z6LWHIy!zhX4JxZ?7h0*_B=5Mn*#3V1{{7+-uLvl66|umuteo5}rIXWo=~bInj*Oqp z$<8#d);EC6w4jWPj4}HhGQRHKz0u$^X!@7UkF1g^0e*gMdbnkATnS#Bnwq)~gTYwq zF@z$l8iH?ce&KL9^0ST=dJ+;!ckl>6&(r;HSTJtoalrbMLSeoTzo2(dq}2N%J>GUrm7k>JYDZp{n-2)l|>;1C_Ex8 zAt9j|08{C2i>r(6>TKf*6XBWPzZoMBvQ3FXZG^4Yo#_a{?0aB@jv)Ia+X&}glrG}G zSrGw&Vb}Q|ezzCHHb04z;)_E`wo-e}aO_yUfOI#`3qlPU&x*Cea@wNJcv+|Rc1_V#w*=H~ufb}pk%FtMlGs2u6^?)u_bYJPs+bDn#0V-_kK*z^+D z9ic={0|h~>UDO{WXqcPNyfj=n-{o%-g1x!@22LHYzuW4w+tT1Ll)?jqo6A}}r3rO? zp>A!xz+u>z^PYJTPQ^->d-)9>w}A)rymWiA5iGc_%yw2s4UOU&dQRx4}-y48XCkTd3cJS@bZ?Jvp#wHwAJ+SJubanZweA3 z5>F}nMYUO6Kdw8{!*tGd|942eNAnK_{^WaW>+9=)$zdpT$jCEfbNLF^gGd$tij~VD z8<@7YxoP?qztk6#$gR2MVx?9%R>Z)grPk<>w7R<5F*7~=8dF2B>}%%f_xd+t@Dboi zg)1ijgE=}o8;il!M@EvF0=e=Abkoq@{sDi9JSb0u1>}{N6BiJuB^oG(Ey*Hm2|Tac z{-S{H1*-8STskEwDIBoyt#lSZ>YCzgSApytXPC_W@H@Qy(bgthsS8>esLW%0#lgzD z%?bvC=a}q2yniop0F1St>4zbbc#VPuP|PNK@MgZ0<<+Y7)q=P9J-Cu8KLtcsbn%N0 zuU*N!j-KAZ=&xV+!7em;c29S=Kh>kdx6`#qRRaWq#3NAzMq5DmOuyICS=#L*i zVs~brKsc{t}mY_&RlgVXWS?b6RuR!GcfRw zl95%B>Kz{+KSYz$s>r?RbnCcYdurQFBBvRfsP=#v=;rABI;|*Hz%6>DSD{roT4%9j-0CUB>*Ue=RIs1lZh? z)Ph~~nBd*pykfB#jA~Nw9kg6frN6Y&42}fVtB%cl=i_7L>g+rqE+%%Rtu|F<*@`GP zs`O7uPnR;*-xrXSlpL6txLYZCbnuHpFQqCJPLz?Cg*{F4c&@JA3`br0o>@jy645kq z-uODZ6+bZm{|>Jyl0gfebOTV&27a8{$H%7_#+;s>j$&tL{~jOA2w1AO?(UGPK^cLR zg-$ew-b^HQ-nI~DTKAuVH+Pg^bgvYf13@SyeT-_3g5Xmu8nAjMj4hm=P`EmUr+>ZhkShO7TkJbFl|J zL0`XTy}q+PD=SM8NHwxZE8EOx_iv+mnP-^%)l%OFxybNvi^X>?O)>w9|1cK1WCDIV z;v-Z_#DZ-UkH@P5R3EIR`8}~Ht#PwT!i=ssIf}N*s!jUm$Ovs&MEt#ZH7N*1!97-1 z*ABoNDFYg;B(z^$P{2US$15mk-F>PT&2qXk&Cu%jU&iI^ig+ZnM7=be6|1!Jq`t21 zUTbsnwKyN&W?5OQype;8%X=L12y62XCM~9ZUPkhTjulFlfCgmew4tHl_xkGUvpXOV z?_7IOt0f={R%&X|r+~q2O~?QUcZZ6GCQ_Q_rK{^qQ9%K5wQ^6Cjvb!~HVS0U$PvwI;C%5@cuhFYJ$gZ?;Qlm7}x`xmN!z z0}a6(usiY*FY@sPfAajdhKBItH$y*vLihLf+Mx;YSy?~iczHp)yfCV21Xs0~*Q`TU zs7#52fxdpdgrwwm?8r#9w79sqNuxORHQ%F0t+Id}3Cil@5$1e1wJj|00DV!*ctuCj##tbyi#dSHNpk^B@VVk5Pwrk<-MQq~paL3M-U z*45Sh#S|A8SARa@sh{j_4nrZ0j8gg!;nws}C>6N4hc@ZaKXf&Faa#?aM0kX$zjLQzR5l+BA|tW5Pq0K_359>WF>jq_J{7`_m6n%!1iUHu0b zXKknR0S7mi``>|H(vlVKZu6n7?fRiW=_bpOpKio@&U))p=_zu!J1#hoHhhDZ??!RS zK*>?spyJq_%hU{|iw>Tr<`3O_LIsxXCo;@iuQ_Q_TL&ci1zjjee*JPoO#B$!X)3Kz l!QxbsgYP?OYgxP{ryAGOE7|4M0=5MS)RnamRf;xY{{!i}9&P{t diff --git a/src/main/resources/assets/thavma/textures/aspect/gelum.png b/src/main/resources/assets/thavma/textures/aspect/gelum.png deleted file mode 100644 index 63210f5ae3eacf4b84eda74a2a3394b8976e77c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5046 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 diff --git a/src/main/resources/assets/thavma/textures/aspect/hostilis.png b/src/main/resources/assets/thavma/textures/aspect/hostilis.png new file mode 100644 index 0000000000000000000000000000000000000000..d0bd21505d19711fe93692a7777bf279e5d0c47c GIT binary patch literal 5883 zcmVuP)j{000mGNkly|G)d*`@Z+(`@SUD-Cy1F-o59ZbM86k zp1Zy;#kBS3gb2g=C>kvCQiWcd272SCIq?IjJh72~ZS;Q9fVg0zsiMZhO6R z1=Qgjc;E$6jcee;*gVmQ-V~|=9?IY|JQ{~K;1#$c5p`Qq0?L#)oR5gLFQIfOrGV{4 z6bgC`g*%9&Sa7nSi{MlN`IGdcgi|}*)%c2rI{AwBl=xut8UdHH-V!_DM^gdlsI%CF+^FR9d zqbs*=-CFkZ&p(e94#(t(xt)3vegMbO!=0+DtDoDlWy{2mKKl4d(e@Vni=c-9N8lLG z2`)p(!D;YIT-Y*-;)qLbn830J6? zAXy3;p|Nz8FkB(&&?`Nke){QQ`}gmE`o8hwr}pX7=l3!MMSVGrNl#BlX+?)iFJmyq z(|hFGuUxs3-uCH@$;`~mKlRj8&p79tbH>OK&AtFlzkT_9(>L;(&!Mv8DJlspE^ z37lrxEyCuSJ*aR*nr4iXWsJf5B{OC`cb1I)?}-y9K2}&*NXVN+zl@BGf&~i}oTEC7 zr{_@`$OM;@lfzg~*l{=lhsp`l*RNlHr|4-%QDg#HbciE7pjYe3GhSU7+oDAz<97V9 zio*F76%}_7+A^Au7f*}4rdO|C{X|4>!LN|D6Ei^c;;Ac3kV8ir^oJ_j{40mx|i z*;p_)-gslB#_9i>q(9hI>A#dS*;&~dDo(cYgna-Eq3q1ejC|o^gU}+vkEpPvOP9{~ zYXT&Ck_Waub4DgWV1geUL0)f)s&_D0J!Cf_?Sv$+muV7BqZIg2?>48*tV|i` zW=jAD)8jzavSrIIhzL<-B%dU6;J|@xBSwt)t4JF~f-ch4t{g-XKs2DcNMtEb5k`}1 zLnTrU`2|vhiP@!h=&3vrvP6-`0Zk%0GH%?s3OQhYh*xASr+M?{^%H%zRI-MPI;TsQ zE?UneQH8doufF=~L($brPJ`Zh8Fb24o*@Mw8=P!VORhkb;e>(VvhhjK0wxS+IV)PY zaN$5>3`-T86mY4oF?juu*5Oq!sJ>09w|*kb(OAu~Z)38Xnwr#8k|;!LNh`~aQKLqE zFS=U6F+n?lBFdl}lcttmqv2(626YiT!+J)LCiuD5eDE+yImd2bh7KJ%L9^=vB4fMS zQEwcem#LpHVM6(mB}*1iXbD`uvZSPh9UJ_TZx1lJn(VYE@Kp;4efs9F#fukzB-{bP zQE|{o7+#`$S8a+O(o%S<>gXsO!0^HrY!ZoT`~FXfpL}wOHY~$C zb?S7<#*G{A5hZIZ4#2ZbD%XDV%{Qy{PMmyW5DY<9Ru)QOyd6qUJn=*q;mA{Mtou#u z&lh3n^{cPGdZlXX1qvR!&a?mTwtLT>DcTg>pcRN6p`2;Zk#?8^aFP?qfw#Hw=m!qt zF^nBl=Zh}7=njZ8GBOIaPLI?c{XdOy5KegEq+<_0_~6!`e)?&tN%TW%fLH4n`u5vz z4-iVuHTmbAe|}%(TTFq7FTecq|3z3QI4&S^=;7{i%2SG{A;Phf?67ZMq*IB?)4AXSb@{rdI0VB5BBcL|9Dh>+At zlP2vE?q}gzP1>sVRL`JTL2+?0X9MvlEc8s4KL6tL#j0bHMZbd>Ks z?>N=f^i6zO465ncwL}!za zGAJ=|;>15mA�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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/thavma/textures/aspect/mortuus.png b/src/main/resources/assets/thavma/textures/aspect/mortuus.png deleted file mode 100644 index e74abba6853f836169faed8402267ee519a9af32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5532 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 Bos|Fp diff --git a/src/main/resources/assets/thavma/textures/aspect/motus.png b/src/main/resources/assets/thavma/textures/aspect/motus.png deleted file mode 100644 index 87fc809b856c00c7b0a21d44ff7744e6ccd703e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4999 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 R)s+AM002ovPDHLkV1k{e+t~mB diff --git a/src/main/resources/assets/thavma/textures/aspect/ornatus.png b/src/main/resources/assets/thavma/textures/aspect/ornatus.png new file mode 100644 index 0000000000000000000000000000000000000000..6832be7da2390ee531885c57aca2dd24b1c0d61a GIT binary patch literal 4217 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 P00000NkvXXu0mjfSoIY@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/thavma/textures/aspect/perditio.png b/src/main/resources/assets/thavma/textures/aspect/perditio.png deleted file mode 100644 index 5d58c24c502dcf51a8f87a3dccf562ada06fccc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6759 zcmWkzby!nv8z0Tc5t5@M^`#r>(cMT79NnXp8X^Kxf;0#yHB!2zLy-n)K|p$RND1Hh z&UKxgKlWTZ=REiQt9!Bfx@x3E3`8Ihh*U#e*$}wO|NkV!2R@&}A*;Xz%hym12C5!| z?t(xJY#Pdn#?DHOmSD5gxmLNtZoyQK`9NyrCIyfPTc8&nG?Uvx|su%5hL>@PM^oV4uYYQY|+6j!k~>vvh{+AfSng3f}@+lD(%N%Rg|4mtD^viWdsWyZ)>s zdj_*0hV-!FvLpvR>-a_}lNhW}DTmM=qZ6@@r$0Vwr$>Ceo9?5-5%Ci`;+{P5r6h;3 zDni&bA<@y)u^@;dB|$CGU?vzbLfzHe*!Zt!X2y>RfssRCun^j#bbSoty#MkegADxH zWCy-~;8u%z^JaN7`Yo;^s7QkZ6@b!UU5*!W9Hpywb$8dUsjJJj($_z3@9yrVimz22 zL-Fh0iD-oLtg8fbrZJ2-s$4|vF^CL~EG;gkaXM z)jPyXnV6dLUmhQ4#^NQh$ltHU(~F$aBW!JnotPW8o!Ig+VVCdn{}k1*kyU!s_d|Wm zRO5v>V_ZBv?Y+6dA`AU^7z_-p6lH@-`sHZK@yIahSqhKb>_V4d4a4$c^$n zO#%Z0)GFya}Hi^$ijyuYXxexIUoaB|uXje=q6pk@^=*6w10gz6@aiqby6mHPy4i#gh^ zAtEB`_;+_l+4=8siRoz?(Nu4Vq@X*^7;$(cm;+BR5i^%1v{gLm91w@Q`R9+lvYJ}o z+X^W*+e{rzP0fkDpA{eccadRX_iAfvYtgvtY`73*$G2k2qyt$zbr7l>K3Tex_xPCE z%JOp8+GBXYF zsttd*r+tAyh@79FyN6w^Mb|eqHRbz!SsI~p`}wYG9_om_t_GFzvA?V|uQzqkI$QY~ zERm+k>CWgH-)F(i#igsRt{w!xU1<+IvI+3j~dGT52BW z5*77xMIuk`pBR;-`jB!`?Uvp|F389T(%@5EKCiYi|9y1yU5qF zJm0=nq&SETgUHU#-eaJrzt)nFXx>pvViw!k-`8`BU$Y{tvYn+udkcDzV;6L$Yz%+< zMrhU<@)Dm3U0+{+Fk59w8yXUFi8N6r#K!TK^rl-`sYRomPcnrNG^7f5;U~v#yKj}HtC4O0%cw+YTFx8?90uRp}h zk(sjt&9jxnDB)S%^sl72xVYnNOqw%91e?t^&&0xFv4vABy~E4dnUL!;P*Rv)beGF1 zGiB&+bAOKgLnpx=*;a2vg!hu$Ts5C>KtLW(#t*ia2mXlbHsuaoWl6eTb^)Sq;Gcnu zbq-p#R#sM@FCASQZ+Z@vngy<|uI|!=On>~t67R21+#dUwLrX_@^&eAoh!N`w=36rR zw9{zzBelQ(=v+F9NJwN@(bDeA;@sTa#>IwJv&A}%jg2aaiHR)U39i4#%=>XelSox% zqGa3&&++D^>N+|?qB1gQF}tx9z(Uu#YU})gp&|Gh3F@EHI(v3bj)a++8SD8!C*Q32 znCQRaQm@W;W@2IpQS{%x&@nK)?q)bNMlz#s2pcWFnrCpWwf_0@=K^@kC;=EL%J^^7reR+1bxLf0mo%_){buK?VUt`CwyXvkJ}g%+^Tx?M$36)H`XBec-R2 zLRETestzSG5raudt&<+MH#b9}6cosJ(J*zgy+bPti?)%WA#UZl`@qBH)^!Z#jsk&s zHmBed@NDf$zdx>ws~4=FiSY69>3;XX-H$|MWMucg!NI|;v9VxL&^-sy}CccQ?lX73_xGt`#sqtoE$+xvO%hPOm6f%1p^lD@g!ep&i=rFGPX*i4(c}91I;-Ak zTyC_GR67BaTf~>%0}SqdiIKC_gxkQ(Aq!1cMzriPST%|uR!KHVSPsxg+r7QL zCAT*>x+Q(cBvS6^V}jicK`sXe2ZNQB6=YUc))#)OmKtpZJ6!qQW80F01V#zdw$|3s z6943Npfh{}VX$7YYB7BzMEyGE`{s`fCz-H2voF=v)h}l&%?Ds|*z&LSax$BZ4t3Lv zYOl~9%;&k^a5GaETH13P#Y8d} zed|PFF-K=_uKSz)ZgP?f6cx8F=2~b?V0{t$E$p*oyRnRhrskgN+|pk z+0qhJnV%15n*&vT3EUh`gTD$2;*}5192;dhlgDTPt!shMXZV0KCP{~*$Xcq@_wyNsJp6%BIA^;3=ERH z^7B{seOjUPR$ewXd2Y|2XUIHz#z0T&@=+1kAV)hpyVL$yDgkfoV4xgs(ev|W3dWCf zeS9lPm+i9B)3=)acBe=e$MkP8e-D4P7aKnfAFo%Zb~w~{`ptwUF6(HuYgIs4_%sxO zK&;F_^2IA0 z5X~O|1n{`^@<=jeUi#2^O8RbTdwP2x@A6qTk%Zr0Z*SVz*c<|c(&;pwmyj>)KxA9N zDweh>k2y+=-@45h130D!gg;?sMA^^1 zXeK76D&WU;uX1R)9=DkHtVCy|rA382{QG<0;o-3beC>!tA}1hkY%(cKGLZrecw2;M z;?F12Dum!a6VWgxnq=2NnY2btUENDCIeEUgKI~H*1wdh?r)Ou)d;soqZ?Q3vVoc;L zax&~d7jR+}1w8T3=nyr*nN+=OZ#cx1(C_-hh~8{aeiYJ<&gQrR_m)}CkgvsBD9DOj zMaXf5+?@>Bh&YYq-Zf|ko$na@`x^Y$r?RSQy2ZF?@s5Bc1X5$y_clz0*n|JrLe`dl z*s6O^QZ$Qf>`h}4_C$AA|iqN%o%n=1??e<#Xpj z1_PyH|Mlw^6QC_f^4STH0tusdr5YUGRZ(8P*YxR=UAq8U9n z_rSpBS}Xo$zziR%bvL@r9q#PzmN7x0m7fM5J$m#Vz(w%&D_g-Hr+NTlNdZVCeQeC{ zot>R3eI8za7b>3!zL|3NRz(2_WJ zlG+9U(G-_*Ay>zF0JEI|G<(aXll`WgmtW`>r-vVn=PH^VrtSm8Ej4)XL1P^HKIC%2 zDG45S?GTw^^J-VxQ_f7yUB4Ss!>{9|zu;r#wQX%}vVeQByn3r2{Cd0}1mcOFF4a@h$rg1< zZ`q2#A-L?k*{g6?W2@A7Qff+U$>293ENu|f0KI0JBpH}BfqNOmpLu&5GJsiAl9PoT zS2|w0jf{@|dixj(?#qCOwQi0|tSSc+TD=|Jc#NqI{N0U}A?3S;V%5 zhbuodF#+*HAgFLhzIrS*eF3z*zNoJ5^gns|uH2Ck?ac<4Y1jbcwJ%OETa=(4;Y)+hImV(+5Dq z4TGt;y44`Loa)3Lg{kfEADWh@DT^#JK@+Qsi;Hvp{r0Iqkj#gDsxf_5)<#DD%WONrl)cD)yYy+61x1r+fx>@QYeJUG2x4AX!=2=!=Vs=1d;D-QbF!d+A$STa@JF%LHj2f*=o zCp1HwD@RGEk7Y?CxvHwF5oik@m5889MJ0_X9xZ^WxCNy+Gyu$7&Q@E;*)SQ?ZHw{= z2;|G_&&7xXIFsDk+>FBKCZg>JVcVqa#jO|yQ%80D2P4sb{Zzo%p5rqg6&2N2AP_Nb z0CS5kd-q^f^o@c(va72>Zl)D{$4Zm zw&M90{>$@olAoKb6YcdiH3~kjpE21!)iI#(6LYmMR1yJccGc4QA%9{6 z)zN+Th^ZbJ_`qKV1#w`Onvdp)X?R(c2}Kx6E4ZH<8J&HNiz6-_iB{{j+TYtWW&#VVW36wgJFP(n|1=tfU%b#m34C z69^Qm{P@^gRImt{0f^cvqT?J$2>VJf7|6RDDrpv&pjxjpw+PVmP%C>RSRu4{YQ9)2 z!ix0qO-XS#}`vBtf43+>t=h)QVE)8Qtfs1w*XJ*c^(&`#E+F+j)uIaO} zjXuk;X!jAsM_rR>>FG5eUtEa!`}hb0zO)30#!J$6y|{icMJ*4a{c$yO6nkUs#fHms zok772oG+jxDU-p+zk65`5)wj#yvR}>Q~*CZ0}$e*jBQBAxyTr=GsEHnBiPdU2>It* z@(db{W|w*09cy^@I-BpsaDqNjkk+@P!Rc27?0HZoD6u3_*?#ViHMUs%RLCsEu%_&D zO^sk`OzL-gR+@4TKY(A-0NzI&^Rj3~>hxx5AY4MQ?X&su0ZV!ilaMgFHdQ()x~$np zZC`Gfrtu%a4x=_SJ_z{~r|A%7+)!UHq7+QHGvvDG0*9|gTKT-kofXs7);`x(S67Hh z;a}()(zo^Mns64i+zqbg%N*$80dv^j09x>7G*^mB?2enC88%>UMf7P(yqB0vnT1q~ zsvt$x82_N8l5X!7L5#IYPD<;et)GH*W@77DSe8JXE;i+0XVO`Rs9+k~@7M8qZ0 z$re@j`nj0*-|e-oXC8G3&CGrRW)iLZ0%IF;L zgr_(N_P_u_wEPB;S=w*ka^%vkOVE|bx=BDhLX9$UeknX9A17X~Vg>{~Dmi)b4DevX zK=|)d0Hsy&gb!J?%^nIDW{^zBvUN+R25z zb$NMNG))t)l;E6aY?VaHY1Qd%o4ckr)bLkjQ`4mwVCT|QR8(R&hLRrS#~f-oW+dc* z#}*E|*!#&N{kPr1!oro8kB`C$ssGZ{bXEZI;zhyUl>fh*3ojWNnPcb#D~vfS$y!r$ zICFQpbeviYrAFBO0wQ1+%Vwhx^m?X;L(li@9e^>F+1c6FI|b@z=rgQGQ3<_I+Gc+K z3OT83OPXF~<=)YKHG`pM)v>I{;iJT>07l<|d~K zXvOpGhc}Dl&)g+ZsA#{SR1`|mm0`uGi;WdL0O!(d3T{m-UXQEOc{p3K)eyzRG?%%K* z#_VwOsjt0;5|7}Ffl~qj*KFd_#oqUkiVO_F@lB>o0h~k8>lh&Ll7xpp2wXorIYIqF zCSMw?PVkC|O!IMZZT$k0v`tM@(;%I_jr0m>d0h-dT%D!3k#rt{Q8ep--) zQtpT-KOokB4h|BqIb(`r)eO=&p8%@T2Fz=)$BoVuLp017D<{kq8+M|a9 ZKMQ5#&ws`$0{%GyX{hKbSHo;y{||kc_8|ZO diff --git a/src/main/resources/assets/thavma/textures/aspect/permutatio.png b/src/main/resources/assets/thavma/textures/aspect/permutatio.png deleted file mode 100644 index 45bca802d6ecce1824d19d68425f4dc995201c9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5117 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 diff --git a/src/main/resources/assets/thavma/textures/aspect/praecantatio.png b/src/main/resources/assets/thavma/textures/aspect/praecantatio.png deleted file mode 100644 index 67606aef0771f57c469e4e4802e59d36bc29ec87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5409 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 LNkvXXu0mjfaffWD diff --git a/src/main/resources/assets/thavma/textures/aspect/sensus.png b/src/main/resources/assets/thavma/textures/aspect/sensus.png deleted file mode 100644 index 7727b84ff6d65b58663699e6d0ec7b26bc68fd8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7039 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 F{{j9YWg7qh diff --git a/src/main/resources/assets/thavma/textures/aspect/vacuos.png b/src/main/resources/assets/thavma/textures/aspect/vacuos.png deleted file mode 100644 index 345fc526d41c3c9d7a4a221f567379306c8fd84f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5685 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 Tsh`!x00000NkvXXu0mjfWo>}R literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/thavma/textures/aspect/vinculum.png b/src/main/resources/assets/thavma/textures/aspect/vinculum.png deleted file mode 100644 index 713676dac61480d276c88824845fb6499afec1c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5171 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 diff --git a/src/main/resources/assets/thavma/textures/aspect/volatus.png b/src/main/resources/assets/thavma/textures/aspect/volatus.png deleted file mode 100644 index 4cef84b9d47b76722311f30404e6197ff47611ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3940 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 Date: Sun, 30 Nov 2025 16:44:23 +0200 Subject: [PATCH 04/40] more aspects --- .../T7DatapackBuiltinEntriesProvider.kt | 14 +- .../data/providers/aspects/ArmorAspects.kt | 206 ++++++++---------- .../providers/aspects/BlockFamilyAspects.kt | 170 +++++++-------- .../data/providers/aspects/EntityAspects.kt | 64 ++---- 4 files changed, 194 insertions(+), 260 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DatapackBuiltinEntriesProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DatapackBuiltinEntriesProvider.kt index f219bfa1..14da7e58 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DatapackBuiltinEntriesProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DatapackBuiltinEntriesProvider.kt @@ -117,7 +117,7 @@ class T7DatapackBuiltinEntriesProvider(output: PackOutput, registries: Completab } .add(T7DatapackRegistries.RESEARCH_ENTRY) { ctx -> ResearchEntryBuilder(ResearchEntries.Thavma.THAVMA, Vector2i(0, -6), false, T7Items.BOOK.get().defaultInstance) - .research(lockedAspect(2, 0, Aspects.AETHER), lockedAspect(2, 4, Aspects.PRAECANTATIO)) + .research(lockedAspect(2, 0, Aspects.AETHER), lockedAspect(2, 4, Aspects.AETHER)) .addPage(simpleTextPage(3, true)) .addPage(simpleTextPage(1, false)) .addChild(ResearchEntries.Thavma.TREES) @@ -136,13 +136,13 @@ class T7DatapackBuiltinEntriesProvider(output: PackOutput, registries: Completab .build(ctx) ResearchEntryBuilder(ResearchEntries.Thavma.ARCANE_LENS, Vector2i(2, -2), false, T7Items.ARCANE_LENS.get().defaultInstance) - .research(lockedAspect(2, 0, Aspects.LUX), lockedAspect(2, 4, Aspects.PRAECANTATIO), broken(2, 2)) + .research(lockedAspect(2, 0, Aspects.LUX), lockedAspect(2, 4, Aspects.AETHER), broken(2, 2)) .addChild(ResearchEntries.Thavma.RESEARCH_TABLE) .addPage(simpleTextPage(3, true)) .build(ctx) ResearchEntryBuilder(ResearchEntries.Thavma.RESEARCH_TABLE, Vector2i(0, 0), true, T7Blocks.RESEARCH_TABLE.get().asItem().defaultInstance) - .research(lockedAspect(2, 0, Aspects.PRAECANTATIO), lockedAspect(2, 4, Aspects.HERBA)) + .research(lockedAspect(2, 0, Aspects.AETHER), lockedAspect(2, 4, Aspects.HERBA)) .addPage { _, _ -> CraftingPage(Recipes.CHEST) } .addChild(ResearchEntries.Thavma.WANDS) .addChild(ResearchEntries.Thavma.TECHNOLOGY) @@ -152,7 +152,7 @@ class T7DatapackBuiltinEntriesProvider(output: PackOutput, registries: Completab .build(ctx) ResearchEntryBuilder(ResearchEntries.Thavma.RESEARCH_PROFICIENCY, Vector2i(-1, -1), false, T7Blocks.RESEARCH_TABLE.get().asItem().defaultInstance) - .research(lockedAspect(2, 0, Aspects.PRAECANTATIO), lockedAspect(2, 4, Aspects.HERBA)) + .research(lockedAspect(2, 0, Aspects.AETHER), lockedAspect(2, 4, Aspects.HERBA)) .build(ctx) ResearchEntryBuilder(ResearchEntries.Thavma.ALCHEMY, Vector2i(-2, 2), true, T7Blocks.CRUCIBLE.get().asItem().defaultInstance) @@ -160,15 +160,15 @@ class T7DatapackBuiltinEntriesProvider(output: PackOutput, registries: Completab .build(ctx) ResearchEntryBuilder(ResearchEntries.Thavma.WANDS, Vector2i(-2, 4), true, T7Items.wandOrThrow(WandPlatingMaterials.THAVMITE.get(), WandCoreMaterials.SILVERWOOD.get()).defaultInstance) - .research(lockedAspect(2, 0, Aspects.PRAECANTATIO), lockedAspect(2, 4, Aspects.INSTRUMENTUM)) + .research(lockedAspect(2, 0, Aspects.AETHER), lockedAspect(2, 4, Aspects.INSTRUMENTUM)) .build(ctx) ResearchEntryBuilder(ResearchEntries.Thavma.INFUSION, Vector2i(2, 2), true, T7Blocks.MATRIX.get().asItem().defaultInstance) - .research(lockedAspect(2, 0, Aspects.TERRA), lockedAspect(2, 4, Aspects.PRAECANTATIO)) + .research(lockedAspect(2, 0, Aspects.TERRA), lockedAspect(2, 4, Aspects.AETHER)) .build(ctx) ResearchEntryBuilder(ResearchEntries.Thavma.TECHNOLOGY, Vector2i(2, 4), true, T7Items.GOGGLES.get().defaultInstance) - .research(lockedAspect(2, 0, Aspects.INSTRUMENTUM), lockedAspect(2, 4, Aspects.HUMANUS)) + .research(lockedAspect(2, 0, Aspects.INSTRUMENTUM), lockedAspect(2, 4, Aspects.CIVILIS)) .build(ctx) ResearchEntryBuilder(ResearchEntries.Alchemy.ALCHEMY, Vector2i(0, 0), false, T7Blocks.CRUCIBLE.get().asItem().defaultInstance) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt index c91ed1db..7ea041e6 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt @@ -4,15 +4,7 @@ import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps import me.alegian.thavma.impl.init.registries.T7Tags -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AQUA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.BESTIA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.DESIDERIUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.FABRICO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.METALLUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRAECANTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRAEMUNIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TENEBRAE -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VITREUS +import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Items import net.minecraft.core.HolderLookup import net.minecraft.world.item.Items @@ -21,196 +13,178 @@ object ArmorAspects { fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { item(Items.LEATHER_HELMET) { - it.add(BESTIA, 40) - .add(PRAEMUNIO, 2) + it.add(Aspects.CORPUS, 15) + .add(Aspects.PRAEMUNIO, 2) } item(Items.LEATHER_CHESTPLATE) { - it.add(BESTIA, 64) - .add(PRAEMUNIO, 6) + it.add(Aspects.CORPUS, 24) + .add(Aspects.PRAEMUNIO, 6) } item(Items.LEATHER_LEGGINGS) { - it.add(BESTIA, 56) - .add(PRAEMUNIO, 4) + it.add(Aspects.CORPUS, 21) + .add(Aspects.PRAEMUNIO, 4) } item(Items.LEATHER_BOOTS) { - it.add(BESTIA, 32) - .add(PRAEMUNIO, 2) + it.add(Aspects.CORPUS, 12) + .add(Aspects.PRAEMUNIO, 2) } item(T7Tags.Items.GOGGLES) { - it.add(METALLUM, 32) - .add(DESIDERIUM, 32) - .add(PRAECANTATIO, 4) - .add(VITREUS, 4) + it.add(Aspects.METALLUM, 32) + .add(Aspects.AETHER, 4) + .add(Aspects.VITREUS, 4) } item(T7Items.APPRENTICE_CHESTPLATE) { - it.add(FABRICO, 32) - .add(PRAECANTATIO, 8) - .add(PRAEMUNIO, 2) + it.add(Aspects.FABRICO, 32) + .add(Aspects.AETHER, 8) + .add(Aspects.PRAEMUNIO, 2) } item(T7Items.APPRENTICE_LEGGINGS) { - it.add(FABRICO, 28) - .add(PRAECANTATIO, 7) - .add(PRAEMUNIO, 2) + it.add(Aspects.FABRICO, 28) + .add(Aspects.AETHER, 7) + .add(Aspects.PRAEMUNIO, 2) } item(T7Items.APPRENTICE_BOOTS) { - it.add(FABRICO, 16) - .add(PRAECANTATIO, 4) - .add(PRAEMUNIO, 2) + it.add(Aspects.FABRICO, 16) + .add(Aspects.AETHER, 4) + .add(Aspects.PRAEMUNIO, 2) } item(Items.CHAINMAIL_HELMET) { - it.add(METALLUM, 20) - .add(PRAEMUNIO, 4) + it.add(Aspects.METALLUM, 20) + .add(Aspects.PRAEMUNIO, 4) } item(Items.CHAINMAIL_CHESTPLATE) { - it.add(METALLUM, 32) - .add(PRAEMUNIO, 10) + it.add(Aspects.METALLUM, 32) + .add(Aspects.PRAEMUNIO, 10) } item(Items.CHAINMAIL_LEGGINGS) { - it.add(METALLUM, 28) - .add(PRAEMUNIO, 8) + it.add(Aspects.METALLUM, 28) + .add(Aspects.PRAEMUNIO, 8) } item(Items.CHAINMAIL_BOOTS) { - it.add(METALLUM, 16) - .add(PRAEMUNIO, 2) + it.add(Aspects.METALLUM, 16) + .add(Aspects.PRAEMUNIO, 2) } item(Items.IRON_HELMET) { - it.add(METALLUM, 40) - .add(PRAEMUNIO, 4) + it.add(Aspects.METALLUM, 40) + .add(Aspects.PRAEMUNIO, 4) } item(Items.IRON_CHESTPLATE) { - it.add(METALLUM, 64) - .add(PRAEMUNIO, 12) + it.add(Aspects.METALLUM, 64) + .add(Aspects.PRAEMUNIO, 12) } item(Items.IRON_LEGGINGS) { - it.add(METALLUM, 56) - .add(PRAEMUNIO, 10) + it.add(Aspects.METALLUM, 56) + .add(Aspects.PRAEMUNIO, 10) } item(Items.IRON_BOOTS) { - it.add(METALLUM, 32) - .add(PRAEMUNIO, 4) + it.add(Aspects.METALLUM, 32) + .add(Aspects.PRAEMUNIO, 4) } item(T7Items.THAVMITE_HELMET) { - it.add(METALLUM, 40) - .add(PRAECANTATIO, 20) - .add(PRAEMUNIO, 7) + it.add(Aspects.METALLUM, 40) + .add(Aspects.AETHER, 20) + .add(Aspects.PRAEMUNIO, 7) } item(T7Items.THAVMITE_CHESTPLATE) { - it.add(METALLUM, 64) - .add(PRAECANTATIO, 32) - .add(PRAEMUNIO, 13) + it.add(Aspects.METALLUM, 64) + .add(Aspects.AETHER, 32) + .add(Aspects.PRAEMUNIO, 13) } item(T7Items.THAVMITE_LEGGINGS) { - it.add(METALLUM, 56) - .add(PRAECANTATIO, 28) - .add(PRAEMUNIO, 11) + it.add(Aspects.METALLUM, 56) + .add(Aspects.AETHER, 28) + .add(Aspects.PRAEMUNIO, 11) } item(T7Items.THAVMITE_BOOTS) { - it.add(METALLUM, 32) - .add(PRAECANTATIO, 16) - .add(PRAEMUNIO, 5) + it.add(Aspects.METALLUM, 32) + .add(Aspects.AETHER, 16) + .add(Aspects.PRAEMUNIO, 5) } item(Items.GOLDEN_HELMET) { - it.add(METALLUM, 20) - .add(DESIDERIUM, 40) - .add(PRAEMUNIO, 4) + it.add(Aspects.METALLUM, 20) + .add(Aspects.PRAEMUNIO, 4) } item(Items.GOLDEN_CHESTPLATE) { - it.add(METALLUM, 32) - .add(DESIDERIUM, 64) - .add(PRAEMUNIO, 10) + it.add(Aspects.METALLUM, 32) + .add(Aspects.PRAEMUNIO, 10) } item(Items.GOLDEN_LEGGINGS) { - it.add(METALLUM, 28) - .add(DESIDERIUM, 56) - .add(PRAEMUNIO, 6) + it.add(Aspects.METALLUM, 28) + .add(Aspects.PRAEMUNIO, 6) } item(Items.GOLDEN_BOOTS) { - it.add(METALLUM, 16) - .add(DESIDERIUM, 32) - .add(PRAEMUNIO, 2) + it.add(Aspects.METALLUM, 16) + .add(Aspects.PRAEMUNIO, 2) } item(Items.DIAMOND_HELMET) { - it.add(VITREUS, 40) - .add(DESIDERIUM, 40) - .add(PRAEMUNIO, 8) + it.add(Aspects.VITREUS, 40) + .add(Aspects.PRAEMUNIO, 8) } item(Items.DIAMOND_CHESTPLATE) { - it.add(VITREUS, 64) - .add(DESIDERIUM, 64) - .add(PRAEMUNIO, 18) + it.add(Aspects.VITREUS, 64) + .add(Aspects.PRAEMUNIO, 18) } item(Items.DIAMOND_LEGGINGS) { - it.add(VITREUS, 56) - .add(DESIDERIUM, 56) - .add(PRAEMUNIO, 14) + it.add(Aspects.VITREUS, 56) + .add(Aspects.PRAEMUNIO, 14) } item(Items.DIAMOND_BOOTS) { - it.add(VITREUS, 32) - .add(DESIDERIUM, 32) - .add(PRAEMUNIO, 8) + it.add(Aspects.VITREUS, 32) + .add(Aspects.PRAEMUNIO, 8) } item(Items.NETHERITE_HELMET) { - it.add(METALLUM, 40) - .add(DESIDERIUM, 40) - .add(PRAEMUNIO, 9) - .add(TENEBRAE, 4) + it.add(Aspects.METALLUM, 40) + .add(Aspects.PRAEMUNIO, 9) + .add(Aspects.TENEBRAE, 4) } item(Items.NETHERITE_CHESTPLATE) { - it.add(METALLUM, 64) - .add(DESIDERIUM, 64) - .add(PRAEMUNIO, 19) - .add(TENEBRAE, 4) + it.add(Aspects.METALLUM, 64) + .add(Aspects.PRAEMUNIO, 19) + .add(Aspects.TENEBRAE, 4) } item(Items.NETHERITE_LEGGINGS) { - it.add(METALLUM, 56) - .add(DESIDERIUM, 56) - .add(PRAEMUNIO, 15) - .add(TENEBRAE, 4) + it.add(Aspects.METALLUM, 56) + .add(Aspects.PRAEMUNIO, 15) + .add(Aspects.TENEBRAE, 4) } item(Items.NETHERITE_BOOTS) { - it.add(METALLUM, 32) - .add(DESIDERIUM, 32) - .add(PRAEMUNIO, 9) - .add(TENEBRAE, 4) + it.add(Aspects.METALLUM, 32) + .add(Aspects.PRAEMUNIO, 9) + .add(Aspects.TENEBRAE, 4) } item(Items.WOLF_ARMOR) { - it.add(BESTIA, 8) - .add(PRAEMUNIO, 6) + it.add(Aspects.CORPUS, 8) + .add(Aspects.PRAEMUNIO, 6) } item(Items.LEATHER_HORSE_ARMOR) { - it.add(BESTIA, 16) - .add(PRAEMUNIO, 4) + it.add(Aspects.CORPUS, 21) + .add(Aspects.PRAEMUNIO, 4) } item(Items.IRON_HORSE_ARMOR) { - it.add(METALLUM, 16) - .add(PRAEMUNIO, 6) - .add(BESTIA, 8) + it.add(Aspects.METALLUM, 16) + .add(Aspects.PRAEMUNIO, 6) } item(Items.GOLDEN_HORSE_ARMOR) { - it.add(METALLUM, 8) - .add(DESIDERIUM, 16) - .add(PRAEMUNIO, 8) - .add(BESTIA, 8) + it.add(Aspects.METALLUM, 8) + .add(Aspects.PRAEMUNIO, 8) } item(Items.DIAMOND_HORSE_ARMOR) { - it.add(VITREUS, 16) - .add(DESIDERIUM, 16) - .add(PRAEMUNIO, 12) - .add(BESTIA, 8) + it.add(Aspects.VITREUS, 16) + .add(Aspects.PRAEMUNIO, 12) } item(Items.TURTLE_HELMET) { - it.add(BESTIA, 10) - .add(PRAEMUNIO, 4) - .add(AQUA, 5) + it.add(Aspects.CORPUS, 10) + .add(Aspects.PRAEMUNIO, 4) + .add(Aspects.AQUA, 5) } } } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt index 3380db36..cc9c42ba 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt @@ -4,15 +4,7 @@ import me.alegian.thavma.impl.init.data.T7BlockFamilies import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider import me.alegian.thavma.impl.init.data.providers.blockFamily import me.alegian.thavma.impl.init.registries.T7DataMaps -import me.alegian.thavma.impl.init.registries.deferred.Aspects.ALIENIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AQUA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.HERBA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.IGNIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.METALLUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PERMUTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRAECANTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TERRA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VITREUS +import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.core.HolderLookup import net.minecraft.data.BlockFamilies @@ -20,230 +12,214 @@ object BlockFamilyAspects { fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) = datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { blockFamily(BlockFamilies.ACACIA_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.CHERRY_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.BIRCH_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.CRIMSON_PLANKS) { - it.add(HERBA, 2).add(IGNIS, 2) + it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } blockFamily(BlockFamilies.JUNGLE_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.OAK_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.DARK_OAK_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.SPRUCE_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.WARPED_PLANKS) { - it.add(HERBA, 2).add(IGNIS, 2) + it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } blockFamily(BlockFamilies.MANGROVE_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.BAMBOO_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.BAMBOO_MOSAIC) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.MUD_BRICKS) { - it.add(TERRA, 2).add(HERBA, 2) + it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.ANDESITE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.POLISHED_ANDESITE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.BLACKSTONE) { - it.add(TERRA, 2).add(IGNIS, 2) + it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } blockFamily(BlockFamilies.POLISHED_BLACKSTONE) { - it.add(TERRA, 2).add(IGNIS, 2) + it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } blockFamily(BlockFamilies.POLISHED_BLACKSTONE_BRICKS) { - it.add(TERRA, 2).add(IGNIS, 2) + it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } blockFamily(BlockFamilies.BRICKS) { - it.add(TERRA, 4).add(IGNIS, 4) + it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } blockFamily(BlockFamilies.END_STONE_BRICKS) { - it.add(TERRA, 2).add(ALIENIS, 2) + it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) } blockFamily(BlockFamilies.MOSSY_STONE_BRICKS) { - it.add(TERRA, 2).add(HERBA, 2) + it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.COPPER_BLOCK) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_COPPER_BLOCK) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.EXPOSED_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.EXPOSED_CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_EXPOSED_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_EXPOSED_CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WEATHERED_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WEATHERED_CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_WEATHERED_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_WEATHERED_CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.OXIDIZED_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.OXIDIZED_CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_OXIDIZED_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.WAXED_OXIDIZED_CUT_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } blockFamily(BlockFamilies.COBBLESTONE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.MOSSY_COBBLESTONE) { - it.add(TERRA, 2).add(HERBA, 2) + it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.DIORITE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.POLISHED_DIORITE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.GRANITE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.POLISHED_GRANITE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.TUFF) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.POLISHED_TUFF) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.TUFF_BRICKS) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.NETHER_BRICKS) { - it.add(TERRA, 4).add(IGNIS, 4) + it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } blockFamily(BlockFamilies.RED_NETHER_BRICKS) { - it.add(TERRA, 2).add(IGNIS, 2).add(HERBA, 2) + it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2).add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.PRISMARINE) { - it.add(AQUA, 4).add(TERRA, 4) + it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.PURPUR) { - it.add(ALIENIS, 2).add(HERBA, 2) + it.add(Aspects.TENEBRAE, 2).add(Aspects.HERBA, 2) } blockFamily(BlockFamilies.PRISMARINE_BRICKS) { - it.add(AQUA, 8).add(TERRA, 8) + it.add(Aspects.AQUA, 8).add(Aspects.TERRA, 8) } blockFamily(BlockFamilies.DARK_PRISMARINE) { - it.add(AQUA, 4).add(TERRA, 4) + it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.QUARTZ) { - it.add(VITREUS, 16) - .add(IGNIS, 4) + it.add(Aspects.VITREUS, 16) + .add(Aspects.IGNIS, 4) } blockFamily(BlockFamilies.SMOOTH_QUARTZ) { - it.add(VITREUS, 16) - .add(IGNIS, 4) + it.add(Aspects.VITREUS, 16) + .add(Aspects.IGNIS, 4) } blockFamily(BlockFamilies.SANDSTONE) { - it.add(TERRA, 4) + it.add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.CUT_SANDSTONE) { - it.add(TERRA, 4) + it.add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.SMOOTH_SANDSTONE) { - it.add(TERRA, 4) + it.add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.RED_SANDSTONE) { - it.add(TERRA, 4) + it.add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.CUT_RED_SANDSTONE) { - it.add(TERRA, 4) + it.add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.SMOOTH_RED_SANDSTONE) { - it.add(TERRA, 4) + it.add(Aspects.TERRA, 4) } blockFamily(BlockFamilies.STONE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.STONE_BRICK) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.DEEPSLATE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.COBBLED_DEEPSLATE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.POLISHED_DEEPSLATE) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.DEEPSLATE_BRICKS) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(BlockFamilies.DEEPSLATE_TILES) { - it.add(TERRA, 2) + it.add(Aspects.TERRA, 2) } blockFamily(T7BlockFamilies.GREATWOOD_PLANKS) { - it.add(HERBA, 2) + it.add(Aspects.HERBA, 2) } blockFamily(T7BlockFamilies.ELEMENTAL_STONE) { - it.add(TERRA, 4) - .add(PRAECANTATIO, 1) + it.add(Aspects.TERRA, 4) + .add(Aspects.AETHER, 1) } } } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/EntityAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/EntityAspects.kt index 0f2060ed..54bc105b 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/EntityAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/EntityAspects.kt @@ -3,19 +3,7 @@ package me.alegian.thavma.impl.init.data.providers.aspects import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider import me.alegian.thavma.impl.init.data.providers.entity import me.alegian.thavma.impl.init.registries.T7DataMaps -import me.alegian.thavma.impl.init.registries.deferred.Aspects.ALIENIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.ALKIMIA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.AQUA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.BESTIA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.DESIDERIUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.EXANIMIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.HERBA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.HUMANUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.IGNIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.MOTUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TERRA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VICTUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VINCULUM +import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7EntityTypes import net.minecraft.core.HolderLookup import net.minecraft.world.entity.EntityType @@ -38,30 +26,29 @@ object EntityAspects { entity(EntityType.CHICKEN) {} entity(EntityType.COD) {} entity(EntityType.COW) { - it.add(TERRA, 15) - .add(BESTIA, 15) + it.add(Aspects.TERRA, 8) + .add(Aspects.VICTUS, 8) } entity(EntityType.CREEPER) { - it.add(IGNIS, 15) - .add(HERBA, 15) + it.add(Aspects.IGNIS, 15) + .add(Aspects.HERBA, 15) } entity(EntityType.DOLPHIN) {} entity(EntityType.DONKEY) {} entity(EntityType.DROWNED) {} entity(EntityType.ELDER_GUARDIAN) {} entity(EntityType.ENDERMAN) { - it.add(MOTUS, 12) - .add(ALIENIS, 8) - .add(HUMANUS, 4) - .add(DESIDERIUM, 4) + it.add(Aspects.TENEBRAE, 8) + .add(Aspects.HOSTILIS, 4) + .add(Aspects.CIVILIS, 4) } entity(EntityType.ENDERMITE) {} entity(EntityType.EVOKER) {} entity(EntityType.FOX) {} entity(EntityType.FROG) {} entity(EntityType.GHAST) { - it.add(EXANIMIS, 12) - .add(IGNIS, 8) + it.add(Aspects.HOSTILIS, 12) + .add(Aspects.IGNIS, 8) } entity(EntityType.GLOW_SQUID) {} entity(EntityType.GOAT) {} @@ -79,9 +66,8 @@ object EntityAspects { entity(EntityType.PARROT) {} entity(EntityType.PHANTOM) {} entity(EntityType.PIG) { - it.add(DESIDERIUM, 5) - .add(TERRA, 10) - .add(BESTIA, 10) + it.add(Aspects.TERRA, 8) + .add(Aspects.VICTUS, 8) } entity(EntityType.PIGLIN) {} entity(EntityType.PIGLIN_BRUTE) {} @@ -92,27 +78,26 @@ object EntityAspects { entity(EntityType.RAVAGER) {} entity(EntityType.SALMON) {} entity(EntityType.SHEEP) { - it.add(TERRA, 10) - .add(BESTIA, 10) + it.add(Aspects.TERRA, 8) + .add(Aspects.VICTUS, 8) } entity(EntityType.SHULKER) {} entity(EntityType.SILVERFISH) {} entity(EntityType.SKELETON) { - it.add(TERRA, 5) - .add(HUMANUS, 5) - .add(EXANIMIS, 20) + it.add(Aspects.TERRA, 8) + .add(Aspects.HOSTILIS, 8) } entity(EntityType.SKELETON_HORSE) {} entity(EntityType.SLIME) { - it.add(ALKIMIA, 5) - .add(AQUA, 10) - .add(VICTUS, 10) + it.add(Aspects.ALKIMIA, 5) + .add(Aspects.AQUA, 10) + .add(Aspects.VICTUS, 10) } entity(EntityType.SNIFFER) {} entity(EntityType.SNOW_GOLEM) {} entity(EntityType.SPIDER) { - it.add(VINCULUM, 10) - .add(BESTIA, 10) + it.add(Aspects.TERRA, 8) + .add(Aspects.HOSTILIS, 8) } entity(EntityType.SQUID) {} entity(EntityType.STRAY) {} @@ -123,7 +108,7 @@ object EntityAspects { entity(EntityType.TURTLE) {} entity(EntityType.VEX) {} entity(EntityType.VILLAGER) { - it.add(HUMANUS, 15) + it.add(Aspects.CIVILIS, 12) } entity(EntityType.VINDICATOR) {} entity(EntityType.WANDERING_TRADER) {} @@ -133,9 +118,8 @@ object EntityAspects { entity(EntityType.WOLF) {} entity(EntityType.ZOGLIN) {} entity(EntityType.ZOMBIE) { - it.add(TERRA, 5) - .add(HUMANUS, 10) - .add(EXANIMIS, 20) + it.add(Aspects.TERRA, 8) + .add(Aspects.HOSTILIS, 8) } entity(EntityType.ZOMBIE_HORSE) {} entity(EntityType.ZOMBIE_VILLAGER) {} From c87eb9e6ab536644c6c387f2efc83f5d442f6e64 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 30 Nov 2025 17:09:36 +0200 Subject: [PATCH 05/40] it boots --- .../blockstates/aer_infused_deepslate.json | 7 - .../thavma/blockstates/aer_infused_stone.json | 7 - .../resources/assets/thavma/lang/en_us.json | 27 +- .../models/block/aer_infused_deepslate.json | 7 - .../models/block/aer_infused_stone.json | 7 - .../models/item/aer_infused_deepslate.json | 3 - .../thavma/models/item/aer_infused_stone.json | 3 - .../assets/thavma/models/item/aer_shard.json | 6 - .../data/c/tags/block/ore_rates/singular.json | 2 - .../resources/data/c/tags/block/ores.json | 2 - .../tags/block/ores_in_ground/deepslate.json | 1 - .../c/tags/block/ores_in_ground/stone.json | 1 - .../data/c/tags/item/ore_rates/singular.json | 2 - .../resources/data/c/tags/item/ores.json | 2 - .../c/tags/item/ores_in_ground/deepslate.json | 1 - .../c/tags/item/ores_in_ground/stone.json | 1 - .../tags/block/mineable/pickaxe.json | 2 - .../tags/block/needs_stone_tool.json | 2 - .../recipes/misc/aer_shard_blasting.json | 32 -- .../recipes/misc/aer_shard_smelting.json | 32 -- .../data_maps/entity_type/aspect_content.json | 38 +- .../thavma/data_maps/item/aspect_content.json | 504 +++++++----------- .../blocks/aer_infused_deepslate.json | 52 -- .../loot_table/blocks/aer_infused_stone.json | 52 -- .../thavma/recipe/aer_shard_blasting.json | 18 - .../thavma/recipe/aer_shard_smelting.json | 18 - .../arcane_levitator_arcane_workbench.json | 7 +- .../elemental_core_arcane_workbench.json | 1 - .../elemental_stone_arcane_workbench.json | 1 - .../thavma/recipe/eternal_flame_crucible.json | 3 +- .../recipe/fabric_arcane_workbench.json | 1 - .../focus_enderchest_arcane_workbench.json | 2 +- .../recipe/focus_enderpearl_infusion.json | 4 +- .../recipe/focus_exchange_infusion.json | 2 +- .../recipe/goggles_arcane_workbench.json | 1 - .../recipe/gold_plating_arcane_workbench.json | 1 - .../greatwood_core_arcane_workbench.json | 1 - .../recipe/hungry_chest_arcane_workbench.json | 4 +- .../orichalcum_plating_arcane_workbench.json | 1 - .../thavma/recipe/rune_arcane_workbench.json | 1 - .../recipe/silverwood_core_infusion.json | 2 +- .../recipe/thavmite_ingot_crucible.json | 2 +- .../recipe/thavmite_katana_infusion.json | 4 +- .../recipe/thavmite_plating_infusion.json | 2 +- .../thavmite_vanguard_boots_infusion.json | 2 +- ...thavmite_vanguard_chestplate_infusion.json | 2 +- .../thavmite_vanguard_helmet_infusion.json | 2 +- .../thavmite_vanguard_leggings_infusion.json | 2 +- .../thavma/tags/block/infused_stones.json | 2 - .../data/thavma/tags/item/infused_stones.json | 2 - .../data/thavma/tags/item/shards.json | 1 - .../research/entry/thavma/arcane_lens.json | 2 +- .../research/entry/thavma/infusion.json | 2 +- .../entry/thavma/research_proficiency.json | 2 +- .../research/entry/thavma/research_table.json | 2 +- .../research/entry/thavma/technology.json | 2 +- .../thavma/research/entry/thavma/thavma.json | 2 +- .../thavma/research/entry/thavma/wands.json | 2 +- .../worldgen/configured_feature/ore_aer.json | 27 - .../configured_feature/ore_infused_stone.json | 1 - .../worldgen/placed_feature/ore_aer.json | 4 - .../data/providers/aspects/MineralAspects.kt | 202 +++---- 62 files changed, 327 insertions(+), 803 deletions(-) delete mode 100644 src/generated/resources/assets/thavma/blockstates/aer_infused_deepslate.json delete mode 100644 src/generated/resources/assets/thavma/blockstates/aer_infused_stone.json delete mode 100644 src/generated/resources/assets/thavma/models/block/aer_infused_deepslate.json delete mode 100644 src/generated/resources/assets/thavma/models/block/aer_infused_stone.json delete mode 100644 src/generated/resources/assets/thavma/models/item/aer_infused_deepslate.json delete mode 100644 src/generated/resources/assets/thavma/models/item/aer_infused_stone.json delete mode 100644 src/generated/resources/assets/thavma/models/item/aer_shard.json delete mode 100644 src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_blasting.json delete mode 100644 src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_smelting.json delete mode 100644 src/generated/resources/data/thavma/loot_table/blocks/aer_infused_deepslate.json delete mode 100644 src/generated/resources/data/thavma/loot_table/blocks/aer_infused_stone.json delete mode 100644 src/generated/resources/data/thavma/recipe/aer_shard_blasting.json delete mode 100644 src/generated/resources/data/thavma/recipe/aer_shard_smelting.json delete mode 100644 src/generated/resources/data/thavma/worldgen/configured_feature/ore_aer.json delete mode 100644 src/generated/resources/data/thavma/worldgen/placed_feature/ore_aer.json diff --git a/src/generated/resources/assets/thavma/blockstates/aer_infused_deepslate.json b/src/generated/resources/assets/thavma/blockstates/aer_infused_deepslate.json deleted file mode 100644 index 53342505..00000000 --- a/src/generated/resources/assets/thavma/blockstates/aer_infused_deepslate.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "thavma:block/aer_infused_deepslate" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/thavma/blockstates/aer_infused_stone.json b/src/generated/resources/assets/thavma/blockstates/aer_infused_stone.json deleted file mode 100644 index c166d59b..00000000 --- a/src/generated/resources/assets/thavma/blockstates/aer_infused_stone.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "variants": { - "": { - "model": "thavma:block/aer_infused_stone" - } - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/thavma/lang/en_us.json b/src/generated/resources/assets/thavma/lang/en_us.json index 964113ad..ff9662ae 100644 --- a/src/generated/resources/assets/thavma/lang/en_us.json +++ b/src/generated/resources/assets/thavma/lang/en_us.json @@ -1,42 +1,26 @@ { - "aspect.thavma.aer": "Aer", "aspect.thavma.aether": "Aether", - "aspect.thavma.alienis": "Alienis", "aspect.thavma.alkimia": "Alkimia", "aspect.thavma.aqua": "Aqua", - "aspect.thavma.auram": "Auram", - "aspect.thavma.aversio": "Aversio", - "aspect.thavma.bestia": "Bestia", + "aspect.thavma.civilis": "Civilis", "aspect.thavma.cognitio": "Cognitio", - "aspect.thavma.desiderium": "Desiderium", - "aspect.thavma.exanimis": "Exanimis", + "aspect.thavma.corpus": "Corpus", "aspect.thavma.fabrico": "Fabrico", - "aspect.thavma.gelum": "Gelum", "aspect.thavma.herba": "Herba", - "aspect.thavma.humanus": "Humanus", + "aspect.thavma.hostilis": "Hostilis", "aspect.thavma.ignis": "Ignis", "aspect.thavma.instrumentum": "Instrumentum", "aspect.thavma.lux": "Lux", "aspect.thavma.machina": "Machina", "aspect.thavma.metallum": "Metallum", - "aspect.thavma.mortuus": "Mortuus", - "aspect.thavma.motus": "Motus", - "aspect.thavma.permutatio": "Permutatio", - "aspect.thavma.potentia": "Potentia", - "aspect.thavma.praecantatio": "Praecantatio", + "aspect.thavma.ornatus": "Ornatus", "aspect.thavma.praemunio": "Praemunio", - "aspect.thavma.sensus": "Sensus", "aspect.thavma.tenebrae": "Tenebrae", "aspect.thavma.terra": "Terra", - "aspect.thavma.vacuos": "Vacuos", + "aspect.thavma.vas": "Vas", "aspect.thavma.victus": "Victus", - "aspect.thavma.vinculum": "Vinculum", - "aspect.thavma.vitium": "Vitium", "aspect.thavma.vitreus": "Vitreus", - "aspect.thavma.volatus": "Volatus", "attribute.thavma.revealing": "Revealing", - "block.thavma.aer_infused_deepslate": "Aer Infused Deepslate", - "block.thavma.aer_infused_stone": "Aer Infused Stone", "block.thavma.aether_infused_deepslate": "Aether Infused Deepslate", "block.thavma.aether_infused_stone": "Aether Infused Stone", "block.thavma.aqua_infused_deepslate": "Aqua Infused Deepslate", @@ -87,7 +71,6 @@ "container.thavma.research_table.socketWidget.remove": "Click to remove", "entity.thavma.angry_zombie": "Angry Zombie", "gui.layer.thavma.arcane_lens.no_aspects": "Nothing can be learned from this", - "item.thavma.aer_shard": "Aer Shard", "item.thavma.aether_shard": "Aether Shard", "item.thavma.angry_zombie_spawn_egg": "Angry Zombie Spawn Egg", "item.thavma.apprentice_boots": "[WIP]Apprentice Boots", diff --git a/src/generated/resources/assets/thavma/models/block/aer_infused_deepslate.json b/src/generated/resources/assets/thavma/models/block/aer_infused_deepslate.json deleted file mode 100644 index 10897368..00000000 --- a/src/generated/resources/assets/thavma/models/block/aer_infused_deepslate.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "thavma:block/cube_all_emissive_overlay", - "textures": { - "layer0": "minecraft:block/deepslate", - "layer1": "thavma:block/infused_stone" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/thavma/models/block/aer_infused_stone.json b/src/generated/resources/assets/thavma/models/block/aer_infused_stone.json deleted file mode 100644 index cefaad15..00000000 --- a/src/generated/resources/assets/thavma/models/block/aer_infused_stone.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "thavma:block/cube_all_emissive_overlay", - "textures": { - "layer0": "minecraft:block/stone", - "layer1": "thavma:block/infused_stone" - } -} \ No newline at end of file diff --git a/src/generated/resources/assets/thavma/models/item/aer_infused_deepslate.json b/src/generated/resources/assets/thavma/models/item/aer_infused_deepslate.json deleted file mode 100644 index 4d658156..00000000 --- a/src/generated/resources/assets/thavma/models/item/aer_infused_deepslate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "thavma:block/aer_infused_deepslate" -} \ No newline at end of file diff --git a/src/generated/resources/assets/thavma/models/item/aer_infused_stone.json b/src/generated/resources/assets/thavma/models/item/aer_infused_stone.json deleted file mode 100644 index f89dc107..00000000 --- a/src/generated/resources/assets/thavma/models/item/aer_infused_stone.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "thavma:block/aer_infused_stone" -} \ No newline at end of file diff --git a/src/generated/resources/assets/thavma/models/item/aer_shard.json b/src/generated/resources/assets/thavma/models/item/aer_shard.json deleted file mode 100644 index 3892f60f..00000000 --- a/src/generated/resources/assets/thavma/models/item/aer_shard.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:item/generated", - "textures": { - "layer0": "thavma:item/shard" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/c/tags/block/ore_rates/singular.json b/src/generated/resources/data/c/tags/block/ore_rates/singular.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/c/tags/block/ore_rates/singular.json +++ b/src/generated/resources/data/c/tags/block/ore_rates/singular.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/c/tags/block/ores.json b/src/generated/resources/data/c/tags/block/ores.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/c/tags/block/ores.json +++ b/src/generated/resources/data/c/tags/block/ores.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/c/tags/block/ores_in_ground/deepslate.json b/src/generated/resources/data/c/tags/block/ores_in_ground/deepslate.json index 5179bc9c..861c96e8 100644 --- a/src/generated/resources/data/c/tags/block/ores_in_ground/deepslate.json +++ b/src/generated/resources/data/c/tags/block/ores_in_ground/deepslate.json @@ -1,7 +1,6 @@ { "values": [ "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/c/tags/block/ores_in_ground/stone.json b/src/generated/resources/data/c/tags/block/ores_in_ground/stone.json index b5a3285c..468d2df2 100644 --- a/src/generated/resources/data/c/tags/block/ores_in_ground/stone.json +++ b/src/generated/resources/data/c/tags/block/ores_in_ground/stone.json @@ -1,7 +1,6 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone" diff --git a/src/generated/resources/data/c/tags/item/ore_rates/singular.json b/src/generated/resources/data/c/tags/item/ore_rates/singular.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/c/tags/item/ore_rates/singular.json +++ b/src/generated/resources/data/c/tags/item/ore_rates/singular.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/c/tags/item/ores.json b/src/generated/resources/data/c/tags/item/ores.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/c/tags/item/ores.json +++ b/src/generated/resources/data/c/tags/item/ores.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/c/tags/item/ores_in_ground/deepslate.json b/src/generated/resources/data/c/tags/item/ores_in_ground/deepslate.json index 5179bc9c..861c96e8 100644 --- a/src/generated/resources/data/c/tags/item/ores_in_ground/deepslate.json +++ b/src/generated/resources/data/c/tags/item/ores_in_ground/deepslate.json @@ -1,7 +1,6 @@ { "values": [ "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/c/tags/item/ores_in_ground/stone.json b/src/generated/resources/data/c/tags/item/ores_in_ground/stone.json index b5a3285c..468d2df2 100644 --- a/src/generated/resources/data/c/tags/item/ores_in_ground/stone.json +++ b/src/generated/resources/data/c/tags/item/ores_in_ground/stone.json @@ -1,7 +1,6 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone" diff --git a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/src/generated/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/src/generated/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_blasting.json b/src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_blasting.json deleted file mode 100644 index 1426aabb..00000000 --- a/src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_blasting.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_infused_stones": { - "conditions": { - "items": [ - { - "items": "#thavma:infused_stones" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "thavma:aer_shard_blasting" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_infused_stones" - ] - ], - "rewards": { - "recipes": [ - "thavma:aer_shard_blasting" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_smelting.json b/src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_smelting.json deleted file mode 100644 index edccc38f..00000000 --- a/src/generated/resources/data/thavma/advancement/recipes/misc/aer_shard_smelting.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "parent": "minecraft:recipes/root", - "criteria": { - "has_infused_stones": { - "conditions": { - "items": [ - { - "items": "#thavma:infused_stones" - } - ] - }, - "trigger": "minecraft:inventory_changed" - }, - "has_the_recipe": { - "conditions": { - "recipe": "thavma:aer_shard_smelting" - }, - "trigger": "minecraft:recipe_unlocked" - } - }, - "requirements": [ - [ - "has_the_recipe", - "has_infused_stones" - ] - ], - "rewards": { - "recipes": [ - "thavma:aer_shard_smelting" - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/thavma/data_maps/entity_type/aspect_content.json b/src/generated/resources/data/thavma/data_maps/entity_type/aspect_content.json index 98ae4a90..2eb02295 100644 --- a/src/generated/resources/data/thavma/data_maps/entity_type/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/entity_type/aspect_content.json @@ -17,8 +17,8 @@ "minecraft:chicken": {}, "minecraft:cod": {}, "minecraft:cow": { - "thavma:bestia": 15, - "thavma:terra": 15 + "thavma:terra": 8, + "thavma:victus": 8 }, "minecraft:creeper": { "thavma:herba": 15, @@ -30,17 +30,16 @@ "minecraft:elder_guardian": {}, "minecraft:ender_dragon": {}, "minecraft:enderman": { - "thavma:alienis": 8, - "thavma:desiderium": 4, - "thavma:humanus": 4, - "thavma:motus": 12 + "thavma:civilis": 4, + "thavma:hostilis": 4, + "thavma:tenebrae": 8 }, "minecraft:endermite": {}, "minecraft:evoker": {}, "minecraft:fox": {}, "minecraft:frog": {}, "minecraft:ghast": { - "thavma:exanimis": 12, + "thavma:hostilis": 12, "thavma:ignis": 8 }, "minecraft:glow_squid": {}, @@ -59,9 +58,8 @@ "minecraft:parrot": {}, "minecraft:phantom": {}, "minecraft:pig": { - "thavma:bestia": 10, - "thavma:desiderium": 5, - "thavma:terra": 10 + "thavma:terra": 8, + "thavma:victus": 8 }, "minecraft:piglin": {}, "minecraft:piglin_brute": {}, @@ -72,15 +70,14 @@ "minecraft:ravager": {}, "minecraft:salmon": {}, "minecraft:sheep": { - "thavma:bestia": 10, - "thavma:terra": 10 + "thavma:terra": 8, + "thavma:victus": 8 }, "minecraft:shulker": {}, "minecraft:silverfish": {}, "minecraft:skeleton": { - "thavma:exanimis": 20, - "thavma:humanus": 5, - "thavma:terra": 5 + "thavma:hostilis": 8, + "thavma:terra": 8 }, "minecraft:skeleton_horse": {}, "minecraft:slime": { @@ -92,8 +89,8 @@ "minecraft:snow_golem": {}, "minecraft:spectral_arrow": {}, "minecraft:spider": { - "thavma:bestia": 10, - "thavma:vinculum": 10 + "thavma:hostilis": 8, + "thavma:terra": 8 }, "minecraft:squid": {}, "minecraft:stray": {}, @@ -104,7 +101,7 @@ "minecraft:turtle": {}, "minecraft:vex": {}, "minecraft:villager": { - "thavma:humanus": 15 + "thavma:civilis": 12 }, "minecraft:vindicator": {}, "minecraft:wandering_trader": {}, @@ -115,9 +112,8 @@ "minecraft:wolf": {}, "minecraft:zoglin": {}, "minecraft:zombie": { - "thavma:exanimis": 20, - "thavma:humanus": 10, - "thavma:terra": 5 + "thavma:hostilis": 8, + "thavma:terra": 8 }, "minecraft:zombie_horse": {}, "minecraft:zombie_villager": {}, diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 40bf2efd..ffdc4438 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -20,35 +20,33 @@ "thavma:terra": 1 }, "#c:dusts/redstone": { - "thavma:potentia": 4, + "thavma:machina": 1, "thavma:terra": 1 }, "#c:eggs": { - "thavma:bestia": 2, + "thavma:corpus": 2, "thavma:victus": 4 }, "#c:ender_pearls": { - "thavma:alienis": 4, - "thavma:motus": 4 + "thavma:corpus": 2, + "thavma:instrumentum": 4, + "thavma:tenebrae": 4 }, "#c:feathers": { - "thavma:aer": 4, - "thavma:volatus": 4 + "thavma:corpus": 2, + "thavma:instrumentum": 1 }, "#c:gems/amethyst": { - "thavma:sensus": 1, "thavma:vitreus": 4 }, "#c:gems/diamond": { - "thavma:desiderium": 8, "thavma:vitreus": 8 }, "#c:gems/emerald": { - "thavma:desiderium": 4, "thavma:vitreus": 8 }, "#c:gems/lapis": { - "thavma:sensus": 2, + "thavma:cognitio": 1, "thavma:vitreus": 4 }, "#c:gems/quartz": { @@ -66,27 +64,24 @@ }, "#c:gunpowders": { "thavma:alkimia": 2, - "thavma:potentia": 4, + "thavma:ignis": 4, "thavma:terra": 1 }, "#c:ingots/copper": { - "thavma:metallum": 4, - "thavma:permutatio": 4 + "thavma:metallum": 4 }, "#c:ingots/gold": { - "thavma:desiderium": 8, "thavma:metallum": 4 }, "#c:ingots/iron": { "thavma:metallum": 8 }, "#c:ingots/netherite": { - "thavma:desiderium": 8, "thavma:metallum": 16, "thavma:tenebrae": 4 }, "#c:leathers": { - "thavma:bestia": 8 + "thavma:corpus": 3 }, "#c:netherracks": { "thavma:ignis": 1, @@ -96,27 +91,22 @@ "thavma:terra": 1 }, "#c:ores/coal": { - "thavma:ignis": 8, - "thavma:potentia": 8, - "thavma:terra": 4 + "thavma:ignis": 2, + "thavma:terra": 2 }, "#c:ores/copper": { "thavma:metallum": 4, - "thavma:permutatio": 4, "thavma:terra": 4 }, "#c:ores/diamond": { - "thavma:desiderium": 8, "thavma:terra": 4, "thavma:vitreus": 8 }, "#c:ores/emerald": { - "thavma:desiderium": 4, "thavma:terra": 4, "thavma:vitreus": 8 }, "#c:ores/gold": { - "thavma:desiderium": 8, "thavma:metallum": 4, "thavma:terra": 4 }, @@ -125,7 +115,7 @@ "thavma:terra": 4 }, "#c:ores/lapis": { - "thavma:sensus": 2, + "thavma:cognitio": 1, "thavma:terra": 4, "thavma:vitreus": 4 }, @@ -140,16 +130,14 @@ "thavma:vitreus": 4 }, "#c:ores/redstone": { - "thavma:potentia": 4, - "thavma:terra": 4 + "thavma:machina": 1, + "thavma:terra": 1 }, "#c:raw_materials/copper": { "thavma:metallum": 2, - "thavma:permutatio": 2, "thavma:terra": 2 }, "#c:raw_materials/gold": { - "thavma:desiderium": 4, "thavma:metallum": 2, "thavma:terra": 2 }, @@ -158,12 +146,13 @@ "thavma:terra": 2 }, "#c:rods/blaze": { - "thavma:ignis": 8, - "thavma:potentia": 4 + "thavma:alkimia": 2, + "thavma:corpus": 2, + "thavma:ignis": 4 }, "#c:rods/breeze": { - "thavma:aer": 8, - "thavma:motus": 4 + "thavma:aether": 6, + "thavma:corpus": 2 }, "#c:rods/wooden": { "thavma:herba": 2 @@ -175,44 +164,37 @@ "thavma:terra": 2 }, "#c:storage_blocks/coal": { - "thavma:ignis": 72, - "thavma:potentia": 72 + "thavma:ignis": 18, + "thavma:terra": 18 }, "#c:storage_blocks/copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "#c:storage_blocks/diamond": { - "thavma:desiderium": 72, "thavma:vitreus": 72 }, "#c:storage_blocks/emerald": { - "thavma:desiderium": 36, "thavma:vitreus": 72 }, "#c:storage_blocks/gold": { - "thavma:desiderium": 72, "thavma:metallum": 36 }, "#c:storage_blocks/iron": { "thavma:metallum": 72 }, "#c:storage_blocks/lapis": { - "thavma:sensus": 18, + "thavma:cognitio": 9, "thavma:vitreus": 36 }, "#c:storage_blocks/netherite": { - "thavma:desiderium": 72, "thavma:metallum": 144, "thavma:tenebrae": 36 }, "#c:storage_blocks/raw_copper": { "thavma:metallum": 18, - "thavma:permutatio": 18, "thavma:terra": 18 }, "#c:storage_blocks/raw_gold": { - "thavma:desiderium": 36, "thavma:metallum": 18, "thavma:terra": 18 }, @@ -221,33 +203,32 @@ "thavma:terra": 18 }, "#c:storage_blocks/redstone": { - "thavma:potentia": 36, + "thavma:machina": 9, "thavma:terra": 9 }, "#c:strings": { - "thavma:bestia": 1, + "thavma:corpus": 1, "thavma:fabrico": 1 }, "#c:tools/bow": { - "thavma:aversio": 8, "thavma:fabrico": 2, - "thavma:herba": 2 + "thavma:herba": 2, + "thavma:instrumentum": 8 }, "#c:tools/crossbow": { - "thavma:aversio": 8, "thavma:fabrico": 2, + "thavma:instrumentum": 8, "thavma:metallum": 4 }, "#minecraft:arrows": { - "thavma:aversio": 2, - "thavma:motus": 1 + "thavma:instrumentum": 2 }, "#minecraft:bamboo_blocks": { "thavma:herba": 4 }, "#minecraft:coals": { - "thavma:ignis": 8, - "thavma:potentia": 8 + "thavma:ignis": 2, + "thavma:terra": 2 }, "#minecraft:dirt": { "thavma:terra": 1 @@ -268,17 +249,16 @@ }, "#minecraft:terracotta": { "thavma:ignis": 4, - "thavma:sensus": 1, + "thavma:ornatus": 1, "thavma:terra": 4 }, "#minecraft:wool": { - "thavma:bestia": 8, + "thavma:corpus": 2, "thavma:fabrico": 4 }, "#thavma:goggles": { - "thavma:desiderium": 32, + "thavma:aether": 4, "thavma:metallum": 32, - "thavma:praecantatio": 4, "thavma:vitreus": 4 }, "minecraft:acacia_button": { @@ -312,7 +292,6 @@ "thavma:herba": 6 }, "minecraft:amethyst_block": { - "thavma:sensus": 4, "thavma:vitreus": 16 }, "minecraft:andesite": { @@ -328,7 +307,7 @@ "thavma:terra": 2 }, "minecraft:armadillo_scute": { - "thavma:bestia": 2, + "thavma:corpus": 2, "thavma:praemunio": 1 }, "minecraft:bamboo": { @@ -375,8 +354,7 @@ }, "minecraft:bedrock": { "thavma:tenebrae": 25, - "thavma:terra": 25, - "thavma:vacuos": 25 + "thavma:terra": 25 }, "minecraft:birch_button": { "thavma:herba": 2 @@ -425,9 +403,8 @@ "thavma:terra": 2 }, "minecraft:blaze_powder": { - "thavma:alkimia": 2, - "thavma:ignis": 2, - "thavma:potentia": 1 + "thavma:alkimia": 1, + "thavma:ignis": 2 }, "minecraft:brick": { "thavma:ignis": 1, @@ -500,8 +477,7 @@ "thavma:herba": 6 }, "minecraft:chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:chiseled_deepslate": { "thavma:terra": 2 @@ -534,16 +510,16 @@ "thavma:terra": 2 }, "minecraft:chorus_flower": { - "thavma:alienis": 4, - "thavma:herba": 4 + "thavma:herba": 4, + "thavma:tenebrae": 4 }, "minecraft:chorus_fruit": { - "thavma:alienis": 2, - "thavma:herba": 2 + "thavma:herba": 2, + "thavma:tenebrae": 2 }, "minecraft:chorus_plant": { - "thavma:alienis": 2, - "thavma:herba": 2 + "thavma:herba": 2, + "thavma:tenebrae": 2 }, "minecraft:clay": { "thavma:aqua": 4, @@ -581,8 +557,7 @@ "thavma:terra": 2 }, "minecraft:copper_block": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:cracked_deepslate_bricks": { "thavma:terra": 2 @@ -646,16 +621,13 @@ "thavma:ignis": 6 }, "minecraft:cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:cut_red_sandstone": { "thavma:terra": 4 @@ -739,54 +711,43 @@ "thavma:terra": 2 }, "minecraft:diamond_axe": { - "thavma:desiderium": 24, "thavma:instrumentum": 4, "thavma:vitreus": 24 }, "minecraft:diamond_boots": { - "thavma:desiderium": 32, "thavma:praemunio": 8, "thavma:vitreus": 32 }, "minecraft:diamond_chestplate": { - "thavma:desiderium": 64, "thavma:praemunio": 18, "thavma:vitreus": 64 }, "minecraft:diamond_helmet": { - "thavma:desiderium": 40, "thavma:praemunio": 8, "thavma:vitreus": 40 }, "minecraft:diamond_hoe": { - "thavma:desiderium": 16, "thavma:instrumentum": 4, "thavma:vitreus": 16 }, "minecraft:diamond_horse_armor": { - "thavma:bestia": 8, - "thavma:desiderium": 16, "thavma:praemunio": 12, "thavma:vitreus": 16 }, "minecraft:diamond_leggings": { - "thavma:desiderium": 56, "thavma:praemunio": 14, "thavma:vitreus": 56 }, "minecraft:diamond_pickaxe": { - "thavma:desiderium": 24, "thavma:instrumentum": 4, "thavma:vitreus": 24 }, "minecraft:diamond_shovel": { - "thavma:desiderium": 8, "thavma:instrumentum": 4, "thavma:vitreus": 8 }, "minecraft:diamond_sword": { - "thavma:aversio": 4, - "thavma:desiderium": 16, + "thavma:instrumentum": 4, "thavma:vitreus": 16 }, "minecraft:diorite": { @@ -802,64 +763,59 @@ "thavma:terra": 2 }, "minecraft:end_crystal": { - "thavma:alienis": 4, - "thavma:ignis": 4, - "thavma:potentia": 8, + "thavma:aether": 4, + "thavma:ignis": 8, + "thavma:tenebrae": 4, "thavma:vitreus": 14 }, "minecraft:end_stone_brick_slab": { - "thavma:alienis": 1, + "thavma:tenebrae": 1, "thavma:terra": 1 }, "minecraft:end_stone_brick_stairs": { - "thavma:alienis": 2, + "thavma:tenebrae": 2, "thavma:terra": 2 }, "minecraft:end_stone_brick_wall": { - "thavma:alienis": 2, + "thavma:tenebrae": 2, "thavma:terra": 2 }, "minecraft:end_stone_bricks": { - "thavma:alienis": 2, + "thavma:tenebrae": 2, "thavma:terra": 2 }, "minecraft:ender_eye": { - "thavma:alienis": 4, - "thavma:motus": 4, - "thavma:praecantatio": 2 + "thavma:aether": 2, + "thavma:instrumentum": 4, + "thavma:tenebrae": 4 }, "minecraft:exposed_chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:exposed_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:exposed_cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:exposed_cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:exposed_cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:fire_charge": { - "thavma:aversio": 2, + "thavma:alkimia": 4, "thavma:ignis": 4, - "thavma:potentia": 4 + "thavma:instrumentum": 2 }, "minecraft:firework_rocket": { - "thavma:potentia": 1, - "thavma:sensus": 1 + "thavma:ignis": 1, + "thavma:ornatus": 1 }, "minecraft:firework_star": { - "thavma:potentia": 1, - "thavma:sensus": 2 + "thavma:ignis": 1, + "thavma:ornatus": 2 }, "minecraft:flint": { "thavma:instrumentum": 2, @@ -867,61 +823,50 @@ }, "minecraft:ghast_tear": { "thavma:alkimia": 4, - "thavma:exanimis": 4 + "thavma:hostilis": 4 }, "minecraft:glowstone": { "thavma:lux": 16, "thavma:terra": 4 }, "minecraft:golden_axe": { - "thavma:desiderium": 24, "thavma:instrumentum": 2, "thavma:metallum": 12 }, "minecraft:golden_boots": { - "thavma:desiderium": 32, "thavma:metallum": 16, "thavma:praemunio": 2 }, "minecraft:golden_chestplate": { - "thavma:desiderium": 64, "thavma:metallum": 32, "thavma:praemunio": 10 }, "minecraft:golden_helmet": { - "thavma:desiderium": 40, "thavma:metallum": 20, "thavma:praemunio": 4 }, "minecraft:golden_hoe": { - "thavma:desiderium": 16, "thavma:instrumentum": 2, "thavma:metallum": 8 }, "minecraft:golden_horse_armor": { - "thavma:bestia": 8, - "thavma:desiderium": 16, "thavma:metallum": 8, "thavma:praemunio": 8 }, "minecraft:golden_leggings": { - "thavma:desiderium": 56, "thavma:metallum": 28, "thavma:praemunio": 6 }, "minecraft:golden_pickaxe": { - "thavma:desiderium": 24, "thavma:instrumentum": 2, "thavma:metallum": 12 }, "minecraft:golden_shovel": { - "thavma:desiderium": 8, "thavma:instrumentum": 2, "thavma:metallum": 4 }, "minecraft:golden_sword": { - "thavma:aversio": 2, - "thavma:desiderium": 16, + "thavma:instrumentum": 2, "thavma:metallum": 8 }, "minecraft:granite": { @@ -941,9 +886,8 @@ "thavma:terra": 1 }, "minecraft:heavy_core": { - "thavma:desiderium": 8, - "thavma:metallum": 16, - "thavma:vacuos": 2 + "thavma:instrumentum": 6, + "thavma:metallum": 16 }, "minecraft:iron_axe": { "thavma:instrumentum": 3, @@ -966,7 +910,6 @@ "thavma:metallum": 16 }, "minecraft:iron_horse_armor": { - "thavma:bestia": 8, "thavma:metallum": 16, "thavma:praemunio": 6 }, @@ -983,7 +926,7 @@ "thavma:metallum": 8 }, "minecraft:iron_sword": { - "thavma:aversio": 3, + "thavma:instrumentum": 3, "thavma:metallum": 16 }, "minecraft:jungle_button": { @@ -1017,29 +960,28 @@ "thavma:herba": 6 }, "minecraft:leather_boots": { - "thavma:bestia": 32, + "thavma:corpus": 12, "thavma:praemunio": 2 }, "minecraft:leather_chestplate": { - "thavma:bestia": 64, + "thavma:corpus": 24, "thavma:praemunio": 6 }, "minecraft:leather_helmet": { - "thavma:bestia": 40, + "thavma:corpus": 15, "thavma:praemunio": 2 }, "minecraft:leather_horse_armor": { - "thavma:bestia": 16, + "thavma:corpus": 21, "thavma:praemunio": 4 }, "minecraft:leather_leggings": { - "thavma:bestia": 56, + "thavma:corpus": 21, "thavma:praemunio": 4 }, "minecraft:mace": { - "thavma:aer": 8, - "thavma:metallum": 16, - "thavma:motus": 8 + "thavma:aether": 8, + "thavma:metallum": 16 }, "minecraft:mangrove_button": { "thavma:herba": 2 @@ -1152,43 +1094,36 @@ "thavma:ignis": 2 }, "minecraft:netherite_axe": { - "thavma:desiderium": 24, "thavma:instrumentum": 6, "thavma:metallum": 48, "thavma:tenebrae": 12 }, "minecraft:netherite_boots": { - "thavma:desiderium": 32, "thavma:metallum": 32, "thavma:praemunio": 9, "thavma:tenebrae": 4 }, "minecraft:netherite_chestplate": { - "thavma:desiderium": 64, "thavma:metallum": 64, "thavma:praemunio": 19, "thavma:tenebrae": 4 }, "minecraft:netherite_helmet": { - "thavma:desiderium": 40, "thavma:metallum": 40, "thavma:praemunio": 9, "thavma:tenebrae": 4 }, "minecraft:netherite_hoe": { - "thavma:desiderium": 16, "thavma:instrumentum": 6, "thavma:metallum": 32, "thavma:tenebrae": 8 }, "minecraft:netherite_leggings": { - "thavma:desiderium": 56, "thavma:metallum": 56, "thavma:praemunio": 15, "thavma:tenebrae": 4 }, "minecraft:netherite_pickaxe": { - "thavma:desiderium": 24, "thavma:instrumentum": 6, "thavma:metallum": 48, "thavma:tenebrae": 12 @@ -1199,14 +1134,12 @@ "thavma:terra": 2 }, "minecraft:netherite_shovel": { - "thavma:desiderium": 8, "thavma:instrumentum": 6, "thavma:metallum": 16, "thavma:tenebrae": 4 }, "minecraft:netherite_sword": { - "thavma:aversio": 6, - "thavma:desiderium": 16, + "thavma:instrumentum": 6, "thavma:metallum": 32, "thavma:tenebrae": 8 }, @@ -1241,24 +1174,19 @@ "thavma:herba": 6 }, "minecraft:oxidized_chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:oxidized_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:oxidized_cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:oxidized_cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:oxidized_cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:packed_mud": { "thavma:herba": 2, @@ -1364,11 +1292,11 @@ "thavma:terra": 2 }, "minecraft:popped_chorus_fruit": { - "thavma:alienis": 2, - "thavma:herba": 2 + "thavma:herba": 2, + "thavma:tenebrae": 2 }, "minecraft:powder_snow_bucket": { - "thavma:gelum": 2 + "thavma:aqua": 2 }, "minecraft:prismarine": { "thavma:aqua": 4, @@ -1408,16 +1336,16 @@ "thavma:terra": 4 }, "minecraft:purpur_block": { - "thavma:alienis": 2, - "thavma:herba": 2 + "thavma:herba": 2, + "thavma:tenebrae": 2 }, "minecraft:purpur_slab": { - "thavma:alienis": 1, - "thavma:herba": 1 + "thavma:herba": 1, + "thavma:tenebrae": 1 }, "minecraft:purpur_stairs": { - "thavma:alienis": 2, - "thavma:herba": 2 + "thavma:herba": 2, + "thavma:tenebrae": 2 }, "minecraft:quartz_block": { "thavma:ignis": 4, @@ -1464,8 +1392,8 @@ "thavma:terra": 4 }, "minecraft:rotten_flesh": { - "thavma:exanimis": 2, - "thavma:humanus": 2 + "thavma:corpus": 2, + "thavma:hostilis": 2 }, "minecraft:sandstone": { "thavma:terra": 4 @@ -1480,7 +1408,6 @@ "thavma:terra": 4 }, "minecraft:short_grass": { - "thavma:aer": 1, "thavma:herba": 1 }, "minecraft:smooth_quartz": { @@ -1514,13 +1441,13 @@ "thavma:terra": 4 }, "minecraft:snow": { - "thavma:gelum": 1 + "thavma:aqua": 1 }, "minecraft:snow_block": { - "thavma:gelum": 4 + "thavma:aqua": 4 }, "minecraft:snowball": { - "thavma:gelum": 1 + "thavma:aqua": 1 }, "minecraft:spruce_button": { "thavma:herba": 2 @@ -1596,7 +1523,7 @@ "thavma:terra": 2 }, "minecraft:stone_sword": { - "thavma:aversio": 2, + "thavma:instrumentum": 2, "thavma:terra": 8 }, "minecraft:sugar": { @@ -1604,34 +1531,31 @@ "thavma:victus": 1 }, "minecraft:sugar_cane": { - "thavma:aer": 1, "thavma:aqua": 1, "thavma:herba": 2 }, "minecraft:tall_grass": { - "thavma:aer": 1, "thavma:herba": 1 }, "minecraft:tnt": { - "thavma:potentia": 20, + "thavma:alkimia": 8, + "thavma:ignis": 8, "thavma:terra": 1 }, "minecraft:torch": { "thavma:lux": 4 }, "minecraft:totem_of_undying": { - "thavma:desiderium": 8, - "thavma:praecantatio": 8, + "thavma:aether": 8, "thavma:victus": 16 }, "minecraft:trident": { "thavma:aqua": 8, - "thavma:metallum": 12, - "thavma:motus": 8 + "thavma:metallum": 12 }, "minecraft:tripwire_hook": { - "thavma:metallum": 2, - "thavma:vinculum": 2 + "thavma:machina": 2, + "thavma:metallum": 1 }, "minecraft:tuff": { "thavma:terra": 2 @@ -1659,12 +1583,12 @@ }, "minecraft:turtle_helmet": { "thavma:aqua": 5, - "thavma:bestia": 10, + "thavma:corpus": 10, "thavma:praemunio": 4 }, "minecraft:turtle_scute": { "thavma:aqua": 1, - "thavma:bestia": 2, + "thavma:corpus": 2, "thavma:praemunio": 1 }, "minecraft:warped_button": { @@ -1708,111 +1632,87 @@ "thavma:ignis": 6 }, "minecraft:waxed_chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_copper_block": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:waxed_cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_exposed_chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_exposed_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_exposed_cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_exposed_cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:waxed_exposed_cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_oxidized_chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_oxidized_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_oxidized_cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_oxidized_cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:waxed_oxidized_cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_weathered_chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_weathered_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_weathered_cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:waxed_weathered_cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:waxed_weathered_cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:weathered_chiseled_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:weathered_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:weathered_cut_copper": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:weathered_cut_copper_slab": { - "thavma:metallum": 18, - "thavma:permutatio": 18 + "thavma:metallum": 18 }, "minecraft:weathered_cut_copper_stairs": { - "thavma:metallum": 36, - "thavma:permutatio": 36 + "thavma:metallum": 36 }, "minecraft:wind_charge": { - "thavma:aer": 2, - "thavma:motus": 1 + "thavma:aether": 4, + "thavma:alkimia": 4, + "thavma:instrumentum": 2 }, "minecraft:wolf_armor": { - "thavma:bestia": 8, + "thavma:corpus": 8, "thavma:praemunio": 6 }, "minecraft:wooden_axe": { @@ -1832,17 +1732,8 @@ "thavma:instrumentum": 1 }, "minecraft:wooden_sword": { - "thavma:aversio": 1, - "thavma:herba": 8 - }, - "thavma:aer_infused_deepslate": { - "thavma:aer": 4 - }, - "thavma:aer_infused_stone": { - "thavma:aer": 4 - }, - "thavma:aer_shard": { - "thavma:aer": 4 + "thavma:herba": 8, + "thavma:instrumentum": 1 }, "thavma:aether_infused_deepslate": { "thavma:aether": 4 @@ -1854,18 +1745,18 @@ "thavma:aether": 4 }, "thavma:apprentice_boots": { + "thavma:aether": 4, "thavma:fabrico": 16, - "thavma:praecantatio": 4, "thavma:praemunio": 2 }, "thavma:apprentice_chestplate": { + "thavma:aether": 8, "thavma:fabrico": 32, - "thavma:praecantatio": 8, "thavma:praemunio": 2 }, "thavma:apprentice_leggings": { + "thavma:aether": 7, "thavma:fabrico": 28, - "thavma:praecantatio": 7, "thavma:praemunio": 2 }, "thavma:aqua_infused_deepslate": { @@ -1878,55 +1769,52 @@ "thavma:aqua": 4 }, "thavma:arcane_lens": { - "thavma:desiderium": 32, + "thavma:aether": 2, "thavma:metallum": 16, - "thavma:praecantatio": 2, "thavma:vitreus": 2 }, "thavma:arcane_workbench": { + "thavma:aether": 2, "thavma:fabrico": 12, - "thavma:herba": 4, - "thavma:praecantatio": 2 + "thavma:herba": 4 }, "thavma:cracked_elemental_stone": { - "thavma:praecantatio": 1, + "thavma:aether": 1, "thavma:terra": 4 }, "thavma:crucible": { + "thavma:aether": 2, "thavma:alkimia": 8, - "thavma:metallum": 56, - "thavma:praecantatio": 2 + "thavma:metallum": 56 }, "thavma:elemental_core": { - "thavma:praecantatio": 2, + "thavma:aether": 2, "thavma:terra": 6 }, "thavma:elemental_stone": { - "thavma:praecantatio": 1, + "thavma:aether": 1, "thavma:terra": 4 }, "thavma:elemental_stone_bricks": { - "thavma:praecantatio": 1, + "thavma:aether": 1, "thavma:terra": 4 }, "thavma:elemental_stone_slab": { "thavma:terra": 2 }, "thavma:elemental_stone_stairs": { - "thavma:praecantatio": 1, + "thavma:aether": 1, "thavma:terra": 4 }, "thavma:eternal_flame": { "thavma:ignis": 8, - "thavma:lux": 12, - "thavma:potentia": 8 + "thavma:lux": 12 }, "thavma:fabric": { - "thavma:fabrico": 4, - "thavma:praecantatio": 1 + "thavma:aether": 1, + "thavma:fabrico": 4 }, "thavma:gold_plating": { - "thavma:desiderium": 16, "thavma:metallum": 8 }, "thavma:greatwood_planks": { @@ -1951,31 +1839,29 @@ "thavma:metallum": 16 }, "thavma:orichalcum_block": { - "thavma:metallum": 36, - "thavma:permutatio": 36, - "thavma:praecantatio": 36 + "thavma:aether": 36, + "thavma:metallum": 36 }, "thavma:orichalcum_ingot": { "thavma:instrumentum": 4, - "thavma:metallum": 4, - "thavma:permutatio": 4 + "thavma:metallum": 4 }, "thavma:orichalcum_plating": { "thavma:instrumentum": 8, - "thavma:metallum": 8, - "thavma:permutatio": 8 + "thavma:metallum": 8 }, "thavma:research_table": { - "thavma:herba": 12, - "thavma:praecantatio": 2 + "thavma:aether": 2, + "thavma:herba": 12 }, "thavma:rotten_brain": { - "thavma:cognitio": 16, - "thavma:exanimis": 8 + "thavma:cognitio": 12, + "thavma:corpus": 2, + "thavma:hostilis": 2 }, "thavma:sealing_jar": { - "thavma:praecantatio": 2, - "thavma:vacuos": 2, + "thavma:aether": 2, + "thavma:alkimia": 2, "thavma:vitreus": 4 }, "thavma:table": { @@ -1991,66 +1877,66 @@ "thavma:terra": 4 }, "thavma:thavmite_axe": { + "thavma:aether": 12, "thavma:instrumentum": 4, - "thavma:metallum": 24, - "thavma:praecantatio": 12 + "thavma:metallum": 24 }, "thavma:thavmite_block": { - "thavma:metallum": 72, - "thavma:praecantatio": 36 + "thavma:aether": 36, + "thavma:metallum": 72 }, "thavma:thavmite_boots": { + "thavma:aether": 16, "thavma:metallum": 32, - "thavma:praecantatio": 16, "thavma:praemunio": 5 }, "thavma:thavmite_chestplate": { + "thavma:aether": 32, "thavma:metallum": 64, - "thavma:praecantatio": 32, "thavma:praemunio": 13 }, "thavma:thavmite_hammer": { + "thavma:aether": 24, "thavma:instrumentum": 4, - "thavma:metallum": 48, - "thavma:praecantatio": 24 + "thavma:metallum": 48 }, "thavma:thavmite_helmet": { + "thavma:aether": 20, "thavma:metallum": 40, - "thavma:praecantatio": 20, "thavma:praemunio": 7 }, "thavma:thavmite_hoe": { + "thavma:aether": 8, "thavma:instrumentum": 4, - "thavma:metallum": 16, - "thavma:praecantatio": 8 + "thavma:metallum": 16 }, "thavma:thavmite_ingot": { - "thavma:metallum": 8, - "thavma:praecantatio": 4 + "thavma:aether": 4, + "thavma:metallum": 8 }, "thavma:thavmite_leggings": { + "thavma:aether": 28, "thavma:metallum": 56, - "thavma:praecantatio": 28, "thavma:praemunio": 11 }, "thavma:thavmite_pickaxe": { + "thavma:aether": 12, "thavma:instrumentum": 4, - "thavma:metallum": 24, - "thavma:praecantatio": 12 + "thavma:metallum": 24 }, "thavma:thavmite_plating": { - "thavma:metallum": 16, - "thavma:praecantatio": 8 + "thavma:aether": 8, + "thavma:metallum": 16 }, "thavma:thavmite_shovel": { + "thavma:aether": 4, "thavma:instrumentum": 4, - "thavma:metallum": 8, - "thavma:praecantatio": 4 + "thavma:metallum": 8 }, "thavma:thavmite_sword": { - "thavma:aversio": 4, - "thavma:metallum": 16, - "thavma:praecantatio": 8 + "thavma:aether": 8, + "thavma:instrumentum": 4, + "thavma:metallum": 16 } } } \ No newline at end of file diff --git a/src/generated/resources/data/thavma/loot_table/blocks/aer_infused_deepslate.json b/src/generated/resources/data/thavma/loot_table/blocks/aer_infused_deepslate.json deleted file mode 100644 index 62095c94..00000000 --- a/src/generated/resources/data/thavma/loot_table/blocks/aer_infused_deepslate.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "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": "thavma:aer_infused_deepslate" - }, - { - "type": "minecraft:item", - "functions": [ - { - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops", - "function": "minecraft:apply_bonus" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "thavma:aer_shard" - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "thavma:blocks/aer_infused_deepslate" -} \ No newline at end of file diff --git a/src/generated/resources/data/thavma/loot_table/blocks/aer_infused_stone.json b/src/generated/resources/data/thavma/loot_table/blocks/aer_infused_stone.json deleted file mode 100644 index b8955056..00000000 --- a/src/generated/resources/data/thavma/loot_table/blocks/aer_infused_stone.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "minecraft:block", - "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": "thavma:aer_infused_stone" - }, - { - "type": "minecraft:item", - "functions": [ - { - "enchantment": "minecraft:fortune", - "formula": "minecraft:ore_drops", - "function": "minecraft:apply_bonus" - }, - { - "function": "minecraft:explosion_decay" - } - ], - "name": "thavma:aer_shard" - } - ] - } - ], - "rolls": 1.0 - } - ], - "random_sequence": "thavma:blocks/aer_infused_stone" -} \ No newline at end of file diff --git a/src/generated/resources/data/thavma/recipe/aer_shard_blasting.json b/src/generated/resources/data/thavma/recipe/aer_shard_blasting.json deleted file mode 100644 index 46775f8f..00000000 --- a/src/generated/resources/data/thavma/recipe/aer_shard_blasting.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:blasting", - "category": "misc", - "cookingtime": 100, - "experience": 1.0, - "ingredient": [ - { - "item": "thavma:aer_infused_stone" - }, - { - "item": "thavma:aer_infused_deepslate" - } - ], - "result": { - "count": 1, - "id": "thavma:aer_shard" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/thavma/recipe/aer_shard_smelting.json b/src/generated/resources/data/thavma/recipe/aer_shard_smelting.json deleted file mode 100644 index 8a19b547..00000000 --- a/src/generated/resources/data/thavma/recipe/aer_shard_smelting.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "minecraft:smelting", - "category": "misc", - "cookingtime": 200, - "experience": 1.0, - "ingredient": [ - { - "item": "thavma:aer_infused_stone" - }, - { - "item": "thavma:aer_infused_deepslate" - } - ], - "result": { - "count": 1, - "id": "thavma:aer_shard" - } -} \ No newline at end of file diff --git a/src/generated/resources/data/thavma/recipe/arcane_levitator_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/arcane_levitator_arcane_workbench.json index 3c0352a1..ed44aa41 100644 --- a/src/generated/resources/data/thavma/recipe/arcane_levitator_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/arcane_levitator_arcane_workbench.json @@ -1,13 +1,12 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 12, - "thavma:aether": 4, - "thavma:terra": 4 + "thavma:aether": 8, + "thavma:terra": 8 }, "key": { "a": { - "item": "thavma:aer_shard" + "item": "thavma:terra_shard" }, "c": { "item": "thavma:elemental_core" diff --git a/src/generated/resources/data/thavma/recipe/elemental_core_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/elemental_core_arcane_workbench.json index fddd71c9..4ca6a4a1 100644 --- a/src/generated/resources/data/thavma/recipe/elemental_core_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/elemental_core_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 8, "thavma:aether": 8, "thavma:aqua": 8, "thavma:ignis": 8, diff --git a/src/generated/resources/data/thavma/recipe/elemental_stone_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/elemental_stone_arcane_workbench.json index 8488a20b..40fe2e16 100644 --- a/src/generated/resources/data/thavma/recipe/elemental_stone_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/elemental_stone_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 16, "thavma:aether": 16, "thavma:aqua": 16, "thavma:ignis": 16, diff --git a/src/generated/resources/data/thavma/recipe/eternal_flame_crucible.json b/src/generated/resources/data/thavma/recipe/eternal_flame_crucible.json index 5e665160..abb1fed5 100644 --- a/src/generated/resources/data/thavma/recipe/eternal_flame_crucible.json +++ b/src/generated/resources/data/thavma/recipe/eternal_flame_crucible.json @@ -2,8 +2,7 @@ "type": "thavma:crucible", "aspects": { "thavma:ignis": 8, - "thavma:lux": 8, - "thavma:potentia": 8 + "thavma:lux": 8 }, "catalyst": { "item": "minecraft:glowstone_dust" diff --git a/src/generated/resources/data/thavma/recipe/fabric_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/fabric_arcane_workbench.json index 11b4bbe0..08bb880d 100644 --- a/src/generated/resources/data/thavma/recipe/fabric_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/fabric_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 8, "thavma:aether": 8, "thavma:aqua": 8, "thavma:ignis": 8, diff --git a/src/generated/resources/data/thavma/recipe/focus_enderchest_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/focus_enderchest_arcane_workbench.json index e9ef6a10..b6dc91d7 100644 --- a/src/generated/resources/data/thavma/recipe/focus_enderchest_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/focus_enderchest_arcane_workbench.json @@ -1,7 +1,7 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 12, + "thavma:aether": 12, "thavma:terra": 12 }, "key": { diff --git a/src/generated/resources/data/thavma/recipe/focus_enderpearl_infusion.json b/src/generated/resources/data/thavma/recipe/focus_enderpearl_infusion.json index 01137e24..dc8d0710 100644 --- a/src/generated/resources/data/thavma/recipe/focus_enderpearl_infusion.json +++ b/src/generated/resources/data/thavma/recipe/focus_enderpearl_infusion.json @@ -1,9 +1,9 @@ { "type": "thavma:infusion", "aspects": { - "thavma:alienis": 16, + "thavma:aether": 20, "thavma:instrumentum": 16, - "thavma:motus": 32 + "thavma:tenebrae": 16 }, "base": { "item": "minecraft:ender_pearl" diff --git a/src/generated/resources/data/thavma/recipe/focus_exchange_infusion.json b/src/generated/resources/data/thavma/recipe/focus_exchange_infusion.json index 873ac866..a683c8d8 100644 --- a/src/generated/resources/data/thavma/recipe/focus_exchange_infusion.json +++ b/src/generated/resources/data/thavma/recipe/focus_exchange_infusion.json @@ -2,7 +2,7 @@ "type": "thavma:infusion", "aspects": { "thavma:instrumentum": 16, - "thavma:permutatio": 40 + "thavma:ornatus": 40 }, "base": { "item": "minecraft:quartz_block" diff --git a/src/generated/resources/data/thavma/recipe/goggles_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/goggles_arcane_workbench.json index 85638baf..fd349aa0 100644 --- a/src/generated/resources/data/thavma/recipe/goggles_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/goggles_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 4, "thavma:aether": 4, "thavma:aqua": 4, "thavma:ignis": 4, diff --git a/src/generated/resources/data/thavma/recipe/gold_plating_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/gold_plating_arcane_workbench.json index 6517a812..e9ba8ef6 100644 --- a/src/generated/resources/data/thavma/recipe/gold_plating_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/gold_plating_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 8, "thavma:aether": 8, "thavma:aqua": 8, "thavma:ignis": 8, diff --git a/src/generated/resources/data/thavma/recipe/greatwood_core_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/greatwood_core_arcane_workbench.json index f6c84741..003ee5b6 100644 --- a/src/generated/resources/data/thavma/recipe/greatwood_core_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/greatwood_core_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 8, "thavma:aether": 8, "thavma:aqua": 8, "thavma:ignis": 8, diff --git a/src/generated/resources/data/thavma/recipe/hungry_chest_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/hungry_chest_arcane_workbench.json index cce3b2cf..fa2c1e67 100644 --- a/src/generated/resources/data/thavma/recipe/hungry_chest_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/hungry_chest_arcane_workbench.json @@ -1,8 +1,8 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 8, - "thavma:aether": 4 + "thavma:aether": 4, + "thavma:terra": 8 }, "key": { "t": { diff --git a/src/generated/resources/data/thavma/recipe/orichalcum_plating_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/orichalcum_plating_arcane_workbench.json index be5ec803..fb6f5faf 100644 --- a/src/generated/resources/data/thavma/recipe/orichalcum_plating_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/orichalcum_plating_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 4, "thavma:aether": 4, "thavma:aqua": 4, "thavma:ignis": 4, diff --git a/src/generated/resources/data/thavma/recipe/rune_arcane_workbench.json b/src/generated/resources/data/thavma/recipe/rune_arcane_workbench.json index 3d00df91..1074812d 100644 --- a/src/generated/resources/data/thavma/recipe/rune_arcane_workbench.json +++ b/src/generated/resources/data/thavma/recipe/rune_arcane_workbench.json @@ -1,7 +1,6 @@ { "type": "thavma:arcane_workbench", "aspects": { - "thavma:aer": 8, "thavma:aether": 8, "thavma:aqua": 8, "thavma:ignis": 8, diff --git a/src/generated/resources/data/thavma/recipe/silverwood_core_infusion.json b/src/generated/resources/data/thavma/recipe/silverwood_core_infusion.json index edda876e..b8166fb0 100644 --- a/src/generated/resources/data/thavma/recipe/silverwood_core_infusion.json +++ b/src/generated/resources/data/thavma/recipe/silverwood_core_infusion.json @@ -1,7 +1,7 @@ { "type": "thavma:infusion", "aspects": { - "thavma:praecantatio": 16 + "thavma:aether": 16 }, "base": { "item": "thavma:silverwood_log" diff --git a/src/generated/resources/data/thavma/recipe/thavmite_ingot_crucible.json b/src/generated/resources/data/thavma/recipe/thavmite_ingot_crucible.json index d34116d0..dcfc3d9a 100644 --- a/src/generated/resources/data/thavma/recipe/thavmite_ingot_crucible.json +++ b/src/generated/resources/data/thavma/recipe/thavmite_ingot_crucible.json @@ -1,7 +1,7 @@ { "type": "thavma:crucible", "aspects": { - "thavma:praecantatio": 4 + "thavma:aether": 4 }, "catalyst": { "item": "minecraft:iron_ingot" diff --git a/src/generated/resources/data/thavma/recipe/thavmite_katana_infusion.json b/src/generated/resources/data/thavma/recipe/thavmite_katana_infusion.json index 54831af4..fdd64853 100644 --- a/src/generated/resources/data/thavma/recipe/thavmite_katana_infusion.json +++ b/src/generated/resources/data/thavma/recipe/thavmite_katana_infusion.json @@ -1,8 +1,8 @@ { "type": "thavma:infusion", "aspects": { - "thavma:aversio": 16, - "thavma:praecantatio": 16 + "thavma:aether": 16, + "thavma:instrumentum": 16 }, "base": { "item": "thavma:thavmite_sword" diff --git a/src/generated/resources/data/thavma/recipe/thavmite_plating_infusion.json b/src/generated/resources/data/thavma/recipe/thavmite_plating_infusion.json index 212d70a6..954d0951 100644 --- a/src/generated/resources/data/thavma/recipe/thavmite_plating_infusion.json +++ b/src/generated/resources/data/thavma/recipe/thavmite_plating_infusion.json @@ -1,7 +1,7 @@ { "type": "thavma:infusion", "aspects": { - "thavma:praecantatio": 16 + "thavma:aether": 16 }, "base": { "item": "thavma:thavmite_ingot" diff --git a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_boots_infusion.json b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_boots_infusion.json index ec837704..970a56cc 100644 --- a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_boots_infusion.json +++ b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_boots_infusion.json @@ -1,7 +1,7 @@ { "type": "thavma:infusion", "aspects": { - "thavma:praecantatio": 16, + "thavma:aether": 16, "thavma:praemunio": 32 }, "base": { diff --git a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_chestplate_infusion.json b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_chestplate_infusion.json index 884c7e7e..65c91e12 100644 --- a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_chestplate_infusion.json +++ b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_chestplate_infusion.json @@ -1,7 +1,7 @@ { "type": "thavma:infusion", "aspects": { - "thavma:praecantatio": 16, + "thavma:aether": 16, "thavma:praemunio": 32 }, "base": { diff --git a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_helmet_infusion.json b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_helmet_infusion.json index 8b0792c5..6b2d4fff 100644 --- a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_helmet_infusion.json +++ b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_helmet_infusion.json @@ -1,7 +1,7 @@ { "type": "thavma:infusion", "aspects": { - "thavma:praecantatio": 16, + "thavma:aether": 16, "thavma:praemunio": 32 }, "base": { diff --git a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_leggings_infusion.json b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_leggings_infusion.json index c95d7690..394d87d9 100644 --- a/src/generated/resources/data/thavma/recipe/thavmite_vanguard_leggings_infusion.json +++ b/src/generated/resources/data/thavma/recipe/thavmite_vanguard_leggings_infusion.json @@ -1,7 +1,7 @@ { "type": "thavma:infusion", "aspects": { - "thavma:praecantatio": 16, + "thavma:aether": 16, "thavma:praemunio": 32 }, "base": { diff --git a/src/generated/resources/data/thavma/tags/block/infused_stones.json b/src/generated/resources/data/thavma/tags/block/infused_stones.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/thavma/tags/block/infused_stones.json +++ b/src/generated/resources/data/thavma/tags/block/infused_stones.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/thavma/tags/item/infused_stones.json b/src/generated/resources/data/thavma/tags/item/infused_stones.json index cb5100c7..86267856 100644 --- a/src/generated/resources/data/thavma/tags/item/infused_stones.json +++ b/src/generated/resources/data/thavma/tags/item/infused_stones.json @@ -1,12 +1,10 @@ { "values": [ "thavma:ignis_infused_stone", - "thavma:aer_infused_stone", "thavma:terra_infused_stone", "thavma:aqua_infused_stone", "thavma:aether_infused_stone", "thavma:ignis_infused_deepslate", - "thavma:aer_infused_deepslate", "thavma:terra_infused_deepslate", "thavma:aqua_infused_deepslate", "thavma:aether_infused_deepslate" diff --git a/src/generated/resources/data/thavma/tags/item/shards.json b/src/generated/resources/data/thavma/tags/item/shards.json index 1b8a2205..9b3046d5 100644 --- a/src/generated/resources/data/thavma/tags/item/shards.json +++ b/src/generated/resources/data/thavma/tags/item/shards.json @@ -1,7 +1,6 @@ { "values": [ "thavma:ignis_shard", - "thavma:aer_shard", "thavma:terra_shard", "thavma:aqua_shard", "thavma:aether_shard" diff --git a/src/generated/resources/data/thavma/thavma/research/entry/thavma/arcane_lens.json b/src/generated/resources/data/thavma/thavma/research/entry/thavma/arcane_lens.json index 95883011..b1cf4745 100644 --- a/src/generated/resources/data/thavma/thavma/research/entry/thavma/arcane_lens.json +++ b/src/generated/resources/data/thavma/thavma/research/entry/thavma/arcane_lens.json @@ -15,7 +15,7 @@ "locked": true }, { - "aspect": "thavma:praecantatio", + "aspect": "thavma:aether", "broken": false, "indices": { "col": 4, diff --git a/src/generated/resources/data/thavma/thavma/research/entry/thavma/infusion.json b/src/generated/resources/data/thavma/thavma/research/entry/thavma/infusion.json index a1fa98fe..ca774a8a 100644 --- a/src/generated/resources/data/thavma/thavma/research/entry/thavma/infusion.json +++ b/src/generated/resources/data/thavma/thavma/research/entry/thavma/infusion.json @@ -13,7 +13,7 @@ "locked": true }, { - "aspect": "thavma:praecantatio", + "aspect": "thavma:aether", "broken": false, "indices": { "col": 4, diff --git a/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_proficiency.json b/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_proficiency.json index 8baf795f..382dde7e 100644 --- a/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_proficiency.json +++ b/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_proficiency.json @@ -4,7 +4,7 @@ "defaultKnown": false, "defaultResearchState": [ { - "aspect": "thavma:praecantatio", + "aspect": "thavma:aether", "broken": false, "indices": { "col": 0, diff --git a/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_table.json b/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_table.json index b05d2012..1edfaf76 100644 --- a/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_table.json +++ b/src/generated/resources/data/thavma/thavma/research/entry/thavma/research_table.json @@ -10,7 +10,7 @@ "defaultKnown": false, "defaultResearchState": [ { - "aspect": "thavma:praecantatio", + "aspect": "thavma:aether", "broken": false, "indices": { "col": 0, diff --git a/src/generated/resources/data/thavma/thavma/research/entry/thavma/technology.json b/src/generated/resources/data/thavma/thavma/research/entry/thavma/technology.json index 448ccb96..03f96e16 100644 --- a/src/generated/resources/data/thavma/thavma/research/entry/thavma/technology.json +++ b/src/generated/resources/data/thavma/thavma/research/entry/thavma/technology.json @@ -13,7 +13,7 @@ "locked": true }, { - "aspect": "thavma:humanus", + "aspect": "thavma:civilis", "broken": false, "indices": { "col": 4, diff --git a/src/generated/resources/data/thavma/thavma/research/entry/thavma/thavma.json b/src/generated/resources/data/thavma/thavma/research/entry/thavma/thavma.json index 6f2e27ff..8c91c2af 100644 --- a/src/generated/resources/data/thavma/thavma/research/entry/thavma/thavma.json +++ b/src/generated/resources/data/thavma/thavma/research/entry/thavma/thavma.json @@ -16,7 +16,7 @@ "locked": true }, { - "aspect": "thavma:praecantatio", + "aspect": "thavma:aether", "broken": false, "indices": { "col": 4, diff --git a/src/generated/resources/data/thavma/thavma/research/entry/thavma/wands.json b/src/generated/resources/data/thavma/thavma/research/entry/thavma/wands.json index dbb56255..77ccd882 100644 --- a/src/generated/resources/data/thavma/thavma/research/entry/thavma/wands.json +++ b/src/generated/resources/data/thavma/thavma/research/entry/thavma/wands.json @@ -4,7 +4,7 @@ "defaultKnown": false, "defaultResearchState": [ { - "aspect": "thavma:praecantatio", + "aspect": "thavma:aether", "broken": false, "indices": { "col": 0, diff --git a/src/generated/resources/data/thavma/worldgen/configured_feature/ore_aer.json b/src/generated/resources/data/thavma/worldgen/configured_feature/ore_aer.json deleted file mode 100644 index 1c89d540..00000000 --- a/src/generated/resources/data/thavma/worldgen/configured_feature/ore_aer.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "minecraft:ore", - "config": { - "discard_chance_on_air_exposure": 0.0, - "size": 7, - "targets": [ - { - "state": { - "Name": "thavma:aer_infused_stone" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:stone_ore_replaceables" - } - }, - { - "state": { - "Name": "thavma:aer_infused_deepslate" - }, - "target": { - "predicate_type": "minecraft:tag_match", - "tag": "minecraft:deepslate_ore_replaceables" - } - } - ] - } -} \ No newline at end of file diff --git a/src/generated/resources/data/thavma/worldgen/configured_feature/ore_infused_stone.json b/src/generated/resources/data/thavma/worldgen/configured_feature/ore_infused_stone.json index 45718fd2..5553d841 100644 --- a/src/generated/resources/data/thavma/worldgen/configured_feature/ore_infused_stone.json +++ b/src/generated/resources/data/thavma/worldgen/configured_feature/ore_infused_stone.json @@ -3,7 +3,6 @@ "config": { "features": [ "thavma:ore_ignis", - "thavma:ore_aer", "thavma:ore_terra", "thavma:ore_aqua", "thavma:ore_aether" diff --git a/src/generated/resources/data/thavma/worldgen/placed_feature/ore_aer.json b/src/generated/resources/data/thavma/worldgen/placed_feature/ore_aer.json deleted file mode 100644 index 5b9856be..00000000 --- a/src/generated/resources/data/thavma/worldgen/placed_feature/ore_aer.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "feature": "thavma:ore_aer", - "placement": [] -} \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt index eb4831dd..e88109d9 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt @@ -3,18 +3,7 @@ package me.alegian.thavma.impl.init.data.providers.aspects import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps -import me.alegian.thavma.impl.init.registries.deferred.Aspects.DESIDERIUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.IGNIS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.INSTRUMENTUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.LUX -import me.alegian.thavma.impl.init.registries.deferred.Aspects.METALLUM -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PERMUTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.POTENTIA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.PRAECANTATIO -import me.alegian.thavma.impl.init.registries.deferred.Aspects.SENSUS -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TENEBRAE -import me.alegian.thavma.impl.init.registries.deferred.Aspects.TERRA -import me.alegian.thavma.impl.init.registries.deferred.Aspects.VITREUS +import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Blocks import me.alegian.thavma.impl.init.registries.deferred.T7Blocks.INFUSED_DEEPSLATES import me.alegian.thavma.impl.init.registries.deferred.T7Blocks.INFUSED_STONES @@ -30,123 +19,109 @@ object MineralAspects { fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { item(Tags.Items.ORES_COAL) { - it.add(IGNIS, 8) - .add(POTENTIA, 8) - .add(TERRA, 4) + it.add(Aspects.IGNIS, 2) + .add(Aspects.TERRA, 2) } item(Tags.Items.STORAGE_BLOCKS_COAL) { - it.add(IGNIS, 72) - .add(POTENTIA, 72) + it.add(Aspects.IGNIS, 18) + .add(Aspects.TERRA, 18) } item(Tags.Items.ORES_COPPER) { - it.add(METALLUM, 4) - .add(PERMUTATIO, 4) - .add(TERRA, 4) + it.add(Aspects.METALLUM, 4) + .add(Aspects.TERRA, 4) } item(Tags.Items.STORAGE_BLOCKS_RAW_COPPER) { - it.add(METALLUM, 18) - .add(PERMUTATIO, 18) - .add(TERRA, 18) + it.add(Aspects.METALLUM, 18) + .add(Aspects.TERRA, 18) } item(Tags.Items.STORAGE_BLOCKS_COPPER) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) + it.add(Aspects.METALLUM, 36) } item(Tags.Items.ORES_IRON) { - it.add(METALLUM, 8) - .add(TERRA, 4) + it.add(Aspects.METALLUM, 8) + .add(Aspects.TERRA, 4) } item(Tags.Items.STORAGE_BLOCKS_RAW_IRON) { - it.add(METALLUM, 36) - .add(TERRA, 18) + it.add(Aspects.METALLUM, 36) + .add(Aspects.TERRA, 18) } item(Tags.Items.STORAGE_BLOCKS_IRON) { - it.add(METALLUM, 72) + it.add(Aspects.METALLUM, 72) } item(T7Blocks.THAVMITE_BLOCK) { - it.add(METALLUM, 72) - .add(PRAECANTATIO, 36) + it.add(Aspects.METALLUM, 72) + .add(Aspects.AETHER, 36) } item(T7Blocks.ORICHALCUM_BLOCK) { - it.add(METALLUM, 36) - .add(PERMUTATIO, 36) - .add(PRAECANTATIO, 36) + it.add(Aspects.METALLUM, 36) + .add(Aspects.AETHER, 36) } item(Tags.Items.ORES_GOLD) { - it.add(METALLUM, 4) - .add(DESIDERIUM, 8) - .add(TERRA, 4) + it.add(Aspects.METALLUM, 4) + .add(Aspects.TERRA, 4) } item(Tags.Items.STORAGE_BLOCKS_RAW_GOLD) { - it.add(METALLUM, 18) - .add(DESIDERIUM, 36) - .add(TERRA, 18) + it.add(Aspects.METALLUM, 18) + .add(Aspects.TERRA, 18) } item(Tags.Items.STORAGE_BLOCKS_GOLD) { - it.add(METALLUM, 36) - .add(DESIDERIUM, 72) + it.add(Aspects.METALLUM, 36) } item(Tags.Items.ORES_DIAMOND) { - it.add(VITREUS, 8) - .add(DESIDERIUM, 8) - .add(TERRA, 4) + it.add(Aspects.VITREUS, 8) + .add(Aspects.TERRA, 4) } item(Tags.Items.STORAGE_BLOCKS_DIAMOND) { - it.add(VITREUS, 72) - .add(DESIDERIUM, 72) + it.add(Aspects.VITREUS, 72) } item(Tags.Items.ORES_EMERALD) { - it.add(VITREUS, 8) - .add(DESIDERIUM, 4) - .add(TERRA, 4) + it.add(Aspects.VITREUS, 8) + .add(Aspects.TERRA, 4) } item(Tags.Items.STORAGE_BLOCKS_EMERALD) { - it.add(VITREUS, 72) - .add(DESIDERIUM, 36) + it.add(Aspects.VITREUS, 72) } item(Tags.Items.ORES_NETHERITE_SCRAP) { - it.add(METALLUM, 2) - .add(TERRA, 6) - .add(TENEBRAE, 1) + it.add(Aspects.METALLUM, 2) + .add(Aspects.TERRA, 6) + .add(Aspects.TENEBRAE, 1) } item(Tags.Items.STORAGE_BLOCKS_NETHERITE) { - it.add(METALLUM, 144) - .add(DESIDERIUM, 72) - .add(TENEBRAE, 36) + it.add(Aspects.METALLUM, 144) + .add(Aspects.TENEBRAE, 36) } item(Blocks.GLOWSTONE) { - it.add(LUX, 16) - .add(TERRA, 4) + it.add(Aspects.LUX, 16) + .add(Aspects.TERRA, 4) } item(Tags.Items.ORES_QUARTZ) { - it.add(VITREUS, 4) - .add(TERRA, 4) - .add(IGNIS, 1) + it.add(Aspects.VITREUS, 4) + .add(Aspects.TERRA, 4) + .add(Aspects.IGNIS, 1) } item(Blocks.QUARTZ_BLOCK) { - it.add(VITREUS, 16) - .add(IGNIS, 4) + it.add(Aspects.VITREUS, 16) + .add(Aspects.IGNIS, 4) } item(Tags.Items.ORES_LAPIS) { - it.add(VITREUS, 4) - .add(TERRA, 4) - .add(SENSUS, 2) + it.add(Aspects.VITREUS, 4) + .add(Aspects.TERRA, 4) + .add(Aspects.COGNITIO, 1) } item(Tags.Items.STORAGE_BLOCKS_LAPIS) { - it.add(VITREUS, 36) - .add(SENSUS, 18) + it.add(Aspects.VITREUS, 36) + .add(Aspects.COGNITIO, 9) } item(Tags.Items.ORES_REDSTONE) { - it.add(POTENTIA, 4) - .add(TERRA, 4) + it.add(Aspects.MACHINA, 1) + .add(Aspects.TERRA, 1) } item(Tags.Items.STORAGE_BLOCKS_REDSTONE) { - it.add(POTENTIA, 36) - .add(TERRA, 9) + it.add(Aspects.MACHINA, 9) + .add(Aspects.TERRA, 9) } item(Blocks.AMETHYST_BLOCK) { - it.add(VITREUS, 16) - .add(SENSUS, 4) + it.add(Aspects.VITREUS, 16) } for (infusedBlock in (INFUSED_STONES.values + INFUSED_DEEPSLATES.values)) { @@ -158,80 +133,71 @@ object MineralAspects { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { item(ItemTags.COALS) { - it.add(IGNIS, 8) - .add(POTENTIA, 8) + it.add(Aspects.IGNIS, 2) + it.add(Aspects.TERRA, 2) } item(Tags.Items.RAW_MATERIALS_COPPER) { - it.add(METALLUM, 2) - .add(PERMUTATIO, 2) - .add(TERRA, 2) + it.add(Aspects.METALLUM, 2) + .add(Aspects.TERRA, 2) } item(Tags.Items.INGOTS_COPPER) { - it.add(METALLUM, 4) - .add(PERMUTATIO, 4) + it.add(Aspects.METALLUM, 4) } item(Tags.Items.RAW_MATERIALS_IRON) { - it.add(METALLUM, 4) - .add(TERRA, 2) + it.add(Aspects.METALLUM, 4) + .add(Aspects.TERRA, 2) } item(Tags.Items.INGOTS_IRON) { - it.add(METALLUM, 8) + it.add(Aspects.METALLUM, 8) } item(T7Items.THAVMITE_INGOT) { - it.add(METALLUM, 8) - .add(PRAECANTATIO, 4) + it.add(Aspects.METALLUM, 8) + .add(Aspects.AETHER, 4) } item(T7Items.ORICHALCUM_INGOT) { - it.add(METALLUM, 4) - .add(PERMUTATIO, 4) - .add(INSTRUMENTUM, 4) + it.add(Aspects.METALLUM, 4) + .add(Aspects.INSTRUMENTUM, 4) } item(Tags.Items.RAW_MATERIALS_GOLD) { - it.add(METALLUM, 2) - .add(DESIDERIUM, 4) - .add(TERRA, 2) + it.add(Aspects.METALLUM, 2) + .add(Aspects.TERRA, 2) } item(Tags.Items.INGOTS_GOLD) { - it.add(METALLUM, 4) - .add(DESIDERIUM, 8) + it.add(Aspects.METALLUM, 4) } item(Tags.Items.GEMS_DIAMOND) { - it.add(VITREUS, 8) - .add(DESIDERIUM, 8) + it.add(Aspects.VITREUS, 8) } item(Tags.Items.GEMS_EMERALD) { - it.add(VITREUS, 8) - .add(DESIDERIUM, 4) + it.add(Aspects.VITREUS, 8) } item(Items.NETHERITE_SCRAP) { - it.add(METALLUM, 2) - .add(TERRA, 2) - .add(TENEBRAE, 1) + it.add(Aspects.METALLUM, 2) + .add(Aspects.TERRA, 2) + .add(Aspects.TENEBRAE, 1) } item(Tags.Items.INGOTS_NETHERITE) { - it.add(METALLUM, 16) - .add(DESIDERIUM, 8) - .add(TENEBRAE, 4) + it.add(Aspects.METALLUM, 16) + .add(Aspects.TENEBRAE, 4) } item(Tags.Items.DUSTS_GLOWSTONE) { - it.add(LUX, 4) - .add(TERRA, 1) + it.add(Aspects.LUX, 4) + .add(Aspects.TERRA, 1) } item(Tags.Items.GEMS_QUARTZ) { - it.add(VITREUS, 4) - .add(IGNIS, 1) + it.add(Aspects.VITREUS, 4) + .add(Aspects.IGNIS, 1) } item(Tags.Items.GEMS_LAPIS) { - it.add(VITREUS, 4) - .add(SENSUS, 2) + it.add(Aspects.VITREUS, 4) + .add(Aspects.COGNITIO, 1) } item(Tags.Items.DUSTS_REDSTONE) { - it.add(POTENTIA, 4) - .add(TERRA, 1) + it.add(Aspects.MACHINA, 1) + .add(Aspects.TERRA, 1) } item(Tags.Items.GEMS_AMETHYST) { - it.add(VITREUS, 4) - .add(SENSUS, 1) + it.add(Aspects.VITREUS, 4) } for (shard in SHARDS.values) { @@ -241,7 +207,7 @@ object MineralAspects { } item(Tags.Items.NUGGETS) { - it.add(TERRA, 1) + it.add(Aspects.TERRA, 1) } } } From 3be24e4d957f79237987df38986de52ecd5a4329 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 30 Nov 2025 20:18:57 +0200 Subject: [PATCH 06/40] better public data --- raw-assets/public/description.md | 2 +- raw-assets/public/handle_crafting.png | Bin 3132 -> 0 bytes raw-assets/public/plating_crafting.png | Bin 0 -> 2309 bytes raw-assets/public/summary.txt | 1 + raw-assets/public/thavma.jpg | Bin 0 -> 60145 bytes raw-assets/public/thavma.png | Bin 2308 -> 0 bytes raw-assets/public/wand_crafting.png | Bin 3171 -> 3122 bytes 7 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 raw-assets/public/handle_crafting.png create mode 100644 raw-assets/public/plating_crafting.png create mode 100644 raw-assets/public/summary.txt create mode 100644 raw-assets/public/thavma.jpg delete mode 100644 raw-assets/public/thavma.png diff --git a/raw-assets/public/description.md b/raw-assets/public/description.md index eb97cebb..0e75c441 100644 --- a/raw-assets/public/description.md +++ b/raw-assets/public/description.md @@ -1 +1 @@ -A complete rewrite & reimagination of my favorite classic magic mod, for Neoforge! Thavma means miracle in greek. This mod is all about manipulating the elements of nature, and creating powerful arcane contraptions. To get started, craft a basic wand, and right click a bookcase, to obtain the guide book: ![image](https://media.forgecdn.net/attachments/description/1271073/description_c918c158-1a5e-4a49-8df0-6bc6a6b5ec53.png) ![image](https://media.forgecdn.net/attachments/description/1271073/description_20c7c6ce-9b1d-40e4-81f8-f6096a594951.png) That book will allow you to research and discover magical equipment and blocks! ![image](https://media.forgecdn.net/attachments/description/1271073/description_5b575c0c-3140-4658-86d8-98905833e667.png) **This mod is in early alpha**, do not expect it to be playable yet. I am doing my best to reach a stable release asap. ![the infusion altar, on a platform of greatwood planks](https://media.forgecdn.net/attachments/description/1271073/description_465ac439-b6c6-44b6-9b4a-05dcccfa81f2.png) All code is original and open source. Most assets are original, except some that are from open art libraries online. \ No newline at end of file +A complete rewrite & reimagination of my favorite classic magic mod, for Neoforge! Thavma means miracle in greek. This mod is all about manipulating the elements of nature, and creating powerful arcane contraptions. ![a thavma user, on a platform with magical devices](https://cdn.modrinth.com/data/cached_images/1f98a12ef6fe7e555430a66580d968f0ee9ae85a.png) To get started, craft a basic wand, and right click a bookcase, to obtain the guide book:  ![](https://media.forgecdn.net/attachments/description/1271073/description_1eda43c7-b5fc-42ab-9d16-d3ab41f17957.png)![](https://media.forgecdn.net/attachments/description/1271073/description_8876b566-cc23-4ca8-a6c9-00c7d3d10d2c.png) That book will allow you to research and discover magical equipment and blocks! ![research book preview](https://cdn.modrinth.com/data/cached_images/f0685b6557be9868b6833aa9a349287db2632e55.png) **This mod is in alpha**, so many features are work-in-progress. I am doing my best to reach a feature complete version asap. ![the infusion altar, on a platform of greatwood planks](https://cdn.modrinth.com/data/cached_images/39b4275c431548e227ee29bfdd553216099d1e86_0.webp) All code is original and open source. Most assets are original, except some that are from open art libraries online. \ No newline at end of file diff --git a/raw-assets/public/handle_crafting.png b/raw-assets/public/handle_crafting.png deleted file mode 100644 index 2254a4d3c453cf7b23b487cb6482ce16ae85ae12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3132 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 literal 0 HcmV?d00001 diff --git a/raw-assets/public/summary.txt b/raw-assets/public/summary.txt new file mode 100644 index 00000000..94253ff9 --- /dev/null +++ b/raw-assets/public/summary.txt @@ -0,0 +1 @@ +Unseal ancient knowledge, harness the primal aspects, and make powerful arcane machinery! diff --git a/raw-assets/public/thavma.jpg b/raw-assets/public/thavma.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b513793351706f527d41a2b087c4010d77be3aa GIT binary patch literal 60145 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 literal 0 HcmV?d00001 diff --git a/raw-assets/public/thavma.png b/raw-assets/public/thavma.png deleted file mode 100644 index 7f26c325b27691537e42f1b0b0375934a3f1a02a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2308 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn2Dage(c!@6@aFBup(_IbKE zhE&XXdt+m7i-UmcLFUBAc>>ZxE$p0=7^WZH_HmWck4rrtubfW*yRV+X;gppv1H%tn zMg|5)pt(&f3=AxsKtqHW7z9)p7!*7h7#t=rFf=HPDxh^ZWXzT`cza|0OHKymchBd{ zJD?yw8V^m|UNT+=g@(Z^P{=HP^*%oQ|NkvJM^mN17GM4uWpA#3VUc+JfBV(@|Le{H z!zX4m%W_27z5YH|?%1UA qsk!#v+Lnpohwf-uJ2>k8e~kRhGT(HyY~}%*H4L7velF{r5}E*1O(eSj diff --git a/raw-assets/public/wand_crafting.png b/raw-assets/public/wand_crafting.png index 9ef317f607d5e3d6df3b198b47e82dcab1d59247..e3cb043636d35da421132df4ce577db10e2d1aaa 100644 GIT binary patch literal 3122 zcmZWs2~<*f7k_3hQyST3+9=kT&evkAH7rSy^L&T58yad^%@@PeR zp}69u{Og=#FYHkU_ha9YEoyp=6>Zud-oB<+#*e3RNc6RK|fYyKCO=H>JAxHSK z_*1b6U?;McyFko~lRF_RW71bsU0oNVzkTyw{!RxtHVMt_n!jP4I_Omec}Sdxd)3BAcqy}g{`QZkJ%^0NIbp@x*)SG8 zVN<$hT4VIeuK^k-f*SQ+sOx}EN@OblF{P2}FRD&OjPCgelt*_Bci96kaxWuF;ncAdv*883A$r2Gfi@+@^^=} zj}HSAEYAgJ96cEw$(spwdWh($GF9hWjDw{3b>EqCcbb{IZ!ZnG=lLV&J)oU{oHTw8 zf&;hFXx>Q^ephu_^;olNt(7*3Ay@Fd(+n3e$q&rY%bf@G-lSVd)cx~&mu_K@e}}YaOyd&t%=`nNfLfZFjarf%-l)PuDpEVA-xhJ-x)7k0|9#5-n{(ll1@C9|2jtx zo!K)e^qKDyCN#~5c<~m&WYCf?#ZyNY(+wi0-R#^$4rJQ+k7UGoH+QpGtQGXTZD8H> zw!JdaJg1itOkvH>)BF1Fao2=cy%99)94vQcgMultlZpm?Y&!mSn~-r%V@=Z>x}4u}DceKtEnn6o`Eh?miiT0~{QUe#*<(XPLu}B;gB`YF zz3}qUd%|Byj6;bm3 zAY(0avrqW8qquS&v~Vz&A1U?!POrSx7`4E-4-#0u>&!Lcd`NP#&0pP1McfgV`^+4i zkrbQV-l)d0U0rA8A(mwF(ce_s9|6?F+&n?R5q>J52VQ@1 znNxv;=x+hj#~N7?<`KzpzWlz{)+cI-(3x7x96q*0C?XwFg%7X3FGCZbG&&Qo6Jt*P zGXtuBjAVda!i5m*6^m{deH!Z$#LNk+Qci`Pu|6fQl88=+LLn8!gksZbHx z)LLQ-$}b@mE#NtKEo1ouE#m%?yr@@|P3L6z>4|bk6I!;WhCSxJ;o3x%!B986Nbp>I z%=YYE(R0D>{Pu~{YO7~vxia{DHmRFRFJB;v?q$-MH5hHn;9%>9xBG3tTJcm-ZAqPZ zRU6vKpI0DXwk|nWb^bvEH2gU4vBhp-_Rsqoa1k^lY`RBx5H~E+9U2h#w?K_X=!c*N zvve;azM^m)`CQOPaZg`SZD6A%VGmTe1*{?@Hb_`EK(Ar;=8Fq=4KOer%)2h@Dd5~N zaRmipI;QCUS8--1hpSH!QI!sh*{SQ%J6wC=$~z`6z-a7znv-Q$<3#?bQ<)C=uk5Rs zq=AymQrw1Oa|NuoTZ0Z_HACAk5`(F@iT({tbRthfJRv^l3kvCzlL)~(DT!8e;dJG> zINO~;N>L#D?)!Db7Rul4!ryE$9E*jz;HT%YBH+z}k?2rB|2Cpg7_oUAZSF8gb4o(D z^G=5HyO?Fww_D6&Bk|fy)|Zx?QeILII%|>tEOdUbEIJ?pIaLhF?rWj!q(V(9F2S*Av;jI&+a>}-XE!A57V<=WcX4U`r*#y4LB4<{Tyetg?6F;-wXrh!Q5X2PSy ztR{qHNTJdBAS9{N19q@)9QqgM=riCkF)4^@ad?- zI4f#lzY1x8j&Md@O>LnQDBU3)&0yHRU?#}|nK1NL()z1ULYd>XTL)*+-KFIL%)XnY}Lt8p;7)y!QGEW`0K2KpJpB!4c{C z{5%AzO-xe9vH@<(hz^u9WFqH8+#Y_Va_e zpLgN_Cc#p)S$)3-!r27GZk4JDdcF+#x>B&Z`s~=-S0OUra9hD$tYM>;B@70eAE8oj zx(Uq8%x)$CfbF~CVW=@S*}EmBKEyCL6eATo7yuQ|nOIxjauc)=uicUX6cN(B*B{0w zP%x2R0qi=rP9M<9**C{tkm@Bt!OrD)02oDsc9 TH)!Bb0AP9MtSRZV=gt2CQ~MES literal 3171 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 From 06aa2a3a04b42f089ab1f543a334e1eb2538eab7 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 30 Nov 2025 21:13:19 +0200 Subject: [PATCH 07/40] better --- raw-assets/public/thavma.jpg | Bin 60145 -> 0 bytes raw-assets/public/thavma.png | Bin 0 -> 303540 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 raw-assets/public/thavma.jpg create mode 100644 raw-assets/public/thavma.png diff --git a/raw-assets/public/thavma.jpg b/raw-assets/public/thavma.jpg deleted file mode 100644 index 6b513793351706f527d41a2b087c4010d77be3aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60145 zcmeFYbzEG_wm-OOBzTa903o>7yN>^3&!@|RN0836vRtkWFg9Bt>AK+mPsFU=vwg3QG zSq16nC@>H5Dc@!fdCAc?*e-uFbszIL9oX< z65$VT8Vo-=SaN^f|M8_|6_m*!EbMG79NaKYHV79#J3BuI8yPzvKPMYMI|N1zSNQL| zJj!@jL!Y#Ab93TnWp!|6F)?>Eg|e7A+Ov9@II*&`u(1My!d^}$X0}i_GE=CfwSy4F zQD+YYnYFnPg%+0rn}U-#)XG}M#|5h9qo{7?V{67|P9gk~Owfzp%ihTz>SjXbWpC%; z%I_sa@kcm63_k|5Qjq;2akCYo(1vAO+|dO}#>v9T!p00!p9h2jCd0+tf?ria>Te0K zHzA6@v+C*T$>Pbu;^<<@%Ff5f$I1p_g+Q2L6wI#P4sIr1%nq)U|45L4x|+FIJGogq zI*>g|G%VLTl6tJoe^Eac*wWhG=?@1? zv;U%k;eQeRx0!!T8dgGn2}d*c$3$c$geV>*@tZrES)23!fu=ls?0mcy?93+S+&s*j z<`!nmrfi&i%)Af|PF`+q9u9~J^dC904z6w{4rb6tIWWmA)-WO5+-xS?d>m}d?7S8x z%$&S@rp&xtrZ9ePE_MjSgx8eIg8d(UB^PU0GcvLJulaeDV-AzUWzNUW3*qBpHs@ip zVCJ-dS}>b%n6NSPLOD&ixp~>yIk{kR%+2_v99`^9VD(^aZ(<2$wQ+)4Qjk6Bi(gb( zR)_+^!uI#8vYm;W1&mgRLf+cJ-RtjAb!&U5nw!a^=Gb|-Ik_O5oa~$sJ~mEnnDjql zG@&l8u=esO>Q8U_lX-q|7pRGwql>zuqn!}NzdGAraSE_DZEoUbB4OeNg|Yps@2UUO z_ZZnA{A{p%!OF_7;An1b;r;(c`q+#9RGo~qD=b;>zk7rl)cJ2@XHE8}J@T8FJ+^Kk z3Re>ks5!;ofo4`F4wg_@KZUiGzsRiro2uinFf-+4Gi7JC;NUfbRXq`hVy=t)P#pgXw^oot>G3 z?H?U*{;dO6SpHcbyW(F(Vg0|C@=x4<>9+rn!^VO~_^+YmCE0)6e>CtP4g5y~|IxsI zH1Hn{{Qpk_|29sb4zQJuC(QJC_yKw=D=u!Ntg0j>D=!JN%m4sXXlG{ciXZ|2_6}|? zs?uU)+B&*qPj&$`fCRt>XaPPGGgl{3Wo7wCljy&97hnF^TEGnRqpbg)=6?*uFozi- zFk_7jMj>M6E`r^U&AmMwqP@d;Tjlba)D(Kh8G^gP5;9CkJ$1Lel!vR zu#38?IIL`s)*+eYf5E2z1)Ev9*u!WzVKh|c_6{)lAnm`f`6Kpw#P)XXu)O_oj}|IA z)ImcH=2O8QVn7;@1rz{ffDAAN+yQIA4sZjQVZH+_#1&A5#f$w9{6v5Fm0?__FfMDr z48|b=I0E*7$sc~;u?}D~F!yiWx>|5R{sh6Hiva-Qw}*#QYM2R~3IKOW4-Yp*4-a?6 z0093L06sYUo8Pez0C>+~;Yt4vqbdM^r(pol+W+q`(@X$piv$3IMJE#%lRxRe!+t>) zFmwH+8~`wM008$h0HEsqr8ijIV?0nY4*=>gUCB=XKvp&Y&{)D`>;Dhsezf`jrMLf; z=5PHyECb>IJP7pog*gP+7ZDi|5di@a^~nOt00Q9QumKP@96UDM zLqDuA00NCISL*` z20}0~mOzfe98}DBjf@qft!7LHguq!vC4fT9#(@t2C@L6)iuEFhg2K5lJBE#d8;6NZ zgsefC5Q_k-2t>gaj3|nTjAc&1B;_MP0AN|LjoN)+FmHKBHw(f-9(9sTBBPVQhZ7-N z1K`BohFb*@NF##akaH0M1b7jAZA2uiAmm&dGIaQ0>zPkeND}5|afM-~A?3Enh2Sv> z5#;Y!K>!>wDk|-BnN%T{z;>aO znZtPT;SdVHe}@Bt#*vu-<>JuVQh5px#*!0q96%iu1rBi{U_vF>4>3ui3`T)7GnPj% z2N4zmWIqT9ONo)A;KBeA6CfBjEI2~6QG~!bibfF>O#p{$5klZ3VnYYgwxI>siV>ry zDQXghgl$L>PlUL`4m=A&4R-QBX*> zfCd26Ak;Ll42Beuy2KoIl3W%rfwEO;z8Ho|&Eqgen6Vm zuUhls06iQ0*PsE1W(GwhReoa%P*hxe8XT6gF;D}nDI*<1t%BB&qSUE!^X)h+QL-h{ zBt%i!Ufa+RV2P9)TiT#R>@zPqtT4`=9o%GM_HgWax?DHA>2VcENj9PHzy8=7pCLrd zQEu;QTU)thnZ2XUq8YPORFQ%}2ueduJIP&5Gol%*5{qZ4wced8eWI)PaiC!6R+ut# zU_#Sbo{kQSQ3A*^Mido&V&PyuwX_#h@sKhEOUF`?mUg8SMMHx z!i|%YtHUN-ohAXy^UXIM6Ry+I+lJmN4z(@sHL5I$kMlM7P)g}WlT-ONPuEqDCpzqP z%_HQjF`YQ|3zeQ;A(LluA*c&LYd( zC5BRP!eQyyGTp{1J%WQ;N4*$Dv*M?lS)z1#5l1eGCF`?K8xzsGB62C{@L>{&h{!bZ z;Y=Qj^x{1J?}hMoJ9%y#+xIOt$D$YOyz}aA@TQ6uqTY4X44V&wN_RiyUVl30NPD|M zXdzz0If09AAZt{zwFy>qryn3JmcJ$pHpR`fEIV;FnOiMx&(}&H=|8=q8(@%0i3FoLqJo>OPG2d?6Ab?XqeMevj6gTZD?#3cQpniy^giME*+8npvvEoQZL=xDxoZ~ zG(%^Lov=(LBa>!E`LI#Kg@SK!$grhsj+u&_yL5(aP$Oo{%-_{T@>7f5Wj+t-v(S{> zlsCmF(dJ2`A83k$f$+-BH|tK$0?^L$ddZzL|K~eGteL-DhWcPgM?Aj{^eMB1pZ=KdeY$&;cc$vv zZ0$YHy)DVJ&u@ojpJ~4APUM}Zx7@ET2_-H7opuGZNlkreE6a~*@@G~O^LB|X)y`AM z%Tp6fV4@2z%lynQz&a|J;kP!=NZiT)P2J;$|8_EZ>)4AAVnR=ag`7l(qN)-E2at#I z9-vtRWD`qcoIdW|i5_>XWVj=eo!t%aBNmU#K+g2Y{2i52v5MwyV17OyyR|_ zaCO9!JTR7;Z<|zzjLe0FM+v}5%-W^PcD^X?#d^_JeB&|G`m=Ur`dUrTMu1=I%TZfV z%5i?ey$$=}ZqJ*U@=xmn#|1oN^K<2j&Gm^yG`4Bj1cb&Mlun8QyL%U%SAKkVmWrb; zLw%Mb@sf4#pBiadzB;))y{gBJjPIL};!vl?Lgo#Tp_f1ki4G!HwL>2xeoHsTWQIA& zg>N80n7JEJU2QZiWY{)&EuTl^ZJ929;s2uDi?>@e6Zy;Uxl=z<9u}vR3^B4aBnNJ> zpS8Y5r8iGq(+48w+s=3eiMwBVW7n14*e@$6T-Lo*v`iiuUfY_8aPQMp$EOkjB&?8Qpb^NX8Z1p*V&JOU*O z3GY^gHn)a2ld*9^Gnm@BU8QXI1r7YZu8;qoL?dw;W8SU$_0kd5+wV4? zME|v^~-+ca_KOp?@T<~r_`fvq( zyf%;M(vdMVLv-&w)cYvs9(6WyGmz*Aji|%dP zy!)`L&4yJSQb{dJBqsAr2gb0WekqHo%LuU`CuJhx2Y=@MdH#zVqF1mG3(g+?@=S|gB z=ywE|)xGPSXO=c}D=*sJ7~3LnF5A|tcH}vEDWy-5&X5sXFFMt>uOOsEzwdc0Am2f& zRsDP={dd>Z&Z+C|1F+NC^~{so@9n96SAcIMMy7Vkezs!}ZBL2f;0@u6E?%?Kr?}%= zPOg>{RBv#L8JgJ(gUnEWGIvas`qbt1$oO>Em!4eSo9v#oaCOe6atLXfd&e_!R~N3( z&CF?*o(c=ccT_7T2A>!z3Q|-m>vGmBEcWaacVMy}r;E$?p6l9$WM40%o(76lH%3!F?yn6-Qyo1Nz8Ng?$oQj$-HT+LT*kTza@bX z8cgS-Ww5t+{VDJM0oe2DHWsXhR)V4UPc5?PEC$tmJ!$fg;=MsE(L3|cBP|qq07^E^#=hU_j%4VrHPv2Xu^s%QwT6vt4w z3(P;w%GHo`C$d$nT?NssvXW>$6u}FnXwJ@@@+6NRgl^om`l>azm-?<_%F>VzwS*JD37`B*- zx491$pXobx-rwKZK3N~Rn&hE<$yLlD)wbi?@v{Ex0T7QI+c@zjWRzd$rpa@}(dyh< zOXuA#m)l-{-odlyVXt4O#l!7q`Z_Kd%~8_2(jf0y=IG|S)2T@>WSxuZ;H_@lNRkD| ziwvuC`+(G@z=|7^L@weS`U%cjE_W`A=-{kU5 zdgCMGVk_yB(C}^NAA_!DT&d2Y)$mMh3X5=A7WJCxJH9?I(+{r&+jBn@rd&04CJ;rR*^~2Quv!`2KU$vp~BP4l@Evr)p_nC{6BMCY~Ir*aW+-L@R z%Wh_<$Dig(XH6(>YI$_eIzQT+aE)$k?R%Ur&rfXys12@pcj<8GoF>tT*euq3*iDM_ zVS-+F|8|sa{Ox;7%EQ&7MO#Oo`k{zfSJ>4ci@R+x_hi0f>r;RyVOgeFb?j-rhoWCo zKUV8e!%C0qju2_y<=1CC)vx#^2N>L^o9i`N7s!P)K4xevy`<58{=VMe+yH|UJTPNm zy|X-YTM*rM`tG!M68Vjqg)YH{^II--#Ehxx;`8%^;+3GY#doobu(iPTd$r|shl3@l z03#;WrQBSfx{U0rqqLJIvpl{5j~IERLBhFXmstK6pl6ge&!sWN(LC1byFkgJJO`D4kegNri{ zf6OCkyz$+6p?dOC;So5yILG7 znc8WJDiVL`Om=YY;eFfS$eQ?+o3ANmLpd6uIwf~H+^Wg~6C-5S0vUZ6y?0FXwF<$w zdEvp-&Q8y(<(d8WFYgnShIb2a3s@w!^!6|8>n$fOU-|n@4trg;pG-m;f2c+c5u4F^ zq?h{(dCvF}*PNaazS_A=&4V4upU%6_?;UK`9A60v24LE?OIqoWF_0kuvNCYV*aBJ6 zjL$u?!nv)p>4PX63elI_nu_1^l+2$QDSa*{?)KFAv7MX9W~5dvon2kHcW%3RFFw>a zk?;4}rI7(zMxXm}=S!=b^?rBt;#lK(fZJ(PqL6bc@v&)}+E2&X&iUtqrmGz06I3oZm)W@2z#~#a;jo1GA?}XGn;RBj)7X!clAnRCX?UUw+K<*%;!nD z*=ikjCn|o^+7Pr8Y@dS^*8(QA&pCDHY7bYH^v(?@@)CCpnXXVK#|`~%Awy`T7}X9B zK+)8eU!ZX0_KE4BP1;B>J{Ug@0F=o_y1FRHy}m^vnS;ixTQD3TqaGZJZF@eR*NIJg zx2Ktj17@S2s#Fcm(l=<_4!#`DPx=+4PHv1gFvvuOKOwZvo~yN8R)U@zj-6}Gb+vsz z9vYbE5g?HDb@IpT&bxcI?U#@FEN>)}zDy>nmjVmkSdI+Kls=R$*E2j##6ky}@$E=* z{PDXxR)BDTylG-&~1H-P{GLQ%^}81#+nIR4G*OLaQ26 zXII_ZN{ou{wA#jY0*%+^dtJT1f#baK#+SoA_{WKAkOVx66>T<*{^ z_w5~VmYWa%+1X3s3GXcL(+c(8Ds|LU=Y=t=sglL1^67w*r7eg1p0VcztBqdueI)GQf50pb%wTb4NjiU!9*B=;ZVT>K7MNT09>TGV{TGi`Vq6v8_o7AArQ zN(L{5QZ9N#miYXwWQf`r-N?O*#awvD<|#j zXZPhkW`?fYT{XFv(=mmTEu z{Nmkvp0j(O@80^|sO@j%wHOs$=l1p{=6WcHzOOsEZ1wR&DJsHbR8b-%ARy-o0kto>^VE?fw+-2^iV;>E=mH>~)i~geT^0udd5&D+14^=LmUs&9l75+%8!SkbZqt zPmAd+<*H6s$WTM2u9_O*(Uv+nsq9XFGo7*Dbo1z)?6!9UBue1n;ihC@k8NHp-#K?Z?-q{k`*_M*F-RYcGFTCzLZm72 z6PIQlHhrhWV_F-;n%@Z30)n4=ylwmz+O^_nZJCFd_=$Gy`FD2dIgnRn+E?ub~WrBkj} z8AG>@E&KRQZ8K&W=+gR-nRMWhvA+_Az$2K2E<(GH0=`8q{yZTt)^o|`X!c>bux%~d zv7@OS61?nfFOY2Qn&e@T&Kc8mHMD7$K>!fas#0b|84eVDt-oIQzLyS^PT1aVSuh>% zH!AgEIb5YZ{igMFY@?j6N|ma@WOmbZ7@Llc4SR_&Oqu{_s9c)h*Zfw?@}+s?+Apw?X@awaqwt$2^Np1(=MVw|bKouqxCRahE`lbYz z9l+zV4i3hhq>G64RBK!;Y&{r+3k#8@R^t+j5@i6Y)v2PGG>e_lu``gI8J&p4dJz*P z&venh8Y7vAn!muo=Pa{AN5B%1u%Ui}6oT@$5T~iqq)Dq)FCH#~2#o$VoEjTfJzcID ziKbdI2o8h{4~Hh5CW0q`paYlVWWx*^G!_+SubiTi;WG7ji)btXLJw9YkXEITAPlSe zI!~_nQ<;)%)L4!;2sK(%o{9<_q=iut1*Z+6L?zQFSR#{B)x_sF$G{*5@mMuf(#_$B z^{JVOD$65)W^ELt3VT74alF&1a<*LlWnf|)hIlwxbDP{Z5^!pCa1ucTFQPCZ7-UZ@ zq}dTDjgdu#=yNNWuahGg@`v1}=ksFO-TR!|Zmw;2KmF}YL} z3B--dhG;!c-I^C(5tOS42TXwwD{|OM;ZP;$UTah#1D_m=v}xW=!bAnHM4B^)n5;3DbFhvSjtmx)xo8Uo9hW!{);OR&vXu^6VlqJl zXXwC53^ON%VCtv?Y+;}v zc7Q|19FQFqu!L5G4{oZ4nJdB@6iq z8vc+b--t@1jZK712?|m(ABLSsz(>LkcQ~;CICu~O0s;~U9(K$FJN$ti=)fajBVysO zZ6pR0Fp_nn>>zXg1`AAn7s zK&#)v)r^)74apCH;^>O>SBE>wq5+<^rke-A_^iOoaeudc-1p0G`+d8*`Xs%Q{rKw# zzyN=TaFI0N+uF-Z@j&Aqnpm7gZX;h9=nZgtt&&#VsJV-*18%Q>CnHNxs;}^=07j6pi=8U?{+n{dFk&n zj%M-FlWe9#HPcJ2VPvpKnEM0%W-5ir{}b~^YBF-TU83wRojK3X1X`KnpdYrw&eR*c zDJM*l-ZW%gsaVp8^@b|?UHL8E3Z}dorY9Z!Um0ozP-@Ud_dfUjMCDbmImsT_TXc+asH(DnxnPtUTv!#@Ak$*`yQ|EF(zU2vMz>F{X)s4cQG3V}5ENqb;mN6Eg`1k`!nhlFsK1865sXt1 zry-XW{l&(DUUl{>bg!PIa#N5?``SkMWOU;QUp>uFMLjXPD*2dMEQ<>VFlm697JFt+!{3tfF#cNi^;_)Q6^Z;BA4RH}7tG4oC3-rfgkx$k z9dCpOc}pnf{c7aa1WRyJOI+64`PV!pg@(5=idi~GJkqw)*3;|sSXn;crcyV)AK=&@ zbv|YcSR1}6@$2zM7zhe*ux4rC`B|CvHGiZYA}IJC&P~kEA*&|5LG{y$XxhL)S`FGO zg4opD+!)trOi5xq zi_?@bAukgq-TGWCwU3%DA?Zjgm$g9HDOdL-TUqbN6{*Nq8ecFP44bC6B5bKeS-HBG z2Mt05Qg>{~c`4sF(P17wLrwD8<*C0Zr~E9|_=0DzRY5_Ub+hV4nOvjS@KEhq74QDC zj*ae@x^s9na-tHZj^tZ{zISyAv2x^!EV%>bplk({2Ao$ak-B!GRpNVe?|D;`#=}63 zZB?mF6+<>h?H&@0jEojOk+NUGbD;s6W#Z%W3h3@Xd}t}Ygzc-wq$^)WKCN=DDb}B3 z*rq=!wNgKrqO5&xnKpWDB`IizRoHZ_&s_22wX9Sp3jH~OX@+)g)^I=X8U0){v)VdV zm@~b8aeY}{BQk3*q7zXZ6WS}>SkW1CG35H|hW&`}7Xx*P;O(Ae&x{ z20<-sF!Z=vI%?F+uy?Cb!VG1q-AS&jXjXfIsWH$}bMj|VXd;ckrSu?`f{7R>B}!7u zP>Ri_9A|~W>r}Jpaf8epa7Z7q^)eqae zSuQ*eiIn^--WXzrcGXAkHfdvbsFI!aj7a?xN9vxrb%f=F%2+a0@dV4;nrb*6^%H5V z2w^PYOM+ZIrjl2S97$OtsWKZ3R0?_X9EcN&vtJDxxwi2X_3vI~@+qq~s$&^OA0cD< zsr*__;F*F_)kb#|Xi&n_OB(Rim-Y=-RCjL4q<$CMf*?Z13iHZ}Bs%$lFnRDOkU&isKqmaWwB; zgs;r1Q01g)NUoz>i)b&CamSzDl^2w|x?k88K(q^0Y&dYoE+`Rm)vEOtL}^bA7UycSM^hzV<(gsO@7`SN432VlNp z@z|26%Gf))%#)JqOH04L#yD1cB#X(|YsNS&{M{5C8T91lKw71zI8FVPE6F_UgXV0? z?A2Hvxu_9_)LceiT=wKn$p+^4Mo^O043! zC1dU>(Ohb-ClxPZx)tt+E&YOqH{IR+vbqrhb5ailrAwmOJM&qJ64yoB;@L@vAxJ}l zCEL{ZbrRd|l}1ISoK??!=+@`r)Tgo4qD<`bnr677C(dcOx51vr?|ko>jpkiEMMf5l zIFb(XcgV9um>Cr{MQE4+qvtiL5zbj$qYuF0CQ)`tT6z74YF;d#GOzb`eV@;Kf;5K_ zKEG|XRY$+~KYpTNnzU0^&3I9SuN`|NE%Eb}#y2eovBp;E#zs1GjZ@m5S00)j&qTmP z&CGOMT-9*=&NWg2Obcx`@nfk^sD8rK0TVY$_hlVV){B<|BMrpEb&up zL)j=+%6_bm?4SsgsPKq2uHzpZGNd$2N7=0^Gb0>QuYdG^eewO;sG7%SJ2BIRoH!(b zgAztsPu>44Wga%qp^Y-8I#qqPwzA0{Mdz=*>{6U=Sgc{kb%#F3Gw^fU<8M0 zvOQljRK8xyl~~R4v7ltc3m{o4(;6Aby-=X3oz{@0a(=2w_VY3z?bdo|QubTcPD$H7 zV(8P&%dhKu^2e35dCp}DDPpf*&6-SbPBObC*;+=GHMfwolNRI8{=iHpJ%F38tn`A$ z``GHMrxKY+TrpxMYW34`zxwgI#Od-U9LI7ynp_7V#%WvNj3-*(YJP3{lqo@(fP%Ex z1Aq%UI(f-{T9KWT(62HW!aJ6Fyp+x?UYg#Q;~PU#LNX`xYbU%stF0fUnN@-!;s7>u z+ibA^(BKWH@=|NqnQ54z$gh7L`J}4f>X^QvJUci+u3u0TQk@|;vS-t;m|rx5e<)pn z(>t!HNylDM%K>%uTCih%NnNjU*#tI?9pu_$#ZgdsF6-7}q#lx+8)3g%yjvOD_WVl=gi^~-&ke7c%N-WGln20e zzp0fk>*&fofDK$v&0+J|fwc$VlNRag0S3Mrwd;_d?N1m}-lR7mMG9dqVjlWLf8hw= zE6{!Ot~Su*H5PsbH?>kT9j5CDwMppFEvQXm#6b)6mb`IOYeHTmDXi#@E@EV7 zzjeK>^;@c9f4LBRSQDgxdXOUiHQbk$e>VsI+tZ`il**TT6+in+NwIfeI_kUs4X$*q z@5ih%o{*CMHJjR1-9CI_<&pliV$Jna>rA94(~I@=1M_qimzK|H(xwBw9rnyqwq)R> ztSb8DQ-VaBa#~u?v9p}_2cL1(G;sn`tJiSy7kMi<#X&+t1EVIMW4OuTYYfu{I61vMZ3KzM==aWn;W@6D${?(dFG^D5*+#+Ff;XrRViE z?=?gGDtnA+ZqC>F;VrfIE{Ak#?Jk=xlTy#ZG5Ff?!;vzX{iqbi^mgNWjfWj_&v&bl78ji(MP928`9v@KjQEP3sStv)Xi{sPK|ku~^(ClOGgs=9XPko6 zxTmbOq@BCW)>;L63{!`k^f!vUW%w>u@RIIO(VP`jMV-sdmY~YBfe8+E8@c?wB8RiXFZ@Qt*!X`0Y+s_PiEn`ad_m(GY1-q@lGKIeQuhRJXA8t64r8lfZUvE0-E8yh_Ut&{rs=xVMJ;|-RO%%LrN2g? z&L*C_d!>z*$VIp2j@41p(u%=Rk|-M!<;m;V0LOk88+Z9^waH$i4olqvjO6L^yP57K zv0NXPx?n9WQK^di#oD>3FMY+Gc*H!yo;l10Kj<5g`rtW7^nO28^mI{vx$L=!nVO!S zo`j5m%kv?p`dNS0v2%MJl}9^?gXX}Dbwb!~RpycGl~#GRxl%wz8H2Q63)Wn$8P+oH zP(*g*5o3}{8SjWb^I-i=X1Q-kXN;A|21nzgn-0aY`5?>_^#J%O{0?PI6C;rSEE?Hy z-ZWw}*zrq<_xH$Rz^SQ;y25*!7gu(oU2=)wU9Lp>-IDHFjNTv0nCB0G%f`9g(LQ)) zg>AF3TT}-qj-GxQ+lwpHGhhW9!=IH%_hHd`xe$DL5e_K;*Jsao)z*~zbj*Sh)u*Ky zw?pEWZ1w^!IChd2b+FA{mP;#RpT;UaSK1jAZu)6DBh6~Mmgdw^+N@@iU*L1p?m|~x zEEH?LaLB(>cw zcKmc~;^{^GP2{1=GV8a%u7usr4ZIVSlAg%O(C`b&KjewmXU9edg^=Hew6&8bB+t!+>^~~RNOLD$96}by^oec#4(KzKrw5Q!dDsw zqd}>A63YH2!B;PYFz_TMD}37&mSQ_f510CmS35gcKjTe}J4A>g%+3Yf+q}Kqjpl2X+e5j9+F=uXO&Nyz-!*5YmoyUewDLx_N@hDW<@@H-`kXF%=QtnhVm zlKR%rQ(?@upF+eBfZ>?u4oYP#-0hriKjgCZz=Q5!W~C_as|3`#ajlMs`H%>d_o1-O zj=8yBm`|UHBySO{BqNH@TQNC&WT4(9cHr)~c*EY2c*xTCl%f8oO!O$MIWBBK9PZ%Q z*^MI>x_LO_9r!3q>$E--|L%&HZNLeI^ADdXp>N>+#N%Xi{A@O}#ofBoFjr-#t%6LM zzOo9|?@0;gqSZTp{OGQV zUh*f|ijZwMoZ1#Lr_c7x)7^Z0HtW?*uERAJLs$Pzals*2q>SX!Z9ak4x*zR)#9%M^ z1HzVpUgz^~t4PSTLV-5rhhltPWC_xxoe2>|i%&dz^KSEOTV_o))Ke6%jOiOcyqm4^ zUivT|>brfde1JBi$wyX^*1ggNvMw5K?AcgI8v zI_fq{D*2qGa#>np@Ql_}2?R$kX_s0?7VXqJ!vk86GOjR(!82wNoeBZ;`rE?66yPKM zXGO2*#S+X%trxt#4fQ03o|u%~#?|VBu*+TCiTh8u$ofZY@O%%H4U(lxKcd$?ngh>* zxeTekPs#uCV%2|EhxR!{eTnaDMV9iAX~NaC4{I{MkXb--D%Es*WRbv(4RL!&dlpu8 zGSSF0E{d%U{o4uR{ZIN|!(Cli97N*X#>Q=MzZtslp$|$}dz4n~R+geLh08~242QqU zgq%+dw=ZT2^Gah^s>&E{6DLS=EiO9nKkreP`%K68glyBjzO|+9r|N86tSao_;aPg6 zfz9aMlegWD&)_hYg0*xrN@0WhwIm9AJcl>^>Q^B>Ka183cmhrLuJY@r zpVu-h@&t5Nr@Onmw_1`XtzLMJ?pWT8j;=g$J|b6xzdP1YP84tpx{vsJp)jLn5%hrF%Z!>AB{bnkxR^DcckqYnB|qYv}v{fNZ^ zx8LK$OIklGHUo-rm1KSoDvnfrTM(~tgHN9PJrz*fA>9ePnp%_dS$W*|38eJ}kCv9! zF1bIU(F(0S4YyE}6)$ zhLg>x$D{EjlgOd?+17g?C=-zOruC@oEml_W;*16(2aop%UF*KB)9LZXUIih5LJ#NW` zA;r+Ta3^{l`Q5PmnyabYL}0jjcIaG1sUi`9axP~5IX->0K_YRP8hu)W9c$8G=Xs(ytfptH@_X z_ochh#c+tado`(_XRM-qzeii}jg$HAC5Y2|N&W82f*O5#$7a% zPQNu1mVpQ(h8Gf@*~cgRpHFPXN2;IFyzyn{_2%ds-V-1GIpAa~8}kM_D_9?4em^0+ zuRfpZNI4)VkV}CW(00`GDaJr1w?XA}qTs`S6gMsq_=->kwb@=BBp z;v~IJRJ*a$QruiM;WmhF;^5%mtL8AYfK3FAr)FVUNzP0X)sgTH@^bwpS>Sh)0j#UqlpDY*Ynd#fp4fXm_Q@OiS-!>NuZBy(HC(RrwkOsl@{I;z z7jNS#(xhi4^6?EOZ?Ss7ix@F0b^*&KcJ`g9Ot+v0cGW>=Xj*9hK{Ds(|l9B zXr$eI+AbGDK8_3!op8Oem6=bjr-aejj?WjQ8d@|@SjRL+@$ed?{-hV@V0010X(yl_ z;kryS7+n#+Sbgr#xaN#p9JK^l@S6F49+e2%sQxgPd0~W>$wE0J&51)(3klX)NfnD~ z?e#|_k$W$GX@8E5^VBqc*-RV8;Lds(rJw$ev_H&8`m(rQWp@CPuX!|WnmJ5kQSD9n zh*o9d(py-+@uvJJt9w7bXeyU~^S+-&?mgvY21&Suq}aCW)m*ZU9+H~DXf8xB zo&WWiul-@qke!|O+o%&!@Gn!GPKH57Hx|iR^gvrqYNqXSRk8280z4ZLvXDVui0sY#;6WrEKiiYSZV8Y#R z5(@V^5p{`Djg?KaFBhm3i=*>K1fs07bds~}W-QX;>Ahe*-{#Y*ApUxS!VPwuBv_X! z^`6SOvxI?jhT`O&Nsoy&2Q5AQhjg+#9{-bl2|kE*DR(_K-AU2|@T-yY#{>ccH!Z?k z)a>xdcu6zqeR`W&vp22o4HGu9o(B|yud)%wL1gi|@@vJ}H+9XQfr9)|)q~^e8*lb6 zm~Nx-Az3s8I8;NG6nsRq%E9t*m4>?b}QaSB=MeH-9o1eXq17!AJhlehecM9GexpiZu2; z@%zAttxWZ_uqpkC+7dNSwwf9ASM2z3C&fgpX=%U|%~&Q2w|+FO-}7E7-=q!L@DkpQ z7earI{XOB+0#CaiYxwaYJIXzJqVjdj3grbwf$B5ar-PgQiUv`FWzO%6f)u-WomoWUo?Ety~x4W$)x)k<93eE zi|@jja&b~Ksq4&NrLu>X! z-8I^GF|#L8x{&&@6H~qupMh2pS+#+_Z4fp|DC3bY5ho>h>zDOV&IYWLj>h=ELQ&-5 z5Fg2YDS!Mz!ZJFaME>|Rgp^>+<%PIMh1Peo0a$KERFxCPXCsq8y?oU-+<&*<0M@G1Cec2#*!q3|oNOq@J9+pKJY zn<2nSV&U!kf!S9z)icgF*h*=NWs0yV>8mn?NJ^ZNSO?kDtN5btZ4dM7$`~Z09rcN4 zi$plTtj0c~mBV)S@7J$p-d4RDshE%@YUF}$%q3T|Qqj_q=Y{dM3P|`S3B)^SEWuxp z3lJ{mWj%hgk~+oTk3C&_2bQMEs$`|9iTAz|R#6+duIg5r`|hTsJKAX+1EMbTCorb0CFGm7oe@OTXq`Aj1{dL43MxuHjnd>RD0fVPH8c z?X}NIK(yMo_3u?o-mGq;ez6squSk18hxr7AM&nR-_AZb^s2$4Br|DJW+Hxovly^9W zhO5L!h#K@!-~Gg`Sn4fVNoIncXeXj4QfY1~rWoO1i(d>4&kdpB6J+2o%1Ant|61OP zq)bRJT~H4FI+GaOOQ)g~EQ;Uj%-}+?`AZ)nn9T4?I2svt3$@h~o5w+6vzv#kNhNR! zr%f3)v5sJ@TR?3i0t}^YW113WucHepvT8YW%{;e}2Es4Qz3ET1z6TNs35!vW;P^Hw zEs7aLrTau48A0ezBr++@KE^Km(te5TB5k3$bA`Qojm>TslbeWtC{q4WuOd(be8o%p zJCyW1Jj>R!KjN3^MzmhZhIIK|vpiH$I+Q}9=zHz#&|%xB7{9noUWGLi;>Izgw_bIU zBYJNF9}7CgB8&6Yte4_@$*k7TKpjW{)$3nLZv*BB86#L^PP7V+f7jaxF+BjG)Wa)- zkojKZ)&aW1M3pbU0=7>na#m5eTp_GDzgS5IcY2x}sf%?kgNtL?+H66t^^i6X{Yy)(lmz<*$od65n{xVN0 zUZwU9B+Y`v^+c_jTW6t1h%^3zW`<;#YX#=8o+rO<|Et;OWyj41DCl^@y2xy1s;bnR z_&*qSN08qGPs)Zv1r~4drYpPg#8zo|V^!F6b8HRP{%>F{d#2r$-37L;K5V;z-CRR) zJkI>Re57~3==clmaCOxY+TDB8`de?S?NiSV+AS*c{S(+~mg~=I_VIuo1cHM{{AV?b zfQ3Vj%MMWilTom7h>DmXQmQ(OaT+_}i7Ts_{#nt2{#wzFu-=~sUcfUy04X*9*Ojau z)4QtyAzs?0nNXpHE)fzrjE~M#>+!J9V zJg$T(i0S=_8T{kHH^jU#*hb=Q(=Tp_wQIx99imOiG3}0V3*_Fm?LlvznTBmJcyMN` zl*0a>5N(waZI$!<8NmgYc`I+o*Uwg**;nyLFU5M* zAAo&)Oe0rwE9wh=w0FOLb_()XOd{uWW$6;z#DsCb%6b6GrVqW4>sy(Kee-c%Ornr% zN4`2p$UMjuUgiv#AZ?P~pSj_@pMV_d8g1wr44-WIquJFoE`(@3Z`yLku=_&yQ_0z# zAfZ(zVCF&vht!<1k*%S%=XYN0vrlOA^xiev)7oaxu`B## zyA%?It1QqEY&|GAt~EO1U4KMFV{$#kwTsix{%)J#E;nGXGv~SI2>t|fWMG+%C6@ca z8N=_bcrb@oMRla3g38G^r12D5lSw?=!hYlYFmPkYe4~$7r97I=1#N=-zOXTD!SvD zygAk4uTn;E%sipGiEoPA*aH~}9sq3c){ny&uh)|m4dDCmimxhW1pkMnuYhW+dETZJ zC{irALvVMu0s(@%Qz#+0yR<-Ymk`{86^G!Iwz#_%E3Pf2l;RZn<^6sClarg}?%mBE zvir=;&NH(&b_8bDEXF6m8%b}`gj!}jq`LiHzS5xPZxV?Gi6u-FDbRidOJubEhNpB) z_QD(aX|NR@)2e$fXwA(cKcuP831QW&i2Id1F5a0*sV`{t4zLP4?N276j_5*0_ zEyW+pMNXojrIfKEsScl!<+H&1Z!=WJYL%mEYLp=rBGwW)v6rk}bYs(onR9zJsWiI3 z{RpXaf4Au{m~`#c2FQfCAEnlA{JwfyB!#l?#X7v`bPbSDeNJ6OYh1@74DMG)v86yuBt_6Q5=|n`X#ZI zShaU@E}#3i;b?TOey&SOe@LhbI4l>y067uJ{uI>`!7c0EMGp;LO*m#qe{zg_l7A|s ztZ-=|G?-Uf()W5y!2u3MC49rAFC)2VR{HBgeleK3N&p@h9{Y#Z1N4vk$!Y$O(E-z` zEHwY}CS{u}TpnHZWIRti|au(1nn2|Lc#cC7y_lq~|0QxOp{?SMU819+T7vH$>} zfdyq~!JPEvNUoG_g;CWthY!lHjLa!cP72ka)@ww4Ds1oX`|QR+ds7C9+s%M!D@4XRidiH!fDL{mMy0FY}-h= z5%iE$Le%wx?ZDz`V9+%yowVRX6*!ZRuKbQDTC5AVK$`l^m-yj;OJE_{GxeB=ii)M`rnugKCJ94oJtu!5D>>* zW*S{H%knMAr^F&Au8or?IL^kFz1LW}(pHk(CIjfE++|jE3_GaBB~x^aGa%X5$kNR< zVnBi6$!f;2j%9|`sG*%ZLazh0BvI?K|G!J$`@(ir85q5?-7%+|h{c0heAw(9(-8o> z3{#3zNW{hKKpWl+@-$+QN;+?l{{yuxZ&VjbDJ`P^ZGKmTn@^7gQz5RPBmSQ)AjFcj z?=O+$)44y~COFojHO0`(aQfN=wV)^;TY>U+^ilej|Ik*_uKAq#T$CW9_;KNSVHTWM zO#G+z{D`EW!El8zLrre&Hj@W_n=xd@LG?b|0ay`MuJ$dPgoe-3@=PO)SH77}h5H~# z@ByqW-&_pL@U6v$Z;g4c)|F`8Q|ScZ?b{1ipt>s8O}#3^Yboe%(TyK}0Me%mb&HzT z8Z8DxBu-dR)4rQbaw45sN&SjU?f{aqc&h9OSE(P~NG=sqfmUvg>Ko2+N|JXCXjJ)b&1n#F{@FJR0aTT! zmsh~8R89?2j)(rvk6Wz~E7c{C>#%&vCO>E&hb7z#JpR`$4xvO&Xsfjg!v!>ew)KKG zfBdj4m$KcBz|3mUSwt%N05X(JK}N3Tbf_QGWm$m-9{xK|`B=_G83x14WvBTgD?6do zb$li{4YWVL34MS&=ygA+S z=lngj^Lh?azdg@9uJJ=SNO7-tZB$w=YgZaQgg9AOM%E4=5sY2@d z0c4W2lDLFTyARZMEAtOHge)m$AngZXh5koc_LcKfQ!^CAv&Fr3o%EREDejCL?;kWg z3rr}SAu;IMtqG7Z(mqP4-uO)>o$*6kzip=3PIhH?oenYS?agsHTCr$gQZ?z^CYU-# zwOSAqAaQZ#b+qxDT zfclN}sydTcJh0Tv5!V{WW`a4P`at6~*Z*NDbz(M(&k_D^Hc8%04zkG%SDzSDtyC6@ zd>XcuV*`h3-06{^f5vqDhh{SdzaLB9P^Pd077G(!2qvM-BGl#_7DH7!r}F27Znyo4 zIbcCPhnpDWi4B}xbO&Vr{SS>w;(qLkqMM3mhZ~r8McJ5{6#CiB#mcJG|G~tqm05iG|C|0pOVYkibTthUIv~4N%8kE6iCeP&fIcvQ57IaE znD~t1ntu-NN4{`Mc`Q8u$pi?X8-qC<;4yc$%<8G=R&qjeTHpA z;_EmcL0Q+dzsuJQnZ%3j%TFQnbO z$w zMJkl5srt)~!uR!8GyGx6CsPmD@sYQ>cbR6RU-Y5ayyMa>WEVnKg${!huwQp*V~ z^Z8pDhDUIS$xK}Wq{og<^FZEer(sN%GR^^AxS!?Q;}hO zJp3*xOGo^yZg*1ps?>69OiYr^HCW~AY-47O#kEu7;WVAxVGe(biy846sD>*5&d#fS zYWv63jES`JWK0eBod!5t&#bm0GnwcCYDCJZxU9@#D`zZt=azr%ktgtLIsV&)gua9j z9jE_)Amp&Jy?E;R;o38|*8yGQc=mys!KPp5_`jP6A#+L9-)9r||IUo&n9W;$zUx<-n926g`Ly6f%+UP)~L}L9VQ6sSs@hQ1jv9MihvlA>BvGcc0PUmi}yf&W4+sm;&2_2 zdz_o3KcQ3=(YFCNzcL>;txLvI zN6d-ZMl_Qu8T9RVmY$Qb=)Oto|NVb_a4dQBe`tGjb&h;KHE2%OvGZ~kUnb7)RVM;g zLm3zjx=&lM|Do}2+2xGfIh?kjFoowa%a+EoZd`1~tiY|m1>7BN4+~JA0-j~&4Q+6J zWO@DHy$aMl+{xWDvfSYfZjt0pV+T}|X;hO8R1=Q%XnU^?+{r!n|5Xd4s+}l2>*i6_ zc|$ zaY?&^<_cRL1YRM{adSzg!1@j{Sdqs0k~Dz$S5FS>}lE!h03RzmdIwQ$uAn+~O{^P@LT<(t+V_Gv-0rB}4Y|j2Kl^iWV>i`r zMsplTosUbt*wRBL`?q0&p|o51Po&4^>nfC7bs1}~<-F**T}d97u6{=9SJ$FhO@AMD z|1Pk~xL1xzkV=3DB)1(5Xsrpy4&aF*#GEb_STQtBv%&USnFsw){>3`Y2F>_~W^xhc zIL#9?I+97ubvxKWC_NY;ct%l&wEr#D))rPdF%y;{Z?sU zBL^9z79m#Q>*8_RnydH-njGg>&L5SWovt(32ChMITy)$W=mOh~p z2y4^4VDz@%VA6TLYQt(R-M^oO*NlF5pZVv94Br@i`t8qcL{fmJotO#xYc7*9N zM4as_xDni|jnp%;tbftf&epNx@sr|tYt&)wUL2XoU)(1;t3U2dsBv9xQZ2*bOmp4h~s#_q$U&V8xo27G0TEGRKR`5iIxdts={~_?`2N)<5O zO%SzPt?Ht>q@>gKVxa!RaTBB3XZ_EAK3FV=LvlFUnHAOqYKr9!%(wyfOTn^K%S#6P zDVbpuq>jrd0(g4KwYR=U!jVtH;YP*$Xb!+NCGQ7Fta2JM1lY33{5w30{E|p>T+0>p z&C6nt1Ln-wrOT`&?1FfRoW%#l;2M`0{~xad*463>AOiY$!K zi5(L8q0>Hp~7h9u9_Grw`E=8KebEp)6iu(oM?dH?Sa{1 z^2DPF)14Sq-%O(W`&`VJyQW^(tE#Mqvn=xds=}sSk|hG+8L{(rV~H~Tnr)n|KZ?%r z9@?^s|E)H?LRn|5acSaCbYJTLbUV2W7UtY7iJezJ_1sQ!#A=x3CA@SDRjy{1q)r$0 zJTM6s|8#skrfUg|vOow!**y2P#oSaWeo;@qFHwy<*&G&q7J)KMHuEY}xKk z7jbUHJ?iJBYMCf53sy|~y~5{4iI4IB#0U7!{egergyBE&p^7T=49ic*|6j3R9wlM) zAX3p(2;{Tke5o^Os95NFqrd@M!sh8Sv6KO^J;^nzpUyd3CxbS>HQVGiO(0nez_R)EiPR?puh=!-*4dj5m#yVkey|1oMEMUe>kSK0@(?~MI;6f z?v(b|3T<95Fwrpu7YH_DftHC0UqPG+tAH8mJy z28^lmT@ALubvV;LmFk~-2N|5LmWLu<8KTYkXUJhp81x)Q?TjP*>mU1+GmWYY^E3s? zxkrMy^Y@Q=e@J8+a>+>3Jn1>|+Q==S+sZs}k_LV#JhIT$`SX(A`Q7@CWoEz^yga>x zzpPZoM)s%uefZ1BU~@|U<&R)xR|#J($=>f8wPKh@3^<#*<@o%EN^~pgm+rCHt}*21 zRPA^sk{J%`IQp`rXYWj=iuZ&5qNm75}~ZPM6WNS9)X4R<%C55?mcA;-=H&sePdPVEh|bQfi3+E6&&c zAKKfFdM$B*Mp0~Q{5&H+@2)ylpPJ?JC2OX&MjZ^=!iCwl_P=qC)C}_t8%#VqkFEUK zbhqh$@$sC08fD{%v<+l88!x?1-X+=e@;KVAO7Ry&xqboV<)q`eU5BfihCAK!E}+iI z{G!aI2ZRr|f#>HKflRh|OtbtfdOgSCFcG#U$7)bVmJ}|7<0eOkeq6}*!sY%~3$rVk z+;4BLT{QLHW?ZEhF*Hb2B~v~#WDhm@hi2>Dplrf|v6#nBvbp44Zhz){xHR5dJ5Ws- zyNXd|>zwGJgOWF-cQ&lV0NCN?s#xWekJJ0LF`k`7&X70ywraYsJR=U{>1riuDvZER zXZur1s9-^8Zz+*)n(iBY<~W_0)i*`C4Q@hV<#qe+nc4R|J#!8O=VrFs zHRa-;*sThv-A5VwdVw=wHFq^-qVb||?gH*tuC#p5yxoOxbtiubRJ|qD(3O_d{n#g? z)F8QVRtn~0HC{?+;=v=WQ`)XHIicWEG5WYyCquR~?kI&4kIgP@WSY30?q=+PY;8Y* zs_LoBCw*8T9tbi^()7SKGsRdaX8n{^9uoUzo2cux`(oF0t$s2jFW%WLHq(R||0~fh z3AH6uy*IxtGX1H#JKDCc+RTBcJInLH(gAox1)rcts4!6K{nY(f|A@d0oFR2rIn!zb z{a|Vi;l8etwHcD&kk!_7OX6_TJ{hUf3*J#CuM&RBm*5mDDfoeWNW*2VTAfd>p)mE* zZhOT*$R=*2q|@<%9s&AEGbHiD(4O#Ea7&p5tGl(KZb40tSLejEBsI=U54|+m^G=Yx zTn#^yBkOW+k;C@S3(_A(^lXU}GwAUae1kCpgVl<$2n482`9wJ(^((DjTK}vO1(G&L zAi6fso;@1$-?u2DbPvGd`A>rUupXcTx=7Whg;J^kmVQI4<~T85gx>vLg3FLM2AS#~ zZ>FaALcjJkk9Cr~HeSLFHG;k7u-Yo7CD0TWJ8-!}Hu%rY0!RAnfVa^Gr8g*MR_)tN zvY$b$NSYxK10WW^bJMM2BgIYA&Bw6xh9XzHb%>%aIj;KBEi^(s@++-kJW`*N;K^rz z>YFvw$Q|!+*tH%_I3h+tYzd{lxQdB%oeAMnsuNc9`;tE-*Kh5pCo2j($vfWE9M8xO z*?Y;5P7!YzhW)hCUd_z!>3iipL-g=a1)5wGJmRjUDY|&D!#cEm5 z5be9yB3M6i?`!xiIl7GqQnu_W_APuVTX=3%GL{#Y#h#5){N zsE+h$Z##C}X`>^vy4>;uaXDh1qmkUhodzc?y9jR5bEH6z>n3wMB>Vbs3 zk}tH__Hb%1yiK;mQi;wB2Er}Z3>K8S|DXO%>S9FC&^*d`TaDKpMB~0yK#4i>Q?pIE zjUelV;nOa{FP3x(1pV$t_bH21jQw)2zf)6Pi89ZIm4Z8Ix{VbT>QR2h1dIzQke0<<#X4Z?&x+=OMJB>PA-Q=HD z>Fd|DLY51>DW<2JX0K|KFS$OdeKQ;AF!p?0y!9;2{=7Dr)&}x#$e~jwiOI%`4!`P9 zSfoMlh!%7Mzb> z!B!5Y$awM^sLqX)j1;|V@ct70N!wT{TVtjIc?>Ny2Oky^q*_c zx&#|zc6cyVI+g_!hE0uyM!0F~ypiMMWQM9-yC}5+cZ8e6*k}UfeJ53`E7tw5`afhd z`%jTEe*MIeO$9IihqiO{53QBZy7-=$Umw;bf7$d8ttwE~8nv^)PK5TKtNJ;Ld-?y_ zm#D1;VkSW%)Q*A|EF6LCJD=M@1quFN7`Z%Cuu2n9RQ;S0S#jK|(7Bu_CFvePVs9EH zgcVg4zFe;~7nQ`z7(4>2{o0KcG7GHk=Q3if+M%o!>I0wOi z9!s1wb}*}E_?|kRgpfTroLH$WG_M&Gszgn6Y2HOqj*r_c(Ch|9Am>@es8!;%_Y+NL z;~cXP*XV0tGRTHI4yihYT{<`dfnL@#$>U1f+)JdezEZUxK|g06)@W= zieZ?PCeA8Qzmus2eWg`0ktJhXLZggX!zwU)UUrZK%)#(yXO)ufz5?zgm}(_*wo^dHNl5vmsm+vH z=u%X+HIW+O2OwA318;kG!{9uviDaDs#2kJLb->(_GM3`_argJQ&p-{LSC?;WOUy-N zNr|D9^NcG2=)B}AZvW8YIC$V;w;QL@0yd5?eCZU=xU3v%;7gKnLQFNiDxP?SromQN zBC|3KNX_dCqT)3ZFBMJ((x((9)iLsLL1$)nz~YR*s*CiF_XIC{nq zY}&XimIZ1MwyviT9??koaRyP~KeYbfa?oeRgUw3le$4_8sXZiSIFLg`9T#_@)HbMh zd*nI5oG4#-zYNZ_VaO&caW1UoIAW7RzQ%LXd8#&s9kv7Qn^ho_jrU(5h@I647nu_? z^d!!gRyj$a(N3|)wCVWs7QZKU8Wy2H9NzL>ur#FKp+{F&LgMF{c(`Kj-?seF zIQ<`k@TL9S@2*JU!|x!t<0bu?HMZKhzN7H^jfhtDW7*RK!+qIP?|;K8K4X}Z=RZSj zOns`LSj8^5$UJCHksa9fO&O4C;@vpM=v`FY5m+F}TT_z2>lTx<4}q+9Xk_*82RVbL z)^17kkZzwRqFZ=L5y^r-NJV%~!l?iPJ?9lCOwMfJ=p&9jIW>QH_ib=8&8ecQq`a}R z*w8qCq~uAt;zj^Jviq`fvp)Z%ch`CW? z-Xj7u0$a|Bb4y5sD9*NP5}%dXrL_i;;qe3!mq4mNN7_#M)4v_@5(@IvM9~=TT%&?W zvwZQd#3!05*02M9kw9MWPUwn{dPjJ8B^lCxvd*rh`by=7)WTi)s&J^*o24BYRspb} zfeH?hR9WN52ZDJw9DT)A_QVA%ni&JhbGmaDx17a04()xQ3g}S)dB>L|lwPz{_{UN<+9g;gXC> zK!~rCdG^?I{@D-*rK$}G+ag7DAON5hKXWo>TkMty8thc}gou3q1$a)4y{gbw?pXK< zW1Ydfl%03wdtA`7BL!WS4$LZWMBL0g4qzbTiL$vr=?4i9REDfPsR6@V^w_P8E z?il~J(@Y7*ZA9W~9duBhQb}-sP=3CYF`hNxM+#d5Q+U73AWfMX0t;>=$w$)}5)_=|cIX7rMC--Qh}cN(vvrc#atdT3+c&MLB=;%^R>G)Gg%P`BBM z9!7Ea6JJ5K1lieM06^RO=OT=g$Yu~R57=G-V_OY}SkZKFBsB^2{O4IJe^oy#Z`SG< zLTws4BAbfgcuC}>*Gb=d5X3S>eDMzra?aW1Fk2%Dt`Gg%huQxS56O_J#vE&Q`r)xvOZ;fqxLQa`+-@4P zj>!|_e7&aRc=i5E;3s6o@;(M{Gfyxj3CS0 z+1}?v*wpdrDz>CK@C##MK%KFeguiIxqCz)+KS`EWzlgn5Z|=J3(;M#6dY+Z?zKyUU zDuDg3@Nx&e9V#xni4Pb8phE3KS(+Qt&9%pwAifdZ#`wR^{Y&cqc!~Q7-xh%So4CsfU8$8S-{;C%dAatn)L!(tju?Z z%CQIx6*$%!&+I5ASc!>avE?i1ntBoosKUGqVf$OipL%W)zpFKItkD%4@lmCst$8Zq z{P=6SRW9zQk3xWLi;b1#=HAf8ztZopo?*J@a?1_0*o7V6Z>4Jlq#H>Ti*rwEZD@67 z>5Lv}y~C%=#A5)jQ5C;QNwE`P%!mj-1y%s<)-iZ=QEWM7dd?^5!~i`fE-AX0`LVfl zM#H33=3~M5djJnHL`jmGMlB>CT-RH6q-_hJ!l7lUgAPwJE=1VdrD7E6#-s1D8@5Y) zv4{fa>v2ga{cyTt8!ABju%iP*m2(;NzE#u^D@2)bO}NHhJPpRj{w%X-04Q+#twWtf zTajn8AB!rMAr@Ps&fa!0< zPm60;q~jdvvtTgrk<-)GL5E{U399VJ7qDM&2W9X8CTC1P_JPE@7?+j#LCJHl&iSl# zs9kttN&TfnbCUmY+Gj;w-(#bCv=!`mkMtKG`M*6DX#fm3Xty&CPSun~C!~j=EuMFz z+N!8vpw?wVdOKheT`d?b?%nXaspgd|RY(noUdTFX@^+{4)ZW@gNFA&6fBC zO-SJ}AzSJ_rDipX2&Q-rdw>`MybwZa%o9T&)8~xWJFWBaex>W#|s1 zAJ6S*m8N%P&0?LRA#X3I3g-o6*6Z}<3~132EMBmDFLomMhbBFC_YaN5{~(Q(ubBrR z|GGt*F5NRq4Jk4lr5z=3DN0ENYftp$*N>^#uK@WW*jZegS-EJ)MTC_m+yQftS88BZ zcaSiAhe{!d$q8Y2QfhZHWBVXLL#73XZG|ZbPk0-OX5U*d)sN5UThGf7MKI`H+R@Z= z)G89$XT7QDz|xq6zkry zNR4w*)99Zsy3j>CNPZs(;r8r+v*ofL)4f072#IBlq`};7_`k9Hl8fx~B*fIri833r zLdx-pqOu`T;HjkcLyssp8)<4z7{Hr__HH&baEHQw>T5~e#cqcGWP=Wegy=T=*h=kn z(NKYAR6ZXM7o9Yrws&yPxoh)EpLbWphAr~dfkMW-LcX&_v(qOOr^No1N~Dt{3&$;K zh!GuD+i=B>XMDTGb9`rluk<^w=O}#h(c4+$R1O7Lfce8_Dy?88J$&r)G5nX?@eG5- z-E^9l&GHJIG*W>eg<97t8LXwSd?c9$H+FurtcdJ2-7|aNM4(zn_8J%-Wwx3xPMr27 zZR$Djr}j+N#+Mg;w2=}PEg8DI2_Mka(R}wU3 zF;Lef2SVjhx`&;JnfoVgYl$7WXnRJ15y59l(k{22G$6sRHMC3EJeq;_)A}D_Kyq;-|+?#}l zi3B<@%KGY0s`LH?4KZLO`t5LcZo~;aIzJ;nQ38E5Gu{X65DaX}n=&mSG%eM45AWiK z5a0YwJV}6Lo^SY+VFJ2CERO0LeuTDWB!RcFWZif2X3XW6o{7OPLp?=PR-!N*0knq1 z@(OE*SM#7{r_;3kbq-+cn9xYev*Lk}Xf!d^yS(#ehafUmhtUzB_sV+OD6E({YbA== zsp-Qx@ya@7L-^qFPnP=+g=3;!{Osuwuao1_Z7f}8b4iDIExpdf0vKS^aHUh8AV9+0 ziZLwl{kBE?1=J|FIDCai$}E+|Hj&0SbK9qoIJ{Nscs7>&7eGOFJtE4ub=_^9ct7W= z_ou^KHZy?+UnXpe@}OTg#|c2NvQo!b-7(yb2=-J#vpqEPYCK465~{}Su{=;P%D{Uq zT`Kj06#v3*7r96pl^DSi`C1cM3u zg2uB4xmu&jtH#^ciN2*n%N+i)0{5RFwNyy zQZ>QuuMhNmFcFzquNlUwVK{^_V+Af4VOdrggGaC4@8afr%!100G)ca|y4iLnI+lwA zNGj}oPJhQ(nB#kD4Ewpop4jN^_w|BBTgfXeDYc7eusx;$RNwyd^H6WfjwWeGA@(k* zP0|Nt&=rFvIm&D+0oUKs)EFin^LB1W8!2SMxO|`ou1Y^OIOt zlGApu%j4;om~eV073qfbeKd2w@>GVFw8~Cf9HjGEX&X4Uz{C~e*^`H}|27*Y9+1e% z?KXSR;ICxjEB=tKdJTy=(pOs}-Pbwill@YXQ2=|&1&GurM__{gp>0d|8u@Y0xv>YO zT?!rV+hA;K9dp(a8K5hkY6-IShk(Yrds|{4Yyw%uspF){N=T{QUmoWk0b9%tZs8N& zqKR}pu&n)yFc_71At)KS-&+-7jeYe@f(j8 z%@X3`mvksXH4t#>3al4>)J}yY{!BO;0Fp?K{#G_qO1*Gg#4TS0OOpK9sPnDYI}tT3 z_NI72HH-tNw`%D7e5bCKPio;8X4skpL||m8u}Vw~=!s_EgyI<2K7#SHj=u~TCek4U zndc8Zx>WgOk(IGLF6{Gs485EkW8()|8DbFDG*)}8l}Cbzl1b1v@bX5FM3Q}@C@w5SP= z*RFo~TJV}8tb7WbMm_UiU)1YA{6ou)Ha#93f(d(Vw}57zNT{7Rj*&5TUT#4LoPyz9 z%yd#fkSK54+{CepMyua*aK=QiK_uR+DH#=m291-S_+0<~87tl^hzyKR#Dx{8#p#ON zVPSvs`*~=jbdpkJ$g!HoH65n0>bJj?Z-NwNyD%eHre>_qjeKSo)8#OwE@tI*_otuz zk@p{DVuD7;z|Tj4WKHj94w-&*jDBf`SWs`bVY8Qakz<^*2a~!FT|^pL7EwdAcs1rmEVrM2mW8lHl;F$*2;#Qwx$sAvs@J(~^Zm402s< zj;9J7K0J(yY9PJpkxiu)Jk&CarLlHDLnGYPuqexy2|^4Ll5wU_#kIz$EZSlFq{)@q zqdypp`@n`(FX`dM!F+_urEM>xA1)f}@$B1@@ee7UwV zB+HJNZ`-~+navVZPWpAWc#pE0;#vOVZ$u`w2WeMv>=om1|3m-=q98tLLXdmv{lVfB zk%W&H0Kv);3KG+uuLb7ZM&Rd5N#$z%T?`8nX3P9R$&;=r;p^u zUN1*Adu^xyS|mYy;(pI`mK3;=85zMls1uPeiPWCI8oJXC88g12-*@C1S=`vR*~~vK z5Og9MHAqLhR8mr;SL?71SgC`12@KWuiK2ZnWuQQ?BablHA&smJNJrIat>zmDr2WOl4d`0=Go z*dR*cfJr?6Ty3#~d0TyR3mB-Vbaci)E+Ph=NTwur^*p9=J@$)ewShS3UM?4et4lZ85-B?@p}YE zgL-~c30|@uc<1G|jiIFDxtP^t{pjqb2ld&z~ffACW8Y0RQZw%>LPGg*2iKM@EnkkxzNmbA`1I>02E zLO4#v7tO#`eEo)JB-g9RoMs!Z4_`WC*bfv#4K$Cw^O5e=(|9N!orM ztsBAMQ*!ouu4ns+S~@yoY}>T%XOvjiq=W*H+ngDX@@@7k*-A+?Pby3PXZj2U5?dR4 ztb+7kC9LaF#i!K5ZeH2g?whmu#*~c`Z`7tjNJtkN;%=GfUS*GcXI$@-V#UgAoDI!9 z9*jqPXGVTO*Z!;uT>UV{lbp;#*_uPsY$S~sO5pqw2~7*M_AI9@FZ?W(oQ%8}8KopU zxTIY3{fCxksfzq*da{ys7bE!9=G8dAh|-bz9ECQ@bDKkBD=3(h=ebN-WO*E8nLHVl zjF9MFM9~1kHc5-$R8iOuAC#;;fJj|KOKGg?5+76qPQ`{txQIpwaDkS|<3#HCr8zYd zxM?Yg+SH^^u@BGW+>gxT1P_4~$HH%5?SF=3&j@;1< zaEgN9l!6)&P5@3Na6h4fpQGK2k_{4;q+nN0>@pW&Vp|6rCmJ?iMQBkTsa1x9BA!g9 zW-CH?{_Wr#M!8OdN<1`QX*Oe7YeGrMpx18SbBKl}-RkhULi%M<`5enCODi}w27Kv$ zY3oKwRFI&XF}JN(zEY>Dpcf3eWb2N0j}QOwd`ty8DD{3>AjT$`CPEF{KA4FO&+{wgOfmB1m7S0Wdci8sSqW8$U9n9x@9W^?e4G+{HhP@I5c zPcSF*(!`sk+mI^)z?(207;D`8aK$*QAU3jU_JlG7>;qK~H>bi-qQ|HTufAm0iY_E# zg06%Uf%4B4W`{9=ik`z~n|p5Q_B_aeg)*hWwpX{5RVw&bz<4Czo{)B;GI4X?Rwa8= z=IH6btU?lq06bGtr*bcd;0)&oyA`wmn3KiA-hcq}E8rHDS3@A3CtZCKA%*AR=!;Zz zI5;kL2wq|(LFzVdH-vEmsHlm>#kjv5=nGbodLDukv$37_k!*J5byO>-1(DpKIFc}i z(;kFt(1#(}2bIHqhdr92ItwQ894?4+u@|{z?`^^u;E&{Hj#6T3re@72rooqBM$Es& z;AMfmuuoz=~PyIiOvi*M&zi}&J`9`>EDp~&rE`F#s9h!EMt5Z5%W=d zt@WPEeLmhW=)=>3BKW9&F#25OUZtgKNILw-q91y~^KDpAYbf+7lSlT5KpS!#*&u%- zU>%za-kxVI$huP26Jz;-3wlp0#Uez0W%Oyl`7+xG<8CAX@pBQ2-NV~MM%LBT@|EBV zksnMaptR@;!b6#rKV;-hH%dM-h7+t9&Pq!zEpHFM&b?_{LCd#F41mA3Bk7eFAh(`& z{-WPspdB3J!#vi~xbnleswlUgQlD6!Bq#@Bc+HcHUrIEL2fVCO%wjI-L+^l;JK77R zFSPF!)$t1NnE;tgm?F(NQ)F8=CT1euDc-+X9XhA|)QDYfcjtU%wH3S7Gm2$8-ql`x zAtBS5n*FLFf7RM%JVKZp-+>j1y+}U|sjnCOdULa)m-ZYI^boUoqPxBHjml^xJlnQv z$Y{KSbRoC$++TkgGkBh<=g4B{#i;n;E^p;S*n!o8`QOgSb<20(TWs4Ob0?Q3mj(K6rV`KecZ%pp$wI5Ln%)s^GbW_q zl2?pf8}C~w=Eh}0K?6<2fjdY6?9b2Nr%o}Tj({cI^M>Dj5O&a23LKMN^iLt5(0NhJ zgh_-73Dpr_%e7fXrsUhuAD$-)n)2AZA09i>i+IT!A`g`OP#_dE!f|j&%WnSKnK3C( zLulV};HYTCIHwbvhtgiA&UAlMUibcTDpvGZ?`bLQ70(ORmAcOyN9uAC!?fnNX=&cu zCLcfG86SO}xm{QM8eVNWwt`7`NfZIK$-Ns8b?5 zuqp9iCXhlju(10zpRx#Ro>pV5#lr2y08jJ+JXMs=NpXSYUO9iEK@x1pH4cso^GU<0ioUAKcpj+wzL}p`aSD%UnLUl^j z=2e~kyMx}(oMyZa zbmqUBZErY@7j!{9-aS!q+w1;e)5_FjW$Oi}=8EZn$A*Wzk>Sn+-@J5@vE4MT{a zeHKP$KP-~WpEaulX5~H}2*>5!z)I~t(rQ_LMgv!Gz^u6fpTxN}-)rB#1HZGyK!wJr z*L&IOzr?}OD6U0UR`_)GChd$N`c!?>==nxTvnu+0j5@(gZjT*YIp}!Mcez$`NOxF) z$bS>tH_SA-Eq9N6-QHV##P#VEn)Ua?Sl`0 zbJ{t%Z#gCXrh`;*S@DMhxr`9~Aa zLR<-NUWdzkRvpN-?t0J@dPQu!b1FB@)#W{%5M$ zz2-E({-L2>gJ^8TD4BqY4f@}~-~a!B^k>9GOo9rGC86b#n9fC56dg48223lSEVh4Fvc^VzvK{OIQj_ogw5PB(MFQG0r{tSw_p2Mxgz%9_wOyJu=F{Q>Asq?CZ zJ9R9;0~SZ0^2>FS#Qh~sp$VHKl&pr&l5i120pCUn7{f_>(3=_6X_|EN3 z438p^D4&TKBR*x&g8<2*fRN{o-a%53ww7*XJb~gAiK3n;74AkAQpW@}ViJHJfW%^K z73RQAQY+C2ADjJEWyJ}e(!?=Sp2`D?T>y~_J`Zhwe<&ReUY{ltlkmJ8#=RWsC`6pp zq#gGJ-*?gR;wKExS7L_-^;eWy ze;E?HJb4D*)iXe!DT*dVL>QbJf><`rPDIhMCj$4w6;w+Q&QlKIE7180D&(4MC>pXT&YS&>9H`e(pk3@XX##wi^$;3_I*JH1 zj7|h@`hQ}sf)2F)$ejjUQKp{8qAbKoLv?6frG&;bO$e!SG#k7Lnl8#H@U@$T$ALo^ zBi^!tVGopR!9EmK=x8^C*2Ke*JU918i5Dvy==4cwk3$f?2O%}a8HH$`$XsF3dVhlM zkAe)bY-ynWDBg}>{4b$4MS4e&#pBzv}6S{k@S1?~R;4}1JLuV+v;ybVIxCU8jEC_<&Ih(b7W zUwxtLpMW)R^@KttIuj~y5Qc}NtR^uDh-o=OnPVWvPDZa`w(MdyY@>f*^c^!`w^+r% zX-3FW#DgR zaBM*-z_-YwoH>o1jS_5ZRNfOPf|o?|z`_>6>5zlp`!s0!MIpitHc?tBG<`T4p^bVH87VNloRI~F!@_2&G%iO-Q#}hJIZn)Y#TzaY&ny_2x)RX!9Tzi! zLRvJJ27w&N(Q&q8v_uW`dqX)DOnYbSF*b6GYX{(v zm$DI%K@kv?{TmT${3K$=0qH)5;E{|ZGBROdN^mEI5#BUX<_Va|lS4r?Mx%rM#~~{? zPKDFoX2>?@Il~OJSb_;MA6Rb6Y;1&6{2%-ZymHM}kMI&3I}+gtYC{YmdYwLnO6S* z1{VT-9|D@17~a7rq4bBpPfS~WiR)&~JryOPR>d`=g$c0r&BiFk_*vY?PVnstbC{>iIUXBs6?PkMMXmUCl^l8w>i3{w-pvLjR z39MW~VF=w?u>K72U|B z@YtxCaWhTPY)zaZ#1b}Z-V)J61=wgNY;>W#I9nS+*|w(1s|zs2L^#S=rryWVwG)b$ z5XcLV#OB5@V|A6lwjxoOEp?4%AuB^;RSi{o5jDn4F(Gj=PL6U%O_1V3P&cB(V}h9C zTN6Dl3)U9!zNQW8BbE)Z#|^PzxN3|>-tCMrT?!L7H4e@5vFi}ALx@6%>!S2Fj!jwH z0W=K^qxd95i-;sYgnR*c9a}?{@vJDv`8 zg#&5p(CC=9B}EmEn;o>4J;61LIS`Nc4$>5jl8Y?~ou5VYZH#UXaO7>aCdVe;jUY*} z27XEj<_bnp(AZ4XcroF)u)O`p{^OUUMA@v|N3mrR6n5q(tR>z$n@%{unj!6kMhS(3 z{{UfVi0z1uu%F0o!h#~{4HF1z30RyYGJz|hPa!M+0L~f`>o7*5UgY1RXg~Lyu*sF? znBao!EKTUILU8>LK$hVrP>~}Js`82?9YlWGZxlmetS8+23)_wN zDif1pZH?&1ZH#nrUfEl*Ib!Z}M1bjXHZ+7V-H^E{^cPDK`#!?`LTJ;nO$5%^jHeGP4-If=ccC_D(Ad?Dj2Wc|NhT9)qY&$728G2b#vr^Q z7GVg*kb*|4hIeMf_HYwzjq3ocrQI4ogO3bFOiwgSaYEY-v_zVNJVRGVGxBp-OlMmW zM#Ptk)?MLvOeO3{V?=J=KhZz2+7C+~aMJY-gT&FyV$hpya9zVirtC9FI1Fg(el2>y zf5Qp z)v@hIBH01y5RkY{hG@qRC76W8bP}m1Binf2Y>99tT?T5%7Uhd z;+6jZ!-pf%Hw_`kOJt)%R@Vn36xe9^IvEpaY}k?34_JQAgm>g{W5l_!*wP!XTnWL5 zPWCH9ZX(0lBu6CKs$8e+Z`M;6l8d1nl7eNnrF4(nZ(~V?QL*wa8gnq}M+2cjaEo4v z8XN}qhlR;Yjs);+14=eYj+s|u7`YpxWUKJdwI+^nCL15YCN+~3J04NN))pY5Xg-Z# zqKIE&#DTuLO|>Li-{ndGX+J2%;ZoBcTaJ5TH+ES_vPRG%%hXpy88q zfY{%myrjAyzTpitXyiQ)w1o~d(D@T$w9L^k9vV!HS+Spk5Xd8!{0A9b54MKjmw^(| zQs8Fvg{=vcdt%5m&%>jze#}UA8n|K0ZM-$u(A7fZm|i==&Bn@6F$;nkJq5Nz@pN#d6g=+@oUaCt zgT;Lb>`bgog!y(Kp+?glDB)Bqd<%k;K8xv<76xp)ljftjFKL>~< zzZy&uo;uAbMaC9e6DiJH^e0^r7GTA+NF%afk{H&7hOtt@aBkrt3k`|le=RN%268W$ zXs-@NF9s4wM#i(q^g2BW;fq5g6zu4uAe6-#ydQ#i-4}{~A3iXT72zM4{T5p&&NvhB zL_->4)1~ZgiH){RZz&LKEL;g=lY;E5r$6}Lq7x8=KMR(~H-+Q)E#Q(HEzr3T-c!ru zkCCjVQL%Y`{{RW)@!|AYg3Qbs!sOS2LQ)~IHjZ$H=?-w?7IJS5WpYAzLH__cW|igZ z_#PoMaNy)<>{}Kc>KQw;+}k&)f*a2+{u>vLI^nnQ%O?7_o#Q{j-JgcpZI(+nskbb;v)#NO zbH_!S-0n;~4*}HphM;l8Wt;?vdj-%a%KK8tTx*Z83W zMu_4`4(zjxmm%9>CiTy&EaCAFF1z}WL#lXaweK=s4WrQo0hSswPBRZ7b$h=DcI?UW z&&z8Be0z8Zjyb{HUu=JFPLY$b_Z#^`uX{V z2z%#v$-uVBlRLF+lP$LHd6;?qMla?-;Ii<={Qm&lPTl^ce4pDS&3|NnU3;bIQ& zg2^g?F%AhfY#C&!9>&;%Bi-P?-M(_|w%f)>i)U@;-2Mf;JZ}xqWFOZB7h%{X#LOT{ zCsN7o+$KA+%OtZbIy}OA^5gSB=$CTvtfU-*A2u?4iHlfiZ}x7C&5&@-w)4hu=1VN& zc+T4H6QVA*dN6Cd%EujzARV{mFQARP`MOV1y9Z{$(Eh;rPwb%bNU+!Z#pq8_UgNnh za9=Um5obtx)4mx`r2SG((R~SX-z&VaC7YGlnn(Lfx$nE*4^w8rHr?~$Sn1*Z* zd9b{}c455ieBK)90}G&E?Z@1?V%crycy7M~mkaZkLUEJiA@(8a7k?oy!Tzm|By`rq zH)q1ZWa?dSgmSUcbFhYbEj|zB=!sr!-mp3lJQAKl__EvM`2~z_gjcc$t8t5=i9rw> zzCMMh`-e%t--l4Pe+=g=&&1!rhQiY7H&2G@4xfjE7er52bD1F?hJ6eOKG>JI?mf#9 z^(+^%eu4+oABCDojWhJTGkmD@?vd0#c>55132s~+_D=MMUCwwz4|c{0f4_KMQr>xO zmv45>jPf~rINnAei8rWtI5YPD0I42X zFLU$Rd%hkM3G&TjCaKxN*bu!48-y5~NU)CRjEBX(FE{RAk&hO|oNwWlUbx7&feu8j z{{TW784=+>?7T8;oyh!HAJYb5CdeC+c28~_x9Zid8{0`kzwiF|@e^bx=!x*j-q<{4 zu}Av77f;{A&SQnndgr_MF)^k0Z{$ZC4|lEM`cDiVk3)n3Bzf2~TYvbHk~|X0UN&ai zZz@)w`G4-!@C+GN%AU3Tw*fkDh4IHX^(+Pc%s6K`!*>~Nvt+!l2OnGsj6udh+$Y!R zVJmC$qHNgPV8Suv_`Hi5{oTh8DZ862;O+-_1hBswb{}a`YhV6kFfrx``<8^VyFcBx z1KQP=Si$uh?}fc>pEEvx6M&8PD{pOn350r2squDSw$28#LFa$3xFyHS?mIC3@$TW} zHbJo1;30ZV11Ik2zU8v`TYq8y08+ycMhm~|mIex+d>Zh0@=cO>&gJSEemL`WWNdP2 z2gv@~dq20_e_%e#{vX?~v-^FA_Cf7Gwlw$szxQ~O==)El)&9P%{J{+|LHB0crRCov zVQb!>*w?fBZ{+6w1V97(h#};8kA%zr0QuF@h~0X`y^JsLjp&rT31fGC`{j?#zDGW{ zB15=m4_4*dW?63<#6&x`6YA&R{2#1B{4`X@$P}beONIVxsZbRz9W9@dQU-vLSd@N4qE%>%<<9;K94&&$a$4^9_ z)J%tk{{RWcZGL*T``h&4zFnNfe`Jo;{jd*2Xq&Ues*C{yZ~|iTyq~Bow^bj_yD#|B z=P&&K0P1JjzqWt0PZ|FJR$;#^k$Hc!I(vcm34A+mIeA%KEt6#Jle_^SE?(|_M*ZK| zD2l?`KG$g*!Pv6SH;1S==@{wyH&4+Mv)bTz;6Tn2t@3PUT@k}sX>DB_?!l*pADha{ zBOc$?m+HQy58*zk3#VBcGmKf zqX}fzTNofC&FcKVQrV^*nWv64^Ng^D3?z>4C-n}g59A3PjC<}RA}urF(L=^=z2jjOgL-qtYlIjpXP z8@F;FdCltraA9;lTh6mH9(#m=$p(9E2#$Wq;QhfJaIc8xBb&IfhB(W~8>Pq8WXL4L z8iyUbGjw{jiD(f)UycL6!IqQ(@jL$jECrEu@|?Wg3ju_$X&kyU%2jo=y1kcITv@%b zt2sXyYpdYHUHidg4bZ;$caq4P$2)D(WW8|)&WM1H2Mi;n?JmBjtrr|_&DAywpn1DzwhP4q9L zek#Vp_mFR~f2&YCy}~{yK4H8lPiZeRKHJQGxJSjOLi>j7e=0THC@a(()E>zAZ&Gc9 zzofFZI-Zzj^Z6;>k8r*1y|^dKk>dvQ052&WUbcWI$$L$2IQ4dB9#-loapCG5W+d|( z&G-Ok*oKL;kO(on57bX``X*ez)MI*#34zs1!?E|i{QSG*zacq&S#{y#fy4N0balw( zTli#oyxuv>ILO<>f!u8c^4RK+7GCcs z>R{XYQ`_>9w(zlSu{-e>hhZDPtH_g<@|RhAwpX3l>$^;egN&c`x=)@K zGt+MIk!K~a2oQ?MI!^F!CKUWVvtm}vH>Nk{LrTAyS z!yTVf)Oxx%k@;bQ^KDO=vcrwwe+9`~aOCdHw~ZnW*Py#ThY0cR0o#}1K*iCpXFdtt z-ZH@z`jMAIZW|w|;U>Go=a+&W?<=z)3Bdf2V%P=Ne9x%xld|$50ucD%hu}|(a#glw z%`AhG?PuF|pchmU{+G5Q_-uY3>h-c6zD8~aN&ThC@5T0!=(>Knb-S;*V?M7NCzq~v z^1HEzMt*-*T*;_Jpz|i3-u6T5bdiX5b28+25VwZ+EIb*z$ZXCX!+-*PNPK0#Oc;b? z(+j8-2ZX5>qhjad!XA_np?dD9M!15CZkAL}F7bL8QbVGU; z9uE^7*gdCfK$Q+VZJBNssl$D6<U4GT47m;L$CN1K@}5f&T!?dS7E4 z@U8iw#%-yodhYwRWrf-~9+BJV7kkQjm-Bh?@_ysdb|mxBnM16kyRg^cBiHa+aB?^( z;qeP^&keVTlfI*U-FP1|!up7D^4j!WnFYIcy-qqN8?z$aU6XbMGKF|gY|o#=%y9Cb zS5f=Cb{)iGd1UK{GCC)TXc&KMp>}4=yn=jnFzfJU_@24QpAeZY9hTTL;?en4pQ&Z> zLSfkZx*Kj5=NK()ySv;C*^g#>m`|P)@GmJAgr8VEL8tcK7T8^$?Yc*zKhiy0J=r}F z<+8TC4>-;qrAuBj;>`2H>3Cjuhj(ni4~9tklj8MAyA`jP59v89(U$m(OH(eK5>)jr zM6>6f?cjLzfewOI3;~}L)NSV;?wIN>zrM~!@#fh!Oo<1@`->r$c-!j5jGb6yKNqTf zZxJkKJ+AJ-(=Po4y$O1Uso^8sz{s?ScDfdoJqNi;R{jCt;2tj`{gVO{)gIT^86A4N zdxkZXf49NlGY0Vo&DL3OIXCX!H4Hg+T}1W-@5F~qugfUC<&~DcZG6FA;r{@N-)H%H z&-o)wtZ>*5NR|E5^>*iYdz?Izvy=|VvipXxk+-n3tGBrG*RW*jh|B$%^?C8{ZJC}3 zZl8fYar@xu3{J!M#SqH&k?=s9K_Ffxz7g*weN35o;Jh?6(u^FE)6hK6Np@d{i(wBN zoX4GhtsHB1>R(;-&&9Ddc1#iKU)EP{9_`DyCN18ht9agVvi-w>&gFVB@*sO%9#`1D z0I_;lr{qrhPNj2=1V6C;D{&N&|c03G4(9FH*yF=(~O-OIbm zR$hAd0kgs4J16rdI@`wOkaZneTh{~UJOen6+dmu2l#9;(FC;sMP{q850(rb8*=^yo zJ|NpN9FH^S@z29zeh|EIv3BWpw}RVmUxv&w@xOw1c#ABxF8k+BcHTFKd_FG>x03zG zR_)^V%G>y{8j{Oi8(TsSTf+n#EPgMT@0_wai(#zv^$!_0Y#GK+8f0BwQr}A>ukrim zcsR~7$m%8;Z;5)f;UlYL-Zy~@XP2mWMjq@sV~3r~c6fDcGw_|Wg#Q2uJZ}Y-*=>8o(EU1Jjs^hV)Jz`1NeoxD=xv-!jY+A(%J8g<<|k-)V5`;`2PS2^Tu#+OE!0$ zdbZ8HPaYQR6Xtz&9r?44?>0odBRhJTdd@ZQaxoq9_hfeWJP&>F7S4Z>@nm5HPu1qc zZJslQS@SY)fv>jvqZ+4=*HQ6OSyJ4Y|f~xpw~mDQV*Gf=#}pw!aT#2`t$eSkKt;4U&R@(P$$IS7Z6aE)m9(a85mySHyd*$&w1TnJk zF&)d|JX<*uhXW?EVbncM^*#5`n^67nLEJv1vdNog<~&*cEwL9+)FQgMHzF_G8g{<$0x?+)5;>^C`--73FZPN5*-T; zL^v)U6G&XJ*BAYXdLTNefz~;hI}TvD#I>gqoP!Wta|cibXFg?4s3O!j?SfP6f{+Em zp%T<>_Y4sH!3eDqnlQkzkvv65nUG8z#PN&dgeYQFQLhnrEPz{>U=8jCItXD9iI084 z_j&ac(9~N}2WmV;c_8EW5qQH2kBB@<*@_M(+ttK*FU$$w%+0ghE5aFU+)uv)7-k4T_OnLl%aW^Gqd00KIV zz!LEV`5IxTnf!J>m6>7c3CDtK(wMyGWrkngR%)U&@tTAx;CRT_YJ=6d+%P7IP z$d`x`yuKw3@3t23(F|%;B|rwQSO|al1r1WcRIG4j7g~-3xlPm;OUzKChM*1MKXJt2 z(#2WA!LpcPt*k}y1>}Krgwd1&B>^)KXYzKEzH4P%rI{2Fx4QpS&5&SREbK3Ks*-$=r|zs{ZtJnC_2jZ zE{#0P*;*Y-6?r;huDna>FU8CVF)Crr4dA~q1DI{VU3U}kfYXXQn3HjeYGC1n)46h| z7capBCG`@u6$D%1#lRZN5{F(RfW?ZH&SN5MIAADNcPy7jq*N$>*pocFxq|O8z;6{X zY3gCTCn1()Qd)gYx1Qw~&EDXiG2(EUyh>7G6 z$-LAx=z^NeFv<4~vn^Sq?gEv?%!)k9EJskM)o~gDXb4_^5HxOJEO;R4N6buWxL|#t zP+{#Q)5dy&nPR1a--$xxZgM(jy%EU+62n9d%u@9zwA=tIEW?v9QQje=)T=e~0@Z48 zc;XG{txjwuXJ&jst+f2hVRZ$n^#;dUxthZ=)`%7L6?`$et$HQR-)soBSsF|;xv=H$ zm^#d$DW`P|3NZ#w$;w^I*v>hKyEgcgp|5b^?r7G0z;9KK<51!51F25}%`*XO?F=PX z?im!r#lThO%({V~e8&Li%N@?+ zcd&qEEh`y`i-o5jFi={racRb732d`(#H5s5OqcnFpy(w;sF}QGYV6GFfdVQ75@Mr1B}WQ=MlgLt8r5WKe>afcM`g$1ux-( ztC~3RGFBmZCDh2ALRWo3?Z;Cj>~$)Y68la+65bnTM2fhbFxKD=A)`@qMve$kNLs~r z+!e!fJTuH~fQv`>Ey&}kn9ddgBYATbyCB}S^X@j9j#lR4+L+AXe|w96akrU*%7{VT z^Dyv~EE#}V%iO7Tm~P9mdjv`qwpze`p`7M&^)SPTfb53sxbrC2)G3T(m{2B0;XtF> z!K@z~M5AN#C^dc5FtdF}$YtD%^#-z+%&^<7PE@%{*KxaYn{kdjK!sugrVPcat0r~j zf?`$+R4dKLSl1GU&N-Fa1TDMjX4g+K70Hh<6F-s{RkH44WSDin;4K*-scZiLWeRGD z)7jKazlla#Bb6Q{ur`GhW)3qiHyo(C>McB`P5vgxv`4v!bkw4TT_>DDX9vWmB*DLm zh1v()0V!?31!u%ShVAYc5UVv=#0s)puH{?PsY%DgD$aaLEn|pg=XsP_bu1BR9H-QYB!#MZ3Jg0fkIa=6M!&!O>Y*n|DwJ)WH7B zB2>BME*E+FmNP#1m)*W5?LHuCHPi9_=`>PEE+!G$1sMv0h+_n$y0pU=54PrIwQx#gW0(ZIt~CdZT(JJhZ-Q8`v$=f`uFO2lKug>i znh0IOo*`l2%x%JlOmq;#xqTS*6rx@A7C0!199b-ev(X$}5LEvFC9>2|`&=mN;$J5o zCvkV0jk!h9rw#>n! zIeF?^mI?w7{*z#HR|BqpP`Gt_=eiW9fjP@rg`VEnSgz z`7Kha<|V!<5kWCFzu=X{B(k<33V_&-n3SAC)djr9+K5`>Hm3w??@Zdm>NYsg5WjIR zENtQiRiALM0|SXbuIz=Qqo|5Yf>Wq9tm5X{IO5>|@5H{rebmBu9(=PQK|PQ)MikTH zXg;O?0NG%p?f|CcD!-Y8gW>-GWhRc1e^T%Pt&g%7F=4-pf^7L|UW04|jo5x{)$Ei+ z3$`6!e$;xEMI6u0Y_B{+n+)G#dj9+ACdx)2Dh~b z5W7*;G4sF7VH$uB>}|6}6XND8%aQ%dRQ~{r`!1A!=gcojaY6lu&!c>>E=EP6w_y?} z%C#!0$~t#(ato;Fzhp6Zw}^pRvsc`)D3x4A%@I_5F%;fOLFb6>3mUI5t&HBth~nVu zR}DGGP`VMdC9gi^X~nKCUP}9vQfdkpP!q&H;IAeus!+2n|cBW)A^)b1e}J z?RhUBAf@qBpHQsh1%P}@UzQ*`sp$UzWs&jQ`MFb4?ahzkZgYDjdKLvEc%;a#Z8REz zhCQql1O4>)o2N4i^$O}zqekHaPmE$Oy01jquXhBr-f)MMy}U~ zAMQMmEwE+(0A;MB`Z=Ag++{cO?knE0M%jA!1xFu2Xq>5UIELicyFq_2jmrt#z`l__ zXx7?773h475Tg2i<+UE^64kvVb`n<q*j z5u>Yo-%`xk_QhF0P_DmFFg$`@895+CjTNy|2a;>i99JQKC8etYQp1zEQC?S%&_fncgPQ*y2XI5X*##txW`rMLUP$!gX=p(+>sT*$1iHyvNN!{%gFV~COC zGjVQa0I^&+=Ho|Sm|HdT5!Po0iDUAcdw@Rhu)Hr54g;Hlh4xH=+9Jy5o0L~1sB2N} zw9p6CQgxif5jSgZS&n4SGf+Bmq^3}}oCvn{}K>!ROp40C~ci+}(FfD8fDR8hQ2 z-Mb%hijYFpoRHM6<&l5*go>i^1g$T)#%SE6vu{4-vj)^m<+02Pt~%;ptV;%Q5pO+8Kwaik7I}=c z)2U(2q4^=Ezx}1oLz!C_aNUAc8#7yqZvHB1OX>#T2j1WYESXGYDynD9uv&tgdJ zt5CpkGrv~~pyn6Blgz4znS$EyQD{LXV^PZ=4y3k7SWSwVTc8f;BlQ_@QkWT+I1NFh zaruOAgD+940B}Hqh=OwPMFIJ$+44ZJ*gQ@~H2|eNaz>#F2ICm6OJm8E0)*8;tK@}H zp5kbX9KX!GRz1hc@OgrSb<*(u!?xAbYJ_idRg_;r+_K``x`HawAfx4u?eLT{cN`R9 zjcTPSE(2%tFA6fje-RoD4&g=zUW9}-+JChf{{Rzm=MMw{FgX%!B33uz8Nu>V67bDH zdoJM&{vs}K61R62o0hw3CPcF?EVu+K;-Xvo+)8ii8*7L?AeV!mFqre)z4A-HWvm8P z;{+){%G)_mdzBOpztxC+rN%?NEPHh6-PMcum!+C~URS@od5s~LyzjWU5!`fz!k|UH z5V1`0aX@ELrXfps{T2KO-yvdsb!{eo?}y%`mG07h<@5bq~l5%7^VgFvjy?K8Rcgu%3sC) zqrr#v0yuHxbN>KG$EaGP&g~UXq#y#q`ih5@4XUFQl>Q*NsQ3Q>kgPDTFn1~h5!MaB zf`vfxy-e@`Zn61+-iF2|(B3otB(iWCjldpOKVa5jar_820gUd$^k0~o1;Pd|5hTz+ zq8QRIfXt>$pzu^WCI!fUB+2Q^_b$1EMeYNZ!+b{)I5!qty1LZZSLS7fxQdEcEym~k zWw~`Vq2A+8)=+CP()cq;rt5DYm39p#=_;xdx7W^IK-pdZ}C`Dpz?<1}{E{UEcOe4}3rzM$E$dW|LGT&flv7IxHa^DIn6E=GxZ&d51RtlhJl(F+(N2fr|bhceZZ0jtvhIvqaqC;-N*RDs&DJ@yPmHMApU`tl$z-9B7{$==#wlcDx z0*^#sOt$F1^Qcv==dp$^bx%nCM@vTIy?>FL)ha^ia>3(>L8wRIO14nC?)<;98QT}q z1?d})sFf8XC>)GOQ$}5n;~x`w7&IPe9!iPmN?1?2wHGj(pa+cS^Am&78AA(3r@S-j zDS65Lk{GUd2&M{`ZF)I}&aTt`IFDG5uL^)0((80x~;h+q1S9fduA=O{jjKSXi?kS6)6 zGu0byyB_xnhiWnxlE=hlgLEJJ+-C{FFFAdGeMLJ@PHqzu#m(pZnAjTX+J_4j0rzj} zQbj6=Pzyp>(R}8s*XET1WEy;h!M(*TX`GZ|0BN-OvxRHw}DUYHLn13)^+ zV4qBju6l)13siu>^%WJboqWcPK|zE|Y3>GsYMKx4{=@v^p=;z;WiFLpMaDX1q&ikkeUsfC^%* z>)ad6WGl}QrSt9rRg0;JT7oAl1yhp|hc)Mj0dG+h?irU&RHI0(!CtP8YG;lhELe30 zrVjd!o%n>@yPbHM;Y~JwV2oi_z=N?y4`TA^eE63^p}-sg#9Rv2Z!Jz1!~L0I0pZj> z0?Z3$oSqd{LGnU9HS{BsPq-XX-bjg zHTsTgYX1P9v4U=h!llV3Q3pfT<>)@oyJ+JP{A&9TS0&3Q&N`ouH} z?~J0kGY*>;*VZ!tU=zsPAjcXY?E5Me2Kl%T^2%&fn;dD)hzj=yLB0B6kd>j3b+qOEfi zH^*?wssuZc@lXo5MS~0ZK@RcaDAT!aTk{ng+|5s@3Rj%OY*bN89%4MuIi^0g07yBh$ui*;0Q5!)46g$v!Q<$^w+suf4#S`EFqmN~@RrHGzo zxX-yu$U#-H1BV`Ga7qhNEhsBityw=1zyNPOF-rqrf8e$VuQTHQfd?qO7_r-Q*W zdnq?oY^U8u+hg`30Q^*aiiwqW@f^*cn5rqMfwJ)vy9ZINM?h*2X)d~sJ3kXG-gucU zY$X)kRHV4VBXza8LBBT);}^_o?U$KRShi7Qy$}!@zcX;h61XyXWvMWlsDo99Q@E<` zI^@HG_>5uM7z*6BV_77up=&&h6D+Clqitl%aWBeh{{Zz&JIw-_`%tyiqHwY;fG_}f zVj{|y;V>tW`9*VNtfs15MTeA!f-;jR_b(k9f?PysKLkmN5E~ko@QHkQ<_eqfQs)cV z_b3vKZom7>akW1SVLGw)L{UzF`(PaY;t(w~5zI;nVC=d^=K#Nx{DBpgw-vfzTH(+h zu2iJoGR#wr%B_#g%qS`~ZOu;zxS0O{Wt$1=P=L>wvhUnfqWqjfxt8WikAhgK$`P`KfDACeaJQIgSU|~-Bf!g!;w@^;3OYF84sKH8cyK{l!(=|Ji?x^g znSr$b0KTIY_%Jf3+yG#|5nn$MQW+|uQ2+*2P@}jiDdeO^eQCqLY|0z6SeydtJi;*% zTDD0h(r0A%}sU*)&`_Zh|FDVuc-Jhr)fzt7Zh5P<&x%`*se z?jzK9hW<>8{{XYZ8Z|JihAiDb=Lxl--ufya%_auat?Sj6V-*e=&4w^8WzX8&Q$7{fSc;{>b&q{{R~j zSpG}DsZjuyu8C7%V5V2#{z^Q!gHhVKe#hdX0C9<(RB^*>Abs%jG8Yx{TtYNUuUVA* zKXHxIiFL2yYcRN4P9;cbVlWSpT&CPV?+pi9qN(PQj#y%QW<0zs`Y`^+!24FTNrP}m&9Bn#&^GB$8c9O(V`K$RaA+m-#uRRbq z61Rm3Otp5P!7VEM7n!yNC#zv!bzWkE8X})6yY*7hyQK$Bs9|2W1$Kl~wN~=^{b{vj|Nn1vy6%q&pk>J&{KN(*qzutQ4<4cAP;vkZBt zHA=jQ+`Xm=aNZJy6>k{BaQayo2b>SY<+42ZP*>fN@kb;6u#h{rn0_`x7N=+TBX}?> z`9>>YzzaZ7000IKAt+tO#tz0AbE9_$8R~NAI6v*haOxwpHEAh%LGltR{uVqXB+CK+ z0FGtfu&30hH=EQ2>M97;aRE;-)e_sYjxLoXL_`Wih^8kD)ve~U##v~k{{Y3oA9ruu z0YR|iy@DjSKp8gEEEdL-xMWBaLBo({uB#VNJ8U$6s6>k0;E}-XnkWb0mDD)i9^d3; zVAFu`L%BjDD6nZ5e7dkXG~<|$Lh%g4g01}B~QQShdY;`(VlqW@gZd14rE1_^*<^02l zC{rIW4%Up{`jn`iqlK(-0*Q%t;GI%5AME~0Ku{@GRQw5g7v+K}#m5Sg)2b!lJ0pGl zjCgRcJw_!vR3yOe>Il>!jW78;M24=sMGZKY?Pr)FzOxX}%VZ;&5tUKL$)Y%z3e9@6 zLBSBpTsKAa9hT7XE=K8&%l@DFLq8wfN;O3iX<#x^%aA7%Pdx3%n-R11Y}uHL=blNH$;8it}aq6R9x#? z@fcHeUB+hpva4y)f?LsW8Dd|Waq2kvbK)IqH%I#Umb$kUg~>#voM=QR3z=oOAGMbD zkUw)Z+gG(cM_Hh@W9yJ##Y-a62u(vC9gWsys!Hj%&mK8<$(q(itPfM z8aW_bgI#jVh0yg3L=3mY%T%g1ukvNm8dTZ1L_E&y1ROUgm|SSQ<_4nw0HWd(O%|^J zXue>s5xz*0OY;EibrCC=`I?k11$)M5oCg=WWvpwoD}~)=WyBAt7^NMdF99!7>!^q_ z*>Rx8bHwas8Z(c$0I z20E!fQoWZewjeP#2+$rGUM6DYUAtwY7w&jq#7)kG^5dz57!Km>fhO7^BQ{#WHB_VW z3JV~D)H%9~1uz=3xEy*RY*9+hv?A56FQfg8Ge8;h1afY*P;Q!+%%O160cGrx`0tm1 z>gB+U(@$MS)&-eYm4eNNfaY7S%zWpkt;?iN6HK*ji}ZHD7)l1y%gg3vg4G{ zC~eRyn*9i#**+C6A)1)FTzD2dk+j#imPZ#2w9{tKT-u+jn+TTw0KuqEp=7J9Oj#YR z9wHW@z-k;5-l9Eua9wF_ZDPM=?P3s5M!dolf|AcqeqV^WVdY>oJ!QnTjaBm05ga|A zV6OnYvw*HY-I_{vULy2#HM?*5knjmjR|$`BD^917J!O- zlwf46#JUB(CWjVcSaiN%+MThWuI9U4Own{O8$S}eI3qPVCkUY+bChui>FEWHi2k6T zG8g5TX!-q!pTrIQMwo4d56dl6DOTDmcFKDF{{V!bK(rL!;w}N82f|q>x$z4^Tx1); z2optB$Dv{S1b&%hOwEe>Y^nxlu@L`1STt5sLD$rd0M;ZX40jC$5 zq=jk^W;C5kFS^8XFL&l31Up>>O=++ieGy;_$WmJ$wz2Agfnofc&rGYr6>iC3Mw@YXYV3N6cXvKQgLa^BSM1*{cpCm1{O1GisDY zgD@{zHR@me1T+ zPF-660KR2@0-B=`gdABBtK5HtykNEe0A2p3C<{O1%;4^59c78Bykc7Foq+!UzjEk$ z$`RFhaz4mGRw|z({YPkG)=z2todyHo{{Y!*US>+oM!rqr0>=^1Ty+qOkgE6vTj_o} z-%%<f8&VF!Ly073V##%26ZlChk=k9 z^oX9uSD8c{zfcE3YsKZ~r|Meq7Hb} zAu;xZK)!(mQ?MpX*L+L)0)6EQQ7vZ^FyGj*AYlb+x|~8pEERG@3L54*j6B6*va6Vg zSnZd&b7QH}7*Twy8i3Kvx5)*%q6`ZbT0@}uWzb0E6NfADH%z>e;>^r(!ox3K;$2;& zYv0m38^=%-{{Z1Grq{*Av8J@g02Sg`Syz*UpeMwrqLckIQWPws3W+Hi^v5Y%c3>L2 zI)>F1U%DHHOfld;*pIsWv$7U^zw%xEsywX_4~IlcTet-e%n;y>&^*g=@J2h-WNk8q z2Xh$Dn~b{wUkiazk+2ph5FaW0lxG&RDytC$ZI2@X+;?o$R~V0Kgr_y17D2!TW=A-c z-wv|~ed=Va7Y(&I)M8MSv68yDt83JDS1`5L{z?ursDZ_CDuXCDH#7y~h)gz0sZk5U zL1tAlh~duVfW)HUi)}H~6DSf8YbFgq{M@RPRr1P!<A6!_0T2$C!jJ zt|T4Idk{d+=40{Uxo841T*WkU#Zu^Q50o$Q8lhV16%f(0+5W}R!9XDez989u#Hv#% zM}k;*qj0Sp+3NoQ`6}o_Upv)I`Tfe=wZz0k?+`KQn3Jr`D-fu*>7OgHDtOpPr54Z;1LclkeXQE&q`*BzeIABK9NHMEs85XW313u>X zaBc1*mb@{6KA{!`OdYV9+vi7-NKC8A77xS*?sz(kJ<75F0DstnalbGDQL;b{=@dku zvb%=?f5^di{gUhEej})(uMm~8CZ!mwi|(OVs~=$M;~(D=yUjq?mTp`|q5Flb;-yi# z-VCE4#1Qy1>_6F0nm+#k_=3*JN>-VCz}uJNB^x4zkP~P?K3RG1_iYC)`!5pEH#>^DGB!8$CcWzUpyK;wwtTQF8i-5LJD|Rz9L?T-+GCJVv*7 z#9nBRKt#J0DJM&xnIhWJ+5?R6>Ruxlm&28wp3btS!?HQ5yOc z7(6WYCH9}0gXwf%1SO@6dO?ih6m48bNUWR-FZ1SFoYJ`kU%%ueH2q2ghb4ZW@>X(! z?jRX6EtT$R7$F`Y1p@rTi=qXT>+>A7+-dtvB7DRV;HS6w1stRMoenWhXbcaPRIYs{$nHwp?2cp7r`mJ#qH*vk`}SKMc^3pp0$j$fD{yS^e)>Q=CMlni=} zb&Ii-QzEcSKGgGo{{>0J1hjpcZ*xG&gNT#n_g>FPCS9wtpucCaR) zAX|YKha*)h3fCT-MO_v95ZrNp*Z%-up%>J`Awp7f<{-8Bgb2FjjLhP=;s*@(FCWqY z`-aiGSwz>Uf*rwr+aGEOw^vQW6zb)stL=caX3bUoG4MFV0X(ou7fAJ3C&V%3*}k{M zA9BV8Q}-2*kt$YO?sCLI!^eoBX=inqYeHgB(C%6zThtKE2U5B<6T2CjTr6w_2|h?7 zM(!}0f2hYU`+|dSh!nPbK@Tn=EH~<2-{psL7vf=LYecMDUmAlR44=RTSJY_C%Ux29 ze8NNOBe(h>u(Q_8+Z+BmjE%jY#05A(PaYxzWd8u467q2GU>f!L%3R-w+jWD8F+d!x z1gt9DkZc3HO-pAy)|^znv?3nrtiNcb?1S|H3qB!bSiMahoFo~;PTw(QWyNSeGmepa zV+0?VNMq&(37#<*3cKe20Q`y_b{`aeNc@4HFtw#+9xp64#Z7jA=%%sFzzH%|QH}|8 zM~Qdrk`A_6yc{nUxQ&dIH&X-7H|ABI2kw3HWEF6frRSzPj)VzCmK%|;OwPH#a}Xta zjbu^a;x)ptx!SD@Y?XXmOVb$W?1DG{02mtiGRq>Cca^`#ru@fV1j3QdJp3{ z%t!p3Of3-mDqkgl^zYJr;Uf?PW$)uH(? z7eiskvI-7nmPo^9Aqvi$ji3-`hFJ0o?jGyRT5~Yldy1;csid<^nc^S@&(wC{@iC!p z6ru9&A*Ek3hKPm_8YR~o-OGKR^2T07-!ipgzbun|pnyKSUo<@+PH{WP6s|OEIVMGgSJEbn}^CjHhscj61}2 z79C;@8)rql%IPTXTDpu*fcrH3!8ikD_YUXD$mm0suxOI))uoe`%enC7+3eu5fv{oGL06qPc`|rUu37TAGDBWo+2<8oO09Y4e$A z$(B(mDdFxkdgdjtYe`U!S92u?wlUY6l@vRfp5YwO?%+b2`I!pU#yhT0Daz0qBeA|< zFTUbYuq_^m8iule9hP-2ys+EOT5ib7#T^5+_Lch73c&C`LO94el_C6=e%VglvkmJh zMlsH+4FEO40)~Y)y#338Hhrh#wQ5;f7q{9Nfkhmxo|c0C|Bw-vv! z(?ED?C3*;KZpD3mSfCJ9z0Hz7;#nDco+5}N@i#(wV@-=%Hp{E&@b&ZNIka12s13)7 znHQHYiw~H==ZNT`5bF0TOoH?x$s$FEMQQh|l zh|_tNYVKeHzM(^>Qph|*Xwp9^0+R~?>I?6{L|BnDmi`FIbg%vUl@koh!E*p5>VA?h z=HJXV!&f#b`>4^QWqj1dTr&lBfoV6^CEN`63>mtPdwQCGQD`6<%J_&~IH+h!1$#?@ zaq0^$uu5&O#3NUT7H0+GQgaZ8Szr$iB}%3u>NRW1#2(Z>WB0dqvG?ZP`MH?5bu&7T zjTkv%qPsU75+2~TO5zrk99N^L>nrGosYA?GL#J}k&3w|=-LNU>l{Z!TBdjR>WI$Da zx>F2l{0RGwBH-r{>^J5fT=R%fR^hlFE*>Gl0Sha-g+OxvATwBV)S(v`hMp)F*o09X zqxTkI?EYs4I1g9*0!3bCFmSm@YgcF*0Q5yLs~L}*D14vn<34i{*y>lNxfxY?7#MFS zaRIk{MWn6HLs58T_c<#&m|h^Xdn2ZzqVZ7y)@8XZT#USLK4+0|V%9jhLWtIcr66JR zk1fSTbuxr4lr08&vJx-mYUQJq>OKR2cqKijpo&&B&ps9SptD<#d)S`t4QO5E-##r7Z_oT>nOn^V9hUZd0m{p21o4`Pb zaIP^lB>+MP08H7rplmsdxL@!RpZ3T7%`IK7E>o3Oe(cD zw~3cKt|L_AFtPkc%lVWz-bqzQSzuaLA(I`BxXjq5T85Ze78{hg@Wt(Be24!4AT7wb z=AYzTDzSX94ueJDlxs7#0i;e?y2x}e8}{HiQc;vVw!2oKCE$y9MmRF^}a{RysS-^&QGd5&#r9!e86E6P~Ton@DwA)j&I@QHS_%N)p!S5q-{ z6Cf|cQH{3=6r=zPFe?a@&1%!w)6YJ0ToRj>WH6$ zW;utp%T_(cfeXU4#xfxik+NuE8}}DImA0V>IoxGztjk5=s@w^%R$vYT)TXzKxSz5k zSzvYQKkXN{jl-c>*5%^w+)7phs3a+)#%hR@P#YJivS8(_6tMRyhK7`W#CScV3jYAq zIa#SEK)!Pc$)iQ73$Jl#0M+}59_d%Po4hNttz4>hmuoL5tag@k<(CX$hL?E<5!E;#FKkZ1Tt!7Ihyvyw1cvkpJA+aM$=l1s zKwlskZt{5`?QVEtw*LV5>LOeEU*s6^y9N8iDNF9p>pJ4D2huS$_Fxu=!4ZrmFkjRu zL&<-U8n>VP%%G1S5(aa}1yg*3olv_6IP|{JD z2-ByFgRqrcz@;k8P`s5bRo|(OPBjpQGnCl`afeXID6fFAH>ed6*Y@H#UaEGldXG=m z%6JFU{zR~EL;nCG;nqN-{;<9Ree z(B1PIg{O|-)SzT@X-N`zr3GKU-|P)PEB%yD+#U3#3crn~*$8d0SKM_TI7BD_c~9)KX&A!)0A>6K z$NNXx*2_;XGlP#2Ww&vw-^^EA@=J~<{9{7S9CL+4_TWXNaYD3lRx^D?GQ%GC;$WVoOd2OL<%-Uuw#y*6=Me_h%mtsgJw`+})}jt0cTu8@Q7XJZ zb#IwQ@<#^^?&Bew^95!e>IX*oq6xr@4cpW)Wls>qILb^0%F9&)?IBz?v_kN2JW3G7 z7czvF*AYehr{T*{T)Hq3w$h`TmO5MNDjKZmfZ$q~d~p#s%vx?Id6Hv_!J!JJ$g(xzDF z;xGo^GMGyx_|e39Wjw@I_VFr6&|)`>dY*8o?N+WVTg%ZEYmS5iLGXfbRyd6+svTBa zOCgr%<^@hz7;hT7fQ4O-bx_J>>J0;NU@yhRL}`x_#h{S}@d}2icGqw~NF7I>;q0r) z0vIjcAcnQ>DlIhlVCi272WX)@?r$#RQ!OzJULb_(qMtu7(@)`)8LNp(HfkjjQ2OPB z)o7Feh{a(uTZm#nS=Ey!p*v+3H8m2+MJ8;UE+Nw808|99jtQT{pavpU)HNuOLuTPZ z;;yUa1(zZ%tV~;Fy2=Zox0!am>H|gQX4lL#a+d*+tw6z}_c$0~N?>;=qHkFv8zGtv zSBas?dd$_R?Q8KYD!}K|#N4^P@PtOV4-st(q9JqZF-g5KVWBP-uP``c8YS$75ma7b ze_myk_qk%6oy-O814q;c4Ma1xV*X;2AUfPuWPyH?oNl?fZk8BwY=oxp!MQ`!8$h{_ zK46`~$8c*m@fxF-xs(G0p;GDwPS}OyeL%E*W+t3o)rCPHwpmvZ#>Z@;6~1Nzg~xDP zF^=Lm^X4rgTvb2^kc<-bAA>oTt93J9xD*v++_mkEJA7&jHu#E$Qn4@qspbgrnM&F2 zUgxowLp_liP&F2X!2!FOVsnQsqx5)UYR8FX-s5;pht6QsXlTS6VQoU(eN1XSiR6bXlQ9Bua>w}>EU9br zD`s**2Yl2Lo3(g>*nLbi<=kmipAd>$wgqh2x|DEjy+omZGes@ql4f27jx~Z&Q)xoB z*YOqSk22dq9wE%jk~ZHQ@f89NHB!-K4xlDR$O7jlnSpm?vv;UfQTUHWSY>3Pw5*t! zoR<+aG5U|y#5)DSjhwVgctepC;*D<+2A6#?O0vD8#xW2vN#a$_mo_z>O-r$|^Jch1#t6C4qQ?!yaWvH5_ZXymV?Jp+>pA zOC25=cJFgbaNMOS^(=`+^g^x=h-)|vTuzs9SU+*BR%&YCmq@y(5a%!{&SO*@9KaU% zg0BM+e6exaLGA&#jpw-JhKhb5&rYrlTu5`SCF%DuPGZvLS1t%pY{^-cyY3WsWX0P2 z!D{hy4d9d75iU7auTfhP0JB&GaV)VjVqOqZ`STG<<(4@zp-weSThE)L@ z6{aeR{GqS{j!Kr;Q5D*03&ai|sYNqk$5Rd^Vi^Z~M!OKqr34BMa|JQ-%1oWW61R*; z4=m(dRc2()eZ^ax6BW6Q8F=l5mDh;7)yvmWbp9rBe{d1GUVRW|8t}jiGu#uy%sb}) z0LfOK7{%?0b}bNK^ty?)xW`GvY>nflCuB4|OJd0wT&flX<^`m2k!Sw^gT%lqGS-y^ zYI>ef7in;I*O(Hi#IAq1mq7A+i7Txt2#4RLH*pm8}5#vb~)zWbm%?IKcM~@Qb>m*?Z za@XHcam+Z$8_WZeQ(Kp&6G?!;2(Dry#-ZihwMNsZ6n!%t;ObSKOlh=Zrug$P8^04^ z-*U?>*8~ephVwRZc!rjqWkqhfjVX63mmcDua=SMzDXXbU5gXuwvy_0a)xpCivkEJG z#5GsMG$F<(Ie;mfW+c44PEATJ`;c%iICpVw|l(6>Rz- zu5})~N2DmPxCkSd+2?UHdVIjycRnI5+-4lYU`@csP(^n#8FY>7e89Hiv52CG1VNVR z)Gf!)Fw3jI5kpMAFxrnRrM%v zyxgQ=`k62(gA3|XHTasjJx3BCk;D_ZYQ=KW#jQ=XA5nBM-9b)A>M!|Jvr&kn2|N5vVQ?PwXx>Ii~6RntwC)8+SGA<6IOo~lnG4T=e3R@xv+*z=v{{YP=|Jf8r2(17B diff --git a/raw-assets/public/thavma.png b/raw-assets/public/thavma.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7c9ad07b3acb9b8fd41bdd77ced28f25d86013 GIT binary patch literal 303540 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

g2gi3tlM0ZFo2=j_`Ax{tBCI^vOj4bh36;YSx4 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 Date: Tue, 2 Dec 2025 15:11:08 +0200 Subject: [PATCH 08/40] relations map --- .../client/gui/research_table/SocketWidget.kt | 4 +-- .../thavma/impl/common/aspect/Aspect.kt | 26 ++++++++++++++----- .../impl/common/research/ResearchState.kt | 10 +++---- .../thavma/impl/common/scanning/ScanHelper.kt | 6 ++--- .../thavma/impl/init/registries/T7DataMaps.kt | 13 ++++++++++ .../impl/init/registries/T7Registries.kt | 3 ++- 6 files changed, 43 insertions(+), 19 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt b/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt index 385395d9..27ca2be4 100644 --- a/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt +++ b/src/main/java/me/alegian/thavma/impl/client/gui/research_table/SocketWidget.kt @@ -6,6 +6,7 @@ import me.alegian.thavma.impl.client.renderer.AspectRenderer import me.alegian.thavma.impl.client.texture.Texture import me.alegian.thavma.impl.client.util.* import me.alegian.thavma.impl.common.aspect.Aspect +import me.alegian.thavma.impl.common.aspect.relatedTo import me.alegian.thavma.impl.common.payload.SocketStatePayload import me.alegian.thavma.impl.common.research.SocketState import me.alegian.thavma.impl.common.util.Indices @@ -78,8 +79,7 @@ class SocketWidget(val position: Vec2, private val indices: Indices, private val private fun renderConnections(aspect: Aspect, guiGraphics: GuiGraphics) { for (neighborIdx in indices.axial.axialNeighbors) { val neighbor = screen.socketWidgets[neighborIdx] ?: continue - // TODO: think of some other logic here - //if (neighbor.state.aspect?.components?.map { it.get() }?.contains(aspect) != true) continue + if (neighbor.state.aspect?.wrapAsHolder()?.relatedTo(aspect.wrapAsHolder()) != true) continue val dx = neighbor.position.x - position.x val dy = neighbor.position.y - position.y val angleDegrees = atan2(dy, dx) * 180 / Math.PI diff --git a/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt b/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt index 6881d881..02364379 100644 --- a/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt +++ b/src/main/java/me/alegian/thavma/impl/common/aspect/Aspect.kt @@ -1,24 +1,36 @@ package me.alegian.thavma.impl.common.aspect -import me.alegian.thavma.impl.init.registries.T7Registries.ASPECT +import me.alegian.thavma.impl.init.registries.T7DataMaps +import me.alegian.thavma.impl.init.registries.T7Registries import net.minecraft.Util +import net.minecraft.core.Holder import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.resources.ResourceLocation -class Aspect(var id: String, var color: Int, val isPrimal: Boolean){ +class Aspect(var id: String, var color: Int, val isPrimal: Boolean) { val translationId by lazy { - Util.makeDescriptionId(ASPECT.key().location().path, ASPECT.getKey(this)) + Util.makeDescriptionId(T7Registries.ASPECT.key().location().path, T7Registries.ASPECT.getKey(this)) } val resourceKey - get() = ASPECT.getResourceKey(this).get() + get() = T7Registries.ASPECT.getResourceKey(this).get() companion object { val STREAM_CODEC = ByteBufCodecs.STRING_UTF8.map( - { s -> ASPECT[ResourceLocation.parse(s)]!! }, - { a -> ASPECT.getKey(a).toString() } + { s -> T7Registries.ASPECT[ResourceLocation.parse(s)]!! }, + { a -> T7Registries.ASPECT.getKey(a).toString() } ) - val CODEC = ASPECT.byNameCodec() + val CODEC = T7Registries.ASPECT.byNameCodec() } fun defaultStack() = AspectStack.of(this, 1) + + fun wrapAsHolder() = T7Registries.ASPECT.wrapAsHolder(this) } + +fun Holder.relatedAspects() = + getData(T7DataMaps.ASPECT_RELATIONS) ?: listOf() + +fun Holder.relatedTo(other: Holder) = + this.relatedAspects().contains(other.value()) || + other.relatedAspects().contains(this.value()) + diff --git a/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt b/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt index 774c5226..eab344fd 100644 --- a/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt +++ b/src/main/java/me/alegian/thavma/impl/common/research/ResearchState.kt @@ -2,6 +2,7 @@ package me.alegian.thavma.impl.common.research import com.mojang.serialization.Codec import com.mojang.serialization.codecs.RecordCodecBuilder +import me.alegian.thavma.impl.common.aspect.relatedTo import me.alegian.thavma.impl.common.util.Indices import me.alegian.thavma.impl.init.registries.T7DatapackRegistries import net.minecraft.core.Holder @@ -72,12 +73,9 @@ private fun calculateCompleted(defaultStates: List, socketStates: M for (neighborIdx in idx.axialNeighbors) { if (explored.contains(neighborIdx)) continue - // TODO: think of some other logic here -// val neighbor = graph[neighborIdx] ?: continue -// val neighborAspect = neighbor.aspect ?: continue -// val connected = currAspect.components.map { it.get() }.contains(neighborAspect) -// || neighborAspect.components.map { it.get() }.contains(currAspect) -// if (!connected) continue + val neighbor = graph[neighborIdx] ?: continue + val neighborAspect = neighbor.aspect ?: continue + if (!currAspect.wrapAsHolder().relatedTo(neighborAspect.wrapAsHolder())) continue connections.add(neighborIdx) toExplore.add(neighborIdx) diff --git a/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt b/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt index 7948a699..bee8742f 100644 --- a/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt @@ -3,6 +3,7 @@ package me.alegian.thavma.impl.common.scanning import com.google.common.primitives.Doubles.max import me.alegian.thavma.impl.common.aspect.AspectHelper import me.alegian.thavma.impl.common.aspect.AspectMap +import me.alegian.thavma.impl.common.aspect.relatedAspects import me.alegian.thavma.impl.common.entity.addKnowledge import me.alegian.thavma.impl.common.entity.knowsAspect import me.alegian.thavma.impl.common.payload.ScanResultPayload @@ -47,9 +48,8 @@ private fun ServerPlayer.tryScan(key: ResourceKey<*>, aspectMap: AspectMap?) { else if (hasScanned(key)) scanResult = ScanResult.SUCCESS else { val aspects = aspectMap.map { it.aspect } - // TODO: think of some other logic here -// if (aspects.flatMap { it.components }.any { !knowsAspect(it.get()) }) scanResult = ScanResult.LOCKED -// else + if (aspects.any { it.wrapAsHolder().relatedAspects().none { !knowsAspect(it) } }) scanResult = ScanResult.LOCKED + else addKnowledge( aspects .filter { !knowsAspect(it) } diff --git a/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt b/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt index 1d1957f9..6b798920 100644 --- a/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt +++ b/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt @@ -1,9 +1,12 @@ package me.alegian.thavma.impl.init.registries +import me.alegian.thavma.impl.common.aspect.Aspect import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.rl import net.minecraft.core.registries.Registries +import net.neoforged.neoforge.registries.datamaps.AdvancedDataMapType import net.neoforged.neoforge.registries.datamaps.DataMapType +import net.neoforged.neoforge.registries.datamaps.DataMapValueMerger object T7DataMaps { object AspectContent { @@ -25,4 +28,14 @@ object T7DataMaps { .synced(AspectMap.CODEC, true) .build() } + + val ASPECT_RELATIONS = AdvancedDataMapType + .builder( + rl("aspect_relations"), + T7Registries.ASPECT_KEY, + Aspect.CODEC.listOf() + ) + .synced(Aspect.CODEC.listOf(), true) + .merger(DataMapValueMerger.listMerger()) + .build() } diff --git a/src/main/java/me/alegian/thavma/impl/init/registries/T7Registries.kt b/src/main/java/me/alegian/thavma/impl/init/registries/T7Registries.kt index c5aa3556..74aac755 100644 --- a/src/main/java/me/alegian/thavma/impl/init/registries/T7Registries.kt +++ b/src/main/java/me/alegian/thavma/impl/init/registries/T7Registries.kt @@ -17,7 +17,8 @@ object T7Registries { .maxId(Int.MAX_VALUE) .create() - val ASPECT = RegistryBuilder(ResourceKey.createRegistryKey(rl("aspect"))) + val ASPECT_KEY = ResourceKey.createRegistryKey(rl("aspect")) + val ASPECT = RegistryBuilder(ASPECT_KEY) .maxId(Int.MAX_VALUE) .create() From ba4e52b40a17bb1d98133034e421cdc98ad1184e Mon Sep 17 00:00:00 2001 From: alegian Date: Tue, 2 Dec 2025 17:14:19 +0200 Subject: [PATCH 09/40] relations datamap --- .../thavma/aspect/aspect_relations.json | 63 +++++++++++++++++++ .../init/data/providers/T7DataMapProvider.kt | 1 + .../data/providers/aspects/AspectRelations.kt | 40 ++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json create mode 100644 src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt diff --git a/src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json b/src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json new file mode 100644 index 00000000..81a85e67 --- /dev/null +++ b/src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json @@ -0,0 +1,63 @@ +{ + "values": { + "thavma:aether": [ + "thavma:alkimia", + "thavma:cognitio", + "thavma:tenebrae" + ], + "thavma:alkimia": [], + "thavma:aqua": [ + "thavma:herba", + "thavma:victus", + "thavma:alkimia" + ], + "thavma:civilis": [], + "thavma:cognitio": [ + "thavma:civilis" + ], + "thavma:corpus": [], + "thavma:fabrico": [ + "thavma:cognitio", + "thavma:vas", + "thavma:ornatus" + ], + "thavma:herba": [], + "thavma:hostilis": [], + "thavma:ignis": [ + "thavma:metallum", + "thavma:lux" + ], + "thavma:instrumentum": [ + "thavma:fabrico", + "thavma:machina" + ], + "thavma:lux": [], + "thavma:machina": [], + "thavma:metallum": [ + "thavma:metallum", + "thavma:praemunio" + ], + "thavma:ornatus": [ + "thavma:civilis" + ], + "thavma:praemunio": [], + "thavma:tenebrae": [], + "thavma:terra": [ + "thavma:vitreus", + "thavma:metallum", + "thavma:herba", + "thavma:victus" + ], + "thavma:vas": [], + "thavma:victus": [ + "thavma:hostilis", + "thavma:civilis", + "thavma:corpus" + ], + "thavma:vitreus": [ + "thavma:ornatus", + "thavma:instrumentum", + "thavma:praemunio" + ] + } +} \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt index c41b8be1..e77df3ec 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt @@ -29,6 +29,7 @@ import java.util.function.Supplier class T7DataMapProvider(packOutput: PackOutput, lookupProvider: CompletableFuture) : DataMapProvider(packOutput, lookupProvider) { override fun gather(lookupProvider: HolderLookup.Provider) { + AspectRelations.gather(this) EntityAspects.gather(this, lookupProvider) MineralAspects.gather(this, lookupProvider) ToolAspects.gather(this, lookupProvider) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt new file mode 100644 index 00000000..b5aa03bc --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt @@ -0,0 +1,40 @@ +package me.alegian.thavma.impl.init.data.providers.aspects + +import me.alegian.thavma.impl.common.aspect.Aspect +import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider +import me.alegian.thavma.impl.init.registries.T7DataMaps +import me.alegian.thavma.impl.init.registries.deferred.Aspects +import net.minecraft.core.Holder +import net.neoforged.neoforge.common.data.DataMapProvider + +object AspectRelations { + fun gather(datamapProvider: T7DataMapProvider) = + datamapProvider.builder(T7DataMaps.ASPECT_RELATIONS).run { + add(Aspects.TERRA, listOf(Aspects.VITREUS, Aspects.METALLUM, Aspects.HERBA, Aspects.VICTUS)) + add(Aspects.IGNIS, listOf(Aspects.METALLUM, Aspects.LUX)) + add(Aspects.AQUA, listOf(Aspects.HERBA, Aspects.VICTUS, Aspects.ALKIMIA)) + add(Aspects.AETHER, listOf(Aspects.ALKIMIA, Aspects.COGNITIO, Aspects.TENEBRAE)) + + add(Aspects.LUX, listOf()) + add(Aspects.VITREUS, listOf(Aspects.ORNATUS, Aspects.INSTRUMENTUM, Aspects.PRAEMUNIO)) + add(Aspects.METALLUM, listOf(Aspects.METALLUM, Aspects.PRAEMUNIO)) + add(Aspects.VICTUS, listOf(Aspects.HOSTILIS, Aspects.CIVILIS, Aspects.CORPUS)) + add(Aspects.HERBA, listOf()) + + add(Aspects.ALKIMIA, listOf()) + add(Aspects.TENEBRAE, listOf()) + add(Aspects.INSTRUMENTUM, listOf(Aspects.FABRICO, Aspects.MACHINA)) + add(Aspects.FABRICO, listOf(Aspects.COGNITIO, Aspects.VAS, Aspects.ORNATUS)) + add(Aspects.MACHINA, listOf()) + add(Aspects.VAS, listOf()) + add(Aspects.COGNITIO, listOf(Aspects.CIVILIS)) + add(Aspects.ORNATUS, listOf(Aspects.CIVILIS)) + add(Aspects.HOSTILIS, listOf()) + add(Aspects.CORPUS, listOf()) + add(Aspects.PRAEMUNIO, listOf()) + add(Aspects.CIVILIS, listOf()) + } + + private fun DataMapProvider.Builder, Aspect>.add(aspect: Holder, relations: List>) = + add(aspect, relations.map { it.value() }, false) +} \ No newline at end of file From 41c78d7ebc916f2a69398690bedf6ec74e22bf50 Mon Sep 17 00:00:00 2001 From: alegian Date: Tue, 2 Dec 2025 19:02:52 +0200 Subject: [PATCH 10/40] forgor --- .../me/alegian/thavma/impl/common/event/T7CommonModEvents.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt index 11eb77d8..242961e3 100644 --- a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt @@ -74,6 +74,7 @@ private fun registerCapabilities(event: RegisterCapabilitiesEvent) { private fun registerDataMapTypes(event: RegisterDataMapTypesEvent) { event.register(T7DataMaps.AspectContent.ITEM) event.register(T7DataMaps.AspectContent.ENTITY) + event.register(T7DataMaps.ASPECT_RELATIONS) } private fun gatherData(event: GatherDataEvent) { From 12c5deadbfb6b5af3aa5619f65046451641b61b2 Mon Sep 17 00:00:00 2001 From: alegian Date: Wed, 3 Dec 2025 23:33:26 +0200 Subject: [PATCH 11/40] small changes to relations --- .../data_maps/thavma/aspect/aspect_relations.json | 12 ++++++++---- .../init/data/providers/aspects/AspectRelations.kt | 6 +++--- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json b/src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json index 81a85e67..e28c797b 100644 --- a/src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json +++ b/src/generated/resources/data/thavma/data_maps/thavma/aspect/aspect_relations.json @@ -19,7 +19,8 @@ "thavma:fabrico": [ "thavma:cognitio", "thavma:vas", - "thavma:ornatus" + "thavma:ornatus", + "thavma:praemunio" ], "thavma:herba": [], "thavma:hostilis": [], @@ -34,14 +35,17 @@ "thavma:lux": [], "thavma:machina": [], "thavma:metallum": [ - "thavma:metallum", - "thavma:praemunio" + "thavma:instrumentum", + "thavma:praemunio", + "thavma:machina" ], "thavma:ornatus": [ "thavma:civilis" ], "thavma:praemunio": [], - "thavma:tenebrae": [], + "thavma:tenebrae": [ + "thavma:hostilis" + ], "thavma:terra": [ "thavma:vitreus", "thavma:metallum", diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt index b5aa03bc..ed56255e 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectRelations.kt @@ -17,14 +17,14 @@ object AspectRelations { add(Aspects.LUX, listOf()) add(Aspects.VITREUS, listOf(Aspects.ORNATUS, Aspects.INSTRUMENTUM, Aspects.PRAEMUNIO)) - add(Aspects.METALLUM, listOf(Aspects.METALLUM, Aspects.PRAEMUNIO)) + add(Aspects.METALLUM, listOf(Aspects.INSTRUMENTUM, Aspects.PRAEMUNIO, Aspects.MACHINA)) add(Aspects.VICTUS, listOf(Aspects.HOSTILIS, Aspects.CIVILIS, Aspects.CORPUS)) add(Aspects.HERBA, listOf()) add(Aspects.ALKIMIA, listOf()) - add(Aspects.TENEBRAE, listOf()) + add(Aspects.TENEBRAE, listOf(Aspects.HOSTILIS)) add(Aspects.INSTRUMENTUM, listOf(Aspects.FABRICO, Aspects.MACHINA)) - add(Aspects.FABRICO, listOf(Aspects.COGNITIO, Aspects.VAS, Aspects.ORNATUS)) + add(Aspects.FABRICO, listOf(Aspects.COGNITIO, Aspects.VAS, Aspects.ORNATUS, Aspects.PRAEMUNIO)) add(Aspects.MACHINA, listOf()) add(Aspects.VAS, listOf()) add(Aspects.COGNITIO, listOf(Aspects.CIVILIS)) From a29fc99d5cd2e77e8420190b6c6715d36091d851 Mon Sep 17 00:00:00 2001 From: alegian Date: Wed, 7 Jan 2026 22:56:07 +0200 Subject: [PATCH 12/40] bump NG --- build.gradle | 2 +- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index facff986..2a03fc20 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ plugins { id 'eclipse' id 'idea' id 'maven-publish' - id 'net.neoforged.gradle.userdev' version '7.0.192' + id 'net.neoforged.gradle.userdev' version '7.1.20' id 'org.jetbrains.kotlin.jvm' version "${kotlin_version}" } diff --git a/gradle.properties b/gradle.properties index a2dec444..fe7e7735 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ neogradle.subsystems.parchment.mappingsVersion=2024.11.17 #### minecraft_version=1.21.1 use_runtime_optional_deps=true -neo_version=21.1.216 +neo_version=21.1.217 kff_version=5.10.0 jei_version=19.25.1.332 emi_version=1.1.22+1.21.1 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d4081da4..23449a2b 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.14.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 4e98551595973344a8dddd8f721262990d7f220f Mon Sep 17 00:00:00 2001 From: alegian Date: Thu, 8 Jan 2026 15:22:16 +0200 Subject: [PATCH 13/40] start fixing datagen --- .../thavma/data_maps/item/aspect_content.json | 8 +- .../thavma/impl/common/aspect/AspectMap.kt | 9 +- .../data/providers/aspects/MineralAspects.kt | 156 ++++++++++-------- 3 files changed, 100 insertions(+), 73 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index ffdc4438..821bba5d 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -92,11 +92,11 @@ }, "#c:ores/coal": { "thavma:ignis": 2, - "thavma:terra": 2 + "thavma:terra": 4 }, "#c:ores/copper": { "thavma:metallum": 4, - "thavma:terra": 4 + "thavma:terra": 2 }, "#c:ores/diamond": { "thavma:terra": 4, @@ -108,11 +108,11 @@ }, "#c:ores/gold": { "thavma:metallum": 4, - "thavma:terra": 4 + "thavma:terra": 2 }, "#c:ores/iron": { "thavma:metallum": 8, - "thavma:terra": 4 + "thavma:terra": 2 }, "#c:ores/lapis": { "thavma:cognitio": 1, diff --git a/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt b/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt index 8d83be9b..9c1fa757 100644 --- a/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt +++ b/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt @@ -2,11 +2,14 @@ package me.alegian.thavma.impl.common.aspect import com.mojang.serialization.Codec import me.alegian.thavma.impl.init.registries.deferred.Aspects.DATAGEN_PRIMALS +import net.minecraft.core.Holder import net.minecraft.network.codec.ByteBufCodecs import net.minecraft.network.codec.StreamCodec import java.util.* import java.util.function.Consumer import java.util.function.Supplier +import kotlin.math.round +import kotlin.math.roundToInt /** * Immutable. @@ -33,6 +36,8 @@ class AspectMap(map: Map = LinkedHashMap()) : Iterable return builder().copyOf(this).add(aspect, amount).build() } + fun add(aspectHolder: Holder, amount: Int) = add(aspectHolder.value(), amount) + fun add(other: AspectMap): AspectMap { val builder = builder().copyOf(this) other.forEach(Consumer { aspectStack: AspectStack -> builder.add(aspectStack) }) @@ -43,6 +48,8 @@ class AspectMap(map: Map = LinkedHashMap()) : Iterable return builder().copyOf(this).subtract(aspect, amount).build() } + fun subtract(aspectHolder: Holder, amount: Int) = subtract(aspectHolder.value(), amount) + fun subtract(other: AspectMap): AspectMap { val builder = builder().copyOf(this) other.forEach(Consumer { aspectStack: AspectStack -> builder.subtract(aspectStack) }) @@ -139,7 +146,7 @@ class AspectMap(map: Map = LinkedHashMap()) : Iterable } fun scale(multiplier: Number): Builder { - map.forEach { (k: Aspect, v: Int) -> map[k] = (v * multiplier.toDouble()).toInt() } + map.forEach { (k: Aspect, v: Int) -> map[k] = round(v * multiplier.toDouble()).toInt() } map = LinkedHashMap(map.filterValues { it > 0 }) return this } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt index e88109d9..74c92fde 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt @@ -1,5 +1,6 @@ package me.alegian.thavma.impl.init.data.providers.aspects +import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps @@ -10,44 +11,71 @@ import me.alegian.thavma.impl.init.registries.deferred.T7Blocks.INFUSED_STONES import me.alegian.thavma.impl.init.registries.deferred.T7Items import me.alegian.thavma.impl.init.registries.deferred.T7Items.SHARDS import net.minecraft.core.HolderLookup +import net.minecraft.resources.ResourceKey import net.minecraft.tags.ItemTags +import net.minecraft.tags.TagKey import net.minecraft.world.item.Items import net.minecraft.world.level.block.Blocks import net.neoforged.neoforge.common.Tags +import net.neoforged.neoforge.common.data.DataMapProvider +import java.util.function.UnaryOperator object MineralAspects { + val coal = AspectGen().mutate { + it.add(Aspects.IGNIS, 2) + .add(Aspects.TERRA, 2) + } + val coalOre = coal.mutate(Mutations.ORE) + val coalBlock = coal.mutate(Mutations.STORAGE_BLOCK_9) + + val copper = AspectGen().mutate { + it.add(Aspects.METALLUM, 4) + } + val rawCopper = copper.mutate(Mutations.RAW) + val copperOre = copper.mutate(Mutations.ORE) + val copperBlock = copper.mutate(Mutations.STORAGE_BLOCK_9) + val rawCopperBlock = rawCopper.mutate(Mutations.STORAGE_BLOCK_9) + + val iron = AspectGen().mutate { + it.add(Aspects.METALLUM, 8) + } + val rawIron = iron.mutate(Mutations.RAW) + val ironOre = iron.mutate(Mutations.ORE) + val ironBlock = iron.mutate(Mutations.STORAGE_BLOCK_9) + val rawIronBlock = rawIron.mutate(Mutations.STORAGE_BLOCK_9) + + val gold = AspectGen().mutate { + it.add(Aspects.METALLUM, 4) + } + val rawGold = gold.mutate(Mutations.RAW) + val goldOre = gold.mutate(Mutations.ORE) + val goldBlock = gold.mutate(Mutations.STORAGE_BLOCK_9) + val rawGoldBlock = rawGold.mutate(Mutations.STORAGE_BLOCK_9) + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { - item(Tags.Items.ORES_COAL) { - it.add(Aspects.IGNIS, 2) - .add(Aspects.TERRA, 2) - } - item(Tags.Items.STORAGE_BLOCKS_COAL) { - it.add(Aspects.IGNIS, 18) - .add(Aspects.TERRA, 18) - } - item(Tags.Items.ORES_COPPER) { - it.add(Aspects.METALLUM, 4) - .add(Aspects.TERRA, 4) - } - item(Tags.Items.STORAGE_BLOCKS_RAW_COPPER) { - it.add(Aspects.METALLUM, 18) - .add(Aspects.TERRA, 18) - } - item(Tags.Items.STORAGE_BLOCKS_COPPER) { - it.add(Aspects.METALLUM, 36) - } - item(Tags.Items.ORES_IRON) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.TERRA, 4) - } - item(Tags.Items.STORAGE_BLOCKS_RAW_IRON) { - it.add(Aspects.METALLUM, 36) - .add(Aspects.TERRA, 18) - } - item(Tags.Items.STORAGE_BLOCKS_IRON) { - it.add(Aspects.METALLUM, 72) - } + coal.save(this, ItemTags.COALS) + coalOre.save(this, Tags.Items.ORES_COAL) + coalBlock.save(this, Tags.Items.STORAGE_BLOCKS_COAL) + + copper.save(this, Tags.Items.INGOTS_COPPER) + rawCopper.save(this, Tags.Items.RAW_MATERIALS_COPPER) + copperOre.save(this, Tags.Items.ORES_COPPER) + copperBlock.save(this, Tags.Items.STORAGE_BLOCKS_COPPER) + rawCopperBlock.save(this, Tags.Items.STORAGE_BLOCKS_RAW_COPPER) + + iron.save(this, Tags.Items.INGOTS_IRON) + rawIron.save(this, Tags.Items.RAW_MATERIALS_IRON) + ironOre.save(this, Tags.Items.ORES_IRON) + ironBlock.save(this, Tags.Items.STORAGE_BLOCKS_IRON) + rawIronBlock.save(this, Tags.Items.STORAGE_BLOCKS_RAW_IRON) + + gold.save(this, Tags.Items.INGOTS_GOLD) + rawGold.save(this, Tags.Items.RAW_MATERIALS_GOLD) + goldOre.save(this, Tags.Items.ORES_GOLD) + goldBlock.save(this, Tags.Items.STORAGE_BLOCKS_GOLD) + rawGoldBlock.save(this, Tags.Items.STORAGE_BLOCKS_RAW_GOLD) + item(T7Blocks.THAVMITE_BLOCK) { it.add(Aspects.METALLUM, 72) .add(Aspects.AETHER, 36) @@ -56,17 +84,6 @@ object MineralAspects { it.add(Aspects.METALLUM, 36) .add(Aspects.AETHER, 36) } - item(Tags.Items.ORES_GOLD) { - it.add(Aspects.METALLUM, 4) - .add(Aspects.TERRA, 4) - } - item(Tags.Items.STORAGE_BLOCKS_RAW_GOLD) { - it.add(Aspects.METALLUM, 18) - .add(Aspects.TERRA, 18) - } - item(Tags.Items.STORAGE_BLOCKS_GOLD) { - it.add(Aspects.METALLUM, 36) - } item(Tags.Items.ORES_DIAMOND) { it.add(Aspects.VITREUS, 8) .add(Aspects.TERRA, 4) @@ -129,27 +146,7 @@ object MineralAspects { it.add(infusedBlock.get().getAspect(), 4) } } - } - datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { - item(ItemTags.COALS) { - it.add(Aspects.IGNIS, 2) - it.add(Aspects.TERRA, 2) - } - item(Tags.Items.RAW_MATERIALS_COPPER) { - it.add(Aspects.METALLUM, 2) - .add(Aspects.TERRA, 2) - } - item(Tags.Items.INGOTS_COPPER) { - it.add(Aspects.METALLUM, 4) - } - item(Tags.Items.RAW_MATERIALS_IRON) { - it.add(Aspects.METALLUM, 4) - .add(Aspects.TERRA, 2) - } - item(Tags.Items.INGOTS_IRON) { - it.add(Aspects.METALLUM, 8) - } item(T7Items.THAVMITE_INGOT) { it.add(Aspects.METALLUM, 8) .add(Aspects.AETHER, 4) @@ -158,13 +155,6 @@ object MineralAspects { it.add(Aspects.METALLUM, 4) .add(Aspects.INSTRUMENTUM, 4) } - item(Tags.Items.RAW_MATERIALS_GOLD) { - it.add(Aspects.METALLUM, 2) - .add(Aspects.TERRA, 2) - } - item(Tags.Items.INGOTS_GOLD) { - it.add(Aspects.METALLUM, 4) - } item(Tags.Items.GEMS_DIAMOND) { it.add(Aspects.VITREUS, 8) } @@ -211,4 +201,34 @@ object MineralAspects { } } } + + class AspectGen(private var aspects: AspectMap) { + constructor() : this(AspectMap()) + + fun mutate(mutation: UnaryOperator) = + AspectGen(mutation.apply(aspects)) + + fun save(builder: DataMapProvider.Builder, tag: TagKey){ + builder.add(tag, aspects, false) + } + + fun save(builder: DataMapProvider.Builder, key: ResourceKey){ + builder.add(key, aspects, false) + } + } + + object Mutations { + val ORE = { it: AspectMap -> + it.add(Aspects.TERRA, 2) + } + val RAW = { it: AspectMap -> + it.scale(0.5).add(Aspects.TERRA, 2) + } + val STORAGE_BLOCK_4 = { it: AspectMap -> + it.scale(4) + } + val STORAGE_BLOCK_9 = { it: AspectMap -> + it.scale(9) + } + } } \ No newline at end of file From 89726df551fca454676afcfc84157ff2f7812ee9 Mon Sep 17 00:00:00 2001 From: alegian Date: Thu, 8 Jan 2026 16:08:16 +0200 Subject: [PATCH 14/40] do the simple stuff with ai --- .../thavma/data_maps/item/aspect_content.json | 12 +- .../data/providers/aspects/MineralAspects.kt | 183 +++++++++--------- 2 files changed, 101 insertions(+), 94 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 821bba5d..53135678 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -99,11 +99,11 @@ "thavma:terra": 2 }, "#c:ores/diamond": { - "thavma:terra": 4, + "thavma:terra": 2, "thavma:vitreus": 8 }, "#c:ores/emerald": { - "thavma:terra": 4, + "thavma:terra": 2, "thavma:vitreus": 8 }, "#c:ores/gold": { @@ -116,7 +116,7 @@ }, "#c:ores/lapis": { "thavma:cognitio": 1, - "thavma:terra": 4, + "thavma:terra": 2, "thavma:vitreus": 4 }, "#c:ores/netherite_scrap": { @@ -126,12 +126,12 @@ }, "#c:ores/quartz": { "thavma:ignis": 1, - "thavma:terra": 4, + "thavma:terra": 2, "thavma:vitreus": 4 }, "#c:ores/redstone": { "thavma:machina": 1, - "thavma:terra": 1 + "thavma:terra": 3 }, "#c:raw_materials/copper": { "thavma:metallum": 2, @@ -1839,7 +1839,7 @@ "thavma:metallum": 16 }, "thavma:orichalcum_block": { - "thavma:aether": 36, + "thavma:instrumentum": 36, "thavma:metallum": 36 }, "thavma:orichalcum_ingot": { diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt index 74c92fde..25d27a8e 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt @@ -11,10 +11,13 @@ import me.alegian.thavma.impl.init.registries.deferred.T7Blocks.INFUSED_STONES import me.alegian.thavma.impl.init.registries.deferred.T7Items import me.alegian.thavma.impl.init.registries.deferred.T7Items.SHARDS import net.minecraft.core.HolderLookup +import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceKey import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item import net.minecraft.world.item.Items +import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Blocks import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.data.DataMapProvider @@ -52,6 +55,62 @@ object MineralAspects { val goldBlock = gold.mutate(Mutations.STORAGE_BLOCK_9) val rawGoldBlock = rawGold.mutate(Mutations.STORAGE_BLOCK_9) + val thavmite = AspectGen().mutate { + it.add(Aspects.METALLUM, 8) + .add(Aspects.AETHER, 4) + } + val thavmiteBlock = thavmite.mutate(Mutations.STORAGE_BLOCK_9) + + val orichalcum = AspectGen().mutate { + it.add(Aspects.METALLUM, 4) + .add(Aspects.INSTRUMENTUM, 4) + } + val orichalcumBlock = orichalcum.mutate(Mutations.STORAGE_BLOCK_9) + + val diamond = AspectGen().mutate { + it.add(Aspects.VITREUS, 8) + } + val diamondOre = diamond.mutate(Mutations.ORE) + val diamondBlock = diamond.mutate(Mutations.STORAGE_BLOCK_9) + + val emerald = AspectGen().mutate { + it.add(Aspects.VITREUS, 8) + } + val emeraldOre = emerald.mutate(Mutations.ORE) + val emeraldBlock = emerald.mutate(Mutations.STORAGE_BLOCK_9) + + val lapis = AspectGen().mutate { + it.add(Aspects.VITREUS, 4) + .add(Aspects.COGNITIO, 1) + } + val lapisOre = lapis.mutate(Mutations.ORE) + val lapisBlock = lapis.mutate(Mutations.STORAGE_BLOCK_9) + + val amethyst = AspectGen().mutate { + it.add(Aspects.VITREUS, 4) + } + val amethystBlock = amethyst.mutate(Mutations.STORAGE_BLOCK_4) + + val quartz = AspectGen().mutate { + it.add(Aspects.VITREUS, 4) + .add(Aspects.IGNIS, 1) + } + val quartzOre = quartz.mutate(Mutations.ORE) + val quartzBlock = quartz.mutate(Mutations.STORAGE_BLOCK_4) + + val glowstone = AspectGen().mutate { + it.add(Aspects.LUX, 4) + .add(Aspects.TERRA, 1) + } + val glowstoneBlock = glowstone.mutate(Mutations.STORAGE_BLOCK_4) + + val redstone = AspectGen().mutate { + it.add(Aspects.MACHINA, 1) + .add(Aspects.TERRA, 1) + } + val redstoneOre = redstone.mutate(Mutations.ORE) + val redstoneBlock = redstone.mutate(Mutations.STORAGE_BLOCK_9) + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { coal.save(this, ItemTags.COALS) @@ -76,28 +135,38 @@ object MineralAspects { goldBlock.save(this, Tags.Items.STORAGE_BLOCKS_GOLD) rawGoldBlock.save(this, Tags.Items.STORAGE_BLOCKS_RAW_GOLD) - item(T7Blocks.THAVMITE_BLOCK) { - it.add(Aspects.METALLUM, 72) - .add(Aspects.AETHER, 36) - } - item(T7Blocks.ORICHALCUM_BLOCK) { - it.add(Aspects.METALLUM, 36) - .add(Aspects.AETHER, 36) - } - item(Tags.Items.ORES_DIAMOND) { - it.add(Aspects.VITREUS, 8) - .add(Aspects.TERRA, 4) - } - item(Tags.Items.STORAGE_BLOCKS_DIAMOND) { - it.add(Aspects.VITREUS, 72) - } - item(Tags.Items.ORES_EMERALD) { - it.add(Aspects.VITREUS, 8) - .add(Aspects.TERRA, 4) - } - item(Tags.Items.STORAGE_BLOCKS_EMERALD) { - it.add(Aspects.VITREUS, 72) - } + thavmite.save(this, key(T7Items.THAVMITE_INGOT)) + thavmiteBlock.save(this, key(T7Blocks.THAVMITE_BLOCK)) + + orichalcum.save(this, key(T7Items.ORICHALCUM_INGOT)) + orichalcumBlock.save(this, key(T7Blocks.ORICHALCUM_BLOCK)) + + diamond.save(this, Tags.Items.GEMS_DIAMOND) + diamondOre.save(this, Tags.Items.ORES_DIAMOND) + diamondBlock.save(this, Tags.Items.STORAGE_BLOCKS_DIAMOND) + + emerald.save(this, Tags.Items.GEMS_EMERALD) + emeraldOre.save(this, Tags.Items.ORES_EMERALD) + emeraldBlock.save(this, Tags.Items.STORAGE_BLOCKS_EMERALD) + + lapis.save(this, Tags.Items.GEMS_LAPIS) + lapisOre.save(this, Tags.Items.ORES_LAPIS) + lapisBlock.save(this, Tags.Items.STORAGE_BLOCKS_LAPIS) + + amethyst.save(this, Tags.Items.GEMS_AMETHYST) + amethystBlock.save(this, key(Blocks.AMETHYST_BLOCK)) + + quartz.save(this, Tags.Items.GEMS_QUARTZ) + quartzOre.save(this, Tags.Items.ORES_QUARTZ) + quartzBlock.save(this, key(Blocks.QUARTZ_BLOCK)) + + glowstone.save(this, Tags.Items.DUSTS_GLOWSTONE) + glowstoneBlock.save(this, key(Blocks.GLOWSTONE)) + + redstone.save(this, Tags.Items.DUSTS_REDSTONE) + redstoneOre.save(this, Tags.Items.ORES_REDSTONE) + redstoneBlock.save(this, Tags.Items.STORAGE_BLOCKS_REDSTONE) + item(Tags.Items.ORES_NETHERITE_SCRAP) { it.add(Aspects.METALLUM, 2) .add(Aspects.TERRA, 6) @@ -107,39 +176,6 @@ object MineralAspects { it.add(Aspects.METALLUM, 144) .add(Aspects.TENEBRAE, 36) } - item(Blocks.GLOWSTONE) { - it.add(Aspects.LUX, 16) - .add(Aspects.TERRA, 4) - } - item(Tags.Items.ORES_QUARTZ) { - it.add(Aspects.VITREUS, 4) - .add(Aspects.TERRA, 4) - .add(Aspects.IGNIS, 1) - } - item(Blocks.QUARTZ_BLOCK) { - it.add(Aspects.VITREUS, 16) - .add(Aspects.IGNIS, 4) - } - item(Tags.Items.ORES_LAPIS) { - it.add(Aspects.VITREUS, 4) - .add(Aspects.TERRA, 4) - .add(Aspects.COGNITIO, 1) - } - item(Tags.Items.STORAGE_BLOCKS_LAPIS) { - it.add(Aspects.VITREUS, 36) - .add(Aspects.COGNITIO, 9) - } - item(Tags.Items.ORES_REDSTONE) { - it.add(Aspects.MACHINA, 1) - .add(Aspects.TERRA, 1) - } - item(Tags.Items.STORAGE_BLOCKS_REDSTONE) { - it.add(Aspects.MACHINA, 9) - .add(Aspects.TERRA, 9) - } - item(Blocks.AMETHYST_BLOCK) { - it.add(Aspects.VITREUS, 16) - } for (infusedBlock in (INFUSED_STONES.values + INFUSED_DEEPSLATES.values)) { item(infusedBlock) { @@ -147,20 +183,6 @@ object MineralAspects { } } - item(T7Items.THAVMITE_INGOT) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.AETHER, 4) - } - item(T7Items.ORICHALCUM_INGOT) { - it.add(Aspects.METALLUM, 4) - .add(Aspects.INSTRUMENTUM, 4) - } - item(Tags.Items.GEMS_DIAMOND) { - it.add(Aspects.VITREUS, 8) - } - item(Tags.Items.GEMS_EMERALD) { - it.add(Aspects.VITREUS, 8) - } item(Items.NETHERITE_SCRAP) { it.add(Aspects.METALLUM, 2) .add(Aspects.TERRA, 2) @@ -170,25 +192,6 @@ object MineralAspects { it.add(Aspects.METALLUM, 16) .add(Aspects.TENEBRAE, 4) } - item(Tags.Items.DUSTS_GLOWSTONE) { - it.add(Aspects.LUX, 4) - .add(Aspects.TERRA, 1) - } - item(Tags.Items.GEMS_QUARTZ) { - it.add(Aspects.VITREUS, 4) - .add(Aspects.IGNIS, 1) - } - item(Tags.Items.GEMS_LAPIS) { - it.add(Aspects.VITREUS, 4) - .add(Aspects.COGNITIO, 1) - } - item(Tags.Items.DUSTS_REDSTONE) { - it.add(Aspects.MACHINA, 1) - .add(Aspects.TERRA, 1) - } - item(Tags.Items.GEMS_AMETHYST) { - it.add(Aspects.VITREUS, 4) - } for (shard in SHARDS.values) { item(shard) { @@ -217,6 +220,10 @@ object MineralAspects { } } + private fun key(itemLike: ItemLike): ResourceKey { + return BuiltInRegistries.ITEM.getResourceKey(itemLike.asItem()).orElseThrow() + } + object Mutations { val ORE = { it: AspectMap -> it.add(Aspects.TERRA, 2) From 9fd49da91a2ab1c34e21b66b9870d01bcc599c9d Mon Sep 17 00:00:00 2001 From: alegian Date: Thu, 8 Jan 2026 17:00:39 +0200 Subject: [PATCH 15/40] code cleanup --- .../thavma/data_maps/item/aspect_content.json | 2 +- .../thavma/impl/common/item/ItemExtensions.kt | 8 ++ .../thavma/impl/common/scanning/ScanHelper.kt | 12 +- .../init/data/providers/T7DataMapProvider.kt | 9 +- .../providers/aspects/AspectDatagenHelper.kt | 44 +++++++ .../data/providers/aspects/MineralAspects.kt | 109 +++++------------- 6 files changed, 89 insertions(+), 95 deletions(-) create mode 100644 src/main/java/me/alegian/thavma/impl/common/item/ItemExtensions.kt create mode 100644 src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 53135678..d742a7de 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -122,7 +122,7 @@ "#c:ores/netherite_scrap": { "thavma:metallum": 2, "thavma:tenebrae": 1, - "thavma:terra": 6 + "thavma:terra": 4 }, "#c:ores/quartz": { "thavma:ignis": 1, diff --git a/src/main/java/me/alegian/thavma/impl/common/item/ItemExtensions.kt b/src/main/java/me/alegian/thavma/impl/common/item/ItemExtensions.kt new file mode 100644 index 00000000..9d2eb38f --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/common/item/ItemExtensions.kt @@ -0,0 +1,8 @@ +package me.alegian.thavma.impl.common.item + +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.world.level.ItemLike + +val ItemLike.itemResourceKey + get() = BuiltInRegistries.ITEM.getResourceKey(this.asItem()).orElseThrow() + diff --git a/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt b/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt index bee8742f..d63789c5 100644 --- a/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/common/scanning/ScanHelper.kt @@ -6,6 +6,7 @@ import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.common.aspect.relatedAspects import me.alegian.thavma.impl.common.entity.addKnowledge import me.alegian.thavma.impl.common.entity.knowsAspect +import me.alegian.thavma.impl.common.item.itemResourceKey import me.alegian.thavma.impl.common.payload.ScanResultPayload import me.alegian.thavma.impl.common.util.serialize import me.alegian.thavma.impl.init.registries.deferred.T7Attachments @@ -35,11 +36,11 @@ fun Player.hasScanned(entity: Entity): Boolean { // blocks fall back to items fun Player.hasScanned(blockState: BlockState): Boolean { - return hasScanned(itemKey(blockState.block.asItem())) + return hasScanned(blockState.block.itemResourceKey) } fun Player.hasScanned(itemStack: ItemStack): Boolean { - return hasScanned(itemKey(itemStack.item)) + return hasScanned(itemStack.item.itemResourceKey) } private fun ServerPlayer.tryScan(key: ResourceKey<*>, aspectMap: AspectMap?) { @@ -66,21 +67,18 @@ private fun ServerPlayer.tryScan(key: ResourceKey<*>, aspectMap: AspectMap?) { // itemEntities fall back to items fun ServerPlayer.tryScan(entity: Entity) { - if (entity is ItemEntity) return tryScan(itemKey(entity.item.item), AspectHelper.getAspects(entity.item)) + if (entity is ItemEntity) return tryScan(entity.item.item.itemResourceKey, AspectHelper.getAspects(entity.item)) tryScan(entityKey(entity.type), AspectHelper.getAspects(entity)) } fun ServerPlayer.tryScan(blockState: BlockState) { - tryScan(itemKey(blockState.block.asItem()), AspectHelper.getAspects(blockState.block)) + tryScan(blockState.block.itemResourceKey, AspectHelper.getAspects(blockState.block)) } private fun entityKey(entityType: EntityType<*>) = BuiltInRegistries.ENTITY_TYPE.getResourceKey(entityType).get() -private fun itemKey(item: Item) = - BuiltInRegistries.ITEM.getResourceKey(item).get() - fun Player.getScanHitResult(): HitResult { val rayVec = getViewVector(0.0f).scale(max(blockInteractionRange(), entityInteractionRange())) val predicate = { entity: Entity -> !entity.isSpectator && (entity.isPickable || entity is ItemEntity) } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt index e77df3ec..66321a6c 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt @@ -1,6 +1,7 @@ package me.alegian.thavma.impl.init.data.providers import me.alegian.thavma.impl.common.aspect.AspectMap +import me.alegian.thavma.impl.common.item.itemResourceKey import me.alegian.thavma.impl.init.data.providers.aspects.* import me.alegian.thavma.impl.init.registries.T7DataMaps import me.alegian.thavma.impl.init.registries.deferred.Aspects @@ -299,7 +300,7 @@ fun Builder.blockFamily(blockFamily: BlockFamily, builderConsum fun addFamilyVariant(block: Block?, multiplier: Number) { if (block == null) return - add(key(block.asItem()), aspects.scale(multiplier), false) + add(block.itemResourceKey, aspects.scale(multiplier), false) } addFamilyVariant(blockFamily.baseBlock, 1) @@ -326,7 +327,7 @@ fun Builder.blockFamily(blockFamily: BlockFamily, builderConsum fun Builder.item(item: ItemLike, builderConsumer: Consumer) { val aspectBuilder = AspectMap.builder() builderConsumer.accept(aspectBuilder) - add(key(item.asItem()), aspectBuilder.build(), false) + add(item.itemResourceKey, aspectBuilder.build(), false) } fun Builder.item(sup: Supplier, builderConsumer: Consumer) = @@ -356,7 +357,3 @@ fun Builder>.entity(tag: TagKey>, builder private fun key(entityType: EntityType<*>): ResourceKey> { return BuiltInRegistries.ENTITY_TYPE.getResourceKey(entityType).orElseThrow() } - -private fun key(item: Item): ResourceKey { - return BuiltInRegistries.ITEM.getResourceKey(item).orElseThrow() -} diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt new file mode 100644 index 00000000..239c659b --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt @@ -0,0 +1,44 @@ +package me.alegian.thavma.impl.init.data.providers.aspects + +import me.alegian.thavma.impl.common.aspect.AspectMap +import me.alegian.thavma.impl.common.item.itemResourceKey +import me.alegian.thavma.impl.init.registries.deferred.Aspects +import net.minecraft.resources.ResourceKey +import net.minecraft.tags.TagKey +import net.minecraft.world.item.Item +import net.minecraft.world.level.ItemLike +import net.neoforged.neoforge.common.data.DataMapProvider +import java.util.function.UnaryOperator + +class AspectGen(private var aspects: AspectMap) { + constructor() : this(AspectMap()) + + fun mutate(mutation: UnaryOperator) = + AspectGen(mutation.apply(aspects)) + + fun save(builder: DataMapProvider.Builder, tag: TagKey) { + builder.add(tag, aspects, false) + } + + fun save(builder: DataMapProvider.Builder, key: ResourceKey) { + builder.add(key, aspects, false) + } + + fun save(builder: DataMapProvider.Builder, itemLike: ItemLike) = + save(builder, itemLike.itemResourceKey) +} + +object Mutations { + val ORE = { it: AspectMap -> + it.add(Aspects.TERRA, 2) + } + val RAW = { it: AspectMap -> + it.scale(0.5).add(Aspects.TERRA, 2) + } + val STORAGE_BLOCK_4 = { it: AspectMap -> + it.scale(4) + } + val STORAGE_BLOCK_9 = { it: AspectMap -> + it.scale(9) + } +} diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt index 25d27a8e..10215708 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt @@ -1,8 +1,8 @@ package me.alegian.thavma.impl.init.data.providers.aspects import me.alegian.thavma.impl.common.aspect.AspectMap +import me.alegian.thavma.impl.common.item.itemResourceKey import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider -import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Blocks @@ -11,17 +11,10 @@ import me.alegian.thavma.impl.init.registries.deferred.T7Blocks.INFUSED_STONES import me.alegian.thavma.impl.init.registries.deferred.T7Items import me.alegian.thavma.impl.init.registries.deferred.T7Items.SHARDS import net.minecraft.core.HolderLookup -import net.minecraft.core.registries.BuiltInRegistries -import net.minecraft.resources.ResourceKey import net.minecraft.tags.ItemTags -import net.minecraft.tags.TagKey -import net.minecraft.world.item.Item import net.minecraft.world.item.Items -import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Blocks import net.neoforged.neoforge.common.Tags -import net.neoforged.neoforge.common.data.DataMapProvider -import java.util.function.UnaryOperator object MineralAspects { val coal = AspectGen().mutate { @@ -111,6 +104,17 @@ object MineralAspects { val redstoneOre = redstone.mutate(Mutations.ORE) val redstoneBlock = redstone.mutate(Mutations.STORAGE_BLOCK_9) + val nugget = AspectGen().mutate { it.add(Aspects.TERRA, 1) } + + val netheriteScrap = AspectGen().mutate { + it.add(Aspects.METALLUM, 2) + .add(Aspects.TERRA, 2) + .add(Aspects.TENEBRAE, 1) + } + val netheriteOre = netheriteScrap.mutate(Mutations.ORE) + val netherite = gold.mutate { it.scale(4).add(Aspects.TENEBRAE, 4) } + val netheriteBlock = netherite.mutate(Mutations.STORAGE_BLOCK_9) + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { coal.save(this, ItemTags.COALS) @@ -135,11 +139,11 @@ object MineralAspects { goldBlock.save(this, Tags.Items.STORAGE_BLOCKS_GOLD) rawGoldBlock.save(this, Tags.Items.STORAGE_BLOCKS_RAW_GOLD) - thavmite.save(this, key(T7Items.THAVMITE_INGOT)) - thavmiteBlock.save(this, key(T7Blocks.THAVMITE_BLOCK)) + thavmite.save(this, (T7Items.THAVMITE_INGOT)) + thavmiteBlock.save(this, (T7Blocks.THAVMITE_BLOCK)) - orichalcum.save(this, key(T7Items.ORICHALCUM_INGOT)) - orichalcumBlock.save(this, key(T7Blocks.ORICHALCUM_BLOCK)) + orichalcum.save(this, (T7Items.ORICHALCUM_INGOT)) + orichalcumBlock.save(this, (T7Blocks.ORICHALCUM_BLOCK)) diamond.save(this, Tags.Items.GEMS_DIAMOND) diamondOre.save(this, Tags.Items.ORES_DIAMOND) @@ -154,88 +158,31 @@ object MineralAspects { lapisBlock.save(this, Tags.Items.STORAGE_BLOCKS_LAPIS) amethyst.save(this, Tags.Items.GEMS_AMETHYST) - amethystBlock.save(this, key(Blocks.AMETHYST_BLOCK)) + amethystBlock.save(this, (Blocks.AMETHYST_BLOCK)) quartz.save(this, Tags.Items.GEMS_QUARTZ) quartzOre.save(this, Tags.Items.ORES_QUARTZ) - quartzBlock.save(this, key(Blocks.QUARTZ_BLOCK)) + quartzBlock.save(this, (Blocks.QUARTZ_BLOCK)) glowstone.save(this, Tags.Items.DUSTS_GLOWSTONE) - glowstoneBlock.save(this, key(Blocks.GLOWSTONE)) + glowstoneBlock.save(this, (Blocks.GLOWSTONE)) redstone.save(this, Tags.Items.DUSTS_REDSTONE) redstoneOre.save(this, Tags.Items.ORES_REDSTONE) redstoneBlock.save(this, Tags.Items.STORAGE_BLOCKS_REDSTONE) - item(Tags.Items.ORES_NETHERITE_SCRAP) { - it.add(Aspects.METALLUM, 2) - .add(Aspects.TERRA, 6) - .add(Aspects.TENEBRAE, 1) - } - item(Tags.Items.STORAGE_BLOCKS_NETHERITE) { - it.add(Aspects.METALLUM, 144) - .add(Aspects.TENEBRAE, 36) - } - - for (infusedBlock in (INFUSED_STONES.values + INFUSED_DEEPSLATES.values)) { - item(infusedBlock) { - it.add(infusedBlock.get().getAspect(), 4) - } - } + nugget.save(this, Tags.Items.NUGGETS) - item(Items.NETHERITE_SCRAP) { - it.add(Aspects.METALLUM, 2) - .add(Aspects.TERRA, 2) - .add(Aspects.TENEBRAE, 1) - } - item(Tags.Items.INGOTS_NETHERITE) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.TENEBRAE, 4) - } + netheriteScrap.save(this, (Items.NETHERITE_SCRAP)) + netheriteOre.save(this, Tags.Items.ORES_NETHERITE_SCRAP) + netherite.save(this, Tags.Items.INGOTS_NETHERITE) + netheriteBlock.save(this, Tags.Items.STORAGE_BLOCKS_NETHERITE) - for (shard in SHARDS.values) { - item(shard) { - it.add(shard.get().aspect, 4) - } + for (primal in Aspects.DATAGEN_PRIMALS) { + INFUSED_STONES[primal]?.let { add((it.itemResourceKey), AspectMap().add(primal, 4), false) } + INFUSED_DEEPSLATES[primal]?.let { add((it.itemResourceKey), AspectMap().add(primal, 4), false) } + SHARDS[primal]?.let { add((it.itemResourceKey), AspectMap().add(primal, 4), false) } } - - item(Tags.Items.NUGGETS) { - it.add(Aspects.TERRA, 1) - } - } - } - - class AspectGen(private var aspects: AspectMap) { - constructor() : this(AspectMap()) - - fun mutate(mutation: UnaryOperator) = - AspectGen(mutation.apply(aspects)) - - fun save(builder: DataMapProvider.Builder, tag: TagKey){ - builder.add(tag, aspects, false) - } - - fun save(builder: DataMapProvider.Builder, key: ResourceKey){ - builder.add(key, aspects, false) - } - } - - private fun key(itemLike: ItemLike): ResourceKey { - return BuiltInRegistries.ITEM.getResourceKey(itemLike.asItem()).orElseThrow() - } - - object Mutations { - val ORE = { it: AspectMap -> - it.add(Aspects.TERRA, 2) - } - val RAW = { it: AspectMap -> - it.scale(0.5).add(Aspects.TERRA, 2) - } - val STORAGE_BLOCK_4 = { it: AspectMap -> - it.scale(4) - } - val STORAGE_BLOCK_9 = { it: AspectMap -> - it.scale(9) } } } \ No newline at end of file From c92715f7f3b624dfa6eac2a4f8222966c286e756 Mon Sep 17 00:00:00 2001 From: alegian Date: Thu, 8 Jan 2026 18:20:10 +0200 Subject: [PATCH 16/40] much more datagen --- .../thavma/data_maps/item/aspect_content.json | 5 +- .../init/data/providers/T7DataMapProvider.kt | 264 +---------------- .../data/providers/aspects/ArmorAspects.kt | 117 +++----- .../providers/aspects/AspectDatagenHelper.kt | 25 +- .../data/providers/aspects/ItemAspects.kt | 268 ++++++++++++++++++ 5 files changed, 338 insertions(+), 341 deletions(-) create mode 100644 src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index d742a7de..cf144774 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -258,7 +258,8 @@ }, "#thavma:goggles": { "thavma:aether": 4, - "thavma:metallum": 32, + "thavma:instrumentum": 8, + "thavma:metallum": 40, "thavma:vitreus": 4 }, "minecraft:acacia_button": { @@ -910,7 +911,7 @@ "thavma:metallum": 16 }, "minecraft:iron_horse_armor": { - "thavma:metallum": 16, + "thavma:metallum": 56, "thavma:praemunio": 6 }, "minecraft:iron_leggings": { diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt index 66321a6c..e29b9c9e 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt @@ -3,24 +3,16 @@ package me.alegian.thavma.impl.init.data.providers import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.common.item.itemResourceKey import me.alegian.thavma.impl.init.data.providers.aspects.* -import me.alegian.thavma.impl.init.registries.T7DataMaps -import me.alegian.thavma.impl.init.registries.deferred.Aspects -import me.alegian.thavma.impl.init.registries.deferred.T7Blocks -import me.alegian.thavma.impl.init.registries.deferred.T7Items import net.minecraft.core.HolderLookup import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.data.BlockFamily import net.minecraft.data.PackOutput import net.minecraft.resources.ResourceKey -import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey import net.minecraft.world.entity.EntityType import net.minecraft.world.item.Item -import net.minecraft.world.item.Items import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.Block -import net.minecraft.world.level.block.Blocks -import net.neoforged.neoforge.common.Tags import net.neoforged.neoforge.common.data.DataMapProvider import net.neoforged.neoforge.common.data.DataMapProvider.Builder import java.util.concurrent.CompletableFuture @@ -31,265 +23,13 @@ class T7DataMapProvider(packOutput: PackOutput, lookupProvider: CompletableFutur DataMapProvider(packOutput, lookupProvider) { override fun gather(lookupProvider: HolderLookup.Provider) { AspectRelations.gather(this) + + ItemAspects.gather(this, lookupProvider) EntityAspects.gather(this, lookupProvider) MineralAspects.gather(this, lookupProvider) ToolAspects.gather(this, lookupProvider) ArmorAspects.gather(this, lookupProvider) BlockFamilyAspects.gather(this, lookupProvider) - - val i = builder(T7DataMaps.AspectContent.ITEM) - - i.item(Items.BLAZE_POWDER) { - it.add(Aspects.IGNIS, 2) - .add(Aspects.ALKIMIA, 1) - } - i.item(Tags.Items.GUNPOWDERS) { - it.add(Aspects.IGNIS, 4) - .add(Aspects.ALKIMIA, 2) - .add(Aspects.TERRA, 1) - } - i.item(Tags.Items.RODS_BLAZE) { - it.add(Aspects.IGNIS, 4) - .add(Aspects.ALKIMIA, 2) - .add(Aspects.CORPUS, 2) - } - i.item(Tags.Items.RODS_BREEZE) { - it.add(Aspects.AETHER, 6) - .add(Aspects.CORPUS, 2) - } - i.item(Items.WIND_CHARGE) { - it.add(Aspects.ALKIMIA, 4) - .add(Aspects.AETHER, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - i.item(Items.FIRE_CHARGE) { - it.add(Aspects.ALKIMIA, 4) - .add(Aspects.IGNIS, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - i.item(Tags.Items.LEATHERS) { - it.add(Aspects.CORPUS, 3) - } - i.item(T7Items.FABRIC) { - it.add(Aspects.FABRICO, 4).add(Aspects.AETHER, 1) - } - i.item(T7Items.ARCANE_LENS) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.AETHER, 2) - .add(Aspects.VITREUS, 2) - } - i.item(T7Items.ROTTEN_BRAIN) { - it.add(Aspects.COGNITIO, 12) - .add(Aspects.HOSTILIS, 2) - .add(Aspects.CORPUS, 2) - } - i.item(Items.ROTTEN_FLESH) { - it.add(Aspects.HOSTILIS, 2) - .add(Aspects.CORPUS, 2) - } - i.item(Items.ARMADILLO_SCUTE) { - it.add(Aspects.CORPUS, 2) - .add(Aspects.PRAEMUNIO, 1) - } - i.item(Items.TURTLE_SCUTE) { - it.add(Aspects.CORPUS, 2) - .add(Aspects.PRAEMUNIO, 1) - .add(Aspects.AQUA, 1) - } - i.item(Items.FLINT) { - it.add(Aspects.TERRA, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - i.item(Tags.Items.FEATHERS) { - it.add(Aspects.INSTRUMENTUM, 1) - .add(Aspects.CORPUS, 2) - } - i.item(Tags.Items.ENDER_PEARLS) { - it.add(Aspects.INSTRUMENTUM, 4) - .add(Aspects.TENEBRAE, 4) - .add(Aspects.CORPUS, 2) - } - i.item(Items.ENDER_EYE) { - it.add(Aspects.INSTRUMENTUM, 4) - .add(Aspects.TENEBRAE, 4) - .add(Aspects.AETHER, 2) - } - i.item(Tags.Items.STRINGS) { - it.add(Aspects.CORPUS, 1) - .add(Aspects.FABRICO, 1) - } - i.item(Items.GHAST_TEAR) { - it.add(Aspects.HOSTILIS, 4) - .add(Aspects.ALKIMIA, 4) - } - i.item(Items.SUGAR) { - it.add(Aspects.HERBA, 2) - .add(Aspects.VICTUS, 1) - } - i.item(Items.PAPER) { - it.add(Aspects.COGNITIO, 1) - .add(Aspects.HERBA, 1) - } - i.item(Items.FIREWORK_ROCKET) { - it.add(Aspects.IGNIS, 1) - .add(Aspects.ORNATUS, 1) - } - i.item(Items.FIREWORK_STAR) { - it.add(Aspects.IGNIS, 1) - .add(Aspects.ORNATUS, 2) - } - i.item(Items.SNOWBALL) { it.add(Aspects.AQUA, 1) } - i.item(Items.NETHER_BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - i.item(Items.PRISMARINE_CRYSTALS) { it.add(Aspects.VITREUS, 4).add(Aspects.AQUA, 4).add(Aspects.LUX, 2) } - i.item(Items.PRISMARINE_SHARD) { it.add(Aspects.AQUA, 2).add(Aspects.TERRA, 2) } - i.item(Items.CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - i.item(Items.POPPED_CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - i.item(Items.CLAY_BALL) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - i.item(Items.BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - - i.item(Tags.Items.RODS_WOODEN) { it.add(Aspects.HERBA, 2) } - - i.item(Tags.Items.EGGS) { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } - - i.item(Tags.Items.CROPS_WHEAT) { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } - - i.item(Items.END_CRYSTAL) { - it.add(Aspects.VITREUS, 14) - .add(Aspects.IGNIS, 8) - .add(Aspects.TENEBRAE, 4) - .add(Aspects.AETHER, 4) - } - - i.item(Blocks.NETHER_WART) { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } - i.item(Blocks.CHORUS_PLANT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - i.item(Blocks.CHORUS_FLOWER) { it.add(Aspects.HERBA, 4).add(Aspects.TENEBRAE, 4) } - i.item(Tags.Items.NETHERRACKS) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - i.item(Blocks.MUD) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - i.item(Blocks.PACKED_MUD) { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - i.item(ItemTags.DIRT) { it.add(Aspects.TERRA, 1) } - i.item(Blocks.COARSE_DIRT) { it.add(Aspects.TERRA, 1) } - i.item(Tags.Items.GRAVELS) { it.add(Aspects.TERRA, 2) } - i.item(Tags.Items.STONES) { it.add(Aspects.TERRA, 2) } - i.item(Tags.Items.COBBLESTONES) { it.add(Aspects.TERRA, 2) } - i.item(Tags.Items.SANDS) { it.add(Aspects.TERRA, 2) } - i.item(Blocks.CLAY) { it.add(Aspects.TERRA, 4).add(Aspects.AQUA, 4) } - - i.item(Blocks.GRASS_BLOCK) { - it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) - } - i.item(Blocks.PODZOL) { - it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) - } - i.item(Blocks.SHORT_GRASS) { - it.add(Aspects.HERBA, 1) - } - i.item(Blocks.TALL_GRASS) { - it.add(Aspects.HERBA, 1) - } - - i.item(ItemTags.TERRACOTTA) { - it.add(Aspects.TERRA, 4) - .add(Aspects.IGNIS, 4) - .add(Aspects.ORNATUS, 1) - } - i.item(Tags.Items.CONCRETE_POWDERS) { - it.add(Aspects.TERRA, 3) - } - i.item(Tags.Items.CONCRETES) { - it.add(Aspects.TERRA, 3) - .add(Aspects.AQUA, 1) - .add(Aspects.AETHER, 1) - } - - i.item(ItemTags.LEAVES) { it.add(Aspects.HERBA, 2) } - i.item(ItemTags.SAPLINGS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 4) } - i.item(ItemTags.LOGS) { it.add(Aspects.HERBA, 8) } - i.item(ItemTags.FLOWERS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 1) } - - i.item(Blocks.SUGAR_CANE) { - it.add(Aspects.HERBA, 2) - .add(Aspects.AQUA, 1) - } - - i.item(T7Blocks.TABLE) { it.add(Aspects.HERBA, 12) } - i.item(T7Blocks.RESEARCH_TABLE) { - it.add(Aspects.HERBA, 12) - .add(Aspects.AETHER, 2) - } - - i.item(ItemTags.WOOL) { - it.add(Aspects.CORPUS, 4).add(Aspects.ORNATUS, 2).add(Aspects.FABRICO, 4) - } - - i.item(Tags.Items.GLASS_BLOCKS_CHEAP) { it.add(Aspects.VITREUS, 2) } - i.item(Tags.Items.GLASS_PANES) { it.add(Aspects.VITREUS, 1) } - - i.item(ItemTags.WOOL) { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } - - i.item(Blocks.TORCH) { it.add(Aspects.LUX, 4) } - - i.item(Blocks.SNOW) { it.add(Aspects.AQUA, 1) } - i.item(Blocks.SNOW_BLOCK) { it.add(Aspects.AQUA, 4) } - i.item(Blocks.POWDER_SNOW) { it.add(Aspects.AQUA, 2) } - - i.item(Blocks.BEDROCK) { - it.add(Aspects.TERRA, 25) - .add(Aspects.TENEBRAE, 25) - } - i.item(T7Blocks.ETERNAL_FLAME) { - it.add(Aspects.LUX, 12) - .add(Aspects.IGNIS, 8) - } - i.item(T7Blocks.CRACKED_ELEMENTAL_STONE) { - it.add(Aspects.TERRA, 4) - .add(Aspects.AETHER, 1) - } - i.item(T7Blocks.ELEMENTAL_STONE_BRICKS) { - it.add(Aspects.TERRA, 4) - .add(Aspects.AETHER, 1) - } - i.item(T7Blocks.ELEMENTAL_CORE) { - it.add(Aspects.TERRA, 6) - .add(Aspects.AETHER, 2) - } - i.item(Blocks.CRAFTING_TABLE) { - it.add(Aspects.FABRICO, 8) - .add(Aspects.HERBA, 4) - } - i.item(T7Blocks.ARCANE_WORKBENCH) { - it.add(Aspects.FABRICO, 12) - .add(Aspects.HERBA, 4) - .add(Aspects.AETHER, 2) - } - i.item(Items.CAULDRON) { - it.add(Aspects.METALLUM, 56) - .add(Aspects.ALKIMIA, 8) - } - i.item(T7Blocks.CRUCIBLE) { - it.add(Aspects.METALLUM, 56) - .add(Aspects.ALKIMIA, 8) - .add(Aspects.AETHER, 2) - } - i.item(T7Blocks.SEALING_JAR) { - it.add(Aspects.VITREUS, 4) - .add(Aspects.ALKIMIA, 2) - .add(Aspects.AETHER, 2) - } - i.item(Blocks.TNT) { - it.add(Aspects.ALKIMIA, 8) - .add(Aspects.IGNIS, 8) - .add(Aspects.TERRA, 1) - } - i.item(Blocks.TRIPWIRE_HOOK) { - it.add(Aspects.MACHINA, 2) - .add(Aspects.METALLUM, 1) - } - i.item(Blocks.HEAVY_CORE) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.INSTRUMENTUM, 6) - } - i.item(Blocks.BAMBOO) { it.add(Aspects.HERBA, 1) } - i.item(ItemTags.BAMBOO_BLOCKS) { it.add(Aspects.HERBA, 4) } } } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt index 7ea041e6..c8af1574 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt @@ -10,79 +10,52 @@ import net.minecraft.core.HolderLookup import net.minecraft.world.item.Items object ArmorAspects { + val ironHelmet = MineralAspects.iron.mutate(Mutations.helmet(4)) + val ironChestplate = MineralAspects.iron.mutate(Mutations.chestplate(12)) + val ironLeggings = MineralAspects.iron.mutate(Mutations.leggings(10)) + val ironBoots = MineralAspects.iron.mutate(Mutations.boots(4)) + val ironHorseArmor = MineralAspects.iron.mutate(Mutations.horseArmor(6)) + + private val chainBase = MineralAspects.iron.mutate { it.scale(0.5) } + val chainHelmet = chainBase.mutate(Mutations.helmet(4)) + val chainChestplate = chainBase.mutate(Mutations.chestplate(10)) + val chainLeggings = chainBase.mutate(Mutations.leggings(8)) + val chainBoots = chainBase.mutate(Mutations.boots(2)) + + val leatherHelmet = ItemAspects.leather.mutate(Mutations.helmet(2)) + val leatherChestplate = ItemAspects.leather.mutate(Mutations.chestplate(6)) + val leatherLeggings = ItemAspects.leather.mutate(Mutations.leggings(4)) + val leatherBoots = ItemAspects.leather.mutate(Mutations.boots(2)) + val leatherHorseArmor = ItemAspects.leather.mutate(Mutations.horseArmor(4)) + + val goggles = ItemAspects.arcaneLens.mutate { it.scale(2) }.add(MineralAspects.orichalcum.mutate { it.scale(2) }) + val apprenticeChestplate = ItemAspects.fabric.mutate(Mutations.chestplate(2)) + val apprenticeLeggings = ItemAspects.fabric.mutate(Mutations.leggings(2)) + val apprenticeBoots = ItemAspects.fabric.mutate(Mutations.boots(2)) + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { - item(Items.LEATHER_HELMET) { - it.add(Aspects.CORPUS, 15) - .add(Aspects.PRAEMUNIO, 2) - } - item(Items.LEATHER_CHESTPLATE) { - it.add(Aspects.CORPUS, 24) - .add(Aspects.PRAEMUNIO, 6) - } - item(Items.LEATHER_LEGGINGS) { - it.add(Aspects.CORPUS, 21) - .add(Aspects.PRAEMUNIO, 4) - } - item(Items.LEATHER_BOOTS) { - it.add(Aspects.CORPUS, 12) - .add(Aspects.PRAEMUNIO, 2) - } + leatherHelmet.save(this, Items.LEATHER_HELMET) + leatherChestplate.save(this, Items.LEATHER_CHESTPLATE) + leatherLeggings.save(this, Items.LEATHER_LEGGINGS) + leatherBoots.save(this, Items.LEATHER_BOOTS) + leatherHorseArmor.save(this, Items.LEATHER_HORSE_ARMOR) - item(T7Tags.Items.GOGGLES) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.AETHER, 4) - .add(Aspects.VITREUS, 4) - } - item(T7Items.APPRENTICE_CHESTPLATE) { - it.add(Aspects.FABRICO, 32) - .add(Aspects.AETHER, 8) - .add(Aspects.PRAEMUNIO, 2) - } - item(T7Items.APPRENTICE_LEGGINGS) { - it.add(Aspects.FABRICO, 28) - .add(Aspects.AETHER, 7) - .add(Aspects.PRAEMUNIO, 2) - } - item(T7Items.APPRENTICE_BOOTS) { - it.add(Aspects.FABRICO, 16) - .add(Aspects.AETHER, 4) - .add(Aspects.PRAEMUNIO, 2) - } + goggles.save(this, T7Tags.Items.GOGGLES) + apprenticeChestplate.save(this, T7Items.APPRENTICE_CHESTPLATE) + apprenticeLeggings.save(this, T7Items.APPRENTICE_LEGGINGS) + apprenticeBoots.save(this, T7Items.APPRENTICE_BOOTS) - item(Items.CHAINMAIL_HELMET) { - it.add(Aspects.METALLUM, 20) - .add(Aspects.PRAEMUNIO, 4) - } - item(Items.CHAINMAIL_CHESTPLATE) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.PRAEMUNIO, 10) - } - item(Items.CHAINMAIL_LEGGINGS) { - it.add(Aspects.METALLUM, 28) - .add(Aspects.PRAEMUNIO, 8) - } - item(Items.CHAINMAIL_BOOTS) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.PRAEMUNIO, 2) - } + chainHelmet.save(this, Items.CHAINMAIL_HELMET) + chainChestplate.save(this, Items.CHAINMAIL_CHESTPLATE) + chainLeggings.save(this, Items.CHAINMAIL_LEGGINGS) + chainBoots.save(this, Items.CHAINMAIL_BOOTS) - item(Items.IRON_HELMET) { - it.add(Aspects.METALLUM, 40) - .add(Aspects.PRAEMUNIO, 4) - } - item(Items.IRON_CHESTPLATE) { - it.add(Aspects.METALLUM, 64) - .add(Aspects.PRAEMUNIO, 12) - } - item(Items.IRON_LEGGINGS) { - it.add(Aspects.METALLUM, 56) - .add(Aspects.PRAEMUNIO, 10) - } - item(Items.IRON_BOOTS) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.PRAEMUNIO, 4) - } + ironHelmet.save(this, Items.IRON_HELMET) + ironChestplate.save(this, Items.IRON_CHESTPLATE) + ironLeggings.save(this, Items.IRON_LEGGINGS) + ironBoots.save(this, Items.IRON_BOOTS) + ironHorseArmor.save(this, Items.IRON_HORSE_ARMOR) item(T7Items.THAVMITE_HELMET) { it.add(Aspects.METALLUM, 40) @@ -164,14 +137,6 @@ object ArmorAspects { it.add(Aspects.CORPUS, 8) .add(Aspects.PRAEMUNIO, 6) } - item(Items.LEATHER_HORSE_ARMOR) { - it.add(Aspects.CORPUS, 21) - .add(Aspects.PRAEMUNIO, 4) - } - item(Items.IRON_HORSE_ARMOR) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.PRAEMUNIO, 6) - } item(Items.GOLDEN_HORSE_ARMOR) { it.add(Aspects.METALLUM, 8) .add(Aspects.PRAEMUNIO, 8) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt index 239c659b..f8c38a38 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt @@ -10,12 +10,16 @@ import net.minecraft.world.level.ItemLike import net.neoforged.neoforge.common.data.DataMapProvider import java.util.function.UnaryOperator -class AspectGen(private var aspects: AspectMap) { +class AspectGen(val aspects: AspectMap) { constructor() : this(AspectMap()) fun mutate(mutation: UnaryOperator) = AspectGen(mutation.apply(aspects)) + fun add(other: AspectGen): AspectGen { + return AspectGen(aspects.add(other.aspects)) + } + fun save(builder: DataMapProvider.Builder, tag: TagKey) { builder.add(tag, aspects, false) } @@ -41,4 +45,23 @@ object Mutations { val STORAGE_BLOCK_9 = { it: AspectMap -> it.scale(9) } + + fun helmet(praemunio: Int) = { it: AspectMap -> + it.scale(5).add(Aspects.PRAEMUNIO, praemunio) + } + fun chestplate(praemunio: Int) = { it: AspectMap -> + it.scale(8).add(Aspects.PRAEMUNIO, praemunio) + } + fun leggings(praemunio: Int) = { it: AspectMap -> + it.scale(7).add(Aspects.PRAEMUNIO, praemunio) + } + fun boots(praemunio: Int) = { it: AspectMap -> + it.scale(4).add(Aspects.PRAEMUNIO, praemunio) + } + fun horseArmor(praemunio: Int) = { it: AspectMap -> + it.scale(7).add(Aspects.PRAEMUNIO, praemunio) + } + fun wolfArmor(praemunio: Int) = { it: AspectMap -> + it.scale(6).add(Aspects.PRAEMUNIO, praemunio) + } } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt new file mode 100644 index 00000000..5b4d8654 --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt @@ -0,0 +1,268 @@ +package me.alegian.thavma.impl.init.data.providers.aspects + +import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider +import me.alegian.thavma.impl.init.data.providers.item +import me.alegian.thavma.impl.init.registries.T7DataMaps +import me.alegian.thavma.impl.init.registries.deferred.Aspects +import me.alegian.thavma.impl.init.registries.deferred.T7Blocks +import me.alegian.thavma.impl.init.registries.deferred.T7Items +import net.minecraft.core.HolderLookup +import net.minecraft.tags.ItemTags +import net.minecraft.world.item.Items +import net.minecraft.world.level.block.Blocks +import net.neoforged.neoforge.common.Tags + +object ItemAspects { + val leather = AspectGen().mutate { it.add(Aspects.CORPUS, 3) } + val fabric = AspectGen().mutate { it.add(Aspects.FABRICO, 4).add(Aspects.AETHER, 1) } + val arcaneLens = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.AETHER, 2).add(Aspects.VITREUS, 2) } + + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { + datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { + leather.save(this, Tags.Items.LEATHERS) + fabric.save(this, T7Items.FABRIC) + arcaneLens.save(this, T7Items.ARCANE_LENS) + + item(Items.BLAZE_POWDER) { + it.add(Aspects.IGNIS, 2) + .add(Aspects.ALKIMIA, 1) + } + item(Tags.Items.GUNPOWDERS) { + it.add(Aspects.IGNIS, 4) + .add(Aspects.ALKIMIA, 2) + .add(Aspects.TERRA, 1) + } + item(Tags.Items.RODS_BLAZE) { + it.add(Aspects.IGNIS, 4) + .add(Aspects.ALKIMIA, 2) + .add(Aspects.CORPUS, 2) + } + item(Tags.Items.RODS_BREEZE) { + it.add(Aspects.AETHER, 6) + .add(Aspects.CORPUS, 2) + } + item(Items.WIND_CHARGE) { + it.add(Aspects.ALKIMIA, 4) + .add(Aspects.AETHER, 4) + .add(Aspects.INSTRUMENTUM, 2) + } + item(Items.FIRE_CHARGE) { + it.add(Aspects.ALKIMIA, 4) + .add(Aspects.IGNIS, 4) + .add(Aspects.INSTRUMENTUM, 2) + } + item(T7Items.ROTTEN_BRAIN) { + it.add(Aspects.COGNITIO, 12) + .add(Aspects.HOSTILIS, 2) + .add(Aspects.CORPUS, 2) + } + item(Items.ROTTEN_FLESH) { + it.add(Aspects.HOSTILIS, 2) + .add(Aspects.CORPUS, 2) + } + item(Items.ARMADILLO_SCUTE) { + it.add(Aspects.CORPUS, 2) + .add(Aspects.PRAEMUNIO, 1) + } + item(Items.TURTLE_SCUTE) { + it.add(Aspects.CORPUS, 2) + .add(Aspects.PRAEMUNIO, 1) + .add(Aspects.AQUA, 1) + } + item(Items.FLINT) { + it.add(Aspects.TERRA, 4) + .add(Aspects.INSTRUMENTUM, 2) + } + item(Tags.Items.FEATHERS) { + it.add(Aspects.INSTRUMENTUM, 1) + .add(Aspects.CORPUS, 2) + } + item(Tags.Items.ENDER_PEARLS) { + it.add(Aspects.INSTRUMENTUM, 4) + .add(Aspects.TENEBRAE, 4) + .add(Aspects.CORPUS, 2) + } + item(Items.ENDER_EYE) { + it.add(Aspects.INSTRUMENTUM, 4) + .add(Aspects.TENEBRAE, 4) + .add(Aspects.AETHER, 2) + } + item(Tags.Items.STRINGS) { + it.add(Aspects.CORPUS, 1) + .add(Aspects.FABRICO, 1) + } + item(Items.GHAST_TEAR) { + it.add(Aspects.HOSTILIS, 4) + .add(Aspects.ALKIMIA, 4) + } + item(Items.SUGAR) { + it.add(Aspects.HERBA, 2) + .add(Aspects.VICTUS, 1) + } + item(Items.PAPER) { + it.add(Aspects.COGNITIO, 1) + .add(Aspects.HERBA, 1) + } + item(Items.FIREWORK_ROCKET) { + it.add(Aspects.IGNIS, 1) + .add(Aspects.ORNATUS, 1) + } + item(Items.FIREWORK_STAR) { + it.add(Aspects.IGNIS, 1) + .add(Aspects.ORNATUS, 2) + } + item(Items.SNOWBALL) { it.add(Aspects.AQUA, 1) } + item(Items.NETHER_BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + item(Items.PRISMARINE_CRYSTALS) { it.add(Aspects.VITREUS, 4).add(Aspects.AQUA, 4).add(Aspects.LUX, 2) } + item(Items.PRISMARINE_SHARD) { it.add(Aspects.AQUA, 2).add(Aspects.TERRA, 2) } + item(Items.CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + item(Items.POPPED_CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + item(Items.CLAY_BALL) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } + item(Items.BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + + item(Tags.Items.RODS_WOODEN) { it.add(Aspects.HERBA, 2) } + + item(Tags.Items.EGGS) { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } + + item(Tags.Items.CROPS_WHEAT) { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } + + item(Items.END_CRYSTAL) { + it.add(Aspects.VITREUS, 14) + .add(Aspects.IGNIS, 8) + .add(Aspects.TENEBRAE, 4) + .add(Aspects.AETHER, 4) + } + + item(Blocks.NETHER_WART) { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + item(Blocks.CHORUS_PLANT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + item(Blocks.CHORUS_FLOWER) { it.add(Aspects.HERBA, 4).add(Aspects.TENEBRAE, 4) } + item(Tags.Items.NETHERRACKS) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + item(Blocks.MUD) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } + item(Blocks.PACKED_MUD) { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + item(ItemTags.DIRT) { it.add(Aspects.TERRA, 1) } + item(Blocks.COARSE_DIRT) { it.add(Aspects.TERRA, 1) } + item(Tags.Items.GRAVELS) { it.add(Aspects.TERRA, 2) } + item(Tags.Items.STONES) { it.add(Aspects.TERRA, 2) } + item(Tags.Items.COBBLESTONES) { it.add(Aspects.TERRA, 2) } + item(Tags.Items.SANDS) { it.add(Aspects.TERRA, 2) } + item(Blocks.CLAY) { it.add(Aspects.TERRA, 4).add(Aspects.AQUA, 4) } + + item(Blocks.GRASS_BLOCK) { + it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) + } + item(Blocks.PODZOL) { + it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) + } + item(Blocks.SHORT_GRASS) { + it.add(Aspects.HERBA, 1) + } + item(Blocks.TALL_GRASS) { + it.add(Aspects.HERBA, 1) + } + + item(ItemTags.TERRACOTTA) { + it.add(Aspects.TERRA, 4) + .add(Aspects.IGNIS, 4) + .add(Aspects.ORNATUS, 1) + } + item(Tags.Items.CONCRETE_POWDERS) { + it.add(Aspects.TERRA, 3) + } + item(Tags.Items.CONCRETES) { + it.add(Aspects.TERRA, 3) + .add(Aspects.AQUA, 1) + .add(Aspects.AETHER, 1) + } + + item(ItemTags.LEAVES) { it.add(Aspects.HERBA, 2) } + item(ItemTags.SAPLINGS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 4) } + item(ItemTags.LOGS) { it.add(Aspects.HERBA, 8) } + item(ItemTags.FLOWERS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 1) } + + item(Blocks.SUGAR_CANE) { + it.add(Aspects.HERBA, 2) + .add(Aspects.AQUA, 1) + } + + item(T7Blocks.TABLE) { it.add(Aspects.HERBA, 12) } + item(T7Blocks.RESEARCH_TABLE) { + it.add(Aspects.HERBA, 12) + .add(Aspects.AETHER, 2) + } + + item(ItemTags.WOOL) { + it.add(Aspects.CORPUS, 4).add(Aspects.ORNATUS, 2).add(Aspects.FABRICO, 4) + } + + item(Tags.Items.GLASS_BLOCKS_CHEAP) { it.add(Aspects.VITREUS, 2) } + item(Tags.Items.GLASS_PANES) { it.add(Aspects.VITREUS, 1) } + + item(ItemTags.WOOL) { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } + + item(Blocks.TORCH) { it.add(Aspects.LUX, 4) } + + item(Blocks.SNOW) { it.add(Aspects.AQUA, 1) } + item(Blocks.SNOW_BLOCK) { it.add(Aspects.AQUA, 4) } + item(Blocks.POWDER_SNOW) { it.add(Aspects.AQUA, 2) } + + item(Blocks.BEDROCK) { + it.add(Aspects.TERRA, 25) + .add(Aspects.TENEBRAE, 25) + } + item(T7Blocks.ETERNAL_FLAME) { + it.add(Aspects.LUX, 12) + .add(Aspects.IGNIS, 8) + } + item(T7Blocks.CRACKED_ELEMENTAL_STONE) { + it.add(Aspects.TERRA, 4) + .add(Aspects.AETHER, 1) + } + item(T7Blocks.ELEMENTAL_STONE_BRICKS) { + it.add(Aspects.TERRA, 4) + .add(Aspects.AETHER, 1) + } + item(T7Blocks.ELEMENTAL_CORE) { + it.add(Aspects.TERRA, 6) + .add(Aspects.AETHER, 2) + } + item(Blocks.CRAFTING_TABLE) { + it.add(Aspects.FABRICO, 8) + .add(Aspects.HERBA, 4) + } + item(T7Blocks.ARCANE_WORKBENCH) { + it.add(Aspects.FABRICO, 12) + .add(Aspects.HERBA, 4) + .add(Aspects.AETHER, 2) + } + item(Items.CAULDRON) { + it.add(Aspects.METALLUM, 56) + .add(Aspects.ALKIMIA, 8) + } + item(T7Blocks.CRUCIBLE) { + it.add(Aspects.METALLUM, 56) + .add(Aspects.ALKIMIA, 8) + .add(Aspects.AETHER, 2) + } + item(T7Blocks.SEALING_JAR) { + it.add(Aspects.VITREUS, 4) + .add(Aspects.ALKIMIA, 2) + .add(Aspects.AETHER, 2) + } + item(Blocks.TNT) { + it.add(Aspects.ALKIMIA, 8) + .add(Aspects.IGNIS, 8) + .add(Aspects.TERRA, 1) + } + item(Blocks.TRIPWIRE_HOOK) { + it.add(Aspects.MACHINA, 2) + .add(Aspects.METALLUM, 1) + } + item(Blocks.HEAVY_CORE) { + it.add(Aspects.METALLUM, 16) + .add(Aspects.INSTRUMENTUM, 6) + } + item(Blocks.BAMBOO) { it.add(Aspects.HERBA, 1) } + item(ItemTags.BAMBOO_BLOCKS) { it.add(Aspects.HERBA, 4) } + } + } +} \ No newline at end of file From 9ee469fafb77cd553dce6188342c87c4ba6792e2 Mon Sep 17 00:00:00 2001 From: alegian Date: Thu, 8 Jan 2026 18:37:34 +0200 Subject: [PATCH 17/40] tons of armor stuff --- .../thavma/data_maps/item/aspect_content.json | 28 ++-- .../data/providers/aspects/ArmorAspects.kt | 145 ++++++------------ .../data/providers/aspects/ItemAspects.kt | 13 +- 3 files changed, 70 insertions(+), 116 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index cf144774..80988bb2 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -733,7 +733,7 @@ }, "minecraft:diamond_horse_armor": { "thavma:praemunio": 12, - "thavma:vitreus": 16 + "thavma:vitreus": 56 }, "minecraft:diamond_leggings": { "thavma:praemunio": 14, @@ -851,7 +851,7 @@ "thavma:metallum": 8 }, "minecraft:golden_horse_armor": { - "thavma:metallum": 8, + "thavma:metallum": 28, "thavma:praemunio": 8 }, "minecraft:golden_leggings": { @@ -1100,19 +1100,22 @@ "thavma:tenebrae": 12 }, "minecraft:netherite_boots": { - "thavma:metallum": 32, + "thavma:metallum": 16, "thavma:praemunio": 9, - "thavma:tenebrae": 4 + "thavma:tenebrae": 4, + "thavma:vitreus": 32 }, "minecraft:netherite_chestplate": { - "thavma:metallum": 64, + "thavma:metallum": 16, "thavma:praemunio": 19, - "thavma:tenebrae": 4 + "thavma:tenebrae": 4, + "thavma:vitreus": 64 }, "minecraft:netherite_helmet": { - "thavma:metallum": 40, + "thavma:metallum": 16, "thavma:praemunio": 9, - "thavma:tenebrae": 4 + "thavma:tenebrae": 4, + "thavma:vitreus": 40 }, "minecraft:netherite_hoe": { "thavma:instrumentum": 6, @@ -1120,9 +1123,10 @@ "thavma:tenebrae": 8 }, "minecraft:netherite_leggings": { - "thavma:metallum": 56, + "thavma:metallum": 16, "thavma:praemunio": 15, - "thavma:tenebrae": 4 + "thavma:tenebrae": 4, + "thavma:vitreus": 56 }, "minecraft:netherite_pickaxe": { "thavma:instrumentum": 6, @@ -1585,7 +1589,7 @@ "minecraft:turtle_helmet": { "thavma:aqua": 5, "thavma:corpus": 10, - "thavma:praemunio": 4 + "thavma:praemunio": 5 }, "minecraft:turtle_scute": { "thavma:aqua": 1, @@ -1713,7 +1717,7 @@ "thavma:instrumentum": 2 }, "minecraft:wolf_armor": { - "thavma:corpus": 8, + "thavma:corpus": 12, "thavma:praemunio": 6 }, "minecraft:wooden_axe": { diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt index c8af1574..65d3e446 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt @@ -1,7 +1,6 @@ package me.alegian.thavma.impl.init.data.providers.aspects import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider -import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps import me.alegian.thavma.impl.init.registries.T7Tags import me.alegian.thavma.impl.init.registries.deferred.Aspects @@ -16,6 +15,29 @@ object ArmorAspects { val ironBoots = MineralAspects.iron.mutate(Mutations.boots(4)) val ironHorseArmor = MineralAspects.iron.mutate(Mutations.horseArmor(6)) + val goldHelmet = MineralAspects.gold.mutate(Mutations.helmet(4)) + val goldChestplate = MineralAspects.gold.mutate(Mutations.chestplate(10)) + val goldLeggings = MineralAspects.gold.mutate(Mutations.leggings(6)) + val goldBoots = MineralAspects.gold.mutate(Mutations.boots(2)) + val goldHorseArmor = MineralAspects.gold.mutate(Mutations.horseArmor(8)) + + val diamondHelmet = MineralAspects.diamond.mutate(Mutations.helmet(8)) + val diamondChestplate = MineralAspects.diamond.mutate(Mutations.chestplate(18)) + val diamondLeggings = MineralAspects.diamond.mutate(Mutations.leggings(14)) + val diamondBoots = MineralAspects.diamond.mutate(Mutations.boots(8)) + val diamondHorseArmor = MineralAspects.diamond.mutate(Mutations.horseArmor(12)) + + private val netheriteUpgrade = MineralAspects.netherite.mutate { it.add(Aspects.PRAEMUNIO, 1) } + val netheriteHelmet = diamondHelmet.add(netheriteUpgrade) + val netheriteChestplate = diamondChestplate.add(netheriteUpgrade) + val netheriteLeggings = diamondLeggings.add(netheriteUpgrade) + val netheriteBoots = diamondBoots.add(netheriteUpgrade) + + val thavmiteHelmet = MineralAspects.thavmite.mutate(Mutations.helmet(7)) + val thavmiteChestplate = MineralAspects.thavmite.mutate(Mutations.chestplate(13)) + val thavmiteLeggings = MineralAspects.thavmite.mutate(Mutations.leggings(11)) + val thavmiteBoots = MineralAspects.thavmite.mutate(Mutations.boots(5)) + private val chainBase = MineralAspects.iron.mutate { it.scale(0.5) } val chainHelmet = chainBase.mutate(Mutations.helmet(4)) val chainChestplate = chainBase.mutate(Mutations.chestplate(10)) @@ -33,6 +55,9 @@ object ArmorAspects { val apprenticeLeggings = ItemAspects.fabric.mutate(Mutations.leggings(2)) val apprenticeBoots = ItemAspects.fabric.mutate(Mutations.boots(2)) + val wolfArmor = ItemAspects.armadilloScute.mutate(Mutations.wolfArmor(0)) + val turtleHelmet = ItemAspects.turtleScute.mutate(Mutations.helmet(0)) + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { leatherHelmet.save(this, Items.LEATHER_HELMET) @@ -57,100 +82,30 @@ object ArmorAspects { ironBoots.save(this, Items.IRON_BOOTS) ironHorseArmor.save(this, Items.IRON_HORSE_ARMOR) - item(T7Items.THAVMITE_HELMET) { - it.add(Aspects.METALLUM, 40) - .add(Aspects.AETHER, 20) - .add(Aspects.PRAEMUNIO, 7) - } - item(T7Items.THAVMITE_CHESTPLATE) { - it.add(Aspects.METALLUM, 64) - .add(Aspects.AETHER, 32) - .add(Aspects.PRAEMUNIO, 13) - } - item(T7Items.THAVMITE_LEGGINGS) { - it.add(Aspects.METALLUM, 56) - .add(Aspects.AETHER, 28) - .add(Aspects.PRAEMUNIO, 11) - } - item(T7Items.THAVMITE_BOOTS) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.AETHER, 16) - .add(Aspects.PRAEMUNIO, 5) - } - - item(Items.GOLDEN_HELMET) { - it.add(Aspects.METALLUM, 20) - .add(Aspects.PRAEMUNIO, 4) - } - item(Items.GOLDEN_CHESTPLATE) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.PRAEMUNIO, 10) - } - item(Items.GOLDEN_LEGGINGS) { - it.add(Aspects.METALLUM, 28) - .add(Aspects.PRAEMUNIO, 6) - } - item(Items.GOLDEN_BOOTS) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.PRAEMUNIO, 2) - } - - item(Items.DIAMOND_HELMET) { - it.add(Aspects.VITREUS, 40) - .add(Aspects.PRAEMUNIO, 8) - } - item(Items.DIAMOND_CHESTPLATE) { - it.add(Aspects.VITREUS, 64) - .add(Aspects.PRAEMUNIO, 18) - } - item(Items.DIAMOND_LEGGINGS) { - it.add(Aspects.VITREUS, 56) - .add(Aspects.PRAEMUNIO, 14) - } - item(Items.DIAMOND_BOOTS) { - it.add(Aspects.VITREUS, 32) - .add(Aspects.PRAEMUNIO, 8) - } - - item(Items.NETHERITE_HELMET) { - it.add(Aspects.METALLUM, 40) - .add(Aspects.PRAEMUNIO, 9) - .add(Aspects.TENEBRAE, 4) - } - item(Items.NETHERITE_CHESTPLATE) { - it.add(Aspects.METALLUM, 64) - .add(Aspects.PRAEMUNIO, 19) - .add(Aspects.TENEBRAE, 4) - } - item(Items.NETHERITE_LEGGINGS) { - it.add(Aspects.METALLUM, 56) - .add(Aspects.PRAEMUNIO, 15) - .add(Aspects.TENEBRAE, 4) - } - item(Items.NETHERITE_BOOTS) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.PRAEMUNIO, 9) - .add(Aspects.TENEBRAE, 4) - } - - item(Items.WOLF_ARMOR) { - it.add(Aspects.CORPUS, 8) - .add(Aspects.PRAEMUNIO, 6) - } - item(Items.GOLDEN_HORSE_ARMOR) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.PRAEMUNIO, 8) - } - item(Items.DIAMOND_HORSE_ARMOR) { - it.add(Aspects.VITREUS, 16) - .add(Aspects.PRAEMUNIO, 12) - } - - item(Items.TURTLE_HELMET) { - it.add(Aspects.CORPUS, 10) - .add(Aspects.PRAEMUNIO, 4) - .add(Aspects.AQUA, 5) - } + goldHelmet.save(this, Items.GOLDEN_HELMET) + goldChestplate.save(this, Items.GOLDEN_CHESTPLATE) + goldLeggings.save(this, Items.GOLDEN_LEGGINGS) + goldBoots.save(this, Items.GOLDEN_BOOTS) + goldHorseArmor.save(this, Items.GOLDEN_HORSE_ARMOR) + + diamondHelmet.save(this, Items.DIAMOND_HELMET) + diamondChestplate.save(this, Items.DIAMOND_CHESTPLATE) + diamondLeggings.save(this, Items.DIAMOND_LEGGINGS) + diamondBoots.save(this, Items.DIAMOND_BOOTS) + diamondHorseArmor.save(this, Items.DIAMOND_HORSE_ARMOR) + + netheriteHelmet.save(this, Items.NETHERITE_HELMET) + netheriteChestplate.save(this, Items.NETHERITE_CHESTPLATE) + netheriteLeggings.save(this, Items.NETHERITE_LEGGINGS) + netheriteBoots.save(this, Items.NETHERITE_BOOTS) + + thavmiteHelmet.save(this, T7Items.THAVMITE_HELMET) + thavmiteChestplate.save(this, T7Items.THAVMITE_CHESTPLATE) + thavmiteLeggings.save(this, T7Items.THAVMITE_LEGGINGS) + thavmiteBoots.save(this, T7Items.THAVMITE_BOOTS) + + wolfArmor.save(this, Items.WOLF_ARMOR) + turtleHelmet.save(this, Items.TURTLE_HELMET) } } } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt index 5b4d8654..2a7226ef 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt @@ -16,12 +16,16 @@ object ItemAspects { val leather = AspectGen().mutate { it.add(Aspects.CORPUS, 3) } val fabric = AspectGen().mutate { it.add(Aspects.FABRICO, 4).add(Aspects.AETHER, 1) } val arcaneLens = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.AETHER, 2).add(Aspects.VITREUS, 2) } + val armadilloScute = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.PRAEMUNIO, 1) } + val turtleScute = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.PRAEMUNIO, 1).add(Aspects.AQUA, 1) } fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { leather.save(this, Tags.Items.LEATHERS) fabric.save(this, T7Items.FABRIC) arcaneLens.save(this, T7Items.ARCANE_LENS) + armadilloScute.save(this, Items.ARMADILLO_SCUTE) + turtleScute.save(this, Items.TURTLE_SCUTE) item(Items.BLAZE_POWDER) { it.add(Aspects.IGNIS, 2) @@ -60,15 +64,6 @@ object ItemAspects { it.add(Aspects.HOSTILIS, 2) .add(Aspects.CORPUS, 2) } - item(Items.ARMADILLO_SCUTE) { - it.add(Aspects.CORPUS, 2) - .add(Aspects.PRAEMUNIO, 1) - } - item(Items.TURTLE_SCUTE) { - it.add(Aspects.CORPUS, 2) - .add(Aspects.PRAEMUNIO, 1) - .add(Aspects.AQUA, 1) - } item(Items.FLINT) { it.add(Aspects.TERRA, 4) .add(Aspects.INSTRUMENTUM, 2) From 782b9e9557f5e80c8bd8c24e3a1d47c0cea9d75e Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 17 Jan 2026 15:28:42 +0200 Subject: [PATCH 18/40] temporary code cleanup --- .../data/providers/aspects/ItemAspects.kt | 395 +++++++----------- 1 file changed, 161 insertions(+), 234 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt index 2a7226ef..7db737ab 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt @@ -1,7 +1,6 @@ package me.alegian.thavma.impl.init.data.providers.aspects import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider -import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Blocks @@ -18,6 +17,86 @@ object ItemAspects { val arcaneLens = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.AETHER, 2).add(Aspects.VITREUS, 2) } val armadilloScute = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.PRAEMUNIO, 1) } val turtleScute = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.PRAEMUNIO, 1).add(Aspects.AQUA, 1) } + val blazePowder = AspectGen().mutate { it.add(Aspects.IGNIS, 2).add(Aspects.ALKIMIA, 1) } + val gunpowders = AspectGen().mutate { it.add(Aspects.IGNIS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.TERRA, 1) } + val rodsBlaze = AspectGen().mutate { it.add(Aspects.IGNIS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.CORPUS, 2) } + val rodsBreeze = AspectGen().mutate { it.add(Aspects.AETHER, 6).add(Aspects.CORPUS, 2) } + val windCharge = AspectGen().mutate { it.add(Aspects.ALKIMIA, 4).add(Aspects.AETHER, 4).add(Aspects.INSTRUMENTUM, 2) } + val fireCharge = AspectGen().mutate { it.add(Aspects.ALKIMIA, 4).add(Aspects.IGNIS, 4).add(Aspects.INSTRUMENTUM, 2) } + val rottenBrain = AspectGen().mutate { it.add(Aspects.COGNITIO, 12).add(Aspects.HOSTILIS, 2).add(Aspects.CORPUS, 2) } + val rottenFlesh = AspectGen().mutate { it.add(Aspects.HOSTILIS, 2).add(Aspects.CORPUS, 2) } + val flint = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.INSTRUMENTUM, 2) } + val feathers = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 1).add(Aspects.CORPUS, 2) } + val enderPearls = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 4).add(Aspects.TENEBRAE, 4).add(Aspects.CORPUS, 2) } + val enderEye = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 4).add(Aspects.TENEBRAE, 4).add(Aspects.AETHER, 2) } + val strings = AspectGen().mutate { it.add(Aspects.CORPUS, 1).add(Aspects.FABRICO, 1) } + val ghastTear = AspectGen().mutate { it.add(Aspects.HOSTILIS, 4).add(Aspects.ALKIMIA, 4) } + val sugar = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.VICTUS, 1) } + val paper = AspectGen().mutate { it.add(Aspects.COGNITIO, 1).add(Aspects.HERBA, 1) } + val fireworkRocket = AspectGen().mutate { it.add(Aspects.IGNIS, 1).add(Aspects.ORNATUS, 1) } + val fireworkStar = AspectGen().mutate { it.add(Aspects.IGNIS, 1).add(Aspects.ORNATUS, 2) } + val snowball = AspectGen().mutate { it.add(Aspects.AQUA, 1) } + val netherBrick = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + val prismarineCrystals = AspectGen().mutate { it.add(Aspects.VITREUS, 4).add(Aspects.AQUA, 4).add(Aspects.LUX, 2) } + val prismarineShard = AspectGen().mutate { it.add(Aspects.AQUA, 2).add(Aspects.TERRA, 2) } + val chorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + val poppedChorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + val clayBall = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } + val brick = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + val rodsWooden = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val eggs = AspectGen().mutate { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } + val cropsWheat = AspectGen().mutate { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } + val endCrystal = AspectGen().mutate { it.add(Aspects.VITREUS, 14).add(Aspects.IGNIS, 8).add(Aspects.TENEBRAE, 4).add(Aspects.AETHER, 4) } + val netherWart = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + val chorusPlant = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + val chorusFlower = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.TENEBRAE, 4) } + val netherracks = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + val mud = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } + val packedMud = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val dirt = AspectGen().mutate { it.add(Aspects.TERRA, 1) } + val coarseDirt = AspectGen().mutate { it.add(Aspects.TERRA, 1) } + val gravels = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val stones = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val cobblestones = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val sands = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val clay = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AQUA, 4) } + val grassBlock = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } + val podzol = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } + val shortGrass = AspectGen().mutate { it.add(Aspects.HERBA, 1) } + val tallGrass = AspectGen().mutate { it.add(Aspects.HERBA, 1) } + val terracotta = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4).add(Aspects.ORNATUS, 1) } + val concretePowders = AspectGen().mutate { it.add(Aspects.TERRA, 3) } + val concretes = AspectGen().mutate { it.add(Aspects.TERRA, 3).add(Aspects.AQUA, 1).add(Aspects.AETHER, 1) } + val leaves = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val saplings = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 4) } + val logs = AspectGen().mutate { it.add(Aspects.HERBA, 8) } + val flowers = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 1) } + val sugarCane = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.AQUA, 1) } + val table = AspectGen().mutate { it.add(Aspects.HERBA, 12) } + val researchTable = AspectGen().mutate { it.add(Aspects.HERBA, 12).add(Aspects.AETHER, 2) } + val wool1 = AspectGen().mutate { it.add(Aspects.CORPUS, 4).add(Aspects.ORNATUS, 2).add(Aspects.FABRICO, 4) } + val glassBlocksCheap = AspectGen().mutate { it.add(Aspects.VITREUS, 2) } + val glassPanes = AspectGen().mutate { it.add(Aspects.VITREUS, 1) } + val wool2 = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } + val torch = AspectGen().mutate { it.add(Aspects.LUX, 4) } + val snow = AspectGen().mutate { it.add(Aspects.AQUA, 1) } + val snowBlock = AspectGen().mutate { it.add(Aspects.AQUA, 4) } + val powderSnow = AspectGen().mutate { it.add(Aspects.AQUA, 2) } + val bedrock = AspectGen().mutate { it.add(Aspects.TERRA, 25).add(Aspects.TENEBRAE, 25) } + val eternalFlame = AspectGen().mutate { it.add(Aspects.LUX, 12).add(Aspects.IGNIS, 8) } + val crackedElementalStone = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } + val elementalStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } + val elementalCore = AspectGen().mutate { it.add(Aspects.TERRA, 6).add(Aspects.AETHER, 2) } + val craftingTable = AspectGen().mutate { it.add(Aspects.FABRICO, 8).add(Aspects.HERBA, 4) } + val arcaneWorkbench = AspectGen().mutate { it.add(Aspects.FABRICO, 12).add(Aspects.HERBA, 4).add(Aspects.AETHER, 2) } + val cauldron = AspectGen().mutate { it.add(Aspects.METALLUM, 56).add(Aspects.ALKIMIA, 8) } + val crucible = AspectGen().mutate { it.add(Aspects.METALLUM, 56).add(Aspects.ALKIMIA, 8).add(Aspects.AETHER, 2) } + val sealingJar = AspectGen().mutate { it.add(Aspects.VITREUS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.AETHER, 2) } + val tnt = AspectGen().mutate { it.add(Aspects.ALKIMIA, 8).add(Aspects.IGNIS, 8).add(Aspects.TERRA, 1) } + val tripwireHook = AspectGen().mutate { it.add(Aspects.MACHINA, 2).add(Aspects.METALLUM, 1) } + val heavyCore = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.INSTRUMENTUM, 6) } + val bamboo = AspectGen().mutate { it.add(Aspects.HERBA, 1) } + val bambooBlocks = AspectGen().mutate { it.add(Aspects.HERBA, 4) } fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { @@ -26,238 +105,86 @@ object ItemAspects { arcaneLens.save(this, T7Items.ARCANE_LENS) armadilloScute.save(this, Items.ARMADILLO_SCUTE) turtleScute.save(this, Items.TURTLE_SCUTE) - - item(Items.BLAZE_POWDER) { - it.add(Aspects.IGNIS, 2) - .add(Aspects.ALKIMIA, 1) - } - item(Tags.Items.GUNPOWDERS) { - it.add(Aspects.IGNIS, 4) - .add(Aspects.ALKIMIA, 2) - .add(Aspects.TERRA, 1) - } - item(Tags.Items.RODS_BLAZE) { - it.add(Aspects.IGNIS, 4) - .add(Aspects.ALKIMIA, 2) - .add(Aspects.CORPUS, 2) - } - item(Tags.Items.RODS_BREEZE) { - it.add(Aspects.AETHER, 6) - .add(Aspects.CORPUS, 2) - } - item(Items.WIND_CHARGE) { - it.add(Aspects.ALKIMIA, 4) - .add(Aspects.AETHER, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.FIRE_CHARGE) { - it.add(Aspects.ALKIMIA, 4) - .add(Aspects.IGNIS, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - item(T7Items.ROTTEN_BRAIN) { - it.add(Aspects.COGNITIO, 12) - .add(Aspects.HOSTILIS, 2) - .add(Aspects.CORPUS, 2) - } - item(Items.ROTTEN_FLESH) { - it.add(Aspects.HOSTILIS, 2) - .add(Aspects.CORPUS, 2) - } - item(Items.FLINT) { - it.add(Aspects.TERRA, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Tags.Items.FEATHERS) { - it.add(Aspects.INSTRUMENTUM, 1) - .add(Aspects.CORPUS, 2) - } - item(Tags.Items.ENDER_PEARLS) { - it.add(Aspects.INSTRUMENTUM, 4) - .add(Aspects.TENEBRAE, 4) - .add(Aspects.CORPUS, 2) - } - item(Items.ENDER_EYE) { - it.add(Aspects.INSTRUMENTUM, 4) - .add(Aspects.TENEBRAE, 4) - .add(Aspects.AETHER, 2) - } - item(Tags.Items.STRINGS) { - it.add(Aspects.CORPUS, 1) - .add(Aspects.FABRICO, 1) - } - item(Items.GHAST_TEAR) { - it.add(Aspects.HOSTILIS, 4) - .add(Aspects.ALKIMIA, 4) - } - item(Items.SUGAR) { - it.add(Aspects.HERBA, 2) - .add(Aspects.VICTUS, 1) - } - item(Items.PAPER) { - it.add(Aspects.COGNITIO, 1) - .add(Aspects.HERBA, 1) - } - item(Items.FIREWORK_ROCKET) { - it.add(Aspects.IGNIS, 1) - .add(Aspects.ORNATUS, 1) - } - item(Items.FIREWORK_STAR) { - it.add(Aspects.IGNIS, 1) - .add(Aspects.ORNATUS, 2) - } - item(Items.SNOWBALL) { it.add(Aspects.AQUA, 1) } - item(Items.NETHER_BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - item(Items.PRISMARINE_CRYSTALS) { it.add(Aspects.VITREUS, 4).add(Aspects.AQUA, 4).add(Aspects.LUX, 2) } - item(Items.PRISMARINE_SHARD) { it.add(Aspects.AQUA, 2).add(Aspects.TERRA, 2) } - item(Items.CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - item(Items.POPPED_CHORUS_FRUIT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - item(Items.CLAY_BALL) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - item(Items.BRICK) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - - item(Tags.Items.RODS_WOODEN) { it.add(Aspects.HERBA, 2) } - - item(Tags.Items.EGGS) { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } - - item(Tags.Items.CROPS_WHEAT) { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } - - item(Items.END_CRYSTAL) { - it.add(Aspects.VITREUS, 14) - .add(Aspects.IGNIS, 8) - .add(Aspects.TENEBRAE, 4) - .add(Aspects.AETHER, 4) - } - - item(Blocks.NETHER_WART) { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } - item(Blocks.CHORUS_PLANT) { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - item(Blocks.CHORUS_FLOWER) { it.add(Aspects.HERBA, 4).add(Aspects.TENEBRAE, 4) } - item(Tags.Items.NETHERRACKS) { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - item(Blocks.MUD) { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - item(Blocks.PACKED_MUD) { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - item(ItemTags.DIRT) { it.add(Aspects.TERRA, 1) } - item(Blocks.COARSE_DIRT) { it.add(Aspects.TERRA, 1) } - item(Tags.Items.GRAVELS) { it.add(Aspects.TERRA, 2) } - item(Tags.Items.STONES) { it.add(Aspects.TERRA, 2) } - item(Tags.Items.COBBLESTONES) { it.add(Aspects.TERRA, 2) } - item(Tags.Items.SANDS) { it.add(Aspects.TERRA, 2) } - item(Blocks.CLAY) { it.add(Aspects.TERRA, 4).add(Aspects.AQUA, 4) } - - item(Blocks.GRASS_BLOCK) { - it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) - } - item(Blocks.PODZOL) { - it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) - } - item(Blocks.SHORT_GRASS) { - it.add(Aspects.HERBA, 1) - } - item(Blocks.TALL_GRASS) { - it.add(Aspects.HERBA, 1) - } - - item(ItemTags.TERRACOTTA) { - it.add(Aspects.TERRA, 4) - .add(Aspects.IGNIS, 4) - .add(Aspects.ORNATUS, 1) - } - item(Tags.Items.CONCRETE_POWDERS) { - it.add(Aspects.TERRA, 3) - } - item(Tags.Items.CONCRETES) { - it.add(Aspects.TERRA, 3) - .add(Aspects.AQUA, 1) - .add(Aspects.AETHER, 1) - } - - item(ItemTags.LEAVES) { it.add(Aspects.HERBA, 2) } - item(ItemTags.SAPLINGS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 4) } - item(ItemTags.LOGS) { it.add(Aspects.HERBA, 8) } - item(ItemTags.FLOWERS) { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 1) } - - item(Blocks.SUGAR_CANE) { - it.add(Aspects.HERBA, 2) - .add(Aspects.AQUA, 1) - } - - item(T7Blocks.TABLE) { it.add(Aspects.HERBA, 12) } - item(T7Blocks.RESEARCH_TABLE) { - it.add(Aspects.HERBA, 12) - .add(Aspects.AETHER, 2) - } - - item(ItemTags.WOOL) { - it.add(Aspects.CORPUS, 4).add(Aspects.ORNATUS, 2).add(Aspects.FABRICO, 4) - } - - item(Tags.Items.GLASS_BLOCKS_CHEAP) { it.add(Aspects.VITREUS, 2) } - item(Tags.Items.GLASS_PANES) { it.add(Aspects.VITREUS, 1) } - - item(ItemTags.WOOL) { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } - - item(Blocks.TORCH) { it.add(Aspects.LUX, 4) } - - item(Blocks.SNOW) { it.add(Aspects.AQUA, 1) } - item(Blocks.SNOW_BLOCK) { it.add(Aspects.AQUA, 4) } - item(Blocks.POWDER_SNOW) { it.add(Aspects.AQUA, 2) } - - item(Blocks.BEDROCK) { - it.add(Aspects.TERRA, 25) - .add(Aspects.TENEBRAE, 25) - } - item(T7Blocks.ETERNAL_FLAME) { - it.add(Aspects.LUX, 12) - .add(Aspects.IGNIS, 8) - } - item(T7Blocks.CRACKED_ELEMENTAL_STONE) { - it.add(Aspects.TERRA, 4) - .add(Aspects.AETHER, 1) - } - item(T7Blocks.ELEMENTAL_STONE_BRICKS) { - it.add(Aspects.TERRA, 4) - .add(Aspects.AETHER, 1) - } - item(T7Blocks.ELEMENTAL_CORE) { - it.add(Aspects.TERRA, 6) - .add(Aspects.AETHER, 2) - } - item(Blocks.CRAFTING_TABLE) { - it.add(Aspects.FABRICO, 8) - .add(Aspects.HERBA, 4) - } - item(T7Blocks.ARCANE_WORKBENCH) { - it.add(Aspects.FABRICO, 12) - .add(Aspects.HERBA, 4) - .add(Aspects.AETHER, 2) - } - item(Items.CAULDRON) { - it.add(Aspects.METALLUM, 56) - .add(Aspects.ALKIMIA, 8) - } - item(T7Blocks.CRUCIBLE) { - it.add(Aspects.METALLUM, 56) - .add(Aspects.ALKIMIA, 8) - .add(Aspects.AETHER, 2) - } - item(T7Blocks.SEALING_JAR) { - it.add(Aspects.VITREUS, 4) - .add(Aspects.ALKIMIA, 2) - .add(Aspects.AETHER, 2) - } - item(Blocks.TNT) { - it.add(Aspects.ALKIMIA, 8) - .add(Aspects.IGNIS, 8) - .add(Aspects.TERRA, 1) - } - item(Blocks.TRIPWIRE_HOOK) { - it.add(Aspects.MACHINA, 2) - .add(Aspects.METALLUM, 1) - } - item(Blocks.HEAVY_CORE) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.INSTRUMENTUM, 6) - } - item(Blocks.BAMBOO) { it.add(Aspects.HERBA, 1) } - item(ItemTags.BAMBOO_BLOCKS) { it.add(Aspects.HERBA, 4) } + blazePowder.save(this, Items.BLAZE_POWDER) + gunpowders.save(this, Tags.Items.GUNPOWDERS) + rodsBlaze.save(this, Tags.Items.RODS_BLAZE) + rodsBreeze.save(this, Tags.Items.RODS_BREEZE) + windCharge.save(this, Items.WIND_CHARGE) + fireCharge.save(this, Items.FIRE_CHARGE) + rottenBrain.save(this, T7Items.ROTTEN_BRAIN) + rottenFlesh.save(this, Items.ROTTEN_FLESH) + flint.save(this, Items.FLINT) + feathers.save(this, Tags.Items.FEATHERS) + enderPearls.save(this, Tags.Items.ENDER_PEARLS) + enderEye.save(this, Items.ENDER_EYE) + strings.save(this, Tags.Items.STRINGS) + ghastTear.save(this, Items.GHAST_TEAR) + sugar.save(this, Items.SUGAR) + paper.save(this, Items.PAPER) + fireworkRocket.save(this, Items.FIREWORK_ROCKET) + fireworkStar.save(this, Items.FIREWORK_STAR) + snowball.save(this, Items.SNOWBALL) + netherBrick.save(this, Items.NETHER_BRICK) + prismarineCrystals.save(this, Items.PRISMARINE_CRYSTALS) + prismarineShard.save(this, Items.PRISMARINE_SHARD) + chorusFruit.save(this, Items.CHORUS_FRUIT) + poppedChorusFruit.save(this, Items.POPPED_CHORUS_FRUIT) + clayBall.save(this, Items.CLAY_BALL) + brick.save(this, Items.BRICK) + rodsWooden.save(this, Tags.Items.RODS_WOODEN) + eggs.save(this, Tags.Items.EGGS) + cropsWheat.save(this, Tags.Items.CROPS_WHEAT) + endCrystal.save(this, Items.END_CRYSTAL) + netherWart.save(this, Blocks.NETHER_WART) + chorusPlant.save(this, Blocks.CHORUS_PLANT) + chorusFlower.save(this, Blocks.CHORUS_FLOWER) + netherracks.save(this, Tags.Items.NETHERRACKS) + mud.save(this, Blocks.MUD) + packedMud.save(this, Blocks.PACKED_MUD) + dirt.save(this, ItemTags.DIRT) + coarseDirt.save(this, Blocks.COARSE_DIRT) + gravels.save(this, Tags.Items.GRAVELS) + stones.save(this, Tags.Items.STONES) + cobblestones.save(this, Tags.Items.COBBLESTONES) + sands.save(this, Tags.Items.SANDS) + clay.save(this, Blocks.CLAY) + grassBlock.save(this, Blocks.GRASS_BLOCK) + podzol.save(this, Blocks.PODZOL) + shortGrass.save(this, Blocks.SHORT_GRASS) + tallGrass.save(this, Blocks.TALL_GRASS) + terracotta.save(this, ItemTags.TERRACOTTA) + concretePowders.save(this, Tags.Items.CONCRETE_POWDERS) + concretes.save(this, Tags.Items.CONCRETES) + leaves.save(this, ItemTags.LEAVES) + saplings.save(this, ItemTags.SAPLINGS) + logs.save(this, ItemTags.LOGS) + flowers.save(this, ItemTags.FLOWERS) + sugarCane.save(this, Blocks.SUGAR_CANE) + table.save(this, T7Blocks.TABLE) + researchTable.save(this, T7Blocks.RESEARCH_TABLE) + wool1.save(this, ItemTags.WOOL) + glassBlocksCheap.save(this, Tags.Items.GLASS_BLOCKS_CHEAP) + glassPanes.save(this, Tags.Items.GLASS_PANES) + wool2.save(this, ItemTags.WOOL) + torch.save(this, Blocks.TORCH) + snow.save(this, Blocks.SNOW) + snowBlock.save(this, Blocks.SNOW_BLOCK) + powderSnow.save(this, Blocks.POWDER_SNOW) + bedrock.save(this, Blocks.BEDROCK) + eternalFlame.save(this, T7Blocks.ETERNAL_FLAME) + crackedElementalStone.save(this, T7Blocks.CRACKED_ELEMENTAL_STONE) + elementalStoneBricks.save(this, T7Blocks.ELEMENTAL_STONE_BRICKS) + elementalCore.save(this, T7Blocks.ELEMENTAL_CORE) + craftingTable.save(this, Blocks.CRAFTING_TABLE) + arcaneWorkbench.save(this, T7Blocks.ARCANE_WORKBENCH) + cauldron.save(this, Items.CAULDRON) + crucible.save(this, T7Blocks.CRUCIBLE) + sealingJar.save(this, T7Blocks.SEALING_JAR) + tnt.save(this, Blocks.TNT) + tripwireHook.save(this, Blocks.TRIPWIRE_HOOK) + heavyCore.save(this, Blocks.HEAVY_CORE) + bamboo.save(this, Blocks.BAMBOO) + bambooBlocks.save(this, ItemTags.BAMBOO_BLOCKS) } } -} \ No newline at end of file +} From 9d8b5f62b0c418d2feaafba8b6722047bbf7806d Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 17 Jan 2026 16:42:54 +0200 Subject: [PATCH 19/40] basic tools --- .../thavma/data_maps/item/aspect_content.json | 26 ++ .../providers/aspects/AspectDatagenHelper.kt | 32 +++ .../data/providers/aspects/ToolAspects.kt | 235 ++++++------------ 3 files changed, 138 insertions(+), 155 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 80988bb2..b5577dcd 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -712,6 +712,7 @@ "thavma:terra": 2 }, "minecraft:diamond_axe": { + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:vitreus": 24 }, @@ -728,6 +729,7 @@ "thavma:vitreus": 40 }, "minecraft:diamond_hoe": { + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:vitreus": 16 }, @@ -740,14 +742,17 @@ "thavma:vitreus": 56 }, "minecraft:diamond_pickaxe": { + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:vitreus": 24 }, "minecraft:diamond_shovel": { + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:vitreus": 8 }, "minecraft:diamond_sword": { + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:vitreus": 16 }, @@ -831,6 +836,7 @@ "thavma:terra": 4 }, "minecraft:golden_axe": { + "thavma:herba": 4, "thavma:instrumentum": 2, "thavma:metallum": 12 }, @@ -847,6 +853,7 @@ "thavma:praemunio": 4 }, "minecraft:golden_hoe": { + "thavma:herba": 4, "thavma:instrumentum": 2, "thavma:metallum": 8 }, @@ -859,14 +866,17 @@ "thavma:praemunio": 6 }, "minecraft:golden_pickaxe": { + "thavma:herba": 4, "thavma:instrumentum": 2, "thavma:metallum": 12 }, "minecraft:golden_shovel": { + "thavma:herba": 4, "thavma:instrumentum": 2, "thavma:metallum": 4 }, "minecraft:golden_sword": { + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:metallum": 8 }, @@ -891,6 +901,7 @@ "thavma:metallum": 16 }, "minecraft:iron_axe": { + "thavma:herba": 4, "thavma:instrumentum": 3, "thavma:metallum": 24 }, @@ -907,6 +918,7 @@ "thavma:praemunio": 4 }, "minecraft:iron_hoe": { + "thavma:herba": 4, "thavma:instrumentum": 3, "thavma:metallum": 16 }, @@ -919,14 +931,17 @@ "thavma:praemunio": 10 }, "minecraft:iron_pickaxe": { + "thavma:herba": 4, "thavma:instrumentum": 3, "thavma:metallum": 24 }, "minecraft:iron_shovel": { + "thavma:herba": 4, "thavma:instrumentum": 3, "thavma:metallum": 8 }, "minecraft:iron_sword": { + "thavma:herba": 2, "thavma:instrumentum": 3, "thavma:metallum": 16 }, @@ -1095,6 +1110,7 @@ "thavma:ignis": 2 }, "minecraft:netherite_axe": { + "thavma:herba": 4, "thavma:instrumentum": 6, "thavma:metallum": 48, "thavma:tenebrae": 12 @@ -1118,6 +1134,7 @@ "thavma:vitreus": 40 }, "minecraft:netherite_hoe": { + "thavma:herba": 4, "thavma:instrumentum": 6, "thavma:metallum": 32, "thavma:tenebrae": 8 @@ -1129,6 +1146,7 @@ "thavma:vitreus": 56 }, "minecraft:netherite_pickaxe": { + "thavma:herba": 4, "thavma:instrumentum": 6, "thavma:metallum": 48, "thavma:tenebrae": 12 @@ -1139,11 +1157,13 @@ "thavma:terra": 2 }, "minecraft:netherite_shovel": { + "thavma:herba": 4, "thavma:instrumentum": 6, "thavma:metallum": 16, "thavma:tenebrae": 4 }, "minecraft:netherite_sword": { + "thavma:herba": 2, "thavma:instrumentum": 6, "thavma:metallum": 32, "thavma:tenebrae": 8 @@ -1883,6 +1903,7 @@ }, "thavma:thavmite_axe": { "thavma:aether": 12, + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:metallum": 24 }, @@ -1902,6 +1923,7 @@ }, "thavma:thavmite_hammer": { "thavma:aether": 24, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:metallum": 48 }, @@ -1912,6 +1934,7 @@ }, "thavma:thavmite_hoe": { "thavma:aether": 8, + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:metallum": 16 }, @@ -1926,6 +1949,7 @@ }, "thavma:thavmite_pickaxe": { "thavma:aether": 12, + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:metallum": 24 }, @@ -1935,11 +1959,13 @@ }, "thavma:thavmite_shovel": { "thavma:aether": 4, + "thavma:herba": 4, "thavma:instrumentum": 4, "thavma:metallum": 8 }, "thavma:thavmite_sword": { "thavma:aether": 8, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:metallum": 16 } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt index f8c38a38..26d051d0 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt @@ -45,23 +45,55 @@ object Mutations { val STORAGE_BLOCK_9 = { it: AspectMap -> it.scale(9) } + val PLATING = { it: AspectMap -> + it.scale(2) + } fun helmet(praemunio: Int) = { it: AspectMap -> it.scale(5).add(Aspects.PRAEMUNIO, praemunio) } + fun chestplate(praemunio: Int) = { it: AspectMap -> it.scale(8).add(Aspects.PRAEMUNIO, praemunio) } + fun leggings(praemunio: Int) = { it: AspectMap -> it.scale(7).add(Aspects.PRAEMUNIO, praemunio) } + fun boots(praemunio: Int) = { it: AspectMap -> it.scale(4).add(Aspects.PRAEMUNIO, praemunio) } + fun horseArmor(praemunio: Int) = { it: AspectMap -> it.scale(7).add(Aspects.PRAEMUNIO, praemunio) } + fun wolfArmor(praemunio: Int) = { it: AspectMap -> it.scale(6).add(Aspects.PRAEMUNIO, praemunio) } + + fun sword(stick: AspectGen, instrumentum: Int) = { it: AspectMap -> + it.scale(2).add(stick.aspects).add(Aspects.INSTRUMENTUM, instrumentum) + } + + fun pickaxe(stick: AspectGen, instrumentum: Int) = { it: AspectMap -> + it.scale(3).add(stick.aspects.scale(2)).add(Aspects.INSTRUMENTUM, instrumentum) + } + + fun axe(stick: AspectGen, instrumentum: Int) = { it: AspectMap -> + it.scale(3).add(stick.aspects.scale(2)).add(Aspects.INSTRUMENTUM, instrumentum) + } + + fun hoe(stick: AspectGen, instrumentum: Int) = { it: AspectMap -> + it.scale(2).add(stick.aspects.scale(2)).add(Aspects.INSTRUMENTUM, instrumentum) + } + + fun shovel(stick: AspectGen, instrumentum: Int) = { it: AspectMap -> + it.scale(1).add(stick.aspects.scale(2)).add(Aspects.INSTRUMENTUM, instrumentum) + } + + fun hammer(stick: AspectGen, instrumentum: Int) = { it: AspectMap -> + it.scale(6).add(stick.aspects).add(Aspects.INSTRUMENTUM, instrumentum) + } } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt index 1a0ae71d..47bc8e90 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt @@ -11,6 +11,49 @@ import net.minecraft.world.item.Items import net.neoforged.neoforge.common.Tags object ToolAspects { + val ironSword = MineralAspects.iron.mutate(Mutations.sword(ItemAspects.rodsWooden, 3)) + val ironPickaxe = MineralAspects.iron.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 3)) + val ironAxe = MineralAspects.iron.mutate(Mutations.axe(ItemAspects.rodsWooden, 3)) + val ironShovel = MineralAspects.iron.mutate(Mutations.shovel(ItemAspects.rodsWooden, 3)) + val ironHoe = MineralAspects.iron.mutate(Mutations.hoe(ItemAspects.rodsWooden, 3)) + + val thavmiteSword = MineralAspects.thavmite.mutate(Mutations.sword(ItemAspects.rodsWooden, 4)) + val thavmitePickaxe = MineralAspects.thavmite.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 4)) + val thavmiteAxe = MineralAspects.thavmite.mutate(Mutations.axe(ItemAspects.rodsWooden, 4)) + val thavmiteShovel = MineralAspects.thavmite.mutate(Mutations.shovel(ItemAspects.rodsWooden, 4)) + val thavmiteHoe = MineralAspects.thavmite.mutate(Mutations.hoe(ItemAspects.rodsWooden, 4)) + val thavmiteHammer = MineralAspects.thavmite.mutate(Mutations.hammer(ItemAspects.rodsWooden, 4)) + + val goldenSword = MineralAspects.gold.mutate(Mutations.sword(ItemAspects.rodsWooden, 2)) + val goldenPickaxe = MineralAspects.gold.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 2)) + val goldenAxe = MineralAspects.gold.mutate(Mutations.axe(ItemAspects.rodsWooden, 2)) + val goldenShovel = MineralAspects.gold.mutate(Mutations.shovel(ItemAspects.rodsWooden, 2)) + val goldenHoe = MineralAspects.gold.mutate(Mutations.hoe(ItemAspects.rodsWooden, 2)) + + val diamondSword = MineralAspects.diamond.mutate(Mutations.sword(ItemAspects.rodsWooden, 4)) + val diamondPickaxe = MineralAspects.diamond.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 4)) + val diamondAxe = MineralAspects.diamond.mutate(Mutations.axe(ItemAspects.rodsWooden, 4)) + val diamondShovel = MineralAspects.diamond.mutate(Mutations.shovel(ItemAspects.rodsWooden, 4)) + val diamondHoe = MineralAspects.diamond.mutate(Mutations.hoe(ItemAspects.rodsWooden, 4)) + + val netheriteSword = MineralAspects.netherite.mutate(Mutations.sword(ItemAspects.rodsWooden, 6)) + val netheritePickaxe = MineralAspects.netherite.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 6)) + val netheriteAxe = MineralAspects.netherite.mutate(Mutations.axe(ItemAspects.rodsWooden, 6)) + val netheriteShovel = MineralAspects.netherite.mutate(Mutations.shovel(ItemAspects.rodsWooden, 6)) + val netheriteHoe = MineralAspects.netherite.mutate(Mutations.hoe(ItemAspects.rodsWooden, 6)) + + val ironPlating = MineralAspects.iron.mutate(Mutations.PLATING) + val goldPlating = MineralAspects.gold.mutate(Mutations.PLATING) + val orichalcumPlating = MineralAspects.orichalcum.mutate(Mutations.PLATING) + val thavmitePlating = MineralAspects.thavmite.mutate(Mutations.PLATING) + + val arrows = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 2) } + val mace = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.AETHER, 8) } + val trident = AspectGen().mutate { it.add(Aspects.METALLUM, 12).add(Aspects.AQUA, 8) } + val bow = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 8).add(Aspects.HERBA, 2).add(Aspects.FABRICO, 2) } + val crossbow = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 8).add(Aspects.METALLUM, 4).add(Aspects.FABRICO, 2) } + val totemOfUndying = AspectGen().mutate { it.add(Aspects.VICTUS, 16).add(Aspects.AETHER, 8) } + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { item(Items.WOODEN_SWORD) { @@ -55,166 +98,48 @@ object ToolAspects { .add(Aspects.INSTRUMENTUM, 2) } - item(Items.IRON_SWORD) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.INSTRUMENTUM, 3) - } - item(Items.IRON_PICKAXE) { - it.add(Aspects.METALLUM, 24) - .add(Aspects.INSTRUMENTUM, 3) - } - item(Items.IRON_AXE) { - it.add(Aspects.METALLUM, 24) - .add(Aspects.INSTRUMENTUM, 3) - } - item(Items.IRON_SHOVEL) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.INSTRUMENTUM, 3) - } - item(Items.IRON_HOE) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.INSTRUMENTUM, 3) - } + ironSword.save(this, Items.IRON_SWORD) + ironPickaxe.save(this, Items.IRON_PICKAXE) + ironAxe.save(this, Items.IRON_AXE) + ironShovel.save(this, Items.IRON_SHOVEL) + ironHoe.save(this, Items.IRON_HOE) - item(T7Items.THAVMITE_SWORD) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.AETHER, 8) - .add(Aspects.INSTRUMENTUM, 4) - } - item(T7Items.THAVMITE_PICKAXE) { - it.add(Aspects.METALLUM, 24) - .add(Aspects.AETHER, 12) - .add(Aspects.INSTRUMENTUM, 4) - } - item(T7Items.THAVMITE_AXE) { - it.add(Aspects.METALLUM, 24) - .add(Aspects.AETHER, 12) - .add(Aspects.INSTRUMENTUM, 4) - } - item(T7Items.THAVMITE_SHOVEL) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.AETHER, 4) - .add(Aspects.INSTRUMENTUM, 4) - } - item(T7Items.THAVMITE_HOE) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.AETHER, 8) - .add(Aspects.INSTRUMENTUM, 4) - } - item(T7Items.THAVMITE_HAMMER) { - it.add(Aspects.METALLUM, 48) - .add(Aspects.AETHER, 24) - .add(Aspects.INSTRUMENTUM, 4) - } + thavmiteSword.save(this, T7Items.THAVMITE_SWORD) + thavmitePickaxe.save(this, T7Items.THAVMITE_PICKAXE) + thavmiteAxe.save(this, T7Items.THAVMITE_AXE) + thavmiteShovel.save(this, T7Items.THAVMITE_SHOVEL) + thavmiteHoe.save(this, T7Items.THAVMITE_HOE) + thavmiteHammer.save(this, T7Items.THAVMITE_HAMMER) - item(Items.GOLDEN_SWORD) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.GOLDEN_PICKAXE) { - it.add(Aspects.METALLUM, 12) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.GOLDEN_AXE) { - it.add(Aspects.METALLUM, 12) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.GOLDEN_SHOVEL) { - it.add(Aspects.METALLUM, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.GOLDEN_HOE) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.INSTRUMENTUM, 2) - } + goldenSword.save(this, Items.GOLDEN_SWORD) + goldenPickaxe.save(this, Items.GOLDEN_PICKAXE) + goldenAxe.save(this, Items.GOLDEN_AXE) + goldenShovel.save(this, Items.GOLDEN_SHOVEL) + goldenHoe.save(this, Items.GOLDEN_HOE) - item(Items.DIAMOND_SWORD) { - it.add(Aspects.VITREUS, 16) - .add(Aspects.INSTRUMENTUM, 4) - } - item(Items.DIAMOND_PICKAXE) { - it.add(Aspects.VITREUS, 24) - .add(Aspects.INSTRUMENTUM, 4) - } - item(Items.DIAMOND_AXE) { - it.add(Aspects.VITREUS, 24) - .add(Aspects.INSTRUMENTUM, 4) - } - item(Items.DIAMOND_SHOVEL) { - it.add(Aspects.VITREUS, 8) - .add(Aspects.INSTRUMENTUM, 4) - } - item(Items.DIAMOND_HOE) { - it.add(Aspects.VITREUS, 16) - .add(Aspects.INSTRUMENTUM, 4) - } + diamondSword.save(this, Items.DIAMOND_SWORD) + diamondPickaxe.save(this, Items.DIAMOND_PICKAXE) + diamondAxe.save(this, Items.DIAMOND_AXE) + diamondShovel.save(this, Items.DIAMOND_SHOVEL) + diamondHoe.save(this, Items.DIAMOND_HOE) - item(Items.NETHERITE_SWORD) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.INSTRUMENTUM, 6) - .add(Aspects.TENEBRAE, 8) - } - item(Items.NETHERITE_PICKAXE) { - it.add(Aspects.METALLUM, 48) - .add(Aspects.INSTRUMENTUM, 6) - .add(Aspects.TENEBRAE, 12) - } - item(Items.NETHERITE_AXE) { - it.add(Aspects.METALLUM, 48) - .add(Aspects.INSTRUMENTUM, 6) - .add(Aspects.TENEBRAE, 12) - } - item(Items.NETHERITE_SHOVEL) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.INSTRUMENTUM, 6) - .add(Aspects.TENEBRAE, 4) - } - item(Items.NETHERITE_HOE) { - it.add(Aspects.METALLUM, 32) - .add(Aspects.INSTRUMENTUM, 6) - .add(Aspects.TENEBRAE, 8) - } + netheriteSword.save(this, Items.NETHERITE_SWORD) + netheritePickaxe.save(this, Items.NETHERITE_PICKAXE) + netheriteAxe.save(this, Items.NETHERITE_AXE) + netheriteShovel.save(this, Items.NETHERITE_SHOVEL) + netheriteHoe.save(this, Items.NETHERITE_HOE) - item(T7Items.IRON_PLATING) { - it.add(Aspects.METALLUM, 16) - } - item(T7Items.GOLD_PLATING) { - it.add(Aspects.METALLUM, 8) - } - item(T7Items.ORICHALCUM_PLATING) { - it.add(Aspects.METALLUM, 8) - .add(Aspects.INSTRUMENTUM, 8) - } - item(T7Items.THAVMITE_PLATING) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.AETHER, 8) - } + ironPlating.save(this, T7Items.IRON_PLATING) + goldPlating.save(this, T7Items.GOLD_PLATING) + orichalcumPlating.save(this, T7Items.ORICHALCUM_PLATING) + thavmitePlating.save(this, T7Items.THAVMITE_PLATING) - item(ItemTags.ARROWS) { - it.add(Aspects.INSTRUMENTUM, 2) - } - item(Items.MACE) { - it.add(Aspects.METALLUM, 16) - .add(Aspects.AETHER, 8) - } - item(Items.TRIDENT) { - it.add(Aspects.METALLUM, 12) - .add(Aspects.AQUA, 8) - } - item(Tags.Items.TOOLS_BOW) { - it.add(Aspects.INSTRUMENTUM, 8) - .add(Aspects.HERBA, 2) - .add(Aspects.FABRICO, 2) - } - item(Tags.Items.TOOLS_CROSSBOW) { - it.add(Aspects.INSTRUMENTUM, 8) - .add(Aspects.METALLUM, 4) - .add(Aspects.FABRICO, 2) - } - item(Items.TOTEM_OF_UNDYING) { - it.add(Aspects.VICTUS, 16) - .add(Aspects.AETHER, 8) - } + arrows.save(this, ItemTags.ARROWS) + mace.save(this, Items.MACE) + trident.save(this, Items.TRIDENT) + bow.save(this, Tags.Items.TOOLS_BOW) + crossbow.save(this, Tags.Items.TOOLS_CROSSBOW) + totemOfUndying.save(this, Items.TOTEM_OF_UNDYING) } } -} \ No newline at end of file +} From 89633e1b64c53a10d43181aa53fae4ff6ef2d336 Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 17 Jan 2026 17:34:55 +0200 Subject: [PATCH 20/40] block families --- .../thavma/data_maps/item/aspect_content.json | 23 +- .../init/data/providers/T7DataMapProvider.kt | 51 --- .../providers/aspects/AspectDatagenHelper.kt | 17 + .../providers/aspects/BlockFamilyAspects.kt | 384 ++++++++---------- .../data/providers/aspects/ToolAspects.kt | 65 ++- 5 files changed, 226 insertions(+), 314 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index b5577dcd..3b5dd5a7 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -1508,8 +1508,9 @@ "thavma:terra": 2 }, "minecraft:stone_axe": { + "thavma:herba": 4, "thavma:instrumentum": 2, - "thavma:terra": 12 + "thavma:terra": 6 }, "minecraft:stone_brick_slab": { "thavma:terra": 1 @@ -1527,19 +1528,22 @@ "thavma:terra": 2 }, "minecraft:stone_hoe": { + "thavma:herba": 4, "thavma:instrumentum": 2, - "thavma:terra": 8 + "thavma:terra": 4 }, "minecraft:stone_pickaxe": { + "thavma:herba": 4, "thavma:instrumentum": 2, - "thavma:terra": 12 + "thavma:terra": 6 }, "minecraft:stone_pressure_plate": { "thavma:terra": 4 }, "minecraft:stone_shovel": { + "thavma:herba": 4, "thavma:instrumentum": 2, - "thavma:terra": 4 + "thavma:terra": 2 }, "minecraft:stone_slab": { "thavma:terra": 1 @@ -1548,8 +1552,9 @@ "thavma:terra": 2 }, "minecraft:stone_sword": { + "thavma:herba": 2, "thavma:instrumentum": 2, - "thavma:terra": 8 + "thavma:terra": 4 }, "minecraft:sugar": { "thavma:herba": 2, @@ -1741,7 +1746,7 @@ "thavma:praemunio": 6 }, "minecraft:wooden_axe": { - "thavma:herba": 12, + "thavma:herba": 10, "thavma:instrumentum": 1 }, "minecraft:wooden_hoe": { @@ -1749,15 +1754,15 @@ "thavma:instrumentum": 1 }, "minecraft:wooden_pickaxe": { - "thavma:herba": 12, + "thavma:herba": 10, "thavma:instrumentum": 1 }, "minecraft:wooden_shovel": { - "thavma:herba": 4, + "thavma:herba": 6, "thavma:instrumentum": 1 }, "minecraft:wooden_sword": { - "thavma:herba": 8, + "thavma:herba": 6, "thavma:instrumentum": 1 }, "thavma:aether_infused_deepslate": { diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt index e29b9c9e..aa2ef3d3 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt @@ -1,18 +1,13 @@ package me.alegian.thavma.impl.init.data.providers import me.alegian.thavma.impl.common.aspect.AspectMap -import me.alegian.thavma.impl.common.item.itemResourceKey import me.alegian.thavma.impl.init.data.providers.aspects.* import net.minecraft.core.HolderLookup import net.minecraft.core.registries.BuiltInRegistries -import net.minecraft.data.BlockFamily import net.minecraft.data.PackOutput import net.minecraft.resources.ResourceKey import net.minecraft.tags.TagKey import net.minecraft.world.entity.EntityType -import net.minecraft.world.item.Item -import net.minecraft.world.level.ItemLike -import net.minecraft.world.level.block.Block import net.neoforged.neoforge.common.data.DataMapProvider import net.neoforged.neoforge.common.data.DataMapProvider.Builder import java.util.concurrent.CompletableFuture @@ -33,52 +28,6 @@ class T7DataMapProvider(packOutput: PackOutput, lookupProvider: CompletableFutur } } -fun Builder.blockFamily(blockFamily: BlockFamily, builderConsumer: Consumer) { - val aspectBuilder = AspectMap.builder() - builderConsumer.accept(aspectBuilder) - val aspects = aspectBuilder.build() - - fun addFamilyVariant(block: Block?, multiplier: Number) { - if (block == null) return - add(block.itemResourceKey, aspects.scale(multiplier), false) - } - - addFamilyVariant(blockFamily.baseBlock, 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.BUTTON), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.CHISELED), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.CRACKED), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.CUT), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.DOOR), 2) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.CUSTOM_FENCE), 1.5) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.FENCE), 1.5) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.CUSTOM_FENCE_GATE), 4) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.FENCE_GATE), 4) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.MOSAIC), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.SIGN), 2) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.SLAB), 0.5) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.STAIRS), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.PRESSURE_PLATE), 2) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.POLISHED), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.TRAPDOOR), 3) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.WALL), 1) - addFamilyVariant(blockFamily.get(BlockFamily.Variant.WALL_SIGN), 2) -} - -fun Builder.item(item: ItemLike, builderConsumer: Consumer) { - val aspectBuilder = AspectMap.builder() - builderConsumer.accept(aspectBuilder) - add(item.itemResourceKey, aspectBuilder.build(), false) -} - -fun Builder.item(sup: Supplier, builderConsumer: Consumer) = - item(sup.get(), builderConsumer) - -fun Builder.item(tag: TagKey, builderConsumer: Consumer) { - val aspectBuilder = AspectMap.builder() - builderConsumer.accept(aspectBuilder) - add(tag, aspectBuilder.build(), false) -} - fun Builder>.entity(entityType: EntityType<*>, builderConsumer: Consumer) { val aspectBuilder = AspectMap.builder() builderConsumer.accept(aspectBuilder) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt index 26d051d0..05c20dc5 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/AspectDatagenHelper.kt @@ -49,6 +49,23 @@ object Mutations { it.scale(2) } + val BUTTON = { it: AspectMap -> it.scale(1) } + val CHISELED = { it: AspectMap -> it.scale(1) } + val CRACKED = { it: AspectMap -> it.scale(1) } + val CUT = { it: AspectMap -> it.scale(1) } + val MOSAIC = { it: AspectMap -> it.scale(1) } + val STAIRS = { it: AspectMap -> it.scale(1) } + val POLISHED = { it: AspectMap -> it.scale(1) } + val WALL = { it: AspectMap -> it.scale(1) } + val DOOR = { it: AspectMap -> it.scale(2) } + val SIGN = { it: AspectMap -> it.scale(2) } + val PRESSURE_PLATE = { it: AspectMap -> it.scale(2) } + val WALL_SIGN = { it: AspectMap -> it.scale(2) } + val FENCE = { it: AspectMap -> it.scale(1.5) } + val FENCE_GATE = { it: AspectMap -> it.scale(4) } + val SLAB = { it: AspectMap -> it.scale(0.5) } + val TRAPDOOR = { it: AspectMap -> it.scale(3) } + fun helmet(praemunio: Int) = { it: AspectMap -> it.scale(5).add(Aspects.PRAEMUNIO, praemunio) } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt index cc9c42ba..ce2b0540 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt @@ -1,225 +1,185 @@ package me.alegian.thavma.impl.init.data.providers.aspects +import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.init.data.T7BlockFamilies import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider -import me.alegian.thavma.impl.init.data.providers.blockFamily import me.alegian.thavma.impl.init.registries.T7DataMaps import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.core.HolderLookup import net.minecraft.data.BlockFamilies +import net.minecraft.data.BlockFamily +import net.minecraft.world.item.Item +import net.minecraft.world.level.block.Block +import net.neoforged.neoforge.common.data.DataMapProvider.Builder object BlockFamilyAspects { + val acaciaPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val cherryPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val birchPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val crimsonPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + val junglePlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val oakPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val darkOakPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val sprucePlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val warpedPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + val mangrovePlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val bambooPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val bambooMosaic = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val mudBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val andesite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val polishedAndesite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val blackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } + val polishedBlackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } + val polishedBlackstoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } + val bricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } + val endStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) } + val mossyStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val copperBlock = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val cutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedCopperBlock = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val exposedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val exposedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedExposedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedExposedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val weatheredCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val weatheredCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedWeatheredCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedWeatheredCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val oxidizedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val oxidizedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedOxidizedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val waxedOxidizedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } + val cobblestone = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val mossyCobblestone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val diorite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val polishedDiorite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val granite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val polishedGranite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val tuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val polishedTuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val tuffBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val netherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } + val redNetherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2).add(Aspects.HERBA, 2) } + val prismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } + val purpur = AspectGen().mutate { it.add(Aspects.TENEBRAE, 2).add(Aspects.HERBA, 2) } + val prismarineBricks = AspectGen().mutate { it.add(Aspects.AQUA, 8).add(Aspects.TERRA, 8) } + val darkPrismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } + val quartz = AspectGen().mutate { it.add(Aspects.VITREUS, 16).add(Aspects.IGNIS, 4) } + val smoothQuartz = AspectGen().mutate { it.add(Aspects.VITREUS, 16).add(Aspects.IGNIS, 4) } + val sandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val cutSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val smoothSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val redSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val cutRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val smoothRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val stone = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val stoneBrick = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val deepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val cobbledDeepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val polishedDeepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val deepslateBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val deepslateTiles = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val greatwoodPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val elementalStone = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } + fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) = datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { - blockFamily(BlockFamilies.ACACIA_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.CHERRY_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.BIRCH_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.CRIMSON_PLANKS) { - it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) - } - blockFamily(BlockFamilies.JUNGLE_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.OAK_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.DARK_OAK_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.SPRUCE_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.WARPED_PLANKS) { - it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) - } - blockFamily(BlockFamilies.MANGROVE_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.BAMBOO_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.BAMBOO_MOSAIC) { - it.add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.MUD_BRICKS) { - it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.ANDESITE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.POLISHED_ANDESITE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.BLACKSTONE) { - it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) - } - blockFamily(BlockFamilies.POLISHED_BLACKSTONE) { - it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) - } - blockFamily(BlockFamilies.POLISHED_BLACKSTONE_BRICKS) { - it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) - } - blockFamily(BlockFamilies.BRICKS) { - it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) - } - blockFamily(BlockFamilies.END_STONE_BRICKS) { - it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) - } - blockFamily(BlockFamilies.MOSSY_STONE_BRICKS) { - it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.COPPER_BLOCK) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_COPPER_BLOCK) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.EXPOSED_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.EXPOSED_CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_EXPOSED_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_EXPOSED_CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WEATHERED_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WEATHERED_CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_WEATHERED_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_WEATHERED_CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.OXIDIZED_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.OXIDIZED_CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_OXIDIZED_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.WAXED_OXIDIZED_CUT_COPPER) { - it.add(Aspects.METALLUM, 36) - } - blockFamily(BlockFamilies.COBBLESTONE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.MOSSY_COBBLESTONE) { - it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.DIORITE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.POLISHED_DIORITE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.GRANITE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.POLISHED_GRANITE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.TUFF) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.POLISHED_TUFF) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.TUFF_BRICKS) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.NETHER_BRICKS) { - it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) - } - blockFamily(BlockFamilies.RED_NETHER_BRICKS) { - it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2).add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.PRISMARINE) { - it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.PURPUR) { - it.add(Aspects.TENEBRAE, 2).add(Aspects.HERBA, 2) - } - blockFamily(BlockFamilies.PRISMARINE_BRICKS) { - it.add(Aspects.AQUA, 8).add(Aspects.TERRA, 8) - } - blockFamily(BlockFamilies.DARK_PRISMARINE) { - it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.QUARTZ) { - it.add(Aspects.VITREUS, 16) - .add(Aspects.IGNIS, 4) - } - blockFamily(BlockFamilies.SMOOTH_QUARTZ) { - it.add(Aspects.VITREUS, 16) - .add(Aspects.IGNIS, 4) - } - blockFamily(BlockFamilies.SANDSTONE) { - it.add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.CUT_SANDSTONE) { - it.add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.SMOOTH_SANDSTONE) { - it.add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.RED_SANDSTONE) { - it.add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.CUT_RED_SANDSTONE) { - it.add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.SMOOTH_RED_SANDSTONE) { - it.add(Aspects.TERRA, 4) - } - blockFamily(BlockFamilies.STONE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.STONE_BRICK) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.DEEPSLATE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.COBBLED_DEEPSLATE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.POLISHED_DEEPSLATE) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.DEEPSLATE_BRICKS) { - it.add(Aspects.TERRA, 2) - } - blockFamily(BlockFamilies.DEEPSLATE_TILES) { - it.add(Aspects.TERRA, 2) - } - blockFamily(T7BlockFamilies.GREATWOOD_PLANKS) { - it.add(Aspects.HERBA, 2) - } - blockFamily(T7BlockFamilies.ELEMENTAL_STONE) { - it.add(Aspects.TERRA, 4) - .add(Aspects.AETHER, 1) - } + blockFamily(BlockFamilies.ACACIA_PLANKS, acaciaPlanks) + blockFamily(BlockFamilies.CHERRY_PLANKS, cherryPlanks) + blockFamily(BlockFamilies.BIRCH_PLANKS, birchPlanks) + blockFamily(BlockFamilies.CRIMSON_PLANKS, crimsonPlanks) + blockFamily(BlockFamilies.JUNGLE_PLANKS, junglePlanks) + blockFamily(BlockFamilies.OAK_PLANKS, oakPlanks) + blockFamily(BlockFamilies.DARK_OAK_PLANKS, darkOakPlanks) + blockFamily(BlockFamilies.SPRUCE_PLANKS, sprucePlanks) + blockFamily(BlockFamilies.WARPED_PLANKS, warpedPlanks) + blockFamily(BlockFamilies.MANGROVE_PLANKS, mangrovePlanks) + blockFamily(BlockFamilies.BAMBOO_PLANKS, bambooPlanks) + blockFamily(BlockFamilies.BAMBOO_MOSAIC, bambooMosaic) + blockFamily(BlockFamilies.MUD_BRICKS, mudBricks) + blockFamily(BlockFamilies.ANDESITE, andesite) + blockFamily(BlockFamilies.POLISHED_ANDESITE, polishedAndesite) + blockFamily(BlockFamilies.BLACKSTONE, blackstone) + blockFamily(BlockFamilies.POLISHED_BLACKSTONE, polishedBlackstone) + blockFamily(BlockFamilies.POLISHED_BLACKSTONE_BRICKS, polishedBlackstoneBricks) + blockFamily(BlockFamilies.BRICKS, bricks) + blockFamily(BlockFamilies.END_STONE_BRICKS, endStoneBricks) + blockFamily(BlockFamilies.MOSSY_STONE_BRICKS, mossyStoneBricks) + blockFamily(BlockFamilies.COPPER_BLOCK, copperBlock) + blockFamily(BlockFamilies.CUT_COPPER, cutCopper) + blockFamily(BlockFamilies.WAXED_COPPER_BLOCK, waxedCopperBlock) + blockFamily(BlockFamilies.WAXED_CUT_COPPER, waxedCutCopper) + blockFamily(BlockFamilies.EXPOSED_COPPER, exposedCopper) + blockFamily(BlockFamilies.EXPOSED_CUT_COPPER, exposedCutCopper) + blockFamily(BlockFamilies.WAXED_EXPOSED_COPPER, waxedExposedCopper) + blockFamily(BlockFamilies.WAXED_EXPOSED_CUT_COPPER, waxedExposedCutCopper) + blockFamily(BlockFamilies.WEATHERED_COPPER, weatheredCopper) + blockFamily(BlockFamilies.WEATHERED_CUT_COPPER, weatheredCutCopper) + blockFamily(BlockFamilies.WAXED_WEATHERED_COPPER, waxedWeatheredCopper) + blockFamily(BlockFamilies.WAXED_WEATHERED_CUT_COPPER, waxedWeatheredCutCopper) + blockFamily(BlockFamilies.OXIDIZED_COPPER, oxidizedCopper) + blockFamily(BlockFamilies.OXIDIZED_CUT_COPPER, oxidizedCutCopper) + blockFamily(BlockFamilies.WAXED_OXIDIZED_COPPER, waxedOxidizedCopper) + blockFamily(BlockFamilies.WAXED_OXIDIZED_CUT_COPPER, waxedOxidizedCutCopper) + blockFamily(BlockFamilies.COBBLESTONE, cobblestone) + blockFamily(BlockFamilies.MOSSY_COBBLESTONE, mossyCobblestone) + blockFamily(BlockFamilies.DIORITE, diorite) + blockFamily(BlockFamilies.POLISHED_DIORITE, polishedDiorite) + blockFamily(BlockFamilies.GRANITE, granite) + blockFamily(BlockFamilies.POLISHED_GRANITE, polishedGranite) + blockFamily(BlockFamilies.TUFF, tuff) + blockFamily(BlockFamilies.POLISHED_TUFF, polishedTuff) + blockFamily(BlockFamilies.TUFF_BRICKS, tuffBricks) + blockFamily(BlockFamilies.NETHER_BRICKS, netherBricks) + blockFamily(BlockFamilies.RED_NETHER_BRICKS, redNetherBricks) + blockFamily(BlockFamilies.PRISMARINE, prismarine) + blockFamily(BlockFamilies.PURPUR, purpur) + blockFamily(BlockFamilies.PRISMARINE_BRICKS, prismarineBricks) + blockFamily(BlockFamilies.DARK_PRISMARINE, darkPrismarine) + blockFamily(BlockFamilies.QUARTZ, quartz) + blockFamily(BlockFamilies.SMOOTH_QUARTZ, smoothQuartz) + blockFamily(BlockFamilies.SANDSTONE, sandstone) + blockFamily(BlockFamilies.CUT_SANDSTONE, cutSandstone) + blockFamily(BlockFamilies.SMOOTH_SANDSTONE, smoothSandstone) + blockFamily(BlockFamilies.RED_SANDSTONE, redSandstone) + blockFamily(BlockFamilies.CUT_RED_SANDSTONE, cutRedSandstone) + blockFamily(BlockFamilies.SMOOTH_RED_SANDSTONE, smoothRedSandstone) + blockFamily(BlockFamilies.STONE, stone) + blockFamily(BlockFamilies.STONE_BRICK, stoneBrick) + blockFamily(BlockFamilies.DEEPSLATE, deepslate) + blockFamily(BlockFamilies.COBBLED_DEEPSLATE, cobbledDeepslate) + blockFamily(BlockFamilies.POLISHED_DEEPSLATE, polishedDeepslate) + blockFamily(BlockFamilies.DEEPSLATE_BRICKS, deepslateBricks) + blockFamily(BlockFamilies.DEEPSLATE_TILES, deepslateTiles) + blockFamily(T7BlockFamilies.GREATWOOD_PLANKS, greatwoodPlanks) + blockFamily(T7BlockFamilies.ELEMENTAL_STONE, elementalStone) } -} \ No newline at end of file +} + +private fun Builder.blockFamily(blockFamily: BlockFamily, baseGen: AspectGen) { + fun saveVariant(block: Block?, mutation: (AspectMap) -> AspectMap) { + if (block == null) return + baseGen.mutate(mutation).save(this, block) + } + + baseGen.save(this, blockFamily.baseBlock) + saveVariant(blockFamily.get(BlockFamily.Variant.BUTTON), Mutations.BUTTON) + saveVariant(blockFamily.get(BlockFamily.Variant.CHISELED), Mutations.CHISELED) + saveVariant(blockFamily.get(BlockFamily.Variant.CRACKED), Mutations.CRACKED) + saveVariant(blockFamily.get(BlockFamily.Variant.CUT), Mutations.CUT) + saveVariant(blockFamily.get(BlockFamily.Variant.DOOR), Mutations.DOOR) + saveVariant(blockFamily.get(BlockFamily.Variant.CUSTOM_FENCE), Mutations.FENCE) + saveVariant(blockFamily.get(BlockFamily.Variant.FENCE), Mutations.FENCE) + saveVariant(blockFamily.get(BlockFamily.Variant.CUSTOM_FENCE_GATE), Mutations.FENCE_GATE) + saveVariant(blockFamily.get(BlockFamily.Variant.FENCE_GATE), Mutations.FENCE_GATE) + saveVariant(blockFamily.get(BlockFamily.Variant.MOSAIC), Mutations.MOSAIC) + saveVariant(blockFamily.get(BlockFamily.Variant.SIGN), Mutations.SIGN) + saveVariant(blockFamily.get(BlockFamily.Variant.SLAB), Mutations.SLAB) + saveVariant(blockFamily.get(BlockFamily.Variant.STAIRS), Mutations.STAIRS) + saveVariant(blockFamily.get(BlockFamily.Variant.PRESSURE_PLATE), Mutations.PRESSURE_PLATE) + saveVariant(blockFamily.get(BlockFamily.Variant.POLISHED), Mutations.POLISHED) + saveVariant(blockFamily.get(BlockFamily.Variant.TRAPDOOR), Mutations.TRAPDOOR) + saveVariant(blockFamily.get(BlockFamily.Variant.WALL), Mutations.WALL) + saveVariant(blockFamily.get(BlockFamily.Variant.WALL_SIGN), Mutations.WALL_SIGN) +} diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt index 47bc8e90..cb06a462 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt @@ -1,7 +1,6 @@ package me.alegian.thavma.impl.init.data.providers.aspects import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider -import me.alegian.thavma.impl.init.data.providers.item import me.alegian.thavma.impl.init.registries.T7DataMaps import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Items @@ -11,6 +10,18 @@ import net.minecraft.world.item.Items import net.neoforged.neoforge.common.Tags object ToolAspects { + val woodenSword = BlockFamilyAspects.oakPlanks.mutate(Mutations.sword(ItemAspects.rodsWooden, 1)) + val woodenPickaxe = BlockFamilyAspects.oakPlanks.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 1)) + val woodenAxe = BlockFamilyAspects.oakPlanks.mutate(Mutations.axe(ItemAspects.rodsWooden, 1)) + val woodenShovel = BlockFamilyAspects.oakPlanks.mutate(Mutations.shovel(ItemAspects.rodsWooden, 1)) + val woodenHoe = BlockFamilyAspects.oakPlanks.mutate(Mutations.hoe(ItemAspects.rodsWooden, 1)) + + val stoneSword = BlockFamilyAspects.cobblestone.mutate(Mutations.sword(ItemAspects.rodsWooden, 2)) + val stonePickaxe = BlockFamilyAspects.cobblestone.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 2)) + val stoneAxe = BlockFamilyAspects.cobblestone.mutate(Mutations.axe(ItemAspects.rodsWooden, 2)) + val stoneShovel = BlockFamilyAspects.cobblestone.mutate(Mutations.shovel(ItemAspects.rodsWooden, 2)) + val stoneHoe = BlockFamilyAspects.cobblestone.mutate(Mutations.hoe(ItemAspects.rodsWooden, 2)) + val ironSword = MineralAspects.iron.mutate(Mutations.sword(ItemAspects.rodsWooden, 3)) val ironPickaxe = MineralAspects.iron.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 3)) val ironAxe = MineralAspects.iron.mutate(Mutations.axe(ItemAspects.rodsWooden, 3)) @@ -56,47 +67,17 @@ object ToolAspects { fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { - item(Items.WOODEN_SWORD) { - it.add(Aspects.HERBA, 8) - .add(Aspects.INSTRUMENTUM, 1) - } - item(Items.WOODEN_PICKAXE) { - it.add(Aspects.HERBA, 12) - .add(Aspects.INSTRUMENTUM, 1) - } - item(Items.WOODEN_AXE) { - it.add(Aspects.HERBA, 12) - .add(Aspects.INSTRUMENTUM, 1) - } - item(Items.WOODEN_SHOVEL) { - it.add(Aspects.HERBA, 4) - .add(Aspects.INSTRUMENTUM, 1) - } - item(Items.WOODEN_HOE) { - it.add(Aspects.HERBA, 8) - .add(Aspects.INSTRUMENTUM, 1) - } - - item(Items.STONE_SWORD) { - it.add(Aspects.TERRA, 8) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.STONE_PICKAXE) { - it.add(Aspects.TERRA, 12) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.STONE_AXE) { - it.add(Aspects.TERRA, 12) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.STONE_SHOVEL) { - it.add(Aspects.TERRA, 4) - .add(Aspects.INSTRUMENTUM, 2) - } - item(Items.STONE_HOE) { - it.add(Aspects.TERRA, 8) - .add(Aspects.INSTRUMENTUM, 2) - } + woodenSword.save(this, Items.WOODEN_SWORD) + woodenPickaxe.save(this, Items.WOODEN_PICKAXE) + woodenAxe.save(this, Items.WOODEN_AXE) + woodenShovel.save(this, Items.WOODEN_SHOVEL) + woodenHoe.save(this, Items.WOODEN_HOE) + + stoneSword.save(this, Items.STONE_SWORD) + stonePickaxe.save(this, Items.STONE_PICKAXE) + stoneAxe.save(this, Items.STONE_AXE) + stoneShovel.save(this, Items.STONE_SHOVEL) + stoneHoe.save(this, Items.STONE_HOE) ironSword.save(this, Items.IRON_SWORD) ironPickaxe.save(this, Items.IRON_PICKAXE) From 4bf678991e8e24dbeee364683abfa6955e2b77e9 Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 17 Jan 2026 22:10:28 +0200 Subject: [PATCH 21/40] just tons of cleanup --- .../thavma/data_maps/item/aspect_content.json | 8 +- .../init/data/providers/T7DataMapProvider.kt | 2 +- .../data/providers/aspects/ArmorAspects.kt | 26 +-- ...{ItemAspects.kt => BlockAndItemAspects.kt} | 94 +++++--- .../providers/aspects/BlockFamilyAspects.kt | 208 ++++++------------ .../data/providers/aspects/ToolAspects.kt | 84 +++---- .../thavma/impl/init/registries/T7DataMaps.kt | 12 +- 7 files changed, 207 insertions(+), 227 deletions(-) rename src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/{ItemAspects.kt => BlockAndItemAspects.kt} (72%) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 3b5dd5a7..1d5de6ef 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -531,7 +531,7 @@ "thavma:terra": 1 }, "minecraft:coarse_dirt": { - "thavma:terra": 1 + "thavma:terra": 2 }, "minecraft:cobbled_deepslate": { "thavma:terra": 2 @@ -1214,8 +1214,10 @@ "thavma:metallum": 36 }, "minecraft:packed_mud": { + "thavma:aqua": 1, "thavma:herba": 2, - "thavma:terra": 2 + "thavma:terra": 1, + "thavma:victus": 2 }, "minecraft:paper": { "thavma:cognitio": 1, @@ -1805,7 +1807,7 @@ }, "thavma:arcane_workbench": { "thavma:aether": 2, - "thavma:fabrico": 12, + "thavma:fabrico": 8, "thavma:herba": 4 }, "thavma:cracked_elemental_stone": { diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt index aa2ef3d3..a932e891 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7DataMapProvider.kt @@ -19,7 +19,7 @@ class T7DataMapProvider(packOutput: PackOutput, lookupProvider: CompletableFutur override fun gather(lookupProvider: HolderLookup.Provider) { AspectRelations.gather(this) - ItemAspects.gather(this, lookupProvider) + BlockAndItemAspects.gather(this, lookupProvider) EntityAspects.gather(this, lookupProvider) MineralAspects.gather(this, lookupProvider) ToolAspects.gather(this, lookupProvider) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt index 65d3e446..386763b2 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ArmorAspects.kt @@ -44,19 +44,19 @@ object ArmorAspects { val chainLeggings = chainBase.mutate(Mutations.leggings(8)) val chainBoots = chainBase.mutate(Mutations.boots(2)) - val leatherHelmet = ItemAspects.leather.mutate(Mutations.helmet(2)) - val leatherChestplate = ItemAspects.leather.mutate(Mutations.chestplate(6)) - val leatherLeggings = ItemAspects.leather.mutate(Mutations.leggings(4)) - val leatherBoots = ItemAspects.leather.mutate(Mutations.boots(2)) - val leatherHorseArmor = ItemAspects.leather.mutate(Mutations.horseArmor(4)) - - val goggles = ItemAspects.arcaneLens.mutate { it.scale(2) }.add(MineralAspects.orichalcum.mutate { it.scale(2) }) - val apprenticeChestplate = ItemAspects.fabric.mutate(Mutations.chestplate(2)) - val apprenticeLeggings = ItemAspects.fabric.mutate(Mutations.leggings(2)) - val apprenticeBoots = ItemAspects.fabric.mutate(Mutations.boots(2)) - - val wolfArmor = ItemAspects.armadilloScute.mutate(Mutations.wolfArmor(0)) - val turtleHelmet = ItemAspects.turtleScute.mutate(Mutations.helmet(0)) + val leatherHelmet = BlockAndItemAspects.leather.mutate(Mutations.helmet(2)) + val leatherChestplate = BlockAndItemAspects.leather.mutate(Mutations.chestplate(6)) + val leatherLeggings = BlockAndItemAspects.leather.mutate(Mutations.leggings(4)) + val leatherBoots = BlockAndItemAspects.leather.mutate(Mutations.boots(2)) + val leatherHorseArmor = BlockAndItemAspects.leather.mutate(Mutations.horseArmor(4)) + + val goggles = BlockAndItemAspects.arcaneLens.mutate { it.scale(2) }.add(MineralAspects.orichalcum.mutate { it.scale(2) }) + val apprenticeChestplate = BlockAndItemAspects.fabric.mutate(Mutations.chestplate(2)) + val apprenticeLeggings = BlockAndItemAspects.fabric.mutate(Mutations.leggings(2)) + val apprenticeBoots = BlockAndItemAspects.fabric.mutate(Mutations.boots(2)) + + val wolfArmor = BlockAndItemAspects.armadilloScute.mutate(Mutations.wolfArmor(0)) + val turtleHelmet = BlockAndItemAspects.turtleScute.mutate(Mutations.helmet(0)) fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt similarity index 72% rename from src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt rename to src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt index 7db737ab..dc2ec059 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ItemAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt @@ -11,7 +11,54 @@ import net.minecraft.world.item.Items import net.minecraft.world.level.block.Blocks import net.neoforged.neoforge.common.Tags -object ItemAspects { +object BlockAndItemAspects { + val stone = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val cobblestone = stone.mutate { it } + val dirt = AspectGen().mutate { it.add(Aspects.TERRA, 1) } + val gravel = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val sand = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val brick = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + val woodenPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val netherPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + val bambooMosaic = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val mudBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val andesite = cobblestone.mutate { it } + val polishedAndesite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val blackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } + val polishedBlackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } + val polishedBlackstoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } + val bricks = brick.mutate(Mutations.STORAGE_BLOCK_4) + val endStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) } + val mossyStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val mossyCobblestone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val diorite = cobblestone.mutate { it } + val polishedDiorite = diorite.mutate { it } + val granite = cobblestone.mutate { it } + val polishedGranite = granite.mutate { it } + val tuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val polishedTuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val tuffBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val netherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } + val redNetherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2).add(Aspects.HERBA, 2) } + val prismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } + val poppedChorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + val purpur = poppedChorusFruit.mutate { it } + val prismarineBricks = AspectGen().mutate { it.add(Aspects.AQUA, 8).add(Aspects.TERRA, 8) } + val darkPrismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } + val smoothQuartz = MineralAspects.quartzBlock.mutate { it } + val sandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val cutSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val smoothSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val redSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val cutRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val smoothRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val stoneBrick = stone.mutate { it } + val deepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val cobbledDeepslate = deepslate.mutate { it } + val polishedDeepslate = deepslate.mutate { it } + val deepslateBricks = deepslate.mutate { it } + val deepslateTiles = deepslate.mutate { it } + val elementalStone = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } val leather = AspectGen().mutate { it.add(Aspects.CORPUS, 3) } val fabric = AspectGen().mutate { it.add(Aspects.FABRICO, 4).add(Aspects.AETHER, 1) } val arcaneLens = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.AETHER, 2).add(Aspects.VITREUS, 2) } @@ -19,7 +66,7 @@ object ItemAspects { val turtleScute = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.PRAEMUNIO, 1).add(Aspects.AQUA, 1) } val blazePowder = AspectGen().mutate { it.add(Aspects.IGNIS, 2).add(Aspects.ALKIMIA, 1) } val gunpowders = AspectGen().mutate { it.add(Aspects.IGNIS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.TERRA, 1) } - val rodsBlaze = AspectGen().mutate { it.add(Aspects.IGNIS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.CORPUS, 2) } + val rodsBlaze = blazePowder.mutate { it.scale(2).add(Aspects.CORPUS, 2) } val rodsBreeze = AspectGen().mutate { it.add(Aspects.AETHER, 6).add(Aspects.CORPUS, 2) } val windCharge = AspectGen().mutate { it.add(Aspects.ALKIMIA, 4).add(Aspects.AETHER, 4).add(Aspects.INSTRUMENTUM, 2) } val fireCharge = AspectGen().mutate { it.add(Aspects.ALKIMIA, 4).add(Aspects.IGNIS, 4).add(Aspects.INSTRUMENTUM, 2) } @@ -40,9 +87,7 @@ object ItemAspects { val prismarineCrystals = AspectGen().mutate { it.add(Aspects.VITREUS, 4).add(Aspects.AQUA, 4).add(Aspects.LUX, 2) } val prismarineShard = AspectGen().mutate { it.add(Aspects.AQUA, 2).add(Aspects.TERRA, 2) } val chorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - val poppedChorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } val clayBall = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - val brick = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } val rodsWooden = AspectGen().mutate { it.add(Aspects.HERBA, 2) } val eggs = AspectGen().mutate { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } val cropsWheat = AspectGen().mutate { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } @@ -52,18 +97,13 @@ object ItemAspects { val chorusFlower = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.TENEBRAE, 4) } val netherracks = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } val mud = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - val packedMud = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - val dirt = AspectGen().mutate { it.add(Aspects.TERRA, 1) } - val coarseDirt = AspectGen().mutate { it.add(Aspects.TERRA, 1) } - val gravels = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val stones = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val packedMud = mud.add(cropsWheat) + val coarseDirt = dirt.add(gravel).mutate { it.scale(0.5) } val cobblestones = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val sands = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val clay = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AQUA, 4) } + val clay = clayBall.mutate(Mutations.STORAGE_BLOCK_4) val grassBlock = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } - val podzol = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } - val shortGrass = AspectGen().mutate { it.add(Aspects.HERBA, 1) } - val tallGrass = AspectGen().mutate { it.add(Aspects.HERBA, 1) } + val podzol = grassBlock.mutate { it } + val grass = AspectGen().mutate { it.add(Aspects.HERBA, 1) } val terracotta = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4).add(Aspects.ORNATUS, 1) } val concretePowders = AspectGen().mutate { it.add(Aspects.TERRA, 3) } val concretes = AspectGen().mutate { it.add(Aspects.TERRA, 3).add(Aspects.AQUA, 1).add(Aspects.AETHER, 1) } @@ -74,23 +114,22 @@ object ItemAspects { val sugarCane = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.AQUA, 1) } val table = AspectGen().mutate { it.add(Aspects.HERBA, 12) } val researchTable = AspectGen().mutate { it.add(Aspects.HERBA, 12).add(Aspects.AETHER, 2) } - val wool1 = AspectGen().mutate { it.add(Aspects.CORPUS, 4).add(Aspects.ORNATUS, 2).add(Aspects.FABRICO, 4) } val glassBlocksCheap = AspectGen().mutate { it.add(Aspects.VITREUS, 2) } val glassPanes = AspectGen().mutate { it.add(Aspects.VITREUS, 1) } - val wool2 = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } + val wool = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } val torch = AspectGen().mutate { it.add(Aspects.LUX, 4) } val snow = AspectGen().mutate { it.add(Aspects.AQUA, 1) } - val snowBlock = AspectGen().mutate { it.add(Aspects.AQUA, 4) } - val powderSnow = AspectGen().mutate { it.add(Aspects.AQUA, 2) } + val snowBlock = snow.mutate(Mutations.STORAGE_BLOCK_4) + val powderSnow = snow.mutate { it.scale(2) } val bedrock = AspectGen().mutate { it.add(Aspects.TERRA, 25).add(Aspects.TENEBRAE, 25) } val eternalFlame = AspectGen().mutate { it.add(Aspects.LUX, 12).add(Aspects.IGNIS, 8) } val crackedElementalStone = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } val elementalStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } val elementalCore = AspectGen().mutate { it.add(Aspects.TERRA, 6).add(Aspects.AETHER, 2) } val craftingTable = AspectGen().mutate { it.add(Aspects.FABRICO, 8).add(Aspects.HERBA, 4) } - val arcaneWorkbench = AspectGen().mutate { it.add(Aspects.FABRICO, 12).add(Aspects.HERBA, 4).add(Aspects.AETHER, 2) } - val cauldron = AspectGen().mutate { it.add(Aspects.METALLUM, 56).add(Aspects.ALKIMIA, 8) } - val crucible = AspectGen().mutate { it.add(Aspects.METALLUM, 56).add(Aspects.ALKIMIA, 8).add(Aspects.AETHER, 2) } + val arcaneWorkbench = craftingTable.mutate { it.add(Aspects.AETHER, 2) } + val cauldron = MineralAspects.iron.mutate { it.scale(7).add(Aspects.ALKIMIA, 8) } + val crucible = cauldron.mutate { it.add(Aspects.AETHER, 2) } val sealingJar = AspectGen().mutate { it.add(Aspects.VITREUS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.AETHER, 2) } val tnt = AspectGen().mutate { it.add(Aspects.ALKIMIA, 8).add(Aspects.IGNIS, 8).add(Aspects.TERRA, 1) } val tripwireHook = AspectGen().mutate { it.add(Aspects.MACHINA, 2).add(Aspects.METALLUM, 1) } @@ -143,15 +182,15 @@ object ItemAspects { packedMud.save(this, Blocks.PACKED_MUD) dirt.save(this, ItemTags.DIRT) coarseDirt.save(this, Blocks.COARSE_DIRT) - gravels.save(this, Tags.Items.GRAVELS) - stones.save(this, Tags.Items.STONES) + gravel.save(this, Tags.Items.GRAVELS) + stone.save(this, Tags.Items.STONES) cobblestones.save(this, Tags.Items.COBBLESTONES) - sands.save(this, Tags.Items.SANDS) + sand.save(this, Tags.Items.SANDS) clay.save(this, Blocks.CLAY) grassBlock.save(this, Blocks.GRASS_BLOCK) podzol.save(this, Blocks.PODZOL) - shortGrass.save(this, Blocks.SHORT_GRASS) - tallGrass.save(this, Blocks.TALL_GRASS) + grass.save(this, Blocks.SHORT_GRASS) + grass.save(this, Blocks.TALL_GRASS) terracotta.save(this, ItemTags.TERRACOTTA) concretePowders.save(this, Tags.Items.CONCRETE_POWDERS) concretes.save(this, Tags.Items.CONCRETES) @@ -162,10 +201,9 @@ object ItemAspects { sugarCane.save(this, Blocks.SUGAR_CANE) table.save(this, T7Blocks.TABLE) researchTable.save(this, T7Blocks.RESEARCH_TABLE) - wool1.save(this, ItemTags.WOOL) + wool.save(this, ItemTags.WOOL) glassBlocksCheap.save(this, Tags.Items.GLASS_BLOCKS_CHEAP) glassPanes.save(this, Tags.Items.GLASS_PANES) - wool2.save(this, ItemTags.WOOL) torch.save(this, Blocks.TORCH) snow.save(this, Blocks.SNOW) snowBlock.save(this, Blocks.SNOW_BLOCK) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt index ce2b0540..0c0f7701 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt @@ -4,7 +4,6 @@ import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.init.data.T7BlockFamilies import me.alegian.thavma.impl.init.data.providers.T7DataMapProvider import me.alegian.thavma.impl.init.registries.T7DataMaps -import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.core.HolderLookup import net.minecraft.data.BlockFamilies import net.minecraft.data.BlockFamily @@ -13,147 +12,78 @@ import net.minecraft.world.level.block.Block import net.neoforged.neoforge.common.data.DataMapProvider.Builder object BlockFamilyAspects { - val acaciaPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val cherryPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val birchPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val crimsonPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } - val junglePlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val oakPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val darkOakPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val sprucePlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val warpedPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } - val mangrovePlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val bambooPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val bambooMosaic = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val mudBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - val andesite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val polishedAndesite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val blackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } - val polishedBlackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } - val polishedBlackstoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } - val bricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } - val endStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) } - val mossyStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - val copperBlock = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val cutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedCopperBlock = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val exposedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val exposedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedExposedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedExposedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val weatheredCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val weatheredCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedWeatheredCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedWeatheredCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val oxidizedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val oxidizedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedOxidizedCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val waxedOxidizedCutCopper = AspectGen().mutate { it.add(Aspects.METALLUM, 36) } - val cobblestone = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val mossyCobblestone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - val diorite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val polishedDiorite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val granite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val polishedGranite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val tuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val polishedTuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val tuffBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val netherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } - val redNetherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2).add(Aspects.HERBA, 2) } - val prismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } - val purpur = AspectGen().mutate { it.add(Aspects.TENEBRAE, 2).add(Aspects.HERBA, 2) } - val prismarineBricks = AspectGen().mutate { it.add(Aspects.AQUA, 8).add(Aspects.TERRA, 8) } - val darkPrismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } - val quartz = AspectGen().mutate { it.add(Aspects.VITREUS, 16).add(Aspects.IGNIS, 4) } - val smoothQuartz = AspectGen().mutate { it.add(Aspects.VITREUS, 16).add(Aspects.IGNIS, 4) } - val sandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val cutSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val smoothSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val redSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val cutRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val smoothRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val stone = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val stoneBrick = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val deepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val cobbledDeepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val polishedDeepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val deepslateBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val deepslateTiles = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val greatwoodPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val elementalStone = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) = datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { - blockFamily(BlockFamilies.ACACIA_PLANKS, acaciaPlanks) - blockFamily(BlockFamilies.CHERRY_PLANKS, cherryPlanks) - blockFamily(BlockFamilies.BIRCH_PLANKS, birchPlanks) - blockFamily(BlockFamilies.CRIMSON_PLANKS, crimsonPlanks) - blockFamily(BlockFamilies.JUNGLE_PLANKS, junglePlanks) - blockFamily(BlockFamilies.OAK_PLANKS, oakPlanks) - blockFamily(BlockFamilies.DARK_OAK_PLANKS, darkOakPlanks) - blockFamily(BlockFamilies.SPRUCE_PLANKS, sprucePlanks) - blockFamily(BlockFamilies.WARPED_PLANKS, warpedPlanks) - blockFamily(BlockFamilies.MANGROVE_PLANKS, mangrovePlanks) - blockFamily(BlockFamilies.BAMBOO_PLANKS, bambooPlanks) - blockFamily(BlockFamilies.BAMBOO_MOSAIC, bambooMosaic) - blockFamily(BlockFamilies.MUD_BRICKS, mudBricks) - blockFamily(BlockFamilies.ANDESITE, andesite) - blockFamily(BlockFamilies.POLISHED_ANDESITE, polishedAndesite) - blockFamily(BlockFamilies.BLACKSTONE, blackstone) - blockFamily(BlockFamilies.POLISHED_BLACKSTONE, polishedBlackstone) - blockFamily(BlockFamilies.POLISHED_BLACKSTONE_BRICKS, polishedBlackstoneBricks) - blockFamily(BlockFamilies.BRICKS, bricks) - blockFamily(BlockFamilies.END_STONE_BRICKS, endStoneBricks) - blockFamily(BlockFamilies.MOSSY_STONE_BRICKS, mossyStoneBricks) - blockFamily(BlockFamilies.COPPER_BLOCK, copperBlock) - blockFamily(BlockFamilies.CUT_COPPER, cutCopper) - blockFamily(BlockFamilies.WAXED_COPPER_BLOCK, waxedCopperBlock) - blockFamily(BlockFamilies.WAXED_CUT_COPPER, waxedCutCopper) - blockFamily(BlockFamilies.EXPOSED_COPPER, exposedCopper) - blockFamily(BlockFamilies.EXPOSED_CUT_COPPER, exposedCutCopper) - blockFamily(BlockFamilies.WAXED_EXPOSED_COPPER, waxedExposedCopper) - blockFamily(BlockFamilies.WAXED_EXPOSED_CUT_COPPER, waxedExposedCutCopper) - blockFamily(BlockFamilies.WEATHERED_COPPER, weatheredCopper) - blockFamily(BlockFamilies.WEATHERED_CUT_COPPER, weatheredCutCopper) - blockFamily(BlockFamilies.WAXED_WEATHERED_COPPER, waxedWeatheredCopper) - blockFamily(BlockFamilies.WAXED_WEATHERED_CUT_COPPER, waxedWeatheredCutCopper) - blockFamily(BlockFamilies.OXIDIZED_COPPER, oxidizedCopper) - blockFamily(BlockFamilies.OXIDIZED_CUT_COPPER, oxidizedCutCopper) - blockFamily(BlockFamilies.WAXED_OXIDIZED_COPPER, waxedOxidizedCopper) - blockFamily(BlockFamilies.WAXED_OXIDIZED_CUT_COPPER, waxedOxidizedCutCopper) - blockFamily(BlockFamilies.COBBLESTONE, cobblestone) - blockFamily(BlockFamilies.MOSSY_COBBLESTONE, mossyCobblestone) - blockFamily(BlockFamilies.DIORITE, diorite) - blockFamily(BlockFamilies.POLISHED_DIORITE, polishedDiorite) - blockFamily(BlockFamilies.GRANITE, granite) - blockFamily(BlockFamilies.POLISHED_GRANITE, polishedGranite) - blockFamily(BlockFamilies.TUFF, tuff) - blockFamily(BlockFamilies.POLISHED_TUFF, polishedTuff) - blockFamily(BlockFamilies.TUFF_BRICKS, tuffBricks) - blockFamily(BlockFamilies.NETHER_BRICKS, netherBricks) - blockFamily(BlockFamilies.RED_NETHER_BRICKS, redNetherBricks) - blockFamily(BlockFamilies.PRISMARINE, prismarine) - blockFamily(BlockFamilies.PURPUR, purpur) - blockFamily(BlockFamilies.PRISMARINE_BRICKS, prismarineBricks) - blockFamily(BlockFamilies.DARK_PRISMARINE, darkPrismarine) - blockFamily(BlockFamilies.QUARTZ, quartz) - blockFamily(BlockFamilies.SMOOTH_QUARTZ, smoothQuartz) - blockFamily(BlockFamilies.SANDSTONE, sandstone) - blockFamily(BlockFamilies.CUT_SANDSTONE, cutSandstone) - blockFamily(BlockFamilies.SMOOTH_SANDSTONE, smoothSandstone) - blockFamily(BlockFamilies.RED_SANDSTONE, redSandstone) - blockFamily(BlockFamilies.CUT_RED_SANDSTONE, cutRedSandstone) - blockFamily(BlockFamilies.SMOOTH_RED_SANDSTONE, smoothRedSandstone) - blockFamily(BlockFamilies.STONE, stone) - blockFamily(BlockFamilies.STONE_BRICK, stoneBrick) - blockFamily(BlockFamilies.DEEPSLATE, deepslate) - blockFamily(BlockFamilies.COBBLED_DEEPSLATE, cobbledDeepslate) - blockFamily(BlockFamilies.POLISHED_DEEPSLATE, polishedDeepslate) - blockFamily(BlockFamilies.DEEPSLATE_BRICKS, deepslateBricks) - blockFamily(BlockFamilies.DEEPSLATE_TILES, deepslateTiles) - blockFamily(T7BlockFamilies.GREATWOOD_PLANKS, greatwoodPlanks) - blockFamily(T7BlockFamilies.ELEMENTAL_STONE, elementalStone) + blockFamily(BlockFamilies.ACACIA_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.CHERRY_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.BIRCH_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.CRIMSON_PLANKS, BlockAndItemAspects.netherPlanks) + blockFamily(BlockFamilies.JUNGLE_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.OAK_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.DARK_OAK_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.SPRUCE_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.WARPED_PLANKS, BlockAndItemAspects.netherPlanks) + blockFamily(BlockFamilies.MANGROVE_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.BAMBOO_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(BlockFamilies.BAMBOO_MOSAIC, BlockAndItemAspects.bambooMosaic) + blockFamily(BlockFamilies.MUD_BRICKS, BlockAndItemAspects.mudBricks) + blockFamily(BlockFamilies.ANDESITE, BlockAndItemAspects.andesite) + blockFamily(BlockFamilies.POLISHED_ANDESITE, BlockAndItemAspects.polishedAndesite) + blockFamily(BlockFamilies.BLACKSTONE, BlockAndItemAspects.blackstone) + blockFamily(BlockFamilies.POLISHED_BLACKSTONE, BlockAndItemAspects.polishedBlackstone) + blockFamily(BlockFamilies.POLISHED_BLACKSTONE_BRICKS, BlockAndItemAspects.polishedBlackstoneBricks) + blockFamily(BlockFamilies.BRICKS, BlockAndItemAspects.bricks) + blockFamily(BlockFamilies.END_STONE_BRICKS, BlockAndItemAspects.endStoneBricks) + blockFamily(BlockFamilies.MOSSY_STONE_BRICKS, BlockAndItemAspects.mossyStoneBricks) + blockFamily(BlockFamilies.COPPER_BLOCK, MineralAspects.copperBlock) + blockFamily(BlockFamilies.CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_COPPER_BLOCK, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.EXPOSED_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.EXPOSED_CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_EXPOSED_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_EXPOSED_CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WEATHERED_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WEATHERED_CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_WEATHERED_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_WEATHERED_CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.OXIDIZED_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.OXIDIZED_CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_OXIDIZED_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.WAXED_OXIDIZED_CUT_COPPER, MineralAspects.copperBlock) + blockFamily(BlockFamilies.COBBLESTONE, BlockAndItemAspects.cobblestone) + blockFamily(BlockFamilies.MOSSY_COBBLESTONE, BlockAndItemAspects.mossyCobblestone) + blockFamily(BlockFamilies.DIORITE, BlockAndItemAspects.diorite) + blockFamily(BlockFamilies.POLISHED_DIORITE, BlockAndItemAspects.polishedDiorite) + blockFamily(BlockFamilies.GRANITE, BlockAndItemAspects.granite) + blockFamily(BlockFamilies.POLISHED_GRANITE, BlockAndItemAspects.polishedGranite) + blockFamily(BlockFamilies.TUFF, BlockAndItemAspects.tuff) + blockFamily(BlockFamilies.POLISHED_TUFF, BlockAndItemAspects.polishedTuff) + blockFamily(BlockFamilies.TUFF_BRICKS, BlockAndItemAspects.tuffBricks) + blockFamily(BlockFamilies.NETHER_BRICKS, BlockAndItemAspects.netherBricks) + blockFamily(BlockFamilies.RED_NETHER_BRICKS, BlockAndItemAspects.redNetherBricks) + blockFamily(BlockFamilies.PRISMARINE, BlockAndItemAspects.prismarine) + blockFamily(BlockFamilies.PURPUR, BlockAndItemAspects.purpur) + blockFamily(BlockFamilies.PRISMARINE_BRICKS, BlockAndItemAspects.prismarineBricks) + blockFamily(BlockFamilies.DARK_PRISMARINE, BlockAndItemAspects.darkPrismarine) + blockFamily(BlockFamilies.QUARTZ, MineralAspects.quartzBlock) + blockFamily(BlockFamilies.SMOOTH_QUARTZ, BlockAndItemAspects.smoothQuartz) + blockFamily(BlockFamilies.SANDSTONE, BlockAndItemAspects.sandstone) + blockFamily(BlockFamilies.CUT_SANDSTONE, BlockAndItemAspects.cutSandstone) + blockFamily(BlockFamilies.SMOOTH_SANDSTONE, BlockAndItemAspects.smoothSandstone) + blockFamily(BlockFamilies.RED_SANDSTONE, BlockAndItemAspects.redSandstone) + blockFamily(BlockFamilies.CUT_RED_SANDSTONE, BlockAndItemAspects.cutRedSandstone) + blockFamily(BlockFamilies.SMOOTH_RED_SANDSTONE, BlockAndItemAspects.smoothRedSandstone) + blockFamily(BlockFamilies.STONE, BlockAndItemAspects.stone) + blockFamily(BlockFamilies.STONE_BRICK, BlockAndItemAspects.stoneBrick) + blockFamily(BlockFamilies.DEEPSLATE, BlockAndItemAspects.deepslate) + blockFamily(BlockFamilies.COBBLED_DEEPSLATE, BlockAndItemAspects.cobbledDeepslate) + blockFamily(BlockFamilies.POLISHED_DEEPSLATE, BlockAndItemAspects.polishedDeepslate) + blockFamily(BlockFamilies.DEEPSLATE_BRICKS, BlockAndItemAspects.deepslateBricks) + blockFamily(BlockFamilies.DEEPSLATE_TILES, BlockAndItemAspects.deepslateTiles) + blockFamily(T7BlockFamilies.GREATWOOD_PLANKS, BlockAndItemAspects.woodenPlanks) + blockFamily(T7BlockFamilies.ELEMENTAL_STONE, BlockAndItemAspects.elementalStone) } } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt index cb06a462..eaebbcf0 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt @@ -10,48 +10,48 @@ import net.minecraft.world.item.Items import net.neoforged.neoforge.common.Tags object ToolAspects { - val woodenSword = BlockFamilyAspects.oakPlanks.mutate(Mutations.sword(ItemAspects.rodsWooden, 1)) - val woodenPickaxe = BlockFamilyAspects.oakPlanks.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 1)) - val woodenAxe = BlockFamilyAspects.oakPlanks.mutate(Mutations.axe(ItemAspects.rodsWooden, 1)) - val woodenShovel = BlockFamilyAspects.oakPlanks.mutate(Mutations.shovel(ItemAspects.rodsWooden, 1)) - val woodenHoe = BlockFamilyAspects.oakPlanks.mutate(Mutations.hoe(ItemAspects.rodsWooden, 1)) - - val stoneSword = BlockFamilyAspects.cobblestone.mutate(Mutations.sword(ItemAspects.rodsWooden, 2)) - val stonePickaxe = BlockFamilyAspects.cobblestone.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 2)) - val stoneAxe = BlockFamilyAspects.cobblestone.mutate(Mutations.axe(ItemAspects.rodsWooden, 2)) - val stoneShovel = BlockFamilyAspects.cobblestone.mutate(Mutations.shovel(ItemAspects.rodsWooden, 2)) - val stoneHoe = BlockFamilyAspects.cobblestone.mutate(Mutations.hoe(ItemAspects.rodsWooden, 2)) - - val ironSword = MineralAspects.iron.mutate(Mutations.sword(ItemAspects.rodsWooden, 3)) - val ironPickaxe = MineralAspects.iron.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 3)) - val ironAxe = MineralAspects.iron.mutate(Mutations.axe(ItemAspects.rodsWooden, 3)) - val ironShovel = MineralAspects.iron.mutate(Mutations.shovel(ItemAspects.rodsWooden, 3)) - val ironHoe = MineralAspects.iron.mutate(Mutations.hoe(ItemAspects.rodsWooden, 3)) - - val thavmiteSword = MineralAspects.thavmite.mutate(Mutations.sword(ItemAspects.rodsWooden, 4)) - val thavmitePickaxe = MineralAspects.thavmite.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 4)) - val thavmiteAxe = MineralAspects.thavmite.mutate(Mutations.axe(ItemAspects.rodsWooden, 4)) - val thavmiteShovel = MineralAspects.thavmite.mutate(Mutations.shovel(ItemAspects.rodsWooden, 4)) - val thavmiteHoe = MineralAspects.thavmite.mutate(Mutations.hoe(ItemAspects.rodsWooden, 4)) - val thavmiteHammer = MineralAspects.thavmite.mutate(Mutations.hammer(ItemAspects.rodsWooden, 4)) - - val goldenSword = MineralAspects.gold.mutate(Mutations.sword(ItemAspects.rodsWooden, 2)) - val goldenPickaxe = MineralAspects.gold.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 2)) - val goldenAxe = MineralAspects.gold.mutate(Mutations.axe(ItemAspects.rodsWooden, 2)) - val goldenShovel = MineralAspects.gold.mutate(Mutations.shovel(ItemAspects.rodsWooden, 2)) - val goldenHoe = MineralAspects.gold.mutate(Mutations.hoe(ItemAspects.rodsWooden, 2)) - - val diamondSword = MineralAspects.diamond.mutate(Mutations.sword(ItemAspects.rodsWooden, 4)) - val diamondPickaxe = MineralAspects.diamond.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 4)) - val diamondAxe = MineralAspects.diamond.mutate(Mutations.axe(ItemAspects.rodsWooden, 4)) - val diamondShovel = MineralAspects.diamond.mutate(Mutations.shovel(ItemAspects.rodsWooden, 4)) - val diamondHoe = MineralAspects.diamond.mutate(Mutations.hoe(ItemAspects.rodsWooden, 4)) - - val netheriteSword = MineralAspects.netherite.mutate(Mutations.sword(ItemAspects.rodsWooden, 6)) - val netheritePickaxe = MineralAspects.netherite.mutate(Mutations.pickaxe(ItemAspects.rodsWooden, 6)) - val netheriteAxe = MineralAspects.netherite.mutate(Mutations.axe(ItemAspects.rodsWooden, 6)) - val netheriteShovel = MineralAspects.netherite.mutate(Mutations.shovel(ItemAspects.rodsWooden, 6)) - val netheriteHoe = MineralAspects.netherite.mutate(Mutations.hoe(ItemAspects.rodsWooden, 6)) + val woodenSword = BlockAndItemAspects.woodenPlanks.mutate(Mutations.sword(BlockAndItemAspects.rodsWooden, 1)) + val woodenPickaxe = BlockAndItemAspects.woodenPlanks.mutate(Mutations.pickaxe(BlockAndItemAspects.rodsWooden, 1)) + val woodenAxe = BlockAndItemAspects.woodenPlanks.mutate(Mutations.axe(BlockAndItemAspects.rodsWooden, 1)) + val woodenShovel = BlockAndItemAspects.woodenPlanks.mutate(Mutations.shovel(BlockAndItemAspects.rodsWooden, 1)) + val woodenHoe = BlockAndItemAspects.woodenPlanks.mutate(Mutations.hoe(BlockAndItemAspects.rodsWooden, 1)) + + val stoneSword = BlockAndItemAspects.cobblestone.mutate(Mutations.sword(BlockAndItemAspects.rodsWooden, 2)) + val stonePickaxe = BlockAndItemAspects.cobblestone.mutate(Mutations.pickaxe(BlockAndItemAspects.rodsWooden, 2)) + val stoneAxe = BlockAndItemAspects.cobblestone.mutate(Mutations.axe(BlockAndItemAspects.rodsWooden, 2)) + val stoneShovel = BlockAndItemAspects.cobblestone.mutate(Mutations.shovel(BlockAndItemAspects.rodsWooden, 2)) + val stoneHoe = BlockAndItemAspects.cobblestone.mutate(Mutations.hoe(BlockAndItemAspects.rodsWooden, 2)) + + val ironSword = MineralAspects.iron.mutate(Mutations.sword(BlockAndItemAspects.rodsWooden, 3)) + val ironPickaxe = MineralAspects.iron.mutate(Mutations.pickaxe(BlockAndItemAspects.rodsWooden, 3)) + val ironAxe = MineralAspects.iron.mutate(Mutations.axe(BlockAndItemAspects.rodsWooden, 3)) + val ironShovel = MineralAspects.iron.mutate(Mutations.shovel(BlockAndItemAspects.rodsWooden, 3)) + val ironHoe = MineralAspects.iron.mutate(Mutations.hoe(BlockAndItemAspects.rodsWooden, 3)) + + val thavmiteSword = MineralAspects.thavmite.mutate(Mutations.sword(BlockAndItemAspects.rodsWooden, 4)) + val thavmitePickaxe = MineralAspects.thavmite.mutate(Mutations.pickaxe(BlockAndItemAspects.rodsWooden, 4)) + val thavmiteAxe = MineralAspects.thavmite.mutate(Mutations.axe(BlockAndItemAspects.rodsWooden, 4)) + val thavmiteShovel = MineralAspects.thavmite.mutate(Mutations.shovel(BlockAndItemAspects.rodsWooden, 4)) + val thavmiteHoe = MineralAspects.thavmite.mutate(Mutations.hoe(BlockAndItemAspects.rodsWooden, 4)) + val thavmiteHammer = MineralAspects.thavmite.mutate(Mutations.hammer(BlockAndItemAspects.rodsWooden, 4)) + + val goldenSword = MineralAspects.gold.mutate(Mutations.sword(BlockAndItemAspects.rodsWooden, 2)) + val goldenPickaxe = MineralAspects.gold.mutate(Mutations.pickaxe(BlockAndItemAspects.rodsWooden, 2)) + val goldenAxe = MineralAspects.gold.mutate(Mutations.axe(BlockAndItemAspects.rodsWooden, 2)) + val goldenShovel = MineralAspects.gold.mutate(Mutations.shovel(BlockAndItemAspects.rodsWooden, 2)) + val goldenHoe = MineralAspects.gold.mutate(Mutations.hoe(BlockAndItemAspects.rodsWooden, 2)) + + val diamondSword = MineralAspects.diamond.mutate(Mutations.sword(BlockAndItemAspects.rodsWooden, 4)) + val diamondPickaxe = MineralAspects.diamond.mutate(Mutations.pickaxe(BlockAndItemAspects.rodsWooden, 4)) + val diamondAxe = MineralAspects.diamond.mutate(Mutations.axe(BlockAndItemAspects.rodsWooden, 4)) + val diamondShovel = MineralAspects.diamond.mutate(Mutations.shovel(BlockAndItemAspects.rodsWooden, 4)) + val diamondHoe = MineralAspects.diamond.mutate(Mutations.hoe(BlockAndItemAspects.rodsWooden, 4)) + + val netheriteSword = MineralAspects.netherite.mutate(Mutations.sword(BlockAndItemAspects.rodsWooden, 6)) + val netheritePickaxe = MineralAspects.netherite.mutate(Mutations.pickaxe(BlockAndItemAspects.rodsWooden, 6)) + val netheriteAxe = MineralAspects.netherite.mutate(Mutations.axe(BlockAndItemAspects.rodsWooden, 6)) + val netheriteShovel = MineralAspects.netherite.mutate(Mutations.shovel(BlockAndItemAspects.rodsWooden, 6)) + val netheriteHoe = MineralAspects.netherite.mutate(Mutations.hoe(BlockAndItemAspects.rodsWooden, 6)) val ironPlating = MineralAspects.iron.mutate(Mutations.PLATING) val goldPlating = MineralAspects.gold.mutate(Mutations.PLATING) diff --git a/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt b/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt index 6b798920..0f824198 100644 --- a/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt +++ b/src/main/java/me/alegian/thavma/impl/init/registries/T7DataMaps.kt @@ -10,13 +10,14 @@ import net.neoforged.neoforge.registries.datamaps.DataMapValueMerger object T7DataMaps { object AspectContent { - val ITEM = DataMapType + val ITEM = AdvancedDataMapType .builder( rl("aspect_content"), Registries.ITEM, AspectMap.CODEC ) .synced(AspectMap.CODEC, true) + .merger(hierarchicalMerger()) .build() val ENTITY = DataMapType @@ -38,4 +39,13 @@ object T7DataMaps { .synced(Aspect.CODEC.listOf(), true) .merger(DataMapValueMerger.listMerger()) .build() + + // prioritizes resourcekeys before tags + fun hierarchicalMerger(): DataMapValueMerger { + return DataMapValueMerger { _, first, firstValue, second, secondValue -> + if (second.right().isPresent) secondValue + else if (first.right().isPresent) firstValue + else secondValue + } + } } From 7e849bae7eb57b67124179fba0ce90b5520e82bf Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 17 Jan 2026 22:27:56 +0200 Subject: [PATCH 22/40] fixes all aroudn --- .../thavma/data_maps/item/aspect_content.json | 30 +++++++------- .../thavma/recipe/elemental_stone_bricks.json | 2 +- .../init/data/providers/T7RecipeProvider.kt | 2 +- .../providers/aspects/BlockAndItemAspects.kt | 40 +++++++++---------- .../providers/aspects/BlockFamilyAspects.kt | 6 +-- 5 files changed, 38 insertions(+), 42 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 1d5de6ef..9b5a74be 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -257,10 +257,10 @@ "thavma:fabrico": 4 }, "#thavma:goggles": { - "thavma:aether": 4, + "thavma:aether": 8, "thavma:instrumentum": 8, "thavma:metallum": 40, - "thavma:vitreus": 4 + "thavma:vitreus": 2 }, "minecraft:acacia_button": { "thavma:herba": 2 @@ -496,10 +496,10 @@ "thavma:vitreus": 16 }, "minecraft:chiseled_red_sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:chiseled_sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:chiseled_stone_bricks": { "thavma:terra": 2 @@ -1407,32 +1407,32 @@ "thavma:terra": 2 }, "minecraft:red_sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:red_sandstone_slab": { - "thavma:terra": 2 + "thavma:terra": 4 }, "minecraft:red_sandstone_stairs": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:red_sandstone_wall": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:rotten_flesh": { "thavma:corpus": 2, "thavma:hostilis": 2 }, "minecraft:sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:sandstone_slab": { - "thavma:terra": 2 + "thavma:terra": 4 }, "minecraft:sandstone_stairs": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:sandstone_wall": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:short_grass": { "thavma:herba": 1 @@ -1801,9 +1801,9 @@ "thavma:aqua": 4 }, "thavma:arcane_lens": { - "thavma:aether": 2, + "thavma:aether": 4, "thavma:metallum": 16, - "thavma:vitreus": 2 + "thavma:vitreus": 1 }, "thavma:arcane_workbench": { "thavma:aether": 2, @@ -1897,7 +1897,7 @@ "thavma:vitreus": 4 }, "thavma:table": { - "thavma:herba": 12 + "thavma:herba": 11 }, "thavma:terra_infused_deepslate": { "thavma:terra": 4 diff --git a/src/generated/resources/data/thavma/recipe/elemental_stone_bricks.json b/src/generated/resources/data/thavma/recipe/elemental_stone_bricks.json index 3a40ccc9..95ca4a4d 100644 --- a/src/generated/resources/data/thavma/recipe/elemental_stone_bricks.json +++ b/src/generated/resources/data/thavma/recipe/elemental_stone_bricks.json @@ -11,7 +11,7 @@ "ss" ], "result": { - "count": 1, + "count": 4, "id": "thavma:elemental_stone_bricks" } } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt index e6df31b9..07da7e96 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/T7RecipeProvider.kt @@ -118,7 +118,7 @@ open class T7RecipeProvider(pOutput: PackOutput, pRegistries: CompletableFuture< T7Items.APPRENTICE_BOOTS, ) - ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, T7Blocks.ELEMENTAL_STONE_BRICKS) + ShapedRecipeBuilder.shaped(RecipeCategory.BUILDING_BLOCKS, T7Blocks.ELEMENTAL_STONE_BRICKS, 4) .define('s', T7Blocks.ELEMENTAL_STONE) .pattern("ss") .pattern("ss") diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt index dc2ec059..6439c192 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt @@ -22,20 +22,20 @@ object BlockAndItemAspects { val netherPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } val bambooMosaic = AspectGen().mutate { it.add(Aspects.HERBA, 2) } val mudBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - val andesite = cobblestone.mutate { it } - val polishedAndesite = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val blackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } - val polishedBlackstone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } - val polishedBlackstoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2) } + val andesite = stone.mutate { it } + val polishedAndesite = andesite.mutate { it } + val blackstone = stone.mutate { it.add(Aspects.IGNIS, 2) } + val polishedBlackstone = blackstone.mutate { it } + val polishedBlackstoneBricks = polishedBlackstone.mutate { it } val bricks = brick.mutate(Mutations.STORAGE_BLOCK_4) val endStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) } val mossyStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } val mossyCobblestone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - val diorite = cobblestone.mutate { it } + val diorite = stone.mutate { it } val polishedDiorite = diorite.mutate { it } - val granite = cobblestone.mutate { it } + val granite = stone.mutate { it } val polishedGranite = granite.mutate { it } - val tuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val tuff = stone.mutate { it } val polishedTuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } val tuffBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2) } val netherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } @@ -46,22 +46,21 @@ object BlockAndItemAspects { val prismarineBricks = AspectGen().mutate { it.add(Aspects.AQUA, 8).add(Aspects.TERRA, 8) } val darkPrismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } val smoothQuartz = MineralAspects.quartzBlock.mutate { it } - val sandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val sandstone = sand.mutate(Mutations.STORAGE_BLOCK_4) val cutSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } val smoothSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val redSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val cutRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val smoothRedSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } val stoneBrick = stone.mutate { it } - val deepslate = AspectGen().mutate { it.add(Aspects.TERRA, 2) } + val deepslate = stone.mutate { it } val cobbledDeepslate = deepslate.mutate { it } val polishedDeepslate = deepslate.mutate { it } val deepslateBricks = deepslate.mutate { it } val deepslateTiles = deepslate.mutate { it } - val elementalStone = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } + val elementalStone = stone.mutate { it.scale(2).add(Aspects.AETHER, 1) } val leather = AspectGen().mutate { it.add(Aspects.CORPUS, 3) } val fabric = AspectGen().mutate { it.add(Aspects.FABRICO, 4).add(Aspects.AETHER, 1) } - val arcaneLens = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.AETHER, 2).add(Aspects.VITREUS, 2) } + val glassPanes = AspectGen().mutate { it.add(Aspects.VITREUS, 1) } + val glassBlocksCheap = glassPanes.mutate { it.scale(2) } + val arcaneLens = MineralAspects.gold.mutate { it.scale(4).add(Aspects.AETHER, 4) }.add(glassPanes) val armadilloScute = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.PRAEMUNIO, 1) } val turtleScute = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.PRAEMUNIO, 1).add(Aspects.AQUA, 1) } val blazePowder = AspectGen().mutate { it.add(Aspects.IGNIS, 2).add(Aspects.ALKIMIA, 1) } @@ -99,7 +98,6 @@ object BlockAndItemAspects { val mud = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } val packedMud = mud.add(cropsWheat) val coarseDirt = dirt.add(gravel).mutate { it.scale(0.5) } - val cobblestones = AspectGen().mutate { it.add(Aspects.TERRA, 2) } val clay = clayBall.mutate(Mutations.STORAGE_BLOCK_4) val grassBlock = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } val podzol = grassBlock.mutate { it } @@ -112,10 +110,8 @@ object BlockAndItemAspects { val logs = AspectGen().mutate { it.add(Aspects.HERBA, 8) } val flowers = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 1) } val sugarCane = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.AQUA, 1) } - val table = AspectGen().mutate { it.add(Aspects.HERBA, 12) } + val table = woodenPlanks.mutate { it.scale(5.5) } val researchTable = AspectGen().mutate { it.add(Aspects.HERBA, 12).add(Aspects.AETHER, 2) } - val glassBlocksCheap = AspectGen().mutate { it.add(Aspects.VITREUS, 2) } - val glassPanes = AspectGen().mutate { it.add(Aspects.VITREUS, 1) } val wool = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } val torch = AspectGen().mutate { it.add(Aspects.LUX, 4) } val snow = AspectGen().mutate { it.add(Aspects.AQUA, 1) } @@ -123,8 +119,8 @@ object BlockAndItemAspects { val powderSnow = snow.mutate { it.scale(2) } val bedrock = AspectGen().mutate { it.add(Aspects.TERRA, 25).add(Aspects.TENEBRAE, 25) } val eternalFlame = AspectGen().mutate { it.add(Aspects.LUX, 12).add(Aspects.IGNIS, 8) } - val crackedElementalStone = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } - val elementalStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.AETHER, 1) } + val crackedElementalStone = elementalStone.mutate { it } + val elementalStoneBricks = elementalStone.mutate { it } val elementalCore = AspectGen().mutate { it.add(Aspects.TERRA, 6).add(Aspects.AETHER, 2) } val craftingTable = AspectGen().mutate { it.add(Aspects.FABRICO, 8).add(Aspects.HERBA, 4) } val arcaneWorkbench = craftingTable.mutate { it.add(Aspects.AETHER, 2) } @@ -184,7 +180,7 @@ object BlockAndItemAspects { coarseDirt.save(this, Blocks.COARSE_DIRT) gravel.save(this, Tags.Items.GRAVELS) stone.save(this, Tags.Items.STONES) - cobblestones.save(this, Tags.Items.COBBLESTONES) + cobblestone.save(this, Tags.Items.COBBLESTONES) sand.save(this, Tags.Items.SANDS) clay.save(this, Blocks.CLAY) grassBlock.save(this, Blocks.GRASS_BLOCK) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt index 0c0f7701..125b1fb6 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockFamilyAspects.kt @@ -72,9 +72,9 @@ object BlockFamilyAspects { blockFamily(BlockFamilies.SANDSTONE, BlockAndItemAspects.sandstone) blockFamily(BlockFamilies.CUT_SANDSTONE, BlockAndItemAspects.cutSandstone) blockFamily(BlockFamilies.SMOOTH_SANDSTONE, BlockAndItemAspects.smoothSandstone) - blockFamily(BlockFamilies.RED_SANDSTONE, BlockAndItemAspects.redSandstone) - blockFamily(BlockFamilies.CUT_RED_SANDSTONE, BlockAndItemAspects.cutRedSandstone) - blockFamily(BlockFamilies.SMOOTH_RED_SANDSTONE, BlockAndItemAspects.smoothRedSandstone) + blockFamily(BlockFamilies.RED_SANDSTONE, BlockAndItemAspects.sandstone) + blockFamily(BlockFamilies.CUT_RED_SANDSTONE, BlockAndItemAspects.cutSandstone) + blockFamily(BlockFamilies.SMOOTH_RED_SANDSTONE, BlockAndItemAspects.smoothSandstone) blockFamily(BlockFamilies.STONE, BlockAndItemAspects.stone) blockFamily(BlockFamilies.STONE_BRICK, BlockAndItemAspects.stoneBrick) blockFamily(BlockFamilies.DEEPSLATE, BlockAndItemAspects.deepslate) From 65f4cfef340ef43c975bc56be0db6b1e48c8d546 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 18 Jan 2026 11:29:14 +0200 Subject: [PATCH 23/40] many many improvements --- .../thavma/data_maps/item/aspect_content.json | 173 ++++++++++-------- .../thavma/impl/common/aspect/AspectMap.kt | 11 ++ .../providers/aspects/BlockAndItemAspects.kt | 85 +++++---- 3 files changed, 153 insertions(+), 116 deletions(-) diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 9b5a74be..2cd533b2 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -155,7 +155,7 @@ "thavma:corpus": 2 }, "#c:rods/wooden": { - "thavma:herba": 2 + "thavma:herba": 1 }, "#c:sands": { "thavma:terra": 2 @@ -253,7 +253,7 @@ "thavma:terra": 4 }, "#minecraft:wool": { - "thavma:corpus": 2, + "thavma:corpus": 4, "thavma:fabrico": 4 }, "#thavma:goggles": { @@ -578,8 +578,8 @@ "thavma:terra": 2 }, "minecraft:crafting_table": { - "thavma:fabrico": 8, - "thavma:herba": 4 + "thavma:fabrico": 4, + "thavma:herba": 8 }, "minecraft:crimson_button": { "thavma:herba": 2, @@ -673,16 +673,19 @@ "thavma:herba": 6 }, "minecraft:dark_prismarine": { - "thavma:aqua": 4, - "thavma:terra": 4 + "thavma:aqua": 10, + "thavma:corpus": 2, + "thavma:terra": 8 }, "minecraft:dark_prismarine_slab": { - "thavma:aqua": 2, - "thavma:terra": 2 + "thavma:aqua": 5, + "thavma:corpus": 1, + "thavma:terra": 4 }, "minecraft:dark_prismarine_stairs": { - "thavma:aqua": 4, - "thavma:terra": 4 + "thavma:aqua": 10, + "thavma:corpus": 2, + "thavma:terra": 8 }, "minecraft:deepslate": { "thavma:terra": 2 @@ -712,7 +715,7 @@ "thavma:terra": 2 }, "minecraft:diamond_axe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:vitreus": 24 }, @@ -729,7 +732,7 @@ "thavma:vitreus": 40 }, "minecraft:diamond_hoe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:vitreus": 16 }, @@ -742,17 +745,17 @@ "thavma:vitreus": 56 }, "minecraft:diamond_pickaxe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:vitreus": 24 }, "minecraft:diamond_shovel": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:vitreus": 8 }, "minecraft:diamond_sword": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:instrumentum": 4, "thavma:vitreus": 16 }, @@ -769,8 +772,10 @@ "thavma:terra": 2 }, "minecraft:end_crystal": { - "thavma:aether": 4, - "thavma:ignis": 8, + "thavma:aether": 2, + "thavma:alkimia": 4, + "thavma:hostilis": 4, + "thavma:instrumentum": 4, "thavma:tenebrae": 4, "thavma:vitreus": 14 }, @@ -831,12 +836,17 @@ "thavma:alkimia": 4, "thavma:hostilis": 4 }, + "minecraft:glow_ink_sac": { + "thavma:aqua": 2, + "thavma:corpus": 2, + "thavma:lux": 2 + }, "minecraft:glowstone": { "thavma:lux": 16, "thavma:terra": 4 }, "minecraft:golden_axe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:metallum": 12 }, @@ -853,7 +863,7 @@ "thavma:praemunio": 4 }, "minecraft:golden_hoe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:metallum": 8 }, @@ -866,17 +876,17 @@ "thavma:praemunio": 6 }, "minecraft:golden_pickaxe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:metallum": 12 }, "minecraft:golden_shovel": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:metallum": 4 }, "minecraft:golden_sword": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:instrumentum": 2, "thavma:metallum": 8 }, @@ -900,8 +910,12 @@ "thavma:instrumentum": 6, "thavma:metallum": 16 }, + "minecraft:ink_sac": { + "thavma:aqua": 2, + "thavma:corpus": 2 + }, "minecraft:iron_axe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 3, "thavma:metallum": 24 }, @@ -918,7 +932,7 @@ "thavma:praemunio": 4 }, "minecraft:iron_hoe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 3, "thavma:metallum": 16 }, @@ -931,17 +945,17 @@ "thavma:praemunio": 10 }, "minecraft:iron_pickaxe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 3, "thavma:metallum": 24 }, "minecraft:iron_shovel": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 3, "thavma:metallum": 8 }, "minecraft:iron_sword": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:instrumentum": 3, "thavma:metallum": 16 }, @@ -1030,35 +1044,33 @@ "thavma:herba": 6 }, "minecraft:mossy_cobblestone": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:terra": 2 }, "minecraft:mossy_cobblestone_slab": { - "thavma:herba": 1, "thavma:terra": 1 }, "minecraft:mossy_cobblestone_stairs": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:terra": 2 }, "minecraft:mossy_cobblestone_wall": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:terra": 2 }, "minecraft:mossy_stone_brick_slab": { - "thavma:herba": 1, "thavma:terra": 1 }, "minecraft:mossy_stone_brick_stairs": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:terra": 2 }, "minecraft:mossy_stone_brick_wall": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:terra": 2 }, "minecraft:mossy_stone_bricks": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:terra": 2 }, "minecraft:mud": { @@ -1110,7 +1122,7 @@ "thavma:ignis": 2 }, "minecraft:netherite_axe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 6, "thavma:metallum": 48, "thavma:tenebrae": 12 @@ -1134,7 +1146,7 @@ "thavma:vitreus": 40 }, "minecraft:netherite_hoe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 6, "thavma:metallum": 32, "thavma:tenebrae": 8 @@ -1146,7 +1158,7 @@ "thavma:vitreus": 56 }, "minecraft:netherite_pickaxe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 6, "thavma:metallum": 48, "thavma:tenebrae": 12 @@ -1157,13 +1169,13 @@ "thavma:terra": 2 }, "minecraft:netherite_shovel": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 6, "thavma:metallum": 16, "thavma:tenebrae": 4 }, "minecraft:netherite_sword": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:instrumentum": 6, "thavma:metallum": 32, "thavma:tenebrae": 8 @@ -1334,21 +1346,21 @@ "thavma:terra": 4 }, "minecraft:prismarine_brick_stairs": { - "thavma:aqua": 8, - "thavma:terra": 8 + "thavma:aqua": 9, + "thavma:terra": 9 }, "minecraft:prismarine_bricks": { - "thavma:aqua": 8, - "thavma:terra": 8 + "thavma:aqua": 9, + "thavma:terra": 9 }, "minecraft:prismarine_crystals": { - "thavma:aqua": 4, - "thavma:lux": 2, - "thavma:vitreus": 4 + "thavma:aqua": 1, + "thavma:lux": 1, + "thavma:vitreus": 2 }, "minecraft:prismarine_shard": { - "thavma:aqua": 2, - "thavma:terra": 2 + "thavma:aqua": 1, + "thavma:terra": 1 }, "minecraft:prismarine_slab": { "thavma:aqua": 2, @@ -1387,23 +1399,23 @@ "thavma:vitreus": 16 }, "minecraft:red_nether_brick_slab": { - "thavma:herba": 1, - "thavma:ignis": 1, + "thavma:herba": 2, + "thavma:ignis": 3, "thavma:terra": 1 }, "minecraft:red_nether_brick_stairs": { - "thavma:herba": 2, - "thavma:ignis": 2, + "thavma:herba": 4, + "thavma:ignis": 6, "thavma:terra": 2 }, "minecraft:red_nether_brick_wall": { - "thavma:herba": 2, - "thavma:ignis": 2, + "thavma:herba": 4, + "thavma:ignis": 6, "thavma:terra": 2 }, "minecraft:red_nether_bricks": { - "thavma:herba": 2, - "thavma:ignis": 2, + "thavma:herba": 4, + "thavma:ignis": 6, "thavma:terra": 2 }, "minecraft:red_sandstone": { @@ -1434,6 +1446,12 @@ "minecraft:sandstone_wall": { "thavma:terra": 8 }, + "minecraft:sea_lantern": { + "thavma:aqua": 41, + "thavma:lux": 5, + "thavma:terra": 36, + "thavma:vitreus": 10 + }, "minecraft:short_grass": { "thavma:herba": 1 }, @@ -1510,7 +1528,7 @@ "thavma:terra": 2 }, "minecraft:stone_axe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:terra": 6 }, @@ -1530,12 +1548,12 @@ "thavma:terra": 2 }, "minecraft:stone_hoe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:terra": 4 }, "minecraft:stone_pickaxe": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:terra": 6 }, @@ -1543,7 +1561,7 @@ "thavma:terra": 4 }, "minecraft:stone_shovel": { - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 2, "thavma:terra": 2 }, @@ -1554,7 +1572,7 @@ "thavma:terra": 2 }, "minecraft:stone_sword": { - "thavma:herba": 2, + "thavma:herba": 1, "thavma:instrumentum": 2, "thavma:terra": 4 }, @@ -1570,9 +1588,9 @@ "thavma:herba": 1 }, "minecraft:tnt": { - "thavma:alkimia": 8, - "thavma:ignis": 8, - "thavma:terra": 1 + "thavma:alkimia": 10, + "thavma:ignis": 20, + "thavma:terra": 13 }, "minecraft:torch": { "thavma:lux": 4 @@ -1748,23 +1766,23 @@ "thavma:praemunio": 6 }, "minecraft:wooden_axe": { - "thavma:herba": 10, + "thavma:herba": 8, "thavma:instrumentum": 1 }, "minecraft:wooden_hoe": { - "thavma:herba": 8, + "thavma:herba": 6, "thavma:instrumentum": 1 }, "minecraft:wooden_pickaxe": { - "thavma:herba": 10, + "thavma:herba": 8, "thavma:instrumentum": 1 }, "minecraft:wooden_shovel": { - "thavma:herba": 6, + "thavma:herba": 4, "thavma:instrumentum": 1 }, "minecraft:wooden_sword": { - "thavma:herba": 6, + "thavma:herba": 5, "thavma:instrumentum": 1 }, "thavma:aether_infused_deepslate": { @@ -1808,7 +1826,7 @@ "thavma:arcane_workbench": { "thavma:aether": 2, "thavma:fabrico": 8, - "thavma:herba": 4 + "thavma:herba": 8 }, "thavma:cracked_elemental_stone": { "thavma:aether": 1, @@ -1897,6 +1915,7 @@ "thavma:vitreus": 4 }, "thavma:table": { + "thavma:fabrico": 2, "thavma:herba": 11 }, "thavma:terra_infused_deepslate": { @@ -1910,7 +1929,7 @@ }, "thavma:thavmite_axe": { "thavma:aether": 12, - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:metallum": 24 }, @@ -1930,7 +1949,7 @@ }, "thavma:thavmite_hammer": { "thavma:aether": 24, - "thavma:herba": 2, + "thavma:herba": 1, "thavma:instrumentum": 4, "thavma:metallum": 48 }, @@ -1941,7 +1960,7 @@ }, "thavma:thavmite_hoe": { "thavma:aether": 8, - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:metallum": 16 }, @@ -1956,7 +1975,7 @@ }, "thavma:thavmite_pickaxe": { "thavma:aether": 12, - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:metallum": 24 }, @@ -1966,13 +1985,13 @@ }, "thavma:thavmite_shovel": { "thavma:aether": 4, - "thavma:herba": 4, + "thavma:herba": 2, "thavma:instrumentum": 4, "thavma:metallum": 8 }, "thavma:thavmite_sword": { "thavma:aether": 8, - "thavma:herba": 2, + "thavma:herba": 1, "thavma:instrumentum": 4, "thavma:metallum": 16 } diff --git a/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt b/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt index 9c1fa757..caa6bf96 100644 --- a/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt +++ b/src/main/java/me/alegian/thavma/impl/common/aspect/AspectMap.kt @@ -56,6 +56,12 @@ class AspectMap(map: Map = LinkedHashMap()) : Iterable return builder.build() } + fun remove(aspectHolder: Holder): AspectMap { + val builder = builder().copyOf(this) + builder.remove(aspectHolder.value()) + return builder.build() + } + fun scale(multiplier: Number): AspectMap { return builder().copyOf(this).scale(multiplier).build() } @@ -145,6 +151,11 @@ class AspectMap(map: Map = LinkedHashMap()) : Iterable return this.subtract(aspectStack.aspect, aspectStack.amount) } + fun remove(aspect: Aspect): Builder { + map.remove(aspect) + return this + } + fun scale(multiplier: Number): Builder { map.forEach { (k: Aspect, v: Int) -> map[k] = round(v * multiplier.toDouble()).toInt() } map = LinkedHashMap(map.filterValues { it > 0 }) diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt index 6439c192..898ede71 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt @@ -18,9 +18,12 @@ object BlockAndItemAspects { val gravel = AspectGen().mutate { it.add(Aspects.TERRA, 2) } val sand = AspectGen().mutate { it.add(Aspects.TERRA, 2) } val brick = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - val woodenPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2) } - val netherPlanks = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } - val bambooMosaic = AspectGen().mutate { it.add(Aspects.HERBA, 2) } + val rodsWooden = AspectGen().mutate { it.add(Aspects.HERBA, 1) } + val woodenPlanks = rodsWooden.mutate { it.scale(2) } + val netherPlanks = woodenPlanks.mutate { it.add(Aspects.IGNIS, 2) } + val bambooMosaic = woodenPlanks.mutate { it } + val inkSac = AspectGen().mutate { it.add(Aspects.AQUA, 2).add(Aspects.CORPUS, 2) } + val glowInkSac = inkSac.mutate { it.add(Aspects.LUX, 2) } val mudBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } val andesite = stone.mutate { it } val polishedAndesite = andesite.mutate { it } @@ -28,28 +31,36 @@ object BlockAndItemAspects { val polishedBlackstone = blackstone.mutate { it } val polishedBlackstoneBricks = polishedBlackstone.mutate { it } val bricks = brick.mutate(Mutations.STORAGE_BLOCK_4) - val endStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) } - val mossyStoneBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } - val mossyCobblestone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val endStone = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.TENEBRAE, 2) } + val endStoneBricks = endStone.mutate { it } + val stoneBrick = stone.mutate { it } + val mossyStoneBricks = stoneBrick.mutate { it.add(Aspects.HERBA, 1) } + val mossyCobblestone = cobblestone.mutate { it.add(Aspects.HERBA, 1) } val diorite = stone.mutate { it } val polishedDiorite = diorite.mutate { it } val granite = stone.mutate { it } val polishedGranite = granite.mutate { it } val tuff = stone.mutate { it } - val polishedTuff = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val tuffBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2) } - val netherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4) } - val redNetherBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.IGNIS, 2).add(Aspects.HERBA, 2) } - val prismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } - val poppedChorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + val polishedTuff = tuff.mutate { it } + val tuffBricks = tuff.mutate { it } + val netherrack = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + val netherBrick = netherrack.mutate { it } + val netherBricks = netherBrick.mutate(Mutations.STORAGE_BLOCK_4) + val netherWart = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + val redNetherBricks = netherBrick.mutate { it.scale(2) }.add(netherWart.mutate { it.scale(2) }) + val prismarineCrystals = AspectGen().mutate { it.add(Aspects.VITREUS, 2).add(Aspects.AQUA, 1).add(Aspects.LUX, 1) } + val prismarineShard = AspectGen().mutate { it.add(Aspects.AQUA, 1).add(Aspects.TERRA, 1) } + val prismarine = prismarineShard.mutate(Mutations.STORAGE_BLOCK_4) + val chorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } + val poppedChorusFruit = chorusFruit.mutate { it } val purpur = poppedChorusFruit.mutate { it } - val prismarineBricks = AspectGen().mutate { it.add(Aspects.AQUA, 8).add(Aspects.TERRA, 8) } - val darkPrismarine = AspectGen().mutate { it.add(Aspects.AQUA, 4).add(Aspects.TERRA, 4) } + val prismarineBricks = prismarineShard.mutate(Mutations.STORAGE_BLOCK_9) + val darkPrismarine = prismarineShard.mutate { it.scale(8) }.add(inkSac) + val seaLantern = prismarineCrystals.mutate { it.scale(5) }.add(prismarineBricks.mutate { it.scale(4) }) val smoothQuartz = MineralAspects.quartzBlock.mutate { it } val sandstone = sand.mutate(Mutations.STORAGE_BLOCK_4) val cutSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } val smoothSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val stoneBrick = stone.mutate { it } val deepslate = stone.mutate { it } val cobbledDeepslate = deepslate.mutate { it } val polishedDeepslate = deepslate.mutate { it } @@ -57,7 +68,9 @@ object BlockAndItemAspects { val deepslateTiles = deepslate.mutate { it } val elementalStone = stone.mutate { it.scale(2).add(Aspects.AETHER, 1) } val leather = AspectGen().mutate { it.add(Aspects.CORPUS, 3) } - val fabric = AspectGen().mutate { it.add(Aspects.FABRICO, 4).add(Aspects.AETHER, 1) } + val string = AspectGen().mutate { it.add(Aspects.CORPUS, 1).add(Aspects.FABRICO, 1) } + val wool = string.mutate(Mutations.STORAGE_BLOCK_4) + val fabric = wool.mutate { it.remove(Aspects.CORPUS).add(Aspects.AETHER, 1) } val glassPanes = AspectGen().mutate { it.add(Aspects.VITREUS, 1) } val glassBlocksCheap = glassPanes.mutate { it.scale(2) } val arcaneLens = MineralAspects.gold.mutate { it.scale(4).add(Aspects.AETHER, 4) }.add(glassPanes) @@ -69,32 +82,24 @@ object BlockAndItemAspects { val rodsBreeze = AspectGen().mutate { it.add(Aspects.AETHER, 6).add(Aspects.CORPUS, 2) } val windCharge = AspectGen().mutate { it.add(Aspects.ALKIMIA, 4).add(Aspects.AETHER, 4).add(Aspects.INSTRUMENTUM, 2) } val fireCharge = AspectGen().mutate { it.add(Aspects.ALKIMIA, 4).add(Aspects.IGNIS, 4).add(Aspects.INSTRUMENTUM, 2) } - val rottenBrain = AspectGen().mutate { it.add(Aspects.COGNITIO, 12).add(Aspects.HOSTILIS, 2).add(Aspects.CORPUS, 2) } val rottenFlesh = AspectGen().mutate { it.add(Aspects.HOSTILIS, 2).add(Aspects.CORPUS, 2) } + val rottenBrain = rottenFlesh.mutate { it.add(Aspects.COGNITIO, 12) } val flint = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.INSTRUMENTUM, 2) } val feathers = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 1).add(Aspects.CORPUS, 2) } val enderPearls = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 4).add(Aspects.TENEBRAE, 4).add(Aspects.CORPUS, 2) } val enderEye = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 4).add(Aspects.TENEBRAE, 4).add(Aspects.AETHER, 2) } - val strings = AspectGen().mutate { it.add(Aspects.CORPUS, 1).add(Aspects.FABRICO, 1) } val ghastTear = AspectGen().mutate { it.add(Aspects.HOSTILIS, 4).add(Aspects.ALKIMIA, 4) } val sugar = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.VICTUS, 1) } val paper = AspectGen().mutate { it.add(Aspects.COGNITIO, 1).add(Aspects.HERBA, 1) } val fireworkRocket = AspectGen().mutate { it.add(Aspects.IGNIS, 1).add(Aspects.ORNATUS, 1) } val fireworkStar = AspectGen().mutate { it.add(Aspects.IGNIS, 1).add(Aspects.ORNATUS, 2) } val snowball = AspectGen().mutate { it.add(Aspects.AQUA, 1) } - val netherBrick = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } - val prismarineCrystals = AspectGen().mutate { it.add(Aspects.VITREUS, 4).add(Aspects.AQUA, 4).add(Aspects.LUX, 2) } - val prismarineShard = AspectGen().mutate { it.add(Aspects.AQUA, 2).add(Aspects.TERRA, 2) } - val chorusFruit = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } val clayBall = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - val rodsWooden = AspectGen().mutate { it.add(Aspects.HERBA, 2) } val eggs = AspectGen().mutate { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } val cropsWheat = AspectGen().mutate { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } - val endCrystal = AspectGen().mutate { it.add(Aspects.VITREUS, 14).add(Aspects.IGNIS, 8).add(Aspects.TENEBRAE, 4).add(Aspects.AETHER, 4) } - val netherWart = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.IGNIS, 2) } + val endCrystal = glassBlocksCheap.mutate { it.scale(7) }.add(enderEye).add(ghastTear) val chorusPlant = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } - val chorusFlower = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.TENEBRAE, 4) } - val netherracks = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.IGNIS, 1) } + val chorusFlower = chorusPlant.mutate { it.scale(2) } val mud = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } val packedMud = mud.add(cropsWheat) val coarseDirt = dirt.add(gravel).mutate { it.scale(0.5) } @@ -110,28 +115,27 @@ object BlockAndItemAspects { val logs = AspectGen().mutate { it.add(Aspects.HERBA, 8) } val flowers = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 1) } val sugarCane = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.AQUA, 1) } - val table = woodenPlanks.mutate { it.scale(5.5) } + val table = woodenPlanks.mutate { it.scale(5.5).add(Aspects.FABRICO, 2) } val researchTable = AspectGen().mutate { it.add(Aspects.HERBA, 12).add(Aspects.AETHER, 2) } - val wool = AspectGen().mutate { it.add(Aspects.CORPUS, 2).add(Aspects.FABRICO, 4) } val torch = AspectGen().mutate { it.add(Aspects.LUX, 4) } - val snow = AspectGen().mutate { it.add(Aspects.AQUA, 1) } - val snowBlock = snow.mutate(Mutations.STORAGE_BLOCK_4) - val powderSnow = snow.mutate { it.scale(2) } + val snow = snowball.mutate { it } + val snowBlock = snowball.mutate(Mutations.STORAGE_BLOCK_4) + val powderSnow = snowball.mutate { it.scale(2) } val bedrock = AspectGen().mutate { it.add(Aspects.TERRA, 25).add(Aspects.TENEBRAE, 25) } val eternalFlame = AspectGen().mutate { it.add(Aspects.LUX, 12).add(Aspects.IGNIS, 8) } val crackedElementalStone = elementalStone.mutate { it } val elementalStoneBricks = elementalStone.mutate { it } val elementalCore = AspectGen().mutate { it.add(Aspects.TERRA, 6).add(Aspects.AETHER, 2) } - val craftingTable = AspectGen().mutate { it.add(Aspects.FABRICO, 8).add(Aspects.HERBA, 4) } - val arcaneWorkbench = craftingTable.mutate { it.add(Aspects.AETHER, 2) } + val craftingTable = woodenPlanks.mutate { it.scale(4).add(Aspects.FABRICO, 4) } + val arcaneWorkbench = craftingTable.mutate { it.add(Aspects.AETHER, 2).add(Aspects.FABRICO, 4) } val cauldron = MineralAspects.iron.mutate { it.scale(7).add(Aspects.ALKIMIA, 8) } val crucible = cauldron.mutate { it.add(Aspects.AETHER, 2) } val sealingJar = AspectGen().mutate { it.add(Aspects.VITREUS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.AETHER, 2) } - val tnt = AspectGen().mutate { it.add(Aspects.ALKIMIA, 8).add(Aspects.IGNIS, 8).add(Aspects.TERRA, 1) } + val tnt = gunpowders.mutate { it.scale(5) }.add(sand.mutate { it.scale(4) }) val tripwireHook = AspectGen().mutate { it.add(Aspects.MACHINA, 2).add(Aspects.METALLUM, 1) } val heavyCore = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.INSTRUMENTUM, 6) } - val bamboo = AspectGen().mutate { it.add(Aspects.HERBA, 1) } - val bambooBlocks = AspectGen().mutate { it.add(Aspects.HERBA, 4) } + val bamboo = rodsWooden.mutate { it } + val bambooBlocks = woodenPlanks.mutate { it.scale(2) } fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { datamapProvider.builder(T7DataMaps.AspectContent.ITEM).run { @@ -152,7 +156,7 @@ object BlockAndItemAspects { feathers.save(this, Tags.Items.FEATHERS) enderPearls.save(this, Tags.Items.ENDER_PEARLS) enderEye.save(this, Items.ENDER_EYE) - strings.save(this, Tags.Items.STRINGS) + string.save(this, Tags.Items.STRINGS) ghastTear.save(this, Items.GHAST_TEAR) sugar.save(this, Items.SUGAR) paper.save(this, Items.PAPER) @@ -173,7 +177,7 @@ object BlockAndItemAspects { netherWart.save(this, Blocks.NETHER_WART) chorusPlant.save(this, Blocks.CHORUS_PLANT) chorusFlower.save(this, Blocks.CHORUS_FLOWER) - netherracks.save(this, Tags.Items.NETHERRACKS) + netherrack.save(this, Tags.Items.NETHERRACKS) mud.save(this, Blocks.MUD) packedMud.save(this, Blocks.PACKED_MUD) dirt.save(this, ItemTags.DIRT) @@ -219,6 +223,9 @@ object BlockAndItemAspects { heavyCore.save(this, Blocks.HEAVY_CORE) bamboo.save(this, Blocks.BAMBOO) bambooBlocks.save(this, ItemTags.BAMBOO_BLOCKS) + inkSac.save(this, Items.INK_SAC) + glowInkSac.save(this, Items.GLOW_INK_SAC) + seaLantern.save(this, Items.SEA_LANTERN) } } } From fc2e5c1e6ed967812696dbe913c83862e9804dd0 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 18 Jan 2026 11:37:30 +0200 Subject: [PATCH 24/40] create temp inconsistency file --- aspect-inconsistencies.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 aspect-inconsistencies.md diff --git a/aspect-inconsistencies.md b/aspect-inconsistencies.md new file mode 100644 index 00000000..a20db7f6 --- /dev/null +++ b/aspect-inconsistencies.md @@ -0,0 +1,22 @@ +Here are the remaining cases I see where there’s an in‑game relation but the aspect entry is still defined independently (not derived via `mutate`/`add` from related entries). + +**BlockAndItemAspects** +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:20` brick is smelted from clay ball but isn’t derived from `clayBall` (`...:97`). +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:27` mudBricks are crafted/stonecut from packed mud but aren’t derived from `packedMud` (`...:104`) or `mud` (`...:103`). +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:62` cutSandstone is crafted/stonecut from sandstone (`...:61`) but isn’t derived from it. +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:63` smoothSandstone is smelted/crafted from sandstone (`...:61`) but isn’t derived from it. +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:90` enderEye is crafted from enderPearl + blazePowder, but isn’t derived from `enderPearls` (`...:89`) / `blazePowder` (`...:79`). +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:93` paper is crafted from sugar cane but isn’t derived from `sugarCane` (`...:117`). +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:94` fireworkRocket uses paper + gunpowder but isn’t derived from `paper` (`...:93`) / `gunpowders` (`...:80`). +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:95` fireworkStar uses gunpowder but isn’t derived from `gunpowders` (`...:80`). +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:110` terracotta is smelted from clay but isn’t derived from `clay` (`...:106`) / `clayBall` (`...:97`). +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:112` concretes are smelted from concretePowders but aren’t derived from `concretePowders` (`...:111`). + +**MineralAspects** +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt:115` netherite ingot uses netherite scrap + gold, but isn’t derived from `netheriteScrap` (`...:109`) (only from `gold`). + +**ToolAspects** +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:61` arrows are crafted from flint + stick + feather but aren’t derived from `flint` / `rodsWooden` / `feathers`. +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:64` bow is crafted from string + sticks but isn’t derived from `string` / `rodsWooden`. +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:65` crossbow is crafted from bow/iron/stick/tripwire hook but isn’t derived from any of those. +- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:62` mace is crafted from heavy core + breeze rod but isn’t derived from `heavyCore` / `rodsBreeze`. From 2348eb9e35983ab4c637e99a40caccf758bf6409 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 18 Jan 2026 13:07:41 +0200 Subject: [PATCH 25/40] more datagen --- aspect-inconsistencies.md | 22 ------- .../thavma/data_maps/item/aspect_content.json | 63 ++++++++++--------- .../providers/aspects/BlockAndItemAspects.kt | 24 +++---- .../data/providers/aspects/ToolAspects.kt | 8 +-- 4 files changed, 51 insertions(+), 66 deletions(-) delete mode 100644 aspect-inconsistencies.md diff --git a/aspect-inconsistencies.md b/aspect-inconsistencies.md deleted file mode 100644 index a20db7f6..00000000 --- a/aspect-inconsistencies.md +++ /dev/null @@ -1,22 +0,0 @@ -Here are the remaining cases I see where there’s an in‑game relation but the aspect entry is still defined independently (not derived via `mutate`/`add` from related entries). - -**BlockAndItemAspects** -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:20` brick is smelted from clay ball but isn’t derived from `clayBall` (`...:97`). -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:27` mudBricks are crafted/stonecut from packed mud but aren’t derived from `packedMud` (`...:104`) or `mud` (`...:103`). -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:62` cutSandstone is crafted/stonecut from sandstone (`...:61`) but isn’t derived from it. -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:63` smoothSandstone is smelted/crafted from sandstone (`...:61`) but isn’t derived from it. -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:90` enderEye is crafted from enderPearl + blazePowder, but isn’t derived from `enderPearls` (`...:89`) / `blazePowder` (`...:79`). -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:93` paper is crafted from sugar cane but isn’t derived from `sugarCane` (`...:117`). -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:94` fireworkRocket uses paper + gunpowder but isn’t derived from `paper` (`...:93`) / `gunpowders` (`...:80`). -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:95` fireworkStar uses gunpowder but isn’t derived from `gunpowders` (`...:80`). -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:110` terracotta is smelted from clay but isn’t derived from `clay` (`...:106`) / `clayBall` (`...:97`). -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt:112` concretes are smelted from concretePowders but aren’t derived from `concretePowders` (`...:111`). - -**MineralAspects** -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/MineralAspects.kt:115` netherite ingot uses netherite scrap + gold, but isn’t derived from `netheriteScrap` (`...:109`) (only from `gold`). - -**ToolAspects** -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:61` arrows are crafted from flint + stick + feather but aren’t derived from `flint` / `rodsWooden` / `feathers`. -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:64` bow is crafted from string + sticks but isn’t derived from `string` / `rodsWooden`. -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:65` crossbow is crafted from bow/iron/stick/tripwire hook but isn’t derived from any of those. -- `src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt:62` mace is crafted from heavy core + breeze rod but isn’t derived from `heavyCore` / `rodsBreeze`. diff --git a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json index 2cd533b2..bec323ff 100644 --- a/src/generated/resources/data/thavma/data_maps/item/aspect_content.json +++ b/src/generated/resources/data/thavma/data_maps/item/aspect_content.json @@ -4,12 +4,11 @@ "thavma:terra": 2 }, "#c:concrete_powders": { - "thavma:terra": 3 + "thavma:terra": 2 }, "#c:concretes": { - "thavma:aether": 1, "thavma:aqua": 1, - "thavma:terra": 3 + "thavma:terra": 2 }, "#c:crops/wheat": { "thavma:herba": 2, @@ -211,17 +210,21 @@ "thavma:fabrico": 1 }, "#c:tools/bow": { - "thavma:fabrico": 2, - "thavma:herba": 2, + "thavma:fabrico": 3, + "thavma:herba": 3, "thavma:instrumentum": 8 }, "#c:tools/crossbow": { "thavma:fabrico": 2, + "thavma:herba": 5, "thavma:instrumentum": 8, - "thavma:metallum": 4 + "thavma:machina": 2, + "thavma:metallum": 12 }, "#minecraft:arrows": { - "thavma:instrumentum": 2 + "thavma:herba": 1, + "thavma:instrumentum": 2, + "thavma:terra": 1 }, "#minecraft:bamboo_blocks": { "thavma:herba": 4 @@ -631,16 +634,16 @@ "thavma:metallum": 36 }, "minecraft:cut_red_sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:cut_red_sandstone_slab": { - "thavma:terra": 2 + "thavma:terra": 4 }, "minecraft:cut_sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:cut_sandstone_slab": { - "thavma:terra": 2 + "thavma:terra": 4 }, "minecraft:dark_oak_button": { "thavma:herba": 2 @@ -773,8 +776,9 @@ }, "minecraft:end_crystal": { "thavma:aether": 2, - "thavma:alkimia": 4, + "thavma:alkimia": 5, "thavma:hostilis": 4, + "thavma:ignis": 2, "thavma:instrumentum": 4, "thavma:tenebrae": 4, "thavma:vitreus": 14 @@ -797,6 +801,8 @@ }, "minecraft:ender_eye": { "thavma:aether": 2, + "thavma:alkimia": 1, + "thavma:ignis": 2, "thavma:instrumentum": 4, "thavma:tenebrae": 4 }, @@ -829,8 +835,8 @@ "thavma:ornatus": 2 }, "minecraft:flint": { - "thavma:instrumentum": 2, - "thavma:terra": 4 + "thavma:instrumentum": 1, + "thavma:terra": 1 }, "minecraft:ghast_tear": { "thavma:alkimia": 4, @@ -1010,7 +1016,8 @@ "thavma:praemunio": 4 }, "minecraft:mace": { - "thavma:aether": 8, + "thavma:aether": 6, + "thavma:instrumentum": 6, "thavma:metallum": 16 }, "minecraft:mangrove_button": { @@ -1075,22 +1082,21 @@ }, "minecraft:mud": { "thavma:aqua": 1, - "thavma:terra": 1 + "thavma:terra": 2 }, "minecraft:mud_brick_slab": { - "thavma:herba": 1, "thavma:terra": 1 }, "minecraft:mud_brick_stairs": { - "thavma:herba": 2, + "thavma:aqua": 1, "thavma:terra": 2 }, "minecraft:mud_brick_wall": { - "thavma:herba": 2, + "thavma:aqua": 1, "thavma:terra": 2 }, "minecraft:mud_bricks": { - "thavma:herba": 2, + "thavma:aqua": 1, "thavma:terra": 2 }, "minecraft:nether_brick": { @@ -1228,7 +1234,7 @@ "minecraft:packed_mud": { "thavma:aqua": 1, "thavma:herba": 2, - "thavma:terra": 1, + "thavma:terra": 2, "thavma:victus": 2 }, "minecraft:paper": { @@ -1468,22 +1474,22 @@ "thavma:vitreus": 16 }, "minecraft:smooth_red_sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:smooth_red_sandstone_slab": { - "thavma:terra": 2 + "thavma:terra": 4 }, "minecraft:smooth_red_sandstone_stairs": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:smooth_sandstone": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:smooth_sandstone_slab": { - "thavma:terra": 2 + "thavma:terra": 4 }, "minecraft:smooth_sandstone_stairs": { - "thavma:terra": 4 + "thavma:terra": 8 }, "minecraft:snow": { "thavma:aqua": 1 @@ -1604,8 +1610,9 @@ "thavma:metallum": 12 }, "minecraft:tripwire_hook": { + "thavma:herba": 2, "thavma:machina": 2, - "thavma:metallum": 1 + "thavma:metallum": 4 }, "minecraft:tuff": { "thavma:terra": 2 diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt index 898ede71..43d6afaa 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/BlockAndItemAspects.kt @@ -24,7 +24,10 @@ object BlockAndItemAspects { val bambooMosaic = woodenPlanks.mutate { it } val inkSac = AspectGen().mutate { it.add(Aspects.AQUA, 2).add(Aspects.CORPUS, 2) } val glowInkSac = inkSac.mutate { it.add(Aspects.LUX, 2) } - val mudBricks = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.HERBA, 2) } + val cropsWheat = AspectGen().mutate { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } + val mud = AspectGen().mutate { it.add(Aspects.TERRA, 2).add(Aspects.AQUA, 1) } + val packedMud = mud.add(cropsWheat) + val mudBricks = mud.mutate { it } val andesite = stone.mutate { it } val polishedAndesite = andesite.mutate { it } val blackstone = stone.mutate { it.add(Aspects.IGNIS, 2) } @@ -59,8 +62,8 @@ object BlockAndItemAspects { val seaLantern = prismarineCrystals.mutate { it.scale(5) }.add(prismarineBricks.mutate { it.scale(4) }) val smoothQuartz = MineralAspects.quartzBlock.mutate { it } val sandstone = sand.mutate(Mutations.STORAGE_BLOCK_4) - val cutSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } - val smoothSandstone = AspectGen().mutate { it.add(Aspects.TERRA, 4) } + val cutSandstone = sandstone.mutate { it } + val smoothSandstone = sandstone.mutate { it } val deepslate = stone.mutate { it } val cobbledDeepslate = deepslate.mutate { it } val polishedDeepslate = deepslate.mutate { it } @@ -84,10 +87,10 @@ object BlockAndItemAspects { val fireCharge = AspectGen().mutate { it.add(Aspects.ALKIMIA, 4).add(Aspects.IGNIS, 4).add(Aspects.INSTRUMENTUM, 2) } val rottenFlesh = AspectGen().mutate { it.add(Aspects.HOSTILIS, 2).add(Aspects.CORPUS, 2) } val rottenBrain = rottenFlesh.mutate { it.add(Aspects.COGNITIO, 12) } - val flint = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.INSTRUMENTUM, 2) } + val flint = gravel.mutate { it.scale(0.5).add(Aspects.INSTRUMENTUM, 1) } val feathers = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 1).add(Aspects.CORPUS, 2) } val enderPearls = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 4).add(Aspects.TENEBRAE, 4).add(Aspects.CORPUS, 2) } - val enderEye = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 4).add(Aspects.TENEBRAE, 4).add(Aspects.AETHER, 2) } + val enderEye = enderPearls.add(blazePowder).mutate { it.remove(Aspects.CORPUS).add(Aspects.AETHER, 2) } val ghastTear = AspectGen().mutate { it.add(Aspects.HOSTILIS, 4).add(Aspects.ALKIMIA, 4) } val sugar = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.VICTUS, 1) } val paper = AspectGen().mutate { it.add(Aspects.COGNITIO, 1).add(Aspects.HERBA, 1) } @@ -96,20 +99,17 @@ object BlockAndItemAspects { val snowball = AspectGen().mutate { it.add(Aspects.AQUA, 1) } val clayBall = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } val eggs = AspectGen().mutate { it.add(Aspects.VICTUS, 4).add(Aspects.CORPUS, 2) } - val cropsWheat = AspectGen().mutate { it.add(Aspects.VICTUS, 2).add(Aspects.HERBA, 2) } val endCrystal = glassBlocksCheap.mutate { it.scale(7) }.add(enderEye).add(ghastTear) val chorusPlant = AspectGen().mutate { it.add(Aspects.HERBA, 2).add(Aspects.TENEBRAE, 2) } val chorusFlower = chorusPlant.mutate { it.scale(2) } - val mud = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.AQUA, 1) } - val packedMud = mud.add(cropsWheat) val coarseDirt = dirt.add(gravel).mutate { it.scale(0.5) } val clay = clayBall.mutate(Mutations.STORAGE_BLOCK_4) val grassBlock = AspectGen().mutate { it.add(Aspects.TERRA, 1).add(Aspects.HERBA, 1) } val podzol = grassBlock.mutate { it } val grass = AspectGen().mutate { it.add(Aspects.HERBA, 1) } - val terracotta = AspectGen().mutate { it.add(Aspects.TERRA, 4).add(Aspects.IGNIS, 4).add(Aspects.ORNATUS, 1) } - val concretePowders = AspectGen().mutate { it.add(Aspects.TERRA, 3) } - val concretes = AspectGen().mutate { it.add(Aspects.TERRA, 3).add(Aspects.AQUA, 1).add(Aspects.AETHER, 1) } + val terracotta = bricks.mutate { it.add(Aspects.ORNATUS, 1) } + val concretePowders = sand.add(gravel).mutate { it.scale(0.5) } + val concretes = concretePowders.mutate { it.add(Aspects.AQUA, 1) } val leaves = AspectGen().mutate { it.add(Aspects.HERBA, 2) } val saplings = AspectGen().mutate { it.add(Aspects.HERBA, 4).add(Aspects.VICTUS, 4) } val logs = AspectGen().mutate { it.add(Aspects.HERBA, 8) } @@ -132,7 +132,7 @@ object BlockAndItemAspects { val crucible = cauldron.mutate { it.add(Aspects.AETHER, 2) } val sealingJar = AspectGen().mutate { it.add(Aspects.VITREUS, 4).add(Aspects.ALKIMIA, 2).add(Aspects.AETHER, 2) } val tnt = gunpowders.mutate { it.scale(5) }.add(sand.mutate { it.scale(4) }) - val tripwireHook = AspectGen().mutate { it.add(Aspects.MACHINA, 2).add(Aspects.METALLUM, 1) } + val tripwireHook = MineralAspects.iron.add(rodsWooden).add(woodenPlanks).mutate { it.scale(0.5).add(Aspects.MACHINA, 2) } val heavyCore = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.INSTRUMENTUM, 6) } val bamboo = rodsWooden.mutate { it } val bambooBlocks = woodenPlanks.mutate { it.scale(2) } diff --git a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt index eaebbcf0..66f93a8b 100644 --- a/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt +++ b/src/main/java/me/alegian/thavma/impl/init/data/providers/aspects/ToolAspects.kt @@ -58,11 +58,11 @@ object ToolAspects { val orichalcumPlating = MineralAspects.orichalcum.mutate(Mutations.PLATING) val thavmitePlating = MineralAspects.thavmite.mutate(Mutations.PLATING) - val arrows = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 2) } - val mace = AspectGen().mutate { it.add(Aspects.METALLUM, 16).add(Aspects.AETHER, 8) } + val arrows = BlockAndItemAspects.rodsWooden.add(BlockAndItemAspects.flint).add(BlockAndItemAspects.feathers).mutate { it.remove(Aspects.CORPUS) } + val mace = BlockAndItemAspects.heavyCore.add(BlockAndItemAspects.rodsBreeze).mutate { it.remove(Aspects.CORPUS) } val trident = AspectGen().mutate { it.add(Aspects.METALLUM, 12).add(Aspects.AQUA, 8) } - val bow = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 8).add(Aspects.HERBA, 2).add(Aspects.FABRICO, 2) } - val crossbow = AspectGen().mutate { it.add(Aspects.INSTRUMENTUM, 8).add(Aspects.METALLUM, 4).add(Aspects.FABRICO, 2) } + val bow = BlockAndItemAspects.rodsWooden.mutate { it.scale(3) }.add(BlockAndItemAspects.string.mutate { it.scale(3) }).mutate { it.add(Aspects.INSTRUMENTUM, 8).remove(Aspects.CORPUS) } + val crossbow = BlockAndItemAspects.rodsWooden.mutate { it.scale(3) }.add(BlockAndItemAspects.string.mutate { it.scale(2) }).add(BlockAndItemAspects.tripwireHook).add(MineralAspects.iron).mutate { it.add(Aspects.INSTRUMENTUM, 8).remove(Aspects.CORPUS) } val totemOfUndying = AspectGen().mutate { it.add(Aspects.VICTUS, 16).add(Aspects.AETHER, 8) } fun gather(datamapProvider: T7DataMapProvider, lookupProvider: HolderLookup.Provider) { From fa960c060a2e5157b98eb73718fb57b31ea64fb4 Mon Sep 17 00:00:00 2001 From: alegian Date: Fri, 30 Jan 2026 20:46:58 +0200 Subject: [PATCH 26/40] basis of excavation --- .../impl/common/item/ExcavationFocus.kt | 53 +++++++++++++++++++ .../thavma/impl/common/item/WandItem.kt | 16 +++--- .../thavma/impl/common/level/Excavation.kt | 25 +++++++++ .../impl/init/registries/deferred/T7Items.kt | 2 +- 4 files changed, 86 insertions(+), 10 deletions(-) create mode 100644 src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt create mode 100644 src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt diff --git a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt new file mode 100644 index 00000000..41d4b6c7 --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt @@ -0,0 +1,53 @@ +package me.alegian.thavma.impl.common.item + +import me.alegian.thavma.impl.common.aspect.AspectMap +import me.alegian.thavma.impl.common.data.capability.AspectContainer +import me.alegian.thavma.impl.common.level.Excavation +import net.minecraft.world.InteractionHand +import net.minecraft.world.InteractionResultHolder +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.entity.player.Player +import net.minecraft.world.item.Item +import net.minecraft.world.item.ItemStack +import net.minecraft.world.level.ClipContext +import net.minecraft.world.level.Level +import net.minecraft.world.phys.HitResult + +class ExcavationFocus : Item( + Properties().stacksTo(1) +) { + override fun getUseDuration(stack: ItemStack, entity: LivingEntity) = 72000 + + override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder { + val stack = player.getItemInHand(usedHand) + if (stack.item !is WandItem || !hasEnoughAspects(stack)) InteractionResultHolder.pass(stack) + + player.startUsingItem(usedHand) + return InteractionResultHolder.consume(stack) + } + + override fun onUseTick(level: Level, livingEntity: LivingEntity, stack: ItemStack, remainingUseDuration: Int) { + if (level.gameTime % 10 != 0L || level.isClientSide) return + + if (!hasEnoughAspects(stack)) return livingEntity.releaseUsingItem() + + AspectContainer.from(stack)?.extract(aspectCost) + advanceBlockBreak(level, livingEntity) + } + + private fun advanceBlockBreak(level: Level, livingEntity: LivingEntity) { + val from = livingEntity.eyePosition + val to = from.add(livingEntity.getViewVector(0f).scale(RANGE)) + val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, livingEntity)) + if (hitresult.type != HitResult.Type.MISS) + Excavation.excavate(level, livingEntity, hitresult.blockPos, 2) + } + + private fun hasEnoughAspects(stack: ItemStack) = + AspectContainer.from(stack)?.aspects?.contains(aspectCost) ?: false + + companion object { + val RANGE = 10.0 + val aspectCost = AspectMap.builder().build() + } +} \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt b/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt index 77d69d18..6debe0cf 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt @@ -12,7 +12,6 @@ import me.alegian.thavma.impl.common.wand.WandPlatingMaterial import me.alegian.thavma.impl.init.registries.deferred.T7BlockEntities import me.alegian.thavma.impl.init.registries.deferred.T7Blocks import me.alegian.thavma.impl.init.registries.deferred.T7DataComponents -import me.alegian.thavma.impl.rl import net.minecraft.core.BlockPos import net.minecraft.core.Direction import net.minecraft.server.level.ServerLevel @@ -21,7 +20,6 @@ import net.minecraft.sounds.SoundSource import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResult import net.minecraft.world.InteractionResultHolder -import net.minecraft.world.entity.Entity import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.player.Player import net.minecraft.world.item.Item @@ -32,15 +30,9 @@ import net.minecraft.world.item.context.UseOnContext import net.minecraft.world.level.Level import net.minecraft.world.level.block.Blocks import net.neoforged.neoforge.common.Tags -import software.bernie.geckolib.GeckoLibServices import software.bernie.geckolib.animatable.GeoItem import software.bernie.geckolib.animatable.client.GeoRenderProvider -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache import software.bernie.geckolib.animation.AnimatableManager -import software.bernie.geckolib.animation.AnimationController -import software.bernie.geckolib.animation.PlayState -import software.bernie.geckolib.animation.RawAnimation -import software.bernie.geckolib.network.packet.SingletonAnimTriggerPacket import software.bernie.geckolib.util.GeckoLibUtil import java.util.function.Consumer @@ -125,6 +117,11 @@ open class WandItem(props: Properties, val platingMaterial: WandPlatingMaterial, return super.use(level, player, usedHand) } + override fun onUseTick(level: Level, livingEntity: LivingEntity, stack: ItemStack, remainingUseDuration: Int) { + stack.equippedFocus?.item?.onUseTick(level, livingEntity, stack, remainingUseDuration) + super.onUseTick(level, livingEntity, stack, remainingUseDuration) + } + override fun interactLivingEntity(stack: ItemStack, player: Player, interactionTarget: LivingEntity, usedHand: InteractionHand): InteractionResult { val focusResult = stack.equippedFocus?.item?.interactLivingEntity(stack, player, interactionTarget, usedHand) ?: InteractionResult.PASS if (focusResult != InteractionResult.PASS) return focusResult @@ -137,7 +134,8 @@ open class WandItem(props: Properties, val platingMaterial: WandPlatingMaterial, } override fun getUseDuration(pStack: ItemStack, pEntity: LivingEntity): Int { - return 72000 + val focusDuration = pStack.equippedFocus?.item?.getUseDuration(pStack, pEntity) + return focusDuration ?: 72000 } /** diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt new file mode 100644 index 00000000..7c73f6a6 --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -0,0 +1,25 @@ +package me.alegian.thavma.impl.common.level + +import net.minecraft.core.BlockPos +import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.level.Level +import net.minecraft.world.level.block.state.BlockState + +object Excavation { + private val instances = mutableMapOf>() + + fun excavate(level: Level, entity: LivingEntity, blockPos: BlockPos, speed: Int) { + if (level.isClientSide) return + val blockState = level.getBlockState(blockPos) + + val locations = instances.compute(entity.id) { _, v -> v ?: mutableMapOf() } ?: return + val stateProgress = locations.compute(blockPos) { _, v -> + if (v == null || v.blockState != blockState) BlockStateProgress(blockState, speed) + else BlockStateProgress(blockState, (v.progress + speed).coerceIn(0, 10)) + } ?: return + + level.destroyBlockProgress(-entity.id, blockPos, stateProgress.progress) + } +} + +data class BlockStateProgress(val blockState: BlockState, val progress: Int) \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/init/registries/deferred/T7Items.kt b/src/main/java/me/alegian/thavma/impl/init/registries/deferred/T7Items.kt index da47e771..f2d8ef86 100644 --- a/src/main/java/me/alegian/thavma/impl/init/registries/deferred/T7Items.kt +++ b/src/main/java/me/alegian/thavma/impl/init/registries/deferred/T7Items.kt @@ -197,7 +197,7 @@ object T7Items { val ANGRY_ZOMBIE_SPAWN_EGG = REGISTRAR.registerItem("angry_zombie_spawn_egg") { p -> DeferredSpawnEggItem(T7EntityTypes.ANGRY_ZOMBIE, 0x00AFAF, 0x9e2323, p) } val FOCUS_EMBERS = REGISTRAR.registerItem("focus_embers", ::Item) - val FOCUS_EXCAVATION = REGISTRAR.registerItem("focus_excavation", ::Item) + val FOCUS_EXCAVATION = REGISTRAR.registerItem("focus_excavation") { ExcavationFocus() } val FOCUS_ENDERCHEST = REGISTRAR.registerItem("focus_enderchest") { EnderChestFocus() } val FOCUS_LIGHT = REGISTRAR.registerItem("focus_light") { LightFocus() } val FOCUS_HOLE = REGISTRAR.registerItem("focus_hole", ::Item) From de725159bdaae6b64bb06ff48f5278d8181b81d2 Mon Sep 17 00:00:00 2001 From: alegian Date: Fri, 30 Jan 2026 23:01:25 +0200 Subject: [PATCH 27/40] working, no renderer --- .../impl/common/event/T7CommonGameEvents.kt | 15 ++++++++ .../impl/common/item/ExcavationFocus.kt | 16 +++++---- .../thavma/impl/common/level/Excavation.kt | 34 +++++++++++++------ 3 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonGameEvents.kt b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonGameEvents.kt index e5f4ca1a..a9c60081 100644 --- a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonGameEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonGameEvents.kt @@ -3,6 +3,8 @@ package me.alegian.thavma.impl.common.event import me.alegian.thavma.impl.common.enchantment.ShriekResistance import me.alegian.thavma.impl.common.entity.isWearingStepHeightBoots import me.alegian.thavma.impl.common.item.EnderpearlFocus +import me.alegian.thavma.impl.common.item.WandItem +import me.alegian.thavma.impl.common.item.WandItem.Companion.equippedFocus import me.alegian.thavma.impl.common.level.Exchanging import me.alegian.thavma.impl.common.level.TreeFelling import me.alegian.thavma.impl.init.registries.T7AttributeModifiers @@ -18,9 +20,11 @@ import net.minecraft.world.damagesource.DamageTypes import net.minecraft.world.effect.MobEffects import net.minecraft.world.entity.LivingEntity import net.minecraft.world.entity.ai.attributes.Attributes +import net.minecraft.world.item.Items import net.neoforged.neoforge.event.entity.living.LivingDamageEvent import net.neoforged.neoforge.event.entity.living.LivingFallEvent import net.neoforged.neoforge.event.entity.living.MobEffectEvent +import net.neoforged.neoforge.event.entity.player.PlayerEvent import net.neoforged.neoforge.event.tick.EntityTickEvent import kotlin.math.max import thedarkcolour.kotlinforforge.neoforge.forge.FORGE_BUS as KFF_GAME_BUS @@ -94,12 +98,23 @@ fun entityFall(event: LivingFallEvent) { event.entity.setData(T7Attachments.LEVITATES, false) } +fun harvestCheck(event: PlayerEvent.HarvestCheck) { + val stack = event.entity.mainHandItem + if (stack.item !is WandItem) return + if (stack.equippedFocus?.item != T7Items.FOCUS_EXCAVATION.asItem()) return + + // excavation focus is the same as a netherite pickaxe + val netheritePick = Items.NETHERITE_PICKAXE.defaultInstance + event.setCanHarvest(event.canHarvest() || netheritePick.isCorrectToolForDrops(event.targetBlock)) +} + fun registerCommonGameEvents() { KFF_GAME_BUS.addListener(::entityTickPre) KFF_GAME_BUS.addListener(::livingDamagePost) KFF_GAME_BUS.addListener(::mobEffectApplicable) KFF_GAME_BUS.addListener(::preLivingDamage) KFF_GAME_BUS.addListener(::entityFall) + KFF_GAME_BUS.addListener(::harvestCheck) KFF_GAME_BUS.addListener(TreeFelling::blockBreak) KFF_GAME_BUS.addListener(TreeFelling::levelTick) KFF_GAME_BUS.addListener(Exchanging::levelTick) diff --git a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt index 41d4b6c7..1decfd67 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt @@ -27,7 +27,11 @@ class ExcavationFocus : Item( } override fun onUseTick(level: Level, livingEntity: LivingEntity, stack: ItemStack, remainingUseDuration: Int) { - if (level.gameTime % 10 != 0L || level.isClientSide) return + if ( + level.gameTime % 5 != 0L || + level.isClientSide || + livingEntity !is Player + ) return if (!hasEnoughAspects(stack)) return livingEntity.releaseUsingItem() @@ -35,12 +39,12 @@ class ExcavationFocus : Item( advanceBlockBreak(level, livingEntity) } - private fun advanceBlockBreak(level: Level, livingEntity: LivingEntity) { - val from = livingEntity.eyePosition - val to = from.add(livingEntity.getViewVector(0f).scale(RANGE)) - val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, livingEntity)) + private fun advanceBlockBreak(level: Level, player: Player) { + val from = player.eyePosition + val to = from.add(player.getViewVector(0f).scale(RANGE)) + val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)) if (hitresult.type != HitResult.Type.MISS) - Excavation.excavate(level, livingEntity, hitresult.blockPos, 2) + Excavation.excavate(level, player, hitresult.blockPos, 4) } private fun hasEnoughAspects(stack: ItemStack) = diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index 7c73f6a6..ebab01da 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -1,25 +1,39 @@ package me.alegian.thavma.impl.common.level import net.minecraft.core.BlockPos -import net.minecraft.world.entity.LivingEntity +import net.minecraft.network.protocol.game.ClientboundLevelEventPacket +import net.minecraft.server.level.ServerPlayer +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.LevelEvent import net.minecraft.world.level.block.state.BlockState object Excavation { - private val instances = mutableMapOf>() + private val instances = mutableMapOf() - fun excavate(level: Level, entity: LivingEntity, blockPos: BlockPos, speed: Int) { - if (level.isClientSide) return + fun excavate(level: Level, player: Player, blockPos: BlockPos, speed: Int) { + if (level.isClientSide || player !is ServerPlayer) return val blockState = level.getBlockState(blockPos) - val locations = instances.compute(entity.id) { _, v -> v ?: mutableMapOf() } ?: return - val stateProgress = locations.compute(blockPos) { _, v -> - if (v == null || v.blockState != blockState) BlockStateProgress(blockState, speed) - else BlockStateProgress(blockState, (v.progress + speed).coerceIn(0, 10)) + val progressObject = instances.compute(player.id) { _, v -> + if (v == null || v.blockPos != blockPos || v.blockState != blockState) + ExcavationProgress(blockPos, blockState, speed) + else + ExcavationProgress(blockPos, blockState, (v.progress + speed).coerceIn(0, 10)) } ?: return - level.destroyBlockProgress(-entity.id, blockPos, stateProgress.progress) + level.destroyBlockProgress(-player.id, blockPos, progressObject.progress) + + if (progressObject.progress < 10) return + player.gameMode.destroyBlock(blockPos) + // due to the internals of the previous function, we need to separately send sound to the breaking player + player.connection.send(ClientboundLevelEventPacket(LevelEvent.PARTICLES_DESTROY_BLOCK, blockPos, Block.getId(blockState), false)) } } -data class BlockStateProgress(val blockState: BlockState, val progress: Int) \ No newline at end of file +data class ExcavationProgress( + val blockPos: BlockPos, + val blockState: BlockState, + val progress: Int +) \ No newline at end of file From 9b898adaf85e9f647086ccfc67e5c747c56f49bc Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 31 Jan 2026 15:25:32 +0200 Subject: [PATCH 28/40] first attempt --- .../impl/client/event/T7ClientGameEvents.kt | 17 +++++++++++ .../client/renderer/ExcavationRenderer.kt | 28 +++++++++++++++++++ .../impl/common/item/ExcavationFocus.kt | 3 +- .../thavma/impl/common/level/Excavation.kt | 1 + 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt diff --git a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt index fa2875af..5acf1c13 100644 --- a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt @@ -1,6 +1,7 @@ package me.alegian.thavma.impl.client.event import com.mojang.datafixers.util.Either +import com.mojang.math.Axis import me.alegian.thavma.impl.client.T7KeyMappings import me.alegian.thavma.impl.client.clientPlayerHasRevealing import me.alegian.thavma.impl.client.getClientPlayerEquipmentItem @@ -10,6 +11,7 @@ import me.alegian.thavma.impl.client.gui.tooltip.AspectTooltipComponent import me.alegian.thavma.impl.client.gui.tooltip.containedPrimalsComponent import me.alegian.thavma.impl.client.gui.tooltip.containedAspectsComponents import me.alegian.thavma.impl.client.renderer.AspectRenderer +import me.alegian.thavma.impl.client.renderer.ExcavationRenderer import me.alegian.thavma.impl.client.renderer.HammerHighlightRenderer import me.alegian.thavma.impl.common.aspect.AspectHelper import me.alegian.thavma.impl.common.block.AuraNodeBlock @@ -18,6 +20,7 @@ import me.alegian.thavma.impl.common.item.HammerItem import me.alegian.thavma.impl.common.item.WandItem import me.alegian.thavma.impl.common.payload.FocusPayload import me.alegian.thavma.impl.common.scanning.hasScanned +import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.T7Blocks import me.alegian.thavma.impl.init.registries.deferred.T7DataComponents import me.alegian.thavma.impl.init.registries.deferred.T7Items @@ -26,6 +29,7 @@ import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen import net.minecraft.network.chat.Component import net.minecraft.world.entity.EquipmentSlot +import net.minecraft.world.entity.HumanoidArm import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.HitResult import net.neoforged.api.distmarker.Dist @@ -134,6 +138,18 @@ private fun renderPlayerPre(event: RenderPlayerEvent.Pre) { } } +private fun renderPlayerPost(event: RenderPlayerEvent.Pre) { + val poseStack = event.poseStack + poseStack.use { + mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) + val model = event.renderer.model + val arm = if (event.entity.mainArm == HumanoidArm.RIGHT) model.rightArm else model.leftArm + arm.translateAndRotate(poseStack) + translate(0.0, 0.0, 0.0) + ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime) + } +} + private var cooldownTicks = 0 private fun clientTick(event: ClientTickEvent.Post) { cooldownTicks-- @@ -159,5 +175,6 @@ fun registerClientGameEvents() { KFF_GAME_BUS.addListener(::jarTooltip) KFF_GAME_BUS.addListener(::aspectTooltip) KFF_GAME_BUS.addListener(::renderPlayerPre) + KFF_GAME_BUS.addListener(::renderPlayerPost) KFF_GAME_BUS.addListener(::clientTick) } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt new file mode 100644 index 00000000..6b6d6870 --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -0,0 +1,28 @@ +package me.alegian.thavma.impl.client.renderer + +import com.mojang.blaze3d.vertex.PoseStack +import me.alegian.thavma.impl.common.level.Excavation +import me.alegian.thavma.impl.common.util.use +import me.alegian.thavma.impl.init.registries.deferred.Aspects +import net.minecraft.client.renderer.MultiBufferSource +import net.minecraft.client.renderer.blockentity.BeaconRenderer + +object ExcavationRenderer { + fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long) { + handPose.use { + BeaconRenderer.renderBeaconBeam( + handPose, + bufferSource, + BeaconRenderer.BEAM_LOCATION, + partialTick, + 1f, + gameTime, + 0, + Excavation.RANGE.toInt(), + Aspects.TERRA.get().color, + 0.25f, + 0.25f + ) + } + } +} \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt index 1decfd67..edc0472c 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt @@ -41,7 +41,7 @@ class ExcavationFocus : Item( private fun advanceBlockBreak(level: Level, player: Player) { val from = player.eyePosition - val to = from.add(player.getViewVector(0f).scale(RANGE)) + val to = from.add(player.getViewVector(0f).scale(Excavation.RANGE)) val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)) if (hitresult.type != HitResult.Type.MISS) Excavation.excavate(level, player, hitresult.blockPos, 4) @@ -51,7 +51,6 @@ class ExcavationFocus : Item( AspectContainer.from(stack)?.aspects?.contains(aspectCost) ?: false companion object { - val RANGE = 10.0 val aspectCost = AspectMap.builder().build() } } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index ebab01da..dbd84c5b 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -10,6 +10,7 @@ import net.minecraft.world.level.block.LevelEvent import net.minecraft.world.level.block.state.BlockState object Excavation { + const val RANGE = 10.0 private val instances = mutableMapOf() fun excavate(level: Level, player: Player, blockPos: BlockPos, speed: Int) { From 03fecb07acf04575c587582c85aa3dcecd51121d Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 31 Jan 2026 16:48:26 +0200 Subject: [PATCH 29/40] find some constants --- .../thavma/impl/client/event/T7ClientGameEvents.kt | 9 +++------ .../thavma/impl/client/renderer/ExcavationRenderer.kt | 4 ++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt index 5acf1c13..6e650426 100644 --- a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt @@ -8,8 +8,8 @@ import me.alegian.thavma.impl.client.getClientPlayerEquipmentItem import me.alegian.thavma.impl.client.gui.foci.FociScreen import me.alegian.thavma.impl.client.gui.tooltip.AspectClientTooltipComponent import me.alegian.thavma.impl.client.gui.tooltip.AspectTooltipComponent -import me.alegian.thavma.impl.client.gui.tooltip.containedPrimalsComponent import me.alegian.thavma.impl.client.gui.tooltip.containedAspectsComponents +import me.alegian.thavma.impl.client.gui.tooltip.containedPrimalsComponent import me.alegian.thavma.impl.client.renderer.AspectRenderer import me.alegian.thavma.impl.client.renderer.ExcavationRenderer import me.alegian.thavma.impl.client.renderer.HammerHighlightRenderer @@ -29,7 +29,6 @@ import net.minecraft.client.Minecraft import net.minecraft.client.gui.screens.Screen import net.minecraft.network.chat.Component import net.minecraft.world.entity.EquipmentSlot -import net.minecraft.world.entity.HumanoidArm import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.HitResult import net.neoforged.api.distmarker.Dist @@ -142,10 +141,8 @@ private fun renderPlayerPost(event: RenderPlayerEvent.Pre) { val poseStack = event.poseStack poseStack.use { mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) - val model = event.renderer.model - val arm = if (event.entity.mainArm == HumanoidArm.RIGHT) model.rightArm else model.leftArm - arm.translateAndRotate(poseStack) - translate(0.0, 0.0, 0.0) + translate(0.0, 19/16.0, 0.0) + event.renderer.model.translateToHand(event.entity.mainArm, poseStack) ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime) } } diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index 6b6d6870..9cd3d370 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -1,6 +1,7 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack +import me.alegian.thavma.impl.client.util.rotateX import me.alegian.thavma.impl.common.level.Excavation import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects @@ -10,6 +11,9 @@ import net.minecraft.client.renderer.blockentity.BeaconRenderer object ExcavationRenderer { fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long) { handPose.use { + translate(-0.5, 0.0, -0.5) + rotateX(90) + translate(0.0, 1.3, 0.1) BeaconRenderer.renderBeaconBeam( handPose, bufferSource, From 54ba6be564328482392580785341c9c02cd582c5 Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 31 Jan 2026 17:31:39 +0200 Subject: [PATCH 30/40] fatter beam --- .../alegian/thavma/impl/client/renderer/ExcavationRenderer.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index 9cd3d370..1c1249ed 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -24,8 +24,8 @@ object ExcavationRenderer { 0, Excavation.RANGE.toInt(), Aspects.TERRA.get().color, - 0.25f, - 0.25f + 0.3f, + 0.3f ) } } From 4354d09197d8e8cc7d6276c9c6d01ae56b719a3c Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 31 Jan 2026 17:48:30 +0200 Subject: [PATCH 31/40] doesnt work --- .../impl/client/event/T7ClientGameEvents.kt | 13 ++----------- .../impl/client/renderer/ExcavationRenderer.kt | 13 ++++++++++--- .../thavma/impl/common/level/Excavation.kt | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt index 6e650426..adeb8171 100644 --- a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt @@ -18,6 +18,7 @@ import me.alegian.thavma.impl.common.block.AuraNodeBlock import me.alegian.thavma.impl.common.data.capability.AspectContainer import me.alegian.thavma.impl.common.item.HammerItem import me.alegian.thavma.impl.common.item.WandItem +import me.alegian.thavma.impl.common.level.Excavation import me.alegian.thavma.impl.common.payload.FocusPayload import me.alegian.thavma.impl.common.scanning.hasScanned import me.alegian.thavma.impl.common.util.use @@ -137,16 +138,6 @@ private fun renderPlayerPre(event: RenderPlayerEvent.Pre) { } } -private fun renderPlayerPost(event: RenderPlayerEvent.Pre) { - val poseStack = event.poseStack - poseStack.use { - mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) - translate(0.0, 19/16.0, 0.0) - event.renderer.model.translateToHand(event.entity.mainArm, poseStack) - ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime) - } -} - private var cooldownTicks = 0 private fun clientTick(event: ClientTickEvent.Post) { cooldownTicks-- @@ -172,6 +163,6 @@ fun registerClientGameEvents() { KFF_GAME_BUS.addListener(::jarTooltip) KFF_GAME_BUS.addListener(::aspectTooltip) KFF_GAME_BUS.addListener(::renderPlayerPre) - KFF_GAME_BUS.addListener(::renderPlayerPost) + KFF_GAME_BUS.addListener(Excavation::renderPlayerPre) KFF_GAME_BUS.addListener(::clientTick) } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index 1c1249ed..f7e23c55 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -1,18 +1,25 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack -import me.alegian.thavma.impl.client.util.rotateX import me.alegian.thavma.impl.common.level.Excavation +import me.alegian.thavma.impl.common.util.toVec3 import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer +import net.minecraft.core.BlockPos +import org.joml.Quaternionf +import org.joml.Vector3f object ExcavationRenderer { - fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long) { + fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long, targetBlockPos: BlockPos) { handPose.use { translate(-0.5, 0.0, -0.5) - rotateX(90) + + val currentUp = Vector3f(0f, 1f, 0f) + val targetDir = Vector3f(targetBlockPos.toVec3().toVector3f()).normalize() + mulPose(Quaternionf().rotationTo(currentUp, targetDir)) + translate(0.0, 1.3, 0.1) BeaconRenderer.renderBeaconBeam( handPose, diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index dbd84c5b..bc2151fe 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -1,5 +1,8 @@ package me.alegian.thavma.impl.common.level +import com.mojang.math.Axis +import me.alegian.thavma.impl.client.renderer.ExcavationRenderer +import me.alegian.thavma.impl.common.util.use import net.minecraft.core.BlockPos import net.minecraft.network.protocol.game.ClientboundLevelEventPacket import net.minecraft.server.level.ServerPlayer @@ -8,6 +11,7 @@ import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.LevelEvent import net.minecraft.world.level.block.state.BlockState +import net.neoforged.neoforge.client.event.RenderPlayerEvent object Excavation { const val RANGE = 10.0 @@ -31,6 +35,19 @@ object Excavation { // due to the internals of the previous function, we need to separately send sound to the breaking player player.connection.send(ClientboundLevelEventPacket(LevelEvent.PARTICLES_DESTROY_BLOCK, blockPos, Block.getId(blockState), false)) } + + fun renderPlayerPre(event: RenderPlayerEvent.Pre) { + val poseStack = event.poseStack + poseStack.use { + mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) + // hours of reverse engineering led to this constant + translate(0.0, 19 / 16.0, 0.0) + event.renderer.model.translateToHand(event.entity.mainArm, poseStack) + + val blockPos = instances[event.entity.id]?.blockPos ?: return@use + ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, blockPos) + } + } } data class ExcavationProgress( From a2272a426a0498c532b13d037ed521d2a8bd6990 Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 31 Jan 2026 21:38:08 +0200 Subject: [PATCH 32/40] still doesnt --- .../impl/client/renderer/ExcavationRenderer.kt | 13 +++++-------- .../alegian/thavma/impl/common/level/Excavation.kt | 10 ++++++++-- .../thavma/impl/common/util/Vector2iExtensions.kt | 2 +- .../thavma/impl/common/util/Vector3fExtensions.kt | 6 ++++++ 4 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 src/main/java/me/alegian/thavma/impl/common/util/Vector3fExtensions.kt diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index f7e23c55..f76b5c6a 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -2,25 +2,22 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack import me.alegian.thavma.impl.common.level.Excavation -import me.alegian.thavma.impl.common.util.toVec3 +import me.alegian.thavma.impl.common.util.minus import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer -import net.minecraft.core.BlockPos import org.joml.Quaternionf import org.joml.Vector3f object ExcavationRenderer { - fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long, targetBlockPos: BlockPos) { + fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long, targetPos: Vector3f, handPos: Vector3f) { handPose.use { - translate(-0.5, 0.0, -0.5) - val currentUp = Vector3f(0f, 1f, 0f) - val targetDir = Vector3f(targetBlockPos.toVec3().toVector3f()).normalize() - mulPose(Quaternionf().rotationTo(currentUp, targetDir)) + val correctUp = handPose.last().pose().invert().transformPosition(targetPos-handPos).normalize() + mulPose(Quaternionf().rotationTo(currentUp, correctUp)) - translate(0.0, 1.3, 0.1) + translate(-0.5, 0.0, -0.5) BeaconRenderer.renderBeaconBeam( handPose, bufferSource, diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index bc2151fe..2730e94c 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -2,7 +2,11 @@ package me.alegian.thavma.impl.common.level import com.mojang.math.Axis import me.alegian.thavma.impl.client.renderer.ExcavationRenderer +import me.alegian.thavma.impl.client.util.transformOrigin +import me.alegian.thavma.impl.common.util.plus +import me.alegian.thavma.impl.common.util.toVec3 import me.alegian.thavma.impl.common.util.use +import net.minecraft.client.Minecraft import net.minecraft.core.BlockPos import net.minecraft.network.protocol.game.ClientboundLevelEventPacket import net.minecraft.server.level.ServerPlayer @@ -44,8 +48,10 @@ object Excavation { translate(0.0, 19 / 16.0, 0.0) event.renderer.model.translateToHand(event.entity.mainArm, poseStack) - val blockPos = instances[event.entity.id]?.blockPos ?: return@use - ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, blockPos) + val targetPos = instances[event.entity.id]?.blockPos?.toVec3()?.toVector3f() ?: return@use + val cameraPos = Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() + val handPos = transformOrigin() + cameraPos + ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, targetPos, handPos) } } } diff --git a/src/main/java/me/alegian/thavma/impl/common/util/Vector2iExtensions.kt b/src/main/java/me/alegian/thavma/impl/common/util/Vector2iExtensions.kt index 2a253f16..70e29bab 100644 --- a/src/main/java/me/alegian/thavma/impl/common/util/Vector2iExtensions.kt +++ b/src/main/java/me/alegian/thavma/impl/common/util/Vector2iExtensions.kt @@ -2,4 +2,4 @@ package me.alegian.thavma.impl.common.util import org.joml.Vector2i -operator fun Vector2i.minus(other: Vector2i) = Vector2i(x - other.x, y - other.y) \ No newline at end of file +operator fun Vector2i.minus(other: Vector2i) = this.sub(other) \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/common/util/Vector3fExtensions.kt b/src/main/java/me/alegian/thavma/impl/common/util/Vector3fExtensions.kt new file mode 100644 index 00000000..1d90ec44 --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/common/util/Vector3fExtensions.kt @@ -0,0 +1,6 @@ +package me.alegian.thavma.impl.common.util + +import org.joml.Vector3f + +operator fun Vector3f.minus(other: Vector3f) = this.sub(other) +operator fun Vector3f.plus(other: Vector3f) = this.add(other) From baa9fbabcc9825085d5b4fec13f8a8b2212f5f87 Mon Sep 17 00:00:00 2001 From: alegian Date: Sat, 31 Jan 2026 23:36:13 +0200 Subject: [PATCH 33/40] finally something --- .../thavma/impl/client/renderer/ExcavationRenderer.kt | 4 +++- .../java/me/alegian/thavma/impl/common/level/Excavation.kt | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index f76b5c6a..d6ac566a 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -7,6 +7,7 @@ import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer +import org.joml.Matrix4f import org.joml.Quaternionf import org.joml.Vector3f @@ -14,10 +15,11 @@ object ExcavationRenderer { fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long, targetPos: Vector3f, handPos: Vector3f) { handPose.use { val currentUp = Vector3f(0f, 1f, 0f) - val correctUp = handPose.last().pose().invert().transformPosition(targetPos-handPos).normalize() + val correctUp = handPose.last().pose().invert(Matrix4f()).transformDirection(targetPos-handPos).normalize() mulPose(Quaternionf().rotationTo(currentUp, correctUp)) translate(-0.5, 0.0, -0.5) + translate(0.0, 0.0, 0.0) BeaconRenderer.renderBeaconBeam( handPose, bufferSource, diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index 2730e94c..5d3bff83 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -3,6 +3,7 @@ package me.alegian.thavma.impl.common.level import com.mojang.math.Axis import me.alegian.thavma.impl.client.renderer.ExcavationRenderer import me.alegian.thavma.impl.client.util.transformOrigin +import me.alegian.thavma.impl.common.util.minus import me.alegian.thavma.impl.common.util.plus import me.alegian.thavma.impl.common.util.toVec3 import me.alegian.thavma.impl.common.util.use @@ -48,9 +49,9 @@ object Excavation { translate(0.0, 19 / 16.0, 0.0) event.renderer.model.translateToHand(event.entity.mainArm, poseStack) - val targetPos = instances[event.entity.id]?.blockPos?.toVec3()?.toVector3f() ?: return@use - val cameraPos = Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() - val handPos = transformOrigin() + cameraPos + var targetPos = instances[event.entity.id]?.blockPos?.center?.toVector3f() ?: return@use + targetPos -= Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() + val handPos = transformOrigin() ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, targetPos, handPos) } } From fcb33ce1e18a34e949c78b545773f7077af7c322 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 1 Feb 2026 11:42:33 +0200 Subject: [PATCH 34/40] almost done --- .../client/renderer/ExcavationRenderer.kt | 20 ++++++++++++++----- .../impl/common/item/ExcavationFocus.kt | 8 ++++++++ .../thavma/impl/common/item/WandItem.kt | 5 +++++ .../thavma/impl/common/level/Excavation.kt | 13 +++++++----- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index d6ac566a..3a8b9507 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -1,25 +1,35 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack -import me.alegian.thavma.impl.common.level.Excavation +import me.alegian.thavma.impl.client.util.transformOrigin import me.alegian.thavma.impl.common.util.minus import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects +import net.minecraft.client.Minecraft import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer +import net.minecraft.core.BlockPos import org.joml.Matrix4f import org.joml.Quaternionf import org.joml.Vector3f object ExcavationRenderer { - fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long, targetPos: Vector3f, handPos: Vector3f) { + fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long, blockPos: BlockPos) { handPose.use { + // go to the tip of the wand + translate(0.0, -0.6, 0.8) + + // rotate towards target block + var targetPos = blockPos.center.toVector3f() + targetPos -= Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() + val wandTipPos = transformOrigin() val currentUp = Vector3f(0f, 1f, 0f) - val correctUp = handPose.last().pose().invert(Matrix4f()).transformDirection(targetPos-handPos).normalize() + val localDiff = (targetPos-wandTipPos).mulDirection(handPose.last().pose().invert(Matrix4f())) + val correctUp = localDiff.normalize(Vector3f()) mulPose(Quaternionf().rotationTo(currentUp, correctUp)) + // undo built-in translation of beacon translate(-0.5, 0.0, -0.5) - translate(0.0, 0.0, 0.0) BeaconRenderer.renderBeaconBeam( handPose, bufferSource, @@ -28,7 +38,7 @@ object ExcavationRenderer { 1f, gameTime, 0, - Excavation.RANGE.toInt(), + localDiff.length().toInt(), Aspects.TERRA.get().color, 0.3f, 0.3f diff --git a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt index edc0472c..bb968c3d 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt @@ -39,6 +39,14 @@ class ExcavationFocus : Item( advanceBlockBreak(level, livingEntity) } + override fun releaseUsing(stack: ItemStack, level: Level, livingEntity: LivingEntity, timeCharged: Int) { + if ( + level.isClientSide || + livingEntity !is Player + ) return + Excavation.stopExcavation(level, livingEntity) + } + private fun advanceBlockBreak(level: Level, player: Player) { val from = player.eyePosition val to = from.add(player.getViewVector(0f).scale(Excavation.RANGE)) diff --git a/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt b/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt index 6debe0cf..516fde2d 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt @@ -122,6 +122,11 @@ open class WandItem(props: Properties, val platingMaterial: WandPlatingMaterial, super.onUseTick(level, livingEntity, stack, remainingUseDuration) } + override fun releaseUsing(stack: ItemStack, level: Level, livingEntity: LivingEntity, timeCharged: Int) { + stack.equippedFocus?.item?.releaseUsing(stack, level, livingEntity, timeCharged) + super.releaseUsing(stack, level, livingEntity, timeCharged) + } + override fun interactLivingEntity(stack: ItemStack, player: Player, interactionTarget: LivingEntity, usedHand: InteractionHand): InteractionResult { val focusResult = stack.equippedFocus?.item?.interactLivingEntity(stack, player, interactionTarget, usedHand) ?: InteractionResult.PASS if (focusResult != InteractionResult.PASS) return focusResult diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index 5d3bff83..069b0d54 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -41,18 +41,21 @@ object Excavation { player.connection.send(ClientboundLevelEventPacket(LevelEvent.PARTICLES_DESTROY_BLOCK, blockPos, Block.getId(blockState), false)) } + fun stopExcavation(level: Level, player: Player) { + if (level.isClientSide) return + instances.remove(player.id) + } + fun renderPlayerPre(event: RenderPlayerEvent.Pre) { val poseStack = event.poseStack poseStack.use { mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) - // hours of reverse engineering led to this constant + // go to arm pivot point (hours of reverse engineering led to this constant) translate(0.0, 19 / 16.0, 0.0) event.renderer.model.translateToHand(event.entity.mainArm, poseStack) - var targetPos = instances[event.entity.id]?.blockPos?.center?.toVector3f() ?: return@use - targetPos -= Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() - val handPos = transformOrigin() - ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, targetPos, handPos) + val blockPos = instances[event.entity.id]?.blockPos ?: return@use + ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, blockPos) } } } From 2853a694739bee3075b72416ea64b8e6accc9e9c Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 1 Feb 2026 12:35:49 +0200 Subject: [PATCH 35/40] proper networking --- .../impl/client/event/T7ClientGameEvents.kt | 5 +-- .../client/renderer/ExcavationRenderer.kt | 26 ++++++++--- .../impl/common/event/T7CommonModEvents.kt | 5 +++ .../impl/common/item/ExcavationFocus.kt | 4 +- .../thavma/impl/common/level/Excavation.kt | 39 +++++++--------- .../impl/common/payload/ExcavationPayload.kt | 44 +++++++++++++++++++ .../thavma/impl/common/util/T7StreamCodecs.kt | 17 +++++++ 7 files changed, 104 insertions(+), 36 deletions(-) create mode 100644 src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt create mode 100644 src/main/java/me/alegian/thavma/impl/common/util/T7StreamCodecs.kt diff --git a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt index adeb8171..3cbc24c9 100644 --- a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt @@ -1,7 +1,6 @@ package me.alegian.thavma.impl.client.event import com.mojang.datafixers.util.Either -import com.mojang.math.Axis import me.alegian.thavma.impl.client.T7KeyMappings import me.alegian.thavma.impl.client.clientPlayerHasRevealing import me.alegian.thavma.impl.client.getClientPlayerEquipmentItem @@ -18,10 +17,8 @@ import me.alegian.thavma.impl.common.block.AuraNodeBlock import me.alegian.thavma.impl.common.data.capability.AspectContainer import me.alegian.thavma.impl.common.item.HammerItem import me.alegian.thavma.impl.common.item.WandItem -import me.alegian.thavma.impl.common.level.Excavation import me.alegian.thavma.impl.common.payload.FocusPayload import me.alegian.thavma.impl.common.scanning.hasScanned -import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.T7Blocks import me.alegian.thavma.impl.init.registries.deferred.T7DataComponents import me.alegian.thavma.impl.init.registries.deferred.T7Items @@ -163,6 +160,6 @@ fun registerClientGameEvents() { KFF_GAME_BUS.addListener(::jarTooltip) KFF_GAME_BUS.addListener(::aspectTooltip) KFF_GAME_BUS.addListener(::renderPlayerPre) - KFF_GAME_BUS.addListener(Excavation::renderPlayerPre) + KFF_GAME_BUS.addListener(ExcavationRenderer::renderPlayerPre) KFF_GAME_BUS.addListener(::clientTick) } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index 3a8b9507..8bd5e702 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -1,6 +1,7 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.math.Axis import me.alegian.thavma.impl.client.util.transformOrigin import me.alegian.thavma.impl.common.util.minus import me.alegian.thavma.impl.common.util.use @@ -8,23 +9,38 @@ import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.client.Minecraft import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer -import net.minecraft.core.BlockPos +import net.minecraft.world.phys.Vec3 +import net.neoforged.neoforge.client.event.RenderPlayerEvent import org.joml.Matrix4f import org.joml.Quaternionf import org.joml.Vector3f object ExcavationRenderer { - fun render(handPose: PoseStack, bufferSource: MultiBufferSource,partialTick: Float, gameTime: Long, blockPos: BlockPos) { + val renderers = mutableMapOf() + + fun renderPlayerPre(event: RenderPlayerEvent.Pre) { + val poseStack = event.poseStack + poseStack.use { + mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) + // go to arm pivot point (hours of reverse engineering led to this constant) + translate(0.0, 19 / 16.0, 0.0) + event.renderer.model.translateToHand(event.entity.mainArm, poseStack) + + val hitPos = renderers[event.entity.id]?.toVector3f() ?: return@use + render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, hitPos) + } + } + + fun render(handPose: PoseStack, bufferSource: MultiBufferSource, partialTick: Float, gameTime: Long, hitPos: Vector3f) { handPose.use { // go to the tip of the wand translate(0.0, -0.6, 0.8) // rotate towards target block - var targetPos = blockPos.center.toVector3f() - targetPos -= Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() + val targetPos = hitPos - Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() val wandTipPos = transformOrigin() val currentUp = Vector3f(0f, 1f, 0f) - val localDiff = (targetPos-wandTipPos).mulDirection(handPose.last().pose().invert(Matrix4f())) + val localDiff = (targetPos - wandTipPos).mulDirection(handPose.last().pose().invert(Matrix4f())) val correctUp = localDiff.normalize(Vector3f()) mulPose(Quaternionf().rotationTo(currentUp, correctUp)) diff --git a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt index 242961e3..794a43a9 100644 --- a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt @@ -155,6 +155,11 @@ private fun registerSpawnPlacements(event: RegisterSpawnPlacementsEvent) { private fun registerPayloadHandlers(event: RegisterPayloadHandlersEvent) { val registrar = event.registrar("1") + registrar.playToClient( + ExcavationPayload.TYPE, + ExcavationPayload.STREAM_CODEC, + ExcavationPayload::handle + ) registrar.playToClient( ScanResultPayload.TYPE, ScanResultPayload.STREAM_CODEC, diff --git a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt index bb968c3d..61ba688e 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt @@ -11,7 +11,6 @@ import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.level.ClipContext import net.minecraft.world.level.Level -import net.minecraft.world.phys.HitResult class ExcavationFocus : Item( Properties().stacksTo(1) @@ -51,8 +50,7 @@ class ExcavationFocus : Item( val from = player.eyePosition val to = from.add(player.getViewVector(0f).scale(Excavation.RANGE)) val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)) - if (hitresult.type != HitResult.Type.MISS) - Excavation.excavate(level, player, hitresult.blockPos, 4) + Excavation.excavate(level, player, hitresult, 4) } private fun hasEnoughAspects(stack: ItemStack) = diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index 069b0d54..a3a03147 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -1,13 +1,6 @@ package me.alegian.thavma.impl.common.level -import com.mojang.math.Axis -import me.alegian.thavma.impl.client.renderer.ExcavationRenderer -import me.alegian.thavma.impl.client.util.transformOrigin -import me.alegian.thavma.impl.common.util.minus -import me.alegian.thavma.impl.common.util.plus -import me.alegian.thavma.impl.common.util.toVec3 -import me.alegian.thavma.impl.common.util.use -import net.minecraft.client.Minecraft +import me.alegian.thavma.impl.common.payload.ExcavationPayload import net.minecraft.core.BlockPos import net.minecraft.network.protocol.game.ClientboundLevelEventPacket import net.minecraft.server.level.ServerPlayer @@ -16,14 +9,24 @@ import net.minecraft.world.level.Level import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.LevelEvent import net.minecraft.world.level.block.state.BlockState -import net.neoforged.neoforge.client.event.RenderPlayerEvent +import net.minecraft.world.phys.BlockHitResult +import net.minecraft.world.phys.HitResult +import net.neoforged.neoforge.network.PacketDistributor object Excavation { const val RANGE = 10.0 private val instances = mutableMapOf() - fun excavate(level: Level, player: Player, blockPos: BlockPos, speed: Int) { + fun excavate(level: Level, player: Player, hitResult: BlockHitResult, speed: Int) { if (level.isClientSide || player !is ServerPlayer) return + val hitPos = hitResult.location + // if we missed, just render the beam + if (hitResult.type == HitResult.Type.MISS){ + PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, hitPos, 0)) + return + } + + val blockPos = hitResult.blockPos val blockState = level.getBlockState(blockPos) val progressObject = instances.compute(player.id) { _, v -> @@ -33,7 +36,7 @@ object Excavation { ExcavationProgress(blockPos, blockState, (v.progress + speed).coerceIn(0, 10)) } ?: return - level.destroyBlockProgress(-player.id, blockPos, progressObject.progress) + PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, blockPos, hitPos, progressObject.progress)) if (progressObject.progress < 10) return player.gameMode.destroyBlock(blockPos) @@ -44,19 +47,7 @@ object Excavation { fun stopExcavation(level: Level, player: Player) { if (level.isClientSide) return instances.remove(player.id) - } - - fun renderPlayerPre(event: RenderPlayerEvent.Pre) { - val poseStack = event.poseStack - poseStack.use { - mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) - // go to arm pivot point (hours of reverse engineering led to this constant) - translate(0.0, 19 / 16.0, 0.0) - event.renderer.model.translateToHand(event.entity.mainArm, poseStack) - - val blockPos = instances[event.entity.id]?.blockPos ?: return@use - ExcavationRenderer.render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, blockPos) - } + PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, null, 0)) } } diff --git a/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt b/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt new file mode 100644 index 00000000..7e49fc92 --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt @@ -0,0 +1,44 @@ +package me.alegian.thavma.impl.common.payload + +import me.alegian.thavma.impl.client.renderer.ExcavationRenderer +import me.alegian.thavma.impl.common.codec.nullable +import me.alegian.thavma.impl.common.util.T7StreamCodecs +import me.alegian.thavma.impl.rl +import net.minecraft.core.BlockPos +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.network.protocol.common.custom.CustomPacketPayload +import net.minecraft.world.phys.Vec3 +import net.neoforged.neoforge.network.handling.IPayloadContext + +// S2C +class ExcavationPayload( + private val entityId: Int, + private val blockPos: BlockPos?, + private val hitPos: Vec3?, + private val progress: Int, +) : CustomPacketPayload { + override fun type() = TYPE + + companion object { + val TYPE = CustomPacketPayload.Type(rl("excavation")) + + val STREAM_CODEC = StreamCodec.composite( + ByteBufCodecs.INT, + ExcavationPayload::entityId, + BlockPos.STREAM_CODEC.nullable(), + ExcavationPayload::blockPos, + T7StreamCodecs.VEC3.nullable(), + ExcavationPayload::hitPos, + ByteBufCodecs.INT, + ExcavationPayload::progress, + ::ExcavationPayload + ) + + fun handle(payload: ExcavationPayload, context: IPayloadContext) { + ExcavationRenderer.renderers.compute(payload.entityId) { _, _ -> payload.hitPos } + if (payload.blockPos != null) + context.player().level().destroyBlockProgress(-payload.entityId, payload.blockPos, payload.progress) + } + } +} \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/common/util/T7StreamCodecs.kt b/src/main/java/me/alegian/thavma/impl/common/util/T7StreamCodecs.kt new file mode 100644 index 00000000..5b03e55c --- /dev/null +++ b/src/main/java/me/alegian/thavma/impl/common/util/T7StreamCodecs.kt @@ -0,0 +1,17 @@ +package me.alegian.thavma.impl.common.util + +import net.minecraft.network.codec.ByteBufCodecs +import net.minecraft.network.codec.StreamCodec +import net.minecraft.world.phys.Vec3 + +object T7StreamCodecs{ + val VEC3 = StreamCodec.composite( + ByteBufCodecs.DOUBLE, + {it.x}, + ByteBufCodecs.DOUBLE, + {it.y}, + ByteBufCodecs.DOUBLE, + {it.z}, + ::Vec3 + ) +} \ No newline at end of file From 92b9a9ba38ea54d9913b1793aa66e081bc7b60d0 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 1 Feb 2026 13:35:13 +0200 Subject: [PATCH 36/40] try to make smoother --- .../client/renderer/ExcavationRenderer.kt | 31 +++++++++++++++++-- .../thavma/impl/common/level/Excavation.kt | 8 ++--- .../impl/common/payload/ExcavationPayload.kt | 8 ++--- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index 8bd5e702..a42eadd5 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -3,22 +3,28 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack import com.mojang.math.Axis import me.alegian.thavma.impl.client.util.transformOrigin +import me.alegian.thavma.impl.common.level.Excavation import me.alegian.thavma.impl.common.util.minus import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.client.Minecraft import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer -import net.minecraft.world.phys.Vec3 +import net.minecraft.world.entity.Entity +import net.minecraft.world.level.ClipContext +import net.minecraft.world.phys.BlockHitResult import net.neoforged.neoforge.client.event.RenderPlayerEvent import org.joml.Matrix4f import org.joml.Quaternionf import org.joml.Vector3f object ExcavationRenderer { - val renderers = mutableMapOf() + val renderers = mutableSetOf() fun renderPlayerPre(event: RenderPlayerEvent.Pre) { + if (!renderers.contains(event.entity.id)) return + val hitPos = CachedHitResult.get(event.entity).hitResult.location.toVector3f() + val poseStack = event.poseStack poseStack.use { mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) @@ -26,7 +32,6 @@ object ExcavationRenderer { translate(0.0, 19 / 16.0, 0.0) event.renderer.model.translateToHand(event.entity.mainArm, poseStack) - val hitPos = renderers[event.entity.id]?.toVector3f() ?: return@use render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, hitPos) } } @@ -61,4 +66,24 @@ object ExcavationRenderer { ) } } + + private data class CachedHitResult(val tick: Long, val hitResult: BlockHitResult) { + companion object { + private val hitResults = mutableMapOf() + + fun get(entity: Entity): CachedHitResult { + val level = entity.level() + val old = hitResults[entity.id] + if (old == null || old.tick != level.gameTime) { + val from = entity.eyePosition + val to = from.add(entity.getViewVector(0f).scale(Excavation.RANGE)) + val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)) + val newCache = CachedHitResult(level.gameTime, hitresult) + hitResults[entity.id] = newCache + return newCache + } else + return old + } + } + } } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index a3a03147..33e6ff65 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -19,10 +19,9 @@ object Excavation { fun excavate(level: Level, player: Player, hitResult: BlockHitResult, speed: Int) { if (level.isClientSide || player !is ServerPlayer) return - val hitPos = hitResult.location // if we missed, just render the beam if (hitResult.type == HitResult.Type.MISS){ - PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, hitPos, 0)) + PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, 0)) return } @@ -36,7 +35,7 @@ object Excavation { ExcavationProgress(blockPos, blockState, (v.progress + speed).coerceIn(0, 10)) } ?: return - PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, blockPos, hitPos, progressObject.progress)) + PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, blockPos, progressObject.progress)) if (progressObject.progress < 10) return player.gameMode.destroyBlock(blockPos) @@ -47,7 +46,8 @@ object Excavation { fun stopExcavation(level: Level, player: Player) { if (level.isClientSide) return instances.remove(player.id) - PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, null, 0)) + // todo: fix + PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, 0)) } } diff --git a/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt b/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt index 7e49fc92..fc65ed8b 100644 --- a/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt +++ b/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt @@ -15,7 +15,6 @@ import net.neoforged.neoforge.network.handling.IPayloadContext class ExcavationPayload( private val entityId: Int, private val blockPos: BlockPos?, - private val hitPos: Vec3?, private val progress: Int, ) : CustomPacketPayload { override fun type() = TYPE @@ -28,15 +27,16 @@ class ExcavationPayload( ExcavationPayload::entityId, BlockPos.STREAM_CODEC.nullable(), ExcavationPayload::blockPos, - T7StreamCodecs.VEC3.nullable(), - ExcavationPayload::hitPos, ByteBufCodecs.INT, ExcavationPayload::progress, ::ExcavationPayload ) fun handle(payload: ExcavationPayload, context: IPayloadContext) { - ExcavationRenderer.renderers.compute(payload.entityId) { _, _ -> payload.hitPos } + if (payload.progress > 0) + ExcavationRenderer.renderers.add(payload.entityId) + else + ExcavationRenderer.renderers.remove(payload.entityId) if (payload.blockPos != null) context.player().level().destroyBlockProgress(-payload.entityId, payload.blockPos, payload.progress) } From 6cd09a5bf58c04f72b00b50f96993f2de6cf46f8 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 1 Feb 2026 15:10:46 +0200 Subject: [PATCH 37/40] start removing payload --- .../impl/common/event/T7CommonModEvents.kt | 5 --- .../thavma/impl/common/level/Excavation.kt | 12 +---- .../impl/common/payload/ExcavationPayload.kt | 44 ------------------- 3 files changed, 2 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt diff --git a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt index 794a43a9..242961e3 100644 --- a/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/common/event/T7CommonModEvents.kt @@ -155,11 +155,6 @@ private fun registerSpawnPlacements(event: RegisterSpawnPlacementsEvent) { private fun registerPayloadHandlers(event: RegisterPayloadHandlersEvent) { val registrar = event.registrar("1") - registrar.playToClient( - ExcavationPayload.TYPE, - ExcavationPayload.STREAM_CODEC, - ExcavationPayload::handle - ) registrar.playToClient( ScanResultPayload.TYPE, ScanResultPayload.STREAM_CODEC, diff --git a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt index 33e6ff65..b93e7932 100644 --- a/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt +++ b/src/main/java/me/alegian/thavma/impl/common/level/Excavation.kt @@ -1,6 +1,5 @@ package me.alegian.thavma.impl.common.level -import me.alegian.thavma.impl.common.payload.ExcavationPayload import net.minecraft.core.BlockPos import net.minecraft.network.protocol.game.ClientboundLevelEventPacket import net.minecraft.server.level.ServerPlayer @@ -11,7 +10,6 @@ import net.minecraft.world.level.block.LevelEvent import net.minecraft.world.level.block.state.BlockState import net.minecraft.world.phys.BlockHitResult import net.minecraft.world.phys.HitResult -import net.neoforged.neoforge.network.PacketDistributor object Excavation { const val RANGE = 10.0 @@ -19,11 +17,7 @@ object Excavation { fun excavate(level: Level, player: Player, hitResult: BlockHitResult, speed: Int) { if (level.isClientSide || player !is ServerPlayer) return - // if we missed, just render the beam - if (hitResult.type == HitResult.Type.MISS){ - PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, 0)) - return - } + if (hitResult.type == HitResult.Type.MISS) return val blockPos = hitResult.blockPos val blockState = level.getBlockState(blockPos) @@ -35,7 +29,7 @@ object Excavation { ExcavationProgress(blockPos, blockState, (v.progress + speed).coerceIn(0, 10)) } ?: return - PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, blockPos, progressObject.progress)) + level.destroyBlockProgress(-player.id, blockPos, progressObject.progress) if (progressObject.progress < 10) return player.gameMode.destroyBlock(blockPos) @@ -46,8 +40,6 @@ object Excavation { fun stopExcavation(level: Level, player: Player) { if (level.isClientSide) return instances.remove(player.id) - // todo: fix - PacketDistributor.sendToAllPlayers(ExcavationPayload(player.id, null, 0)) } } diff --git a/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt b/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt deleted file mode 100644 index fc65ed8b..00000000 --- a/src/main/java/me/alegian/thavma/impl/common/payload/ExcavationPayload.kt +++ /dev/null @@ -1,44 +0,0 @@ -package me.alegian.thavma.impl.common.payload - -import me.alegian.thavma.impl.client.renderer.ExcavationRenderer -import me.alegian.thavma.impl.common.codec.nullable -import me.alegian.thavma.impl.common.util.T7StreamCodecs -import me.alegian.thavma.impl.rl -import net.minecraft.core.BlockPos -import net.minecraft.network.codec.ByteBufCodecs -import net.minecraft.network.codec.StreamCodec -import net.minecraft.network.protocol.common.custom.CustomPacketPayload -import net.minecraft.world.phys.Vec3 -import net.neoforged.neoforge.network.handling.IPayloadContext - -// S2C -class ExcavationPayload( - private val entityId: Int, - private val blockPos: BlockPos?, - private val progress: Int, -) : CustomPacketPayload { - override fun type() = TYPE - - companion object { - val TYPE = CustomPacketPayload.Type(rl("excavation")) - - val STREAM_CODEC = StreamCodec.composite( - ByteBufCodecs.INT, - ExcavationPayload::entityId, - BlockPos.STREAM_CODEC.nullable(), - ExcavationPayload::blockPos, - ByteBufCodecs.INT, - ExcavationPayload::progress, - ::ExcavationPayload - ) - - fun handle(payload: ExcavationPayload, context: IPayloadContext) { - if (payload.progress > 0) - ExcavationRenderer.renderers.add(payload.entityId) - else - ExcavationRenderer.renderers.remove(payload.entityId) - if (payload.blockPos != null) - context.player().level().destroyBlockProgress(-payload.entityId, payload.blockPos, payload.progress) - } - } -} \ No newline at end of file From 7af94f04c2e84fb236d653decfd1406835385e4d Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 1 Feb 2026 18:39:18 +0200 Subject: [PATCH 38/40] as good as it gets for this type of renderer --- .../impl/client/renderer/ExcavationRenderer.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index a42eadd5..e98e72a0 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -3,10 +3,12 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack import com.mojang.math.Axis import me.alegian.thavma.impl.client.util.transformOrigin +import me.alegian.thavma.impl.common.item.WandItem.Companion.equippedFocus import me.alegian.thavma.impl.common.level.Excavation import me.alegian.thavma.impl.common.util.minus import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects +import me.alegian.thavma.impl.init.registries.deferred.T7Items import net.minecraft.client.Minecraft import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer @@ -19,11 +21,10 @@ import org.joml.Quaternionf import org.joml.Vector3f object ExcavationRenderer { - val renderers = mutableSetOf() - fun renderPlayerPre(event: RenderPlayerEvent.Pre) { - if (!renderers.contains(event.entity.id)) return - val hitPos = CachedHitResult.get(event.entity).hitResult.location.toVector3f() + if (event.entity.useItem.equippedFocus?.item != T7Items.FOCUS_EXCAVATION.get()) return + + val hitPos = CachedHitResult.get(event.entity, event.partialTick).hitResult.location.toVector3f() val poseStack = event.poseStack poseStack.use { @@ -71,12 +72,12 @@ object ExcavationRenderer { companion object { private val hitResults = mutableMapOf() - fun get(entity: Entity): CachedHitResult { + fun get(entity: Entity, partialTick: Float): CachedHitResult { val level = entity.level() val old = hitResults[entity.id] if (old == null || old.tick != level.gameTime) { val from = entity.eyePosition - val to = from.add(entity.getViewVector(0f).scale(Excavation.RANGE)) + val to = from.add(entity.getViewVector(partialTick).scale(Excavation.RANGE)) val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)) val newCache = CachedHitResult(level.gameTime, hitresult) hitResults[entity.id] = newCache From b538bc4ff49072d0aece022d74eff3c15e678fe5 Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 1 Feb 2026 19:10:10 +0200 Subject: [PATCH 39/40] move to level rendering --- .../thavma/impl/client/ClientHelper.kt | 3 ++ .../impl/client/event/T7ClientGameEvents.kt | 2 +- .../client/renderer/ExcavationRenderer.kt | 36 ++++++++++++------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt b/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt index 6266a558..45ae1459 100644 --- a/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt @@ -39,4 +39,7 @@ fun clientSound(sound: SoundEvent, source: SoundSource, volume: Float, pitch: Fl object ClientHelper { fun hitResult() = Minecraft.getInstance().hitResult fun player() = Minecraft.getInstance().player + fun bufferSource() = Minecraft.getInstance().renderBuffers().bufferSource() + fun entityRenderDispatcher() = Minecraft.getInstance().entityRenderDispatcher + fun camera() = Minecraft.getInstance().gameRenderer.mainCamera } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt index 3cbc24c9..984e7bba 100644 --- a/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt +++ b/src/main/java/me/alegian/thavma/impl/client/event/T7ClientGameEvents.kt @@ -160,6 +160,6 @@ fun registerClientGameEvents() { KFF_GAME_BUS.addListener(::jarTooltip) KFF_GAME_BUS.addListener(::aspectTooltip) KFF_GAME_BUS.addListener(::renderPlayerPre) - KFF_GAME_BUS.addListener(ExcavationRenderer::renderPlayerPre) + KFF_GAME_BUS.addListener(ExcavationRenderer::renderLevelAfterEntities) KFF_GAME_BUS.addListener(::clientTick) } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index e98e72a0..bf3f22f3 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -2,7 +2,9 @@ package me.alegian.thavma.impl.client.renderer import com.mojang.blaze3d.vertex.PoseStack import com.mojang.math.Axis +import me.alegian.thavma.impl.client.ClientHelper import me.alegian.thavma.impl.client.util.transformOrigin +import me.alegian.thavma.impl.client.util.translate import me.alegian.thavma.impl.common.item.WandItem.Companion.equippedFocus import me.alegian.thavma.impl.common.level.Excavation import me.alegian.thavma.impl.common.util.minus @@ -12,28 +14,38 @@ import me.alegian.thavma.impl.init.registries.deferred.T7Items import net.minecraft.client.Minecraft import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer +import net.minecraft.client.renderer.entity.player.PlayerRenderer import net.minecraft.world.entity.Entity import net.minecraft.world.level.ClipContext import net.minecraft.world.phys.BlockHitResult -import net.neoforged.neoforge.client.event.RenderPlayerEvent +import net.neoforged.neoforge.client.event.RenderLevelStageEvent import org.joml.Matrix4f import org.joml.Quaternionf import org.joml.Vector3f object ExcavationRenderer { - fun renderPlayerPre(event: RenderPlayerEvent.Pre) { - if (event.entity.useItem.equippedFocus?.item != T7Items.FOCUS_EXCAVATION.get()) return + fun renderLevelAfterEntities(event: RenderLevelStageEvent) { + if (event.stage != RenderLevelStageEvent.Stage.AFTER_ENTITIES) return + val level = Minecraft.getInstance().level ?: return + val players = level.players() + val partialTick = event.partialTick.gameTimeDeltaTicks - val hitPos = CachedHitResult.get(event.entity, event.partialTick).hitResult.location.toVector3f() + for (player in players) { + if (player.useItem.equippedFocus?.item != T7Items.FOCUS_EXCAVATION.get()) return + val playerRenderer = ClientHelper.entityRenderDispatcher().getRenderer(player) + if (playerRenderer !is PlayerRenderer) return - val poseStack = event.poseStack - poseStack.use { - mulPose(Axis.YP.rotationDegrees(-event.entity.yBodyRot)) - // go to arm pivot point (hours of reverse engineering led to this constant) - translate(0.0, 19 / 16.0, 0.0) - event.renderer.model.translateToHand(event.entity.mainArm, poseStack) + val hitPos = CachedHitResult.get(player, partialTick).hitResult.location.toVector3f() - render(event.poseStack, event.multiBufferSource, event.partialTick, event.entity.level().gameTime, hitPos) + event.poseStack.use { + translate(player.position() - ClientHelper.camera().position) + mulPose(Axis.YP.rotationDegrees(-player.yBodyRot)) + // go to arm pivot point (hours of reverse engineering led to this constant) + translate(0.0, 19 / 16.0, 0.0) + playerRenderer.model.translateToHand(player.mainArm, this) + + render(event.poseStack, ClientHelper.bufferSource(), partialTick, player.level().gameTime, hitPos) + } } } @@ -43,7 +55,7 @@ object ExcavationRenderer { translate(0.0, -0.6, 0.8) // rotate towards target block - val targetPos = hitPos - Minecraft.getInstance().gameRenderer.mainCamera.position.toVector3f() + val targetPos = hitPos - ClientHelper.camera().position.toVector3f() val wandTipPos = transformOrigin() val currentUp = Vector3f(0f, 1f, 0f) val localDiff = (targetPos - wandTipPos).mulDirection(handPose.last().pose().invert(Matrix4f())) From 9b5e3a3d675d5fbc779d4d7f8a207f341669444d Mon Sep 17 00:00:00 2001 From: alegian Date: Sun, 1 Feb 2026 20:30:59 +0200 Subject: [PATCH 40/40] fixed lots of bugs --- .../thavma/impl/client/ClientHelper.kt | 1 + .../client/renderer/ExcavationRenderer.kt | 65 ++++++++++--------- .../impl/client/renderer/entity/VisER.kt | 3 +- .../thavma/impl/common/entity/EntityHelper.kt | 11 ++++ .../impl/common/item/ExcavationFocus.kt | 15 ++--- .../thavma/impl/common/item/WandItem.kt | 25 +++---- 6 files changed, 67 insertions(+), 53 deletions(-) diff --git a/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt b/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt index 45ae1459..37aac7af 100644 --- a/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/client/ClientHelper.kt @@ -42,4 +42,5 @@ object ClientHelper { fun bufferSource() = Minecraft.getInstance().renderBuffers().bufferSource() fun entityRenderDispatcher() = Minecraft.getInstance().entityRenderDispatcher fun camera() = Minecraft.getInstance().gameRenderer.mainCamera + fun firstPerson() = Minecraft.getInstance().options.cameraType.isFirstPerson } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt index bf3f22f3..2d239124 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/ExcavationRenderer.kt @@ -1,10 +1,12 @@ package me.alegian.thavma.impl.client.renderer +import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.vertex.PoseStack import com.mojang.math.Axis import me.alegian.thavma.impl.client.ClientHelper import me.alegian.thavma.impl.client.util.transformOrigin import me.alegian.thavma.impl.client.util.translate +import me.alegian.thavma.impl.common.entity.lerpedPosition import me.alegian.thavma.impl.common.item.WandItem.Companion.equippedFocus import me.alegian.thavma.impl.common.level.Excavation import me.alegian.thavma.impl.common.util.minus @@ -12,16 +14,17 @@ import me.alegian.thavma.impl.common.util.use import me.alegian.thavma.impl.init.registries.deferred.Aspects import me.alegian.thavma.impl.init.registries.deferred.T7Items import net.minecraft.client.Minecraft +import net.minecraft.client.player.AbstractClientPlayer import net.minecraft.client.renderer.MultiBufferSource import net.minecraft.client.renderer.blockentity.BeaconRenderer import net.minecraft.client.renderer.entity.player.PlayerRenderer -import net.minecraft.world.entity.Entity +import net.minecraft.world.entity.HumanoidArm import net.minecraft.world.level.ClipContext -import net.minecraft.world.phys.BlockHitResult import net.neoforged.neoforge.client.event.RenderLevelStageEvent import org.joml.Matrix4f import org.joml.Quaternionf import org.joml.Vector3f +import kotlin.math.ceil object ExcavationRenderer { fun renderLevelAfterEntities(event: RenderLevelStageEvent) { @@ -35,25 +38,41 @@ object ExcavationRenderer { val playerRenderer = ClientHelper.entityRenderDispatcher().getRenderer(player) if (playerRenderer !is PlayerRenderer) return - val hitPos = CachedHitResult.get(player, partialTick).hitResult.location.toVector3f() + val from = player.lerpedPosition(partialTick).add(0.0, player.eyeHeight.toDouble(), 0.0) + val to = from.add(player.getViewVector(partialTick).scale(Excavation.RANGE)) + val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)) + val hitPos = hitresult.location.toVector3f() event.poseStack.use { - translate(player.position() - ClientHelper.camera().position) - mulPose(Axis.YP.rotationDegrees(-player.yBodyRot)) - // go to arm pivot point (hours of reverse engineering led to this constant) - translate(0.0, 19 / 16.0, 0.0) - playerRenderer.model.translateToHand(player.mainArm, this) - + setUpWandPose(player, playerRenderer, partialTick) render(event.poseStack, ClientHelper.bufferSource(), partialTick, player.level().gameTime, hitPos) } } } - fun render(handPose: PoseStack, bufferSource: MultiBufferSource, partialTick: Float, gameTime: Long, hitPos: Vector3f) { - handPose.use { + private fun PoseStack.setUpWandPose(player: AbstractClientPlayer, playerRenderer: PlayerRenderer, partialTick: Float) { + translate(player.lerpedPosition(partialTick) - ClientHelper.camera().position) + if (player == ClientHelper.player() && ClientHelper.firstPerson()) { + translate(0f, player.eyeHeight, 0f) + mulPose(ClientHelper.camera().rotation()) + + // go to first person hand + val sideMultiplier = if (player.mainArm == HumanoidArm.RIGHT) 1.0 else -1.0 + translate(0.6 * sideMultiplier, -0.3, -0.5) + // go to the tip of the wand + translate(-0.4, 0.1, -0.2) + } else { + mulPose(Axis.YP.rotationDegrees(-player.yBodyRot)) + // go to arm pivot point (hours of reverse engineering led to this constant) + translate(0.0, 19 / 16.0, 0.0) + playerRenderer.model.translateToHand(player.mainArm, this) // go to the tip of the wand translate(0.0, -0.6, 0.8) + } + } + fun render(handPose: PoseStack, bufferSource: MultiBufferSource, partialTick: Float, gameTime: Long, hitPos: Vector3f) { + handPose.use { // rotate towards target block val targetPos = hitPos - ClientHelper.camera().position.toVector3f() val wandTipPos = transformOrigin() @@ -64,6 +83,7 @@ object ExcavationRenderer { // undo built-in translation of beacon translate(-0.5, 0.0, -0.5) + RenderSystem.disableCull() BeaconRenderer.renderBeaconBeam( handPose, bufferSource, @@ -72,31 +92,12 @@ object ExcavationRenderer { 1f, gameTime, 0, - localDiff.length().toInt(), + ceil(localDiff.length()).toInt(), Aspects.TERRA.get().color, 0.3f, 0.3f ) - } - } - - private data class CachedHitResult(val tick: Long, val hitResult: BlockHitResult) { - companion object { - private val hitResults = mutableMapOf() - - fun get(entity: Entity, partialTick: Float): CachedHitResult { - val level = entity.level() - val old = hitResults[entity.id] - if (old == null || old.tick != level.gameTime) { - val from = entity.eyePosition - val to = from.add(entity.getViewVector(partialTick).scale(Excavation.RANGE)) - val hitresult = level.clip(ClipContext(from, to, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, entity)) - val newCache = CachedHitResult(level.gameTime, hitresult) - hitResults[entity.id] = newCache - return newCache - } else - return old - } + RenderSystem.enableCull() } } } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/client/renderer/entity/VisER.kt b/src/main/java/me/alegian/thavma/impl/client/renderer/entity/VisER.kt index d2bbe934..af66f5bd 100644 --- a/src/main/java/me/alegian/thavma/impl/client/renderer/entity/VisER.kt +++ b/src/main/java/me/alegian/thavma/impl/client/renderer/entity/VisER.kt @@ -1,6 +1,7 @@ package me.alegian.thavma.impl.client.renderer.entity import com.mojang.blaze3d.vertex.PoseStack +import me.alegian.thavma.impl.client.ClientHelper import me.alegian.thavma.impl.client.T7Colors import me.alegian.thavma.impl.client.renderer.renderFlyingAspects import me.alegian.thavma.impl.client.util.translate @@ -55,7 +56,7 @@ private fun preparePlayerHandPosition(pPartialTick: Float, player: Player): Vec3 val arm = player.mainArm // for first person, if it is the client player, we follow the camera - if (player === Minecraft.getInstance().player && Minecraft.getInstance().options.cameraType.isFirstPerson) { + if (player === ClientHelper.player() && ClientHelper.firstPerson()) { val angle = Math.PI / 2 - player.getViewYRot(pPartialTick) / 360f * 2 * Math.PI val translation = player.getViewVector(pPartialTick).normalize().scale(.1) position += Vec3(0.0, player.eyeHeight + 0.01, 0.0) diff --git a/src/main/java/me/alegian/thavma/impl/common/entity/EntityHelper.kt b/src/main/java/me/alegian/thavma/impl/common/entity/EntityHelper.kt index ca5462ad..0880e09f 100644 --- a/src/main/java/me/alegian/thavma/impl/common/entity/EntityHelper.kt +++ b/src/main/java/me/alegian/thavma/impl/common/entity/EntityHelper.kt @@ -3,15 +3,26 @@ package me.alegian.thavma.impl.common.entity import me.alegian.thavma.impl.init.registries.T7Tags import me.alegian.thavma.impl.init.registries.deferred.T7Items.THAVMITE_KATANA import net.minecraft.client.Minecraft +import net.minecraft.util.Mth import net.minecraft.world.InteractionHand +import net.minecraft.world.entity.Entity import net.minecraft.world.entity.EquipmentSlot import net.minecraft.world.entity.LivingEntity +import net.minecraft.world.phys.Vec3 fun LivingEntity.isWearingStepHeightBoots(): Boolean { val boots = getItemBySlot(EquipmentSlot.FEET) return boots.`is`(T7Tags.Items.STEP_HEIGHT) } + +fun Entity.lerpedPosition(partialTick: Float) = + Vec3( + Mth.lerp(partialTick.toDouble(), xo, x), + Mth.lerp(partialTick.toDouble(), yo, y), + Mth.lerp(partialTick.toDouble(), zo, z), + ) + object EntityHelper { fun invertSwingingArm(pLivingEntity: LivingEntity) { if (pLivingEntity.swingingArm == InteractionHand.MAIN_HAND) diff --git a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt index 61ba688e..c094d23c 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/ExcavationFocus.kt @@ -3,6 +3,7 @@ package me.alegian.thavma.impl.common.item import me.alegian.thavma.impl.common.aspect.AspectMap import me.alegian.thavma.impl.common.data.capability.AspectContainer import me.alegian.thavma.impl.common.level.Excavation +import me.alegian.thavma.impl.init.registries.deferred.Aspects import net.minecraft.world.InteractionHand import net.minecraft.world.InteractionResultHolder import net.minecraft.world.entity.LivingEntity @@ -15,11 +16,13 @@ import net.minecraft.world.level.Level class ExcavationFocus : Item( Properties().stacksTo(1) ) { + fun aspectCost() = AspectMap.builder().add(Aspects.TERRA, 1).build() + override fun getUseDuration(stack: ItemStack, entity: LivingEntity) = 72000 override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder { val stack = player.getItemInHand(usedHand) - if (stack.item !is WandItem || !hasEnoughAspects(stack)) InteractionResultHolder.pass(stack) + if (stack.item !is WandItem || !hasEnoughAspects(stack)) return InteractionResultHolder.pass(stack) player.startUsingItem(usedHand) return InteractionResultHolder.consume(stack) @@ -27,14 +30,14 @@ class ExcavationFocus : Item( override fun onUseTick(level: Level, livingEntity: LivingEntity, stack: ItemStack, remainingUseDuration: Int) { if ( - level.gameTime % 5 != 0L || + level.gameTime % 4 != 0L || level.isClientSide || livingEntity !is Player ) return if (!hasEnoughAspects(stack)) return livingEntity.releaseUsingItem() - AspectContainer.from(stack)?.extract(aspectCost) + if (level.gameTime % 20 == 0L) AspectContainer.from(stack)?.extract(aspectCost()) advanceBlockBreak(level, livingEntity) } @@ -54,9 +57,5 @@ class ExcavationFocus : Item( } private fun hasEnoughAspects(stack: ItemStack) = - AspectContainer.from(stack)?.aspects?.contains(aspectCost) ?: false - - companion object { - val aspectCost = AspectMap.builder().build() - } + AspectContainer.from(stack)?.aspects?.contains(aspectCost()) ?: false } \ No newline at end of file diff --git a/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt b/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt index 516fde2d..adc8b4f7 100644 --- a/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt +++ b/src/main/java/me/alegian/thavma/impl/common/item/WandItem.kt @@ -50,8 +50,8 @@ open class WandItem(props: Properties, val platingMaterial: WandPlatingMaterial, * 4. Creating "Elements of Thavma" books from Bookcases */ override fun useOn(context: UseOnContext): InteractionResult { - val focusResult = context.itemInHand.equippedFocus?.item?.useOn(context) ?: InteractionResult.PASS - if (focusResult != InteractionResult.PASS) return focusResult + val focus = context.itemInHand.equippedFocus + if (focus != null) return focus.item.useOn(context) val level = context.level val blockPos = context.clickedPos @@ -109,27 +109,28 @@ open class WandItem(props: Properties, val platingMaterial: WandPlatingMaterial, return InteractionResult.PASS } - override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder { - val itemInHand = player.getItemInHand(usedHand) - val focusResult = itemInHand.equippedFocus?.item?.use(level, player, usedHand) ?: InteractionResultHolder.pass(itemInHand) - if (focusResult.result != InteractionResult.PASS) return focusResult + override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder { + val focus = player.getItemInHand(usedHand).equippedFocus + if (focus != null) return focus.item.use(level, player, usedHand) return super.use(level, player, usedHand) } override fun onUseTick(level: Level, livingEntity: LivingEntity, stack: ItemStack, remainingUseDuration: Int) { - stack.equippedFocus?.item?.onUseTick(level, livingEntity, stack, remainingUseDuration) + val focus = stack.equippedFocus + if (focus != null) return focus.item.onUseTick(level, livingEntity, stack, remainingUseDuration) super.onUseTick(level, livingEntity, stack, remainingUseDuration) } override fun releaseUsing(stack: ItemStack, level: Level, livingEntity: LivingEntity, timeCharged: Int) { - stack.equippedFocus?.item?.releaseUsing(stack, level, livingEntity, timeCharged) + val focus = stack.equippedFocus + if (focus != null) return focus.item.releaseUsing(stack, level, livingEntity, timeCharged) super.releaseUsing(stack, level, livingEntity, timeCharged) } override fun interactLivingEntity(stack: ItemStack, player: Player, interactionTarget: LivingEntity, usedHand: InteractionHand): InteractionResult { - val focusResult = stack.equippedFocus?.item?.interactLivingEntity(stack, player, interactionTarget, usedHand) ?: InteractionResult.PASS - if (focusResult != InteractionResult.PASS) return focusResult + val focus = stack.equippedFocus + if (focus != null) return focus.item.interactLivingEntity(stack, player, interactionTarget, usedHand) return super.interactLivingEntity(stack, player, interactionTarget, usedHand) } @@ -138,8 +139,8 @@ open class WandItem(props: Properties, val platingMaterial: WandPlatingMaterial, return UseAnim.CUSTOM } - override fun getUseDuration(pStack: ItemStack, pEntity: LivingEntity): Int { - val focusDuration = pStack.equippedFocus?.item?.getUseDuration(pStack, pEntity) + override fun getUseDuration(stack: ItemStack, entity: LivingEntity): Int { + val focusDuration = stack.equippedFocus?.item?.getUseDuration(stack, entity) return focusDuration ?: 72000 }