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

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

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

投稿記事by A.K. » 2013年6月11日(火) 22:03

takanasayo さんが書きました:さすがにMOD追加アイテムにまで擬態するのは無理ですがw
あれあくまでも既存書き換え時に競合回避するための方法なのでw

見た目似てるだけでコンセプトは違いますからね.(まあ擬態し切るのはやはり難しいですが.)

チュートリアルを幾つか作っているけど,他のModderからしたらそんなのいいからMODのソースが見たいのでしょうかね?
チュートリアルは余計なものを省いて必要な部分のみにしている一方で,ソースは処理の割り込みや使うかもわからない処理のコメントアウトやそもメソッドにコメントがついていないとかで見れたものではないので,初心者はむしろ見ないほうが良いと思っています.何よりソースの管理が面倒なのですよ.
getchangedsrc使えば抽出できますが,更新のたびに1.2.5,1.4.7,1.5.2対応版のソース出してどこかにアップロードとかしていたら確実に失踪していることでしょう.(いくつかの特殊な事情のMODのソースは見れるようになっていますが.)
gitとかは使ったことがありませんが,個人の開発ではどれくらいメリットが有るのでしょうかね?
もじんぐしたい。。。。
アバター
A.K.
ID:1e285010
ラピスラズリ収集家
 
記事: 1418
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.106732)

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

投稿記事by takanasayo » 2013年6月11日(火) 23:08

A.K. さんが書きました:他のModderからしたらそんなのいいからMODのソースが見たいのでしょうかね?

どうでしょうね?
私もダメージクラフトのチュートリアルではソース付きで解説してますけど、ソースがあった方がわかりやすいかなと思いつつも、他のチュートリアルでは面倒くさくてやってないですが。

個人的にはチュートにソース付いてるとありがたいですが、全部が全部ソースだと困るかな。
コーティングが人によって全然違うので、ソースだけだと理解に苦しむ事が割と・・・(苦笑)
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.106740)

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

投稿記事by A.K. » 2013年6月12日(水) 00:04

takanasayo さんが書きました:どうでしょうね?
私もダメージクラフトのチュートリアルではソース付きで解説してますけど、ソースがあった方がわかりやすいかなと思いつつも、他のチュートリアルでは面倒くさくてやってないですが。

個人的にはチュートにソース付いてるとありがたいですが、全部が全部ソースだと困るかな。
コーティングが人によって全然違うので、ソースだけだと理解に苦しむ事が割と・・・(苦笑)

複雑なシステムの実装法のチュートリアルとかだと実際に動くソースが有ったほうが良いのでしょうね.
私の場合,自分のMODで実現できたシステムの一般化したものをチュートリアルに使っているので,解説コードにその名残がそこかしこに残っているし,実際のMODの処理を削ったコードなので,解説コードで実際に動くかどうかの実験も面倒でやっていないという状態です,

そうそう,チュートリアル作ってて思ったのですが,マルチ化仕様の部分を丁寧に抜き出して処理しておけば,1.2.5と1.5.2で実際の処理の部分のメソッドは(バージョンの違いによるメソッド名の変更,引数調整を除けば)共通化出来るものですね.(プログラムなんだから当然といえば当然か.)
まあ1.2.5と1.5.2の両方を同時に開発している人がほとんどいないので,こんなこと話しても何の足しにもなりませんけどね.
(削除)ここで話す内容ではなく,内々でやるべきことでしたので,後半は削除しました.
最後に編集したユーザー A.K. [ 2013年6月12日(水) 21:27 ], 累計 1 回
もじんぐしたい。。。。
アバター
A.K.
ID:1e285010
ラピスラズリ収集家
 
記事: 1418
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.106825)

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

投稿記事by takanasayo » 2013年6月12日(水) 10:57

1.2.5用BC3.1.5のAPIが公式からなくなっていたので、ソース解析&API自作してエンジン追加に成功した。
ps125の経験が活きたなぁ・・・。

その過程でアドオン開発に便利なTipsを公開してないことに気づいたので、チュートリアル書こうかと思ったんですが、需要の方はありますかね?
例えばBCやICのようにAPI公開されているMODのアドオンや、ps125のように他のMODにアクセスするようなMOD、OptiFineLocalizeFixのような修正パッチなどを開発する時に、自分が必要なファイルだけを差分として出力する方法とか、APIを自作する方法とか。
すでにどっかにチュートリアルあるならわざわざ書かなくても良いかなと思ってるんですが。

