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

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

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 編集中の文章
10行目: 10行目:
 
package custom.tool.item;
 
package custom.tool.item;
  
import net.minecraft.block.Block;
 
 
import net.minecraft.item.EnumToolMaterial;
 
import net.minecraft.item.EnumToolMaterial;
import net.minecraft.item.Item;
 
import net.minecraft.item.ItemStack;
 
import net.minecraft.item.ItemTool;
 
import net.minecraftforge.client.IItemRenderer;
 
import net.minecraftforge.client.MinecraftForgeClient;
 
 
import cpw.mods.fml.common.Mod;
 
import cpw.mods.fml.common.Mod;
 +
import cpw.mods.fml.common.network.NetworkMod;
 
import cpw.mods.fml.common.Mod.EventHandler;
 
import cpw.mods.fml.common.Mod.EventHandler;
 
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
 
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
 
 
import cpw.mods.fml.common.registry.GameRegistry;
 
import cpw.mods.fml.common.registry.GameRegistry;
 
import cpw.mods.fml.common.registry.LanguageRegistry;
 
import cpw.mods.fml.common.registry.LanguageRegistry;
  
 
@Mod(
 
@Mod(
     modid = CustomModelTools.modid,
+
     modid = "CustomModelTools",
     name = CustomModelTools.name,
+
     name = "Custom Model Tools",
     version = CustomModelTools.version
+
     version = "1"
 
)
 
)
 
