◆総合◆Modderのための雑談所

クライアント/サーバーMODの開発に関する話題、技術交換はこちらで。質問は質問フォーラムへお願いします。
  • (PostNo.150422)

Re: ◆総合◆Modderのための雑談所

投稿記事by dewfalse » 2014年1月05日(日) 00:22

forge 1.7.2でMODをリリースできたので手順を共有しておきます。

1. Forgeのダウンロード&解凍
http://files.minecraftforge.net/ から最新のForgeをダウンロードして任意のディレクトリに解凍する。作業時は10.12.0.991をダウンロードしました。

2. Eclipse用ワークスペース準備のコマンドを実行
解凍したディレクトリをc:/forge-1.7.2-10.12.0.991-src/とすると、c:/forge-1.7.2-10.12.0.991-src/直下にgradlew.batがあるはずです。
コマンドプロンプトを開き、以下を実行してください。
コード: 全て選択
cd c:/forge-1.7.2-10.12.0.991-src/
gradlew.bat setupDecompWorkspace
gradlew.bat eclipse


Topic: [TUTORIAL] Getting Started with ForgeGradle ちゃちゃっとマイクラMOD開発環境をつくる(2) を参考にしています。

3. Eclipseを起動
ワークスペースは解凍したディレクトリ(例:c:/forge-1.7.2-10.12.0.991-src/)以外の場所を指定すべきだそうです。

4. GradleをEclipseに追加
Help > Eclipse MarketPlace...を選択し、Gradleを検索して出てきた「Gradle Integration for Eclipse 3.4.0.RELEASE」をインストールします。

5. プロジェクトのインポート
File > Import...を選択し、General > Existing Projects into Workspaceを選択します。
Nextを押して次の画面へ移動し、root directoryに解凍したディレクトリ(例:c:/forge-1.7.2-10.12.0.991-src/)を指定してFinishを押してインポートを完了させます。

6. デバッグ実行の設定
Run > Run Configurations....を選択し、Java Applicationを右クリック、Newを選択します。
たぶんNameのところにはNew_configurationと書かれているはずなのでわかりやすい名前(例:Run Client)に変更してください。
Main class:欄には以下を入力してください。
コード: 全て選択
net.minecraft.launchwrapper.Launch

Argumentsタブに移動し、Program Arguments:欄には以下を、
コード: 全て選択
--version 1.6 --tweakClass cpw.mods.fml.common.launcher.FMLTweaker --accessToken Player1234

(※「--accessToken Player1234」はTopic: [TUTORIAL] Getting Started with ForgeGradleに存在しない記述です。エラーが出たためTopic: "Missing required option(s) ['accessToken']"を参考に追加しました。)
VM Arguments:欄には以下を入力してください。
コード: 全て選択
-Dfml.ignoreInvalidMinecraftCertificates=true

Applyを押して設定を反映します。

Java Applicationを右クリック、Newを選択します。
たぶんNameのところにはNew_configurationと書かれているはずなのでわかりやすい名前(例:Run Server)に変更してください。
Main class:欄には以下を入力してください。
コード: 全て選択
cpw.mods.fml.relauncher.ServerLaunchWrapper

Argumentsタブの設定は不要です。
Applyを押してCloseを押し、デバッグ実行の設定は終わりです。

7. もぢんぐ
EclipseのPackage Explorer上でforge-1.7.2.10.12.0.991-srcを展開すると、src/main/java/があります。
src/main/javaを右クリックしてNew > Packageでパッケージを追加します。
追加したパッケージを右クリックしてNew > Classでクラスを追加してからは普通のもぢんぐになりますのでここでは省略します。
なお、ソースコードをUTF-8で記述することを前提にのちの手順を記述していますので、SJISで記述する場合などは適切でない可能性がありますがご了承ください。

8. build.gradleを編集
1.6以前のもぢんぐにおけるrecompile,reobfuscateの代わりになるコマンドを実行する際の設定を変更します。
これは、UTF-8のソースコードをコンパイルできない、reobfに失敗する問題への対策です。

解凍したディレクトリ(例:c:/forge-1.7.2-10.12.0.991-src/)内にあるbuild.gradleをテキストエディタで開き、末尾に以下を追記します。
コード: 全て選択
def defaultEncoding = 'UTF-8'
compileJava {
    options.encoding = defaultEncoding
}
[compileJava, compileTestJava].each{
    it.options.encoding = 'UTF-8'
    it.options.compilerArgs += ['-source', '1.7', '-target', '1.7']
}
reobf { deobfFile = new net.minecraftforge.gradle.delayed.DelayedFile(project, "build/tmp/deobfuscateJar/deobfed.jar") }


Topic: [Unsolved]Gradle 1.7.2 build failed with an exception Gradle上でJava7用にコンパイルするを参考にさせていただきました。
(※2箇所でUTF-8設定をしているが両方はいらないかもしれない。未確認)

9. リリースファイルの作成
コマンドプロンプトで以下を実行してください。
コード: 全て選択
gradlew build

BUILD SUCCESSFULが画面に表示されたら成功です。
解凍したディレクトリ(例:c:/forge-1.7.2-10.12.0.991-src/)内のbuild/libs/内にファイルができているはずです。

10. 後始末
なぜかmodid-1.0.jarなどという名前でファイルができており、ExampleModまで同梱されていたので解凍して必要なファイルをzip圧縮してリリースしました。
もっといじればMOD毎に別のjarファイルに出力したり、適切な名前のjarファイルにしたりできるかもしれませんが、気力が尽きたのでここまでで終わりにします。。。
dewfalse
ID:1fd27f1e
金掘り
 
記事: 373
登録日時: 2012年2月28日(火) 21:09
お住まい: Y=1

  • (PostNo.150463)

Re: ◆総合◆Modderのための雑談所

投稿記事by flameFox » 2014年1月05日(日) 07:56

dewfalse さんが書きました:10. 後始末
なぜかmodid-1.0.jarなどという名前でファイルができており、ExampleModまで同梱されていたので解凍して必要なファイルをzip圧縮してリリースしました。
もっといじればMOD毎に別のjarファイルに出力したり、適切な名前のjarファイルにしたりできるかもしれませんが、気力が尽きたのでここまでで終わりにします。。。


[How-To] Compiling mod.
こちらで、MODの名前やバージョンで出力できる方法が紹介されていましたので参考までに。

[追記]
コマンドプロンプトを開いて毎回gradleコマンドを打つのがめんどくさかったのでスクリプト作りました。
(gradleでの開発環境でご使用ください。またWindows専用です。)
使用方法は解答したforge-1.7.2-10.12.0.xxxx-srcのルートに解凍して置いてください。
(gradlewと同じ階層です。)

2004/06/16 差し替え(どっかのVersionで構築の条件が変わっていたため。forge-1.7.2-10.12.2.1121-srcで確認)
InstallsetupDecompとInstallsetupDecompはどちらか片方で大丈夫です。

「InstallsetupDecomp.bat」
初回の環境を作るときにご使用ください。
Forge内部ソースがデコンパイルされた状態(人間が読める形)でビルドされます。

「InstallsetupDecomp.bat」
初回の環境を作るときにご使用ください。
Forge内部ソースがバイトコードの状態(JAVAに詳しい人でないと読めない形)でビルドされます。

「Build.bat」
ビルドするときにご使用ください。
ビルドとビルドされた後のフォルダを開きます。
(環境構築後1度目はまだフォルダがないので違うフォルダが開きます)
添付ファイル
cmd_20140616.zip
(688 バイト) ダウンロード数: 121 回
最後に編集したユーザー flameFox [ 2014年6月16日(月) 14:44 ], 累計 1 回
flameFox
ID:2fb62aeb
石炭掘り
 
記事: 230
登録日時: 2013年1月19日(土) 19:53

  • (PostNo.153890)

Re: ◆総合◆Modderのための雑談所

投稿記事by yusukemac » 2014年1月22日(水) 18:33

