提供: Minecraft Modding Wiki
移動先: 案内検索

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
1行目: 1行目:
[[ComputerCraft_API|ComputerCraft API]] >
+
{{Stb}}
{{前提MOD|reqmod="Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"}}
+
{{前提MOD|reqmod="Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.64~"}}
  
 
== 周辺機器の追加 ==
 
== 周辺機器の追加 ==
何もしない周辺機器ブロックを追加します。
+
ComputerやTurtleから利用できる簡単な周辺機器ブロックを追加する。
 
 
*IPeripheralの実装
 
*IPeripheralProviderの実装
 
*PeripheralProviderの登録
 
 
 
このサンプルでは周辺機器ブロックのレシピを登録していないので、適当なレシピを追加するか、クリエイティブ・インベントリから取り出してください。
 
  
 
=== ソースコード ===
 
=== ソースコード ===
 
*SamplePeripheralCore.java
 
*SamplePeripheralCore.java
 
<source lang = "java">
 
<source lang = "java">
package mods.sample.peripheral;
+
package mods.blocksample;
  
 
import net.minecraft.block.Block;
 
import net.minecraft.block.Block;
import net.minecraft.creativetab.CreativeTabs;
 
 
import cpw.mods.fml.common.Mod;
 
import cpw.mods.fml.common.Mod;
 
import cpw.mods.fml.common.Mod.EventHandler;
 
import cpw.mods.fml.common.Mod.EventHandler;
 
import cpw.mods.fml.common.event.FMLInitializationEvent;
 
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
 
 
import cpw.mods.fml.common.registry.GameRegistry;
 
import cpw.mods.fml.common.registry.GameRegistry;
 
import dan200.computercraft.api.ComputerCraftAPI;
 
import dan200.computercraft.api.ComputerCraftAPI;
  
@Mod(modid=SamplePeripheralCore.MOD_ID,
+
@Mod(modid="SamplePeripheralMod", name="SamplePeripheralMod", version="1.0")
name=SamplePeripheralCore.MOD_NAME,
+
public class SamplePeripheralCore
version=SamplePeripheralCore.MOD_VERSION,
+
{
dependencies = SamplePeripheralCore.MOD_DEPENDENCIES)
 
public class SamplePeripheralCore {
 
 
 
public static final String MOD_ID = "sampleperipheralmod";
 
public static final String MOD_NAME = "Sample Peripheral Mod";
 
public static final String MOD_VERSION = "1.0";
 
public static final String MOD_DEPENDENCIES = "after:ComputerCraft";
 
  
 
public static Block blockSamplePeripheral;
 
public static Block blockSamplePeripheral;
  
 
@EventHandler
 
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
+
public void init(FMLInitializationEvent event)
blockSamplePeripheral = new BlockSamplePeripheral()
+
{
GameRegistry.registerBlock(blockSamplePeripheral, "sample_peripheral");
+
blockSamplePeripheral = new SamplePeripheralBlock();
}
+
GameRegistry.registerBlock(blockSamplePeripheral, "blockSamplePeripheral");
 
+
GameRegistry.registerTileEntity(SamplePeripheralTile.class, "tileSamplePeripheral");
@EventHandler
 
public void init(FMLInitializationEvent event) {
 
GameRegistry.registerTileEntity(TileSamplePeripheral.class, "tile_sample_peripheral");
 
 
ComputerCraftAPI.registerPeripheralProvider(new PeripheralProvider());
 
ComputerCraftAPI.registerPeripheralProvider(new PeripheralProvider());
 
}
 
}
 
 
}
 
}
 
</source>
 
</source>
  
*BlockSamplePeripheral.java
+
*SamplePeripheralBlock.java
 
<source lang = "java">
 
<source lang = "java">
package mods.sample.peripheral;
+
package mods.blocksample;
  
 
import net.minecraft.block.BlockContainer;
 
import net.minecraft.block.BlockContainer;
 
