Skip to content

Commit ec08ea1

Browse files
committed
- アルミ缶,ポーション缶を追加
1 parent 0b5a66c commit ec08ea1

16 files changed

+172
-10
lines changed

src/generated/resources/assets/ragium/lang/en_us.json

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"fluid_type.ragium.warped_sap": "Warped Sap",
4747
"item.ragium.advanced_circuit": "Advanced Circuit",
4848
"item.ragium.alkali_reagent": "Alkali Reagent",
49+
"item.ragium.aluminum_can": "Aluminum Can",
4950
"item.ragium.ambrosia": "Ambrosia",
5051
"item.ragium.basic_circuit": "Basic Circuit",
5152
"item.ragium.bee_wax": "Bee Wax",
@@ -83,6 +84,7 @@
8384
"item.ragium.plastic_plate": "Plastic Plate",
8485
"item.ragium.plate_press_mold": "Press Mold (Plate)",
8586
"item.ragium.polymer_resin": "Polymer Resin",
87+
"item.ragium.potion_can": "Potion Can",
8688
"item.ragium.precision_machine_casing": "Precision Machine Casing",
8789
"item.ragium.prismarine_reagent": "Prismarine Reagent",
8890
"item.ragium.ragi_alloy_compound": "Ragi-Alloy Compound",
@@ -117,6 +119,8 @@
117119
"machine_type.combustion_generator.description": "Generate energy from liquid fuels",
118120
"machine_type.compressor": "Compressor",
119121
"machine_type.compressor.description": "saves.zip.zip",
122+
"machine_type.disenchanter": "Disenchanter",
123+
"machine_type.disenchanter.description": "Transfer enchantment from applied item to book",
120124
"machine_type.drain": "Drain",
121125
"machine_type.drain.description": "Drains fluids from front, experience from up, and fluid cube in slot",
122126
"machine_type.extractor": "Extractor",

src/generated/resources/assets/ragium/lang/ja_jp.json

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"fluid_type.ragium.warped_sap": "歪んだ樹液",
4747
"item.ragium.advanced_circuit": "発展回路",
4848
"item.ragium.alkali_reagent": "アルカリ試薬",
49+
"item.ragium.aluminum_can": "アルミ缶",
4950
"item.ragium.ambrosia": "アンブロシア",
5051
"item.ragium.basic_circuit": "基本回路",
5152
"item.ragium.bee_wax": "蜜蠟",
@@ -83,6 +84,7 @@
8384
"item.ragium.plastic_plate": "プラスチック板",
8485
"item.ragium.plate_press_mold": "プレス型(板材)",
8586
"item.ragium.polymer_resin": "高分子樹脂",
87+
"item.ragium.potion_can": "ポーション缶",
8688
"item.ragium.precision_machine_casing": "精密機械筐体",
8789
"item.ragium.prismarine_reagent": "プリズマリン試薬",
8890
"item.ragium.ragi_alloy_compound": "ラギ合金混合物",
@@ -117,6 +119,8 @@
117119
"machine_type.combustion_generator.description": "液体燃料から発電する",
118120
"machine_type.compressor": "圧縮機",
119121
"machine_type.compressor.description": "saves.zip.zip",
122+
"machine_type.disenchanter": "ディスエンチャンター",
123+
"machine_type.disenchanter.description": "投入したアイテムのエンチャントを本に移す",
120124
"machine_type.drain": "排水溝",
121125
"machine_type.drain.description": "正面から液体を,上から経験値を,スロット内の液体キューブから中身を吸い取る",
122126
"machine_type.extractor": "抽出器",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:item/generated",
3+
"textures": {
4+
"layer0": "ragium:item/aluminum_can"
5+
}
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"parent": "ragium:block/disenchanter"
3+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"parent": "minecraft:item/generated",
3+
"textures": {
4+
"layer0": "ragium:item/potion_can",
5+
"layer1": "ragium:item/potion_can_overlay"
6+
}
7+
}

src/main/kotlin/hiiragi283/ragium/api/extension/FluidExtensions.kt

+3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ val Fluid.isSource: Boolean get() = isSource(defaultFluidState())
3131

3232
// IFluidHandler //
3333

