【解決済み】1.7.10のブロック・アイテム読み込みについて

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.318891)

【解決済み】1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月10日(金) 12:41

現在私はForge1.7.10でmoddingをしていますが、modを読み込ませて起動させたマイクラがクラフトしようとすると落ちます。
おそらくFMLPreInitializationEventのところで複数読み込ませているのが原因だと睨んでいますが、どうにも修正できません。
どうすれば直すことが出来るでしょうか。
以下コードです。
package naporin.ShiningCraft;

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.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import naporin.ShiningCraft.blocks.ShiningCraftBlocks;
import naporin.ShiningCraft.items.ShiningCraftItems;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;

@Mod( modid = ShiningCraft.MODID,version=ShiningCraft.VERSION)
public class ShiningCraft
{

@Instance("ShiningCraft")
public static final String MODID = "shiningcraft";
public static final String VERSION = "0.0.0";
public static ShiningCraft instance;

@EventHandler
public void preInit( FMLPreInitializationEvent e )
{
ShiningCraftItems.registry(this);
ShiningCraftBlocks.registry(this);
}
@EventHandler
public void Init( FMLInitializationEvent e )
{
Recipes.registry();
}
public static CreativeTabs ShiningCraftTab = new CreativeTabs("shiningcrafttab")
{
public Item getTabIconItem()
{
return ShiningCraftItems.ShiningCrystal;
}
};
}

----------
package naporin.ShiningCraft.items;

import naporin.ShiningCraft.ShiningCraft;

public class ShiningCraftItems
{
public static ItemShiningCrystal ShiningCrystal;
public static ItemShiningHammer ShiningHammer;
public static ItemShiningPlate ShiningPlate;
public static ItemDegradedCrystal DegradedCrystal;
public static ItemPureCrystal PureCrystal;
public static ItemSulfur Sulfur;
public static ItemSulfurDioxide SulfurDioxide;
public static ItemSulfurTrioxide SulfurTrioxide;
public static ItemSulfuricAcid SulfuricAcid;

public static void registry( ShiningCraft mod )
{
ShiningCrystal = new ItemShiningCrystal();
ShiningHammer = new ItemShiningHammer();
ShiningPlate = new ItemShiningPlate();
DegradedCrystal = new ItemDegradedCrystal();
PureCrystal = new ItemPureCrystal();
Sulfur = new ItemSulfur();
SulfurDioxide = new ItemSulfurDioxide();
SulfurTrioxide = new ItemSulfurTrioxide();
SulfuricAcid = new ItemSulfuricAcid();

return;
}
}

----------
package naporin.ShiningCraft.blocks;

import naporin.ShiningCraft.ShiningCraft;

public class ShiningCraftBlocks {
public static BlockImpureOre ImpureOre;

public static void registry(ShiningCraft mod)
{
ImpureOre = new BlockImpureOre();

return;
}
}
最後に編集したユーザー apoqliphort_towers [ 2018年8月21日(火) 01:39 ], 累計 1 回
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:8ec8e29f
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.318898)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by 新人もっだー » 2018年8月10日(金) 15:16

@Instanceをかける場所間違えてますよ。Stringにかけてどうするんですか、、、
instance().instance().instance() = null;
アバター
新人もっだー
ID:f4092567
石掘り
 
記事: 143
登録日時: 2015年6月22日(月) 17:58

  • (PostNo.318905)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月10日(金) 17:23

https://www.watermelonheadman.com/mc172-modding-7/
このサイトを参考につくりました。
どこにinstanceをつければよいですか?
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.318909)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by elise_blacklab » 2018年8月10日(金) 17:36

@Instanceの指定に関しては不正な場合はログを出してスキップされるだけなのでクラッシュに関係ありません.
先の参考先みたくアノテーションの意味も理解せずに書き方だけ載ってる記事があるんで注意

それより
apoqliphort_towers さんが書きました:おそらくFMLPreInitializationEventのところで複数読み込ませているのが原因だと睨んでいますが、
とは言われても該当のソースもログも無けりゃこちとら何も回答できることはないんですが
前回の件Item修正して自己解決してますけど少しは理解してるんです?
このままだと互いのためにならないのでソースとログ(せめてクラッシュレポート)は可能な限り不足なく提示してください
こう書いたらいいよ,なんていうコピペ集を回答者は提供するつもりはありませんので
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:0f87040f
掘り廃人
 
記事: 2544
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.318910)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月10日(金) 17:51

最初に上げたものでは足りませんでしたか?
正直あの三つで足りると思っていましたが私の勘違いなのでしょうか?
クラッシュはせずにブロックを作成しようとするとそのままゲームがフリーズして動かなくなってしまいます。
しばらくしてもそのままなのでいつもはeclipsの方で強制終了しています。
確認してもクラッシュレポートは出来てませんでした。
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.318914)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by elise_blacklab » 2018年8月10日(金) 18:28

apoqliphort_towers さんが書きました:最初に上げたものでは足りませんでしたか?正直あの三つで足りると思っていましたが私の勘違いなのでしょうか?