@NetworkMod(
 
@NetworkMod(
35行目: 29行目:
 
public class CustomModelTools
 
public class CustomModelTools
 
{
 
{
    public static final String modid = "CustomModelTools";
 
    public static final String name = "Custom Model Tools Modification";
 
    public static final String version = "1";
 
   
 
 
     public static final boolean clientSideRequiredBoolean = true;
 
     public static final boolean clientSideRequiredBoolean = true;
     public static final boolean serverSideRequiredBoolean = false;
+
     public static final boolean serverSudeRequiredBoolean = false;
   
 
    public static boolean Model_ON_OFF_Boolean = true;
 
    public static String ModelTexture;
 
    public static String texture = "model";
 
    public static int textureWidth = 64;
 
    public static int textureHeight = 32;
 
 
      
 
      
 
     public static EnumToolMaterial toolMaterial;
 
     public static EnumToolMaterial toolMaterial;
 
      
 
      
 
     public static ItemTool mainItem;
 
     public static ItemTool mainItem;
    public static int itemID = 3001; //default 3001 = 3257
 
    public static int damageFloat = (int) 1.0;
 
    public static String domain = "CustomModelItem";
 
    public static String item_name = "CustomModelItem";
 
 
      
 
      
     @EventHandler
+
     @EventHabdler
 
     public void mainLoading(FMLPreInitializationEvent event)
 
     public void mainLoading(FMLPreInitializationEvent event)
 
     {
 
     {
         mainItem = (ItemTool) new ItemCustomModelTools(itemID, toolMaterial.IRON).setData(domain, item_name, damageFloat);
+
         mainItem = new ItemCustomModelTools(3001, toolMaterial.rock).setData("CustomModelItem", "CustomModelItem");
         registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム", new ItemCustomModelToolsRenderer(), true, texture, textureWidth, textureHeight);
+
         registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム");
        GameRegistry.addRecipe(new ItemStack(mainItem, 1, 0), new Object[] {" S ", "DCF", " X ", 'S', Item.pickaxeIron, 'D', Item.shovelIron, 'F', Item.axeIron, 'X', Item.stick, 'C', Block.stone});
 
 
     }
 
     }
     public void registerItem(Item items, String name, String en_US, String ja_JP, IItemRenderer itemRenderer, boolean modeling, String texture, int width, int height)
+
     public void registerItem(Item items, String name, String en_US, String ja_JP)
 
     {
 
     {
         GameRegistry.registerItem(items, name);
+
         GameReigstry.registerItem(items, name);
         LanguageRegistry.instance().addNameForObject(items, "en_US", en_US);
+
         LanguageRegistry.addNameForObject(items, "en_US", en_US);
         LanguageRegistry.instance().addNameForObject(items, "ja_JP", ja_JP);
+
         LanguageRegistry.addNameForObject(items, "ja_JP", ja_JP);
        MinecraftForgeClient.registerItemRenderer(items.itemID, itemRenderer);
 
        Model_ON_OFF_Boolean = modeling;
 
        ModelTexture = texture;
 
        ModelCustomModelTools modelings = new ModelCustomModelTools();
 
        modelings.setTextureSize(width, height);
 
    }
 
    public static void configInformation(int ItemID, String domain, String name, int damage, boolean modeling, int width, int height)
 
    {
 
        itemID = ItemID;
 
        CustomModelTools.domain = domain;
 
        item_name = name;
 
        damageFloat = damage;
 
        Model_ON_OFF_Boolean = modeling;
 
        ModelCustomModelTools modelings = new ModelCustomModelTools();
 
        modelings.setTextureSize(width, height);
 
 
     }
 
     }
 
}
 
}
92行目: 56行目:
 
<source lang = java>
 
<source lang = java>
 
package custom.tool.item;
 
package custom.tool.item;
import net.minecraft.item.Item;
+
 
 
import net.minecraft.item.ItemTool;
 
import net.minecraft.item.ItemTool;
import net.minecraft.item.ItemStack;
 
 
import net.minecraft.item.EnumToolMaterial;
 
import net.minecraft.item.EnumToolMaterial;
 
import net.minecraft.block.Block;
 
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
 
  
 
public class ItemCustomModelTools extends ItemTool
 
public class ItemCustomModelTools extends ItemTool
 
{
 
{
    //壊せるブロックのリスト
 
 
     private static final Block[] setBleakingList = new Block[] {// ItemSpade.java
 
     private static final Block[] setBleakingList = new Block[] {// ItemSpade.java
 
                                                                 Block.grass,
 
                                                                 Block.grass,
112行目: 73行目:
 
                                                                 Block.tilledField,
 
                                                                 Block.tilledField,
 
                                                                 Block.slowSand,
 
                                                                 Block.slowSand,
                                                                 Block.mycelium,
+
                                                                 Block.mycelium
 
                                                                 // ItemPickaxe.java
 
                                                                 // ItemPickaxe.java
 
                                                                 Block.cobblestone,
 
                                                                 Block.cobblestone,
134行目: 95行目:
 
                                                                 Block.railDetector,
 
                                                                 Block.railDetector,
 
                                                                 Block.railPowered,
 
                                                                 Block.railPowered,
                                                                 Block.railActivator,
+
                                                                 Block.railActivator
                                                                // ItemAxe.java
+
                                // ItemAxe.java
                                                                 Block.planks,
+
                                                                 Block.planks, Block.bookShelf,
                                                                Block.bookShelf,
 
 
                                                                 Block.wood, Block.chest,
 
                                                                 Block.wood, Block.chest,
 
                                                                 Block.stoneDoubleSlab,
 
                                                                 Block.stoneDoubleSlab,
144行目: 104行目:
 
                                                                 Block.pumpkinLantern};
 
                                                                 Block.pumpkinLantern};
 
                                                                 // 詳しい情報は、ItemSpade.java ItemPickaxe.java ItemAxe.javaを参照
 
                                                                 // 詳しい情報は、ItemSpade.java ItemPickaxe.java ItemAxe.javaを参照
     public static float damageFloat = 1.0F;
+
      
 
 
     public ItemCustomModelTools(int par1ID, EnumToolMaterial par2EnumToolMaterial)
 
     public ItemCustomModelTools(int par1ID, EnumToolMaterial par2EnumToolMaterial)
 
     {
 
     {
153行目: 112行目:
 
     public boolean canHarvestBlock(Block par1Block)
 
     public boolean canHarvestBlock(Block par1Block)
 
     {
 
     {
    return setBleakingList != null;
+
        return par1Block == Block.snow ? true : par1Block == Block.blockSnow : //雪
 +
              (par1Block == Block.obsidian ? this.toolMaterial.getHarvestLevel() == 3 : //黒曜石
 +
              (par1Block != Block.blockDiamond && par1Block != Block.oreDiamond ? //ダイヤモンド
 +
              (par1Block != Block.oreEmerald && par1Block != Block.blockEmerald ? //エメラルド
 +
              (par1Block != Block.blockGold && par1Block != Block.oreGold ? //金
 +
              (par1Block != Block.blockIron && par1Block != Block.oreIron ? //鉄
 +
              (par1Block != Block.blockLapis && par1Block != Block.oreLapis ? //ラピスラズリ
 +
              (par1Block != Block.oreRedstone && par1Block != Block.oreRedstoneGlowing ? //レッドストーン
 +
              (par1Block.blockMaterial == Material.rock ? true : //マテリアル属性 石
 +
              (par1Block.blockMaterial == Material.iron ? true : //マテリアル属性 鉄
 +
                par1Block.blockMaterial == Material.anvil)) //マテリアル属性 金床
 +
                this.toolMaterial.getHarvestLevel() >= 2) : //マテリアルレベル 2
 +
                this.toolMaterial.getHarvestLevel() >= 1) : //マテリアルレベル 1
 +
                this.toolMaterial.getHarvestLevel() >= 1) : //マテリアルレベル 1
 +
                this.toolMaterial.getHarvestLevel() >= 2) : //マテリアルレベル 2
 +
                this.toolMaterial.getHarvestLevel() >= 2) : //マテリアルレベル 2
 +
                this.toolMaterial.getHarvestLevel() >= 2)); //マテリアルレベル 2
 
     }
 
     }
 
     @Override
 
     @Override
168行目: 143行目:
 
                 super.getStrVsBlock(par1ItemStack, par2Block);
 
                 super.getStrVsBlock(par1ItemStack, par2Block);
 
     }
 
     }
     public Item setData(String domain, String path, float damage)
+
     public Item setData(String domain, String path)
 
     {
 
     {
 
         setUnlocalizedName(path);
 
         setUnlocalizedName(path);
 
         iconString = domain + ":" + path;
 
         iconString = domain + ":" + path;
        damageFloat = damage;
 
        return this;
 
 
     }
 
     }
 
}
 
}
179行目: 152行目:
 
</source>
 
</source>
  
*ItemCustomModelToolsRenderer.java
+
未完成
 
 
<source lang = java>
 
package custom.tool.item;
 
 
import net.minecraft.client.Minecraft;
 
import net.minecraft.entity.Entity;
 
import net.minecraft.item.ItemStack;
 
import net.minecraft.util.ResourceLocation;
 
import net.minecraftforge.client.IItemRenderer;
 
 
 
import org.lwjgl.opengl.GL11;
 
 
public class ItemCustomModelToolsRenderer implements IItemRenderer
 
{
 
    private ModelCustomModelTools modeling;
 
    public ItemCustomModelToolsRenderer()
 
    {
 
        modeling = new ModelCustomModelTools();
 
    }
 
    @Override
 
    public boolean handleRenderType(ItemStack item, ItemRenderType type)
 
    {
 
        switch(type)
 
        {
 
            case EQUIPPED :
 
                return CustomModelTools.Model_ON_OFF_Boolean;
 
            default:
 
                return false;
 
        }
 
    }
 
    @Override
 
    public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper)
 
    {
 
        return false;
 
    }
 
    @Override
 
    public void renderItem(ItemRenderType type, ItemStack item, Object... data)
 
    {
 
        switch(type)
 
        {
 
            case EQUIPPED :
 
            {
 
                GL11.glPushMatrix();
 
 
                float scala = 2.5F;
 
 
                GL11.glScalef(scala, scala, scala);
 
 
                GL11.glRotatef(0F, -10.0F, 0.0F, 0.0F);
 
                GL11.glRotatef(8F, 0.0F, -10.0F, 0.0F);
 
                GL11.glRotatef(125F, 0.0F, 0.0F, -10.0F);
 
 
                GL11.glTranslatef(-0.304800F, -0.500F, -0.09F);
 
 
                Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(CustomModelTools.domain, "textures/model/" + CustomModelTools.texture + ".png"));
 
 
                modeling.render((Entity) data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F);
 
 
                GL11.glPopMatrix();
 
            }
 
            default:
 
                break;
 
        }
 
    }
 
}
 
 
 