34+
val IFluidHandler.tankRange: IntRange
35+
get() = (0 until tanks)
36+
3437
fun IFluidHandler.canFill(resource: FluidStack): Boolean = fill(resource, IFluidHandler.FluidAction.SIMULATE) > 0
3538

3639
fun IFluidHandler.canDrain(resource: FluidStack): Boolean = !drain(resource, IFluidHandler.FluidAction.SIMULATE).isEmpty

src/main/kotlin/hiiragi283/ragium/client/RagiumClient.kt

+23-2
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,20 @@ import hiiragi283.ragium.common.multiblock.HTAxisMultiblockComponent
1515
import hiiragi283.ragium.common.multiblock.HTSimpleMultiblockComponent
1616
import hiiragi283.ragium.common.multiblock.HTTagMultiblockComponent
1717
import net.minecraft.client.renderer.entity.ThrownItemRenderer
18+
import net.minecraft.core.component.DataComponents
1819
import net.minecraft.resources.ResourceLocation
20+
import net.minecraft.util.FastColor
1921
import net.minecraft.world.inventory.MenuType
22+
import net.minecraft.world.item.ItemStack
23+
import net.minecraft.world.item.alchemy.PotionContents
2024
import net.minecraft.world.level.Level
2125
import net.minecraft.world.level.block.entity.BlockEntityType
2226
import net.neoforged.api.distmarker.Dist
2327
import net.neoforged.bus.api.SubscribeEvent
2428
import net.neoforged.fml.common.EventBusSubscriber
2529
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent
2630
import net.neoforged.neoforge.client.event.EntityRenderersEvent
31+
import net.neoforged.neoforge.client.event.RegisterColorHandlersEvent
2732
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
2833
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent
2934
import net.neoforged.neoforge.registries.DeferredHolder
@@ -35,6 +40,22 @@ object RagiumClient {
3540
@JvmStatic
3641
private val LOGGER: Logger = LogUtils.getLogger()
3742

43+
@SubscribeEvent
44+
fun registerItemColor(event: RegisterColorHandlersEvent.Item) {
45+
event.register(
46+
{ stack: ItemStack, tintIndex: Int ->
47+
if (tintIndex != 1) {
48+
-1
49+
} else {
50+
FastColor.ARGB32.opaque(stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY).color)
51+
}
52+
},
53+
RagiumItems.POTION_CAN,
54+
)
55+
56+
LOGGER.info("Registered ItemColor!")
57+
}
58+
3859
@SubscribeEvent
3960
fun registerClientExtensions(event: RegisterClientExtensionsEvent) {
4061
// Fluid
@@ -68,7 +89,7 @@ object RagiumClient {
6889
}
6990

7091
@SubscribeEvent
71-
private fun registerMenu(event: RegisterMenuScreensEvent) {
92+
fun registerMenu(event: RegisterMenuScreensEvent) {
7293
RagiumMenuTypes.REGISTER.forEach { holder: DeferredHolder<MenuType<*>, out MenuType<*>> ->
7394
val menuType: MenuType<*> = holder.get()
7495
if (menuType is HTMachineMenuType<*>) {
@@ -80,7 +101,7 @@ object RagiumClient {
80101
}
81102

82103
@SubscribeEvent
83-
private fun registerBlockEntityRenderer(event: EntityRenderersEvent.RegisterRenderers) {
104+
fun registerBlockEntityRenderer(event: EntityRenderersEvent.RegisterRenderers) {
84105
fun register(type: Supplier<out BlockEntityType<out HTMachineBlockEntity>>) {
85106
event.registerBlockEntityRenderer(type.get(), ::HTMachineBlockEntityRenderer)
86107
}

src/main/kotlin/hiiragi283/ragium/common/init/RagiumCreativeTabs.kt

+2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ object RagiumCreativeTabs {
6060
output.accept(RagiumItems.DYNAMITE)
6161
output.accept(RagiumItems.SLOT_LOCK)
6262

63+
output.accept(RagiumItems.ALUMINUM_CAN)
64+
6365
RagiumItems.DRILLS.forEach(output::accept)
6466
RagiumItems.PRESS_MOLDS.values.forEach(output::accept)
6567
// Circuits

src/main/kotlin/hiiragi283/ragium/common/init/RagiumItems.kt

+6
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,12 @@ object RagiumItems {
326326
val SLOT_LOCK: DeferredItem<HTCatalystItem> =
327327
register("slot_lock", ::HTCatalystItem, itemProperty().stacksTo(1))
328328

329+
@JvmField
330+
val ALUMINUM_CAN: DeferredItem<Item> = register("aluminum_can")
331+
332+
@JvmField
333+
val POTION_CAN: DeferredItem<HTPotionCanItem> = register("potion_can", ::HTPotionCanItem)
334+
329335
@JvmField
330336
val PRESS_MOLDS: Map<HTTagPrefix, DeferredItem<HTCatalystItem>> =
331337
listOf(

src/main/kotlin/hiiragi283/ragium/common/init/RagiumRecipeSerializers.kt

+4
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ object RagiumRecipeSerializers {
4040
val BLAST_FURNACE: DeferredHolder<RecipeSerializer<*>, HTMultiItemRecipe.Serializer<HTBlastFurnaceRecipe>> =
4141
REGISTER.register("blast_furnace") { _: ResourceLocation -> HTMultiItemRecipe.Serializer(::HTBlastFurnaceRecipe) }
4242

43+
@JvmField
44+
val BREWERY: DeferredHolder<RecipeSerializer<*>, RecipeSerializer<HTBreweryRecipe>> =
45+
register("brewery", HTBreweryRecipe.CODEC, HTBreweryRecipe.STREAM_CODEC)
46+
4347
@JvmField
4448
val COMPRESSOR: DeferredHolder<RecipeSerializer<*>, HTSingleItemRecipe.Serializer<HTCompressorRecipe>> =
4549
REGISTER.register("compressor") { _: ResourceLocation -> HTSingleItemRecipe.Serializer(::HTCompressorRecipe) }

src/main/kotlin/hiiragi283/ragium/common/init/RagiumRecipeTypes.kt

+3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ object RagiumRecipeTypes {
2424
@JvmField
2525
val BLAST_FURNACE: DeferredHolder<RecipeType<*>, RecipeType<HTBlastFurnaceRecipe>> = register("blast_furnace")
2626

27+
@JvmField
28+
val BREWERY: DeferredHolder<RecipeType<*>, RecipeType<HTBreweryRecipe>> = register("brewery")
29+
2730
@JvmField
2831
val COMPRESSOR: DeferredHolder<RecipeType<*>, RecipeType<HTCompressorRecipe>> = register("compressor")
2932

src/main/kotlin/hiiragi283/ragium/common/internal/RagiumModEvents.kt

+21-8
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,13 @@ import hiiragi283.ragium.common.init.*
2828
import net.minecraft.core.BlockPos
2929
import net.minecraft.core.Direction
3030
import net.minecraft.core.particles.ParticleTypes
31+
import net.minecraft.core.registries.Registries
3132
import net.minecraft.sounds.SoundEvents
3233
import net.minecraft.util.RandomSource
34+
import net.minecraft.world.item.CreativeModeTab
35+
import net.minecraft.world.item.CreativeModeTabs
3336
import net.minecraft.world.item.ItemStack
37+
import net.minecraft.world.item.alchemy.PotionContents
3438
import net.minecraft.world.level.Level
3539
import net.minecraft.world.level.block.CampfireBlock
3640
import net.minecraft.world.level.block.entity.BlockEntity
@@ -42,6 +46,7 @@ import net.neoforged.fml.common.EventBusSubscriber
4246
import net.neoforged.neoforge.capabilities.Capabilities
4347
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent
4448
import net.neoforged.neoforge.event.BlockEntityTypeAddBlocksEvent
49+
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent
4550
import net.neoforged.neoforge.event.ModifyDefaultComponentsEvent
4651
import net.neoforged.neoforge.fluids.capability.templates.FluidHandlerItemStack
4752
import net.neoforged.neoforge.registries.NewRegistryEvent
@@ -243,14 +248,6 @@ internal object RagiumModEvents {
243248

244249
@SubscribeEvent
245250
fun registerBlockCapabilities(event: RegisterCapabilitiesEvent) {
246-
/*RagiumAPI.machineRegistry.blocks.forEach { holder: DeferredBlock<*> ->
247-
event.registerBlock(
248-
RagiumAPI.BlockCapabilities.CONTROLLER_HOLDER,
249-
{ _: Level, _: BlockPos, _: BlockState, blockEntity: BlockEntity?, _: Direction -> blockEntity as? HTMultiblockController },
250-
holder.get(),
251-
)
252-
}*/
253-
254251
// from HTBlockEntityHandlerProvider
255252
fun <T> registerHandlers(supplier: Supplier<BlockEntityType<T>>) where T : BlockEntity, T : HTBlockEntityHandlerProvider {
256253
val type: BlockEntityType<T> = supplier.get()
@@ -346,4 +343,20 @@ internal object RagiumModEvents {
346343
fun modifyComponents(event: ModifyDefaultComponentsEvent) {
347344
LOGGER.info("Modified item components!")
348345
}
346+
347+
@SubscribeEvent
348+
fun buildCreativeTabs(event: BuildCreativeModeTabContentsEvent) {
349+
// Add Potion Can
350+
if (event.tabKey == CreativeModeTabs.FOOD_AND_DRINKS) {
351+
val parameters: CreativeModeTab.ItemDisplayParameters = event.parameters
352+
parameters
353+
.holders
354+
.lookupOrThrow(Registries.POTION)
355+
.listElements()
356+
.filter { it.value().isEnabled(parameters.enabledFeatures) }
357+
.map { PotionContents.createItemStack(RagiumItems.POTION_CAN.asItem(), it) }
358+
.forEach(event::accept)
359+
LOGGER.info("Modified existing Creative Tags!")
360+
}
361+
}
349362
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package hiiragi283.ragium.common.item
2+
3+
import hiiragi283.ragium.api.extension.dropStackAt
4+
import hiiragi283.ragium.common.init.RagiumItems
5+
import net.minecraft.advancements.CriteriaTriggers
6+
import net.minecraft.core.component.DataComponents
7+
import net.minecraft.network.chat.Component
8+
import net.minecraft.server.level.ServerPlayer
9+
import net.minecraft.stats.Stats
10+
import net.minecraft.world.InteractionHand
11+
import net.minecraft.world.InteractionResultHolder
12+
import net.minecraft.world.effect.MobEffectInstance
13+
import net.minecraft.world.entity.LivingEntity
14+
import net.minecraft.world.entity.player.Player
15+
import net.minecraft.world.item.*
16+
import net.minecraft.world.item.alchemy.PotionContents
17+
import net.minecraft.world.item.alchemy.Potions
18+
import net.minecraft.world.level.Level
19+
import net.minecraft.world.level.gameevent.GameEvent
20+
21+
class HTPotionCanItem(properties: Properties) : Item(properties.durability(3)) {
22+
override fun getDefaultInstance(): ItemStack =
23+
super.getDefaultInstance().apply { set(DataComponents.POTION_CONTENTS, PotionContents(Potions.WATER)) }
24+
25+
override fun finishUsingItem(stack: ItemStack, level: Level, livingEntity: LivingEntity): ItemStack {
26+
val player: Player? = livingEntity as? Player
27+
if (player is ServerPlayer) {
28+
CriteriaTriggers.CONSUME_ITEM.trigger(player, stack)
29+
}
30+
if (!level.isClientSide) {
31+
val potion: PotionContents = stack.getOrDefault(DataComponents.POTION_CONTENTS, PotionContents.EMPTY)
32+
potion.forEachEffect { instance: MobEffectInstance ->
33+
if (instance.effect.value().isInstantenous) {
34+
instance.effect
35+
.value()
36+
.applyInstantenousEffect(player, player, livingEntity, instance.amplifier, 1.0)
37+
} else {
38+
livingEntity.addEffect(instance)
39+
}
40+
}
41+
}
42+
43+
player?.let { playerIn: Player ->
44+
playerIn.awardStat(Stats.ITEM_USED.get(this))
45+
val drankStack = stack.hurtAndConvertOnBreak(
46+
1,
47+
RagiumItems.ALUMINUM_CAN,
48+
playerIn,
49+
LivingEntity.getSlotForHand(playerIn.usedItemHand),
50+
)
51+
if (drankStack != stack) {
52+
dropStackAt(playerIn, drankStack)
53+
}
54+
}
55+
livingEntity.gameEvent(GameEvent.DRINK)
56+
return stack
57+
}
58+
59+
override fun getUseDuration(stack: ItemStack, entity: LivingEntity): Int = 32
60+
61+
override fun getUseAnimation(stack: ItemStack): UseAnim = UseAnim.DRINK
62+
63+
override fun use(level: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder<ItemStack?> =
64+
ItemUtils.startUsingInstantly(level, player, usedHand)
65+
66+
override fun appendHoverText(
67+
stack: ItemStack,
68+
context: TooltipContext,
69+
tooltipComponents: MutableList<Component>,
70+
tooltipFlag: TooltipFlag,
71+
) {
72+
stack.get(DataComponents.POTION_CONTENTS)?.addPotionTooltip(tooltipComponents::add, 1f, context.tickRate())
73+
}
74+
}

src/main/kotlin/hiiragi283/ragium/data/client/RagiumEnglishProvider.kt

+3
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ class RagiumEnglishProvider(output: PackOutput) : LanguageProvider(output, Ragiu
114114
addItem(RagiumItems.DYNAMITE, "Dynamite")
115115
addItem(RagiumItems.SLOT_LOCK, "Slot Lock")
116116

117+
addItem(RagiumItems.ALUMINUM_CAN, "Aluminum Can")
118+
addItem(RagiumItems.POTION_CAN, "Potion Can")
119+
117120
addItem(RagiumItems.BASIC_CIRCUIT, "Basic Circuit")
118121
addItem(RagiumItems.ADVANCED_CIRCUIT, "Advanced Circuit")
119122
addItem(RagiumItems.ELITE_CIRCUIT, "Elite Circuit")

src/main/kotlin/hiiragi283/ragium/data/client/RagiumJapaneseProvider.kt

+3
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ class RagiumJapaneseProvider(output: PackOutput) : LanguageProvider(output, Ragi
114114
addItem(RagiumItems.DYNAMITE, "ダイナマイト")
115115
addItem(RagiumItems.SLOT_LOCK, "スロットロック")
116116

117+
addItem(RagiumItems.ALUMINUM_CAN, "アルミ缶")
118+
addItem(RagiumItems.POTION_CAN, "ポーション缶")
119+
117120
addItem(RagiumItems.BASIC_CIRCUIT, "基本回路")
118121
addItem(RagiumItems.ADVANCED_CIRCUIT, "発展回路")
119122
addItem(RagiumItems.ELITE_CIRCUIT, "精鋭回路")

src/main/kotlin/hiiragi283/ragium/data/client/RagiumModelProvider.kt

+6
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class RagiumModelProvider(output: PackOutput, existingFileHelper: ExistingFileHe
8282
// add(RagiumItems.DEFOLIANT)
8383
add(RagiumItems.DYNAMITE)
8484
add(RagiumItems.SLOT_LOCK)
85+
add(RagiumItems.ALUMINUM_CAN)
8586

8687
addAll(RagiumItems.CIRCUITS)
8788
addAll(RagiumItems.PRESS_MOLDS.values)
@@ -100,6 +101,11 @@ class RagiumModelProvider(output: PackOutput, existingFileHelper: ExistingFileHe
100101
.itemTexture("layer0", ResourceLocation.withDefaultNamespace("apple"))
101102
.itemTexture("layer1", RagiumItems.CHOCOLATE_APPLE.id)
102103

104+
getBuilder(RagiumItems.POTION_CAN)
105+
.parent(ModelFile.UncheckedModelFile("item/generated"))
106+
.itemTexture("layer0", RagiumItems.POTION_CAN.id)
107+
.itemTexture("layer1", RagiumItems.POTION_CAN.id.withSuffix("_overlay"))
108+
103109
listOf(
104110
RagiumItems.MACHINE_CASING,
105111
RagiumItems.CHEMICAL_MACHINE_CASING,

0 commit comments

Comments
 (0)