Garlic effect (proto demo)
build / build (push) Successful in 5m58s

This commit is contained in:
2026-06-17 16:57:06 +02:00
parent b8e5c1da1a
commit c09f74ccae
9 changed files with 84 additions and 7 deletions
@@ -1,5 +1,6 @@
package gamer.noir.curseenc package gamer.noir.curseenc
import gamer.noir.curseenc.effect.Effect
import gamer.noir.curseenc.item.ModItems import gamer.noir.curseenc.item.ModItems
import net.fabricmc.api.ModInitializer import net.fabricmc.api.ModInitializer
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@@ -11,6 +12,7 @@ object CurseOfEienNoChi : ModInitializer {
override fun onInitialize() { override fun onInitialize() {
ModItems.initialize() ModItems.initialize()
Effect.initialize()
// This code runs as soon as Minecraft is in a mod-load-ready state. // This code runs as soon as Minecraft is in a mod-load-ready state.
// However, some things (like resources) may still be uninitialized. // However, some things (like resources) may still be uninitialized.
// Proceed with mild caution. // Proceed with mild caution.
@@ -0,0 +1,26 @@
package gamer.noir.curseenc.effect
import net.minecraft.advancements.critereon.MobEffectsPredicate.Builder.effects
import net.minecraft.core.Holder
import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.effect.MobEffect
object Effect {
val GARLIC_STATUS: Holder<MobEffect> = register(GarlicStatus,"garlic_status")
fun register(effect : MobEffect , id : String): Holder.Reference<MobEffect> {
return Registry.registerForHolder(
BuiltInRegistries.MOB_EFFECT,
ResourceLocation.fromNamespaceAndPath("curseenc", id),
effect
);
}
fun initialize() {
}
}
@@ -0,0 +1,31 @@
package gamer.noir.curseenc.effect
import gamer.noir.curseenc.item.ModItems
import net.fabricmc.api.ModInitializer
import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.server.level.ServerLevel
import net.minecraft.world.effect.MobEffect
import net.minecraft.world.effect.MobEffectCategory
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.entity.player.Player
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items
object GarlicStatus : MobEffect(MobEffectCategory.BENEFICIAL, 0xe9b8b3) {
// Called every tick to check if the effect can be applied or not
override fun shouldApplyEffectTickThisTick(duration: Int, amplifier: Int): Boolean {
// In our case, we just make it return true so that it applies the effect every tick
return true
}
// Called when the effect is applied.
override fun applyEffectTick(entity: LivingEntity, amplifier: Int): Boolean {
if (entity is Player && entity.mainHandItem.`is`(Items.DIRT)){
entity.inventory.add(ItemStack(ModItems.GARLIC)) // Higher amplifier gives you experience faster
}
return super.applyEffectTick(entity, amplifier)
}
}
@@ -1,15 +1,22 @@
package gamer.noir.curseenc.item package gamer.noir.curseenc.item
import gamer.noir.curseenc.CurseOfEienNoChi import gamer.noir.curseenc.CurseOfEienNoChi
import gamer.noir.curseenc.effect.Effect
import gamer.noir.curseenc.effect.GarlicStatus
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents.ModifyEntries import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents.ModifyEntries
import net.minecraft.core.Registry import net.minecraft.core.Registry
import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.resources.ResourceLocation import net.minecraft.resources.ResourceLocation
import net.minecraft.world.effect.MobEffect
import net.minecraft.world.effect.MobEffectInstance
import net.minecraft.world.effect.MobEffects
import net.minecraft.world.food.FoodProperties
import net.minecraft.world.item.CreativeModeTabs import net.minecraft.world.item.CreativeModeTabs
import net.minecraft.world.item.Item import net.minecraft.world.item.Item
object ModItems { object ModItems {
fun register(item: Item, id: String): Item { fun register(item: Item, id: String): Item {
// Create the identifier for the item. // Create the identifier for the item.
@@ -22,13 +29,21 @@ object ModItems {
return registeredItem return registeredItem
} }
val GARLIC_FOOD: FoodProperties = FoodProperties.Builder()
.alwaysEdible()
.effect(MobEffectInstance(Effect.GARLIC_STATUS, 6 * 20, 0), 1.0f)
.build()
val GARLIC: Item = register( val GARLIC: Item = register(
Item(Item.Properties()), Item(Item.Properties().food(GARLIC_FOOD)),
"garlic" "garlic"
) )
fun initialize() { fun initialize() {
ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.INGREDIENTS) ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.INGREDIENTS)
.register(ModifyEntries { entries: FabricItemGroupEntries? -> entries!!.accept(GARLIC) }) .register(ModifyEntries { entries: FabricItemGroupEntries ->
entries.accept(GARLIC)
})
} }
} }
@@ -1,3 +0,0 @@
{
"item.CurseOfEienNoChi.garlic": "Garlic"
}
@@ -0,0 +1,6 @@
{
"item.curseenc.garlic": "Garlic",
"effect.curseenc.garlic_status": "Garlic Status"
}
@@ -1,6 +1,6 @@
{ {
"parent": "item/generated", "parent": "item/generated",
"textures": { "textures": {
"layer0": "example-mod:item/garlic" "layer0": "curseenc:item/garlic"
} }
} }

Before

Width:  |  Height:  |  Size: 257 B

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B