今回は、MOD をデバックしやすくする為、楽にログを出力できるようにするよ!

SPONSERD LINK

前回は、クリエイティブモードのインベントリに独自のタブを追加した。

プロジェクト構成

ユーティリティなクラスをまとめるパッケージ com.watermelonheadman.gopichandmod.util とログを出力するクラス Logger.java を追加する。
プロジェクトの構成は、下記のようになる。

java
	com.watermelonheadman.gopichandmod
		GopichandMod.java
		Recipes.java
	com.watermelonheadman.gopichandmod.audio
		InstrumentManager.java
		InstrumentSound.java
	com.watermelonheadman.gopichandmod.items
		GopichandItems.java
		ItemGopichand.java
		ItemGopichandBody.java
		ItemGopichandHead.java
		ItemIronString.java
	com.watermelonheadman.gopichandmod.network
		MessageInstruments.java
		PacketHandler.java
	com.watermelonheadman.gopichandmod.util
		Logger.java
resource
	assets.gopichandmod
		sounds.json
	assets.gopichandmod.lang
		en_US.lang
		ja_JP.lang
	assets.gopichandmod.sounds.instruments
		gopichand_pick.ogg
		gopichand_up.ogg
		gopichand_tremolo.ogg
	assets.gopichandmod.textures.items
		gopichand.png
		gopichandbody.png
		gopichandhead.png
		ironstring.png
	mcmod.info
build.bat
build.gradle

ハイライトされている部分が今回、追加するパッケージとクラスです。

ログを出力するクラス

適当にクラスorg.apache.logging.log4j.Loggerをラッパーしたクラスを作る。

package com.watermelonheadman.gopichandmod.util;

import cpw.mods.fml.common.event.FMLPreInitializationEvent;

public class Logger
{
	private static org.apache.logging.log4j.Logger logger;

	public static void registry( FMLPreInitializationEvent e )
	{
		logger = e.getModLog();
	}

	public static void log( String s )
	{
		logger.log( org.apache.logging.log4j.Level.OFF, s );
	}

	public static void log( org.apache.logging.log4j.Level lv, String s )
	{
		logger.log( lv, s );
	}

	public static void log( org.apache.logging.log4j.Level lv, String s, Object... params )
	{
		logger.log( lv, s, params );
	}

	public static void info( String s )
	{
		logger.info( s );
	}

	public static void info( String s, Object... params )
	{
		logger.info( s, params );
	}

	public static void warn( String s )
	{
		logger.warn( s );
	}

	public static void warn( String s, Object... params )
	{
		logger.warn( s, params );
	}

	public static void trace( String s )
	{
		logger.trace( s );
	}

	public static void trace( String s, Object... params )
	{
		logger.trace( s, params );
	}

	public static void fatal( String s )
	{
		logger.fatal( s );
	}

	public static void fatal( String s, Object... params )
	{
		logger.fatal( s, params );
	}

	public static void debug( String s )
	{
		logger.debug( s );
	}

	public static void debug( String s, Object... params )
	{
		logger.debug( s, params );
	}

	public static void error( String s )
	{
		logger.error( s );
	}

	public static void error( String s, Object... params )
	{
		logger.error( s, params );
	}
}

MOD の 読み込み時に関数 registry を実行する。

package com.watermelonheadman.gopichandmod;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;

import com.watermelonheadman.gopichandmod.audio.InstrumentManager;
import com.watermelonheadman.gopichandmod.items.GopichandItems;
import com.watermelonheadman.gopichandmod.network.PacketHandler;
import com.watermelonheadman.gopichandmod.util.Logger;

@Mod( modid = GopichandMod.MODID, version = GopichandMod.VERSION )
public class GopichandMod
{
	@Mod.Instance( "GopichandMod" )
	public static final String MODID = "gopichandmod";
	public static final String VERSION = "1.0.0";

	@EventHandler
	public void preInit( FMLPreInitializationEvent e )
	{
		Logger.registry( e );
		GopichandItems.registry( this );
		InstrumentManager.registry();

		PacketHandler.init();
	}

	@EventHandler
	public void Init( FMLInitializationEvent e )
	{
		Recipes.registry();
	}

	public static CreativeTabs GopichandModTab
		= new CreativeTabs( "gopichandmodtab" )
	{
		public Item getTabIconItem()
		{
			return GopichandItems.Gopichand;
		}
	};
}

使い方

ログを出力したいところに Logger.log( "log!" ); を入力する。

テスト

ログがどのように出力されるかテストしてみる。

試しに MOD が読み込まれる際にログを出力してみる。

package com.watermelonheadman.gopichandmod;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.common.MinecraftForge;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;

import com.watermelonheadman.gopichandmod.audio.InstrumentManager;
import com.watermelonheadman.gopichandmod.items.GopichandItems;
import com.watermelonheadman.gopichandmod.network.PacketHandler;
import com.watermelonheadman.gopichandmod.util.Logger;

@Mod( modid = GopichandMod.MODID, version = GopichandMod.VERSION )
public class GopichandMod
{
	@Mod.Instance( "GopichandMod" )
	public static final String MODID = "gopichandmod";
	public static final String VERSION = "1.0.0";

	@EventHandler
	public void preInit( FMLPreInitializationEvent e )
	{
		Logger.registry( e );
		GopichandItems.registry( this );
		InstrumentManager.registry();

		PacketHandler.init();

		Logger.log( "log!" );
		Logger.warn( "warn!" );
		Logger.info( "info!" );
		Logger.trace( "trace!" );
		Logger.debug( "debug!" );
		Logger.error( "error!" );
		Logger.fatal( "fatal!" );
	}

	@EventHandler
	public void Init( FMLInitializationEvent e )
	{
		Recipes.registry();
	}

	public static CreativeTabs GopichandModTab
		= new CreativeTabs( "gopichandmodtab" )
	{
		public Item getTabIconItem()
		{
			return GopichandItems.Gopichand;
		}
	};
}

クライアントを起動すると Eclipse のコンソールにログが出力されているのが確認できる。

Eclipse のコンソール

出典:Eclipse のコンソール

お疲れ様でした!

次回予告

次回は、ブロックを追加するよ!