【総合】トピック立てるまでもない質問【Mod制作】

フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999

返信する

CAPTCHA 認証コード
表示されたコードを正確に入力してください。各文字は大文字・小文字の区別があります。

BBCode: OFF
スマイリー: OFF
トピックのレビュー
   

ファイルを添付します

展開ビュー トピックのレビュー: 【総合】トピック立てるまでもない質問【Mod制作】

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by igaiga » 2018年8月18日(土) 16:40

1.6.4でMODの開発をしようとしています。
動画やwikiを見ながらforgeの導入まで終わり、eclipseでforgeのインポートまでできました。
そこからマインクラフトをeclipseで起動しようとしました。
ですが、実行構成のjavaアプリケーションの中にforgeが存在しませんでした。
これはforgeの導入が失敗してるということでしょうか?
また新規構成から実行構成をする場合はどうすればいいですか?

forgeのversionは1.6.4-9.11.1.964です。
私の見た動画で最新バージョンは導入に失敗すると書いてあったのでこのバージョンを使っています。
jdkは8だとforgeが導入できなかったので7です。

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by apoqliphort_towers » 2018年8月09日(木) 10:50

現在私はforge 1.7.10の環境で工業系のmodを作ろうとしています。
その際に電力の概念を追加しようと思っています。
その際、ソースコードを公開しておりmoddingの際に参考になるmodは何がありますか?

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by MollyNoah » 2018年8月06日(月) 02:11

アドバイスありがとうございました。

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by elise_blacklab » 2018年8月06日(月) 01:51

MollyNoah さんが書きました:文法も少しかじった程度の初心者です。
方法よりも処理の内容や仕組みを理解したいのですが何か良い方法はありますでしょうか。
具体的にどのクラスやメソッドが関わって、レシピの追加になるのかが知りたいです。。

