約 3,357,682 件
https://w.atwiki.jp/unchama/pages/68.html
このサーバーではクライアントはバニラでも入れますが、 このページではmodを入れてる人向けに、導入許可modおよび推奨mod・禁止modを紹介します。 導入推奨mod Optifine 言わずと知れた軽量化mod MinecraftIM チャットや看板に日本語入力が可能になるmod 導入許可mod SpawnChecker マーカーでmobの湧く場所がわかるmod Rei s Minimap 画面右上に小さなマップを表示するmod ※Rei s Minimapの死亡地点にマーカーを付ける機能はオフにしてください。使ったことが判明した場合、不正行為とみなします。 導入していても差し支えないmod 影modやインベントリ整理modなどの自分のみで周りには一切影響を及ぼさないmod(他人及びサーバーに影響を及ぼす場合は禁止です) アイテム追加系mod(鯖ではアイテムを作れないため意味がありません) 導入禁止mod 高速移動、飛行が出来る等、本来のプレイヤーの動きを超越できるmod ※管理人は運営の都合上飛行している場合があります。ご了承ください。 Xrayなどのチート機能(洞窟内でチェストの場所が分かるなど)があるmod 尚、このようなチートmodは利用が発覚した場合即永久・グローバルBANとなりますのでご注意ください。
https://w.atwiki.jp/tsminecraft/pages/10.html
このページは http //www26.atwiki.jp/minecraft/pages/645.htmlからの引用です 現在のこのページの情報は、竹mod ver2.5.9.7(for Minecraft 1.4.6)時のものです。 MOD名 竹mod 製作者 ruby 配布場所 http //forum.minecraftuser.jp/viewtopic.php?f=13 t=172 前提MOD 【MinecraftForge】 使用Block ID 238-251 (14個) 使用Item ID 3791-3810 (19個) 使用Sprite ID 0個 使用Terrain ID 0個 使用class なし (前提MOD除く) 目次 このMODについて 追加ブロック・アイテム・レシピ一覧 筍・竹・桜について 袋の使い方 実際に設置してのサンプル画像 モブごとの刀の有効度&追加ドロップ一覧 温泉について このMODについて ruby氏作成の、Minecraft世界に竹・桜・畳・ふすま・行灯・和箪笥・布団・温泉といった和の要素を追加するMOD。 追加アイテムの半分は和風インテリア用のデコレーションアイテムだが、 残りの半分には麦飯や串焼き、爆竹に竹槍、透明Lv15光源ブロックこと狐火など、独特のアイテムが揃っている。 夜にほのかに光る桜の木や、湯気の立ち昇る温泉などは、ことさら日本人プレイヤーの心をくすぐる。 露天風呂や純日本家屋を作りたい、和の風景が欲しい人向け。 有志によって一部のテクスチャを32x32サイズに描きなおしたテクスチャパックが幾つか配布されている。 ダウンロード場所:http //forum.minecraftuser.jp/viewtopic.php?f=14 t=5598 (作者:Helve) ダウンロード場所:http //forum.minecraftuser.jp/viewtopic.php?f=13 t=172 start=540#p57500 (作者:z31) ダウンロード場所:http //forum.minecraftuser.jp/viewtopic.php?f=13 t=172 start=600#p60548 (作者:TUMO) 追加ブロック・アイテム・レシピ一覧 1ページ当たりの容量制限の関係で、別ページに分割 筍・竹・桜について ◆筍 MOD導入後に生成された森林・山岳バイオームのChunksにて、一定確率で草・土ブロック上に配置される。 採取方法が特殊で、クワを使って破壊しないと回収できずに消滅する。 回収した筍は、草・土ブロック上にのみ植えられる(というか、真下が草・土ブロックな座標にしか存在できない) 明るさLv7以上の日光以外の光を受けている場合に限り、時間経過により確率で竹に成長する。 骨粉を使うと即座に竹に変化するが、この場合も明るさLv7以上の日光以外の光が必要。 この他、高さ9ブロック以上に成長した竹の、根元の竹を中心とした3x3x3範囲内に一定確率で自然発生する。 (基本的に雨天時に発生しやすいが、雨が降っていない時でも超低確率で発生する) (この自然発生により耕地ブロック上に生成された場合、同時に真下の耕地ブロックを土ブロックに変える) ◆竹 自然配置はされない。明るさLv7以上の日光以外の光を受けた筍が、成長する形でのみ出現する。 サトウキビ同様に障害物判定はなく、すり抜けて移動できる。 サトウキビと違い、隣接マスに水場は必要ない。 筍と違い、成長に明るさは必要ない(明るさLv7以上の日光以外の光は、筍の段階でだけ必要とする) サトウキビと違い、最大で高さ10ブロックまで成長するが、成長スピードはかなり遅い。 素手で破壊できるが、節のどこか一箇所を破壊すると根元から先端まで全部がドロップアイテム化する。 (根元の1ブロックだけを収穫せずに残して、再び生えてくるのを待つ、という事はできない) サボテンやサトウキビと違い、収穫したものをブロックとして再設置できない。景観要員は竹ブロックが担当。 (筍から成長して伸びていったものだけが、マップ上にブロックとして存在できる形になる) 高さ9ブロック以上に成長した竹は、根元の竹を中心とした3x3x3範囲内に一定確率で筍を生やす。 (ただし真下のブロックが土・草・耕地のいずれかである場所にしか筍は出現できない) (耕地の場合、土・草に比べて筍の出現成功率が2倍) (基本的にこの増殖は雨天時に顕著だが、雨が降っていない時であっても超低確率で増える) 骨粉を使うと、即座に1ブロック分成長する(最大10ブロックまで) 高さ10ブロックに達した竹に更に骨粉を使うと、根元を中心とした3x3x3範囲内に高確率で筍が出現。 (真下のブロックが耕地である範囲にはより出現しやすくなる) ◆桜 MOD導入後に生成された森林・山岳バイオームのChunksにて、一定確率で草・土ブロック上に配置される。 葉ブロックはオリジナルのもので、明かりLv10の光源として機能、暗闇ではライトアップされる。 また通常の木と違い、散発的に桜の花びらが舞い散るエフェクトを伴う。 舞い散った桜の花びらが水面に落ちた場合、ごく短時間だが水面に浮く(ただし瞬く間に消滅する) 苗木は通常の木同様、葉ブロックが壊れた時に一定確率で出る。 アイコンは白樺の苗木と全く同じだが、アイテム名&内部データは別物の新規追加アイテム。 (v2.5.9.2以降)バニラの葉ブロックと違い、桜の葉ブロックは原木からの接続が断たれても時間経過で自然消滅しない。 桜の苗木を収集する場合は素手での地味な破壊か、扇子を使って吹き散らすのが推奨される。 (v2.5.9.2以降)原木は、見た目こそ松の原木と同じ見た目だが、BlockID上は別の原木扱い。 主にテクスチャパック作者に配慮した措置であり、バニラテクスチャ時は特に気にする必要がない。 原木を加工して得られる木材は、松の木材を流用しており、独自の木材ではない。 v2.5.6.6から、桜の苗木に骨粉以外の染料を使用すると、色付き桜に成長するようになった(全15色)。 違うのは葉ブロックの色だけで、原木は松、葉ブロックが壊れた際に一定確率で出る苗木も通常のものだが、 きちんと花びらは舞い落ちるし、明かりLv10の光源として暗闇ではライトアップされる。 + (画像で見る) 黒色(ブラック) 赤色(レッド) 緑色(グリーン) 茶色(ブラウン) 青色(ブルー) 紫色(パープル) 水色(シアン) 薄灰(ライトグレー) 灰色(グレー) 桃色(ピンク) 黄緑(ライム) 黄色(イエロー) 空色(ライトブルー) 赤紫(マゼンタ) 橙色(オレンジ) 袋の使い方 1.登録 収納したいブロックとクラフトする事で、そのブロックを袋に登録できる。 登録時に対象のブロックを1つ消費する。 2.収納 袋を手に持った状態でブロックが設置できない遠方を右クリックすると、 プレイヤーのインベントリ内にある登録ブロック全てが袋内に収納される(ただし最大16スタック1024個分まで) ⇒ 3.設置 袋を手に持った状態でブロックが設置できる(=ターゲッティングフレームが出る)近場を右クリックすると、 袋内に収納したブロックを1つ消費してその場所にブロックを設置する。 ⇒ また、スニークしながら(Shiftキーを押しながら)右クリックする事で、水上(溶岩上)にブロックを設置できる。 ただしこの機能が有効なのは液体源ブロックに対してだけで、液体流の上には設置できない。 ⇒ 4.排出 異種のブロックを登録し直すと、その前まで入っていた全ブロックがプレイヤーのインベントリ内に吐き出される。 ⇒ 実際に設置してのサンプル画像 ◆畳ブロック・茅葺きブロック 素手でも超高速撤去できる。 スニークしながら(Shiftキーを押しながら)設置済みの畳・茅葺きブロックを右クリックすると、半ブロック化。 また茅葺きの階段はバニラの階段同様、逆さまに設置する事ができる。 ◆竹柵 設置法則は窓ガラスと同じ。素手でも超高速撤去できる。 強度はさほどでもなく、水流・溶岩流が接触するとアイテム化してしまう。 ◆クッションブロック 撤去にはほんの少しだけ時間がかかる。対応ツールは特に無い。 (左) 一段では高さ16までの落下ダメージしか無効化できない。17以上から落ちるとそのままダメージを喰らう。 (右) 二段重ねると高さ17以上からの落下ダメージも無効化できる。高度250から落ちてもダメージなし。 強度はさほどでもなく、水流・溶岩流が接触するとアイテム化してしまう。 ◆ふすま・障子 どちらも1クリックで撤去可能。 鉄ブロックで示したエリアにプレイヤーが踏み込むと、自動で左右にスライドして開く。 懐き状態のモブ(狼、山猫)には反応するが、それ以外の動物、モンスター、Entityには反応しない。 下の画像のようにスライド先に障害物があったとしても問題なく動作する。 強度は非常に弱く、水流・溶岩流の他、矢による攻撃を受けてすらドロップアイテム化してしまう。 表と裏が同じ模様なふすまに対し、障子は表裏の模様が違い、スニークしながら設置で表裏反転設置ができる。 更に設置後にスニークしながら右クリックすると、自動ドア機能をOn/Offできる。 Offの状態でも右クリックすれば手動で開閉できる。 Offの状態で左クリックするとアイテム化させずに設置位置の微調整ができる。 (左クリック毎にプレイヤーの向いている方角へ0.1ブロック分押し込む) ◆行灯・布団 どちらも1クリックで撤去可能。 行灯は明るさLv13の光源(松明よりもLv1だけ暗い) MC1.2.5までは実体&当たり判定が無かったが、MC1.3.2からは見た目通りの実体&当たり判定を得た。 普通に照明具として使用する。 布団は右クリックで座れ、座ってから5秒待つと太陽&月の動きが早送り、通常の20倍の速さで時間が流れ出す。 ただしMobの動きだとか、作物の成長だとか、かまどの精錬速度とか、そういうものは加速されない。 あくまで加速するのは太陽&月の移動速度だけであり、手っ取り早く昼を夜に、夜を昼にするために使用する。 どちらも水流・溶岩流が接触するとアイテム化する。 ◆風鈴 1クリックで撤去可能。 別に天井に吊るす必要はなく、床・壁・天井、どこにでも自由に設置できる。 設置してあると、稀にチリンと微かな音を立てる他、時間経過によって短冊が揺れたり角度が変わったりする。 水流に押し流されない。 ◆掛け軸 1クリックで撤去可能。 絵画と同じように設置・撤去する。サイズは縦2x横1または縦3x横1のものしかない。 バリエーション豊富。サイズ3のものの絵柄は、主に花札の10点札・20点札のものが使われている。 水流・溶岩流が接触するとアイテム化する。 ◆狐火 狐火を手に持った状態なら1クリックで撤去可能。 明るさLv15の光源。アイテムとしての狐火を手に持った状態でのみ本体を視認できる。 狐火を手に持っていない状態では視認できず、完全に透明に。 v2.4.0から透明状態のは左クリックしても撤去できなくなった。狐火を持った状態でのみ撤去回収できる。 ただし透明状態であっても、水流・溶岩流が接触した場合は押し流されてアイテム化する。 モブごとの刀の有効度&追加ドロップ一覧 v2.5.8.5(MC1.4.2)から追加。 肉体を持つモブには効果が高いが、逆に肉体を持たないモブにはほとんど効果がない武器。 耐久値は151しかなく、鉄の剣の6割に相当。 刀によるダメージでトドメを刺した場合、(基本的に低確率でだが)追加ドロップが発生する事がある。 + (ネタバレに付き格納、クリックで開く) 通常のレアドロップ(刀で倒さなくても1%程度の確率で落とす)との混同に注意。 モブの種類 ダメージ 刀限定の追加ドロップ 鶏 6.0 小麦の種0-2(期待値0.3) 豚 6.0 皮0-1(期待値0.4) 羊 6.0 クモ糸0-2(期待値0.4) 雑草0-1(期待値0.25) 牛 6.0 雑草0-1(期待値0.25) キノコ牛 6.0 雑草0-1(期待値0.25) 狼 6.0 牛肉0-1(期待値0.2) 豚肉0-1(期待値0.2) 鶏肉0-1(期待値0.2) 羽根0-1(期待値0.2) 骨0-1(期待値0.2) 山猫 6.0 生魚0-2(期待値1.0) 蝙蝠 6.0 リンゴ0-1(期待値0.3) クリーパー 4.0 - ゾンビ 4.0 皮(期待値0.2) 骨(期待値0.2) ゾンビピッグマン 4.0 皮(期待値0.2) 骨(期待値0.2) ガスト 3.0 TNT1(期待値1.0) ファイアチャージ1-2(期待値1.5) エンダーマン 3.0 黄の花0-1(期待値0.2) 赤の花0-1(期待値0.2) 茶キノコ0-1(期待値0.2) 赤キノコ0-1(期待値0.2) シルバーフィッシュ 3.0 紙0-2(期待値1.0) ウィッチ 3.0 蓮の葉0-1(期待値0.5) スパイダー 3.0 - ケイブスパイダー 3.0 - イカ 3.0 - 村人 3.0 - ブレイズ 2.5 - スケルトン 1.0 - ウィザースケルトン 1.0 - スノーゴーレム 0.5 - アイアンゴーレム 0.5 - スライム 0.0 - マグマキューブ 0.0 - 温泉について ただしv2.5.9.2以降は10~20秒間、移動せずにじっと温泉に浸かっていないとポーション効果は付かなくなった。また、最低でも縦横2x2サイズ以上でないと、狭すぎてくつろげないからかポーション効果が付かなくなった。 ピストンのような見た目だが、素手でも1クリックで撤去可能。 設置した温泉ユニットを右クリックするとonになり、非常に緩慢な速度でだが徐々にお湯が湧き出し周囲に広がる。 ⇒ 上方向に対しては、温泉ユニットが設置された段を底部と見なしつつ高さ1までしかお湯は張られないが、 横方向に対しては、お湯をせき止めるための敷居が無い場合、際限なくあふれ広がっていく(8マスで止まらない) 下方向に対しても、段差があるならばそれを下りつつどんどん下へと流れ落ちていく。 広がっていく最中や、段差がある場所においては、通常の水源と同じような水流が発生するが、 この水流は見た目だけのものであり、通常の水流と違ってプレイヤーやMob、ドロップアイテムを押し流す作用は持たない。 (ボートを浮かべる事はできるが、やはりプレイヤーの入力操作でしか動かない) そのまま浸かっても、およそ4秒毎にハート0.5個分のペースで徐々に体力が回復する効果がある。 染料(全16色)を投げ込むと、投げ込んだ染料に応じてお湯に色がつく。 特定の色を一定数以上投げ込むと、透明温泉時の徐々に体力回復効果が失われる代わりに、 浸かった際に色に応じて特定のポーション効果が得られるようになる。 しかし、投げ込みすぎると毒の温泉になってしまい、浸かると毒の状態異常に冒されるようになる。 もっとも、5~6個程度の染料を投げ込んだ程度では効果は得られず、 おおよそ20~40個、染料によってはもっと大量に投げ込まないとポーション効果は発現せず、湯の色も変わらない。 また、続けて複数の温泉に入る事で簡単に複数のポーション効果を得るのを防止する措置で、 一度ポーション効果ありの温泉に入ると、1分経過しなければ他の温泉に入っても効果が得られないようになっている。 更に、バケツetc.で汲み取ると普通の水になってしまう。当然ながら色や効果も反映されない。 on状態の温泉ユニットをもう一度右クリックするとoffになり、 その温泉ユニットから溢れ出した全ての温泉水が高速で回収・撤去される。 この時に染料の投入情報もリセットされ、再度onにすると再び何の効果もない無色の温泉水が湧き出す。 温泉の色とポーション効果は次のように決まる + (ネタバレに付き格納、クリックで開く) 無色系 入浴中のみ 約4秒毎にハート0.5個分体力回復。ポーション効果ではなく別物扱い。 赤系 効果時間 4分 Strength II (攻撃力+3.0) の効果 青系 効果時間 4分 Speed II (移動速度+40%) の効果 緑系 効果時間 3分 Fire Resistance (炎・溶岩・雷無効) の効果 灰系 効果時間 1分 Regeneration II (0.5秒毎にハート0.5個分体力回復) の効果 入れ過ぎ 効果時間 1分 Poison II (0.5秒毎に0.5ダメージ) の効果 ポーション効果は固定であり、染料の投入数によって効果がパワーアップしたり、効果時間が延びたりはしない。 三原色の法則が適用されている。 赤・青・緑のどの色相の値も一定値以下 → ただの温泉 三種の色相の内、赤の値が一定以上、かつ他の二色よりも突出して高い。 → Strength II (4分間) 三種の色相の内、青の値が一定以上、かつ他の二色よりも突出して高い。 → Speed II (4分間) 三種の色相の内、緑の値が一定以上、かつ他の二色よりも突出して高い。 → Fire Resistance (3分間) 三種の色相の内、いずれか二色の値が高く、残り一色が突出して低い。 → ただの温泉 三種の色相が均等に混ざり、かつ混色の度合いが強すぎず弱すぎず → Regeneration II (1分間) 三種の色相が均等に混ざり、ただし混色が進みすぎて黒化が一定以上 → Poison II (1分間) 白(ホワイト) Bone Meal 何個投入しても温泉の色に全く影響を与えない。 黒(ブラック) Ink Sac 何個投入しても温泉の色に全く影響を与えない。 黄(イエロー) Dandelion Yellow 【1~128】ただの温泉 橙(オレンジ) Orange Dye 【1~128】ただの温泉 紫(パープル) Purple Dye 【1~128】ただの温泉 赤色(レッド) Rose Red 【1~32】ただの温泉 【33~128】攻撃 青色(ブルー) Lapis Lazuli 【1~32】ただの温泉 【33~128】加速 緑色(グリーン) Cactus Green 【1~32】ただの温泉 【33~128】耐火 桃色(ピンク) Pink Dye 【1~32】ただの温泉 【33~40】攻撃 【41~64】ただの温泉 【65~128】毒 空色(ライトブルー) Light Blue Dye 【1~32】ただの温泉 【33~40】加速 【41~64】ただの温泉 【65~128】毒 黄緑色(ライム) Lime Dye 【1~32】ただの温泉 【33~40】耐火 【41~64】ただの温泉 【65~128】毒 水色(シアン) Cyan Dye 【1~40】ただの温泉 【41~64】再生 【65~128】毒 灰色(グレー) Gray Dye 【1~40】ただの温泉 【41~64】再生 【65~128】毒 薄灰色(ライトグレー) Light Gray 【1~80】ただの温泉 【81~128】再生 赤紫色(マゼンタ) Magenta Dye 【1~20】ただの温泉 【21~32】再生 【33~128】毒 茶(ブラウン) Cocoa Beans 【1~16】ただの温泉 【17~32】攻撃 【33~128】毒
https://w.atwiki.jp/gtasa-vehicles/pages/633.html
何処にあるかは不明な配送会社。通称LSD。 ラスベンチュラス空港の周辺で、ここのロゴが入ったBensonが走っている。
https://w.atwiki.jp/mcheli/pages/22.html
Ver 0.6.0 2013/12/28 Mk.15 ファランクス CIWS 追加 Mk.15 mod.31 SeaRAM 追加 オート・メラーラ76mm砲 追加 エンブラエル EMB-314 追加 セスナ 172 追加 水上戦闘機 強風 追加 A-10 サンダーボルトⅡ 追加 Bell47G 追加 Bell47GF 追加 BAe ハリアー II(英)のテクスチャ修正 AV-8B ハリアー II(米)のテクスチャ修正 Forgeのバージョンを1.6.4最新のRecommended 1.6.4-9.11.1.965 に変更 VTOLモード時、MV-22 オスプレイのみヘリコプターのように速く移動できるように変更 ヘリコプター・戦闘機の耐久値を機体ごとに設定できるように変更 ヘリコプター・戦闘機の耐久値を下げた 弾丸のみOBJ形式のモデルの読み込みに対応 叩いてアイテム化したとき、ダメージを引き継ぐように変更(コンフィグから機能のON/OFF可) PageUp/Downで3人称視点でのカメラ距離を変更 不具合修正 プレイヤーが下りた時、機体の上に降りてしまい身動きが取れなくなるバグを修正
https://w.atwiki.jp/portal2_mod/pages/14.html
ダウンロードしたbspファイルを
https://w.atwiki.jp/factangmemo/pages/16.html
導入MOD MOD名 バージョン ○○○○ ○月○日 ○○○○(予定) ○月○日(予定)
https://w.atwiki.jp/akasatanahama/pages/106.html
概要 MOD製作チュートリアル/TileEntityの追加で追加したTileEntityにGUI(Graphical User Interface)を実装する。 動作確認済バージョン:1.7.10-10.13.4.1558 ソースコード AluminiumMod.java package tutorial.aluminiummod; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; @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"; @Instance(MODID) public static AluminiumMod instance; public static Block chestAluminium; @EventHandler public void perInit(FMLPreInitializationEvent event) { chestAluminium = new BlockAluminiumChest() .setBlockName("chestAluminium") .setBlockTextureName("aluminiummod Aluminium_Chest"); GameRegistry.registerBlock(chestAluminium, "chestAluminium"); GameRegistry.registerTileEntity(TileEntityAluminiumChest.class, "TileEntityAluminiumChest"); NetworkRegistry.INSTANCE.registerGuiHandler(this.instance, new AluminiumModGuiHandler()); } } BlockAluminiumChest.java package tutorial.aluminiummod; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class BlockAluminiumChest extends Block implements ITileEntityProvider { private Random random = new Random(); public BlockAluminiumChest() { super(Material.rock); this.setCreativeTab(CreativeTabs.tabDecorations); this.setHardness(5.0F); this.setResistance(1.0F); this.setStepSound(soundTypeMetal); isBlockContainer = true; } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityAluminiumChest(); } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { // GUIを開く。 player.openGui(AluminiumMod.instance, 1, world, x, y, z); return true; } @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // TileEntityの内部にあるアイテムをドロップさせる。 TileEntityAluminiumChest tileentity = (TileEntityAluminiumChest) world.getTileEntity(x, y, z); if (tileentity != null) { for (int i = 0; i tileentity.getSizeInventory(); i++) { ItemStack itemStack = tileentity.getStackInSlot(i); if (itemStack != null) { float f = random.nextFloat() * 0.6F + 0.1F; float f1 = random.nextFloat() * 0.6F + 0.1F; float f2 = random.nextFloat() * 0.6F + 0.1F; while (itemStack.stackSize 0) { int j = random.nextInt(21) + 10; if (j itemStack.stackSize) { j = itemStack.stackSize; } itemStack.stackSize -= j; EntityItem entityItem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemStack.getItem(), j, itemStack.getItemDamage())); if (itemStack.hasTagCompound()) { entityItem.getEntityItem() .setTagCompound(((NBTTagCompound) itemStack.getTagCompound().copy())); } float f3 = 0.025F; entityItem.motionX = (float) random.nextGaussian() * f3; entityItem.motionY = (float) random.nextGaussian() * f3 + 0.1F; entityItem.motionZ = (float) random.nextGaussian() * f3; world.spawnEntityInWorld(entityItem); } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, meta); } } TileEntityAluminiumChest.java package tutorial.aluminiummod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityAluminiumChest extends TileEntity implements IInventory { protected ItemStack[] itemStacks = new ItemStack[54]; @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i itemStacks.length; i++) { if (itemStacks[i] == null) continue; NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("Slot", (byte) i); itemStacks[i].writeToNBT(nbt1); nbttaglist.appendTag(nbt1); } nbt.setTag("Items", nbttaglist); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList nbttaglist = nbt.getTagList("Items", 10); itemStacks = new ItemStack[54]; for (int i = 0; i nbttaglist.tagCount(); i++) { NBTTagCompound nbt1 = nbttaglist.getCompoundTagAt(i); byte b0 = nbt1.getByte("Slot"); if (0 = b0 b0 itemStacks.length) { itemStacks[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } } @Override public int getSizeInventory() { return 54; } @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } @Override public ItemStack decrStackSize(int slot, int amount) { if (itemStacks[slot] == null) return null; ItemStack itemstack; if (itemStacks[slot].stackSize = amount) { itemstack = itemStacks[slot]; itemStacks[slot] = null; return itemstack; } itemstack = itemStacks[slot].splitStack(amount); if (itemStacks[slot].stackSize 1) { itemStacks[slot] = null; } return itemstack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { return null; } @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { itemStacks[slot] = itemStack; if (itemStack != null itemStack.stackSize this.getInventoryStackLimit()) { itemStack.stackSize = this.getInventoryStackLimit(); } } @Override public boolean hasCustomInventoryName() { return false; } @Override public String getInventoryName() { return "container.AluminiumMod.AluminiumChest"; } @Override public int getInventoryStackLimit() { return 64; } @Override public boolean isUseableByPlayer(EntityPlayer player) { return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) = 64.0D; } @Override public void openInventory() {} @Override public void closeInventory() {} @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return true; } } AluminiumModGuiHandler.java package tutorial.aluminiummod; import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; public class AluminiumModGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAluminiumChest) { return new ContainerAluminiumChest(player, (TileEntityAluminiumChest) tileentity); } return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntityAluminiumChest) { return new GuiAluminiumChest(player, (TileEntityAluminiumChest) tileentity); } return null; } } ContainerAluminiumChest.java package tutorial.aluminiummod; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerAluminiumChest extends Container { private TileEntityAluminiumChest tileEntity; /** アルミニウムチェストのインベントリの第一スロットの番号 */ private static final int index0 = 0; /** プレイヤーのインベントリの第一スロットの番号 */ private static final int index1 = 54; /** クイックスロットの第一スロットの番号 */ private static final int index2 = 81; /** このコンテナの全体のスロット数 */ private static final int index3 = 90; public ContainerAluminiumChest(EntityPlayer player, TileEntityAluminiumChest tileEntity) { // スロットを設定する。 this.tileEntity = tileEntity; for (int iy = 0; iy 6; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(tileEntity, ix + (iy * 9), 8 + (ix * 18), 18 + (iy * 18))); } } for (int iy = 0; iy 3; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix + (iy * 9) + 9, 8 + (ix * 18), 140 + (iy * 18))); } } for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix, 8 + (ix * 18), 198)); } } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity.isUseableByPlayer(player); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { ItemStack itemStack = null; Slot slot = (Slot) inventorySlots.get(slotNumber); if (slot != null slot.getHasStack()) { ItemStack itemStack1 = slot.getStack(); itemStack = itemStack1.copy(); if (index0 = slotNumber slotNumber index1) { // アルミニウムチェストのインベントリならプレイヤーのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index1, index3, true)) { return null; } } else { // プレイヤーのインベントリならアルミニウムチェストのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index0, index1, false)) { return null; } } if (itemStack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); } if (itemStack1.stackSize == itemStack.stackSize) { return null; } slot.onPickupFromSlot(player, itemStack1); } return itemStack; } } GuiAluminiumChest.java package tutorial.aluminiummod; import org.lwjgl.opengl.GL11; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class GuiAluminiumChest extends GuiContainer { private TileEntityAluminiumChest tileEntity; // GUIのテクスチャの場所を指定する。今回はバニラのラージチェストと同じものを使う。 private static final ResourceLocation GUITEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); public GuiAluminiumChest(EntityPlayer player, TileEntityAluminiumChest tileEnttiy) { super(new ContainerAluminiumChest(player, tileEnttiy)); this.tileEntity = tileEnttiy; ySize = 222; } @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { fontRendererObj.drawString(StatCollector.translateToLocal(tileEntity.getInventoryName()), 8, 6, 4210752); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float tick, int mouseX, int mouseY) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(GUITEXTURE); int k = (width - xSize) / 2; int l = (height - ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, xSize, ySize); } } 解説 Instance String modid コアクラスのインスタンスにつけるアノテーション。 登録やインスタンスの生成・代入はForge側がやってくれるので何もしなくてよい。 NetworkRegistry GUIやパケットなどを管理するenum。 void registerGuiHandler(Object mod, IGuiHandler handler) MODのコアクラスのインスタンスと、それに対応したGuiHandlerを登録する処理。 EntityPlayer プレイヤーのEntity継承クラス。 void openGui(Object mod, int modGuiId, World world, int x, int y, int z) 第一引数はコアクラスのインスタンス、第二引数はMOD内でのGUIのID。 プレイヤーにGUIを開かせる。 IGuiHandler GuiHandlerのためのインターフェース。 Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) サーバー側で呼ばれる。 基本的にはIDに対応したContainerを返す。 Worldのインスタンスと座標も引数に含まれているので、TileEntityを取得して判別してもよい。 Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) クライアント側で呼ばれる。 基本的にはIDに対応したGuiを返す。 Container Slot addSlotToContainer(Slot slot) 新たなSlotをコンテナに登録する処理。 boolean canInteractWith(EntityPlayer player) プレイヤーがコンテナを使えるかどうかの判定。 ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) スロットがShift+クリックされた時の処理。 クリックされたスロットの中身を移動する。 boolean mergeItemStack(ItemStack itemStack, int beginIndex, int endIndex, boolean doReverse) 引数のItemStackを指定された範囲内の空のスロットに移動する。 範囲は、beginIndexを含み、endIndexは含まない。 doReverseがtrueの場合は、検索方向がend→beginになる。 GuiContainer コンテナを持つGUIのクラス。 クライアントのみで使用される。 public GuiContainer(Container container) 引数は対応するコンテナ。 void drawGuiContainerForegroundLayer(int mouseX, int mouseY) Guiの前面レイヤーを描画する処理。 文字の描画などをする。 void drawGuiContainerBackgroundLayer(float tick, int mouseX, int mouseY) Guiの背景レイヤーを描画する処理。 Guiのテクスチャの描画などをする。 ResourceLocation リソースの場所を保持するクラス。 public ResourceLocation(String path) コンストラクタ。 引数でリソースの場所を指定する。 "modid textures/..."というように、すべて小文字にしたMODIDと、textures以下のファイルのパスを指定する。 例えば、assets/aluminiummod/textures/gui/gui.pngだとすると、private static final ResourceLocation GUITEXTURE = new ResourceLocation("aluminiummod textures/gui/gui.png");と記述する。 なお、GUIのテクスチャは画像ファイルを正方形にしないと縦横比がおかしくなる可能性があるので、カンバスサイズを256x256や512x512などにしておいて、余白を透明で残しておくと良い。 使用例 オファレンプレゼントボックスを追加している部分。 +オファレン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 MCVERSION = "1.7.10"; public static final String OMVERSION = "1.1.0"; public static final String VERSION = "[" + MCVERSION + "]" + OMVERSION; /** coreクラスのインスタンス */ @Instance(MODID) public static OfalenModCore instance; /*略*/ /** 初期化前処理。 */ @EventHandler public void preInit(FMLPreInitializationEvent event) { /*略*/ OfalenModBlockCore.registerBlock(); // 機械類のGUIを登録する。 NetworkRegistry.INSTANCE.registerGuiHandler(this.instance, new OfalenModGuiHandler()); /*略*/ } /*略*/ } OfalenModBlockCore.java package nahama.ofalenmod.core; /*略*/ public class OfalenModBlockCore { /*略*/ public static Block boxPresentOfalen; /** ブロックを登録する処理。 */ public static void registerBlock() { /*略*/ boxPresentOfalen = new BlockPresentBox() .setBlockName("boxPresentOfalen") .setBlockTextureName("ofalenmod present_box"); GameRegistry.registerBlock(boxPresentOfalen, "boxPresentOfalen"); GameRegistry.registerTileEntity(TileEntityPresentBox.class, "TileEntityOfalenPresentBox"); } } BlockPresentBox.java package nahama.ofalenmod.block; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import nahama.ofalenmod.OfalenModCore; import nahama.ofalenmod.handler.OfalenModAnniversaryHandler; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.block.Block; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.World; public class BlockPresentBox extends Block implements ITileEntityProvider { private Random random = new Random(); /** 0 下,1 上,2 横,3 クリスマス下,4;クリスマス上,5 クリスマス横 */ private IIcon[] iicon = new IIcon[6]; public BlockPresentBox() { super(Material.sponge); this.setCreativeTab(OfalenModCore.tabOfalen); this.setHardness(1.0F); this.setResistance(1.0F); this.setStepSound(Block.soundTypeCloth); } @Override public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityPresentBox(); } /** プレイヤーに右クリックされたときの処理。 */ @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { // GUIを開く player.openGui(OfalenModCore.instance, 1, world, x, y, z); return true; } /** ブロックが破壊された時の処理。 */ @Override public void breakBlock(World world, int x, int y, int z, Block block, int meta) { // TileEntityの内部にあるアイテムをドロップさせる。 TileEntityPresentBox tileentity = (TileEntityPresentBox) world.getTileEntity(x, y, z); if (tileentity != null) { for (int i = 0; i tileentity.getSizeInventory(); i++) { ItemStack itemStack = tileentity.getStackInSlot(i); if (itemStack != null) { float f = random.nextFloat() * 0.6F + 0.1F; float f1 = random.nextFloat() * 0.6F + 0.1F; float f2 = random.nextFloat() * 0.6F + 0.1F; while (itemStack.stackSize 0) { int j = random.nextInt(21) + 10; if (j itemStack.stackSize) { j = itemStack.stackSize; } itemStack.stackSize -= j; EntityItem entityItem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemStack.getItem(), j, itemStack.getItemDamage())); if (itemStack.hasTagCompound()) { entityItem.getEntityItem().setTagCompound(((NBTTagCompound) itemStack.getTagCompound().copy())); } float f3 = 0.025F; entityItem.motionX = (float) random.nextGaussian() * f3; entityItem.motionY = (float) random.nextGaussian() * f3 + 0.1F; entityItem.motionZ = (float) random.nextGaussian() * f3; world.spawnEntityInWorld(entityItem); } } } world.func_147453_f(x, y, z, block); } super.breakBlock(world, x, y, z, block, meta); } /** ブロックのアイコンを登録する処理。 */ @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { for (int i = 0; i 6; i++) { iicon[i] = register.registerIcon(this.getTextureName() + "-" + i); } } /** ブロックのアイコンを返す。 */ @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { int i = 2; if (side == 0) i = 0; if (side == 1) i = 1; if (OfalenModAnniversaryHandler.isChristmas) i += 3; return iicon[i]; } } TileEntityPresentBox.java package nahama.ofalenmod.tileentity; import nahama.ofalenmod.handler.OfalenModAnniversaryHandler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntityPresentBox extends TileEntity implements IInventory { protected ItemStack[] itemStacks = new ItemStack[54]; protected String owner; /** プレイヤーがインベントリを開けた時の処理。 */ public void openInventory(EntityPlayer player) { if (owner != null || worldObj.isRemote) return; // オーナーに設定し、中身を上書きする。 owner = player.getCommandSenderName(); ItemStack[] presents = OfalenModAnniversaryHandler.getPresents(player); if (presents == null) return; itemStacks = presents; } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i itemStacks.length; i++) { if (itemStacks[i] == null) continue; NBTTagCompound nbt1 = new NBTTagCompound(); nbt1.setByte("Slot", (byte) i); itemStacks[i].writeToNBT(nbt1); nbttaglist.appendTag(nbt1); } nbt.setTag("Items", nbttaglist); nbt.setString("Owner", owner); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList nbttaglist = nbt.getTagList("Items", 10); itemStacks = new ItemStack[54]; for (int i = 0; i nbttaglist.tagCount(); i++) { NBTTagCompound nbt1 = nbttaglist.getCompoundTagAt(i); byte b0 = nbt1.getByte("Slot"); if (0 = b0 b0 itemStacks.length) { itemStacks[b0] = ItemStack.loadItemStackFromNBT(nbt1); } } owner = nbt.getString("Owner"); } /** インベントリのスロット数を返す。 */ @Override public int getSizeInventory() { return 54; } /** スロットのアイテムを返す。 */ @Override public ItemStack getStackInSlot(int slot) { return itemStacks[slot]; } /** スロットのスタック数を減らす。 */ @Override public ItemStack decrStackSize(int slot, int amount) { if (itemStacks[slot] == null) return null; ItemStack itemstack; if (itemStacks[slot].stackSize = amount) { itemstack = itemStacks[slot]; itemStacks[slot] = null; return itemstack; } itemstack = itemStacks[slot].splitStack(amount); if (itemStacks[slot].stackSize 1) { itemStacks[slot] = null; } return itemstack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { return null; } /** スロットの中身を設定する。 */ @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { itemStacks[slot] = itemStack; if (itemStack != null itemStack.stackSize this.getInventoryStackLimit()) { itemStack.stackSize = this.getInventoryStackLimit(); } } /** 金床で設定された名前を持つかどうか。 */ @Override public boolean hasCustomInventoryName() { return false; } /** インベントリの名前を返す。 */ @Override public String getInventoryName() { return "container.OfalenMod.PresentBox"; } /** このインベントリの最大スタック数を返す。 */ @Override public int getInventoryStackLimit() { return 64; } /** プレイヤーが使用できるかどうか。 */ @Override public boolean isUseableByPlayer(EntityPlayer player) { if (owner != null !player.getCommandSenderName().equals(owner)) return false; return worldObj.getTileEntity(xCoord, yCoord, zCoord) != this ? false player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) = 64.0D; } @Override public void openInventory() {} @Override public void closeInventory() {} /** スロットにアクセスできるかどうか。 */ @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return false; } } OfalenModGuiHandler.java package nahama.ofalenmod.handler; /*略*/ public class OfalenModGuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (id == 2) return new ContainerItemShield(player); if (id == 3) return new ContainerItemTeleporter(player); if (id == 4) return new ContainerItemFloater(player); if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntitySmeltingMachine) { return new ContainerSmeltingMachine(player, (TileEntitySmeltingMachine) tileentity); } if (tileentity instanceof TileEntityRepairMachine) { return new ContainerRepairMachine(player, (TileEntityRepairMachine) tileentity); } if (tileentity instanceof TileEntityConversionMachine) { return new ContainerConversionMachine(player, (TileEntityConversionMachine) tileentity); } if (tileentity instanceof TileEntityTeleportMarker) { return new ContainerTeleportMarker(player, (TileEntityTeleportMarker) tileentity); } if (tileentity instanceof TileEntityPresentBox) { return new ContainerPresentBox(player, (TileEntityPresentBox) tileentity); } return null; } @Override public Object getClientGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) { if (id == 2) return new GuiItemShield(player); if (id == 3) return new GuiItemTeleporter(player); if (id == 4) return new GuiItemFloater(player); if (!world.blockExists(x, y, z)) return null; TileEntity tileentity = world.getTileEntity(x, y, z); if (tileentity instanceof TileEntitySmeltingMachine) { return new GuiSmeltingMachine(player, (TileEntitySmeltingMachine) tileentity); } if (tileentity instanceof TileEntityRepairMachine) { return new GuiRepairMachine(player, (TileEntityRepairMachine) tileentity); } if (tileentity instanceof TileEntityConversionMachine) { return new GuiConversionMachine(player, (TileEntityConversionMachine) tileentity); } if (tileentity instanceof TileEntityTeleportMarker) { return new GuiTeleportMarker(player, (TileEntityTeleportMarker) tileentity); } if (tileentity instanceof TileEntityPresentBox) { return new GuiPresentBox(player, (TileEntityPresentBox) tileentity); } return null; } } ContainerPresentBox.java package nahama.ofalenmod.inventory; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; public class ContainerPresentBox extends Container { private TileEntityPresentBox tileEntity; /** プレゼントボックスのインベントリの第一スロットの番号 */ private static final int index0 = 0; /** プレイヤーのインベントリの第一スロットの番号 */ private static final int index1 = 54; /** クイックスロットの第一スロットの番号 */ private static final int index2 = 81; /** このコンテナの全体のスロット数 */ private static final int index3 = 90; public ContainerPresentBox(EntityPlayer player, TileEntityPresentBox tileEntity) { this.tileEntity = tileEntity; tileEntity.openInventory(player); for (int iy = 0; iy 6; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(tileEntity, ix + (iy * 9), 8 + (ix * 18), 18 + (iy * 18))); } } for (int iy = 0; iy 3; iy++) { for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix + (iy * 9) + 9, 8 + (ix * 18), 140 + (iy * 18))); } } for (int ix = 0; ix 9; ix++) { this.addSlotToContainer(new Slot(player.inventory, ix, 8 + (ix * 18), 198)); } } @Override public boolean canInteractWith(EntityPlayer player) { return tileEntity.isUseableByPlayer(player); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int slotNumber) { ItemStack itemStack = null; Slot slot = (Slot) inventorySlots.get(slotNumber); if (slot != null slot.getHasStack()) { ItemStack itemStack1 = slot.getStack(); itemStack = itemStack1.copy(); if (index0 = slotNumber slotNumber index1) { // プレゼントボックスのインベントリならプレイヤーのインベントリに移動。 if (!this.mergeItemStack(itemStack1, index1, index3, true)) { return null; } } else { if (index1 = slotNumber slotNumber index2) { // プレイヤーのインベントリならクイックスロットに移動。 if (!this.mergeItemStack(itemStack1, index2, index3, false)) { return null; } } else if (index2 = slotNumber slotNumber index3 !this.mergeItemStack(itemStack1, index1, index2, false)) { // クイックスロットからプレイヤーのインベントリに移動できなかったら終了。 return null; } } if (itemStack1.stackSize == 0) { slot.putStack((ItemStack) null); } else { slot.onSlotChanged(); } if (itemStack1.stackSize == itemStack.stackSize) { return null; } slot.onPickupFromSlot(player, itemStack1); } return itemStack; } } GuiPresentBox.java package nahama.ofalenmod.gui; import org.lwjgl.opengl.GL11; import nahama.ofalenmod.inventory.ContainerPresentBox; import nahama.ofalenmod.tileentity.TileEntityPresentBox; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ResourceLocation; import net.minecraft.util.StatCollector; public class GuiPresentBox extends GuiContainer { private TileEntityPresentBox tileEntity; private static final ResourceLocation GUITEXTURE = new ResourceLocation("textures/gui/container/generic_54.png"); public GuiPresentBox(EntityPlayer player, TileEntityPresentBox tileEnttiy) { super(new ContainerPresentBox(player, tileEnttiy)); this.tileEntity = tileEnttiy; ySize = 222; } @Override protected void drawGuiContainerForegroundLayer(int par1, int par2) { fontRendererObj.drawString(StatCollector.translateToLocal(tileEntity.getInventoryName()), 8, 6, 4210752); fontRendererObj.drawString(StatCollector.translateToLocal("container.inventory"), 8, ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); mc.getTextureManager().bindTexture(GUITEXTURE); int k = (width - xSize) / 2; int l = (height - ySize) / 2; this.drawTexturedModalRect(k, l, 0, 0, xSize, ySize); } } コメント この項目に関する質問などをどうぞ。 GUIのテクスチャをオリジナルのものにする場合どう記述すれば、よいのでしょうか? - 新人もっだー 2015-12-20 12 20 13 解説/public ResourceLocation(String path)に追記しましたのでご確認ください。自分で指定したパスにバニラのラージチェストのテクスチャを改変したものを保存すればできます。 - Tom Kate 2015-12-21 16 52 24 コピペでもコンストラクター ContainerAluminiumChest(EntityPlayer, TileEntityChest) は未定義ですとなります。 - 新人もっだー 2015-12-26 11 26 55 それは、Eclipse上でコンパイルエラーの検出がされたということでしょうか?どの行でのエラーかを教えていただけないでしょうか。 - 赤砂蛇凪浜 2015-12-26 13 48 01 ContainerAluminiumChestのreturn new ContainerChest(player, (TileEntityChest) tileentity);no - 新人もっだー 2015-12-28 08 51 55 の行です - 新人もっだー 2015-12-28 08 52 37 このチュートリアルの中に該当する行がありません。一度コピー ペーストしなおしてみてください。 - 赤砂蛇凪浜 2015-12-28 09 36 26 import cpw.mods.fml.common.Mod.Instance;が書き込んでから保存するとなぜかそれだけ消えてしまうのですが、なんで何でしょうか? - san 2016-09-11 08 20 49 IDE(Eclipse)のimport文自動編集が消しているのだと思われます。@Instanceの部分にエラーが出ていなければ特に問題はないと思います。 - 赤砂蛇凪浜 2016-09-16 07 35 27 醸造台やエンチャント台、装備スロットのように、スロット内に一部のアイテムのみ入れられるようにするにはどうすれば良いのでしょうか? - 名無しさん 2016-12-02 01 33 32 addSlotToContainerでSlotを継承した自作のクラスを渡せばよいです。その際、isItemValidをオーバーライドすれば入れられるアイテムを、canTakeStackをオーバーライドすれば取り出せるアイテムを制御できます。分かりにくかったらすみません。後ほど本文への掲載も検討します。 - 赤砂蛇凪浜 2016-12-04 10 50 12 GUIに文字を入れて翻訳するのはどうやるんですか - HIROMARU (2021-01-09 11 38 30) 名前
https://w.atwiki.jp/minecraftserverk/pages/16.html
MODについて まだこのサーバーにMODは導入されていません 現バージョンに対応次第MODを導入する予定です このサーバーでは以下のMODを導入する予定です ModLoader ModLoaderMP minecraftforge Industrial Craft2 Build Craft(追加アドオンにてadditionalpipes も導入予定) RedPower Forestry for Minecraft PowerConverters 各MODの詳細については本家wikiを参照してください。
https://w.atwiki.jp/gtav/pages/580.html
ファギオ (Faggio) ファギオ (Faggio)詳細データ ステータス(無改造車) 解説 トレバー仕様 入手場所、出現場所オフライン オンライン 改造費用アーマー ブレーキ エンジン ライト 損害/窃盗の阻止 トランスミッション ターボ 画像PS3 強化版 参考過去作 モデル 詳細 データ 種類 メーカー 日本語 日本語訳 乗車定員 駆動 ギア バイク ペガッシ ファギオ ブナ(イタリア語) 2人 RR 3速 モデル ラジオ 主な選局 洗車 ピアッジオ・ベスパ 有り FlyLo FM 不可 プラットフォーム カスタム カラー デフォルトホイールタイプ オフライン オンライン 盗難車 正規購入車 PS3 / Xbox 360 可 メイン/サブ バイク(専用タイプ) PS4 / Xbox One / PC プラットフォーム 価格 売却額 保険料 オフライン オンライン オンライン オンライン 盗難車 正規購入車 PS3 / Xbox 360 $5,000 $1,500 $3,000 $62 PS4 / Xbox One / PC プラットフォーム ガレージ保管 オフライン オンライン 隠れ家ガレージ 物件ガレージ 自宅物件ガレージ 盗難車 正規購入車 PS3 / Xbox 360 可 PS4 / Xbox One / PC ステータス(無改造車) Top Speed(最高速度) km/h Acceleration(0-100km/h加速時間) 秒 Braking(100-0km/h制動時間) 秒 Traction(駆動力) 解説 『GTA VC』から継続して登場のスクーター。 『GTAIV』でもこの旧型と最新モデル(ファギオスポーツ)の2種類が存在する。 ゲーム内唯一のスクーターであり、機動性の良いスポーツバイクや馬力の高い大型バイクが大半を占めるバイクジャンルの中では癒し系(?)と言える。 『IV』の時に比べ重量が半分の100kgになっているが、ギアもVC時代と同じく3速になっている。そのため加速はあまり良くない(*1)。 Faggioとはイタリア語でブナの木のことであるが、“Fag”とはスラングで“同性愛者(ゲイ)”の意味である。ウェブサイトの解説文や名前の和訳も実質、この意味を漂わせている。 バイクだがやっぱりスクーター。スピードと加速性がかなり低いが、その分事故る可能性も低い。 単価も安く、日本で走っているバイクの半数程はこういったスクーターである場合がほとんど。(値段はだいたいが10万~20万程度のもの) エンジン出力も非常に弱く、バインウッドヒルズの急勾配が登れないという可愛らしさ。 しかし、サイドブレーキとアクセルの同時押しによる空吹かしからの急発進を上手く使うと、後ろから押してもらったりする必要もなく、チリアド山の山道を登って登頂できたりもする。 エンジン音だけは独特なもので、ヴォルティックよろしく信じられない位甲高い音を発する。 重心が後ろに偏っているので、ウィリーが容易に出来るという隠れた特性(?)を持っている。ウィリーしすぎると派手にこけるので注意。 そしてオンラインでは、意外なほどに出現しないのも特徴の一つ。オンラインで見かける二輪は大半がネイキッドやアメリカン、SSであろうと思われる。ただ、ブラウザのショップからも買えるので、そこまで希少かと言われたら強ちそういう訳でもない。おまけに$5,000とラスティ レベル並に安価。 上記のようなGTAの雰囲気とはややかけ離れた出で立ち、そしてオンラインにおけるちょっとした希少性から、オンラインでもファギオを乗り回すプレイヤーも多いようだ。 レースではなんと作業用枠に分類されている。 バイクとはいえ優位性は無いに等しく、調子に乗っているとフィールドマスターやゴルフカート、ついでに 改造サドラー辺りにノックアウトされるのがオチだろう。 実はウィリーを続ければ作業用カテゴリとしては最高速では1位だったりする。ただし皆さんご存じの通り加速が死んでいる上ハンドルも効かなくなるのでほとんど意味がないが。 ボディ面積が大きいため、カラーを変えると印象がガラっと変わったりする。 ここの点はプレイヤーのセンスが問われるだろう。 当初、販売サイトではメーカーがプリンシペ、乗車するとペガッシという矛盾が発生していたが、『バイカーアップデート』にてこのバイクの派生型ファギオMODと最新モデルが満を持して追加、ペガッシ製と確定した。 スクーターは特定の人向けです。もしかしてあなた向けでは? (Southern San Andreas Super Autos サイト内の解説より) トレバー仕様 トレバー「今日はどこに行く?スクーター・ブラザー?」 トレバーにキャラチェンジした際に、トレバーが上記の台詞を言ったり奇声を上げながら高速道路をこのスクーターで走っていることがある。セリフも多数存在しており、もしもこのイベントに遭遇した場合はすぐチェンジせず、じっくり運転してみよう。マップ上にマーカーは出ないが、○ボタン(XboxコントローラーはBボタン)を押すと尾行ミッションのように相手のスクーターに注目できる。 実はこのイベントには元ネタが存在する。 Youtubeにて動画を投稿していたブラッド氏(FourPlayerPodcastの実況プレイ配信者の一人)が、GTAIVにてファギオスポーツを乗り回しながら 「スクゥゥトァァァブラダァァァァァァ!!」 と叫びまくっていたのが事の発端。これが制作側のツボを刺激したのか、いわゆる「まさかの公式化」となった。 ↓こちらがその元ネタとなった氏のプレイ動画である。 叫びまくってるので、音量に注意。 ちなみにトレバーの乗るファギオだが、ナンバーがトレバーの愛車と同じく「BETTY 32」。 メインカラーもこれまたオリジナルカラー。サブカラーはブラック。 一見トレバー固有の乗り物のようだが実際はイベント時に出現する乗り物に過ぎず、放置すると普通の車両と同じく消滅し、カスタム内容も引き継がない。 使い続けたければガレージに保管しよう。 入手場所、出現場所 オフライン オンラインショップ「Southern San Andreas Super Autos」で購入。 トレバーにキャラチェンジ時に入手。 街中にも稀に出現する様子。 ゴルフ場付近のプレイボーイマンションに2台固定出現する(置かれてない事が多いが、少し離れてから再度訪れると2台出現している)。プレイボーイマンションの場所はこちら 。 オンライン オンラインショップ「Southern San Andreas Super Autos」で購入。 稀にロスサントス都市部の中心部を走行していることがある。 バインウッド・ヒルズ、マーロウ・ドライブにて三台ほど出現。一台はリッチマン・グレン方面へ下る。 改造費用 チューニングを施しても効果は大して見られない。その為なのか、費用も格安。 ホイールはアクセサリーのみ改造でき、外見、色は変えられない。 ifruitでカスタムをすると、何故か改造項目のマフラーの欄にチタン・マフラーが存在する。これはファギオの派生版のファギオModと最新版のファギオスポーツや、イノベーション(もっともこちらはサブカラー項目すら存在しているが)でも確認されている。バグなのか、使いまわしなのか、没なのかは不明。 もちろん改造を注文した所でゲーム内に通知が来ないので改造が不可能。 アーマー アーマー 【6種】 費用 オフライン オンライン なし $100 $200 アーマー強化20% $500 $3,600 アーマー強化40% $1,250 $6,000 アーマー強化60% $2,000 $9,600 アーマー強化80% $3,500 $16,800 アーマー強化100% $5,000 $24,000 ブレーキ ブレーキ 【4種】 費用 オフライン オンライン ブレーキ(標準装備) $100 $200 ストリート・ブレーキ $2,000 $4,000 スポーツ・ブレーキ $2,700 $5,400 レース・ブレーキ $3,500 $7,000 エンジン エンジン 【4種】 費用 オフライン オンライン EMSアップグレード:レベル1 $900 $1,800 EMSアップグレード:レベル2 $1,250 $2,500 EMSアップグレード:レベル3 $1,800 $3,600 EMSアップグレード:レベル4 $3,350 $6,700 ライト 損害/窃盗の阻止 損害/窃盗の阻止 【2種】 費用 オンライン専用 トラッカー $2,000 フル補償プラン $625 トランスミッション トランスミッション 【4種】 費用 オフライン オンライン トランスミッション(標準装備) $100 $200 ストリート・トランスミッション $2,950 $5,900 スポーツ・トランスミッション $3,250 $6,500 レース・トランスミッション $4,000 $8,000 ターボ ターボ 【2種】 費用 オフライン オンライン なし $500 $ ターボチューニング $2,500 $24,000 ※爆発物、クラクション、ナンバープレート、ペイント、ホイールの改造費用は全車種共通。 詳細は乗り物 カスタマイズのページを参照。 画像 PS3 フロント リア サイド トレバー仕様 トレバー固有のナンバープレート 強化版 一人称視点(北米版PS4?) 参考 過去作 GTA4 モデル ピアッジオ・ベスパ
https://w.atwiki.jp/hidamari_minecraft/pages/26.html
MOD情報 ひだまり鯖は、方針としてほぼバニラ状態(MOD無し)で運営しています。 ですが、より便利な機能を提供してくれるソフトを紹介します。 MCJPISS2 日本語MOD無しでも、日本語入力を支援してくれる外部ソフトです。 MODではないので、いち早く、新バージョンへ対応できます。 ハルの総合コマンドエディタ ワープブロックで使用している「コマンドブロック」 の使い方を広げられないか、このエディタを使って試してみよう? というところです。 導入予定MOD できるだけバニラに近い状態で運営しているサーバーですが、一部MODの導入を検討しています。 以下そのメモです。 日本語MOD 木こりMOD