==================================================
=
= forge-1.7.2-10.12.0.1019にて、この方法を使わなくても私の環境では正常にワークスペースが作れるようになりました。
= cdしたあと、gradle setupDevWorkspace, gradle eclipseの順にコマンドを打つことで(下の手順と変わりませんが)正常にワークスペースが生成されました
=
==================================================

今回こちらのMac Mavericks(10.9.1)環境にて、forge-1.7.2-10.12.0.1012-srcでminecraftを起動できたので、方法を紹介します

    前提
    ・Minecraftに何かしらのforge1.7.2をインストールしている
    (ライブラリ用。別にlwjglのnightlyバージョンが手元にあるなら不要、これだと楽に用意できる)

① srcをダウンロード・解凍、ライブラリの準備
こちらからforge1.7.2(今回は10.12.0.1012を使用)の好きなものをダウンロードします
そして、自分の作業用ディレクトリに解凍済みフォルダを移動させます (今回は/Users/yusuke/Documents/)

次に、/Users/yusuke/Library/Application Support/minecraft/libraries/org/lwjgl/を作業用のディレクトリにコピー。(ライブラリ用フォルダ)

② ターミナルでgradleコマンドを実行
/Applications/Utilities/Terminalを起動

"cd /Users/yusuke/Documents/forge-1.7.2-10.12.0.1012-src"
"./gradlew setupDevWorkspace"
"./gradlew eclipse"

上から順番に実行していきます.

③ eclipseを起動・見つからないライブラリを直す

eclipseを起動します。ワークスペースを/Users/yusuke/Documents/forge-1.7.2-10.12.0.1012-src/eclipseに設定
下にある項目に、エラーが5つ出ていると思います
そうしたら、Package ExplorerのMinecraftを右クリック

Minecraft→PropertyのJava Build Pathを選択
Libraryタブを開き、見つからないライブラリを見つけます

次に、lwjgl-2.8.3を選択して、Removeしちゃってください(今のところ不都合はないけど、なにか起こるかも...)
その後、lwjgl 2.9.0、2.9.1-nightly-20131017, lwjgl_util 2.9.1-nightly-20131017を先ほどのライブラリ用フォルダから選択していきます(ここは多分わかると思います)

そうしたら、いざRun!!!多分起動されると思います
添付ファイル
スクリーンショット 2014-01-22 18.31.58.png
見た瞬間頭痛が消えた
      ___________________________
      Minecraft               ❘❘丨|
      server               1/1
      xxx
      ___________________________

         Scanning for games on your local network
                   o 0 o

私は2011/11/11にminecraftを買いました。
画像

Github
アバター
yusukemac
ID:3dce354d
石掘り
 
記事: 123
登録日時: 2012年2月04日(土) 16:09
お住まい: 千葉県

  • (PostNo.158359)

1.7変更点

投稿記事by A.K. » 2014年2月14日(金) 20:02

1.7で変更の有った箇所で比較的利用されているものを列挙してみます。

・IDの廃止。
IDは内部で管理するためだけのものとなり、ブロックやアイテムのインスタンス生成時に必要無くなりました。
代わりに、GameRegistry#registerItemメソッドとGameRegistry#registerBlockメソッドで固有文字列と共に登録しないといけなくなりました。
登録は、@ModクラスのpreInitメソッド内で行う必要があります。

・LanguageRegistryの非推奨(動作しないので実質廃止)
代わりにlangファイルの利用が推奨されます。
langファイルの置き場所は、assets/[Domain]/lang/en_US.langとなります。

・@ForgeSubscribe → @SubscribeEvent

・@NetworkModの廃止。
マルチ対応の場合でも必要無くなりました。ただし、サーバー側のバージョン指定をする際は、Mod#acceptableRemoteVersionsを用いて下さい。(これは@NetworkMod#versionBoundsの変わりです。)


・Keyhadlerの廃止。
KeyHadlerの代わりにKeyInputEventというイベントを利用する形になりました。
利用例としては、次のようになります。
コード: 全て選択
   @SubscribeEvent
   public void KeyPressEvent(KeyInputEvent event)
   {
      if(ClientProxy.registKey.isPressed()){
         //ここでboolean型変数に代入したり、処理を書いたりする。
      }
   }

注意として、このイベントはキーが押された時しか呼ばれないので、キーが離れたかどうかについては別途こちら側で判定する必要があります。
また、isPressedメソッドは押された回数だけtrueを返すようなので、

・TickHandlerの廃止。
こちらもTickEventというイベントでの処理に変わりました。
子クラスとして、ServerTickEvent,ClientTichEvent, WorldTickEvent, PlayerTickEvent, RenderTickEventがあります。必要なイベントを利用下さい。
利用例としては、次のようになります。
コード: 全て選択
    @SubscribeEvent
    public void tickEvent(ClientTickEvent event) {
        if(event.phase == TickEvent.Phase.END) {
             //ここで処理を書いたりする。
        }
    }


・パケット周りの変更。
これに関しては、
【1.7.2~】Netty Packet Handling【チュートリアル】
を参照下さい。
最後に編集したユーザー A.K. [ 2014年2月14日(金) 21:38 ], 累計 1 回
もじんぐしたい。。。。
アバター
A.K.
ID:996a4c3d
ラピスラズリ収集家
 
記事: 1359
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.158383)

Re: 1.7変更点

投稿記事by ale » 2014年2月14日(金) 20:45

( っ'ω'c)ちょうどTLみてて目についたので、補足っぽいのを。

A.K. さんが書きました:・@NetworkModの廃止。
マルチ対応の場合でも必要無くなりました。

代わりになるのは Mod#acceptableRemoteVersions とかみたい。詳細は@ModアノテーションのJavaDocに書いてあるです。

A.K. さんが書きました:・Keyhadlerの廃止。
KeyHadlerの代わりにKeyInputEventというイベントを利用する形になりました。
利用例としては、次のようになります。
コード: 全て選択
   @SubscribeEvent
   public void KeyPressEvent(KeyInputEvent event)
   {
      if(ClientProxy.registKey.isPressed()){
         //ここでboolean型変数に代入したり、処理を書いたりする。
      }
   }

注意として、このイベントはキーが押された時しか呼ばれないので、キーが離れたかどうかについては別途こちら側で判定する必要があります。

KeyInputEvent は何らかのキー操作がされた場合に Dispatch されるイベント。
なので、ゲームレジストリに自分で作った KeyBinding を登録してなくても、このイベントはキー操作がある度に購読してる人全員に通知がきます。

登録したキーが押下されたかは、自身で押下判定を行う必要がありますが、登録した KeyBinding インスタンスに押下状態は記録されるので、キーを登録した人は、適切なタイミングで KeyBinding を参照することで、簡単にキー状態を知ることが出来ます。

なお、先にも書いたようにこの KeyInputEvent はキー操作があった場合にDispatchされるイベントなので、おしっぱなしの判定や、キーリピート、KeyUpなどを知りたい場合は、 ClientTickEvent のような、繰り返し発生するイベントを購読し、より詳細なキー状態の管理を実装してやる必要があります。

ちなみに、KeyBindingはキーが押された回数をカウントしていて、KeyBinding#isPressed() はキーが押された数だけtrueを返すメソッドなので、 while(key.isPressed()) とかで判定してあげたほうがそれっぽいかもしれない。
あともし、自身が登録したキー以外の押下状態を、KeyBinding のインスタンスから参照する場合は、勝手に押下回数のカウンターを減らさないように、 KeyBinding#getIsKeyPressed() とかを見たほうがいいかもです。(もしくは直接LWJGL周りを使うとかのがいい)

A.K. さんが書きました:・TickHandlerの廃止。
こちらもTickEventというイベントでの処理に変わりました。
利用例としては、次のようになります。
コード: 全て選択
    @SubscribeEvent
    public void tickEvent(TickEvent event) {
        if (event.type == TickEvent.Type.CLIENT) {
             //ここで処理を書いたりする。
        }
    }