ええと,どこから指摘したらいいやら…
まず何が言いたいかというと,「その部分はレシピを追加する部分の一部でしかないぞ」ということです.
あなたが今直面している問題は「どういう仕組みでこの処理がレシピを追加するのか」ではなくて,「どこからどこまでがレシピの追加なのか」が分からない,ということです.
通常そういう質問をされると我々は「GameRegistry.addRecipe()メソッドがレシピの追加だぜ」という回答をするのですが,
MollyNoah さんが書きました:GameRegistry.addRecipe(new ItemStack(Items.diamond)この1行でやっていること詳しく理解するにはどうしたら良いでしょうか。
というように,メソッド呼び出しががどこからどこまでかも分からず提示して質問してくるあたり,現状であなたが満足に理解できる回答を得られる可能性は低いです.

そもそもJavaのプログラミングにかなり不慣れなようですので,まずJava自体に慣れてください.
Javaの基本的な文法はあらかたマスターしていただいて,オブジェクト指向に関する知識も少々学ばれてから,moddingに挑戦することをお勧めします.

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by MollyNoah » 2018年8月06日(月) 01:06

文法も少しかじった程度の初心者です。
方法よりも処理の内容や仕組みを理解したいのですが何か良い方法はありますでしょうか。
具体的にどのクラスやメソッドが関わって、レシピの追加になるのかが知りたいです。。

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by elise_blacklab » 2018年8月05日(日) 23:54

MollyNoah さんが書きました:forge1.7のチュートリアルをみて、レシピの追加からやっていますが、GameRegistry.addRecipe(new ItemStack(Items.diamond)この1行でやっていること詳しく理解するにはどうしたら良いでしょうか。

その一行で終わりじゃないですよ…?
まずJavaの文法というのは大丈夫なんです?

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by MollyNoah » 2018年8月05日(日) 23:30

forge1.7のチュートリアルをみて、レシピの追加からやっていますが、
GameRegistry.addRecipe(new ItemStack(Items.diamond)
この1行でやっていること詳しく理解するにはどうしたら良いでしょうか。
バニラのソースを見たりしていますがよくわかりません。

レシピの追加をするソースということはわかりますが、
どのようにして追加されている仕組みなのか、少しでも深く知りたいです。

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by 新人もっだー » 2018年7月23日(月) 17:14

forge 1.7.10-10.13.4.1558
intelliJ_idea
の環境です。kotlinを使っているのでcompileを通し、apply plugin: 'kotlin'としていますが、それ以外は「gradlew eclipse」後の環境のままです。その状態でsrc/main/kotlinでModは反応するのですが、
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: The following texture errors were found.
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: ==================================================
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: DOMAIN lifecraft
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: --------------------------------------------------
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: domain lifecraft is missing 2 textures
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: domain lifecraft is missing a resource manager - it is probably a side-effect of automatic texture processing
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: -------------------------
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: The missing resources for domain lifecraft are:
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: textures/items/justice_sword.png
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: textures/items/evil_sword.png
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: -------------------------
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: No other errors exist for domain lifecraft
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: ==================================================
[17:08:37] [Client thread/ERROR] [TEXTURE ERRORS]: +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=

となってしまいます。langもまたしかり。

src
--main
--kotlin
----resources
----assets/lifecraft/textures/items
------justice_sword.png
------evil_sword.png
といった構成です。setTextureName("lifecraft:evil_sword")で設定しています。

build.gradle
コード: 全て選択

buildscript {
    ext.kotlin_version = '1.2.51'
    repositories {
        mavenCentral()
        maven {
            name = "forge"
            url = "http://files.minecraftforge.net/maven"
        }
        maven {
            name = "sonatype"
            url = "https://oss.sonatype.org/content/repositories/snapshots/"
        }
    }
    dependencies {
        classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'forge'
apply plugin: 'kotlin'

version = "1.0"
group= "org.gake.lifecraft" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "lifecraft"

minecraft {
    version = "1.7.10-10.13.4.1558-1.7.10"
    runDir = "eclipse"
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

processResources {
    // this will ensure that this task is redone when the versions change.
    inputs.property "version", project.version
    inputs.property "mcversion", project.minecraft.version

    // replace stuff in mcmod.info, nothing else
    from(sourceSets.main.resources.srcDirs) {
        include 'mcmod.info'

        // replace version and mcversion
        expand 'version': project.version, 'mcversion': project.minecraft.version
    }

    // copy everything else, thats not the mcmod.info
    from(sourceSets.main.resources.srcDirs) {
        exclude 'mcmod.info'
    }
}
sourceSets {
    main {
        output.resourcesDir = output.classesDir
    }
}

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by Shiotsu2 » 2018年7月22日(日) 15:51

1.7.10のMOD作成についてです

  RiceCuttingTools稲刈り道具を作っている途中で

  RiceCuttingTools = new Item().setCreativeTab(SaltCore.TabSalt1710).setUnlocalizedName("RiceCuttingTools").setTextureName("saltmod:rice_cutting_tools");
GameRegistry.registerItem(RiceCuttingTools, "RiceCuttingTools");

  耐久値を消費してクラフトするレシピを作っていて
  上のコードに何を加えたらいいでしょうか
  一応耐久値の設定をしています

package salt_1710.Items;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;


public class ItemRiceCuttingTools extends Item {

public ItemRiceCuttingTools() {
super();
//アイテムのスタック数・耐久値
this.setMaxStackSize(1);
this.setMaxDamage(255);
}
//getContainerItemStackを呼び出す
@Override
public boolean hasContainerItem(ItemStack stack) {
return true;
}

//クラフト後にアイテムにダメージを与えて返す
@Override
public ItemStack getContainerItem(ItemStack itemStack) {
if (itemStack.getMaxDamage() == itemStack.getItemDamage()) {
return (ItemStack) null;
}
else {
ItemStack newItemStack = itemStack.copy();
newItemStack.setItemDamage(itemStack.getItemDamage() + 1);
return newItemStack;
}
}

}

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by Shiotsu2 » 2018年7月22日(日) 15:51

1.7.10のMOD作成についてです

  RiceCuttingTools稲刈り道具を作っている途中で

  RiceCuttingTools = new Item().setCreativeTab(SaltCore.TabSalt1710).setUnlocalizedName("RiceCuttingTools").setTextureName("saltmod:rice_cutting_tools");
GameRegistry.registerItem(RiceCuttingTools, "RiceCuttingTools");

  耐久値を消費してクラフトするレシピを作っていて
  上のコードに何を加えたらいいでしょうか
  一応耐久値の設定をしています

package salt_1710.Items;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;


public class ItemRiceCuttingTools extends Item {

public ItemRiceCuttingTools() {
super();
//アイテムのスタック数・耐久値
this.setMaxStackSize(1);
this.setMaxDamage(255);
}
//getContainerItemStackを呼び出す
@Override
public boolean hasContainerItem(ItemStack stack) {
return true;
}

//クラフト後にアイテムにダメージを与えて返す
@Override
public ItemStack getContainerItem(ItemStack itemStack) {
if (itemStack.getMaxDamage() == itemStack.getItemDamage()) {
return (ItemStack) null;
}
else {
ItemStack newItemStack = itemStack.copy();
newItemStack.setItemDamage(itemStack.getItemDamage() + 1);
return newItemStack;
}
}

}

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by すとろー » 2018年7月04日(水) 04:25

素早い返答をいただいていたのに気づかず遅くなってしまってすみません、回答ありがとうございます!
早速調べてみます。

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by spuash918 » 2018年7月02日(月) 03:44

すとろー さんが書きました:自身で銃MODを1から作ってみたいのですが、オープンソースになっていて参考にできる銃MODやそれに近いMODを探しています。
自分ではなかなか見つけられなかったのでもし知っている方がいましたら是非教えてください!

バージョンが不明ですが、FN5728GunsReal Train Modなどはどうでしょうか

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by すとろー » 2018年7月02日(月) 02:59

自身で銃MODを1から作ってみたいのですが、オープンソースになっていて参考にできる銃MODやそれに近いMODを探しています。
自分ではなかなか見つけられなかったのでもし知っている方がいましたら是非教えてください!

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by テヘラン » 2018年6月01日(金) 10:48

こんにちは。
プレイヤーのペット等を保護する用途で、エンティティを登録し、アイテムを使用することで登録したエンティティをその場に召喚するMODを作成しています。
対象のエンティティのUDIDを登録するところまでは上手くいったのですが、召喚が上手くいかず困っております。
worldIn.getMinecraftServer().getEntityFromUuid(UUID) エンティティを取得しようとしたところ、シングルプレイでは上手くいったのですが
マルチプレイだと取得することが出来ませんでした。
マルチプレイでUUIDからエンティティを取得する手段はありますでしょうか?

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by ShuperDark » 2018年5月26日(土) 18:14

こんにちは。
お久しぶりです。
1.12.2でMod開発をしているのですが、LivingUpdateEventで司書の村人を取得したいのですが、何かいい方法はありませんか?製図家ではなく、司書のみでしたいです(´・ω・`)

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by TAN90 » 2018年5月21日(月) 14:37

1.12.2で接触したエンティティを一定方向に加速させるようなブロックと接触すると運動のベクトルをそっくり反転させるを追加するMODをつくりたいんですが全然上手くいかなくて...
調べてもテレポート系しか出てこなくて参ってます...
何か良い方法はありますか?

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by Furrer » 2018年5月20日(日) 05:14

何度もすみません。
左クリックと右クリックで異なる2つの効果を持つアイテムを作ろうと思い、itemクラスを継承したオブジェクトを用意した上で
左クリックの動作用として試しにまずこのようなコードを書きました。

@Override
public boolean onEntitySwing(EntityLivingBase entityLiving, ItemStack stack){
if(Mouse.isButtonDown(0))
{
entityLiving.heal(1.0F);
}
return true;
}

使ってみるとすんなり効果を発揮(回復)してくれたのですが、ブロックに手が届く範囲で左クリックをした場合そのブロックを掘り始めてしまうため、その間は左クリックの処理が継続されてしまいます。
なのでハート半分しか回復できないはずのentityLiving.heal(1.0F);の効果がすごいスピードで連続して発生し、一瞬で体力MAXまで回復してしまう、という状態です。
ブロックをターゲットしていても採掘処理に入らないような方法がありましたらどうか教えてください。

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by Furrer » 2018年5月19日(土) 00:53

うううぅぅまたも丁寧な解説を本当にありがとうございます!提示して頂いた方法を無事再現することができました。
当方java含めて本当の駆け出しなので自分で気にもしていなかった部分(スタックの仕組みなど)にも指摘をいただけるのも本当に助かります。またここで質問させてもらうこともありそうですが、今回はありがとうございました…!

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by defeatedcrow » 2018年5月18日(金) 00:27

Furrer さんが書きました:3つから5つほど前の投稿で即時回復アイテムの作り方について質問した者です。
回答してくださった方の解説が非常にわかりやすく、無事右クリック長押し100tick後に自動で回復効果の発揮されるアイテムができました。
結果的にコードはこのようになったのですが…

@Override
public int getMaxItemUseDuration(ItemStack stack) {
return 100;//Itemが使用中になる時間を設定(tick??)
}

@Override
public EnumAction getItemUseAction(ItemStack stack) {
return EnumAction.BLOCK;//Item使用中のアクションを設定(BOW→弓/BLOCK→盾などいろいろある)
}
@Override
public ItemStack onItemUseFinish(ItemStack stack, World worldIn,
EntityLivingBase living)
//onItemUseFinishメソッドでアイテムが使い終わった時に呼ばれる効果を追加できる。
{
living.heal(15.0F);
stack.shrink(1);
return ItemStack.EMPTY;
}
@Override
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing,
float hitX, float hitY, float hitZ) {
return EnumActionResult.FAIL;
}

@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand){
boolean isInjured;
float health = player.getHealth();
isInjured = (health < 20);

if (isInjured) {
player.setActiveHand(hand);
return new ActionResult(EnumActionResult.SUCCESS, player.getHeldItem(hand));
} else {
return new ActionResult(EnumActionResult.FAIL, player.getHeldItem(hand));
//右クリックされたときにアイテムが使用中という状態になるだけのプログロム、アイテムの使用終了時に効果が呼ばれる仕様なのでここにはアイテム効果は書かない。
}
}

このようにするとSEがないこともあいまってか、効果発揮までの無音の待機時間に"本当に操作これであってる??"というような不安な間ができてしまったように感じられます。
そこでアクションバー(夜になるまで眠れませんが出る欄)に効果発動までのカウントダウンを表示させられるようにしたいのですが、
Googleやあまたのサイト(海外サイトを含む)を見ても初心者の自分にはちんぷんかんぷんで、どのクラス、メソッドを使えばいいのかわかりませんでした。
長文になってしまい申し訳ありません、わかる方がいましたら是非ご教授ください。

イメージとしてはRPGなどのアイテムのクールタイム、FPSのリロード時のカウントダウンのような感じです。


独自SEではなく、とりあえずバニラにある既存SEのピッチ変えなどで代用できるのであれば、既存SEを鳴らしてしまって良いのではないかと思います。
SEの鳴らし方は、引数にworldが渡ってくるタイミングであれば、playSoundメソッドで演奏できます
コード: 全て選択
world.playSound(player, player.posX, player.posY, player.posZ,
                  SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.NEUTRAL, 1.0F, 1.0F / (itemRand.nextFloat() *
                        0.4F + 1.2F) + 0.5F);

上記を、例えば右クリック中に継続して呼ばれるメソッドであるonItemRightClickメソッド内に書いておけば、タメ中は繰り返し呼ばれますので、ずっとSEが鳴っているような状態になります
SoundEvents.ENTITY_ARROW_SHOOTを別のSEに変えればバニラにあるものなら好きな音を鳴らせます


あるいは、効果発揮時にSEを鳴らしても良いかと


効果発動までのカウントダウン表示はあまりおすすめできません
やるためには現在の経過時間をどこかに保存しておく必要があります。Itemにも、ItemStackのデータタグ(NBTタグ)に読み書きすることで経過時間のカウントダウン自体は可能なのですが、NBTタグを更新する際にタメが途切れてしまう現象などが起きたりするので、難しいかもしれません


ほか、少し気になったところの追記

・Tickとは
このゲーム内で使われている時間の単位です
だいたい20tick=1秒とみなせます

・効果発揮時のこの記述
コード: 全て選択
         stack.shrink(1);
         return ItemStack.EMPTY;

shrink(1)は「1個減らす処理」です
ですので、減らした後は
コード: 全て選択
return stack;

で、現象処理後のstackを返せば大丈夫です
スタック数が0個になった場合に空のアイテムに替えてやりたいのであれば、
コード: 全て選択
stack.shrink(1);
if (stack.getCount() < 1){
    stack = ItemStack.EMPTY;
}

等にして、0個のときだけEMPTYに変えればいいです

今の記述だと、スタック数がいくつあってもEMPTYに変えられてしまう(スタックをまとめて使い切ってしまう)挙動になります

Re: 【総合】トピック立てるまでもない質問【Mod制作】

投稿記事 by Furrer » 2018年5月17日(木) 13:52

3つから5つほど前の投稿で即時回復アイテムの作り方について質問した者です。
回答してくださった方の解説が非常にわかりやすく、無事右クリック長押し100tick後に自動で回復効果の発揮されるアイテムができました。
結果的にコードはこのようになったのですが…

@Override
public int getMaxItemUseDuration(ItemStack stack) {
return 100;//Itemが使用中になる時間を設定(tick??)
}

@Override
public EnumAction getItemUseAction(ItemStack stack) {
return EnumAction.BLOCK;//Item使用中のアクションを設定(BOW→弓/BLOCK→盾などいろいろある)
}
@Override
public ItemStack onItemUseFinish(ItemStack stack, World worldIn,
EntityLivingBase living)
//onItemUseFinishメソッドでアイテムが使い終わった時に呼ばれる効果を追加できる。
{
living.heal(15.0F);
stack.shrink(1);
return ItemStack.EMPTY;
}
@Override
public EnumActionResult onItemUse(EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing,
float hitX, float hitY, float hitZ) {
return EnumActionResult.FAIL;
}

@Override
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand){
boolean isInjured;
float health = player.getHealth();
isInjured = (health < 20);

if (isInjured) {
player.setActiveHand(hand);
return new ActionResult(EnumActionResult.SUCCESS, player.getHeldItem(hand));
} else {
return new ActionResult(EnumActionResult.FAIL, player.getHeldItem(hand));
//右クリックされたときにアイテムが使用中という状態になるだけのプログロム、アイテムの使用終了時に効果が呼ばれる仕様なのでここにはアイテム効果は書かない。
}
}

このようにするとSEがないこともあいまってか、効果発揮までの無音の待機時間に"本当に操作これであってる??"というような不安な間ができてしまったように感じられます。
そこでアクションバー(夜になるまで眠れませんが出る欄)に効果発動までのカウントダウンを表示させられるようにしたいのですが、
Googleやあまたのサイト(海外サイトを含む)を見ても初心者の自分にはちんぷんかんぷんで、どのクラス、メソッドを使えばいいのかわかりませんでした。
長文になってしまい申し訳ありません、わかる方がいましたら是非ご教授ください。

イメージとしてはRPGなどのアイテムのクールタイム、FPSのリロード時のカウントダウンのような感じです。

ページトップ

cron

x