ItemShiningなんちゃらとかItemSulfurなんちゃらとか我々知りませんし
クラッシュレポートが出ないってありますけどログはちゃんと出力されてる(fml-client-latest.logなど)はずなので提示してください
原因が分からないまま動かん動かん言われても「はいそうですか」としか言えないんです
ソースとログの提示はどのフォーラムでも最低限の礼儀です
フォーラムルールをまず熟読の上必要な情報を提示してください
viewtopic.php?f=5&t=999

ファイル数が多すぎてテキストで貼れないんでしたらzipでまとめてアップロードするとかgithubにリポジトリ作るとか,できることはいくらでもあります
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:0f87040f
掘り廃人
 
記事: 2544
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.318939)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月10日(金) 23:54

このmodのソースはこれです。
logファイルなんですけどデータが大きすぎるので分割して送ります。
今現在は開発用のPCとは違う端末を使っているのでzip以外にも圧縮できませんし。
あと、この送った奴は最新版でバグ無しでテストできるように前に送った奴から変わっていて、
このままならエラーは出ません。
ShiningCraft.javaは先にあげたやつがエラーが出る方です。
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.318940)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月11日(土) 00:02

よく見たら恐らくこれだけだと思います。
全部まとめてzipしようとしてました。
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.319094)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月13日(月) 15:46

現状回避策として考えているのが、
・FMLPteInitializationEventを二つ使う
読み込み順の問題であまり良くないらしい
・全部アイテムの方にまとめる
分かりにくくなる可能性がある
どっちがいいんですかね?
出来れば分けたいんですけど
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.319095)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by elise_blacklab » 2018年8月13日(月) 15:50

まずBlockをregistryしてる部分が見当たらないんですが…
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:0f87040f
掘り廃人
 
記事: 2544
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.319096)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月13日(月) 16:03

package naporin.ShiningCraft.blocks;

import naporin.ShiningCraft.ShiningCraft;

public class ShiningCraftBlocks {
public static BlockImpureOre ImpureOre;

public static void registry(ShiningCraft mod)
{
ImpureOre = new BlockImpureOre();

return;
}
}
これで出来てませんか?
なにぶん初心者なもので……。
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.319150)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by 新人もっだー » 2018年8月14日(火) 10:58

apoqliphort_towers さんが書きました:package naporin.ShiningCraft.blocks;

import naporin.ShiningCraft.ShiningCraft;

public class ShiningCraftBlocks {
public static BlockImpureOre ImpureOre;

public static void registry(ShiningCraft mod)
{
ImpureOre = new BlockImpureOre();

return;
}
}
これで出来てませんか?
なにぶん初心者なもので……。


new BlockImpureOre()はBlockImpureOreクラスのコンストラクタを呼びだしているにすぎません。単なるインスタンスの生成です。
CreativeTabsのようにコンストラクタに登録プロセスがあるものもありますが、ItemやBlockなどはGameRegistryで適切に登録名のStringとともに登録をしなくてはなりません。

余談ですが、フィールドは基本頭は小文字から書くのが一般的です。
IIcon TopIcon
ではなく
IIcon topIcon
と書いた方が色々よいと思います。(クラスなどとの見分けのため)
あとregistryは動詞じゃないんで関数名はregisterの方がよいのでは。


で、登録もしていないアイテムやブロックを含んだItemStackが渡されたからクラッシュ、ということでしょう。

@see http://minecraftjp.info/modding/index.php/1.7%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E8%BF%BD%E5%8A%A0
@see http://minecraftjp.info/modding/index.php/1.7%E3%81%AE%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E8%BF%BD%E5%8A%A0
instance().instance().instance() = null;
アバター
新人もっだー
ID:f4092567
石掘り
 
記事: 143
登録日時: 2015年6月22日(月) 17:58

  • (PostNo.319154)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月14日(火) 15:29

つまりブロックの方が原因だったんですね。
そっちでしたか。
直してみました。

コード: 全て選択
package naporin.ShiningCraft.blocks;

import java.util.Random;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import naporin.ShiningCraft.ShiningCraft;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;

public class BlockImpureOre extends Block
{
    @SideOnly(Side.CLIENT)
    private IIcon topIcon;

    @SideOnly(Side.CLIENT)
    private IIcon sideIcon;