A.K. さんが書きました:そうそう,チュートリアル作ってて思ったのですが,マルチ化仕様の部分を丁寧に抜き出して処理しておけば,1.2.5と1.5.2で実際の処理の部分のメソッドは(バージョンの違いによるメソッド名の変更,引数調整を除けば)共通化出来るものですね.

ですねー。
基本的にマルチ化の影響を受けている部分(ワールドデータへのアクセス)が無いMODの場合、マルチ化の影響なんて無いに等しいですし。
私のMODの場合、特にForge用パッチなんかはほぼリビルドだけで済んでますからね(笑)
独自の処理なんかは、メソッド化して呼び出すようにしておくと、バージョン変更時の手間がかなり減るのでオススメです。
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.106921)

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

投稿記事by shift » 2013年6月12日(水) 21:39

takanasayo さんが書きました:例えばBCやICのようにAPI公開されているMODのアドオンや、ps125のように他のMODにアクセスするようなMOD
OptiFineLocalizeFixのような修正パッチなどを開発する時に、自分が必要なファイルだけを差分として出力する方法とか、APIを自作する方法とか。
すでにどっかにチュートリアルあるならわざわざ書かなくても良いかなと思ってるんですが。


個人的にAPIの自作方法のチュートリアルは欲しいです。

他のMODのAPIを見ていてこんな感じに書いてあるのか~と思って
いざ、自分のMODのAPIを作ろうとしても、どのような形にすればいいのかよくわからなくて…
サイン ・Modを作っています
画像
・最近ブログをはじめました
shift
ID:8cebb921
金掘り
 
記事: 369
登録日時: 2012年4月02日(月) 22:16

  • (PostNo.106922)

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

投稿記事by A.K. » 2013年6月12日(水) 21:41

takanasayo さんが書きました:1.2.5用BC3.1.5のAPIが公式からなくなっていたので、ソース解析&API自作してエンジン追加に成功した。
ps125の経験が活きたなぁ・・・。

その過程でアドオン開発に便利なTipsを公開してないことに気づいたので、チュートリアル書こうかと思ったんですが、需要の方はありますかね?
例えばBCやICのようにAPI公開されているMODのアドオンや、ps125のように他のMODにアクセスするようなMOD、OptiFineLocalizeFixのような修正パッチなどを開発する時に、自分が必要なファイルだけを差分として出力する方法とか、APIを自作する方法とか。
すでにどっかにチュートリアルあるならわざわざ書かなくても良いかなと思ってるんですが。

Modding wikiのAPIの項目にそこら辺の内容が書かれていないのでしたら少なくとも日本語ではどこにも無いと思います.
BC,ICのアドオンはフォーラムでもちらほら開発者がおり,その方々には必要ないかもしれないですが,新規にアドオンを開発する土壌があるので新規の方向けにチュートリアルはあって良いと思います.

1.2.5で思い出しましたが,Forge171ではなく古いビルドを使っている1.2.5利用者は何がネックでビルド171にしないのでしょうかね?
ModLoader内蔵のためにRMLでは正常に動くがFMLでは動かないMODがあるとか?
Forgeビルド105を使っている方もいるようですが,ビルド135ならともかくビルド105はさすがにカバーしきれないですね.
(と言いつつビルド105のソースは残していますけどね.)
もじんぐしたい。。。。
アバター
A.K.
ID:1e285010
ラピスラズリ収集家
 
記事: 1418
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.106939)

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

投稿記事by NurseAngel » 2013年6月12日(水) 22:14

A.K. さんが書きました:gitとかは使ったことがありませんが,個人の開発ではどれくらいメリットが有るのでしょうかね?


gitをあまり使いこなせていない私からしても、
前までgit無しでいったいどうやって開発してたんだろう、
って思い返す程度。

コード: 全て選択
例1:今1.2.5で開発してたけどちょっと1.5に切り替えよう
> git checkout 1.5

例2:1.5のソースに対して実験的な実装をしたいけど駄目だったらすぐ元に戻せるようにしとこう
> git checkout -b test

例3:まだ実装途中だけど別のアイデア思いついちゃった。今のは保留にしてさらに別の環境を作ろう
> git stash
> git checkout -b test2

例4:二番目のアイデアがうまくいったので1.5のソースに合体させよう
> git checkout 1.5
> git merge test2