TickEventは、ClientTickEvent、ServerTickEvent、RenderTickEvent、PlayerTickEvent、WorldTickEventといった子孫クラスを持っています。
TickEventをリスナーとして登録すると、全てのTickEventを受け取ってしまうので、通常は上記の子孫のイベントのいずれかを購読した方が便利っぽい。
あと、各TickEventは開始と終了の2つのフェーズを持ってるので、そのあたりの判定も追加したほうが良いかもしれない。
(例えば、RenderTickEventの開始と終了両方で描画すると、たぶんおかしくなる)

( っ˘ω˘c)
こんなことしています。Tooltip Plus / Whatever Fuel / Item ID List Generator
fillppo さんが作られたステキ Mod、SpawnChecker の改修およびサポートも行っています。
不具合報告や要望があれば、トピック、PM、twitterあたりで連絡したってください。
アバター
ale
ID:c03308c0
石炭掘り
 
記事: 226
登録日時: 2011年12月07日(水) 01:54

  • (PostNo.159477)

Re: ◆総合◆Modderのための雑談所

投稿記事by reginn666 » 2014年2月19日(水) 17:11

1.7ForgeModding用にチュートリアル/サンプルコードをGithubにおいたのでご自由にどうぞ.
自分のWikiに項目毎にまとめてあります.
http://www4.atwiki.jp/reginn666/pages/114.html

1.7ForgeModdingに関する変更点は既にいくつか出ているので割愛します.
いくつか足りないところもあるので, 今後も追加/修正が入ると思います.
githubにソースおいてます。
https://github.com/reginn
reginn666
ID:f03ec0f7
木を殴ってる
 
記事: 23
登録日時: 2012年3月17日(土) 22:01

  • (PostNo.161600)

1.7ブロック固有文字列一覧

投稿記事by A.K. » 2014年3月03日(月) 00:21

UniqueName, UnlocalizedName, LocalizedName
minecraft:air, tile.air.name, tile.air.name
minecraft:stone, tile.stone.name, 石
minecraft:grass, tile.grass.name, 草ブロック
minecraft:dirt, tile.dirt.name, 土
minecraft:cobblestone, tile.stonebrick.name, 丸石
minecraft:planks, tile.wood.name, 木材
minecraft:sapling, tile.sapling.name, tile.sapling.name
minecraft:bedrock, tile.bedrock.name, 岩盤
minecraft:flowing_water, tile.water.name, 水
minecraft:water, tile.water.name, 水
minecraft:flowing_lava, tile.lava.name, 溶岩
minecraft:lava, tile.lava.name, 溶岩
minecraft:sand, tile.sand.name, 砂
minecraft:gravel, tile.gravel.name, 砂利
minecraft:gold_ore, tile.oreGold.name, 金鉱石
minecraft:iron_ore, tile.oreIron.name, 鉄鉱石
minecraft:coal_ore, tile.oreCoal.name, 石炭鉱石
minecraft:log, tile.log.name, 原木
minecraft:leaves, tile.leaves.name, 木の葉
minecraft:sponge, tile.sponge.name, スポンジ
minecraft:glass, tile.glass.name, ガラス
minecraft:lapis_ore, tile.oreLapis.name, ラピスラズリ鉱石
minecraft:lapis_block, tile.blockLapis.name, ラピスラズリブロック
minecraft:dispenser, tile.dispenser.name, ディスペンサー
minecraft:sandstone, tile.sandStone.name, 砂岩
minecraft:noteblock, tile.musicBlock.name, 音符ブロック
minecraft:bed, tile.bed.name, ベッド
minecraft:golden_rail, tile.goldenRail.name, パワードレール
minecraft:detector_rail, tile.detectorRail.name, ディテクターレール
minecraft:sticky_piston, tile.pistonStickyBase.name, 粘着ピストン
minecraft:web, tile.web.name, クモの巣
minecraft:tallgrass, tile.tallgrass.name, 草
minecraft:deadbush, tile.deadbush.name, 枯れ木
minecraft:piston, tile.pistonBase.name, ピストン
minecraft:piston_head, tile.null.name, tile.null.name
minecraft:wool, tile.cloth.name, 羊毛
minecraft:piston_extension, tile.null.name, tile.null.name
minecraft:yellow_flower, tile.flower1.name, tile.flower1.name
minecraft:red_flower, tile.flower2.name, tile.flower2.name
minecraft:brown_mushroom, tile.mushroom.name, キノコ
minecraft:red_mushroom, tile.mushroom.name, キノコ
minecraft:gold_block, tile.blockGold.name, 金ブロック
minecraft:iron_block, tile.blockIron.name, 鉄ブロック
minecraft:double_stone_slab, tile.stoneSlab.name, tile.stoneSlab.name
minecraft:stone_slab, tile.stoneSlab.name, tile.stoneSlab.name
minecraft:brick_block, tile.brick.name, レンガ
minecraft:tnt, tile.tnt.name, TNT
minecraft:bookshelf, tile.bookshelf.name, 本棚
minecraft:mossy_cobblestone, tile.stoneMoss.name, 苔石
minecraft:obsidian, tile.obsidian.name, 黒曜石
minecraft:torch, tile.torch.name, 松明
minecraft:fire, tile.fire.name, 炎
minecraft:mob_spawner, tile.mobSpawner.name, モンスタースポナー
minecraft:oak_stairs, tile.stairsWood.name, 樫の木の階段
minecraft:chest, tile.chest.name, チェスト
minecraft:redstone_wire, tile.redstoneDust.name, レッドストーンダスト
minecraft:diamond_ore, tile.oreDiamond.name, ダイヤモンド鉱石
minecraft:diamond_block, tile.blockDiamond.name, ダイヤモンドブロック
minecraft:crafting_table, tile.workbench.name, 作業台
minecraft:wheat, tile.crops.name, 作物
minecraft:farmland, tile.farmland.name, 耕地
minecraft:furnace, tile.furnace.name, かまど
minecraft:lit_furnace, tile.furnace.name, かまど
minecraft:standing_sign, tile.sign.name, 看板
minecraft:wooden_door, tile.doorWood.name, 木のドア
minecraft:ladder, tile.ladder.name, はしご
minecraft:rail, tile.rail.name, レール
minecraft:stone_stairs, tile.stairsStone.name, 石の階段
minecraft:wall_sign, tile.sign.name, 看板
minecraft:lever, tile.lever.name, レバー
minecraft:stone_pressure_plate, tile.pressurePlate.name, 感圧式スイッチ
minecraft:iron_door, tile.doorIron.name, 鉄のドア
minecraft:wooden_pressure_plate, tile.pressurePlate.name, 感圧式スイッチ
minecraft:redstone_ore, tile.oreRedstone.name, レッドストーン鉱石
minecraft:lit_redstone_ore, tile.oreRedstone.name, レッドストーン鉱石
minecraft:unlit_redstone_torch, tile.notGate.name, レッドストーントーチ
minecraft:redstone_torch, tile.notGate.name, レッドストーントーチ
minecraft:stone_button, tile.button.name, ボタン
minecraft:snow_layer, tile.snow.name, 雪
minecraft:ice, tile.ice.name, 氷
minecraft:snow, tile.snow.name, 雪
minecraft:cactus, tile.cactus.name, サボテン
minecraft:clay, tile.clay.name, 粘土
minecraft:reeds, tile.reeds.name, サトウキビ
minecraft:jukebox, tile.jukebox.name, ジュークボックス
minecraft:fence, tile.fence.name, フェンス
minecraft:pumpkin, tile.pumpkin.name, カボチャ
minecraft:netherrack, tile.hellrock.name, ネザーラック
minecraft:soul_sand, tile.hellsand.name, ソウルサンド
minecraft:glowstone, tile.lightgem.name, グロウストーン
minecraft:portal, tile.portal.name, ポータル
minecraft:lit_pumpkin, tile.litpumpkin.name, ジャック・オ・ランタン
minecraft:cake, tile.cake.name, ケーキ
minecraft:unpowered_repeater, tile.diode.name, tile.diode.name
minecraft:powered_repeater, tile.diode.name, tile.diode.name
minecraft:stained_glass, tile.stainedGlass.name, Stained Glass
minecraft:trapdoor, tile.trapdoor.name, トラップドア
minecraft:monster_egg, tile.monsterStoneEgg.name, tile.monsterStoneEgg.name
minecraft:stonebrick, tile.stonebricksmooth.name, 石レンガ
minecraft:brown_mushroom_block, tile.mushroom.name, キノコ
minecraft:red_mushroom_block, tile.mushroom.name, キノコ
minecraft:iron_bars, tile.fenceIron.name, 鉄格子
minecraft:glass_pane, tile.thinGlass.name, 板ガラス
minecraft:melon_block, tile.melon.name, スイカ
minecraft:pumpkin_stem, tile.pumpkinStem.name, tile.pumpkinStem.name
minecraft:melon_stem, tile.pumpkinStem.name, tile.pumpkinStem.name
minecraft:vine, tile.vine.name, つる
minecraft:fence_gate, tile.fenceGate.name, フェンスゲート
minecraft:brick_stairs, tile.stairsBrick.name, レンガの階段
minecraft:stone_brick_stairs, tile.stairsStoneBrickSmooth.name, 石レンガの階段
minecraft:mycelium, tile.mycel.name, 菌糸
minecraft:waterlily, tile.waterlily.name, スイレンの葉
minecraft:nether_brick, tile.netherBrick.name, ネザーレンガ
minecraft:nether_brick_fence, tile.netherFence.name, ネザーレンガフェンス
minecraft:nether_brick_stairs, tile.stairsNetherBrick.name, ネザーレンガの階段
minecraft:nether_wart, tile.netherStalk.name, ネザーウォート
minecraft:enchanting_table, tile.enchantmentTable.name, エンチャントテーブル
minecraft:brewing_stand, tile.brewingStand.name, tile.brewingStand.name
minecraft:cauldron, tile.cauldron.name, 大釜
minecraft:end_portal, tile.null.name, tile.null.name
minecraft:end_portal_frame, tile.endPortalFrame.name, エンドポータル
minecraft:end_stone, tile.whiteStone.name, エンドストーン
minecraft:dragon_egg, tile.dragonEgg.name, ドラゴンの卵
minecraft:redstone_lamp, tile.redstoneLight.name, レッドストーンランプ
minecraft:lit_redstone_lamp, tile.redstoneLight.name, レッドストーンランプ
minecraft:double_wooden_slab, tile.woodSlab.name, tile.woodSlab.name
minecraft:wooden_slab, tile.woodSlab.name, tile.woodSlab.name
minecraft:cocoa, tile.cocoa.name, カカオの実
minecraft:sandstone_stairs, tile.stairsSandStone.name, 砂岩の階段
minecraft:emerald_ore, tile.oreEmerald.name, エメラルド鉱石
minecraft:ender_chest, tile.enderChest.name, エンダーチェスト
minecraft:tripwire_hook, tile.tripWireSource.name, トリップワイヤーフック
minecraft:tripwire, tile.tripWire.name, トリップワイヤー
minecraft:emerald_block, tile.blockEmerald.name, エメラルドブロック
minecraft:spruce_stairs, tile.stairsWoodSpruce.name, 松の木の階段
minecraft:birch_stairs, tile.stairsWoodBirch.name, 白樺の木の階段
minecraft:jungle_stairs, tile.stairsWoodJungle.name, ジャングルの木の階段
minecraft:command_block, tile.commandBlock.name, コマンドブロック
minecraft:beacon, tile.beacon.name, ビーコン
minecraft:cobblestone_wall, tile.cobbleWall.name, tile.cobbleWall.name
minecraft:flower_pot, tile.flowerPot.name, tile.flowerPot.name
minecraft:carrots, tile.carrots.name, ニンジン
minecraft:potatoes, tile.potatoes.name, ジャガイモ
minecraft:wooden_button, tile.button.name, ボタン
minecraft:skull, tile.skull.name, tile.skull.name
minecraft:anvil, tile.anvil.name, 金床
minecraft:trapped_chest, tile.chestTrap.name, トラップチェスト
minecraft:light_weighted_pressure_plate, tile.weightedPlate_light.name, 重量感圧板 (軽)
minecraft:heavy_weighted_pressure_plate, tile.weightedPlate_heavy.name, 重量感圧板 (重)
minecraft:unpowered_comparator, tile.comparator.name, tile.comparator.name
minecraft:powered_comparator, tile.comparator.name, tile.comparator.name
minecraft:daylight_detector, tile.daylightDetector.name, 日照センサー
minecraft:redstone_block, tile.blockRedstone.name, レッドストーンブロック
minecraft:quartz_ore, tile.netherquartz.name, ネザークォーツ鉱石
minecraft:hopper, tile.hopper.name, ホッパー
minecraft:quartz_block, tile.quartzBlock.name, tile.quartzBlock.name
minecraft:quartz_stairs, tile.stairsQuartz.name, ネザー水晶の階段
minecraft:activator_rail, tile.activatorRail.name, 作動レール
minecraft:dropper, tile.dropper.name, ドロッパー
minecraft:stained_hardened_clay, tile.clayHardenedStained.name, tile.clayHardenedStained.name
minecraft:stained_glass_pane, tile.thinStainedGlass.name, Stained Glass Pane
minecraft:leaves2, tile.leaves.name, 木の葉
minecraft:log2, tile.log.name, 原木
minecraft:acacia_stairs, tile.stairsWoodAcacia.name, Acacia Wood Stairs
minecraft:dark_oak_stairs, tile.stairsWoodDarkOak.name, Dark Oak Wood Stairs
minecraft:hay_block, tile.hayBlock.name, Hay Bale
minecraft:carpet, tile.woolCarpet.name, tile.woolCarpet.name
minecraft:hardened_clay, tile.clayHardened.name, Hardened Clay
minecraft:coal_block, tile.blockCoal.name, Block of Coal
minecraft:packed_ice, tile.icePacked.name, Packed Ice
minecraft:double_plant, tile.doublePlant.name, tile.doublePlant.name
最後に編集したユーザー A.K. [ 2014年3月11日(火) 22:48 ], 累計 1 回
もじんぐしたい。。。。
アバター
A.K.
ID:996a4c3d
ラピスラズリ収集家
 
