提供: Minecraft Modding Wiki
この記事は執筆中です。加筆してくださる人を募集しています。 |
この記事は"Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.65~"を前提MODとしています。 |
目次
周辺機器の追加
ComputerやTurtleから呼出し可能なメソッドを提供する簡単な周辺機器ブロックを追加する。
ソースコード
- SamplePeripheralCore.java
package mods.blocksample; import net.minecraft.block.Block; 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.registry.GameRegistry; import dan200.computercraft.api.ComputerCraftAPI; @Mod(modid="SamplePeripheralMod", name="SamplePeripheralMod", version="1.0") public class SamplePeripheralCore { public static Block blockSamplePeripheral; @EventHandler public void init(FMLInitializationEvent event) { blockSamplePeripheral = new BlockSamplePeripheral(); GameRegistry.registerBlock(blockSamplePeripheral, "blockSamplePeripheral"); GameRegistry.registerTileEntity(TileSamplePeripheral.class, "tileSamplePeripheral"); ComputerCraftAPI.registerPeripheralProvider(new PeripheralProvider()); } }
- BlockSamplePeripheral.java
package mods.blocksample; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class BlockSamplePeripheral extends BlockContainer { protected BlockSamplePeripheral() { super(Material.rock); setBlockName("blockSamplePeripheral"); setCreativeTab(CreativeTabs.tabBlock); } @Override public TileEntity createNewTileEntity(World world, int a) { return new TileSamplePeripheral(); } }
- TileSamplePeripheral.java
package mods.blocksample; import java.util.HashSet; import java.util.Set; import net.minecraft.tileentity.TileEntity; import dan200.computercraft.api.peripheral.IComputerAccess; public class TileSamplePeripheral extends TileEntity { }
- SamplePeripheral.java
package mods.blocksample; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; public class SamplePeripheral implements IPeripheral { private final TileSamplePeripheral m_tilePeripheral; public SamplePeripheral(TileSamplePeripheral tile) { this.m_tilePeripheral = tile; } @Override public String getType() { return "sample"; } @Override public String[] getMethodNames() { return new String[] { "fn1", "fn2" }; } @Override public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, InterruptedException { switch (method) { case 0: return new Object[] {"fn1"}; case 1: if ( arguments.length < 1 ) { throw new LuaException("Expected argument"); } if ( arguments[0] == null ) { throw new LuaException("Illegal argument"); } return new Object[] {"fn2", arguments[0], arguments[0].getClass().getName()}; } return null; } @Override public void attach(IComputerAccess computer) { } @Override public void detach(IComputerAccess computer) { } @Override public boolean equals(IPeripheral other) { if ((other != null) && ( other instanceof SamplePeripheral)) { return ((SamplePeripheral)other).m_tilePeripheral == this.m_tilePeripheral; } return false; } }
- PeripheralProvider.java
package mods.blocksample; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import dan200.computercraft.api.peripheral.IPeripheral; import dan200.computercraft.api.peripheral.IPeripheralProvider; public class PeripheralProvider implements IPeripheralProvider { @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 new SamplePeripheral((TileSamplePeripheral)tile); } return null; } }
解説
書きかけ