</source>
 
 
 
*ModelCustomModelTools
 
 
 
<source lang = java>
 
package custom.tool.item;
 
 
import net.minecraft.client.model.ModelBase;
 
import net.minecraft.client.model.ModelRenderer;
 
import net.minecraft.entity.Entity;
 
 
public class ModelCustomModelTools extends ModelBase
 
{
 
    public ModelRenderer Stick;
 
    public ModelRenderer EnderEye;
 
    public ModelRenderer PickaxePats1;
 
    public ModelRenderer PickaxePats2;
 
    public ModelRenderer PickaxePats3;
 
    public ModelRenderer MainCenter;
 
    public ModelRenderer AxeUp;
 
    public ModelRenderer AxeLeft;
 
    public ModelRenderer AxeRight;
 
    public ModelRenderer AxeDown;
 
    public ModelRenderer Forward;
 
 
    public int TextureSizeWidth = 64;
 
    public int TextureSizeHeight = 32;
 
    public ModelCustomModelTools()
 
    {
 
        textureWidth = TextureSizeWidth ;
 
        textureHeight = TextureSizeHeight ;
 
        Stick = new ModelRenderer(this, 0, 0);
 
        Stick.addBox(0F, 0F, 0F, 2, 14, 2);
 
        Stick.setRotationPoint(-1F, 0F, -1F);
 
        Stick.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        Stick.mirror = true;
 
        setRotation(Stick, 0F, 0F, 0F);
 
        EnderEye = new ModelRenderer(this, 8, 0);
 
        EnderEye.addBox(0F, 0F, 0F, 3, 3, 3);
 
        EnderEye.setRotationPoint(-1.5F, 13.5F, -1.5F);
 
        EnderEye.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        EnderEye.mirror = true;
 
        setRotation(EnderEye, 0F, 0F, 0F);
 
        PickaxePats1 = new ModelRenderer(this, 20, 0);
 
        PickaxePats1.addBox(0F, 0F, 0F, 10, 2, 2);
 
        PickaxePats1.setRotationPoint(-4F, -2F, -1F);
 
        PickaxePats1.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        PickaxePats1.mirror = true;
 
        setRotation(PickaxePats1, 0F, 0F, 0F);
 
        PickaxePats2 = new ModelRenderer(this, 44, 0);
 
        PickaxePats2.addBox(0F, 0F, 0F, 5, 2, 2);
 
        PickaxePats2.setRotationPoint(6F, -2F, -1F);
 
        PickaxePats2.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        PickaxePats2.mirror = true;
 
        setRotation(PickaxePats2, 0F, 0F, 0.2617994F);
 
        PickaxePats3 = new ModelRenderer(this, 20, 4);
 
        PickaxePats3.addBox(0F, 0F, 0F, 3, 1, 2);
 
        PickaxePats3.setRotationPoint(10F, 0F, -1F);
 
        PickaxePats3.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        PickaxePats3.mirror = true;
 
        setRotation(PickaxePats3, 0F, 0F, 0.4363323F);
 
        MainCenter = new ModelRenderer(this, 30, 4);
 
        MainCenter.addBox(0F, 0F, 0F, 4, 6, 4);
 
        MainCenter.setRotationPoint(-8F, -5F, -2F);
 
        MainCenter.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        MainCenter.mirror = true;
 
        setRotation(MainCenter, 0F, 0F, 0F);
 
        AxeUp = new ModelRenderer(this, 30, 14);
 
        AxeUp.addBox(0F, 0F, 0F, 2, 6, 4);
 
        AxeUp.setRotationPoint(-4F, -9F, -2F);
 
        AxeUp.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        AxeUp.mirror = true;
 
        setRotation(AxeUp, 0F, 0F, 0.7853982F);
 
        AxeLeft = new ModelRenderer(this, 30, 2);
 
        AxeLeft.addBox(0F, 0F, 0F, 2, 6, 6);
 
        AxeLeft.setRotationPoint(-3F, -5F, -5F);
 
        AxeLeft.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        AxeLeft.mirror = true;
 
        setRotation(AxeLeft, 0F, -1.047198F, 0F);
 
        AxeRight = new ModelRenderer(this, 30, 2);
 
        AxeRight.addBox(0F, 0F, 0F, 2, 6, 6);
 
        AxeRight.setRotationPoint(-8F, -5F, 2F);
 
        AxeRight.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        AxeRight.mirror = true;
 
        setRotation(AxeRight, 0F, 1.047198F, 0F);
 
        AxeDown = new ModelRenderer(this, 30, 14);
 
        AxeDown.addBox(0F, 0F, 0F, 2, 6, 4);
 
        AxeDown.setRotationPoint(-8F, 1F, -2F);
 
        AxeDown.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        AxeDown.mirror = true;
 
        setRotation(AxeDown, 0F, 0F, -0.7853982F);
 
        Forward = new ModelRenderer(this, 8, 6);
 
        Forward.addBox(0F, 0F, 0F, 1, 4, 2);
 
        Forward.setRotationPoint(-8.5F, -4F, -1F);
 
        Forward.setTextureSize(TextureSizeWidth, TextureSizeHeight);
 
        Forward.mirror = true;
 
        setRotation(Forward, 0F, 0F, 0F);
 
    }
 
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5)
 
    {
 
        super.render(entity, f, f1, f2, f3, f4, f5);
 
        setRotationAngles(f, f1, f2, f3, f4, f5, entity);
 
        Stick.render(f5);
 
        EnderEye.render(f5);
 
        PickaxePats1.render(f5);
 
        PickaxePats2.render(f5);
 
        PickaxePats3.render(f5);
 
        MainCenter.render(f5);
 
        AxeUp.render(f5);
 
        AxeLeft.render(f5);
 
        AxeRight.render(f5);
 
        AxeDown.render(f5);
 
        Forward.render(f5);
 
    }
 
    private void setRotation(ModelRenderer model, float x, float y, float z)
 
    {
 
        model.rotateAngleX = x;
 
        model.rotateAngleY = y;
 
        model.rotateAngleZ = z;
 
    }
 
    public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5, Entity entity)
 
    {
 
        super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
 
    }
 
    public void setTextureSize(int width, int height)
 
    {
 
        TextureSizeWidth = width;
 
        TextureSizeHeight = height;
 
    }
 
}
 
 
 