    public BlockImpureOre() {
        String name = "Impure Ore";
        super(Material.rock);
        setCreativeTab(ShiningCraft.ShiningCraftTab);/*クリエイティブタブの選択*/
        setBlockName("impure ore");/*システム名の設定*/
        //setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定(複数指定の場合は消してください)*/
        /*以下のものは消しても結構です*/
        setHardness(1.5F);/*硬さ*/
        setResistance(1.0F);/*爆破耐性*/
        setStepSound(Block.soundTypeStone);/*ブロックの上を歩いた時の音*/
   /*setBlockUnbreakable();*//*ブロックを破壊不可に設定*/
   /*setTickRandomly(true);*//*ブロックのtick処理をランダムに。デフォルトfalse*/
   /*disableStats();*//*ブロックの統計情報を保存しない*/
        setLightOpacity(0);/*ブロックの透過係数。デフォルト0(不透過)*/
        setLightLevel(0F);/*明るさ 1.0F = 15*/
        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);/*当たり判定*/
        GameRegistry.registerBlock(this,name);
    }

    @Override
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float posX, float posY, float posZ){
        //ブロックを右クリックした際の動作
        return true;
    }

    @Override
    public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player){
        //ブロックを左クリックした際の動作
    }

    @Override
    public void onNeighborBlockChange(World world, int x, int y, int z, Block neighborBlock){
        //周囲のブロックが更新された際の動作
    }

    @Override
    public int quantityDropped(int meta, int fortune, Random random){
        //ドロップするアイテムを返す
        return quantityDroppedWithBonus(fortune, random);
    }

    @Override
    public int quantityDropped(Random random){
        //ドロップさせる量を返す
        return 1;
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister par1IconRegister)
    {
        this.topIcon = par1IconRegister.registerIcon("samplemod:block_sample");
        this.sideIcon = par1IconRegister.registerIcon("samplemod:block_sample_side");
    }

    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int par1, int par2)
    {
         if(par1 == 0 || par1 == 1)
         {
                  return topIcon;
         }
         else
         {
                  return sideIcon;
         }
    }
}

アドバイスありがとうございます。こんなもんでしょうか?
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉

  • (PostNo.319223)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by 新人もっだー » 2018年8月16日(木) 00:26

apoqliphort_towers さんが書きました:つまりブロックの方が原因だったんですね。
そっちでしたか。
直してみました。

コード: 全て選択
package naporin.ShiningCraft.blocks;

import java.util.Random;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import naporin.ShiningCraft.ShiningCraft;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;

public class BlockImpureOre extends Block
{
    @SideOnly(Side.CLIENT)
    private IIcon topIcon;

    @SideOnly(Side.CLIENT)
    private IIcon sideIcon;

    public BlockImpureOre() {
        String name = "Impure Ore";
        super(Material.rock);
        setCreativeTab(ShiningCraft.ShiningCraftTab);/*クリエイティブタブの選択*/
        setBlockName("impure ore");/*システム名の設定*/
        //setBlockTextureName("samplemod:block_sample");/*ブロックのテクスチャの指定(複数指定の場合は消してください)*/
        /*以下のものは消しても結構です*/
        setHardness(1.5F);/*硬さ*/
        setResistance(1.0F);/*爆破耐性*/
        setStepSound(Block.soundTypeStone);/*ブロックの上を歩いた時の音*/
   /*setBlockUnbreakable();*//*ブロックを破壊不可に設定*/
   /*setTickRandomly(true);*//*ブロックのtick処理をランダムに。デフォルトfalse*/
   /*disableStats();*//*ブロックの統計情報を保存しない*/
        setLightOpacity(0);/*ブロックの透過係数。デフォルト0(不透過)*/
        setLightLevel(0F);/*明るさ 1.0F = 15*/
        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);/*当たり判定*/
        GameRegistry.registerBlock(this,name);
    }

    @Override
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float posX, float posY, float posZ){
        //ブロックを右クリックした際の動作
        return true;
    }

    @Override
    public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player){
        //ブロックを左クリックした際の動作
    }

    @Override
    public void onNeighborBlockChange(World world, int x, int y, int z, Block neighborBlock){
        //周囲のブロックが更新された際の動作
    }

    @Override
    public int quantityDropped(int meta, int fortune, Random random){
        //ドロップするアイテムを返す
        return quantityDroppedWithBonus(fortune, random);
    }

    @Override
    public int quantityDropped(Random random){
        //ドロップさせる量を返す
        return 1;
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister par1IconRegister)
    {
        this.topIcon = par1IconRegister.registerIcon("samplemod:block_sample");
        this.sideIcon = par1IconRegister.registerIcon("samplemod:block_sample_side");
    }

    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int par1, int par2)
    {
         if(par1 == 0 || par1 == 1)
         {
                  return topIcon;
         }
         else
         {
                  return sideIcon;
         }
    }
}

アドバイスありがとうございます。こんなもんでしょうか?


どうですか?じゃなくて問題が解決したかどうかを記してください。このトピックの本題はそれではないですか?小言、つまり返信する価値もないといういみでスパイラにしたんですから。
instance().instance().instance() = null;
アバター
新人もっだー
ID:f4092567
石掘り
 
記事: 143
登録日時: 2015年6月22日(月) 17:58

  • (PostNo.319409)

Re: 1.7.10のブロック・アイテム読み込みについて

投稿記事by apoqliphort_towers » 2018年8月21日(火) 01:37

返信遅くなりました。
正常に動くようになりました。
ありがとうございました。
現在mod作成中……。
完成度1%
アバター
apoqliphort_towers
ID:12f3c1d7
木を殴ってる
 
記事: 12
登録日時: 2018年8月08日(水) 10:54
お住まい: ダ☆埼玉


Return to 質問:開発・制作関連

x