約 5,705,788 件
https://w.atwiki.jp/fallouttactics/pages/18.html
BASIC AMBUSH STEALTH SNIPER
https://w.atwiki.jp/yosilove/pages/42.html
Blender にもどる 2.5 Blender MacOSX 最終更新:0000-00-00 00 00 00 キーマップ(キーバインド)の変更方法 OutlinerウィンドウでViewをKey Mapsに変更するとキーマップの一覧が出てくるので修正する。編集したキーマップの出力はUser Preferenceでしかできないっぽい。 User Preference にもキーマップみたいのがあるが、Outlinerのほうがコンテキストの一覧も表示されるので編集しやすい。 コンテクストメモ 操作 コンテクスト デフォルトのキーバインド オブジェクトのコピー mesh.duplicate_move shift + D
https://w.atwiki.jp/blenderwiki/pages/18.html
Blender Manual 公式のマニュアル。公式なので操作がわからないときはこちらで。 一度は目を通しておいたほうがいいかも。 Blender2.5入門セット翻訳3点(by ctrl_q) 入門マニュアル等が日本語に翻訳されています。丁寧で図が多く分かりやすいです。 基本の確認にどうぞ。2.5のショートカットキーもあります。 Blender2chwiki 有志によりBlender 2.5 beginner’s guide日本語化計画が進行中。 Blender Documentation日本語版 こちらはBlender.jpの中にあるのでこちらで勉強した人も多いはず。 ただ情報が古いこともあるので注意。 Blender 3D Design Course 豊富なチュートリアルがPDFや動画で見ることができます。2.5も多いので初心者にもおすすめ。英語ですが画像も多いのでわかりやすいと思います。(動画はまだ見れないのが多いです。) 2.5になって何が変わったの?という方は リリースノート(翻訳) を見るとわかると思います。 アプリ開発者のためのBlender入門 こちらはPDF版とiPad版があります。どちらも無料なのでおすすめです。バージョンは2.49です。 内容としては、blenderの基本操作を学ぶことができます。 PDF版は ブログ の2010/12/11 OSC福岡 2010にあるリンク[スライド(PDF)とソースコードはこちら]からダウンロードできます。ちょっとわかりにくいので気をつけてください。ダウンロード後、WWDClub20101211\WWDClub20101211\SlideにPDFが入っています。 次にiPad版はiTunesからダウンロードできます。 こちらの ブログ の紹介から。 ブログは こちら です。 Blenderを使用したワークフローの構想 blenderで作品を作る上での情報のやり取りが、とてもわかり易くまとめられています。 Blender - OpenSquare|井上貢一研究室 すごい丁寧に基本操作から解説してあります。バージョンは2.5なので一見の価値アリです。 Comparison of 3d tools - CGWiki Maya,XSI,Maxなどの他の3DCGソフトを、扱えるポリゴン数やUV,Renderingなど複数の視点から比較してあります。気になっていた人は見てみるといいと思います(ちょっと見辛いですが)。上の研究室のサイトより。 3DCG ソフトウェアに共通する制作・作業工程 3DCG初心者の人にとって、制作の流れはよく分からないのでは?。ここを見るとどうやって、何に気をつけてCGを作っていけばいいのかわかると思います。色々なソフトとの比較が詳しいので参考になるところは多いはず。 CGの歴史を知りたい方はこの動画を見るといいと思います。すごい丁寧につくってある番組です。 2 3 Blender 3D Noob to Pro 英語かつ2.49以前がほとんどですが、とても参考になります。ユーザーがつくっているマニュアルです。 Blender v2.4∗ Tips 図が豊富でとても分かりやすいが、1つのページにまとめられているので検索しにくいのが難点。 初心者による初心者のためのBlender入門 とてもわかりやすくまとまっているのでおすすめです。 上に戻る
https://w.atwiki.jp/gensousinikilh/pages/16.html
Lv.1 遠方からの助け ①アニラスと会話。 ②アイコンをタップして報酬を受け取る。 ③報酬の武器を装備する。 Lv.1 前線へ ①バンデッド×2を襲撃。 ②アンドリューに報告。 ③報酬を受け取る。 Lv.1 悪魔指揮官を倒す ①ヘルスパイダー×3討伐。 ②ヘルバッド×3討伐。 ③シリオデス×1を撃破。 最終決戦 ①ダークナイト×1を撃破。 シーフォード港に続く
https://w.atwiki.jp/akasatanahama/pages/89.html
特殊な形のブロックを追加する。 今回は、アルミ製の金床を追加する。 (……としたいのだが、金床のGUIに関しては、実装していない。悪しからず。) この内容はとても難解なものを含んでいるうえ、汎用性に乏しい。 そのため、更に汎用性の高いものを作る場合は、net.minecraft.client.rendererのRenderBlocksを参照。 AluminiumMod AluminiumMod.java +長いので囲みます package aluminiummod.common; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.FMLCommonHandler; 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; import cpw.mods.fml.relauncher.Side; /** * * @author Akasata Nahama Tom Kate YOU!! * */ @Mod(modid = "AluminiumMod", name = "Aluminium Mod") public class AluminiumMod { //追加するブロックの定義 /*public static Block * ;*/ public static Block AnvilAluminium; //レンダーIDの取得 public static int RenderID; @EventHandler public void perInit(FMLPreInitializationEvent event) { /*ブロックの実装。詳細割愛。*/ AnvilAluminium = new AnvilAluminium(); AnvilAluminium.setCreativeTab(CreativeTabs.tabBlock); AnvilAluminium.setBlockName("blockAluminium"); AnvilAluminium.setBlockTextureName("aluminiummod aluminium_anvil"); GameRegistry.registerBlock(AnvilAluminium, "AnvilAluminium"); } @EventHandler public void init (FMLInitializationEvent event) { /*FMLCommonHandler.instance().getSide() で、クライアントサイドでのみの動作としている。*/ if(FMLCommonHandler.instance().getSide() == Side.CLIENT) { /*レンダーIDの設定。 * RenderingRegistry.getNextAvailableRenderId() で、未使用のレンダーIDを取得する。*/ this.RenderID = RenderingRegistry.getNextAvailableRenderId(); /*ブロックのレンダラ―を設定する。 *RenderingRegistry.registerBlockHandler(ISimpleBlockRenderingHandler); */ RenderingRegistry.registerBlockHandler(new RenderAnvilAluminium()); } } AnvilAluminium.java +長いので囲みます package aluminiummod.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class AnvilAluminium extends Block{ public AnvilAluminium() { super(Material.rock); } /**レンダーIDを返す。**/ @Override public int getRenderType() { return AluminiumMod.RenderID; } /**ブロックが透けるか否かを返す。**/ @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockAccess p_149646_1_, int p_149646_2_, int p_149646_3_, int p_149646_4_, int p_149646_5_) { return true; } /**通常のブロックでないかを返す。*/ public boolean renderAsNormalBlock() { return false; } /**ブロックが透明か否かを返す。*/ public boolean isOpaqueCube() { return false; } RenderAnvilAluminium.java +長いので囲みます package aluminiummod.common; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; import net.minecraft.world.IBlockAccess; import org.lwjgl.opengl.GL11; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; public class RenderAnvilAluminium implements ISimpleBlockRenderingHandler { /**インベントリ内でブロックをレンダリングするメソッド。もしshouldRender3DInInventoryがfalseなら空でもいいかも。**/ @Override public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { if (modelId == this.getRenderId()) { float f = 0; f = this.renderAlumiAnvil(block, renderer, metadata, f, 0.75F, 0.25F, 0.75F ,false); f = this.renderAlumiAnvil(block, renderer, metadata, f, 0.5F, 0.0625F, 0.625F ,false); f = this.renderAlumiAnvil(block, renderer, metadata, f, 0.25F, 0.3125F, 0.5F ,false); this.renderAlumiAnvil(block, renderer, metadata, f, 0.625F, 0.375F, 1.0F ,false); } } /**ワールド内でブロックをレンダリングするメソッド**/ @Override public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { if (modelId == this.getRenderId()) { /*レンダリングする立方体のサイズを決めるメソッド。 * setRenderBounds(始点X, 始点Y, 始点Z, 終点X, 終点Y, 終点Z)*/ renderer.setRenderBounds(0.1D, 0.0D, 0.1D, 0.9D, 0.2D, 0.9D); /*レンダリングするメソッド。 * renderStandardBlock(block, x, y, z);*/ renderer.renderStandardBlock(block, x, y, z); renderer.setRenderBounds(0.25D, 0.2D, 0.25D, 0.75D, 0.3D, 0.75D); renderer.renderStandardBlock(block, x, y, z); renderer.setRenderBounds(0.3D, 0.3D, 0.2D, 0.7D, 0.6D, 0.8D); renderer.renderStandardBlock(block, x, y, z); renderer.setRenderBounds(0.2D, 0.6D, 0.0D, 0.8D, 1.0D, 1.0D); renderer.renderStandardBlock(block, x, y, z); return true; } return false; } @Override /**インベントリ内で3Dレンダリングするか否かを返すメソッド**/ public boolean shouldRender3DInInventory(int modelId) { return true; } /**自身のレンダーIDを返すメソッド**/ @Override public int getRenderId() { return AluminiumMod.RenderID; } protected float renderAlumiAnvil(Block block , RenderBlocks renderer , int metadata , float sides1 , float sides2 , float sides3 , float sides4 , boolean flg) { /**詳しい説明はカット。ここは難しいため、基本的にはshouldRender3DInInventoryをfalseにすることをお勧めする。**/ if(flg) { float f = sides2; sides2 = sides4; sides4 =f; } sides2 /= 2.0F; sides4 /= 2.0F; renderer.setRenderBounds((double)(0.5F - sides2), (double)sides1, (double)(0.5F - sides4), (double)(0.5F + sides2), (double)(sides1 + sides3), (double)(0.5F + sides4)); /*これより下は、ブロックを各面ごとにレンダリングしている。*/ Tessellator tessellator = Tessellator.instance; GL11.glTranslatef(-0.5F, -0.5F, -0.5F); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, -1.0F, 0.0F); renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 1.0F, 0.0F); renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, -1.0F); renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(0.0F, 0.0F, 1.0F); renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(-1.0F, 0.0F, 0.0F); renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata)); tessellator.draw(); tessellator.startDrawingQuads(); tessellator.setNormal(1.0F, 0.0F, 0.0F); renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); tessellator.draw(); GL11.glTranslatef(0.5F, 0.5F, 0.5F); renderer.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); return sides1 + sides3; } 解説 RenderAnvilAluminium この中では、インベントリ内でのレンダリングが一番難しいはずである。 もし大変ならば、shouldRender3DInInventoryをfalseにすればインベントリにはテクスチャのみが表示されるため、作業が楽になる。 コメント この項目に関する質問などをどうぞ。 ページ左のサイト内リンクからのリンクが間違っていると思います - 名無しさん 2015-07-08 23 19 57 ご指摘ありがとうございます。修正しました。 - 赤砂蛇凪浜 2015-07-09 09 55 44 赤砂蛇凪浜様(そうでしょうか)、おはようございます - Dao_Za 2016-04-01 10 07 32 赤砂蛇凪浜様(そうでしょうか)、おはようございます!中国のファンです。昨日夜このサイトを拝見いたしまして、即刻ファンになります~一つご質問がございますが、どうやて、ブロックのbnound大きさを設置しますでしょうか。AnvilAluminium.javaにsetBoundなどを高さ3.0のブロックに設置しましたが、上から踏んた時、画面が痙攣のようになりましたwwww。ほかのmodを読んでいましたが、onEntityCollidedWithBlockという方法でしょうか。 - Dao_Za 2016-04-01 10 12 18 setBlockBoundsの引数で、ブロックの大きさを設定することができます。また、getCollisionBoundingBoxFromPoolをオーバーライドすると衝突判定だけを設定することができます。衝突判定は、Yに2.0Fより大きい値を設定するとうまく反映できず、画面が荒ぶるようです。onEntityCollidedWithBlockは、Entityがブロックに触れているときの処理です。 - 赤砂蛇凪浜 2016-04-01 14 57 54 ありがとうございます。あの、手持ち時の3D形をどうやって設置しますか。現在椅子の形を作りたく、RenderAluminumファイルでのrenderInventoryBlockで設置して、どうか真ん中から広げて、例えば0.2F,0.3F,0.4Fで、0.2X0.4の柱になってしまいます。(あるいは最後のrenderAlumiAnvilのところで設置?ほかのMOD内容を見て、renderAlumiAnvilのところはみんなほぼお同じcodeですが。) - Dao_Za 2016-04-02 00 32 33 こんにちは。もう一点ですが、放置するときに椅子の向き方向の調整案例がございますでしょうか。 - Dao_Za 2016-04-02 12 05 08 上記二つの質問ですが、いまいち意図がつかめませんでした。(「0.2F,0.3F,0.4F」とはどこの数値でしょうか?)私もあまり得意な分野ではないので、的確な返答ができないかもしれません。申し訳ありません。 - 赤砂蛇凪浜 2016-04-04 07 52 30 説明不足でした申し訳ございませんでした。0.2とかは仮説の数字で無視すればOKです~あの、上の計算式で三つ数字の意味を知りたいですが:「f = this.renderAlumiAnvil(block, renderer, metadata, f, 0.75F, 0.25F, 0.75F ,false);」の中の0.75、0.25、0.75の機能はそれぞれなんでしょうかね? - Dao_Za 2016-04-05 18 49 32 renderAlumiAnvilは、金床のレンダリングを行うメソッドです。sides1は始点の高さ、sides2,sides3,sides4はそれぞれ立方体のx,y,z方向の長さです。この三つで立方体の大きさを表せます。 - Tom Kate 2016-04-05 21 04 45 こんばんは。プレイヤーの向きによってカスタムモデルの向きを変えるようなブロック(例:フェンスゲート、階段等)はどのようにして追加するのでしょうか。 - modder 2016-05-11 00 07 21 返信遅くなってしまいすみません。バニラのフェンスゲートと同様、onBlockPlacedByで設置時のプレイヤーの向きに応じてメタデータを設定し、レンダリング時にメタデータを取得して描画する向きを決めればよいかと思います。 - 赤砂蛇凪浜 2016-05-13 17 58 12 ありがとうございます - modder 2016-06-03 22 27 41 modelは、jsonで指定するはずです。 - pppp 2017-08-30 06 55 39 こちらのチュートリアルは1.7.10版のものです。jsonで指定するのは1.8版以降ですので、まだチュートリアルには記載しておりません。今後1.12版の方はチュートリアル実装予定です。 - TomKate 2017-08-30 18 22 14 名前
https://w.atwiki.jp/ssf4/pages/3761.html
ジャンプ攻撃やガードができる、必殺技も出せる人向けの基礎を固めるチュートリアル チュートリアル基礎編 コース.link_anchor plugin error idが指定されていないか、存在しないページを指定しています。 コース.link_anchor plugin error idが指定されていないか、存在しないページを指定しています。 基礎テクニック.投げ抜け(グラップ)をする 投げ抜けは投げられたあと7F以内に弱P+弱Kを同時押しで成立する。 (7Fは10分の1秒程度) こちらの投げモーション(出始めから4F)中に投げられても成立する。 こちらの技の硬直中に投げられてしまうと投げ抜けは出来ない。 状況にもよるがこちらが不利な状況では投げ抜け入力は基本的にしゃがみ投げ抜けにしよう。 しゃがみガードしながら小P+小Kを入力する。 相手の打撃重ねはガードし、投げは投げ抜けすることができる。立ち投げ抜けは相手が投げにきてなかった場合は隙の多い投げスカりモーションが出てしまうがしゃがみ投げ抜けなら替わりにしゃがみ小Kが出るので比較的安全。 前ダッシュから虚をついて投げられたりすると投げ抜け入力が間に合わないことが多い。 相手がワンステップで近づける間合いのときはあらかじめ指を弱P+弱Kの同時押しが出来る形にしておくと対応速度がだいぶ違う。相手が近いときは常に準備しておこう。 基礎テクニック.対空技を出す ジャンプ攻撃は通してしまえば最大ダメージのコンボを入れたりガードされても密着付近で有利と破格のリターンを得られる攻撃手段。 なるべく対空技で落とせるようにしたい。 まずキャラ通常技説明のページから対空に適した技を調べよう。 対空技を出すコツとして最も初歩的で大事なコツは対空技のボタンに指を置き、その指を絶えず意識すること。 同時に相手の動きも見ないといけないので画面とその指の両方を意識することになる。 ※空対空の場合はレバーの上方向とボタンを意識、しゃがみ攻撃で滞空する時は下方向とボタン、昇龍拳などのコマンド技で対空する時はボタンよりに意識し、それに間に合わせるようにコマンドを入力する。 この点をCPU戦やトレーニングモードで繰り返し練習し、体に馴染ませよう。 慣れてくれば意識せずとも自然と体が反応できるようになる。 対人デビュー、大会、しばらく間が空いた時、スランプの時などはここに立ち返り、基本を思い出すこと。 基礎テクニック.目押しコンボ 攻撃のヒット後は技によって有利時間がさまざまだが隙無く技を続けて出すことで連続ヒットするものがある。 各キャラのコンボページで繋がる通常技の組み合わせを調べよう。 単純にコンボのダメージアップになるしヒット確認連続技の確認猶予時間が長くなるので使いこなすと非常に強い。 基礎テクニック.EXセービングキャンセル 特定の必殺技の出始めはセービングアタックでキャンセルできる。 (例:昇龍拳の根元ヒット、波動拳の出始め) セービングアタックでキャンセルしたのちはそのままボタンを開放してアタックを出したり、押しっぱなしでダッシュして隙をなくしたり出来る。 基礎テクニック.スーパーキャンセル EXセービングキャンセルと同様に特定の必殺技の出始めはスーパーコンボでキャンセルできる。 リュウならばPからそのままPと入力すれば昇龍拳をキャンセルして真空波動拳が出る。 (ただし昇龍拳は根元ヒット(ガード)させたときのみ) 波動拳キャンセル真空波動拳の場合はPのあとPで出せる。 溜め技系のスーパーキャンセルは春麗の気功拳→千烈脚なら 溜めPからK 基礎テクニック.簡単なヒット確認 相手の状況次第で技を出すか出さないかを直前で判断しその都度、選択肢を変えていくことをヒット確認という。 初歩的なヒット確認としてジャンプした時に相手が波動拳を撃ってきた場合に最大ダメージのコンボパーツを選んだり、ジャンプ攻撃の二段目まで出し切って当たっていた場合に目押しコンボに繋げる、など。 システム詳細.簡易入力 昇龍拳コマンドは以下のコマンドで簡易入力ができる。 しゃがみながら入力できるためしゃがみ技をキャンセルする時やひきつけて対空する時に使う。 前歩きから最速で入力できる。レバー入れ技が空キャンセルできるキャラはこの入力法を使う。 出来るというだけで特に使い道はない。 システム詳細.ガチャ昇龍 対人戦.画面端の維持
https://w.atwiki.jp/sidstory/pages/18.html
利用約款・プライバシーポリシーにご同意頂けましたら、いよいよゲームの開始です! ①「はじめから」を選択します。 ゲームデータの引き継ぎは「続きから」を選ぶことで行えます。 ②プレイヤーネームの設定を行います。 ゲーム内で使うプレイヤーの名前です。 ゲームを開始した後でも変更できますので気軽に決めても大丈夫です。 ③いよいよSid Storyの世界に入ります! ストーリーを読み進めましょう! ④ストーリーを読み進めると、3人のシディアンから1人を仲間にすることができます。 誰を選んでも強力な、レアシディアンなので好きなシーディアンを選びましょう! ⑤シディアンを選んだらいよいよシドの世界へ出発です!
https://w.atwiki.jp/tetetetetsuo/pages/17.html
@wikiへようこそ ウィキはみんなで気軽にホームページ編集できるツールです。 このページは自由に編集することができます。 メールで送られてきたパスワードを用いてログインすることで、各種変更(サイト名、トップページ、メンバー管理、サイドページ、デザイン、ページ管理、等)することができます まずはこちらをご覧ください。 @wikiの基本操作 編集モード・構文一覧表 @wikiの設定・管理 分からないことは? @wiki ご利用ガイド よくある質問 @wiki更新情報 @wikiへのお問合せフォーム 等をご活用ください アットウィキモードでの編集方法 文字入力 画像入力 表組み ワープロモードでの編集方法 文字入力 画像入力 表組み その他にもいろいろな機能満載!! @wikiプラグイン一覧 @wikiかんたんプラグイン入力サポート まとめサイト作成支援ツール その他お勧めサービスについて 2ch型の無料掲示板は@chsをご利用ください フォーラム型の無料掲示板は@bbをご利用ください その他の無料掲示板は@bbsをご利用ください バグ・不具合を見つけたら? 要望がある場合は? お手数ですが、お問合せフォームからご連絡ください。
https://w.atwiki.jp/civilization/pages/2398.html
初心者ガイド/チュートリアル詳説/16.社会制度 前ページ次ページ初心者ガイド/チュートリアル詳説 初心者ガイド/チュートリアル詳説/16.社会制度 [#yf77e4f8] 社会制度 [#x8ed95a1] 奴隷制 [#a10b3f13] 社会制度 原文 訳 Since your Civilization has its own Religion, it might be a good time think about the way you rule your empire. 文明が無事独自の宗教を創始したので、今度は国家の統治方式について考えてみましょう。 Researching the Technology of Bronze Working will unlock Slavery as your first new Civic option. A Civic is an element of government. 青銅器のテクノロジーを研究すると、奴隷制が最初の労働制度のオプションとして加わります。労働制度は、社会制度の一要素です。 your Civilization improves technologically, new Civics will become available to you. Slavery is an early option. As your civilization advances, eventually Emancipation will be available as another choice. テクノロジーが発達するにつれて、文明は次々と新しい社会制度を採用できるようになります。奴隷制は、ごく初期の頃のオプションです。文明が進めば、やがて奴隷解放も採用できるようになるでしょう。 Research Bronze Working. 青銅器を研究しましょう。 It may take a few turns for your research to yield discoveries. 研究成果を獲得するまで、数ターンを要します。 奴隷制 原文 訳 You have discovered Bronze Working and unlocked the Civic of Slavery. 青銅器を獲得したので、労働制度に奴隷制の選択肢が加わりました。 Slavery will allow you to sacrifice your Cities Population to hurry Production in your cities. This is useful when a city is under imminent attack and you need to quickly create a unit to defend it. 奴隷制が採用されると、都市人口の減少と引き換えに、緊急生産をすることができるようになります。これは都市に攻撃がさし迫っていて、防御用のユニットを促成するときなどに役に立ちます。 Sacrificing Population in this way causes Unhappiness in your city. It should only be used as a last resort. ところがこのように人口を減少させると、都市の不満が高まります。最後の手段にとっておいたほうが賢明でしょう。 Converting your government to a new Civic will cause your empire to go in to Anarchy for 1 Turn. During Anarchy your Cities will not produce anything. 政治体制を新たな社会制度に移行すると、1ターンのあいだだけ国家は無政府状態に陥ります。無政府状態のあいだは、都市の生産は止まります。
https://w.atwiki.jp/akasatanahama/pages/63.html
概要 ドロップアイテムがそのブロック自身ではなく、さらに経験値をドロップするブロックを追加し、地下に生成させる。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import net.minecraft.block.Block; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; 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 = AluminiumMod.MODID, name = AluminiumMod.MODNAME, version = AluminiumMod.VERSION) public class AluminiumMod { public static final String MODID = "AluminiumMod"; public static final String MODNAME = "Aluminium Mod"; public static final String VERSION = "1.0.0"; public static Item aluminium; public static Block oreAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { aluminium = new Item() .setCreativeTab(CreativeTabs.tabMaterials) .setUnlocalizedName("aluminium") .setTextureName("aluminiummod aluminium"); GameRegistry.registerItem(aluminium, "aluminium"); oreAluminium = new AluminiumOre() .setBlockName("oreAluminium") .setBlockTextureName("aluminiummod aluminium_ore"); GameRegistry.registerBlock(oreAluminium, "oreAluminium"); } @EventHandler public void init(FMLInitializationEvent event) { GameRegistry.registerWorldGenerator(new AluminiumOreGenerator(), 0); } } AluminiumOre.java package tutorial.aluminiummod; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; public class AluminiumOre extends Block { private Random random = new Random(); public AluminiumOre() { super(Material.rock); this.setCreativeTab(CreativeTabs.tabBlock); this.setHardness(3.0F); this.setResistance(5.0F); this.setStepSound(Block.soundTypeStone); this.setHarvestLevel("pickaxe", 2); } @Override public Item getItemDropped(int meta, Random random, int fortune) { return AluminiumMod.aluminium; } @Override public int quantityDroppedWithBonus(int fortune, Random random) { if (fortune 0 Item.getItemFromBlock(this) != this.getItemDropped(0, random, fortune)) { int i = random.nextInt(fortune + 2) - 1; if (i 0) { i = 0; } return this.quantityDropped(random) * (i + 1); } else { return this.quantityDropped(random); } } @Override public int getExpDrop(IBlockAccess iBlockAccess, int meta, int fortune) { return MathHelper.getRandomIntegerInRange(random, 3, 7); } } AluminiumOreGenerator.java package tutorial.aluminiummod; import java.util.Random; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraft.world.WorldProviderSurface; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; public class AluminiumOreGenerator implements IWorldGenerator { @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { if (world.provider instanceof WorldProviderSurface) { generateOre(world, random, chunkX 4, chunkZ 4); } } private void generateOre(World world, Random random, int x, int z) { for(int i = 0; i 10; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(AluminiumMod.oreAluminium, 0, 20, Blocks.stone).generate(world, random, genX, genY, genZ); } } } 解説 Block Item getItemDropped(int meta, Random random, int fortune) そのブロックを破壊したときにドロップするアイテムを返す。 int quantityDroppedWithBonus(int fortune, Random random) 破壊するのに使用したツールの幸運レベルをもとに、ドロップ数を変更する。 int getExpDrop(IBlockAccess iBlockAccess, int meta, int fortune) 経験値のドロップ量を返す。 GameRegistry void registerWorldGenerator(IWorldGenerator generator, int modGenerationWeight) GameRegistryにチャンク生成時にブロックを自然生成させるためのクラスを登録するメソッド。 第二引数は生成の優先度(?)。 IWorldGenerator チャンク生成時にブロックを自然生成させるためのインターフェース。 generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) world.providerはそのワールド(ディメンション)のプロバイダ。 これを使って判定することで鉱石を生成するディメンションを制御できる。 WorldGenMinable ブロックを生成させるクラスの一つ。 コンストラクタで指定したパラメータをもとにgenerateで鉱脈を生成する。 コンストラクタ(Block block, int meta, int number, Block target) 引数は、生成するブロック、生成するブロックのメタデータ、生成する鉱脈の大きさ、置き換えるブロック。 第二引数はなくてもよい。 boolean generate(World world, Random random, int x, int y, int z) 鉱脈を生成する処理。 戻り値は生成が成功したかどうか。 使用例 オファレン鉱石を追加している部分。 +オファレンMOD OfalenModCore.java package nahama.ofalenmod; /*略*/ /**@author Akasata Nahama*/ @Mod(modid = OfalenModCore.MODID, name = OfalenModCore.MODNAME, version = OfalenModCore.VERSION) public class OfalenModCore { public static final String MODID = "OfalenMod"; public static final String MODNAME = "Ofalen Mod"; public static final String VERSION = "[1.7.10]1.0.0"; /*略*/ /**最初に行われる処理。アイテム・ブロックの追加などを行う*/ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ //アイテムを設定するメソッドを実行 OfalenModItemCore.registerItem(); //ブロックを設定するメソッドを実行 OfalenModBlockCore.registerBlock(); /*略*/ } /**2番目に行われる処理。レシピの追加などを行う*/ @EventHandler public void init (FMLInitializationEvent event) { //鉱石を生成させる GameRegistry.registerWorldGenerator(new OfalenOreGenerator(), 1); /*略*/ } /*略*/ } +あまり関係ないので格納 OfalenModItemCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModItemCore { /*略*/ public static Item fragmentOfalen; /*略*/ /**アイテムを設定する*/ public static void registerItem () { /*略*/ fragmentOfalen = new Ofalen() .setUnlocalizedName("fragmentOfalen") .setTextureName("ofalenmod ofalen_fragment"); GameRegistry.registerItem(fragmentOfalen,"fragmentOfalen"); /*略*/ } } Ofalen.java package nahama.ofalenmod.item; import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class Ofalen extends Parts { public Ofalen () { super (4); } /**メタデータにより返すIIconを変える。*/ @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { return iicon[meta 3]; } /**メタデータを返す。*/ @Override public int getMetadata(int meta) { return meta 3; } } Parts.java package nahama.ofalenmod.item; import java.util.List; import nahama.ofalenmod.OfalenModCore; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class Parts extends Item { protected IIcon[] iicon; private final int type; public Parts (int type) { super (); this.type = type; this.setCreativeTab(OfalenModCore.tabOfalen); this.setHasSubtypes(true); this.setMaxDamage(0); } /**メタデータ違いのテクスチャを登録する*/ @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister register) { this.iicon = new IIcon[type]; for (int i = 0; i type; i ++) { this.iicon[i] = register.registerIcon(this.getIconString() + "-" + i); } } /**メタデータにより返すIIconを変える*/ @Override @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int meta) { return iicon[meta]; } /**メタデータ違いのアイテムを登録する*/ @Override @SideOnly(Side.CLIENT) public void getSubItems(Item item, CreativeTabs creativeTab, List list) { for (int i = 0; i type; i ++) { list.add(new ItemStack(this, 1, i)); } } /**メタデータを返す*/ @Override public int getMetadata(int meta) { return meta; } /**メタデータにより内部名を変える*/ @Override public String getUnlocalizedName(ItemStack itemStack) { return this.getUnlocalizedName() + "." + itemStack.getItemDamage(); } } OfalenModBlockCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModBlockCore { //ブロックの定義 public static Block oreOfalen; /*略*/ /**ブロックを設定する*/ public static void registerBlock () { oreOfalen = new OfalenOre() .setBlockName("oreOfalen") .setBlockTextureName("ofalenmod ofalen_ore-"); GameRegistry.registerBlock(oreOfalen, ItemOfalenBlock.class, "oreOfalen"); /*略*/ } } OfalenOre.java package nahama.ofalenmod.block; import java.util.List; import java.util.Random; import nahama.ofalenmod.OfalenModCore; import nahama.ofalenmod.core.OfalenModConfigCore; import nahama.ofalenmod.core.OfalenModItemCore; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class OfalenOre extends Block { private IIcon[] iicon = new IIcon[4]; private Random random = new Random(); public OfalenOre() { super(Material.rock); this.setCreativeTab(OfalenModCore.tabOfalen); this.setHardness(5.0F); this.setResistance(7.5F); this.setStepSound(Block.soundTypePiston); this.setLightLevel(0.6F); this.setHarvestLevel("pickaxe", 3); } /**ドロップアイテムの設定*/ @Override public Item getItemDropped(int meta, Random random, int fortune) { return OfalenModItemCore.fragmentOfalen; } /**ドロップ数の設定*/ @Override public int quantityDropped(Random random) { return OfalenModConfigCore.amountDrop; } /**fortuneによるドロップ増加の設定。BlockOre参照*/ @Override public int quantityDroppedWithBonus(int level, Random random) { //幸運のレベルが1以上で、ドロップアイテムがこのブロック自身でない場合 if (level 0 Item.getItemFromBlock(this) != this.getItemDropped(0, random, level)) { int i = random.nextInt(level + 2) - 1; if (i 0) { i = 0; } return this.quantityDropped(random) * (i + 1); } else { return this.quantityDropped(random); } } /**経験値ドロップの設定*/ @Override public int getExpDrop(IBlockAccess iBlockAccess, int meta, int fortune) { return MathHelper.getRandomIntegerInRange(random, 3, 7); } /**メタデータ違いのテクスチャを登録する*/ @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iicon) { for (int i = 0; i 4; i ++) { this.iicon[i] = iicon.registerIcon(this.getTextureName() + i); } } /**メタデータにより返すIIconを変える*/ @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { return iicon[meta 3]; } /**メタデータ違いのブロックを登録する*/ @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs creativeTab, List list) { for (int i = 0; i 4; i ++) { list.add(new ItemStack(item, 1, i)); } } /**メタデータによりドロップ品を変える*/ @Override public int damageDropped(int meta) { return meta 3; } } OfalenOreGenerator.java package nahama.ofalenmod.generator; import java.util.Random; import nahama.ofalenmod.core.OfalenModBlockCore; import nahama.ofalenmod.core.OfalenModConfigCore; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraft.world.WorldProviderSurface; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.feature.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; public class OfalenOreGenerator implements IWorldGenerator { public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { if (OfalenModConfigCore.enabledGenerator) { if (world.provider instanceof WorldProviderSurface) { generateOreRed(world, random, chunkX 4, chunkZ 4); generateOreGreen(world, random, chunkX 4, chunkZ 4); generateOreBlue(world, random, chunkX 4, chunkZ 4); generateOreBig(world, random, chunkX 4, chunkZ 4); } } } private void generateOreRed(World world, Random random, int x, int z) { for(int i = 0; i OfalenModConfigCore.probabilityGeneration; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, OfalenModConfigCore.limitGeneration, Blocks.stone).generate(world, random, genX, genY, genZ); } } private void generateOreGreen(World world, Random random, int x, int z) { for(int i = 0; i OfalenModConfigCore.probabilityGeneration; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, OfalenModConfigCore.limitGeneration, Blocks.stone).generate(world, random, genX, genY, genZ); } } private void generateOreBlue(World world, Random random, int x, int z) { for(int i = 0; i OfalenModConfigCore.probabilityGeneration; i++) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, OfalenModConfigCore.limitGeneration, Blocks.stone).generate(world, random, genX, genY, genZ); } } private void generateOreBig(World world, Random random, int x, int z) { int i = random.nextInt(10000); if (i OfalenModConfigCore.probabilityGenerationLode) { int genX = x + random.nextInt(16); int genY = 1 + random.nextInt(15); int genZ = z + random.nextInt(16); int type = random.nextInt(19)/3; switch (type) { case 0 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 1 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 2 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 3 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 4 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 5 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 2, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 1, 40, Blocks.stone).generate(world, random, genX, genY, genZ); new WorldGenMinable(OfalenModBlockCore.oreOfalen, 0, 40, Blocks.stone).generate(world, random, genX, genY, genZ); break; case 6 new WorldGenMinable(OfalenModBlockCore.oreOfalen, 3, 40, Blocks.stone).generate(world, random, genX, genY, genZ); } new WorldGenMinable(OfalenModBlockCore.oreOfalen, 3, 40, Blocks.stone).generate(world, random, genX, genY, genZ); } } } コメント この項目に関する質問などをどうぞ。 鉱石から鉱石ブロックをドロップする方法くぉおあいえていただけないでsy - World_of_the_Takumi 2016-03-11 07 40 22 AluminiumOreクラスで、getItemDropped・quantityDroppedWithBonus・getExpDropの部分を削除すればできます。 - 赤砂蛇凪浜 2016-03-13 07 44 13 返信ありがとうございました、わかりにくいコメントですいません。今後から気を付けます。あともう一つお願いします" new WorldGenMinable(AluminiumMod.oreAluminium, 0, 20, Blocks.stone).generate(world,”以降はどうなっていますか。wikiにものってなかったのでお願いします。 - World_of_the_Takumi 2016-03-13 19 18 57 ソースコードの表示が見切れてしまっていたでしょうか。このようになっています。new WorldGenMinable(AluminiumMod.oreAluminium, 0, 20, Blocks.stone).generate(world, random, genX, genY, genZ); - 赤砂蛇凪浜 2016-03-14 06 40 37 ありがとうございました。感謝します - World_of_the_Takumi 2016-03-14 17 38 44 はじめまして このような素晴らしいwikiをありがとうございます 一つ気になることがあるのですが AluminiumOreGenerator.javaの22行目 「for(int i = 0; i 64; i++) {」 26行目 「new WorldGenMinable(decorationMOD.oreDecoration, 0, 64, Blocks.stone).generate(world, random, genX, genY, genZ);」 としているのですが 地下に鉱石が生成された気配が全くありません どこか間違えている・その他に設定が必要 などありましたら教えていただけないでしょうか 長文失礼しました - さくら 2016-04-01 00 10 45 こちらの環境でそのように変更すると、チャンクを読み込もうとしたときにクラッシュしました。鉱石はクリエイティブタブなどから利用できますか?GameRegistry.registerBlockをpreInitで呼び出しているか、GameRegistry.registerWorldGeneratorをinitで呼び出しているかなどを確認してください。WorldGenMinable.generateの次の行に「FMLLog.info("Generated ore. (" + genX + ", " + genY + ", " + genZ + ")");」と入れてログを確認するのも有効かと思います。 - 赤砂蛇凪浜 2016-04-01 06 58 20 返信ありがとうございます。まず報告からなんですが、行けました! 無事に生成されてました。ありがとうございます。で、原因なんですが「GameRegistry.registerWorldGeneratorをinitで呼び出しているかなどを確認してください。」というのが気になったので 上をよく見るとそのような文章があり、「げ」と思ってEclipseを見なおしたところ追加し忘れていました。お騒がせして申し訳ありません。 (int i = 0; i 16; i++) WorldGenMinable(decorationMOD.oreDecoration, 0, 8, Blocks.stone) として無事生成できました。本当にありがとうございました!長文、大変失礼いたしました - さくら 2016-04-02 05 55 25 解決できたようでよかったです。 - 赤砂蛇凪浜 2016-04-02 06 10 29 わかりやすい解説ありがとうございます。アイテムをドロップさせる際にメタデータを指定する為にはどのようにすればよいのでしょうか。よろしくお願いします。 - asajyra 2016-04-02 02 14 53 MOD製作チュートリアル/メタデータを持つブロックの追加でも触れていますが、AluminiumOre内で、Block.damageDropedをオーバーライドするとできます。 - 赤砂蛇凪浜 2016-04-02 06 12 33 WorldGenMinableのコンストラクタの第三引数をバニラの鉱石を参考にしたいのですが、バニラの鉱石のWorldGenMinableってどこにあるんですかね? - 名無しさん 2017-02-08 21 38 00 net.minecraft.world.biome.BiomeDecoratorのコンストラクタにおいて、通常世界の鉱石類のためにWorldGenMinableインスタンスの生成が行われています。(以下、補足。今後のModdingをより便利に行うためにご活用ください。)このような情報はIDEの機能を使うと簡単に調べることができます。今回の場合、コード内の「WorldGenMinable」にカーソルを合わせて「定義へ移動」(EclipseではF3)をすると、Forgeコード内のコンストラクタ記述部に移動でき、WorldGenMinableがコンストラクタを三種類持っていることがわかります。それぞれのコンストラクタ記述部にカーソルを合わせて「呼び出し階層を開く」(EclipseではCtrl+Alt+H)をすると、それぞれがどこから呼び出されているかがわかります。WorldGenMinable(Block p_i45459_1_, int p_i45459_2_)がBiomeDecoratorから呼び出されていることはこうして調べました。 - 赤砂蛇凪浜 2017-02-10 18 39 31 丁寧な回答ありがとうございます。どうにか丁度よい生成量にできました! - 名無しさん 2017-02-10 22 55 50 すみません、鉱石の生成率を鉱脈の大きさを変えるのにはどうすればいいんですか?わかりにくい質問でごめんなさい - 頭の中お花畑 2017-04-13 22 22 48 鉱石の生成率の件は解決しました。鉱脈の大きさを決めるプログラムを教えていただけますでしょうか。何度もすいません - 頭の中お花畑 2017-04-13 23 25 16 「解説」に記載してありますが、WorldGenMinableのコンストラクタの第三引数である"int number"を変更することで大きさを制御できます。これは、生成される可能性のある最大のパターンでの鉱石数を指定しています。 - 赤砂蛇凪浜 2017-04-14 18 34 08 ありがとうございます!早速試してみます! - 頭の中お花畑 2017-04-16 19 26 45 名前