import net.minecraft.block.material.Material;
 
import net.minecraft.block.material.Material;
 +
import net.minecraft.creativetab.CreativeTabs;
 
import net.minecraft.tileentity.TileEntity;
 
import net.minecraft.tileentity.TileEntity;
 
import net.minecraft.world.World;
 
import net.minecraft.world.World;
  
public class BlockSamplePeripheral extends BlockContainer {
+
public class SamplePeripheralBlock extends BlockContainer {
 
 
public BlockSamplePeripheral() {
 
super(Material.ground);
 
  
setBlockName("sample_peripheral");
+
protected SamplePeripheralBlock() {
 +
super(Material.rock);
 +
setBlockName("blockSamplePeripheral");
 
setCreativeTab(CreativeTabs.tabBlock);
 
setCreativeTab(CreativeTabs.tabBlock);
 
}
 
}
73行目: 54行目:
 
@Override
 
@Override
 
public TileEntity createNewTileEntity(World world, int a) {
 
public TileEntity createNewTileEntity(World world, int a) {
return new TileSamplePeripheral();
+
return new SamplePeripheralTile();
 
}
 
}
  
 
}
 
}
 
 
</source>
 
</source>
  
*TileSamplePeripheral.java
+
*SamplePeripheralTile.java
 
<source lang = "java">
 
<source lang = "java">
package mods.sample.peripheral;
+
package mods.blocksample;
  
 
import net.minecraft.tileentity.TileEntity;
 
import net.minecraft.tileentity.TileEntity;
90行目: 70行目:
 
import dan200.computercraft.api.peripheral.IPeripheral;
 
import dan200.computercraft.api.peripheral.IPeripheral;
  