記事: 1359
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.161601)

1.7アイテム固有文字列一覧

投稿記事by A.K. » 2014年3月03日(月) 00:22

UniqueName, UnlocalizedName, LocalizedName
minecraft:iron_shovel, item.shovelIron.name, 鉄のシャベル
minecraft:iron_pickaxe, item.pickaxeIron.name, 鉄のツルハシ
minecraft:iron_axe, item.hatchetIron.name, 鉄の斧
minecraft:flint_and_steel, item.flintAndSteel.name, 火打石と打ち金
minecraft:apple, item.apple.name, リンゴ
minecraft:bow, item.bow.name, 弓
minecraft:arrow, item.arrow.name, 矢
minecraft:coal, item.coal.name, 石炭
minecraft:diamond, item.diamond.name, ダイヤモンド
minecraft:iron_ingot, item.ingotIron.name, 鉄インゴット
minecraft:gold_ingot, item.ingotGold.name, 金インゴット
minecraft:iron_sword, item.swordIron.name, 鉄の剣
minecraft:wooden_sword, item.swordWood.name, 木の剣
minecraft:wooden_shovel, item.shovelWood.name, 木のシャベル
minecraft:wooden_pickaxe, item.pickaxeWood.name, 木のツルハシ
minecraft:wooden_axe, item.hatchetWood.name, 木の斧
minecraft:stone_sword, item.swordStone.name, 石の剣
minecraft:stone_shovel, item.shovelStone.name, 石のシャベル
minecraft:stone_pickaxe, item.pickaxeStone.name, 石のツルハシ
minecraft:stone_axe, item.hatchetStone.name, 石の斧
minecraft:diamond_sword, item.swordDiamond.name, ダイヤの剣
minecraft:diamond_shovel, item.shovelDiamond.name, ダイヤのシャベル
minecraft:diamond_pickaxe, item.pickaxeDiamond.name, ダイヤのツルハシ
minecraft:diamond_axe, item.hatchetDiamond.name, ダイヤの斧
minecraft:stick, item.stick.name, 棒
minecraft:bowl, item.bowl.name, ボウル
minecraft:mushroom_stew, item.mushroomStew.name, キノコシチュー
minecraft:golden_sword, item.swordGold.name, 金の剣
minecraft:golden_shovel, item.shovelGold.name, 金のシャベル
minecraft:golden_pickaxe, item.pickaxeGold.name, 金のツルハシ
minecraft:golden_axe, item.hatchetGold.name, 金の斧
minecraft:string, item.string.name, 糸
minecraft:feather, item.feather.name, 羽
minecraft:gunpowder, item.sulphur.name, 火薬
minecraft:wooden_hoe, item.hoeWood.name, 木のクワ
minecraft:stone_hoe, item.hoeStone.name, 石のクワ
minecraft:iron_hoe, item.hoeIron.name, 鉄のクワ
minecraft:diamond_hoe, item.hoeDiamond.name, ダイヤのクワ
minecraft:golden_hoe, item.hoeGold.name, 金のクワ
minecraft:wheat_seeds, item.seeds.name, 種
minecraft:wheat, item.wheat.name, 小麦
minecraft:bread, item.bread.name, パン
minecraft:leather_helmet, item.helmetCloth.name, 革の帽子
minecraft:leather_chestplate, item.chestplateCloth.name, 革の上着
minecraft:leather_leggings, item.leggingsCloth.name, 革のズボン
minecraft:leather_boots, item.bootsCloth.name, 革のブーツ
minecraft:chainmail_helmet, item.helmetChain.name, チェーンヘルメット
minecraft:chainmail_chestplate, item.chestplateChain.name, チェーンチェストプレート
minecraft:chainmail_leggings, item.leggingsChain.name, チェーンレギンス
minecraft:chainmail_boots, item.bootsChain.name, チェーンブーツ
minecraft:iron_helmet, item.helmetIron.name, 鉄のヘルメット
minecraft:iron_chestplate, item.chestplateIron.name, 鉄のチェストプレート
minecraft:iron_leggings, item.leggingsIron.name, 鉄のレギンス
minecraft:iron_boots, item.bootsIron.name, 鉄のブーツ
minecraft:diamond_helmet, item.helmetDiamond.name, ダイヤのヘルメット
minecraft:diamond_chestplate, item.chestplateDiamond.name, ダイヤのチェストプレート
minecraft:diamond_leggings, item.leggingsDiamond.name, ダイヤのレギンス
minecraft:diamond_boots, item.bootsDiamond.name, ダイヤのブーツ
minecraft:golden_helmet, item.helmetGold.name, 金のヘルメット
minecraft:golden_chestplate, item.chestplateGold.name, 金のチェストプレート
minecraft:golden_leggings, item.leggingsGold.name, 金のレギンス
minecraft:golden_boots, item.bootsGold.name, 金のブーツ
minecraft:flint, item.flint.name, 火打石
minecraft:porkchop, item.porkchopRaw.name, 生の豚肉
minecraft:cooked_porkchop, item.porkchopCooked.name, 焼き豚
minecraft:painting, item.painting.name, 絵画
minecraft:golden_apple, item.appleGold.name, 金のリンゴ
minecraft:sign, item.sign.name, 看板
minecraft:wooden_door, item.doorWood.name, 木のドア
minecraft:bucket, item.bucket.name, バケツ
minecraft:water_bucket, item.bucketWater.name, 水入りバケツ
minecraft:lava_bucket, item.bucketLava.name, 溶岩入りバケツ
minecraft:minecart, item.minecart.name, トロッコ
minecraft:saddle, item.saddle.name, サドル
minecraft:iron_door, item.doorIron.name, 鉄のドア
minecraft:redstone, item.redstone.name, レッドストーン
minecraft:snowball, item.snowball.name, 雪玉
minecraft:boat, item.boat.name, ボート
minecraft:leather, item.leather.name, 革
minecraft:milk_bucket, item.milk.name, 牛乳
minecraft:brick, item.brick.name, レンガ
minecraft:clay_ball, item.clay.name, 粘土
minecraft:reeds, item.reeds.name, サトウキビ
minecraft:paper, item.paper.name, 紙
minecraft:book, item.book.name, 本
minecraft:slime_ball, item.slimeball.name, スライムボール
minecraft:chest_minecart, item.minecartChest.name, チェスト付きトロッコ
minecraft:furnace_minecart, item.minecartFurnace.name, かまど付きトロッコ
minecraft:egg, item.egg.name, 卵
minecraft:compass, item.compass.name, コンパス
minecraft:fishing_rod, item.fishingRod.name, 釣竿
minecraft:clock, item.clock.name, 時計
minecraft:glowstone_dust, item.yellowDust.name, グロウストーンダスト
minecraft:fish, item.fish.name, Raw Fish
minecraft:cooked_fished, item.fish.name, Cooked Fish
minecraft:dye, item.dyePowder.name, イカスミ
minecraft:bone, item.bone.name, 骨
minecraft:sugar, item.sugar.name, 砂糖
minecraft:cake, item.cake.name, ケーキ
minecraft:bed, item.bed.name, ベッド
minecraft:repeater, item.diode.name, レッドストーンリピーター
minecraft:cookie, item.cookie.name, クッキー
minecraft:filled_map, item.map.name, 地図
minecraft:shears, item.shears.name, ハサミ
minecraft:melon, item.melon.name, スイカ
minecraft:pumpkin_seeds, item.seeds_pumpkin.name, カボチャの種
minecraft:melon_seeds, item.seeds_melon.name, スイカの種
minecraft:beef, item.beefRaw.name, 生の牛肉
minecraft:cooked_beef, item.beefCooked.name, ステーキ
minecraft:chicken, item.chickenRaw.name, 生の鶏肉
minecraft:cooked_chicken, item.chickenCooked.name, 焼き鳥
minecraft:rotten_flesh, item.rottenFlesh.name, 腐った肉
minecraft:ender_pearl, item.enderPearl.name, エンダーパール
minecraft:blaze_rod, item.blazeRod.name, ブレイズロッド
minecraft:ghast_tear, item.ghastTear.name, ガストの涙
minecraft:gold_nugget, item.goldNugget.name, 金塊
minecraft:nether_wart, item.netherStalkSeeds.name, ネザーウォート
minecraft:potion, item.potion.name, 水入り瓶
minecraft:glass_bottle, item.glassBottle.name, ガラス瓶
minecraft:spider_eye, item.spiderEye.name, クモの目
minecraft:fermented_spider_eye, item.fermentedSpiderEye.name, 発酵したクモの目
minecraft:blaze_powder, item.blazePowder.name, ブレイズパウダー
minecraft:magma_cream, item.magmaCream.name, マグマクリーム
minecraft:brewing_stand, item.brewingStand.name, 醸造台
minecraft:cauldron, item.cauldron.name, 大釜
minecraft:ender_eye, item.eyeOfEnder.name, エンダーアイ
minecraft:speckled_melon, item.speckledMelon.name, きらめくスイカ
minecraft:spawn_egg, item.monsterPlacer.name, スポーン
minecraft:experience_bottle, item.expBottle.name, エンチャントの瓶
minecraft:fire_charge, item.fireball.name, ファイヤーチャージ
minecraft:writable_book, item.writingBook.name, 本と羽ペン
minecraft:written_book, item.writtenBook.name, 記入済みの本
minecraft:emerald, item.emerald.name, エメラルド
minecraft:item_frame, item.frame.name, 額縁
minecraft:flower_pot, item.flowerPot.name, 植木鉢
minecraft:carrot, item.carrots.name, ニンジン
minecraft:potato, item.potato.name, ジャガイモ
minecraft:baked_potato, item.potatoBaked.name, ベイクドポテト
minecraft:poisonous_potato, item.potatoPoisonous.name, 青くなったジャガイモ
minecraft:map, item.emptyMap.name, 白紙の地図
minecraft:golden_carrot, item.carrotGolden.name, 金のニンジン
minecraft:skull, item.skull.name, スケルトンの頭
minecraft:carrot_on_a_stick, item.carrotOnAStick.name, ニンジン付きの棒
minecraft:nether_star, item.netherStar.name, ネザースター
minecraft:pumpkin_pie, item.pumpkinPie.name, パンプキンパイ
minecraft:fireworks, item.fireworks.name, ロケット花火
minecraft:firework_charge, item.fireworksCharge.name, 花火の星
minecraft:enchanted_book, item.enchantedBook.name, エンチャントの本
minecraft:comparator, item.comparator.name, レッドストーンコンパレーター
minecraft:netherbrick, item.netherbrick.name, ネザーレンガ
minecraft:quartz, item.netherquartz.name, ネザー水晶
minecraft:tnt_minecart, item.minecartTnt.name, TNT付きトロッコ
minecraft:hopper_minecart, item.minecartHopper.name, ホッパー付きトロッコ
minecraft:iron_horse_armor, item.horsearmormetal.name, Iron Horse Armor
minecraft:golden_horse_armor, item.horsearmorgold.name, Gold Horse Armor
minecraft:diamond_horse_armor, item.horsearmordiamond.name, Diamond Horse Armor
minecraft:lead, item.leash.name, Lead
minecraft:name_tag, item.nameTag.name, Name Tag
minecraft:command_block_minecart, item.minecartCommandBlock.name, Minecart with Command Block
minecraft:record_13, item.record.name, 音楽ディスク
minecraft:record_cat, item.record.name, 音楽ディスク
minecraft:record_blocks, item.record.name, 音楽ディスク
minecraft:record_chirp, item.record.name, 音楽ディスク
minecraft:record_far, item.record.name, 音楽ディスク
minecraft:record_mall, item.record.name, 音楽ディスク
minecraft:record_mellohi, item.record.name, 音楽ディスク
minecraft:record_stal, item.record.name, 音楽ディスク
minecraft:record_strad, item.record.name, 音楽ディスク
minecraft:record_ward, item.record.name, 音楽ディスク
minecraft:record_11, item.record.name, 音楽ディスク
minecraft:record_wait, item.record.name, 音楽ディスク
最後に編集したユーザー A.K. [ 2014年3月11日(火) 22:49 ], 累計 1 回
もじんぐしたい。。。。
アバター
A.K.
ID:996a4c3d
ラピスラズリ収集家
 
