diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/HTDeferredHolder.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/HTDeferredHolder.kt index 68add9ea4..5ddefb6c9 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/HTDeferredHolder.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/HTDeferredHolder.kt @@ -4,6 +4,8 @@ import net.minecraft.resources.ResourceKey import net.minecraft.resources.ResourceLocation import net.neoforged.neoforge.registries.DeferredHolder +typealias HTSimpleDeferredHolder = HTDeferredHolder + /** * @see mekanism.common.registration.MekanismDeferredHolder */ diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/HTDoubleDeferredRegister.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/HTDoubleDeferredRegister.kt index 11f979f19..d0f5b9d3a 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/HTDoubleDeferredRegister.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/HTDoubleDeferredRegister.kt @@ -9,8 +9,8 @@ import java.util.function.Supplier * @see mekanism.common.registration.DoubleDeferredRegister */ open class HTDoubleDeferredRegister protected constructor( - protected val firstRegister: HTDeferredRegister, - protected val secondRegister: HTDeferredRegister, + protected open val firstRegister: HTDeferredRegister, + protected open val secondRegister: HTDeferredRegister, ) { fun > registerEach( name: String, @@ -48,9 +48,6 @@ open class HTDoubleDeferredRegister protected constru secondRegister.register(bus) } - val firstEntries: Collection> get() = firstRegister.entries - val secondEntries: Collection> get() = secondRegister.entries - fun addFirstAlias(from: String, to: String) { firstRegister.addAlias(firstRegister.createId(from), firstRegister.createId(to)) } diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredBlockRegister.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredBlockRegister.kt index 503c9aba7..c4b793a10 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredBlockRegister.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredBlockRegister.kt @@ -13,8 +13,12 @@ import net.minecraft.world.level.block.state.BlockBehaviour /** * @see mekanism.common.registration.impl.BlockDeferredRegister */ -class HTDeferredBlockRegister(namespace: String) : - HTDoubleDeferredRegister(HTDeferredOnlyBlockRegister(namespace), HTDeferredItemRegister(namespace)) { +class HTDeferredBlockRegister( + override val firstRegister: HTDeferredOnlyBlockRegister, + override val secondRegister: HTDeferredItemRegister, +) : HTDoubleDeferredRegister(firstRegister, secondRegister) { + constructor(namespace: String) : this(HTDeferredOnlyBlockRegister(namespace), HTDeferredItemRegister(namespace)) + fun registerSimple( name: String, blockProp: BlockBehaviour.Properties, @@ -78,4 +82,7 @@ class HTDeferredBlockRegister(namespace: String) : { block: HTDeferredHolder -> itemFactory(block.get(), itemProp) }, ::HTDeferredBlock, ) + + val blockEntries: Collection> get() = firstRegister.entries + val itemEntries: Collection> get() = secondRegister.entries } diff --git a/src/api/kotlin/hiiragi283/ragium/api/variant/HTEquipmentMaterial.kt b/src/api/kotlin/hiiragi283/ragium/api/variant/HTEquipmentMaterial.kt new file mode 100644 index 000000000..388000ea5 --- /dev/null +++ b/src/api/kotlin/hiiragi283/ragium/api/variant/HTEquipmentMaterial.kt @@ -0,0 +1,46 @@ +package hiiragi283.ragium.api.variant + +import hiiragi283.ragium.api.material.HTMaterialLike +import net.minecraft.core.Holder +import net.minecraft.sounds.SoundEvent +import net.minecraft.world.item.ArmorItem +import net.minecraft.world.item.Tier + +/** + * @see mekanism.tools.common.material.BaseMekanismMaterial + */ +interface HTEquipmentMaterial : + Tier, + HTMaterialLike { + fun getSwordDamage(): Float = 3f + + fun getSwordAttackSpeed(): Float = -2.4f + + fun getShovelDamage(): Float = 1.5f + + fun getShovelAttackSpeed(): Float = -3f + + fun getAxeDamage(): Float + + fun getAxeAttackSpeed(): Float + + fun getPickaxeDamage(): Float = 1f + + fun getPickaxeAttackSpeed(): Float = -2.8f + + fun getHoeDamage(): Float = -attackDamageBonus + + fun getHoeAttackSpeed(): Float = attackDamageBonus - 3f + + // Armor // + + fun getToughness(): Float + + fun getKnockbackResistance(): Float + + fun getEquipSound(): Holder + + fun getArmorDefence(type: ArmorItem.Type): Int + + fun getArmorMultiplier(): Int +} diff --git a/src/api/kotlin/hiiragi283/ragium/api/variant/HTToolVariant.kt b/src/api/kotlin/hiiragi283/ragium/api/variant/HTToolVariant.kt index 7a6d5e71b..616ecb691 100644 --- a/src/api/kotlin/hiiragi283/ragium/api/variant/HTToolVariant.kt +++ b/src/api/kotlin/hiiragi283/ragium/api/variant/HTToolVariant.kt @@ -1,11 +1,9 @@ package hiiragi283.ragium.api.variant -import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister import net.minecraft.tags.TagKey import net.minecraft.world.item.Item -import net.minecraft.world.item.Tier /** * ツール系アイテム向けの[HTVariantKey]の拡張インターフェース @@ -16,9 +14,8 @@ interface HTToolVariant : HTVariantKey { /** * 指定した引数からアイテムを登録します。 * @param register アイテムのレジストリ - * @param key 道具の素材 - * @param tier 道具のデータ + * @param material 道具の素材 * @return 登録されたアイテムの[HTDeferredItem] */ - fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> + fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> } diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt index 6cfab5bf2..1c59dcde9 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/loot/RagiumBlockLootProvider.kt @@ -2,8 +2,8 @@ package hiiragi283.ragium.data.server.loot import hiiragi283.ragium.api.block.HTBlockWithEntity import hiiragi283.ragium.api.material.HTMaterialKey -import hiiragi283.ragium.api.registry.HTDeferredHolder import hiiragi283.ragium.api.registry.impl.HTDeferredBlock +import hiiragi283.ragium.api.registry.impl.HTDeferredOnlyBlock import hiiragi283.ragium.common.block.HTCropBlock import hiiragi283.ragium.common.block.storage.HTCrateBlock import hiiragi283.ragium.common.block.storage.HTDrumBlock @@ -40,9 +40,9 @@ class RagiumBlockLootProvider(provider: HolderLookup.Provider) : override fun generate() { RagiumBlocks.REGISTER - .firstEntries + .blockEntries .asSequence() - .map(HTDeferredHolder::get) + .map(HTDeferredOnlyBlock<*>::get) .forEach { block: Block -> add( block, diff --git a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt index 2bd7ef45e..b237b5b5f 100644 --- a/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt +++ b/src/data/kotlin/hiiragi283/ragium/data/server/recipe/RagiumToolRecipeProvider.kt @@ -172,13 +172,13 @@ object RagiumToolRecipeProvider : HTRecipeProvider.Direct() { // Armor val beforeKey: HTMaterialKey = beforeMaterial.asMaterialKey() for ((variant: HTArmorVariant, armor: HTDeferredItem<*>) in armors) { - val beforeArmor: ItemLike = HTArmorVariant.ARMOR_TABLE[variant, beforeKey] ?: continue + val beforeArmor: ItemLike = VanillaMaterialKeys.ARMOR_TABLE[variant, beforeKey] ?: continue upgradeFactory(armor, beforeArmor) } // Tool for ((variant: HTToolVariant, tool: HTDeferredItem<*>) in RagiumItems.TOOLS.column(material.asMaterialKey())) { val beforeTool: ItemLike = when (variant) { - is HTVanillaToolVariant -> HTVanillaToolVariant.TOOL_TABLE[variant, beforeKey] + is HTVanillaToolVariant -> VanillaMaterialKeys.TOOL_TABLE[variant, beforeKey] is HTHammerToolVariant -> RagiumItems.TOOLS[variant, beforeKey] is HTKnifeToolVariant -> RagiumDelightAddon.KNIFE_MAP[beforeKey] else -> null diff --git a/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumDelightAddon.kt b/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumDelightAddon.kt index 2f6c8418e..d887e2774 100644 --- a/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumDelightAddon.kt +++ b/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumDelightAddon.kt @@ -12,6 +12,7 @@ import hiiragi283.ragium.api.registry.impl.HTDeferredBlockRegister import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTSimpleDeferredItem import hiiragi283.ragium.api.registry.toHolderLike +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.common.material.RagiumMaterialKeys import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.variant.HTHammerToolVariant @@ -19,8 +20,8 @@ import hiiragi283.ragium.common.variant.HTKnifeToolVariant import hiiragi283.ragium.setup.RagiumCreativeTabs import hiiragi283.ragium.setup.RagiumDataComponents import hiiragi283.ragium.setup.RagiumDelightFoods +import hiiragi283.ragium.setup.RagiumEquipmentMaterials import hiiragi283.ragium.setup.RagiumItems -import hiiragi283.ragium.setup.RagiumToolTiers import net.minecraft.core.component.DataComponentPatch import net.minecraft.world.item.CreativeModeTab import net.minecraft.world.item.enchantment.Enchantments @@ -28,7 +29,6 @@ import net.minecraft.world.level.block.Blocks import net.minecraft.world.level.block.state.BlockBehaviour import net.neoforged.api.distmarker.Dist import net.neoforged.bus.api.IEventBus -import net.neoforged.neoforge.common.SimpleTier import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent import vectorwing.farmersdelight.common.block.FeastBlock @@ -60,12 +60,13 @@ object RagiumDelightAddon : RagiumAddon { // Knives @JvmField - val KNIFE_MAP: Map> = mapOf( - RagiumMaterialKeys.RAGI_ALLOY to RagiumToolTiers.RAGI_ALLOY, - RagiumMaterialKeys.RAGI_CRYSTAL to RagiumToolTiers.RAGI_CRYSTAL, - ).mapValues { (key: HTMaterialKey, tier: SimpleTier) -> - HTKnifeToolVariant.registerItem(RagiumFoodAddon.ITEM_REGISTER, key, tier) - } + val KNIFE_MAP: Map> = listOf( + RagiumEquipmentMaterials.RAGI_ALLOY, + RagiumEquipmentMaterials.RAGI_CRYSTAL, + ).associateBy(HTEquipmentMaterial::asMaterialKey) + .mapValues { (key: HTMaterialKey, material: HTEquipmentMaterial) -> + HTKnifeToolVariant.registerItem(RagiumFoodAddon.ITEM_REGISTER, material) + } @JvmStatic fun getKnife(material: HTMaterialLike): HTItemHolderLike = when (val key: HTMaterialKey = material.asMaterialKey()) { diff --git a/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumKaleidoCookeryAddon.kt b/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumKaleidoCookeryAddon.kt index c24ac738c..31710cbac 100644 --- a/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumKaleidoCookeryAddon.kt +++ b/src/integration/kotlin/hiiragi283/ragium/common/integration/food/RagiumKaleidoCookeryAddon.kt @@ -6,15 +6,14 @@ import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.registry.HTItemHolderLike import hiiragi283.ragium.api.registry.impl.HTDeferredItem -import hiiragi283.ragium.common.material.RagiumMaterialKeys +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.common.material.VanillaMaterialKeys import hiiragi283.ragium.common.variant.HTHammerToolVariant import hiiragi283.ragium.common.variant.HTKitchenKnifeToolVariant import hiiragi283.ragium.setup.RagiumCreativeTabs +import hiiragi283.ragium.setup.RagiumEquipmentMaterials import hiiragi283.ragium.setup.RagiumItems -import hiiragi283.ragium.setup.RagiumToolTiers import net.minecraft.world.item.CreativeModeTab -import net.minecraft.world.item.Tier import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent object RagiumKaleidoCookeryAddon : RagiumAddon { @@ -22,12 +21,13 @@ object RagiumKaleidoCookeryAddon : RagiumAddon { // Knives @JvmField - val KNIFE_MAP: Map> = mapOf( - RagiumMaterialKeys.RAGI_ALLOY to RagiumToolTiers.RAGI_ALLOY, - RagiumMaterialKeys.RAGI_CRYSTAL to RagiumToolTiers.RAGI_CRYSTAL, - ).mapValues { (key: HTMaterialKey, tier: Tier) -> - HTKitchenKnifeToolVariant.registerItem(RagiumFoodAddon.ITEM_REGISTER, key, tier) - } + val KNIFE_MAP: Map> = listOf( + RagiumEquipmentMaterials.RAGI_ALLOY, + RagiumEquipmentMaterials.RAGI_CRYSTAL, + ).associateBy(HTEquipmentMaterial::asMaterialKey) + .mapValues { (key: HTMaterialKey, material: HTEquipmentMaterial) -> + HTKitchenKnifeToolVariant.registerItem(RagiumFoodAddon.ITEM_REGISTER, material) + } @JvmStatic fun getKnife(material: HTMaterialLike): HTItemHolderLike = when (val key: HTMaterialKey = material.asMaterialKey()) { diff --git a/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKitchenKnifeToolVariant.kt b/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKitchenKnifeToolVariant.kt index 66f6fd175..14a1694e5 100644 --- a/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKitchenKnifeToolVariant.kt +++ b/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKitchenKnifeToolVariant.kt @@ -3,17 +3,16 @@ package hiiragi283.ragium.common.variant import com.github.ysbbbbbb.kaleidoscopecookery.init.tag.TagMod import com.github.ysbbbbbb.kaleidoscopecookery.item.KitchenKnifeItem import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant import net.minecraft.tags.TagKey import net.minecraft.world.item.Item -import net.minecraft.world.item.Tier object HTKitchenKnifeToolVariant : HTToolVariant { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.registerItemWith("${key.name}_kitchen_knife", tier, ::KitchenKnifeItem) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.registerItemWith("${material.asMaterialName()}_kitchen_knife", material, ::KitchenKnifeItem) override val tagKeys: Iterable> = listOf(TagMod.KITCHEN_KNIFE) diff --git a/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKnifeToolVariant.kt b/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKnifeToolVariant.kt index 1455ffd7d..d09f247c6 100644 --- a/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKnifeToolVariant.kt +++ b/src/integration/kotlin/hiiragi283/ragium/common/variant/HTKnifeToolVariant.kt @@ -1,26 +1,21 @@ package hiiragi283.ragium.common.variant import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant -import net.minecraft.resources.ResourceLocation import net.minecraft.tags.TagKey import net.minecraft.world.item.Item -import net.minecraft.world.item.Tier import vectorwing.farmersdelight.common.item.KnifeItem import vectorwing.farmersdelight.common.registry.ModItems import vectorwing.farmersdelight.common.tag.CommonTags import vectorwing.farmersdelight.common.tag.ModTags object HTKnifeToolVariant : HTToolVariant { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.register("${key.name}_knife") { _: ResourceLocation -> - KnifeItem( - tier, - ModItems.knifeItem(tier), - ) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.register("${material.asMaterialName()}_knife") { _ -> + KnifeItem(material, ModItems.knifeItem(material)) } override val tagKeys: Iterable> = listOf(CommonTags.TOOLS_KNIFE, ModTags.KNIVES) diff --git a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt index b99ddbf8e..f7633439c 100644 --- a/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt +++ b/src/main/kotlin/hiiragi283/ragium/RagiumCommon.kt @@ -7,8 +7,6 @@ import hiiragi283.ragium.api.data.map.RagiumDataMaps import hiiragi283.ragium.api.data.registry.HTBrewingEffect import hiiragi283.ragium.api.data.registry.HTSolarPower import hiiragi283.ragium.api.network.HTPayloadRegister -import hiiragi283.ragium.api.recipe.RagiumRecipeTypes -import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType import hiiragi283.ragium.client.network.HTOpenPotionBundlePacket import hiiragi283.ragium.client.network.HTOpenUniversalBundlePacket import hiiragi283.ragium.client.network.HTUpdateAccessConfigPayload @@ -19,12 +17,9 @@ import hiiragi283.ragium.common.network.HTUpdateExperienceStoragePacket import hiiragi283.ragium.common.network.HTUpdateFluidTankPacket import hiiragi283.ragium.common.util.RagiumChunkLoader import hiiragi283.ragium.config.RagiumConfig -import hiiragi283.ragium.impl.data.map.HTCrushingMaterialRecipeData -import hiiragi283.ragium.impl.data.map.HTRawSmeltingMaterialRecipeData import hiiragi283.ragium.impl.material.RagiumMaterialManager import hiiragi283.ragium.setup.CommonMaterialPrefixes import hiiragi283.ragium.setup.RagiumAccessoryRegister -import hiiragi283.ragium.setup.RagiumArmorMaterials import hiiragi283.ragium.setup.RagiumAttachmentTypes import hiiragi283.ragium.setup.RagiumBlockEntityTypes import hiiragi283.ragium.setup.RagiumBlocks @@ -36,13 +31,11 @@ import hiiragi283.ragium.setup.RagiumFeatures import hiiragi283.ragium.setup.RagiumFluidContents import hiiragi283.ragium.setup.RagiumItems import hiiragi283.ragium.setup.RagiumMenuTypes +import hiiragi283.ragium.setup.RagiumMiscRegister import hiiragi283.ragium.setup.RagiumRecipeSerializers import net.minecraft.core.dispenser.ProjectileDispenseBehavior -import net.minecraft.core.registries.Registries import net.minecraft.world.item.Item import net.minecraft.world.item.ProjectileItem -import net.minecraft.world.item.crafting.Recipe -import net.minecraft.world.item.crafting.RecipeType import net.minecraft.world.level.ItemLike import net.minecraft.world.level.block.DispenserBlock import net.neoforged.api.distmarker.Dist @@ -58,7 +51,6 @@ import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent import net.neoforged.neoforge.registries.DataPackRegistryEvent import net.neoforged.neoforge.registries.NewRegistryEvent -import net.neoforged.neoforge.registries.RegisterEvent import net.neoforged.neoforge.registries.datamaps.RegisterDataMapTypesEvent @Mod(RagiumAPI.MOD_ID) @@ -67,7 +59,7 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { NeoForgeMod.enableMilkFluid() eventBus.addListener(::commonSetup) - eventBus.addListener(::onRegister) + eventBus.addListener(RagiumMiscRegister::register) eventBus.addListener(::registerDataMapTypes) eventBus.addListener(::registerPackets) eventBus.addListener(::registerRegistries) @@ -83,7 +75,6 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { RagiumBlocks.init(eventBus) RagiumItems.init(eventBus) - RagiumArmorMaterials.REGISTER.register(eventBus) RagiumAttachmentTypes.REGISTER.register(eventBus) RagiumBlockEntityTypes.init(eventBus) RagiumCreativeTabs.init(eventBus) @@ -127,32 +118,6 @@ class RagiumCommon(eventBus: IEventBus, container: ModContainer, dist: Dist) { RagiumAPI.LOGGER.info("Registered new data pack registries!") } - private fun onRegister(event: RegisterEvent) { - event.register(Registries.RECIPE_TYPE) { helper -> - register(helper, RagiumRecipeTypes.SAWMILL) - // Machine - register(helper, RagiumRecipeTypes.ALLOYING) - register(helper, RagiumRecipeTypes.COMPRESSING) - register(helper, RagiumRecipeTypes.CRUSHING) - register(helper, RagiumRecipeTypes.ENCHANTING) - register(helper, RagiumRecipeTypes.EXTRACTING) - register(helper, RagiumRecipeTypes.FLUID_TRANSFORM) - register(helper, RagiumRecipeTypes.MELTING) - register(helper, RagiumRecipeTypes.PLANTING) - register(helper, RagiumRecipeTypes.SIMULATING) - register(helper, RagiumRecipeTypes.WASHING) - } - - event.register(RagiumAPI.MATERIAL_RECIPE_TYPE_KEY) { helper -> - helper.register(RagiumAPI.id("crushing"), HTCrushingMaterialRecipeData.CODEC) - helper.register(RagiumAPI.id("raw_smelting"), HTRawSmeltingMaterialRecipeData.CODEC) - } - } - - private fun > register(helper: RegisterEvent.RegisterHelper>, holder: HTDeferredRecipeType<*, R>) { - helper.register(holder.id, RecipeType.simple(holder.id)) - } - private fun commonSetup(event: FMLCommonSetupEvent) { event.enqueueWork { RagiumItems.REGISTER diff --git a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDestructionHammerItem.kt b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDestructionHammerItem.kt index 457393848..624468d60 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDestructionHammerItem.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/item/tool/HTDestructionHammerItem.kt @@ -1,26 +1,45 @@ package hiiragi283.ragium.common.item.tool import hiiragi283.ragium.api.tag.RagiumModTags -import hiiragi283.ragium.setup.RagiumToolTiers +import hiiragi283.ragium.api.util.wrapOptional +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import net.minecraft.core.component.DataComponents +import net.minecraft.core.registries.BuiltInRegistries +import net.minecraft.world.item.DiggerItem import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Rarity +import net.minecraft.world.item.Tier import net.minecraft.world.item.TieredItem +import net.minecraft.world.item.component.Tool import net.neoforged.neoforge.common.ItemAbility +import net.neoforged.neoforge.registries.holdersets.AnyHolderSet /** * @see mekanism.common.item.gear.ItemAtomicDisassembler */ -class HTDestructionHammerItem(properties: Properties) : - TieredItem( - RagiumToolTiers.RAGI_CRYSTAL, - properties - .rarity(Rarity.RARE) - .stacksTo(1) - .component( - DataComponents.TOOL, - RagiumToolTiers.RAGI_CRYSTAL.createToolProperties(RagiumModTags.Blocks.INCORRECT_FOR_DESTRUCTION_TOOL), +class HTDestructionHammerItem(tier: Tier, properties: Properties) : + TieredItem(tier, properties.rarity(Rarity.RARE).component(DataComponents.TOOL, createToolProperties())) { + companion object { + @JvmStatic + fun create(material: HTEquipmentMaterial, properties: Properties): HTDestructionHammerItem = HTDestructionHammerItem( + material, + properties.attributes(DiggerItem.createAttributes(material, material.getPickaxeDamage(), material.getPickaxeAttackSpeed())), + ) + + @JvmStatic + fun createToolProperties(): Tool = Tool( + listOf( + Tool.Rule.deniesDrops(RagiumModTags.Blocks.INCORRECT_FOR_DESTRUCTION_TOOL), + Tool.Rule( + AnyHolderSet(BuiltInRegistries.BLOCK.asLookup()), + 12f.wrapOptional(), + true.wrapOptional(), + ), ), - ) { + 1f, + 1, + ) + } + override fun canPerformAction(stack: ItemStack, itemAbility: ItemAbility): Boolean = itemAbility.name().endsWith("_dig") } diff --git a/src/main/kotlin/hiiragi283/ragium/common/material/VanillaMaterialKeys.kt b/src/main/kotlin/hiiragi283/ragium/common/material/VanillaMaterialKeys.kt index 536caf0b6..fe05dc5a0 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/material/VanillaMaterialKeys.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/material/VanillaMaterialKeys.kt @@ -1,6 +1,12 @@ package hiiragi283.ragium.common.material +import hiiragi283.ragium.api.collection.ImmutableTable +import hiiragi283.ragium.api.collection.buildTable import hiiragi283.ragium.api.material.HTMaterialKey +import hiiragi283.ragium.common.variant.HTArmorVariant +import hiiragi283.ragium.common.variant.HTVanillaToolVariant +import net.minecraft.world.item.Item +import net.minecraft.world.item.Items object VanillaMaterialKeys { // Gem @@ -56,4 +62,63 @@ object VanillaMaterialKeys { @JvmStatic val WOOD: HTMaterialKey = HTMaterialKey.of("wood") + + // Item // + + val ARMOR_TABLE: ImmutableTable = buildTable { + // Iron + this[HTArmorVariant.HELMET, IRON] = Items.IRON_HELMET + this[HTArmorVariant.CHESTPLATE, IRON] = Items.IRON_CHESTPLATE + this[HTArmorVariant.LEGGINGS, IRON] = Items.IRON_LEGGINGS + this[HTArmorVariant.BOOTS, IRON] = Items.IRON_BOOTS + // Gold + this[HTArmorVariant.HELMET, GOLD] = Items.GOLDEN_HELMET + this[HTArmorVariant.CHESTPLATE, GOLD] = Items.GOLDEN_CHESTPLATE + this[HTArmorVariant.LEGGINGS, GOLD] = Items.GOLDEN_LEGGINGS + this[HTArmorVariant.BOOTS, GOLD] = Items.GOLDEN_BOOTS + // Diamond + this[HTArmorVariant.HELMET, DIAMOND] = Items.DIAMOND_HELMET + this[HTArmorVariant.CHESTPLATE, DIAMOND] = Items.DIAMOND_CHESTPLATE + this[HTArmorVariant.LEGGINGS, DIAMOND] = Items.DIAMOND_LEGGINGS + this[HTArmorVariant.BOOTS, DIAMOND] = Items.DIAMOND_BOOTS + // Netherite + this[HTArmorVariant.HELMET, NETHERITE] = Items.NETHERITE_HELMET + this[HTArmorVariant.CHESTPLATE, NETHERITE] = Items.NETHERITE_CHESTPLATE + this[HTArmorVariant.LEGGINGS, NETHERITE] = Items.NETHERITE_LEGGINGS + this[HTArmorVariant.BOOTS, NETHERITE] = Items.NETHERITE_BOOTS + } + + val TOOL_TABLE: ImmutableTable = buildTable { + // Wooden + this[HTVanillaToolVariant.SHOVEL, WOOD] = Items.WOODEN_SHOVEL + this[HTVanillaToolVariant.PICKAXE, WOOD] = Items.WOODEN_PICKAXE + this[HTVanillaToolVariant.AXE, WOOD] = Items.WOODEN_AXE + this[HTVanillaToolVariant.HOE, WOOD] = Items.WOODEN_HOE + this[HTVanillaToolVariant.SWORD, WOOD] = Items.WOODEN_SWORD + // Stone + // Iron + this[HTVanillaToolVariant.SHOVEL, IRON] = Items.IRON_SHOVEL + this[HTVanillaToolVariant.PICKAXE, IRON] = Items.IRON_PICKAXE + this[HTVanillaToolVariant.AXE, IRON] = Items.IRON_AXE + this[HTVanillaToolVariant.HOE, IRON] = Items.IRON_HOE + this[HTVanillaToolVariant.SWORD, IRON] = Items.IRON_SWORD + // Golden + this[HTVanillaToolVariant.SHOVEL, GOLD] = Items.GOLDEN_SHOVEL + this[HTVanillaToolVariant.PICKAXE, GOLD] = Items.GOLDEN_PICKAXE + this[HTVanillaToolVariant.AXE, GOLD] = Items.GOLDEN_AXE + this[HTVanillaToolVariant.HOE, GOLD] = Items.GOLDEN_HOE + this[HTVanillaToolVariant.SWORD, GOLD] = Items.GOLDEN_SWORD + // Diamond + this[HTVanillaToolVariant.SHOVEL, DIAMOND] = Items.DIAMOND_SHOVEL + this[HTVanillaToolVariant.PICKAXE, DIAMOND] = Items.DIAMOND_PICKAXE + this[HTVanillaToolVariant.AXE, DIAMOND] = Items.DIAMOND_AXE + this[HTVanillaToolVariant.HOE, DIAMOND] = Items.DIAMOND_HOE + this[HTVanillaToolVariant.SWORD, DIAMOND] = Items.DIAMOND_SWORD + // Netherite + this[HTVanillaToolVariant.SHOVEL, NETHERITE] = Items.NETHERITE_SHOVEL + this[HTVanillaToolVariant.PICKAXE, NETHERITE] = Items.NETHERITE_PICKAXE + this[HTVanillaToolVariant.AXE, NETHERITE] = Items.NETHERITE_AXE + this[HTVanillaToolVariant.HOE, NETHERITE] = Items.NETHERITE_HOE + this[HTVanillaToolVariant.SWORD, NETHERITE] = Items.NETHERITE_SWORD + } } diff --git a/src/main/kotlin/hiiragi283/ragium/common/variant/HTArmorVariant.kt b/src/main/kotlin/hiiragi283/ragium/common/variant/HTArmorVariant.kt index b2ae3c278..4cbde7003 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/variant/HTArmorVariant.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/variant/HTArmorVariant.kt @@ -1,24 +1,20 @@ package hiiragi283.ragium.common.variant -import hiiragi283.ragium.api.collection.ImmutableTable -import hiiragi283.ragium.api.collection.buildTable +import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.material.HTMaterialKey -import hiiragi283.ragium.api.material.HTMaterialLike import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTVariantKey -import hiiragi283.ragium.common.material.VanillaMaterialKeys -import net.minecraft.core.Holder +import net.minecraft.core.registries.Registries import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey import net.minecraft.world.item.ArmorItem -import net.minecraft.world.item.ArmorMaterial import net.minecraft.world.item.Item -import net.minecraft.world.item.Items +import net.neoforged.neoforge.registries.DeferredHolder enum class HTArmorVariant( - private val armorType: ArmorItem.Type, + val armorType: ArmorItem.Type, private val enUsPattern: String, private val jaJpPattern: String, val tagKey: TagKey, @@ -29,39 +25,15 @@ enum class HTArmorVariant( BOOTS(ArmorItem.Type.BOOTS, "%s Boots", "%sのブーツ", ItemTags.FOOT_ARMOR), ; - companion object { - val ARMOR_TABLE: ImmutableTable = buildTable { - // Iron - this[HELMET, VanillaMaterialKeys.IRON] = Items.IRON_HELMET - this[CHESTPLATE, VanillaMaterialKeys.IRON] = Items.IRON_CHESTPLATE - this[LEGGINGS, VanillaMaterialKeys.IRON] = Items.IRON_LEGGINGS - this[BOOTS, VanillaMaterialKeys.IRON] = Items.IRON_BOOTS - // Gold - this[HELMET, VanillaMaterialKeys.GOLD] = Items.GOLDEN_HELMET - this[CHESTPLATE, VanillaMaterialKeys.GOLD] = Items.GOLDEN_CHESTPLATE - this[LEGGINGS, VanillaMaterialKeys.GOLD] = Items.GOLDEN_LEGGINGS - this[BOOTS, VanillaMaterialKeys.GOLD] = Items.GOLDEN_BOOTS - // Diamond - this[HELMET, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_HELMET - this[CHESTPLATE, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_CHESTPLATE - this[LEGGINGS, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_LEGGINGS - this[BOOTS, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_BOOTS - // Netherite - this[HELMET, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_HELMET - this[CHESTPLATE, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_CHESTPLATE - this[LEGGINGS, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_LEGGINGS - this[BOOTS, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_BOOTS - } - } - - fun registerItem( - register: HTDeferredItemRegister, - material: HTMaterialLike, - material1: Holder, - multiplier: Int, - ): HTDeferredItem = register.registerItem( + fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem = register.registerItem( "${material.asMaterialName()}_${variantName()}", - { ArmorItem(material1, armorType, it.durability(armorType.getDurability(multiplier))) }, + { + ArmorItem( + DeferredHolder.create(Registries.ARMOR_MATERIAL, RagiumAPI.id(material.asMaterialName())), + armorType, + it.durability(armorType.getDurability(material.getArmorMultiplier())), + ) + }, ) override fun translate(type: HTLanguageType, value: String): String = when (type) { diff --git a/src/main/kotlin/hiiragi283/ragium/common/variant/HTBasicEquipmentMaterial.kt b/src/main/kotlin/hiiragi283/ragium/common/variant/HTBasicEquipmentMaterial.kt new file mode 100644 index 000000000..b31d1fd60 --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/variant/HTBasicEquipmentMaterial.kt @@ -0,0 +1,63 @@ +package hiiragi283.ragium.common.variant + +import hiiragi283.ragium.api.material.HTMaterialKey +import hiiragi283.ragium.api.material.HTMaterialPrefix +import hiiragi283.ragium.api.variant.HTEquipmentMaterial +import hiiragi283.ragium.setup.CommonMaterialPrefixes +import net.minecraft.core.Holder +import net.minecraft.sounds.SoundEvent +import net.minecraft.sounds.SoundEvents +import net.minecraft.tags.TagKey +import net.minecraft.world.item.ArmorItem +import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.level.block.Block + +@JvmRecord +data class HTBasicEquipmentMaterial( + private val key: HTMaterialKey, + private val axeDamage: Float, + private val axeAttackSpeed: Float, + private val durability: Int, + private val miningSpeed: Float, + private val baseAttackDamage: Float, + private val enchantability: Int, + private val incorrectBlockTag: TagKey, + private val defenceMap: Map, + private val armorMultiplier: Int, + private val repairPrefix: HTMaterialPrefix = CommonMaterialPrefixes.INGOT, + private val equipSound: Holder = SoundEvents.ARMOR_EQUIP_GENERIC, + private val toughness: Float = 0f, + private val resistance: Float = 0f, +) : HTEquipmentMaterial { + override fun getAxeDamage(): Float = axeDamage + + override fun getAxeAttackSpeed(): Float = axeAttackSpeed + + override fun getToughness(): Float = toughness + + override fun getKnockbackResistance(): Float = resistance + + override fun getEquipSound(): Holder = equipSound + + override fun getArmorDefence(type: ArmorItem.Type): Int = defenceMap.getOrDefault(type, 0) + + override fun getArmorMultiplier(): Int = armorMultiplier + + // Tier // + + override fun getUses(): Int = durability + + override fun getSpeed(): Float = miningSpeed + + override fun getAttackDamageBonus(): Float = baseAttackDamage + + override fun getIncorrectBlocksForDrops(): TagKey = incorrectBlockTag + + override fun getEnchantmentValue(): Int = enchantability + + override fun getRepairIngredient(): Ingredient = repairPrefix.toIngredient(key) + + // HTMaterialLike // + + override fun asMaterialKey(): HTMaterialKey = key +} diff --git a/src/main/kotlin/hiiragi283/ragium/common/variant/HTHammerToolVariant.kt b/src/main/kotlin/hiiragi283/ragium/common/variant/HTHammerToolVariant.kt index 81fb3b5e6..af332fd2d 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/variant/HTHammerToolVariant.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/variant/HTHammerToolVariant.kt @@ -1,21 +1,20 @@ package hiiragi283.ragium.common.variant import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister import hiiragi283.ragium.api.tag.RagiumModTags +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.item.tool.HTHammerItem import net.minecraft.tags.TagKey import net.minecraft.world.item.DiggerItem import net.minecraft.world.item.Item -import net.minecraft.world.item.Tier object HTHammerToolVariant : HTToolVariant { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.registerItemWith("${key.name}_hammer", tier, ::HTHammerItem) { - it.attributes(DiggerItem.createAttributes(tier, 1f, -2.8f)) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.registerItemWith("${material.asMaterialName()}_hammer", material, ::HTHammerItem) { + it.attributes(DiggerItem.createAttributes(material, material.getPickaxeDamage(), material.getPickaxeAttackSpeed())) } override val tagKeys: Iterable> = listOf(RagiumModTags.Items.TOOLS_HAMMER) diff --git a/src/main/kotlin/hiiragi283/ragium/common/variant/HTVanillaToolVariant.kt b/src/main/kotlin/hiiragi283/ragium/common/variant/HTVanillaToolVariant.kt index 6d72af015..765488d4b 100644 --- a/src/main/kotlin/hiiragi283/ragium/common/variant/HTVanillaToolVariant.kt +++ b/src/main/kotlin/hiiragi283/ragium/common/variant/HTVanillaToolVariant.kt @@ -1,24 +1,19 @@ package hiiragi283.ragium.common.variant -import hiiragi283.ragium.api.collection.ImmutableTable -import hiiragi283.ragium.api.collection.buildTable import hiiragi283.ragium.api.data.lang.HTLanguageType -import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.impl.HTDeferredItemRegister +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant -import hiiragi283.ragium.common.material.VanillaMaterialKeys import net.minecraft.tags.ItemTags import net.minecraft.tags.TagKey import net.minecraft.world.item.AxeItem import net.minecraft.world.item.DiggerItem import net.minecraft.world.item.HoeItem import net.minecraft.world.item.Item -import net.minecraft.world.item.Items import net.minecraft.world.item.PickaxeItem import net.minecraft.world.item.ShovelItem import net.minecraft.world.item.SwordItem -import net.minecraft.world.item.Tier enum class HTVanillaToolVariant( private val enPattern: String, @@ -26,74 +21,38 @@ enum class HTVanillaToolVariant( override val tagKeys: Iterable>, ) : HTToolVariant { SHOVEL("%s Shovel", "%sのシャベル", ItemTags.SHOVELS) { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.registerItemWith("${key.name}_shovel", tier, ::ShovelItem) { - it.attributes(DiggerItem.createAttributes(tier, 1.5f, -3f)) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.registerItemWith("${material.asMaterialName()}_shovel", material, ::ShovelItem) { + it.attributes(DiggerItem.createAttributes(material, material.getShovelDamage(), material.getShovelAttackSpeed())) } }, PICKAXE("%s Pickaxe", "%sのツルハシ", ItemTags.PICKAXES) { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.registerItemWith("${key.name}_pickaxe", tier, ::PickaxeItem) { - it.attributes(DiggerItem.createAttributes(tier, 1f, -2.8f)) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.registerItemWith("${material.asMaterialName()}_pickaxe", material, ::PickaxeItem) { + it.attributes(DiggerItem.createAttributes(material, material.getPickaxeDamage(), material.getPickaxeAttackSpeed())) } }, AXE("%s Axe", "%sの斧", ItemTags.AXES) { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.registerItemWith("${key.name}_axe", tier, ::AxeItem) { - it.attributes(DiggerItem.createAttributes(tier, 6f, -3.1f)) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.registerItemWith("${material.asMaterialName()}_axe", material, ::AxeItem) { + it.attributes(DiggerItem.createAttributes(material, material.getAxeDamage(), material.getAxeAttackSpeed())) } }, HOE("%s Hoe", "%sのクワ", ItemTags.HOES) { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.registerItemWith("${key.name}_hoe", tier, ::HoeItem) { - it.attributes(DiggerItem.createAttributes(tier, -2f, -1f)) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.registerItemWith("${material.asMaterialName()}_hoe", material, ::HoeItem) { + it.attributes(DiggerItem.createAttributes(material, material.getHoeDamage(), material.getHoeAttackSpeed())) } }, SWORD("%s Sword", "%sの剣", ItemTags.SWORDS) { - override fun registerItem(register: HTDeferredItemRegister, key: HTMaterialKey, tier: Tier): HTDeferredItem<*> = - register.registerItemWith("${key.name}_sword", tier, ::SwordItem) { - it.attributes(SwordItem.createAttributes(tier, 3f, -2.4f)) + override fun registerItem(register: HTDeferredItemRegister, material: HTEquipmentMaterial): HTDeferredItem<*> = + register.registerItemWith("${material.asMaterialName()}_sword", material, ::SwordItem) { + it.attributes(SwordItem.createAttributes(material, material.getSwordDamage(), material.getSwordAttackSpeed())) } }, ; constructor(enPattern: String, jaPattern: String, tagKey: TagKey) : this(enPattern, jaPattern, listOf(tagKey)) - companion object { - val TOOL_TABLE: ImmutableTable = buildTable { - // Wooden - this[SHOVEL, VanillaMaterialKeys.WOOD] = Items.WOODEN_SHOVEL - this[PICKAXE, VanillaMaterialKeys.WOOD] = Items.WOODEN_PICKAXE - this[AXE, VanillaMaterialKeys.WOOD] = Items.WOODEN_AXE - this[HOE, VanillaMaterialKeys.WOOD] = Items.WOODEN_HOE - this[SWORD, VanillaMaterialKeys.WOOD] = Items.WOODEN_SWORD - // Stone - // Iron - this[SHOVEL, VanillaMaterialKeys.IRON] = Items.IRON_SHOVEL - this[PICKAXE, VanillaMaterialKeys.IRON] = Items.IRON_PICKAXE - this[AXE, VanillaMaterialKeys.IRON] = Items.IRON_AXE - this[HOE, VanillaMaterialKeys.IRON] = Items.IRON_HOE - this[SWORD, VanillaMaterialKeys.IRON] = Items.IRON_SWORD - // Golden - this[SHOVEL, VanillaMaterialKeys.GOLD] = Items.GOLDEN_SHOVEL - this[PICKAXE, VanillaMaterialKeys.GOLD] = Items.GOLDEN_PICKAXE - this[AXE, VanillaMaterialKeys.GOLD] = Items.GOLDEN_AXE - this[HOE, VanillaMaterialKeys.GOLD] = Items.GOLDEN_HOE - this[SWORD, VanillaMaterialKeys.GOLD] = Items.GOLDEN_SWORD - // Diamond - this[SHOVEL, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_SHOVEL - this[PICKAXE, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_PICKAXE - this[AXE, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_AXE - this[HOE, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_HOE - this[SWORD, VanillaMaterialKeys.DIAMOND] = Items.DIAMOND_SWORD - // Netherite - this[SHOVEL, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_SHOVEL - this[PICKAXE, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_PICKAXE - this[AXE, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_AXE - this[HOE, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_HOE - this[SWORD, VanillaMaterialKeys.NETHERITE] = Items.NETHERITE_SWORD - } - } - override fun translate(type: HTLanguageType, value: String): String = when (type) { HTLanguageType.EN_US -> enPattern HTLanguageType.JA_JP -> jaPattern diff --git a/src/main/kotlin/hiiragi283/ragium/common/variant/VanillaEquipmentMaterial.kt b/src/main/kotlin/hiiragi283/ragium/common/variant/VanillaEquipmentMaterial.kt new file mode 100644 index 000000000..253eb86fc --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/common/variant/VanillaEquipmentMaterial.kt @@ -0,0 +1,58 @@ +package hiiragi283.ragium.common.variant + +import hiiragi283.ragium.api.material.HTMaterialKey +import hiiragi283.ragium.api.variant.HTEquipmentMaterial +import hiiragi283.ragium.common.material.VanillaMaterialKeys +import net.minecraft.core.Holder +import net.minecraft.sounds.SoundEvent +import net.minecraft.tags.TagKey +import net.minecraft.world.item.ArmorItem +import net.minecraft.world.item.ArmorMaterial +import net.minecraft.world.item.ArmorMaterials +import net.minecraft.world.item.Tier +import net.minecraft.world.item.Tiers +import net.minecraft.world.item.crafting.Ingredient +import net.minecraft.world.level.block.Block + +enum class VanillaEquipmentMaterial( + private val key: HTMaterialKey, + private val tier: Tier, + private val axeDamage: Float, + private val axeAttackSpeed: Float, + private val armor: Holder, + private val armorMultiplier: Int, +) : HTEquipmentMaterial { + IRON(VanillaMaterialKeys.IRON, Tiers.IRON, 6f, -3.1f, ArmorMaterials.IRON, 15), + GOLD(VanillaMaterialKeys.GOLD, Tiers.GOLD, 6f, -3f, ArmorMaterials.GOLD, 7), + DIAMOND(VanillaMaterialKeys.DIAMOND, Tiers.DIAMOND, 5f, -3f, ArmorMaterials.DIAMOND, 33), + NETHERITE(VanillaMaterialKeys.NETHERITE, Tiers.NETHERITE, 5f, -3f, ArmorMaterials.NETHERITE, 37), + ; + + override fun getAxeDamage(): Float = axeDamage + + override fun getAxeAttackSpeed(): Float = axeAttackSpeed + + override fun getToughness(): Float = armor.value().toughness + + override fun getKnockbackResistance(): Float = armor.value().knockbackResistance + + override fun getEquipSound(): Holder = armor.value().equipSound + + override fun getArmorDefence(type: ArmorItem.Type): Int = armor.value().getDefense(type) + + override fun getArmorMultiplier(): Int = armorMultiplier + + override fun getUses(): Int = tier.uses + + override fun getSpeed(): Float = tier.speed + + override fun getAttackDamageBonus(): Float = tier.attackDamageBonus + + override fun getIncorrectBlocksForDrops(): TagKey = tier.incorrectBlocksForDrops + + override fun getEnchantmentValue(): Int = tier.enchantmentValue + + override fun getRepairIngredient(): Ingredient = tier.repairIngredient + + override fun asMaterialKey(): HTMaterialKey = key +} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumArmorMaterials.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumArmorMaterials.kt deleted file mode 100644 index 7fa1d2636..000000000 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumArmorMaterials.kt +++ /dev/null @@ -1,81 +0,0 @@ -package hiiragi283.ragium.setup - -import hiiragi283.ragium.api.RagiumAPI -import hiiragi283.ragium.api.RagiumConst -import hiiragi283.ragium.api.registry.HTDeferredRegister -import hiiragi283.ragium.common.material.RagiumMaterialKeys -import net.minecraft.core.Holder -import net.minecraft.core.registries.Registries -import net.minecraft.resources.ResourceLocation -import net.minecraft.sounds.SoundEvent -import net.minecraft.sounds.SoundEvents -import net.minecraft.world.item.ArmorItem -import net.minecraft.world.item.ArmorMaterial -import net.minecraft.world.item.crafting.Ingredient -import java.util.function.Supplier - -object RagiumArmorMaterials { - @JvmField - val REGISTER: HTDeferredRegister = HTDeferredRegister(Registries.ARMOR_MATERIAL, RagiumAPI.MOD_ID) - - @JvmStatic - private fun register( - name: String, - enchValue: Int, - sound: Holder, - repairment: Supplier, - toughness: Float, - knockback: Float, - vararg defences: Pair, - ): Holder = REGISTER.register(name) { id: ResourceLocation -> - ArmorMaterial( - mapOf(*defences), - enchValue, - sound, - repairment, - listOf(ArmorMaterial.Layer(id)), - toughness, - knockback, - ) - } - - @JvmField - val DEFAULT: Holder = register( - "default", - 0, - SoundEvents.ARMOR_EQUIP_GENERIC, - Ingredient::of, - 0f, - 0f, - ) - - @JvmField - val AZURE_STEEL: Holder = register( - RagiumConst.AZURE_STEEL, - 10, - SoundEvents.ARMOR_EQUIP_IRON, - { CommonMaterialPrefixes.INGOT.toIngredient(RagiumMaterialKeys.AZURE_STEEL) }, - 1.2f, - 0f, - ArmorItem.Type.BOOTS to 3, - ArmorItem.Type.LEGGINGS to 6, - ArmorItem.Type.CHESTPLATE to 8, - ArmorItem.Type.BODY to 8, - ArmorItem.Type.HELMET to 3, - ) - - @JvmField - val DEEP_STEEL: Holder = register( - RagiumConst.DEEP_STEEL, - 15, - SoundEvents.ARMOR_EQUIP_NETHERITE, - { CommonMaterialPrefixes.INGOT.toIngredient(RagiumMaterialKeys.DEEP_STEEL) }, - 3f, - 0.1f, - ArmorItem.Type.BOOTS to 3, - ArmorItem.Type.LEGGINGS to 6, - ArmorItem.Type.CHESTPLATE to 8, - ArmorItem.Type.BODY to 11, - ArmorItem.Type.HELMET to 3, - ) -} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt index ff2cfa655..9436d5840 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumBlockEntityTypes.kt @@ -6,10 +6,10 @@ import hiiragi283.ragium.api.data.map.RagiumDataMaps import hiiragi283.ragium.api.recipe.HTSingleInputRecipe import hiiragi283.ragium.api.recipe.RagiumRecipeTypes import hiiragi283.ragium.api.recipe.base.HTItemToChancedItemRecipe -import hiiragi283.ragium.api.registry.HTDeferredHolder import hiiragi283.ragium.api.registry.HTFluidContent import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityType import hiiragi283.ragium.api.registry.impl.HTDeferredBlockEntityTypeRegister +import hiiragi283.ragium.api.registry.impl.HTDeferredOnlyBlock import hiiragi283.ragium.api.stack.ImmutableItemStack import hiiragi283.ragium.api.storage.HTHandlerProvider import hiiragi283.ragium.api.storage.capability.HTEnergyCapabilities @@ -288,7 +288,7 @@ object RagiumBlockEntityTypes { // Supported Blocks @JvmStatic private fun addSupportedBlocks(event: BlockEntityTypeAddBlocksEvent) { - for (holder: HTDeferredHolder in RagiumBlocks.REGISTER.firstEntries) { + for (holder: HTDeferredOnlyBlock<*> in RagiumBlocks.REGISTER.blockEntries) { val block: Block? = holder.get() if (block is HTTypedEntityBlock<*>) { event.modify(block.getBlockEntityType().get(), block) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt index 55ce5a445..b7d9dd237 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumCreativeTabs.kt @@ -4,8 +4,8 @@ import hiiragi283.ragium.api.RagiumAPI import hiiragi283.ragium.api.collection.ImmutableTable import hiiragi283.ragium.api.material.HTMaterialKey import hiiragi283.ragium.api.material.HTMaterialLike -import hiiragi283.ragium.api.registry.HTDeferredHolder import hiiragi283.ragium.api.registry.HTDeferredRegister +import hiiragi283.ragium.api.registry.HTSimpleDeferredHolder import hiiragi283.ragium.api.registry.impl.HTDeferredItem import hiiragi283.ragium.api.registry.toDescriptionKey import hiiragi283.ragium.api.variant.HTVariantKey @@ -44,13 +44,13 @@ object RagiumCreativeTabs { } @JvmField - val BLOCKS: HTDeferredHolder = + val BLOCKS: HTSimpleDeferredHolder = REGISTER.register("blocks") { id: ResourceLocation -> CreativeModeTab .builder() .title(Component.translatable(id.toDescriptionKey("itemGroup"))) .icon { RagiumBlocks.PULVERIZER.toStack() } - .displayItems(RagiumBlocks.REGISTER.firstEntries) + .displayItems(RagiumBlocks.REGISTER.blockEntries) .build() } @@ -92,7 +92,7 @@ object RagiumCreativeTabs { }*/ @JvmField - val INGREDIENTS: HTDeferredHolder = register( + val INGREDIENTS: HTSimpleDeferredHolder = register( "ingredients", "ragi_alloy_ingot", ) { _: CreativeModeTab.ItemDisplayParameters, output: CreativeModeTab.Output -> @@ -135,7 +135,7 @@ object RagiumCreativeTabs { } @JvmField - val ITEMS: HTDeferredHolder = + val ITEMS: HTSimpleDeferredHolder = register( "items", "ragi_ticket", @@ -208,7 +208,7 @@ object RagiumCreativeTabs { name: String, icon: String, action: CreativeModeTab.DisplayItemsGenerator, - ): HTDeferredHolder = REGISTER.register(name) { id: ResourceLocation -> + ): HTSimpleDeferredHolder = REGISTER.register(name) { id: ResourceLocation -> CreativeModeTab .builder() .title(Component.translatable(id.toDescriptionKey("itemGroup"))) diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumEquipmentMaterials.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEquipmentMaterials.kt new file mode 100644 index 000000000..548aec01c --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumEquipmentMaterials.kt @@ -0,0 +1,115 @@ +package hiiragi283.ragium.setup + +import hiiragi283.ragium.common.material.RagiumMaterialKeys +import hiiragi283.ragium.common.variant.HTBasicEquipmentMaterial +import net.minecraft.sounds.SoundEvents +import net.minecraft.tags.BlockTags +import net.minecraft.world.item.ArmorItem +import net.minecraft.world.item.ArmorMaterials +import net.minecraft.world.item.Tiers +import net.neoforged.neoforge.common.Tags + +object RagiumEquipmentMaterials { + /** + * @see ArmorMaterials.CHAIN + * @see Tiers.STONE + */ + @JvmField + val RAGI_ALLOY = HTBasicEquipmentMaterial( + RagiumMaterialKeys.RAGI_ALLOY, + axeDamage = 7f, + axeAttackSpeed = -3.2f, + durability = 256, + miningSpeed = 4f, + baseAttackDamage = 1f, + enchantability = 5, + incorrectBlockTag = BlockTags.NEEDS_STONE_TOOL, + defenceMap = mapOf( + ArmorItem.Type.BOOTS to 1, + ArmorItem.Type.LEGGINGS to 4, + ArmorItem.Type.CHESTPLATE to 5, + ArmorItem.Type.HELMET to 2, + ArmorItem.Type.BODY to 4, + ), + armorMultiplier = 10, + equipSound = SoundEvents.ARMOR_EQUIP_CHAIN, + ) + + /** + * @see ArmorMaterials.IRON + * @see Tiers.IRON + */ + @JvmField + val AZURE_STEEL = HTBasicEquipmentMaterial( + RagiumMaterialKeys.AZURE_STEEL, + axeDamage = 6f, + axeAttackSpeed = -3.1f, + durability = 256 * 4, + miningSpeed = 6f, + baseAttackDamage = 2f, + enchantability = 14, + incorrectBlockTag = BlockTags.NEEDS_IRON_TOOL, + defenceMap = mapOf( + ArmorItem.Type.BOOTS to 2, + ArmorItem.Type.LEGGINGS to 5, + ArmorItem.Type.CHESTPLATE to 6, + ArmorItem.Type.HELMET to 2, + ArmorItem.Type.BODY to 5, + ), + armorMultiplier = 15, + equipSound = SoundEvents.ARMOR_EQUIP_IRON, + ) + + /** + * @see ArmorMaterials.DIAMOND + * @see Tiers.DIAMOND + */ + @JvmField + val RAGI_CRYSTAL = HTBasicEquipmentMaterial( + RagiumMaterialKeys.RAGI_CRYSTAL, + axeDamage = 5f, + axeAttackSpeed = -3f, + durability = 1024 + 512 + 256, + miningSpeed = 8f, + baseAttackDamage = 3f, + enchantability = 10, + incorrectBlockTag = BlockTags.NEEDS_DIAMOND_TOOL, + defenceMap = mapOf( + ArmorItem.Type.BOOTS to 3, + ArmorItem.Type.LEGGINGS to 6, + ArmorItem.Type.CHESTPLATE to 8, + ArmorItem.Type.HELMET to 3, + ArmorItem.Type.BODY to 11, + ), + armorMultiplier = 33, + equipSound = SoundEvents.ARMOR_EQUIP_DIAMOND, + toughness = 2f, + ) + + /** + * @see ArmorMaterials.NETHERITE + * @see Tiers.NETHERITE + */ + @JvmField + val DEEP_STEEL = HTBasicEquipmentMaterial( + RagiumMaterialKeys.DEEP_STEEL, + axeDamage = 5f, + axeAttackSpeed = -3f, + durability = 2048, + miningSpeed = 10f, + baseAttackDamage = 4f, + enchantability = 15, + incorrectBlockTag = Tags.Blocks.NEEDS_NETHERITE_TOOL, + defenceMap = mapOf( + ArmorItem.Type.BOOTS to 3, + ArmorItem.Type.LEGGINGS to 6, + ArmorItem.Type.CHESTPLATE to 8, + ArmorItem.Type.HELMET to 3, + ArmorItem.Type.BODY to 11, + ), + armorMultiplier = 37, + equipSound = SoundEvents.ARMOR_EQUIP_NETHERITE, + toughness = 3f, + resistance = 0.2f, + ) +} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt index 88630b6e7..cc927d07a 100644 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumItems.kt @@ -25,6 +25,7 @@ import hiiragi283.ragium.api.storage.fluid.HTFluidTank import hiiragi283.ragium.api.storage.item.HTItemSlot import hiiragi283.ragium.api.tag.RagiumModTags import hiiragi283.ragium.api.text.RagiumTranslation +import hiiragi283.ragium.api.variant.HTEquipmentMaterial import hiiragi283.ragium.api.variant.HTToolVariant import hiiragi283.ragium.common.inventory.container.HTPotionBundleContainerMenu import hiiragi283.ragium.common.item.HTBlastChargeItem @@ -60,6 +61,7 @@ import hiiragi283.ragium.common.util.HTItemHelper import hiiragi283.ragium.common.variant.HTArmorVariant import hiiragi283.ragium.common.variant.HTHammerToolVariant import hiiragi283.ragium.common.variant.HTVanillaToolVariant +import hiiragi283.ragium.common.variant.VanillaEquipmentMaterial import net.minecraft.core.component.DataComponentPatch import net.minecraft.core.component.DataComponents import net.minecraft.resources.ResourceKey @@ -71,8 +73,6 @@ import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraft.world.item.Items import net.minecraft.world.item.Rarity -import net.minecraft.world.item.Tier -import net.minecraft.world.item.Tiers import net.minecraft.world.item.enchantment.Enchantment import net.minecraft.world.item.enchantment.Enchantments import net.minecraft.world.level.ItemLike @@ -256,12 +256,12 @@ object RagiumItems { @JvmField val AZURE_ARMORS: Map> = HTArmorVariant.entries.associateWith { variant: HTArmorVariant -> - variant.registerItem(REGISTER, RagiumMaterialKeys.AZURE_STEEL, RagiumArmorMaterials.AZURE_STEEL, 20) + variant.registerItem(REGISTER, RagiumEquipmentMaterials.AZURE_STEEL) } @JvmField val DEEP_ARMORS: Map> = HTArmorVariant.entries.associateWith { variant: HTArmorVariant -> - variant.registerItem(REGISTER, RagiumMaterialKeys.DEEP_STEEL, RagiumArmorMaterials.DEEP_STEEL, 20) + variant.registerItem(REGISTER, RagiumEquipmentMaterials.DEEP_STEEL) } @JvmStatic @@ -358,27 +358,30 @@ object RagiumItems { val HUGE_DRUM_UPGRADE: HTSimpleDeferredItem = REGISTER.registerItem("huge_drum_upgrade", HTDrumUpgradeItem::Huge) val TOOLS: ImmutableTable> = buildTable { - val consumer: (HTToolVariant, HTMaterialKey, Tier) -> Unit = { variant: HTToolVariant, key: HTMaterialKey, tier: Tier -> - this[variant, key] = variant.registerItem(REGISTER, key, tier) + val consumer: (HTToolVariant, HTEquipmentMaterial) -> Unit = { variant: HTToolVariant, material: HTEquipmentMaterial -> + this[variant, material.asMaterialKey()] = variant.registerItem(REGISTER, material) } // Hammer - consumer(HTHammerToolVariant, VanillaMaterialKeys.IRON, Tiers.IRON) - consumer(HTHammerToolVariant, VanillaMaterialKeys.DIAMOND, Tiers.DIAMOND) - consumer(HTHammerToolVariant, VanillaMaterialKeys.NETHERITE, Tiers.NETHERITE) - - consumer(HTHammerToolVariant, RagiumMaterialKeys.RAGI_ALLOY, RagiumToolTiers.RAGI_ALLOY) - consumer(HTHammerToolVariant, RagiumMaterialKeys.AZURE_STEEL, RagiumToolTiers.AZURE_STEEL) - consumer(HTHammerToolVariant, RagiumMaterialKeys.DEEP_STEEL, RagiumToolTiers.DEEP_STEEL) - - this[HTHammerToolVariant, RagiumMaterialKeys.RAGI_CRYSTAL] = - REGISTER.registerItem("ragi_crystal_hammer", ::HTDestructionHammerItem) + consumer(HTHammerToolVariant, VanillaEquipmentMaterial.IRON) + consumer(HTHammerToolVariant, VanillaEquipmentMaterial.DIAMOND) + consumer(HTHammerToolVariant, VanillaEquipmentMaterial.NETHERITE) + + consumer(HTHammerToolVariant, RagiumEquipmentMaterials.RAGI_ALLOY) + consumer(HTHammerToolVariant, RagiumEquipmentMaterials.AZURE_STEEL) + consumer(HTHammerToolVariant, RagiumEquipmentMaterials.DEEP_STEEL) + + this[HTHammerToolVariant, RagiumMaterialKeys.RAGI_CRYSTAL] = REGISTER.registerItemWith( + "ragi_crystal_hammer", + RagiumEquipmentMaterials.RAGI_CRYSTAL, + HTDestructionHammerItem::create, + ) // Tools for (variant: HTToolVariant in HTVanillaToolVariant.entries) { // Azure - consumer(variant, RagiumMaterialKeys.AZURE_STEEL, RagiumToolTiers.AZURE_STEEL) + consumer(variant, RagiumEquipmentMaterials.AZURE_STEEL) // Deep - consumer(variant, RagiumMaterialKeys.DEEP_STEEL, RagiumToolTiers.DEEP_STEEL) + consumer(variant, RagiumEquipmentMaterials.DEEP_STEEL) } } diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt new file mode 100644 index 000000000..6905e819c --- /dev/null +++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumMiscRegister.kt @@ -0,0 +1,68 @@ +package hiiragi283.ragium.setup + +import hiiragi283.ragium.api.RagiumAPI +import hiiragi283.ragium.api.recipe.RagiumRecipeTypes +import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType +import hiiragi283.ragium.api.variant.HTEquipmentMaterial +import hiiragi283.ragium.impl.data.map.HTCrushingMaterialRecipeData +import hiiragi283.ragium.impl.data.map.HTRawSmeltingMaterialRecipeData +import net.minecraft.core.registries.Registries +import net.minecraft.resources.ResourceLocation +import net.minecraft.world.item.ArmorItem +import net.minecraft.world.item.ArmorMaterial +import net.minecraft.world.item.crafting.Recipe +import net.minecraft.world.item.crafting.RecipeType +import net.neoforged.neoforge.registries.RegisterEvent + +object RagiumMiscRegister { + @JvmStatic + fun register(event: RegisterEvent) { + // Armor Material + event.register(Registries.ARMOR_MATERIAL) { helper -> + register(helper, RagiumEquipmentMaterials.AZURE_STEEL) + register(helper, RagiumEquipmentMaterials.DEEP_STEEL) + } + // Recipe Type + event.register(Registries.RECIPE_TYPE) { helper -> + register(helper, RagiumRecipeTypes.SAWMILL) + // Machine + register(helper, RagiumRecipeTypes.ALLOYING) + register(helper, RagiumRecipeTypes.COMPRESSING) + register(helper, RagiumRecipeTypes.CRUSHING) + register(helper, RagiumRecipeTypes.ENCHANTING) + register(helper, RagiumRecipeTypes.EXTRACTING) + register(helper, RagiumRecipeTypes.FLUID_TRANSFORM) + register(helper, RagiumRecipeTypes.MELTING) + register(helper, RagiumRecipeTypes.PLANTING) + register(helper, RagiumRecipeTypes.SIMULATING) + register(helper, RagiumRecipeTypes.WASHING) + } + // Material Recipe Type + event.register(RagiumAPI.MATERIAL_RECIPE_TYPE_KEY) { helper -> + helper.register(RagiumAPI.id("crushing"), HTCrushingMaterialRecipeData.CODEC) + helper.register(RagiumAPI.id("raw_smelting"), HTRawSmeltingMaterialRecipeData.CODEC) + } + } + + @JvmStatic + private fun register(helper: RegisterEvent.RegisterHelper, material: HTEquipmentMaterial) { + val id: ResourceLocation = RagiumAPI.id(material.asMaterialName()) + helper.register( + id, + ArmorMaterial( + ArmorItem.Type.entries.associateWith(material::getArmorDefence), + material.enchantmentValue, + material.getEquipSound(), + { material.repairIngredient }, + listOf(ArmorMaterial.Layer(id)), + material.getToughness(), + material.getKnockbackResistance(), + ), + ) + } + + @JvmStatic + private fun > register(helper: RegisterEvent.RegisterHelper>, holder: HTDeferredRecipeType<*, R>) { + helper.register(holder.id, RecipeType.simple(holder.id)) + } +} diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumToolTiers.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumToolTiers.kt deleted file mode 100644 index ff701837f..000000000 --- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumToolTiers.kt +++ /dev/null @@ -1,64 +0,0 @@ -package hiiragi283.ragium.setup - -import hiiragi283.ragium.api.util.wrapOptional -import hiiragi283.ragium.common.material.RagiumMaterialKeys -import net.minecraft.core.registries.BuiltInRegistries -import net.minecraft.tags.BlockTags -import net.minecraft.tags.TagKey -import net.minecraft.world.item.Tiers -import net.minecraft.world.item.component.Tool -import net.minecraft.world.level.block.Block -import net.neoforged.neoforge.common.SimpleTier -import net.neoforged.neoforge.registries.holdersets.AnyHolderSet - -object RagiumToolTiers { - @JvmField - val RAGI_ALLOY = SimpleTier( - BlockTags.INCORRECT_FOR_STONE_TOOL, - Tiers.IRON.uses, - Tiers.STONE.speed, - Tiers.STONE.attackDamageBonus, - Tiers.STONE.enchantmentValue, - ) { CommonMaterialPrefixes.INGOT.toIngredient(RagiumMaterialKeys.RAGI_ALLOY) } - - @JvmField - val AZURE_STEEL = SimpleTier( - BlockTags.INCORRECT_FOR_IRON_TOOL, - Tiers.IRON.uses * 4, - Tiers.IRON.speed, - Tiers.IRON.attackDamageBonus, - Tiers.IRON.enchantmentValue, - ) { CommonMaterialPrefixes.INGOT.toIngredient(RagiumMaterialKeys.AZURE_STEEL) } - - @JvmField - val RAGI_CRYSTAL: SimpleTier = object : SimpleTier( - BlockTags.INCORRECT_FOR_DIAMOND_TOOL, - Tiers.DIAMOND.uses * 4, - Tiers.DIAMOND.speed, - Tiers.DIAMOND.attackDamageBonus, - Tiers.DIAMOND.enchantmentValue, - { CommonMaterialPrefixes.GEM.toIngredient(RagiumMaterialKeys.RAGI_CRYSTAL) }, - ) { - override fun createToolProperties(block: TagKey): Tool = Tool( - listOf( - Tool.Rule.deniesDrops(block), - Tool.Rule( - AnyHolderSet(BuiltInRegistries.BLOCK.asLookup()), - 12f.wrapOptional(), - true.wrapOptional(), - ), - ), - 1f, - 1, - ) - } - - @JvmField - val DEEP_STEEL = SimpleTier( - BlockTags.INCORRECT_FOR_NETHERITE_TOOL, - Tiers.NETHERITE.uses, - Tiers.NETHERITE.speed, - Tiers.NETHERITE.attackDamageBonus, - Tiers.NETHERITE.enchantmentValue, - ) { CommonMaterialPrefixes.INGOT.toIngredient(RagiumMaterialKeys.DEEP_STEEL) } -}