例5:このバージョンで1.5.xをリリースだ
> git tag 1.5.x

例6:最初の実装も完了したのでバージョン1.5.xに取り込もう
> git rebase test

例7:このバージョンで1.5.yをリリースだ
> git tag 1.5.y

例8:気が済んだので1.2.5に戻ろう
> git checkout 1.2.5



※コマンドは未確認の適当手打ちです、あくまでこんなかんじレベルで
最後に編集したユーザー NurseAngel [ 2013年6月23日(日) 23:26 ], 累計 2 回
NurseAngel
ID:36a0fd66
石炭掘り
 
記事: 205
登録日時: 2012年3月17日(土) 21:38

  • (PostNo.106945)

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

投稿記事by A.K. » 2013年6月12日(水) 23:03

NurseAngel さんが書きました:
A.K. さんが書きました:gitとかは使ったことがありませんが,個人の開発ではどれくらいメリットが有るのでしょうかね?


gitをあまり使いこなせていない私からしても、
前までgit無しでいったいどうやって開発してたんだろう、
って思い返す程度。

なるほど.取り敢えずEclipseとの連携を考えつつ,githubのアカウントを取得して,使えそうだったら使おうかな.
もじんぐしたい。。。。
アバター
A.K.
ID:1e285010
ラピスラズリ収集家
 
記事: 1418
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.106976)

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

投稿記事by takanasayo » 2013年6月13日(木) 00:26

shift さんが書きました:個人的にAPIの自作方法のチュートリアルは欲しいです。
自分のMODのAPIを作ろうとしても、どのような形にすればいいのかよくわからなくて…

あくまでもAPIがないMODと連携するためのAPIの作り方なので、自作MODのAPI開発に役立つかどうかはわかりませんが、需要があるなら書こうかな。
自作用APIは、グループ開発しているか、もしくはアドオンの作成を推奨するか以外では特に必要ないですし。

A.K. さんが書きました:BC,ICのアドオンはフォーラムでもちらほら開発者がおり,その方々には必要ないかもしれないですが,新規にアドオンを開発する土壌があるので新規の方向けにチュートリアルはあって良いと思います.

ふむふむ。
結構中級~上級者向けの内容になるので新規開発組には厳しいかもしれませんが・・・
なんとか書いてみますかね。

A.K. さんが書きました:1.2.5で思い出しましたが,Forge171ではなく古いビルドを使っている1.2.5利用者は何がネックでビルド171にしないのでしょうかね?
Forgeビルド105を使っている方もいるようですが,ビルド135ならともかくビルド105はさすがにカバーしきれないですね.

105の人は面倒くさいって話でしたがwww
まあ私はその人のために作ったんで、105対応させましたけど、結構厳しかったですね。
105でビルドしたのに、105で動かずに171で動いたり・・・。
結局は読み込み順設定するとMOD読み込まれないという、ModLoaderの不具合?が原因だったんですが。
(これの原因を突き止めるのにかなりかかった)
まあそのMOD以外を105に対応させるつもりは全くないですがww

あとForgeなどを手作業で入れてる人は新しく入れ直すのは面倒って言うのもあると思います。
手馴れてる人はともかく、よくわかんないけど何か動いたからこれ以上いじりたくない、って人もいると思いますし。
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.107351)

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

投稿記事by takanasayo » 2013年6月15日(土) 02:59

例のチュートリアル書いてる最中にブラウザ落ちて全部記事消えた・・・orz
普通にへこむわぁ・・・
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.108223)

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

投稿記事by A.K. » 2013年6月18日(火) 21:27

Forge7.8.0からForge7.8.1にアップデートした際のModding注意点:
  • BlockクラスのisLadderメソッドの変更
7.8.0では
コード: 全て選択
   public boolean isLadder(World world, int x, int y, int z)

でしたが,7.8.1では
コード: 全て選択
    public boolean isLadder(World world, int x, int y, int z, EntityLiving entity)

に変更されています.(一応前のメソッドも残っていますが,@Deprecatedで削除予定になっています.)
これによる影響は梯子扱いのブロックに登れないといったところです.
  • MinecraftForgeClientのClient化
