約 5,705,541 件
https://w.atwiki.jp/civilization/pages/2388.html
初心者ガイド/チュートリアル詳説/06.都市の文化 前ページ次ページ初心者ガイド/チュートリアル詳説 初心者ガイド/チュートリアル詳説/06.都市の文化 [#n0d4fa5e] 都市の文化 [#o0092d72] 労働者の生産 [#g3ab65df] 都市の文化 原文 訳 You have completed your Obelisk and increased the amount of Culture() your City produces. オベリスクが完成しました。これで都市が生み出す文化力( )ポイントが増加します。 Each of your Cities has a colored area representing the borders of your nation. This border shows how far your City s influence reaches. As your city s Culture () increases, your borders will expand. それぞれの都市には、色のついた領域があります。これは勢力圏を表しています。この勢力圏は、都市の影響が及ぶ範囲を示しています。都市の文化()が増大すれば、それだけこの勢力圏も拡張します。 Currently, Rome produces 3 Culture per turn. When Rome s total Culture ( ) is greater than 10, its borders will expand. This will occur in 4 turns. この時点でローマは、ターンごとに文化力を3ポイント産出しています。ローマの文化力( )の合計が10を超えると、勢力圏が拡張します。この場合は、あと4ターンで拡張が見られます。 Rome s borders will expand further when its Culture reaches 100, 1000, 10,000, and so on. ローマの勢力圏は、文化力が100、1000、10,000...に達するたびに、拡張します。 労働者の生産 原文 訳 Since your Obelisk is constructed, let s build a unit to improve the land around your City. This is the Worker unit s function. オベリスクの建設も完了したので、今度はユニットを生産して都市周辺の土地の資源活用をしましょう。土地の資源活用は労働者ユニットが行います。 Build a Worker. 労働者ユニットを生産してください。
https://w.atwiki.jp/browser3594-wiki/pages/403.html
チュートリアルを受ける(1鯖) に戻る クエスト名 チュートリアルを受ける 内容 「水鏡先生」と話す 報酬 チュートリアル開始の権利 会話 お、そちもこの乱世に和をもたらさんと志す者かのぅ? よしよし・・・、わしは「司馬 徽 徳操」(しば き とくそう)という者じゃ。巷では「水鏡先生」などと呼ばれとる。今、そちのように志は高いが経験が少なく、この戦乱をどう治めていくべきか悩んでおる者に、わしのわずかばかりの知恵や経験を指導して歩いておるんじゃ。おぬし、良い面構えをしておるのう、 どうじゃ?わしの指導を受けてみんか? ----------チュートリアルを受ける:達成----------よしよし、では準備ができたらわしの元に訪ねてくるんじゃ。右上にある”チュートリアル”ボタンを押すことでわしに会いに来れるからのう。まっとるぞ~。 備考
https://w.atwiki.jp/sangokukmy9/pages/42.html
みねこそういえば、ここにも更新開始ってあるのかしら? あやね更新開始? えみあるでちゅよ えみ森の妖精さん、知ってるから説明してあげまゆね えみまず、このゲームはリセットされるところから始まるでちゅの あやねリセット? みねこ登録した全キャラのデータ、書き込みなどを全部削除することなの あやねえっ、せっかく登録したのに消しちゃうの!? みねここれは戦争のゲームだけど、誰かの国が統一‥全部の国を滅ぼしたら、もう戦争することはできないよね みねこだからリセットして、何もない状態に戻して最初からやり直すわけ あやねなるほど‥ えみ独特のシステムだから最初は慣れないかもしれないでちゅね えみで、リセット直後は0年1月から始まるでちゅの あやねその次の更新開始って何? えみリアルの1日はゲーム内の12年に相当するからリセットの2日後になるでちゅね、ばぶ えみ武将のコマンド実行が、ここから始まるでちゅの あやねえっ、確か#4では‥‥ えみあれは、チュートリアルだから特別に0年1月だけど実行させたわけ えみ本来は、24年1月までに入力したコマンドは24年1月にならないと実行されなでちゅの みねこそれで、その次の戦闘解除は‥ えみおっと、KMY Versionの更新開始ではもう1つ、大きなイベントがあるでちゅの えみまず、24年1月まで時間を進めてみまちゅね あやねうわっ、なんか出てきた!? えみ‥KMY Versionでは、人間の他にコンピュータによる国も出てくるでちゅの あやねなんかすごそう えみ2つあって、経営国家と異民族 えみ異民族は倒さなくても統一できるから無視してOKでちゅよ、ばぶ あやねはーい みねこスーハースーハースーハースーハー‥‥ みねこそうだ、戦闘解除はね、48年1月になったら戦争できるようになるっていうことなの あやねなるほど‥この時期になったら戦争できるようになるんですね みねことはいっても、戦闘解除は同時に領土戦開始の合図でもあるのよ みねこ右の端っこに、灰色の都市があるでしょ? みねこそこへ攻め込めるようになるから、隣接する国でその都市を取り合うの あやねへえ、大変そう‥‥ あやね!? あやねまた国が!? あすかウーガ、ウガ あすかウガ、ウガガガ、ウゴゴゴ?ウガガガ、ガガガ、ゴゴゴ? あすかゴゴゴゴゴ、ギギギグググガガガゴゴゴゲゲゲギギギガガガ? あやねこ、怖い‥ えみなんだこのゴミクズ みねこ知らないわ あすかウーガ、アヒャヒャヒャヒャヒャ、ギギギゴゴゴヒャヒャハハハハ!!! あすかアーン? あやね(やばい、ここ、変なのばかりだ‥‥) えみとりあえず、領土戦は実際のゲームで体験してみてでちゅ
https://w.atwiki.jp/browser3594-wiki/pages/86.html
チュートリアルを受ける(3鯖) に戻る クエスト名 チュートリアルを受ける 内容 「水鏡先生」と話す 報酬 チュートリアル開始の権利 会話 お、そちもこの乱世に和をもたらさんと志す者かのぅ? よしよし・・・、わしは「司馬 徽 徳操」(しば き とくそう)という者じゃ。巷では「水鏡先生」などと呼ばれとる。今、そちのように志は高いが経験が少なく、この戦乱をどう治めていくべきか悩んでおる者に、わしのわずかばかりの知恵や経験を指導して歩いておるんじゃ。おぬし、良い面構えをしておるのう、 どうじゃ?わしの指導を受けてみんか? ----------チュートリアルを受ける:達成----------よしよし、では準備ができたらわしの元に訪ねてくるんじゃ。右上にある”チュートリアル”ボタンを押すことでわしに会いに来れるからのう。まっとるぞ~。 備考
https://w.atwiki.jp/akasatanahama/pages/21.html
概要 何の機能もない基本的なブロックを追加する。 ソースコード AluminiumMod.java package tutorial.aluminiummod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; 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.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = "AluminiumMod", name = "Aluminium Mod", version = "1.0.0") public class AluminiumMod { public static Item aluminium; //追加するブロックの宣言 public static Block blockAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { aluminium = new Item() .setCreativeTab(CreativeTabs.tabMaterials) .setUnlocalizedName("aluminium") .setTextureName("aluminiummod aluminium"); GameRegistry.registerItem(aluminium, "aluminium"); //Blockを継承したクラスのインスタンスを生成し、代入する。 blockAluminium = new AluminiumBlock(Material.rock) //システム名の登録 .setBlockName("blockAluminium") //テクスチャ名の登録 .setBlockTextureName("aluminiummod aluminium_block"); //GameRegistryへの登録 GameRegistry.registerBlock(blockAluminium, "blockAluminium"); } } AluminiumBlock.java package tutorial.aluminiummod; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; public class AluminiumBlock extends Block { public AluminiumBlock(Material material) { super(material); //クリエイティブタブの登録 this.setCreativeTab(CreativeTabs.tabBlock); //硬さの設定 this.setHardness(5.0F); //爆破耐性の設定 this.setResistance(10.0F); //ブロックの上を歩いた時の音を登録する。 this.setStepSound(Block.soundTypeMetal); //回収するのに必要なツールを設定する。 this.setHarvestLevel("pickaxe", 2); //明るさの設定 this.setLightLevel(0.0F); } } 解説 Block minecraftのブロックはすべてこのクラスを継承している。 modで追加するブロックもこのクラスを継承することになる。 コンストラクタ(Material material) そのブロックのマテリアルを設定する。 Materialにまとめれているので確認されたし。 Block setBlockName(String name) ブロックのシステム名を登録するメソッド。 Block setBlockTextureName(String name) ブロックのテクスチャを登録するメソッド。 アイテムと同様。 Block setCreativeTab(CreativeTabs tab) ブロックをクリエイティブタブに登録するメソッド。 アイテムと同様。 Block setHardness(float hardness) ブロックの硬さを設定する。 数値を上げると硬くなる。 黒曜石は50.0F。金・ラピスラズリ以外の圧縮ブロックが5.0F。net.minecraft.block.Blockを参照。 Block setResistance(float resistance) ブロックの爆破耐性を設定する。 数値を上げると耐えられる爆発力が高くなる。 黒曜石は2000.0F。圧縮ブロックは10.0F。こちらもnet.minecraft.block.Blockを参照。 Block setStepSound(StepSound sound) ブロックの上を歩いたり、破壊したりしたときになる音の種類を設定する。 void setHarvestLevel(String type, int level) typeで適正ツールの種類を指定、levelでレベルを指定する。 レベルは高いほど要求するツールが強力なものになる。 Block setLightLevel(float level) ブロックの光度を設定する。 ここで渡した値に15をかけたものが光源レベルになる。 0.0~1.0以外は無効。 GameRegistry Block registerBlock(Block block, String name) GameRegistryに追加ブロックを登録するメソッド。 使用例 オファレンブロックを追加する部分。 メタデータなどを使っている箇所は省略した。 +オファレン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) { /*略*/ //ブロックを設定するメソッドを実行 OfalenModBlockCore.registerBlock(); /*略*/ } /*略*/ } OfalenModBlockCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModBlockCore { /*略*/ public static Block blockOfalen; /*略*/ /**ブロックを設定する*/ public static void registerBlock () { /*略*/ blockOfalen = new OfalenBlock() .setBlockName("blockOfalen") .setBlockTextureName("ofalenmod ofalen_block-"); GameRegistry.registerBlock(blockOfalen, ItemOfalenBlock.class, "blockOfalen"); /*略*/ } } OfalenBlock.java package nahama.ofalenmod.block; /*略*/ public class OfalenBlock extends Block { /*略*/ public OfalenBlock() { super(Material.rock); this.setCreativeTab(OfalenModCore.tabOfalen); this.setHardness(7.5F); this.setResistance(15.0F); this.setStepSound(Block.soundTypeMetal); this.setLightLevel(1.0F); this.setHarvestLevel("pickaxe", 3); } /*略*/ } このままテストプレイをしてみると、テクスチャがない状態ではピンクと黒のデフォルトテクスチャになってしまう。 また、名前も、tile.blockAluminium.nameとなる。 これらの解決方法は次回。 コメント この項目に関する質問などをどうぞ。 アルミニウムモッドの時のブロック作成法はないのですか。 - # 2015-07-04 14 49 30 (7月2日までのこのページのソースコードがみたいです。) - # 2015-07-04 14 51 54 ご意見ありがとうございます。現在修正、もしくは併記予定です。 - Tom Kate 2015-07-05 12 22 45 併記する形で修正いたしました。 - Tom Kate 2015-07-05 13 27 24 とても見やすくなってよかったです。ありがとうございます。 - # 2015-07-05 14 46 28 ブロックの面によってテクスチャを変えるにはどうしたらよいのでしょうか - 名無しさん 2015-07-05 20 20 18 ご意見ありがとうございます。使えるメソッドのgetIcon と registerBlockIconsに追記いたしました。 - Tom Kate 2015-07-06 19 56 48 一時的に削除します。「メタデータを持つブロックの追加」で触れるよう修正する予定です。 - 赤砂蛇凪浜 2015-07-10 21 12 56 遅くなりましたが、修正が完了しました。 - 赤砂蛇凪浜 2015-07-23 12 35 35 申し訳ありません blockAluminium = new AluminiumBlock(Material.rock) の部分でなぜかいつもAluminiumBlockのところにエラーが付きますどうすればよいでしょうか?丸コピペしたソースコードを使ってもそうなります - 名無しさん 2015-09-19 15 28 50 クラッシュレポートをクラウドサービスか何かにおいていただいて、urlを送っていただくことはできますか? - Tom Kate 2015-09-19 15 59 11 クラッシュレポートを見せていただければ、こちらで対応いたします。 - Tom Kate 2015-09-19 15 59 49 net.minecraft.block.Blockを参照 と書かれているのですが、どうやって参照するのですか? - 名無しさん 2015-11-01 17 26 38 AluminiumBlock.javaをeclipse上で開き、...extends Block {...のBlockにカーソルを合わせてF3を押せば、Block.classを表示することができます。Blockにはバニラのブロックを追加している部分があるので、そこを見れば、バニラのブロックがどういう設定をされているかを知ることができます。 - 赤砂蛇凪浜 2015-11-04 19 23 57 ブロックを複数追加し、クリエイティブタブも参考にさせていただき作成できました。ですが、ブロック1、ブロック2と数を増やしていくとタブ内での並び順がバラバラになってしまいます。この場合どうすればよいのでしょうか? - 名無しさん 2016-03-05 20 30 20 forge側の不具合で、既存のワールドのクリエイティブタブにアイテム・ブロックを追加すると順序がばらばらになってしまいます。新しくワールドを作り直すと正しい順で表示されると思います。お試しください。 - 赤砂蛇凪浜 2016-03-06 09 15 21 返信ありがとうございます。ワールドを再生成しましたが直りませんでした。。何か設定し忘れているのでしょうか……。ブロックの並び順はブロックIDで決められているのですよね? - 名無しさん 2016-03-07 19 11 47 はい。ブロックIDはMOD側から指定することができないため、基本的にGameRegistryに登録した順ですね。 - 赤砂蛇凪浜 2016-03-07 20 38 17 多分、そこが自分は理解できてないと思うんです。登録順を並べるにはどうすればいいのでしょう?また、registerBlock(X, "Y");このXとYはどういう値にすればうまく並べれるのでしょうか。今は - 名無しさん 2016-03-07 21 40 26 (○○1, "1")、(○○2, "2")という感じになっています - 名無しさん 2016-03-07 21 41 41 おそらく、GameRegistry.registerBlockを呼び出した順だと思われます。 - 赤砂蛇凪浜 2016-03-08 21 37 25 呼び出し順を変える方法を教えて頂きたいです! - 名無しさん 2016-03-09 23 14 39 コード内で記述する順を変えるだけです。 - 赤砂蛇凪浜 2016-03-10 19 21 04 記述する順番はしっかりならべてるんだけどなぁ・・・。どうしても解決できません。。。メタブロックの追加だとうまく表示できたのでそちらに切り替えることにします。初心者に丁寧に教えていただいてありがとうございました!(涙) - 名無しさん 2016-03-13 20 55 45 基本的にできないことはわかっていることを前提として置いて質問します。何か裏技的な形でブロックid - anatawa12 2016-12-16 01 01 27 続き 裏技的な形でブロックidを指定することはできませんか? - anatawa12 2016-12-16 01 03 10 私達も試したことがないためはっきりとしたことは言えません。すみません。以下は軽く調べてみた結果で、間違っている可能性がありますので、ご了承ください。Forgeのシステムに入り込む形で指定することは可能かもしれませんが、簡単ではないと思います。Forgeのブロック追加処理は、GameRegistryからGameData、FMLControlledNamespacedRegistryを経由して行っているようです。ブロックIDは、GameDataやFMLControlledNamespacedRegistryでItem IDとの対応を見ながら決定しているようです。GameData.getMain()がprotectedに指定されているため、代替メソッドを作ろうとしたらそこで詰まりました。 - 赤砂蛇凪浜 2016-12-17 18 26 34 返信ありがとうございます やっぱり難しいですよね 1.7にはたを1.8のidで追加するmodを作ろうと思ったのですが、、 - anatawa12 2016-12-22 15 51 48 質問です。レッドストーンブロックのようにブロックをレッドストーン動力源にするにはどうすればいいのでしょうか? - 名無しさん 2017-01-07 16 00 06 レッドストーンブロックのクラスであるBlockCompressedPoweredを見るとわかると思いますが、以下のようにすればよいです。canProvidePowerをオーバーライドし、常にtrueを返す。isProvidingWeakPowerをオーバーライドし、常に15を返す。 - 赤砂蛇凪浜 2017-01-10 16 06 40 解決しました!! もうひとつ質問なんですけどブロックが光を透過するようにするにはどうすればいいのでしょう。 - 名無しさん 2017-01-11 20 39 31 こっちも解決しました!! .setLightOpacityというメソッドを使いました。 - 名無しさん 2017-01-14 15 12 24 このブロックを階段にするにはどうすればいいですか? - 名無しさん 2017-02-04 16 05 17 返信が遅くなってしまい申し訳ありません。今後チュートリアルを作成する予定です。また、単純な階段ならば、BlockStairsのインスタンスを生成することで実装できます。以下、そのサンプルです。perInitに追記すれば動作します。stairsAluminium = new BlockStairs(blockAluminium, 0).setBlockName("stairsAluminium").setBlockTextureName("aluminiummod aluminium_block");stairsAluminium.setCreativeTab(CreativeTabs.tabBlock);stairsAluminium.setHarvestLevel("pickaxe", 2);stairsAluminium.useNeighborBrightness = true;GameRegistry.registerBlock(stairsAluminium, "stairsAluminium"); - 赤砂蛇凪浜 2017-02-23 17 46 40 名前
https://w.atwiki.jp/blendr/
@wiki BLENDER へようこそ スカルプ ボーン IK多分機能面では多分上位に属するはずのフリーソフト。 2,5の方がチュートリアルが多いのですがあえて最新の2.6で進めます 26と25は結構違うみたいでちょっと面倒・・・・でも安定版らしいので 25の問題クリアーしている新板と期待を込めて やはり26でやり切る事にします。 はっきり言うとこのツール幾つかのツールの複合体のようなソフトで こっちではアレが出来ないコレが出来ない結構多いです。 取り敢えず慣れるしかねぇ だからwikiで細分化して機能メモを取る事にした訳です。 説明ならもっと深いHP等も有りますがその機能を再現したいそれが利用目的ですから。 取り敢えずガチでBLENDERって変態ソフトを使う事にしたので記録メモとしてwikiを作ります。 使いこなせるようにがんばろう。 あと自分の為に作っていますが機能等理解するのに細分化をかなりした記述をするかと思いますので これで理解出来ないならblenderを諦めるか金を積んで学校で教わるしか無いと思います。 3Dツールは基本的に操作関連は意外と操作は実は少なくtipが重くなる傾向が有るのですが BLENDER(3dツール関連はどれも操作系が独特とも言える)はその独特さでちょっと変わっているので 使いこなすよりその部分で挫折します・・・。 むしろ目的が有ってもそれが分からないと言うことが多いせいで挫折している気がする。 と言う訳でメニューを爆発的に増やして対応。。 アニメーションまではやらないのでそれ以前の状態に関して多く書くかと思います。 10キーキーボード+マウスが基本かな? タブレット(液タブ) 10キーレスにはやや不利か? 自分が10キーレスキーボードなので解決する方向でやって行きます。 その代わりに自分には比較的大きなモニター環境が有るのでワークスペースの活用と知識で切り抜けるかと思います。 そしてアフィに関してはその労力と言うことで宜しければお買い上げ頂くと本当に喜びます。 と・・いっても10円20円なのでそう嫌がらないで下さい。。 雀の涙程度です。 まだまだですが基本の基本に大分突っ込んできた行けるのか・・・?って感じですね。 参考書としては薄いのですが100%ムックの解説本はとっつきやすいです。 -
https://w.atwiki.jp/yoshitoimai/pages/3.html
カウンター 今日 - 人 昨日 - 人 合計 - 人 現在-人が閲覧中。 更新履歴 取得中です。
https://w.atwiki.jp/akasatanahama/pages/137.html
概要 Minecraft内のクラス書き換えインターフェイス、"IClassTransformer"を用いてバニラクラスの書き換えを行う。 このチュートリアルはとても難解な内容を含んでいます。 中級編までをひとしきり出来るようになってから挑戦してください。 バニラクラスを書き換えるため競合に注意して行ってください。 事前準備 今回は事前の準備が幾つか必要である。 まず、クラス書き換え用の別ディレクトリをsrc/main/java内に作成する。今回はalcore.asmとする。 ディレクトリを分けずにやると正しく読み込めなくなるため必ずディレクトリを分ける。 次に、coremodとして働かせる(→クラス書き換え用に通常のMODより早く読み込む)MODとして、開発環境とビルド環境にそれぞれ読み込ませる。 今回はcoremodのクラスをalcore.asm.ALCorePluginとする。 ビルド環境 MODのjarファイル内に情報を埋め込めるよう、build.gradleファイルの末尾に以下のコードを追加する。 //manifestファイルの書き込みをビルドに追加する。これにより、coremodの読み込みが可能になる。 //なお、テスト起動時にはこのオプションが効かないためVMオプションに以下の引数を追加する。 //-Dfml.coreMods.load=alcore.asm.ALCorePlugin jar { manifest { //coremodのパスを指定する。 attributes FMLCorePlugin alcore.asm.ALCorePlugin //今回はAluminiummodが別で入っているためそれも読み込む。 attributes FMLCorePluginContainsFMLMod true } } 開発環境 開発環境では上記のものが効かないためVMオプションに以下の引数を追加する。 -Dfml.coreMods.load=alcore.asm.ALCorePlugin ソースコード 今回は、ディレクトリ"tutorial.aluminiummod"でアイテムの追加とレシピの追加及び鉱石の追加を参考にアルミニウムインゴット、アルミニウム鉱石とその精錬レシピまでを実装してある前提で解説する。 もしそこまでのやり方がわからない場合は、一旦上記三つのチュートリアルをよく読んでから戻ってきていただきたい。 ALCorePlugin.java package alcore.asm; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import java.util.Map; public class ALCorePlugin implements IFMLLoadingPlugin { //書き換え機能を実装したクラス一覧を渡す関数。書き方はパッケージ名+クラス名。 @Override public String[] getASMTransformerClass() { return new String[]{"alcore.asm.ALCoreTransformer"}; } //あとは今回は使わない為適当に。 @Override public String getSetupClass() { return null; } @Override public void injectData(Map String, Object data) { } @Override public String getAccessTransformerClass() { return null; } @Override public String getModContainerClass() { return null; } } ALCoreTransformer.java package alcore.asm; import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; import net.minecraft.launchwrapper.IClassTransformer; import org.objectweb.asm.*; import static org.objectweb.asm.Opcodes.*; public class ALCoreTransformer implements IClassTransformer { //IClassTransformerにより呼ばれる書き換え用のメソッド。 @Override public byte[] transform(final String name, final String transformedName, byte[] bytes) { //対象クラス以外を除外する。対象は呼び出し元があるクラスである。 if (!"net.minecraft.tileentity.TileEntityFurnace".equals(transformedName)) return bytes; ClassReader cr = new ClassReader(bytes); ClassWriter cw = new ClassWriter(1); ClassVisitor cv = new ClassVisitor(ASM4, cw) { //クラス内のメソッドを訪れる。 @Override public MethodVisitor visitMethod(int access, String methodName, String desc, String signature, String[] exceptions) { MethodVisitor mv = super.visitMethod(access, methodName, desc, signature, exceptions); //呼び出し元のメソッドを参照していることを確認する。 String s1 = FMLDeobfuscatingRemapper.INSTANCE.mapMethodName(name, methodName, desc); //C \Users\ ユーザー名 \.gradle\caches\minecraft\net\minecraftforge\forge\1.7.10-10.13.4.1558-1.7.10\forge-1.7.10-10.13.4.1558-1.7.10-decomp.jar\より名称を検索、比較してメソッドの難読化名を探す。 if (s1.equals("updateEntity") || s1.equals("func_145845_h") || methodName.equals("updateEntity") || methodName.equals("func_145845_h")) { //もし対象だったらMethodVisitorを差し替える。 mv = new MethodVisitor(ASM4, mv) { //呼び出す予定のメソッドを読み込む。 @Override public void visitMethodInsn(int opcode, String owner, String methodName, String desc, boolean itf) { //書き換え対象のメソッドであることを確認する。 String s2 = FMLDeobfuscatingRemapper.INSTANCE.mapMethodName(name, methodName, desc); if (s2.equals("isBurning") || s2.equals("func_145950_i") || methodName.equals("isBurning") || methodName.equals("func_145950_i")) { //引数として次に渡す値にthisを指定する。 mv.visitVarInsn(ALOAD, 0); //メソッドを読み込む。INVOKESTATICでstaticメソッドを呼び出す。 super.visitMethodInsn(INVOKESTATIC, "alcore/asm/ALCoreHook", "ALFurnaceHook", Type.getMethodDescriptor(Type.VOID_TYPE, Type.getObjectType("net/minecraft/tileentity/TileEntity")), false); //今回はフックを差し込むだけだが、ここで書き換えも出来る。 } //今回は最後に元のクラスを読み込んでreturnする。 super.visitMethodInsn(opcode, owner, methodName, desc, itf); } }; } return mv; } }; cr.accept(cv, ClassReader.EXPAND_FRAMES); return cw.toByteArray(); } } ALCoreHook.java package alcore.asm; import net.minecraft.entity.item.EntityItem; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; import tutorial.aluminiummod.AluminiumMod; public class ALCoreHook { //差し込むフック。フック内の詳細は割愛。簡単に言うと、鉄鉱石とアルミニウムインゴットがある状態で火がついていたら爆発して鉄を撒き散らす。 public static void ALFurnaceHook(TileEntity tileEntity) { if (tileEntity instanceof TileEntityFurnace) { TileEntityFurnace furnace = ((TileEntityFurnace) tileEntity); if (furnace.furnaceBurnTime 0 furnace.getStackInSlot(0) != null furnace.getStackInSlot(0).getItem() == Item.getItemFromBlock(Blocks.iron_ore) furnace.getStackInSlot(2) != null furnace.getStackInSlot(2).getItem() == AluminiumMod.aluminium) { furnace.setInventorySlotContents(0, null); furnace.setInventorySlotContents(1, null); furnace.setInventorySlotContents(2, null); if (!furnace.getWorldObj().isRemote) { furnace.getWorldObj().newExplosion(null, furnace.xCoord, furnace.yCoord, furnace.zCoord, 15, true, true); EntityItem entityItem = new EntityItem(furnace.getWorldObj(), furnace.xCoord, furnace.yCoord, furnace.zCoord, new ItemStack(Items.iron_ingot, furnace.getWorldObj().rand.nextInt(32) + 32)); entityItem.fireResistance = Integer.MAX_VALUE; furnace.getWorldObj().spawnEntityInWorld(entityItem); } } } } } 解説 ALCorePlugin.java public String[] getASMTransformerClass() 書き換えするコードを記述したIClassTransformerを実装してあるクラスを渡す。 配列形式であるため、トランスフォーマーはいくつも追加することが出来る。 public String getModContainerClass() 今回はModとして見えないように実装するため、nullを返してある。 もしModとして見えるようにする(CodeChickenCoreのように別MODとしてリリースする)ならば、DummyModContainerを継承したクラス名をStringで渡す。 ex. "alcore.asm.ALModContainer" ALCoreTransformer.java public byte[] transform(final String name, final String transformedName, byte[] bytes) 書き換えの実態を担うクラス。引数は クラス名、易読化クラス名、バイトコードである。 バイトコードはそのままでは読めない読めたらすごいため、 ClassReader(バイトコードをASMで読めるようにする)→ClassWriter(ClassReaderを書き出せるようにする)→ClassVisitor(内部クラスでクラスを書き換えられるようにする) と手順を踏んで使えるようにする。 最終的にClassWriterをバイトコードに書き出して返す。 間違って別のクラス・メソッドを書き換えてしまってはいけないため、名称でのチェックが必要。 FMLDeobfuscatingRemapper public String mapMethodName(String owner, String name, String desc) クラス名、難読化されたメソッド名、引数記述Type(後述)の順で引数を与えて易読化メソッド名を返す…… はずなのだが、forge1.7.10だと何故かうまく動かない事がある。そのため、コメントの通り難読化されたソースコードと易読化されたものを比較し、難読化名も判定しておいたほうがいい。 ClassVisitor public MethodVisitor visitMethod(int access, String methodName, String desc, String signature, String[] exceptions) ここで、呼び出し元のメソッドをチェックする。今回は"onUpdateEntity"から呼ばれた"isBurning"に対して書き換えを施しているが、もし無差別にあるメソッドを書き換えるならif節は不要。 MethodVisitor public void visitMethodInsn(int opcode, String owner, String methodName, String desc, boolean itf) メソッド内での呼び出しされたメソッドを訪れる。 同様にintやstringなども訪れることが出来る(Methodvisitorのソース参照)。 ここで他のメソッドを呼び出してやることで、書き換えが実現できる。 ビルド・コンパイル coremodが正しく読み込まれているならば以下が出力されているはずである。テストプレイ時はまずこれをチェックしてみてほしい。 Found a command line coremod alcore.asm.ALCorePlugin また、このデータをjarファイルにコンパイルしたらMinecraftのディレクトリにあるmodsフォルダに入れてテストプレイをしたほうが良い。 難読化の都合上環境を変えるとうまく動かないためである。 不具合がある場合はロガーやSystem.out.printInを使って引数や変数の内容を出力させてみるのも手である。 コメント この項目に関する質問などをどうぞ。 名前
https://w.atwiki.jp/blendertips/pages/46.html
全部2.79基準ね T字で作れ 一連の流れ https //www.wwwmaplesyrup-cs6.work/entry/2018/11/01/113345 https //keiki002.com/vr/kuro-eye/ unity用ボーン作成 必要最低限ならこっち むしろMMDモデラー的にはこっちかと 顔もシェイプキーで作るだろうしね 「指は地面に対しそれぞれ平行にまっすぐ伸ばし、親指は他の4指の45度の角度」がUnity推奨らしい http //nick-blender.com/blender/unity_humanoid_armature_making/ https //qiita.com/ousttrue/items/aead1c943855561b62e7 (アドオンあり) blenderオートリグaddon 本格的(♂)なボーン構造作るならこれ(30$) https //blendermarket.com/products/auto-rig-pro http //www.lucky3d.fr/auto-rig-pro/doc/ https //www.youtube.com/watch?time_continue=352 v=dJTo-yllFm4 http //blog.livedoor.jp/ore89da/archives/54229659.html https //note.mu/ig_k/n/nf402aed1c635 ボーン作らんでもMMDモデル名前一括返還すればええんでない? CSV一括リネームアドオン https //www.youtube.com/watch?v=61QXbOFOzBE Cats Blender Plugin https //shinrinmusic.com/cats-blender-plugin-how-to-use/ なんでマテリアルまとめるのかなぁと思ったらVRCの制限的に必要なことらしい Unityに持っていくとき まずblenderで右のシーン設定からメートルに直す スケールを各所アーマチュア,メッシュ共にctrl+Aで1にする blender側でFBX出力するとなぞの-90°がかかるのでそれの修正するやつ https //forum.unity.com/threads/blender-unity-rotation-fix.181870/ FBX出力オプションは -Z前方,Yが上,スケールを適用のすべてFBX,!実験的機能!トランスフォーム適用にする 先端ボーンなくね?って時 先端ボーンにウエイトが載ってないとダメみたい シェイプキー読み込まれなくね?って時 https //tmamagoto.com/blendershape/ マテリアル等の読み込み https //gomafrontier.com/unity/2709 http //am1tanaka.hatenablog.com/entry/2018/02/04/010315 テクスチャ読み込まれなくない?って時 http //icoc-dev.hatenablog.com/entry/2015/11/17/090349 ダイナミックボーン(MMDでいうなら物理演算 髪とか) 20$ https //www.wwwmaplesyrup-cs6.work/entry/2019/07/02/155313 ダイナミックボーンの設定例等 https //vrcworld.wiki.fc2.com/wiki/DynamicBone コライダー(MMDでいうところのボーン追従剛体)設定 https //noshilog.com/unity-dynamic-bone-collider シェーダー https //qiita.com/synqark/items/de1bfb6966669b8606a8 シェーダー比較 http //bibinbaleo.hatenablog.com/entry/2018/09/14/183700 法線関係 https //twitter.com/samia_done/status/1059334757509545984 https //dkrevel.com/2019/09/19/vroid-blend-shape-wrong/ https //twitter.com/K_youhinten/status/1174230529610326016 動かす http //0310unity.hateblo.jp/entry/unity_chan_basic https //www.cg-method.com/entry/unity-chara-run-jump-follow-camera/ http //nn-hokuson.hatenablog.com/entry/2017/07/11/205245 http //baba-s.hatenablog.com/entry/2018/01/31/230200 blenderで作ったアニメーションをunityへ https //qiita.com/ritsuka/items/a8684c52f5320e068f32 blenderドライバー設定でボーンでシェイプキーを動かす http //rt3dcg.blogspot.com/2015/11/blender_28.html 視線IKとまばたきドライバーボーン設定でこんなことできるんじゃねぇかなぁと https //twitter.com/arthur1111k/status/1036122469269102593 他 blenderのFBX読み込みとシェイプキーの順番がおかしいくなるのを防ぎ元と同じ順番にするやつ https //booth.pm/ja/items/1260503 MMDボーンローカル軸 blenderでctrl+Nでグローバル+Z軸で揃える ボーン表示欄のローカル軸設定すればok
https://w.atwiki.jp/bubublender/pages/30.html
Themes テーマ blender全体の色、パネルの色、ポップアップメニューの色、などが設定できます。