記事: 1359
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.163035)

Re: 1.7ブロック固有文字列一覧

投稿記事by tohkeh3 » 2014年3月11日(火) 18:11

A.K. さんが書きました:

spoilerに入れた方が良いのでは。
アバター
tohkeh3
ID:5e28647e
木を殴ってる
 
記事: 37
登録日時: 2012年11月30日(金) 17:57
お住まい: 神奈川

  • (PostNo.165609)

Re: ◆総合◆Modderのための雑談所

投稿記事by Ferne » 2014年3月25日(火) 19:59

1.6.xから1.7.2へのアイテム・ブロック引継ぎ条件、覚え書きです。
1.6.x側であらかじめmod内で後述の処理を施すことで、1.7.2へ引継ぎ可能なsaveデータを構築できるかもしれません。
3/24追記:同文字色部分
3/29修正:ItemBlockの引数が-256されて無かったのを修正
1.7.2側でItemBlockのID移動が必要なので追記

4/20通知:Forge1056以降FMLに更新があり、BlockIDのItem側を合わせる処理が不要となりました。

ブロック編
・ModIDが一致していること(@Modのあれです
・GameRegistry.registerBlockで名前付き登録している、かつ一致していること
 ※必然的にItemBlockインスタンスが存在していることが必須です
・block.classの完全修飾名が一致していること
 ※1.7.2側は完全修飾名が一致する ”Itemを継承していない” クラスが存在するだけでかまいません
  registerBlock(Block,"name"))を使っている場合は、同一名の空クラスさえ存在していれば、実インスタンスは別クラスでもかまいません
  registerBlock(Block,Class<? extends ItemBlock>,"name")を使っている場合も、わざとitemを継承しない空クラスを用意して
  実際に使用するクラス名を別なものにしておく事で後述の対策を不要にできます。

 ※registerBlock(Block,name)で登録している場合のみ、単純な登録で反映されます。
 ※任意のitemBlock拡張クラスを指定している場合、アイテム扱いで認識され、ブロック側のID表が構築されず最悪例外で止まります。
 ※任意のItemBlock拡張クラスを使用している場合、回避するためには下記のような手順を踏む必要があります。