public class TileSamplePeripheral extends TileEntity implements IPeripheral {
+
public class SamplePeripheralTile extends TileEntity implements IPeripheral
 +
{
  
 
@Override
 
@Override
public String getType() {
+
public String getType()
 +
{
 
return "sample";
 
return "sample";
 
}
 
}
  
 
@Override
 
@Override
public String[] getMethodNames() {
+
public String[] getMethodNames()
return new String[] {};
+
{
 +
return new String[] { "fn1", "fn2", "fn3", "fn4" };
 
}
 
}
  
105行目: 88行目:
 
public Object[] callMethod(IComputerAccess computer, ILuaContext context,
 
public Object[] callMethod(IComputerAccess computer, ILuaContext context,
 
int method, Object[] arguments) throws LuaException,
 
int method, Object[] arguments) throws LuaException,
InterruptedException {
+
InterruptedException
 +
{
 +
switch (method) {
 +
case 0:
 +
if( arguments.length < 1 || !(arguments[0] instanceof Boolean) ) {
 +
throw new LuaException("Expected boolean");
 +
}
 +
return new Object[] {"fn1", arguments[0]};
 +
 
 +
case 1:
 +
if( arguments.length < 1 || !(arguments[0] instanceof Double) ) {
 +
throw new LuaException("Expected number");
 +
}
 +
return new Object[] {"fn2", arguments[0]};
 +
 
 +
case 2:
 +
if( arguments.length < 1 || !(arguments[0] instanceof String) ) {
 +
throw new LuaException("Expected string");
 +
}
 +
return new Object[] {"fn3", arguments[0]};
 +
 
 +
case 3:
 +
if( arguments.length < 1 || arguments[0] == null) {
 +
throw new LuaException("Expected argument");
 +
}
 +
return new Object[] {"fn4", arguments[0], arguments[0].getClass().getName()};
 +
}
 +
 
 
return null;
 
return null;
 
}
 
}
  
 
@Override
 
@Override
public void attach(IComputerAccess computer) {
+
public void attach(IComputerAccess computer)
 +
{
  
 
}
 
}
  
 
@Override
 
@Override
public void detach(IComputerAccess computer) {
+
public void detach(IComputerAccess computer)
 +
{
  
 
}
 
}
  
 
@Override
 
@Override
public boolean equals(IPeripheral other) {
+
public boolean equals(IPeripheral other)
if ((other != null) && (other instanceof TileSamplePeripheral)) {
+
{
return other == this;
+
return (other != null) && (other.getClass() == this.getClass());
}
 
 
 
return false;
 
 
}
 
}
  
133行目: 142行目:
 
*PeripheralProvider.java
 
*PeripheralProvider.java
 
<source lang = "java">
 
<source lang = "java">
package mods.sample.peripheral;
+
package mods.blocksample;
  
 
import net.minecraft.tileentity.TileEntity;
 
import net.minecraft.tileentity.TileEntity;
140行目: 149行目:
 
import dan200.computercraft.api.peripheral.IPeripheralProvider;
 
import dan200.computercraft.api.peripheral.IPeripheralProvider;
  
public class PeripheralProvider implements IPeripheralProvider {
+
public class PeripheralProvider implements IPeripheralProvider
 +
{
  
 
@Override
 
@Override
public IPeripheral getPeripheral(World world, int x, int y, int z, int side) {
+
public IPeripheral getPeripheral(World world, int x, int y, int z, int side)
 +
{
 
TileEntity tile = world.getTileEntity(x, y, z);
 
TileEntity tile = world.getTileEntity(x, y, z);
if (tile != null && tile instanceof TileSamplePeripheral) {
+
 
return (IPeripheral)tile;
+
if (tile != null && tile instanceof SamplePeripheralTile) {
 +
return new SamplePeripheralTile();
 
}
 
}
  
156行目: 168行目:
  
 
=== 解説 ===
 
=== 解説 ===
 +
書きかけ
 
==== SamplePeripheralCore.java ====
 
==== SamplePeripheralCore.java ====
Modのコアとなるクラス
+
==== SamplePeripheralBlock.java ====
 
+
==== SamplePeripheralTile.java ====
*dependencies
 
<source lang = "java">
 
@Mod(
 
dependencies = SamplePeripheralCore.MOD_DEPENDENCIES)
 
public class SamplePeripheralCore {
 
 
public static final String MOD_DEPENDENCIES = "after:ComputerCraft";
 
</source>
 
@Modのdependenciesで、このmodがComputerCraftの後に読み込まれるように設定しています。
 
 
 
*周辺機器のブロックとTileEntityの登録
 
<source lang = "java">
 
blockSamplePeripheral = new BlockSamplePeripheral()
 
GameRegistry.registerBlock(blockSamplePeripheral, "sample_peripheral");
 
</source>
 
<source lang = "java">
 
GameRegistry.registerTileEntity(TileSamplePeripheral.class, "tile_sample_peripheral");
 
</source>
 
 
 
*PeripheralProviderの登録
 
<source lang = "java">
 
ComputerCraftAPI.registerPeripheralProvider(new PeripheralProvider());
 
</source>
 
接続したComputerへ周辺機器のIPeripheral実装クラスを提供するためのIPeripheralProvider実装クラス(後述)を、ComputerCraftAPI.registerPeripheralProvider()でComputerCraftに登録します。
 
これは、'''自作周辺機器をComputerから使えるようにするために必須'''です。
 
 
 
==== BlockSamplePeripheral.java ====
 
周辺機器のブロック
 
 
 
*BlockContainerの継承
 
<source lang = "java">
 
public class BlockSamplePeripheral extends BlockContainer {
 
 
 
@Override
 
public TileEntity createNewTileEntity(World world, int a) {
 
return new TileSamplePeripheral();
 
}
 
</source>
 
周辺機器はTileEntityを持つブロックとして実装するので、BlockContainerを継承し、createNewTileEntity()で周辺機器のTileEntityのインスタンスを生成して返しています。
 
 
 
==== TileSamplePeripheral.java ====
 
周辺機器のTileEntity
 
 
 
*IPeripheralの実装
 
<source lang = "java">
 
public class TileSamplePeripheral extends TileEntity implements IPeripheral {
 
</source>
 
今回は周辺機器のTileEntityクラスでIPeripheralも実装しています。
 
 
 
ちなみに、周辺機器は後述のPeripheralProviderでComputerへ提供されるため、IPeripheralはTileEntity以外のクラスで実装する事もできます。
 
 
 
*getType()
 
<source lang = "java">
 
@Override
 
public String getType() {
 
return "sample";
 
}
 
</source>
 
周辺機器の種類を表す文字列を返します。ゲーム内のLuaプログラムではperipheral.getType()で取得したこの文字列によって周辺機器の種類を判別します。
 
 
 
*getMethodNames()
 
<source lang = "java">
 
@Override
 
public String[] getMethodNames() {
 
return new String[] {};
 
}
 
</source>
 
Computerから呼び出せる周辺機器のメソッド名を表す文字列の配列を返します。ゲーム内のLuaプログラムではperipheral.getMethods()の戻り値になります。<br>
 
今回は実装しないので空の配列を返しています。
 
 
 
*callMethod()
 
<source lang = "java">
 
@Override
 
public Object[] callMethod(IComputerAccess computer, ILuaContext context,
 
int method, Object[] arguments) throws LuaException,
 
InterruptedException {
 
return null;
 
}
 
</source>
 
Computerからperipheral.call()で周辺機器のメソッドを呼び出したときの処理を実装します。<br>
 
今回はメソッドを実装しないので何もしません。
 
 
 
*attach()とdetach()
 
<source lang = "java">
 
@Override
 
public void attach(IComputerAccess computer) {
 
 
 
}
 
 
 
@Override
 
public void detach(IComputerAccess computer) {
 
 
 
}
 
</source>
 
周辺機器ブロックがComputerに接続されたとき(attach)と、取り外されたとき(detach)に呼び出されます。<br>
 
今回は何もしません。
 
 
 
*equals()
 
<source lang = "java">
 
@Override
 
public boolean equals(IPeripheral other) {
 
if ((other != null) && (other instanceof TileSamplePeripheral)) {
 
return other == this;
 
}
 
 
 
return false;
 
}
 
</source>
 
Computerに周辺機器が着脱されたときに現在取り付けられている周辺機器(this)が、それまで取り付けられていた周辺機器(other)と同一かどうかを調べるために呼び出されます。<br>
 
周辺機器のTileEntityインスタンスが同一かどうかを比較して返しています。
 
 
 
 
==== PeripheralProvider.java ====
 
==== PeripheralProvider.java ====
Computerへ周辺機器(IPeripheralの実装クラス)を提供するためのクラス
 
 
*IPeripheralProviderの実装
 
<source lang = "java">
 
public class PeripheralProvider implements IPeripheralProvider {
 
</source>
 
IPeripheralProviderを実装します。<br>
 
前述の通り、このクラスのインスタンスをComputerCraftAPI.registerPeripheralProvider()でComputerCraftへ登録します。
 
 
*getPeripheral()
 
<source lang = "java">
 
@Override
 
public IPeripheral getPeripheral(World world, int x, int y, int z, int side) {
 
TileEntity tile = world.getTileEntity(x, y, z);
 
if (tile != null && tile instanceof TileSamplePeripheral) {
 
return (IPeripheral)tile;
 
}
 
 
return null;
 
}
 
</source>
 
周辺機器がComputerへ接続されたときに呼び出されます。x, y, zは周辺機器の座標、sideは周辺機器から見た接続方向です。<br>
 
今回は周辺機器のTileEntityでIPeripheralを実装したため、座標から周辺機器のTileEntityを取得し、IPeripheralのインスタンスとして返しています。
 

Minecraft Modding Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMinecraft Modding Wiki:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート: