提供: Minecraft Modding Wiki
この記事は執筆中です。加筆してくださる人を募集しています。 |
この記事は"Minecraft Forge Universal 10.13.0.x~"及び"ComputerCraft 1.64~"を前提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 SamplePeripheralBlock(); GameRegistry.registerBlock(blockSamplePeripheral, "blockSamplePeripheral"); GameRegistry.registerTileEntity(SamplePeripheralTile.class, "tileSamplePeripheral"); ComputerCraftAPI.registerPeripheralProvider(new PeripheralProvider()); } }
- SamplePeripheralBlock.java
package mods.blocksample; 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 SamplePeripheralBlock extends BlockContainer { protected SamplePeripheralBlock() { super(Material.rock); setBlockName("blockSamplePeripheral"); setCreativeTab(CreativeTabs.tabBlock); } @Override public TileEntity createNewTileEntity(World world, int a) { return new SamplePeripheralTile(); } }
- SamplePeripheralTile.java
package mods.blocksample; import net.minecraft.tileentity.TileEntity; 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 SamplePeripheralTile extends TileEntity implements IPeripheral { @Override public String getType() { return "sample"; } @Override public String[] getMethodNames() { return new String[] { "fn1", "fn2", "fn3", "fn4" }; } @Override public Object[] callMethod(IComputerAccess computer, ILuaContext context, int method, Object[] arguments) throws LuaException, 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; } @Override public void attach(IComputerAccess computer) { } @Override public void detach(IComputerAccess computer) { } @Override public boolean equals(IPeripheral other) { return (other != null) && (other == this); } }
- 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 SamplePeripheralTile) { return new SamplePeripheralTile(); } return null; } }
解説
書きかけ