コード: 全て選択
      Block b = new Block(blockid, Material.air);
      //ItemBlockを生成しておく
      //Item.itemsListへ登録するのは、任意のItemBlock拡張クラスのインスタンスとするために先に生成する。
      Item i = new ItemBlock(blockid - 256);
      //任意のItemBlock拡張クラスでregisterBlockする。
      //これによりItem.itemsListへ任意のItemBlock拡張クラスのインスタンスが上書きされる
      GameRegistry.registerBlock(b, Class<? extends ItemBlock>, "name");
      //生成しておいたItemBlockインスタンスをGameData、GameRegistryへ再度登録して登録情報だけ上書きする。
      GameData.newItemAdded(i);
      GameRegistry.registerItem(i,"name");


Forge1056以降より、不要になりました。
・ここまでやってもItemBlock側が移動されないので
下記のようなクラスを用意して後述のFMLMissingMappingsEvent中で呼びましょう。
※class名のXXX部分は被らなければそれで構いません、Mod名などをprefixに。
※cpw.mods.fml.common.registryに置いていますが
 GameData.itemRegistry.reassignMappingさえ呼べればよいのでリフレクション呼ぶことで
 FMLMissingMappingsEvent中などに直接書くこともできます。

コード: 全て選択
package cpw.mods.fml.common.registry;

import com.google.common.collect.Maps;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import net.minecraft.item.ItemBlock;

import java.util.Map;

/**
 * Created by Furia on 14/03/29.
 * XXX部分は被らないclass名であれば構いません、Mod名などをprefixに。
 */
public class XXXXXXXXCallHelper {
    static void ItemBlockIdSynchronize(){
        Map<String, Integer> blockTransactionalNamedIds = ObfuscationReflectionHelper.getPrivateValue(FMLControlledNamespacedRegistry.class, GameData.blockRegistry, "transactionalNamedIds");

        Map<String, Integer> itemTransactionalNamedIds = ObfuscationReflectionHelper.getPrivateValue(FMLControlledNamespacedRegistry.class, GameData.itemRegistry, "transactionalNamedIds");
        Map<String, Integer> itemFrozenIds = ObfuscationReflectionHelper.getPrivateValue(FMLControlledNamespacedRegistry.class, GameData.itemRegistry, "transactionalNamedIds");

        Map<String, Integer> itemMissingIds = Maps.difference(itemFrozenIds, itemTransactionalNamedIds).entriesOnlyOnLeft();

        for(Map.Entry<String,Integer> entry : blockTransactionalNamedIds.entrySet()){
            String name = entry.getKey();
            int blockId = entry.getValue();

            if(itemMissingIds.containsKey(name)){
                int oldItemId = itemMissingIds.get(name);
                if(oldItemId != blockId && GameData.itemRegistry.get(name) instanceof ItemBlock)
                    GameData.itemRegistry.reassignMapping(name, blockId);
            }
        }
    }
}



