Bonjour à tout le monde, je viens vers vous car j’ai un problème que je n’arrive pas à résoudre. Pour commencer, je suis nouveau dans la création de mods et j’ai voulu faire un test. Tout fonctionne et le mod marche bien comme je le souhaite, mais je n’arrive pas à mettre en place un système de son lorsque je clique sur le bloc avec mon item créé. Je vous montre.
ModSound :
cooperoxidationevent.java
voila le lien de mon github mis a jour : https://github.com/NEKOgrile/mod-copper-faster/tree/main
merci encors a vous
ModSound :
package net.nekogrile.tutorialmod.sound;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.nekogrile.tutorialmod.TutorialMod;
public class ModSounds {
public static final DeferredRegister<SoundEvent> SOUND_EVENTS =
DeferredRegister.create(ForgeRegistries.SOUND_EVENTS, TutorialMod.MOD_ID);
// Déclare le son "squalala" correctement
public static final RegistryObject<SoundEvent> SOUND_SQUALALA = SOUND_EVENTS.register("squalala",
() -> SoundEvent.createVariableRangeEvent(new ResourceLocation(TutorialMod.MOD_ID, "squalala")));
// Méthode pour enregistrer les sons sur le bus d'événements
public static void register(IEventBus eventBus) {
SOUND_EVENTS.register(eventBus);
}
}
cooperoxidationevent.java
package net.nekogrile.tutorialmod.event;
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.sounds.SoundSource;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.nekogrile.tutorialmod.TutorialMod;
import net.nekogrile.tutorialmod.item.ModItems;
import net.nekogrile.tutorialmod.sound.ModSounds;
import java.util.Random;
@Mod.EventBusSubscriber(modid = TutorialMod.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class CopperOxidationEvent {
@SubscribeEvent
public static void onRightClickBlock(PlayerInteractEvent.RightClickBlock event) {
// Vérifie si le joueur tient l'objet "Vine Special" dans la main principale
if (event.getEntity().getItemInHand(InteractionHand.MAIN_HAND).getItem() == ModItems.VINE_SPECIAL.get()) {
BlockPos pos = event.getPos();
BlockState state = event.getLevel().getBlockState(pos);
// Vérifie si le niveau est un ServerLevel pour permettre les modifications
if (event.getLevel() instanceof ServerLevel serverLevel) {
BlockState newState = null;
// Le cuivre normal devient exposed, exposed devient weathered, et weathered devient oxidized
if (state.is(Blocks.COPPER_BLOCK)) {
newState = Blocks.EXPOSED_COPPER.defaultBlockState();
} else if (state.is(Blocks.EXPOSED_COPPER)) {
newState = Blocks.WEATHERED_COPPER.defaultBlockState();
} else if (state.is(Blocks.WEATHERED_COPPER)) {
newState = Blocks.OXIDIZED_COPPER.defaultBlockState();
}
// Si un nouvel état a été déterminé, on met à jour le bloc
if (newState != null) {
serverLevel.setBlockAndUpdate(pos, newState);
// Joue le son "squalala" avec une probabilité de 10%
serverLevel.playSound(null, pos, ModSounds.SOUND_SQUALALA.get(), SoundSource.BLOCKS, 1.0F, 1.0F);
// Annule l'événement pour empêcher d'autres interactions
event.setCancellationResult(InteractionResult.SUCCESS);
event.setCanceled(true);
}
}
}
}
}
voila le lien de mon github mis a jour : https://github.com/NEKOgrile/mod-copper-faster/tree/main
merci encors a vous