</source>
 
 
 
==解説==
 
 
 
注意、Mod開発上級者しかわからないと思いますが、すべて解説していきます。
 
 
 
===CustomModelTools.java===
 
 
 
<source lang = java>
 
public void mainLoading(FMLPreInitializationEvent event)
 
</source>
 
これは、最前列に実行するポイントで、メドッソ名のmainLoadingはpreInit限定ではありません。<br>
 
<source lang = java>
 
public static void configInformation(int ItemID, String domain, String name, int damage, boolean modeling, int width, int height)
 
</source>
 
ここでは、メドッソ名道理、コンフィグ用のところです。<br>
 
なので、使わない場合、消去してかまいません。<br>
 
UTF-8で保存してください。
 
 
 
<source lang = java>
 
mainItem = (ItemTool) new ItemCustomModelTools(itemID, toolMaterial.IRON).setData("CustomModelItem", "CustomModelItem", damageFloat);
 
</source>
 
ここの最初のコンテナで、アイテム登録します。<br>
 
setDataは、最初のストリングは「場所」、2番目のストリングは「アイテム名、テクスチャ名」、3番目は「アイテムのダメージカウント」
 
 
 
<source lang = java>
 
registerItem(mainItem, "CustomModelItem", "Custom Model Item", "カスタムモデルアイテム", new ItemCustomModelToolsRenderer(), true, texture, textureWidth, textureHeight);
 
</source>
 
ここでは、アイテムデータを詳しく登録するところです。<br>
 
1番目は「アイテムコンテナ」、2番目は「アイテム名」、3番目は「英語名」、4番目は「日本語名」、5番目は「モデルデータ」、6番目は「モデルを使うか」、7_8番目は「モデルテクスチャサイズ」<br>
 
 
 
===ItemCustomModelTools.java===
 
 
 
<source lang = java>
 
private static final Block[] setBleakingList = new Block[] {..., ...., ..., ....};
 
</source>
 
ここでは、壊せるブロックのリストです。<br>
 
ここに、登録されてなくても壊せるものはありますが、ここで登録しといたほうがいいです。
 
 
 
<source lang = java>
 
public static float damageFloat = 1.0F;
 
</source>
 
ここでは、対mobに使うところです。
 
 
 
<source lang = java>
 
public float getStrVsBlock(ItemStack par1ItemStack, Block par2Block)
 
</source>
 
ここでは、掘れるマテリアル属性を登録するところです。
 
 
 
===ItemCustomModelToolsRenderer.java===
 
 
 
<source lang = java>
 
private ModelCustomModelTools modeling;
 
public ItemCustomModelToolsRenderer()
 
{
 
    modeling = new ModelCustomModelTools();
 
}
 
</source>
 
ここでは、モデルデータを登録するところです。
 
 
 
<source lang = java>
 
public boolean handleRenderType(ItemStack item, ItemRenderType type)
 
</source>
 
ここでは、モデルをつけるかどうかを認識するところです。<br>
 
IItemRendererないにある、EnumクラスのItemRenderType.javaにある、「ENTITY」「EQUIPPED」「EQUIPPED_FIRST_PERSON」「INVENTORY」「FIRST_PERSON_MAP」の五つあり、
 
ENTITYは、EntityItem認識を行うところです。<br>
 
EQUIPPEDは、今回使うもので、モデル認識を行うところです。<br>
 
EQUIPPED_FIRST_PERSONは、三人称視点でのモデル認識を行うところです<br>
 
INVENTORYは、インベントリ内のみモデル認識を行うところです。<br>
 
FIRST_PERSON_MAPは、MapData.javaの認識転移範囲内にプレイヤーがあるかどうかを確認させて、実行させるかどうかです。
 
 
 
<source lang = java>
 
public void renderItem(ItemRenderType type, ItemStack item, Object... data)
 
</source>
 
ここでは、モデルデータを詳しく登録するところで、先ほど出した「EQUIPPED」の内容を登録するところです。<br>
 
テクスチャロードは、CustomModelItemをドメインにしてるので、
 
assets/CustomModelItem/...
 
となり、モデル名前が「model」なので、
 
assets/CustomModelItem/textures/model/model.png
 
となります。
 
テクスチャの場所は「assets/CustomModelItem/textures/model/model.png」
 
 
 
===ModelCustomModelTools.java===
 
 
 
ここでは、アイテムに使うモデルを設定するところです。
 

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

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

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