アイテム編
・ModIDが一致していること(@Modのあれです
・GameRegistry.registerItemで名前付き登録している、かつ一致していること
・item.classの完全修飾名が一致していること
 ※1.7.2側は完全修飾名が一致するクラスが存在し、itemを継承していることが必要です。
実際にインスタンス生成に使用するクラスは別のクラスでもかまいません。


また、Forge#1046での場合、アイテムが減る等の変更がある場合通常Worldに入れません
ブロックを追加するModで有った場合さらにItemBlock側のIDマッピングもする必要がります
@Mod付与クラス内でFMLMissingMappingsEventを処理する必要がります。
コード: 全て選択
    @Mod.EventHandler
    public void MissingMappingsEvent(FMLMissingMappingsEvent event){
        //ここで、Block編で用意したクラスメソッドを呼びます。
        //XXX部分は被らないclass名であれば構いません、Mod名などをprefixに。
        XXXXXXXXCallHelper.ItemBlockIdSynchronize();

        //過去に追加されたitem or blockでmodidの一致するもののうち、現在registerされて居ないListが取得されます。
        event.applyModContainer(Loader.instance().activeModContainer());
        for(FMLMissingMappingsEvent.MissingMapping mapping : event.get()){
            //IGNORE:無視を設定します。
            //それ以外ではWorldに入れません。
            //空いたIDは他のModに使用される可能性があるため、別のitemに化ける可能性があります。
            mapping.setAction(FMLMissingMappingsEvent.Action.IGNORE);
        }
    }


※簡易に、全てのID不整合を無視してロードするためのModを作成しましたので参考までに
IgnoreMissingIds mc1.7.2-r1
※上記処理を1.6.x側で行わない場合に、手動でid表を書き変えるための補助modも参考までに用意しています。
 ツールのようなものですが、1.7.2環境へmodとして導入して使用するものとなっています。
 また手順が若干複雑なため、jarに同封のreadmeを熟読ください。
 加えて、ignoreMissingIds機能も内包しています。
 IDの不整合に関して消えるitemの特定などはreadmeに記載のとおり別途ファイルに出力されたデータを参照ください
IDFixer mc1.7.2-r1
minecraft内でも、農家。
農家に休日なんて無い。けど、時間はある。
accountNameAlias:furia/ferne/flammpfeil/scharfer
アバター
Ferne
ID:765c65a5
レッドストーン掘り
 
記事: 531
登録日時: 2011年11月29日(火) 23:48

  • (PostNo.187290)

1.7.2から1.7.10に引き継げない例

投稿記事by A.K. » 2014年8月10日(日) 20:14

ほぼすべてのMODが1.7.2でビルドしても1.7.10で動かすことが可能ですが、以下に記す箇所に関係する部分を含むMODはリフレクション等の処置をしない限り、両方で動作させることが出来ません。

  • 何かの描画の際に、ScaledResolutionのインスタンスを生成している。
  • Blocksクラス内のBlockインスタンスのいづれかを参照している。
もじんぐしたい。。。。
アバター
A.K.
ID:e23041b3
ラピスラズリ収集家
 
記事: 1359
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.188119)

あるべ氏に捧ぐ

投稿記事by smn » 2014年8月14日(木) 20:40

もぢんぐの楽しいひととき
画像
画像
画像

しかしこれは公開できないなぁ
自分専用ですかね.
「こりゃたまらん」
smn
ID:9a44f80f
木を殴ってる
 
記事: 24
登録日時: 2014年1月03日(金) 08:22

  • (PostNo.189411)

【1.7】アイテムのリーチを変更する【チュートリアル】

投稿記事by A.K. » 2014年8月20日(水) 23:32

アイテムのリーチを変更(拡大)するやり方の1つを紹介します。
イベント利用の都合上、1.7以降でしか動作しません。(TickHandlerを使えば、1.6以前でも動くだろうと思います。)
私のやり方が最適ではないので、実装される場合は、ご自身の環境に合わせて適宜書き換えて下さい。

・必要なクラス
Modエントリークラス:proxyのインスタンス登録と、イベント登録
proxyクラス:Client側の処理なので、proxy内で処理。FMLへの登録自体をproxyで行えば、別のクラスを用意しても良い。
Messageクラス;Clientでの処理結果をServerに渡す。
MessageHandlerクラス:ClientからMessageを受け取って、処理する。
Packethandlerクラス:Messageの登録等。

・Modエントリークラス
コード: 全て選択
package ak.sampleMod;
import 省略

//FMLのパケットシステムはForge 10.12.1.1090以降でないと動作しないので、dependenciesでそれ以降を指定すること。
@Mod(modid = "SampleMod", name = "SampleMod", version = "1.0", dependencies = "required-after:Forge@[10.12.1.1090,)", useMetadata = true)
public class SampleMod {

    @Mod.Instance("SampleMod")
    public static SampleMod INSTANCE;

    @SidedProxy(clientSide = "ak.sampleMod.ClientProxy", serverSide = "ak.sampleMod.CommonProxy")
    public static CommonProxy proxy;

    @EventHandler
    public void preInit(FMLPostInitializationEvent event) {
        //Messageの登録呼び出し
        PacketHandler.init();
    }

    @EventHandler
    public void init(FMLInitializationEvent event) {
        //今回利用するEventはFMLのものなので、こちらで登録。
        FMLCommonHandler.instance().bus().register(proxy);
    }
}

・proxyクラス(CommonProxyクラスは省略。)
コード: 全て選択
package ak.sampleMod;
import 省略
public class ClientProxy extends CommonProxy {
    public static Minecraft mc = Minecraft.getMinecraft();
    private static Timer timer = ObfuscationReflectionHelper.getPrivateValue(Minecraft.class, mc, 16);
    @SubscribeEvent
    public void mouseHandlingEvent(InputEvent.MouseInputEvent event) {
        if (mc.gameSettings.keyBindAttack.getIsKeyPressed() && mc.thePlayer != null) {
            changeObjectMoouseOver(mc.thePlayer);
        }
    }

    private void changeObjectMoouseOver(EntityPlayer player) {
        ItemStack heldItem = player.getCurrentEquippedItem();
        if (heldItem != null && heldItem.getItem() instanceof ItemSword) {
            MovingObjectPosition MOP = getMouseOverSpecialReach(player, 10D, timer.renderPartialTicks);
            if (MOP != null && MOP.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) {
                Entity pointedEntity = MOP.entityHit;
                if (pointedEntity instanceof EntityLivingBase || pointedEntity instanceof EntityItemFrame) {
                    PacketHandler.INSTANCE.sendToServer(new MessageExtendedReachAttack(pointedEntity));
                }
            }
        }
    }

    private MovingObjectPosition getMouseOverSpecialReach(EntityLivingBase viewingEntity, double reach, float partialTicks) {
        MovingObjectPosition MOP = null;
        if (viewingEntity != null) {
            if (viewingEntity.worldObj != null) {
                MOP = viewingEntity.rayTrace(reach, partialTicks);
                Vec3 viewPosition = viewingEntity.getPosition(partialTicks);
                double d1 = 0;

                if (MOP != null) {
                    d1 = MOP.hitVec.distanceTo(viewPosition);
                }

                Vec3 lookVector = viewingEntity.getLook(partialTicks);
                Vec3 reachVector = viewPosition.addVector(lookVector.xCoord * reach, lookVector.yCoord * reach, lookVector.zCoord * reach);
                Vec3 vec33 = null;
                float f1 = 1.0F;
                @SuppressWarnings("unchecked")
                List<Entity> list = viewingEntity.worldObj.getEntitiesWithinAABBExcludingEntity(viewingEntity, viewingEntity.boundingBox.addCoord(lookVector.xCoord * reach, lookVector.yCoord * reach, lookVector.zCoord * reach).expand(f1, f1, f1));
                double d2 = d1;
                Entity pointedEntity = null;
                for (Entity entity : list) {
                    if (entity.canBeCollidedWith())  {
                        float collisionSize = entity.getCollisionBorderSize();
                        AxisAlignedBB axisalignedbb = entity.boundingBox.expand(collisionSize, collisionSize, collisionSize);
                        MovingObjectPosition movingobjectposition = axisalignedbb.calculateIntercept(viewPosition, reachVector);

                        if (axisalignedbb.isVecInside(viewPosition)) {
                            if (0.0D < d2 || d2 == 0.0D) {
                                pointedEntity = entity;
                                vec33 = movingobjectposition == null ? viewPosition : movingobjectposition.hitVec;
                                d2 = 0.0D;
                            }
                        } else if (movingobjectposition != null)  {
                            double d3 = viewPosition.distanceTo(movingobjectposition.hitVec);

                            if (d3 < d2 || d2 == 0.0D) {
                                if (entity == viewingEntity.ridingEntity && !entity.canRiderInteract()) {
                                    if (d2 == 0.0D) {
                                        pointedEntity = entity;
                                        vec33 = movingobjectposition.hitVec;
                                    }
                                } else {
                                    pointedEntity = entity;
                                    vec33 = movingobjectposition.hitVec;
                                    d2 = d3;
                                }
                            }
                        }
                    }
                }

                if (pointedEntity != null && (d2 < d1 || MOP == null)) {
                    MOP = new MovingObjectPosition(pointedEntity, vec33);
                }
            }
        }
        return MOP;
    }
}