どう書いたら良いか分からなかったので,このように書いたのですが,要はMinecraftForgeClientやそこから呼ばれるクラスがServerサイドでは読まれなくなったということです.(むしろ今まで何故読まれていたのかという感じですがね.)
これにより,MinecraftForgeClientのメソッドを用いたコードはClientProxy内かClientサイドの条件分岐内に書く必要が出て来ました.
よく使われるメソッドとしてはMinecraftForgeClient.registerItemRendererなどがあります.
アイテムの独自レンダリングを行なっている方はご注意下さい.(主に私です.)
  • ItemRenderTypeにEQUIPPED_FIRST_PERSONが追加
これは実はビルド687からなのですが,EQUIPEDがEQUIPPEDとEQUIPPED_FIRST_PERSONに分かれました.
EQUIPPED_FIRST_PERSONは一人称視点での手に持ったアイテムのレンダータイプですが,
今まで通りの描画で良いならEQUIPPED指定でそのまま描画されます.
もじんぐしたい。。。。
アバター
A.K.
ID:1e285010
ラピスラズリ収集家
 
記事: 1418
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.108434)

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

投稿記事by inaka » 2013年6月19日(水) 21:08

他のMODからアイテムを参照できるようにするためのAPI作ってみたいがうまくいかん・・・・・
いろいろ試行錯誤を続けてみるか
inaka
ID:69a2062d
鉄鉱掘り
 
記事: 261
登録日時: 2011年9月22日(木) 11:19
お住まい: 初音島

  • (PostNo.108452)

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

投稿記事by takanasayo » 2013年6月19日(水) 22:14

inaka さんが書きました:他のMODからアイテムを参照できるようにするためのAPI作ってみたいがうまくいかん・・・・・
いろいろ試行錯誤を続けてみるか

今チュートリアル書き直してる最中ですが、APIは参照だけでいいので、以下のような感じでいけますよ。

コード: 全て選択
package 参照したいクラスのパッケージ名

public class 参照したいクラスのクラス名(継承元がある場合には、継承元クラスも記載し、同じようにクラスファイルを作る)
{
    public static Block 参照したいブロックのフィールド名
    public static Item 参照したいアイテムのフィールド名
}


大雑把に言うとこんな感じのファイルを作って、一緒にコンパイルすればおkです。
注意点としては、配布時には、API用のファイルを削除して配布する必要があります。

インスタンスの生成や、メソッド参照をしたい場合には、それぞれコンストラクタ、メソッド定義を追加すればいけます。

追記:他のMODから参照する場合、単純なアドオンなどのように参照対象のMODが前提となる場合には、APIを使って参照を書けばいいのですが、参照対象MODがなくても動作するようなMODを作りたい場合には、まず先にMODが導入されているかどうかをチェックし、導入されていたら参照コードを実行する、という書き方をしないと実行時エラーでマイクラが落ちます。

例)psSystemが導入されていたらpsSystemの経験値オーブドロップ処理を呼び出す(psBuildの一部抜粋)
コード: 全て選択
public static boolean ispsSystem = ModLoader.isModLoaded("mod_psSystem");

public void spawnXPOrbOre(World world, int x, int y, int z, int exp) {
    if(ispsSystem) {
        mod_psSystem.spawnXPOrbOre(world, x, y, z, exp);
    }
}
最後に編集したユーザー takanasayo [ 2013年6月20日(木) 06:37 ], 累計 4 回
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.108510)

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

投稿記事by takanasayo » 2013年6月20日(木) 06:25

ちょっとマメ知識。

工業化MODなどを作っていると温度表示が必要な場合が出てくる。
そこで問題になるのが、英語圏で「℃」の表示をどうするのか?ってこと。

マイクラではJavaがUnicodeを扱えるため、以下の書き方が可能。
コード: 全て選択
"\u00B0C" //上丸+C
"\u2103" //℃


どちらか好きな方を選ぶと良い(英語圏では上の書き方が使われているっぽい)
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.108516)

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

投稿記事by takanasayo » 2013年6月20日(木) 09:10

マメ知識2:無名の内部クラスが自動生成されるケース

MODを作成してコンパイルしてみると、クラス名$1.class という、作成した覚えのないクラスが自動生成されるときがある。
クラス名$~~.classは内部クラスを定義した場合に作成されるクラスで、$1~などのように数字が付くものは、無名の内部クラス定義が含まれる場合に出力される。
もしここで本当に無名の内部クラスを作成していたのであれば問題ないが、内部クラスを定義した覚えもないのに出力される事があり、非常に気持ち悪い。

