« Minecraftとビデオカード | トップページ | Minecraft MOD開発 20 »

2014年4月26日 (土)

Minecraft MOD開発 19

BuildCraftのMJとThermal ExpansionのRFの両方に対応した無限発電機の開発に成功した(EUに対応できるかどうかは未テスト)。Universal Electricityのおかげで簡単だった。

はまったのは、このあたり。
・エネルギーのやりとりはTileEntityに実装する必要がある
・@UniversalClassアノテーションを付ける必要がある
・updateEntityで隣接するエンティティにreceiveEnergyしてやる必要がある

onExtractEnergyはいつ呼ばれるのか不明。

NishinaCore.java

package nishina;
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
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 cpw.mods.fml.common.registry.GameRegistry;
 
@Mod(modid = "InfinityBattery", name = "InfinityBattery", version = "1.0")
public class NishinaCore
{
 public static Block blockBattery;
 public static int blockID = 3500;
 
 @EventHandler
 public void preInit(FMLPreInitializationEvent event)
 {
  blockBattery = new BlockBattery( blockID, Material.rock);
  GameRegistry.registerBlock( blockBattery, "BatteryBlock");
 }
 
 @EventHandler
 public void init(FMLInitializationEvent event)
 {
  GameRegistry.registerTileEntity( TileEntityBattery.class, "TileEntityBattery");
 }
}

BlockBattery.java

package nishina;
 
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
 
public class BlockBattery extends BlockContainer
{
 public BlockBattery(int id, Material material)
 {
  super( id, material);
  this.setCreativeTab( CreativeTabs.tabBlock);
  this.setUnlocalizedName( "Battery Block");
  this.setTextureName( "nishina:pink_block");
 }
 
 @Override
 public TileEntity createNewTileEntity(World world)
 {
  return new TileEntityBattery();
 }
}

TileEntityBattery.java

package nishina;
 
import java.util.EnumSet;
 
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.api.CompatibilityModule;
import universalelectricity.api.UniversalClass;
import universalelectricity.api.energy.IEnergyContainer;
import universalelectricity.api.energy.IEnergyInterface;
import universalelectricity.api.vector.Vector3;
 
@UniversalClass
public class TileEntityBattery extends TileEntity implements IEnergyContainer, IEnergyInterface
{
 
 public TileEntityBattery()
 {
  super();
 }
 
 @Override
 public boolean canConnect(ForgeDirection from, Object source)
 {
  if (from == null || from.equals( ForgeDirection.UNKNOWN))
  {
   return false;
  }
  
  return true;
 }
 
 @Override
 public long onReceiveEnergy(ForgeDirection from, long receive, boolean doReceive)
 {
  return receive;
 }
 
 @Override
 public long onExtractEnergy(ForgeDirection from, long extract, boolean doExtract)
 {
  return extract;
 }
 
 @Override
 public void updateEntity()
 {
  for (ForgeDirection direction : EnumSet.allOf( ForgeDirection.class))
  {
   TileEntity tileEntity = new Vector3( this).translate( direction).getTileEntity( this.worldObj);
   CompatibilityModule.receiveEnergy( tileEntity, direction.getOpposite(), Integer.MAX_VALUE, true);
  }
  super.updateEntity();
 }
 
 @Override
 public void setEnergy(ForgeDirection from, long energy)
 {
 }
 
 @Override
 public long getEnergy(ForgeDirection from)
 {
  return Integer.MAX_VALUE;
 }
 
 @Override
 public long getEnergyCapacity(ForgeDirection from)
 {
  return Integer.MAX_VALUE;
 }
 
}

« Minecraftとビデオカード | トップページ | Minecraft MOD開発 20 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1499066/55942667

この記事へのトラックバック一覧です: Minecraft MOD開発 19:

« Minecraftとビデオカード | トップページ | Minecraft MOD開発 20 »