Package mods.railcraft.common.util.sounds

Source Code of mods.railcraft.common.util.sounds.SoundHelper

/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.util.sounds;

import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
import mods.railcraft.common.core.RailcraftConfig;
import net.minecraft.block.Block;
import net.minecraft.block.Block.SoundType;

/**
*
* @author CovertJaguar <http://www.railcraft.info>
*/
public class SoundHelper {

    public static final String SOUND_LOCOMOTIVE_STEAM_WHISTLE = "railcraft:locomotive.steam.whistle";
    public static final String SOUND_LOCOMOTIVE_ELECTRIC_WHISTLE = "railcraft:locomotive.electric.whistle";
    public static final String SOUND_STEAM_BURST = "railcraft:machine.steamburst";
    public static final String SOUND_STEAM_HISS = "railcraft:machine.steamhiss";
    private static final Map<String, Integer> soundLimiterClient = new HashMap<String, Integer>();
    private static final Map<String, Integer> soundLimiterServer = new HashMap<String, Integer>();
   
    private static Map<String, Integer> getSoundLimiter(){
        if(FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT)
            return soundLimiterClient;
        return soundLimiterServer;
    }

    private static boolean canPlaySound(String name) {
        if (!RailcraftConfig.playSounds())
            return false;
        Integer limit = getSoundLimiter().get(name);
        return limit == null || limit <= 10;
    }

    private static void incrementLimiter(String name) {
        Integer limit = getSoundLimiter().get(name);
        if (limit == null)
            limit = 0;
        limit++;
        getSoundLimiter().put(name, limit);
    }

    public static void decrementLimiters() {
        for (Map.Entry<String, Integer> entry : getSoundLimiter().entrySet()) {
            Integer limit = entry.getValue();
            if (limit > 0) {
                limit--;
                entry.setValue(limit);
            }
        }
    }

    public static void playSound(World world, int x, int y, int z, String name, float volume, float pitch) {
        if (canPlaySound(name)) {
            incrementLimiter(name);
            world.playSoundEffect(x, y, z, name, volume, pitch);
        }
    }

    public static void playSoundClient(World world, int x, int y, int z, String name, float volume, float pitch) {
        if (canPlaySound(name)) {
            incrementLimiter(name);
            world.playSound(x, y, z, name, volume, pitch, false);
        }
    }

    public static void playSoundAtEntity(Entity entity, String name, float volume, float pitch) {
        if (canPlaySound(name)) {
            incrementLimiter(name);
            entity.worldObj.playSoundAtEntity(entity, name, volume, pitch);
        }
    }

    public static void playBlockSound(World world, int x, int y, int z, String soundName, float volume, float pitch, Block block, int meta) {
        if (world != null && soundName != null) {
            if (soundName.contains("railcraft")) {
                SoundType sound = SoundRegistry.getSound(block, meta);
                if (sound != null) {
                    String newName = soundName.contains("dig") ? sound.getBreakSound() : soundName.contains("step") ? sound.getStepResourcePath() : sound.func_150496_b();
                    world.playSoundEffect(x, y, z, newName, volume, pitch * sound.getPitch());
                }
            }
            world.playSoundEffect(x, y, z, soundName, volume, pitch);
        }
    }

    public static void playFX(World world, EntityPlayer player, int id, int x, int y, int z, int data) {
        if (RailcraftConfig.playSounds())
            world.playAuxSFXAtEntity(player, id, x, y, z, data);
    }

}
TOP

Related Classes of mods.railcraft.common.util.sounds.SoundHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.