このような場合、列挙型をswicth文に使用していないだろうか?
実は以下のように列挙型をswicth文に指定すると、無名の内部クラスが生成されてしまう。
コード: 全て選択
public enum Sample{ Test1, Test2 }
public void testcode(Sample sample) {
    swicth(sample) {
    case Test1: return;
    case Test2: return;
    case default: return;
    }
}

これは、列挙型の実態がクラスであるため。

この場合、以下のように書けば内部クラスの生成を回避できる。
コード: 全て選択
public enum Sample{ Test1, Test2 }
public void testcode(Sample sample) {
    swicth(sample.ordinal() ) {
    case 0: return;
    case 1: return;
    case default: return;
    }
}

しかし、列挙型の利点が失われるので、素直にif文で判定した方が良い。

まあぶっちゃけ、内部クラスが出力されても問題はないので気にしなければ良いだけなんだけど、中身のないゴミクラスを生成するので、気になる人は(私のように)我慢できないかもしれないので、書いておきます。
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.109421)

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

投稿記事by Getaji » 2013年6月23日(日) 22:00

自分がかなり悩んでようやく解決できたので、ModdingWikiに防具の追加方法を書いてみた。
同じように悩んでる人の助けになればいいなあ・・・。
防具の追加

ミスがあったら教えて下さい_:(´ཀ`」∠):_
アバター
Getaji
ID:3efc3c44
木を殴ってる
 
記事: 30
登録日時: 2012年2月03日(金) 22:35
お住まい: 路地裏

  • (PostNo.109427)

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

投稿記事by takanasayo » 2013年6月23日(日) 22:37

Getaji さんが書きました:自分がかなり悩んでようやく解決できたので、ModdingWikiに防具の追加方法を書いてみた。
ミスがあったら教えて下さい_:(´ཀ`」∠):_

addArmorMaterialの第二引数は、耐久度ではなく、耐久度基準値ですね。
この値に部位ごとの定数が乗算されて、実際の耐久値が決まります。
なので、設定562は大きすぎますね。ダイヤでも33なのでw

あとエンチャント適性30だと、レベル1でもレベル16エンチャント出ちゃいますけど、サンプルとしては不適切では?(1.5.2だと、適正/2が使用経験値に加算されます)
サンプルの数値が実際にどういう仕様になるのかも説明した方が良い気がします。
(こういう防具を作るためには、こういう数値を設定する、みたいな)

参考:http://forum.minecraftuser.jp/viewtopic.php?p=76639#p76639
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

  • (PostNo.109562)

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

投稿記事by Getaji » 2013年6月24日(月) 19:20

ご指摘ありがとうございます、修正しました。
やはりこういう場に載せる際にはしっかりソースコードや挙動を確認しないとダメですね。猛省。
また参考トピックもありがとうございます。
防具の追加
しかし私の説明下手だなあ・・・。どうにかわかりやすくならないものか。
アバター
Getaji
ID:3efc3c44
木を殴ってる
 
記事: 30
登録日時: 2012年2月03日(金) 22:35
お住まい: 路地裏

  • (PostNo.110632)

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

投稿記事by A.K. » 2013年6月29日(土) 20:26

OptiFine HD D5 Ultra for Minecraft 1.5.2においてIItemRendererを使用したアイテムをインベントリに入れた際にそれ以降のスロットのアイテムの描画がおかしくなります.
こちらのコーディングミスの可能性も否定出来ないですが,Optifine抜けば正常に描画されるので,Optifine側の不具合で確定かなと.

描画系不具合報告の多くがOptifine由来で困る.(トップの注意書きが又増えた.)

IItemRenderer使っている方はあまりいないと思いますが,一応情報共有しておきます.
もじんぐしたい。。。。
アバター
A.K.
ID:1e285010
ラピスラズリ収集家
 
記事: 1418
登録日時: 2012年9月03日(月) 19:34

  • (PostNo.110654)

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

投稿記事by takanasayo » 2013年6月29日(土) 21:26

A.K. さんが書きました:描画系不具合報告の多くがOptifine由来で困る.

Optiは元々Renderer系弱いですからねー。
どうでもいいけど個人的にForgeのRecommendedじゃなくてLatedに対応するのをやめて欲しいと思ってたり。
アバター
takanasayo
ID:2d93d573
ラピスラズリ収集家
 
記事: 954
登録日時: 2012年7月26日(木) 04:00
お住まい: 石の中にいる

1つ前へ次へ

Return to 開発関連

x