・Messageクラス
コード: 全て選択
package ak.sampleMod;

import cpw.mods.fml.common.network.simpleimpl.IMessage;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.Entity;
import net.minecraft.world.World;

public class MessageExtendedReachAttack implements IMessage {

    private int entityId;

    public MessageExtendedReachAttack(){}

    public MessageExtendedReachAttack(Entity entity) {
        this.entityId = entity.getEntityId();
    }

    @Override
    public void fromBytes(ByteBuf buf) {
        this.entityId = buf.readInt();
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(this.entityId);
    }

    public Entity getEntityFromId(World world) {
        return world.getEntityByID(this.entityId);
    }
}


・MessageHandlerクラス
コード: 全て選択
package ak.sampleMod;

import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;

public class MessageExtendedReachAttackHandler implements IMessageHandler<MessageExtendedReachAttack, IMessage> {
    @Override
    public IMessage onMessage(MessageExtendedReachAttack message, MessageContext ctx) {
        EntityPlayer player = ctx.getServerHandler().playerEntity;
        Entity targetEntity = message.getEntityFromId(player.worldObj);
        player.attackTargetEntityWithCurrentItem(targetEntity);
        return null;
    }
}


・PacketHandlerクラス
コード: 全て選択
package ak.sampleMod;

import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import cpw.mods.fml.relauncher.Side;

public class PacketHandler {
    /*MOD固有のSimpleNetworkWrapperを取得。
    * 文字列は他のMODと被らないようにMOD_IDを指定しておくと良い*/
    public static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel("samplemod");

    public static void init() {
        /*Messageクラスの登録。
        * 第一引数:IMessageHandlerクラス
        * 第二引数:送るMessageクラス
        * 第三引数:登録番号。255個まで
        * 第四引数:ClientとServerのどちらに送るか。送り先*/
        INSTANCE.registerMessage(MessageExtendedReachAttackHandler.class, MessageExtendedReachAttack.class, 0, Side.SERVER);
    }
}

もじんぐしたい。。。。
アバター
A.K.
ID:e23041b3
ラピスラズリ収集家
 
記事: 1359
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.189511)

Re: ◆総合◆Modderのための雑談所

投稿記事by Crow314 » 2014年8月21日(木) 14:17

雑談が減っている気がするのは、僕だけですかね?

・・・1.6.4のmoddingwikiに、製錬レシピと醸造レシピのチュートリアルがないのは何故だ!?
技術部とMOD開発部の入部希望生
節電鯖民
実は、MinecraftJapanWikiの編集もやってます
開発したMOD:Crow314's mods!
アバター
Crow314
ID:9a11ee51
大工さん
 
記事: 66
登録日時: 2014年6月14日(土) 14:31
お住まい: 近畿

  • (PostNo.189628)

Re: ◆総合◆Modderのための雑談所

投稿記事by komugiko » 2014年8月21日(木) 21:29

クロウ さんが書きました:・・・1.6.4のmoddingwikiに、製錬レシピと醸造レシピのチュートリアルがないのは何故だ!?

醸造はおいといて、製錬は1.3.から1.6.4まであまり変化ないので書かれていないのかと思いますよ。
komugikoの製作MOD・[1.7.10]
http://forum.minecraftuser.jp/viewtopic.php?f=13&t=12046

主に、MOD公開/紹介フォーラム・MOD作成依頼トピック・アイディアトピックを徘徊しています。

仕事忙しいので年度末まで活動が怪しいです。
komugiko
ID:8032770e
石炭掘り
 
記事: 228
登録日時: 2013年3月07日(木) 21:26
お住まい: コンフィグファルの中

  • (PostNo.194905)

Re: ◆総合◆Modderのための雑談所

投稿記事by 問題児のあずきばー » 2014年9月20日(土) 14:38

FORGEを使用したMODDINGで質問があります。
釣竿で釣れる魚の種類を追加したいのですが、どうやって追加したらいいですか?
また、MODINGの初心者がみるとよいサイトとかがあったら教えてください。
問題児のあずきばー
ID:4341d73e
 

  • (PostNo.195003)

Re: ◆総合◆Modderのための雑談所

投稿記事by A.K. » 2014年9月20日(土) 23:35

問題児のあずきばー さんが書きました:FORGEを使用したMODDINGで質問があります。
釣竿で釣れる魚の種類を追加したいのですが、どうやって追加したらいいですか?
また、MODINGの初心者がみるとよいサイトとかがあったら教えてください。

ここは、そういう質問をする場所ではありません。トピックのルールを良く読みましょう。
本来はモデレータに移動してもらうのですが、そんな大層な内容でもないので、回答します。
釣り竿で釣れる魚を増やしたい場合は、FishHooksクラスのadd~メソッドを用いれば良いです。
FishHooksクラスは1.7.10以降にしか無いので、それ以前で追加することは難しいです。
自作の釣り竿を追加したほうが楽でしょう。

Modding初心者向けのサイトかどうかは知りませんが、Minecraft_Modding_WikiがMOD開発者のためのサイトとなっています。
もじんぐしたい。。。。
アバター
A.K.
ID:2d851e59
ラピスラズリ収集家
 
記事: 1359
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.208311)

Re: ◆総合◆Modderのための雑談所

投稿記事by 炎の戦士ピスタチオン » 2014年12月21日(日) 03:02

なんだか書き込みなくて寂しいのでかいてみたり。
思い立って1.8Moddingしはじめたら「モデル見つかりません」ばかり言われて息絶えました。合ってるはずなのに(合ってない。)
うーん、この仕様は私にとって痛い変更になりそうです…。
アバター
炎の戦士ピスタチオン
ID:9cc5ef16
木を殴ってる
 
記事: 28
登録日時: 2013年6月21日(金) 02:26
お住まい: 地霊殿:ゴミ箱

  • (PostNo.208350)

Re: ◆総合◆Modderのための雑談所

投稿記事by kegare » 2014年12月21日(日) 06:09

炎の戦士ピスタチオン さんが書きました:なんだか書き込みなくて寂しいのでかいてみたり。
思い立って1.8Moddingしはじめたら「モデル見つかりません」ばかり言われて息絶えました。合ってるはずなのに(合ってない。)
うーん、この仕様は私にとって痛い変更になりそうです…。

僕もそれで行き詰まってます。
アイテム・ブロックを追加しなければ問題ないので追加しないMODは全て1.8に対応させたのですが…
アバター
kegare
ID:32755dea
レッドストーン掘り
 
記事: 665
登録日時: 2012年10月27日(土) 06:06

  • (PostNo.211493)

Re: ◆総合◆Modderのための雑談所

投稿記事by squarep » 2015年1月11日(日) 12:15

JUnitを勉強していてMod用のテストフレームワークがあれば便利かなと思った。
難しいかもしれないけど、フィールドに値が出るようなものであれば可能かなと。
squarep
ID:d6c274b7
ラピスラズリ収集家
 
記事: 1367
登録日時: 2012年8月25日(土) 16:29

1つ前へ次へ

Return to 開発関連

x