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

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

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

投稿記事by anatawa12 » 2017年5月21日(日) 23:45

anatawa12 さんが書きました:metadata が、勝手に0になります。
packetを使ってサーバー側でmetaを変えた後、update側から見たら、0担ってます。
説明下手でごめんなさい
ソースコードは下記のurlにあります。
gradle実行時には:RunClientを使ってください。
ログで出て来るs meta:0は、tileentityのupdateを使って、PAPIブロック自身のmetaをlogに流してます。

toBytes meta:4
meta:0
fromBytes meta:4
onMessage meta:4
これらはパケットの送受信時のDataです。
ソースコード(gitlab)
https://gitlab.com/anatawa12/RealCityMod/tree/PAPI

自己解決しました
korisan112主催の実況鯖の鯖主になる予定
東方好き(にわかにはいる様な)
東方スキンで活動中
anatawa12
ID:2763f206
木を殴ってる
 
記事: 25
登録日時: 2016年8月06日(土) 12:40

  • (PostNo.302514)

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

投稿記事by k2210258 » 2017年5月22日(月) 09:48

anatawa12さんへ

返信ありがとうございます、おっしゃられた通りにやってみました
・eclipseフォルダを2つコピーしてeclipse1、eclipse2にリネーム
・サーバーを起動(server.propertiesの"online-mode"をfalseにしてユーザ認証を行わない設定にする)
・build.gradleに記載されている”runDir = "eclipse"”をrunDir = "eclipse1"に変えてクライアント(一人目)を起動
・同様にrunDir = "eclipse2"に変えてクライアント二人目を起動
・ローカルIPアドレスでクライアント二人をサーバーに接続
で無事に一人二役できるようになりました。ありがとうございました。
k2210258
ID:f4b1c708
 

  • (PostNo.302526)

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

投稿記事by aiu » 2017年5月22日(月) 20:37

ここ数日modding wikiに繋がらないのですが、私だけですかね?
mod制作の勉強中なので困っています
aiu
ID:b1a035c3
 

  • (PostNo.302533)

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

投稿記事by spuash918 » 2017年5月22日(月) 22:02

aiu さんが書きました:ここ数日modding wikiに繋がらないのですが、私だけですかね?
mod制作の勉強中なので困っています

私のほうも昨日から繋がらず困っていました。
が、管理人曰く接続できなくなっても数日立てば直るそうなので気長に待ったほうが良いです
最近は低浮上気味
ここでMOD作ってます。
名前はRecipesMODです。ネザースターなどが作れるようになります。(1.7.2~1.8)
また同ページにてTirituMODの1.6.4対応版&1.7.10版を公開しています。(配布の許可はもらってあります)
Twitterやってます。→https://twitter.com/pokora_youtube
よろしければYoutubeもお願いします。
spuash918
ID:756593fa
鉄鉱掘り
 
記事: 266
登録日時: 2014年11月03日(月) 11:17
お住まい: 東海のどこか

  • (PostNo.302537)

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

投稿記事by elise_blacklab » 2017年5月22日(月) 23:24

aiu さんが書きました:ここ数日modding wikiに繋がらないのですが、私だけですかね?
mod制作の勉強中なので困っています

Chromeでcache:をアドレスの先頭につけるとGoogleにキャッシュされたページを見ることができます.
サーバが復旧するまでは,時間がかかりますがこちらを参照するしかなさそうです.
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:d26fc165
掘り廃人
 
記事: 2412
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.303397)

Re: 【総合】トピック立てるまでもない質問【テクスチャ/MOD/その他ツール】

投稿記事by Velc » 2017年6月10日(土) 17:58

MCバージョン:1.11.2 forgeバージョン:1.11.2-13.20.0.2311
以上の環境でMODを作成していて、特定のキーを押すと作業台のGUIを呼びだすというMODを作成しています。
GUIの呼び出しに成功はしたのですが、アイテムの移動やクラフトができない状態です。
GUIの呼び出しだけでなくてマウスクリック時のイベントやentityplayerのinventoryの更新等といった処理をいれないといけないのでしょうか?
チュートリアル等も調べたのですが、GUIの追加しか見当たらなく、GUIの操作についての情報がわかりませんでした。
参考になる情報やこういう処理をいれるべきといった情報があれば教えていただけないでしょうか。
miyabi@運営チーム[運営宛のメッセージ(PM)を作成] 記事を移動しました。
質問:MOD/テクスチャ/その他ツール関係 → 質問:開発・制作関連
Velc
ID:2d74aa8a
木を殴ってる
 
記事: 17
登録日時: 2017年6月07日(水) 12:04

  • (PostNo.303437)

Re: 【総合】トピック立てるまでもない質問【テクスチャ/MOD/その他ツール】

投稿記事by defeatedcrow » 2017年6月11日(日) 14:51

Velc さんが書きました:MCバージョン:1.11.2 forgeバージョン:1.11.2-13.20.0.2311
以上の環境でMODを作成していて、特定のキーを押すと作業台のGUIを呼びだすというMODを作成しています。
GUIの呼び出しに成功はしたのですが、アイテムの移動やクラフトができない状態です。
GUIの呼び出しだけでなくてマウスクリック時のイベントやentityplayerのinventoryの更新等といった処理をいれないといけないのでしょうか?
チュートリアル等も調べたのですが、GUIの追加しか見当たらなく、GUIの操作についての情報がわかりませんでした。
参考になる情報やこういう処理をいれるべきといった情報があれば教えていただけないでしょうか。
miyabi@運営チーム[運営宛のメッセージ(PM)を作成] 記事を移動しました。
質問:MOD/テクスチャ/その他ツール関係 → 質問:開発・制作関連


GUIを開く時にどういう手順を行ったかわからないのでエスパーですが、クライアント側でGUIを開いていてサーバ側の処理が呼ばれてないんじゃないですかね
インベントリを操作するGUIにはたいていペアになるContainerクラス(インベントリ類はサーバ側にあるため、GUIとのやり取りを中継するクラスが有る)がありますが、それらが適切に呼ばれてないんじゃないかなと思います

まぁキーを押して呼んでいるようですし、サーバとクライアントとの同期関連の知識はまだないんだろうなぁとは思いますが、
初心者には少々厄介なものを作ろうとしている状況ですので、きつそうならアイテムやブロックの右クリックでGUIを呼ぶものを作るほうが無難だと思います
(アイテムやブロックは、サーバとクライアント両方に存在するので、後述の悩みがなくなります)

それでも頑張ってキー操作でやりたい!ということであれば、以下のような流れで作成できると思います。

キー操作はクライアント側にしか存在しないものです。キー操作関連のクラスはサーバー側に存在しないので、サーバ・クライアントが一緒になっているシングルプレイでは多少のミスが有っても動いてしまいますが、マルチプレイでは処理を呼ぶと即クラッシュします
にも関わらず、インベントリはサーバ側で扱うものなので、GUIはサーバ側で開く必要があります

ですので、
1. サーバ側で処理が呼ばれないように慎重に処理を隔離しながら、キー押下を検出する。安全装置としてProxyクラス作成を推奨します。
2. カスタムパケットを実装し、キー押下によってクライアント->サーバ方向のパケット(IMessage実装クラス)を飛ばす
3. パケット受信時の処理(IMessageHandler実装クラス)にて、サーバ側でプレイヤーにクラフトGUIを開かせる
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:7e692061
ラピスラズリ収集家
 
記事: 917
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.303444)

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

投稿記事by Velc » 2017年6月11日(日) 17:27

defeatedcrow さんが書きました:1. サーバ側で処理が呼ばれないように慎重に処理を隔離しながら、キー押下を検出する。安全装置としてProxyクラス作成を推奨します。
2. カスタムパケットを実装し、キー押下によってクライアント->サーバ方向のパケット(IMessage実装クラス)を飛ばす
3. パケット受信時の処理(IMessageHandler実装クラス)にて、サーバ側でプレイヤーにクラフトGUIを開かせる


上記の手順でサンプルも参考にしながらカスタムパケットの実装でうまくGUIを動作させることができました。ありがとうございます。
ただ、いくつか問題ががあって
①GUIに文字が出てこない
②GUIを閉じる時にクラフト欄にアイテムがあるとドロップせず消えてしまう
(昔の情報にあった dropPlayerItemWithRandomChoiceやdropPlayerItemが今は使えないようでよくわかりません)
③スタック可能なアイテムをSHIFT+クリックするとクラッシュする
といった問題に悩んでいます。
ソースコードを載せますので何かわかれば教えていただけないでしょうか。

ContainerCraftingGui.java
コード: 全て選択
package velc.nouseworkbenchmod.main;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCraftResult;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.inventory.SlotCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.world.World;

public class ContainerCraftingGui extends Container{

    public InventoryCrafting craftMatrix;
    public IInventory craftResult;
    private World worldObj;
    private EntityPlayer playerObj;

   
    public ContainerCraftingGui(EntityPlayer player,InventoryPlayer inventoryplayer, World world, int x, int y, int z){
       craftMatrix = new InventoryCrafting(this, 3, 3);
        craftResult = new InventoryCraftResult();
        worldObj = world;
        playerObj =player;

        this.addSlotToContainer(new SlotCrafting(inventoryplayer.player, craftMatrix, craftResult, 0, 124, 35));
        for (int l = 0; l < 3; l++)
        {
            for (int k1 = 0; k1 < 3; k1++)
            {
               this.addSlotToContainer(new Slot(craftMatrix, k1 + l * 3, 30 + k1 * 18, 17 + l * 18));
            }
        }

        for (int i1 = 0; i1 < 3; i1++)
        {
            for (int l1 = 0; l1 < 9; l1++)
            {
               this.addSlotToContainer(new Slot(inventoryplayer, l1 + i1 * 9 + 9, 8 + l1 * 18, 84 + i1 * 18));
            }
        }

        for (int j1 = 0; j1 < 9; j1++)
        {
           this.addSlotToContainer(new Slot(inventoryplayer, j1, 8 + j1 * 18, 142));
        }

        onCraftMatrixChanged(craftMatrix);
   }

    @Override
    public void onCraftMatrixChanged(IInventory iinventory)
    {
       craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(craftMatrix,worldObj));
    }

    @Override
    public void onContainerClosed(EntityPlayer entityplayer)
    {
        super.onContainerClosed(entityplayer);
        if (worldObj.isRemote)
        {
            return;
        }
        for (int i = 0; i < 9; i++)
        {
            ItemStack itemstack = craftMatrix.getStackInSlot(i);
            if (itemstack != null)
            {
                entityplayer.dropItem(itemstack, true);
            }
        }
    }

    @Override
    public ItemStack transferStackInSlot(EntityPlayer player, int i)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)inventorySlots.get(i);
        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();
           
            System.out.println(itemstack);
           
            if (i == 0)
            {
                if (!mergeItemStack(itemstack1, 10, 46, true))
                {
                    return null;
                }
            }
            else if (i >= 10 && i < 37)
            {
                if (!mergeItemStack(itemstack1, 37, 46, false))
                {
                    return null;
                }
            }
            else if (i >= 37 && i < 46)
            {
                if (!mergeItemStack(itemstack1, 10, 37, false))
                {
                    return null;
                }
            }
            else if (!mergeItemStack(itemstack1, 10, 46, false))
            {
                return null;
            }
            if (itemstack1.getMaxStackSize() == 0)
            {
                slot.putStack(null);
            }
            else
            {
                slot.onSlotChanged();
            }
            if (itemstack1.getMaxStackSize() != itemstack.getMaxStackSize())
            {
                slot.onTake(player, itemstack1); //.onPickupFromSlot(itemstack1);
            }
            else
            {
                return null;
            }
        }
        return itemstack;
    }

    @Override
    public boolean canInteractWith(EntityPlayer player) {
        return true;
    }
}


CraftingGui.java
コード: 全て選択
package velc.nouseworkbenchmod.main;
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.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;


@SideOnly(Side.CLIENT)
public class CraftingGui extends GuiContainer{

   private static final ResourceLocation TEXTURE = new ResourceLocation("nouseworkbenchmod", "textures/gui/crafting.png");

   public CraftingGui(EntityPlayer player, World world, int x, int y, int z)
   {
      super(new ContainerCraftingGui(player, player.inventory, world,x,y,z));
   }
   
    protected void drawGuiContainerForegroundLayer()
    {
        fontRendererObj.drawString("Crafting", 28, 6, 0x404040);
        fontRendererObj.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
    }

    protected void drawGuiContainerBackgroundLayer(float f, int i, int j)
    {
        this.mc.renderEngine.bindTexture(TEXTURE);
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        mc.renderEngine.bindTexture(TEXTURE);
        int l = (width - xSize) / 2;
        int i1 = (height - ySize) / 2;
        drawTexturedModalRect(l, i1, 0, 0, xSize, ySize);
    }

}
Velc
ID:2d74aa8a
木を殴ってる
 
記事: 17
登録日時: 2017年6月07日(水) 12:04

  • (PostNo.303460)

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

投稿記事by Velc » 2017年6月11日(日) 20:38

Velc さんが書きました:①GUIに文字が出てこない
②GUIを閉じる時にクラフト欄にアイテムがあるとドロップせず消えてしまう
③スタック可能なアイテムをSHIFT+クリックするとクラッシュする
といった問題に悩んでいます。

ソースを色々いじったら解決しました。
①はdrawGuiContainerForegroundLayer()にint mouseX, int mouseY追加
②はそもそも捨てる処理に入ってなかったので、
if (worldObj.isRemote)
{
return;
}
を削除
③はnullが帰っていたのをitemstack.EMPTY に変更(1.11ではItemStack関連はnullがダメになったみたいですね)
修正が正しいやり方かはちょっと自信がありませんが、一応動作はしています。
Velc
ID:2d74aa8a
木を殴ってる
 
記事: 17
登録日時: 2017年6月07日(水) 12:04

  • (PostNo.303468)

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

投稿記事by SiA0812 » 2017年6月11日(日) 22:00

Mcreatorについてです。初歩的な質問になってしまいますが、銃の作り方についてです。バージョンは1.7.2<1.7.10>です。

イベント画面でイベントを追加しない>次の画面でもテクスチャー(Ammoは矢)とName in GUI 以外設定しない>レシピを追加しない>で保存してエクスポートしてみたところ、導入して(導入自体には成功)手元のインベントリにいれた瞬間に矢を乱射する大事故になってしまいます。
エクスポート自体には成功しているにも拘わらず、なぜ大事故になるのか謎です。
原因がわかる方、あるいは設定に成功したことのある方はどう設定したのかを写真付きでお願いします。
最後に編集したユーザー SiA0812 [ 2017年6月12日(月) 23:24 ], 累計 1 回
アバター
SiA0812
ID:ae03cbbb
水から上がったとこ
 
記事: 3
登録日時: 2017年6月07日(水) 21:56

  • (PostNo.303476)

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

投稿記事by defeatedcrow » 2017年6月11日(日) 23:46

Velc さんが書きました:
defeatedcrow さんが書きました:1. サーバ側で処理が呼ばれないように慎重に処理を隔離しながら、キー押下を検出する。安全装置としてProxyクラス作成を推奨します。
2. カスタムパケットを実装し、キー押下によってクライアント->サーバ方向のパケット(IMessage実装クラス)を飛ばす
3. パケット受信時の処理(IMessageHandler実装クラス)にて、サーバ側でプレイヤーにクラフトGUIを開かせる


上記の手順でサンプルも参考にしながらカスタムパケットの実装でうまくGUIを動作させることができました。ありがとうございます。
ただ、いくつか問題ががあって
①GUIに文字が出てこない
②GUIを閉じる時にクラフト欄にアイテムがあるとドロップせず消えてしまう
(昔の情報にあった dropPlayerItemWithRandomChoiceやdropPlayerItemが今は使えないようでよくわかりません)
③スタック可能なアイテムをSHIFT+クリックするとクラッシュする
といった問題に悩んでいます。
ソースコードを載せますので何かわかれば教えていただけないでしょうか。

ContainerCraftingGui.java
コード: 全て選択
package velc.nouseworkbenchmod.main;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCraftResult;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.inventory.SlotCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.world.World;

public class ContainerCraftingGui extends Container{

    public InventoryCrafting craftMatrix;
    public IInventory craftResult;
    private World worldObj;
    private EntityPlayer playerObj;

   
    public ContainerCraftingGui(EntityPlayer player,InventoryPlayer inventoryplayer, World world, int x, int y, int z){
       craftMatrix = new InventoryCrafting(this, 3, 3);
        craftResult = new InventoryCraftResult();
        worldObj = world;
        playerObj =player;

        this.addSlotToContainer(new SlotCrafting(inventoryplayer.player, craftMatrix, craftResult, 0, 124, 35));
        for (int l = 0; l < 3; l++)
        {
            for (int k1 = 0; k1 < 3; k1++)
            {
               this.addSlotToContainer(new Slot(craftMatrix, k1 + l * 3, 30 + k1 * 18, 17 + l * 18));
            }
        }

        for (int i1 = 0; i1 < 3; i1++)
        {
            for (int l1 = 0; l1 < 9; l1++)
            {
               this.addSlotToContainer(new Slot(inventoryplayer, l1 + i1 * 9 + 9, 8 + l1 * 18, 84 + i1 * 18));
            }
        }

        for (int j1 = 0; j1 < 9; j1++)
        {
           this.addSlotToContainer(new Slot(inventoryplayer, j1, 8 + j1 * 18, 142));
        }

        onCraftMatrixChanged(craftMatrix);
   }

    @Override
    public void onCraftMatrixChanged(IInventory iinventory)
    {
       craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(craftMatrix,worldObj));
    }

    @Override
    public void onContainerClosed(EntityPlayer entityplayer)
    {
        super.onContainerClosed(entityplayer);
        if (worldObj.isRemote)
        {
            return;
        }
        for (int i = 0; i < 9; i++)
        {
            ItemStack itemstack = craftMatrix.getStackInSlot(i);
            if (itemstack != null)
            {
                entityplayer.dropItem(itemstack, true);
            }
        }
    }

    @Override
    public ItemStack transferStackInSlot(EntityPlayer player, int i)
    {
        ItemStack itemstack = null;
        Slot slot = (Slot)inventorySlots.get(i);
        if (slot != null && slot.getHasStack())
        {
            ItemStack itemstack1 = slot.getStack();
            itemstack = itemstack1.copy();
           
            System.out.println(itemstack);
           
            if (i == 0)
            {
                if (!mergeItemStack(itemstack1, 10, 46, true))
                {
                    return null;
                }
            }
            else if (i >= 10 && i < 37)
            {
                if (!mergeItemStack(itemstack1, 37, 46, false))
                {
                    return null;
                }
            }
            else if (i >= 37 && i < 46)
            {
                if (!mergeItemStack(itemstack1, 10, 37, false))
                {
                    return null;
                }
            }
            else if (!mergeItemStack(itemstack1, 10, 46, false))
            {
                return null;
            }
            if (itemstack1.getMaxStackSize() == 0)
            {
                slot.putStack(null);
            }
            else
            {
                slot.onSlotChanged();
            }
            if (itemstack1.getMaxStackSize() != itemstack.getMaxStackSize())
            {
                slot.onTake(player, itemstack1); //.onPickupFromSlot(itemstack1);
            }
            else
            {
                return null;
            }
        }
        return itemstack;
    }

    @Override
    public boolean canInteractWith(EntityPlayer player) {
        return true;
    }
}


CraftingGui.java
コード: 全て選択
package velc.nouseworkbenchmod.main;
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.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;


@SideOnly(Side.CLIENT)
public class CraftingGui extends GuiContainer{

   private static final ResourceLocation TEXTURE = new ResourceLocation("nouseworkbenchmod", "textures/gui/crafting.png");

   public CraftingGui(EntityPlayer player, World world, int x, int y, int z)
   {
      super(new ContainerCraftingGui(player, player.inventory, world,x,y,z));
   }
   
    protected void drawGuiContainerForegroundLayer()
    {
        fontRendererObj.drawString("Crafting", 28, 6, 0x404040);
        fontRendererObj.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
    }

    protected void drawGuiContainerBackgroundLayer(float f, int i, int j)
    {
        this.mc.renderEngine.bindTexture(TEXTURE);
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        mc.renderEngine.bindTexture(TEXTURE);
        int l = (width - xSize) / 2;
        int i1 = (height - ySize) / 2;
        drawTexturedModalRect(l, i1, 0, 0, xSize, ySize);
    }

}


GUI、Containerは自作不要のはずですがなぜ自作を?
(BlockWorkbenchの右クリック処理を流用すれば良いだけのような)
止めはしませんが、GUI自作はちゃちゃっと回答できるものでもないので回答は控えます
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:7e692061
ラピスラズリ収集家
 
記事: 917
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.303485)

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

投稿記事by Velc » 2017年6月12日(月) 12:21

defeatedcrow さんが書きました:GUI、Containerは自作不要のはずですがなぜ自作を?
(BlockWorkbenchの右クリック処理を流用すれば良いだけのような)
止めはしませんが、GUI自作はちゃちゃっと回答できるものでもないので回答は控えます

お返事ありがとうございます。BlockWorkbenchの処理の流用というのはバニラのソースを流用ということですか?
やり方がよくわからなかったので、その発想には至りませんでした。
調べたところMCPでバニラのソースをデコンパイルすればいいようですが、あっているでしょうか。
試してみたいと思います。
Velc
ID:6c304524
木を殴ってる
 
記事: 17
登録日時: 2017年6月07日(水) 12:04

  • (PostNo.303519)

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

投稿記事by defeatedcrow » 2017年6月13日(火) 18:23

Velc さんが書きました:
defeatedcrow さんが書きました:GUI、Containerは自作不要のはずですがなぜ自作を?
(BlockWorkbenchの右クリック処理を流用すれば良いだけのような)
止めはしませんが、GUI自作はちゃちゃっと回答できるものでもないので回答は控えます

お返事ありがとうございます。BlockWorkbenchの処理の流用というのはバニラのソースを流用ということですか?
やり方がよくわからなかったので、その発想には至りませんでした。
調べたところMCPでバニラのソースをデコンパイルすればいいようですが、あっているでしょうか。
試してみたいと思います。


どちらも全然違います
試さなくていいです

とりあえず後者から
>調べたところMCPでバニラのソースをデコンパイルすればいいようですが、あっているでしょうか。

あってないです。
どこを調べたのかわかりませんが、こういうこと書いてあるサイト今時あるんでしょうかね…これForge環境だと1.6以前くらいのめっちゃ古い時期ならぼくもMCP叩いてましたが、今はもう不要な方法です。(ForgeなしのハードコアModdingには未だ必要だとは思いますが)

バニラのソースを見たければ、EclipseなどのIDE+Forgeで作った開発環境であれば立ち上げ時点で閲覧できる状態になっています。
ぼくはEclipse以外使わないんで他のIDEはわかりませんが(IDEA使いであれば、このフォーラムにも使用者が結構居るはずなので、確認方法を質問してみたら誰か教えてくれるんじゃないかな。他のソフトも使用者は居そう。)、Eclipseであれば、
パッケージエクスプローラーの参照ライブラリータブにforgeSrcが入っているはずなので、そこにforgeのソースと一緒にMC本体のソースも確認可能な状態で入っているはずです。

バニラのソースやForgeのソースを確認できることは、初歩の初歩なので、こちらとしては出来る前提で話を進めます。


>BlockWorkbenchの処理の流用というのはバニラのソースを流用ということですか?
あなたが「流用」の意味をどう理解しているかわかりませんが、多分違うやつです。
BlockWorkbenchクラスの参照利用だけで事足りるので。

BlockWorkbenchクラスには、InterfaceCraftingTable.classというpublic static な内部クラスを持っています。
簡単に言えば、外部から作業台のGUIを開ける機能がバニラ作業台に搭載されているわけです。ですので、これを使えば必要なコンテナクラスやGUIクラス、GUIの名前表示などを整えてくれます。

使い方は、BlockWorkbenchクラスの右クリック処理部分を見ればわかると思います。
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:7e692061
ラピスラズリ収集家
 
記事: 917
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.303539)

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

投稿記事by Velc » 2017年6月13日(火) 23:57

defeatedcrow さんが書きました:バニラのソースを見たければ、EclipseなどのIDE+Forgeで作った開発環境であれば立ち上げ時点で閲覧できる状態になっています。
ぼくはEclipse以外使わないんで他のIDEはわかりませんが(IDEA使いであれば、このフォーラムにも使用者が結構居るはずなので、確認方法を質問してみたら誰か教えてくれるんじゃないかな。他のソフトも使用者は居そう。)、Eclipseであれば、
パッケージエクスプローラーの参照ライブラリータブにforgeSrcが入っているはずなので、そこにforgeのソースと一緒にMC本体のソースも確認可能な状態で入っているはずです。
バニラのソースやForgeのソースを確認できることは、初歩の初歩なので、こちらとしては出来る前提で話を進めます。

お返事ありがとうございます。自分もEclipseを使用しているので参照ライブラリーを確認したところ確かにソースコードがありました。
初歩的なところで間違っていましたね・・・。作業台の処理はそちらを見てみようと思います。丁寧にありがとうございました。
Velc
ID:2d74aa8a
木を殴ってる
 
記事: 17
登録日時: 2017年6月07日(水) 12:04

  • (PostNo.303565)

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

投稿記事by kixiko » 2017年6月14日(水) 23:55

こんばんは。1.10.2のforge-1.10.2-12.18.3.2185-mdkを使ったブロック追加のMOD製作をしています。

メタデータの追加・インベントリへの表示に関しての質問です。サイトではMinecraft Modding Wikiの「1.6のメタデータを持つアイテム・ブロック」、TNT MODDERSの「メタデータを持つブロックの追加」、英語のメタデータに関するチュートリアル動画、また、バニラのソースで、「Block」「BlockStoneBrick」「BlockSandStone」「BlockQuartz」「ItemBlock」「ItemLeaves」「ItemColored」などメタに関していそうなクラスは一通り確認しました。

MOD製作の現状としては、ブロックやアイテムの追加、テクスチャの指定、クリエイティブタブの追加などはできて、しっかりと動作しています。(Javaに関しては初心者で勉強中です。)

今回メタデータに関してやったことは、バニラのクラス「BlockQuartz」の59行目以下(publick int damageDropped~)でメタに関係ありそうなものを自身のMODのブロックのクラスにコピペし、クラス名の部分など全て差し替えました。また、24行目(public static final PropertyEnum~)の部分もコピペして名前は差し替えています。

BlockFlowerLeaves.java
コード: 全て選択
package myMod.blocks;

import myMod.Reference;
import myMod.myMod;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.annotation.Nullable;
import java.util.List;

public class BlockFlowerLeaves extends Block{

    public static final PropertyEnum<BlockFlowerLeaves.EnumType> TYPE = PropertyEnum.<BlockFlowerLeaves.EnumType>create("type", BlockFlowerLeaves.EnumType.class);

    public BlockFlowerLeaves()
    {
        super(Material.LEAVES);
        setUnlocalizedName(Reference.myModBlocks.FLOWERLEAVES.getUnlocalizedName());
        setRegistryName(Reference.myModBlocks.FLOWERLEAVES.getRegistryName());
        setDefaultState(this.blockState.getBaseState().withProperty(TYPE, BlockFlowerLeaves.EnumType.DEFAULT));
        setCreativeTab(myMod.PlantsTab);
        setLightOpacity(1);
        setSoundType(SoundType.PLANT);
    }

    @Override
    public int damageDropped(IBlockState state)
    {
        return ((BlockFlowerLeaves.EnumType)state.getValue(TYPE)).getMetadata();
    }

    @SideOnly(Side.CLIENT)
    public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list)
    {
        list.add(new ItemStack(itemIn, 1, BlockFlowerLeaves.EnumType.DEFAULT.getMetadata()));
        list.add(new ItemStack(itemIn, 1, BlockFlowerLeaves.EnumType.RED.getMetadata()));
        list.add(new ItemStack(itemIn, 1, BlockFlowerLeaves.EnumType.PINK.getMetadata()));
    }

    @Override
    public MapColor getMapColor(IBlockState state)
    {
        return MapColor.GREEN;
    }

    @Override
    public IBlockState getStateFromMeta(int meta)
    {
        return this.getDefaultState().withProperty(TYPE, BlockFlowerLeaves.EnumType.byMetadata(meta));
    }

    @Override
    public int getMetaFromState(IBlockState state)
    {
        return ((BlockFlowerLeaves.EnumType)state.getValue(TYPE)).getMetadata();
    }

    @Override
    protected BlockStateContainer createBlockState()
    {
        return new BlockStateContainer(this, new IProperty[] {TYPE});
    }

    public static enum EnumType implements IStringSerializable
    {
        DEFAULT(0, "default", "default"),
        RED(1, "red", "red"),
        PINK(2, "pink", "pink");

        private static final BlockFlowerLeaves.EnumType[] META_LOOKUP = new BlockFlowerLeaves.EnumType[values().length];
        private final int meta;
        private final String serializedName;
        private final String unlocalizedName;

        private EnumType(int meta, String name, String unlocalizedName)
        {
            this.meta = meta;
            this.serializedName = name;
            this.unlocalizedName = unlocalizedName;
        }

        public int getMetadata()
        {
            return this.meta;
        }

        public String toString()
        {
            return this.unlocalizedName;
        }

        public static BlockFlowerLeaves.EnumType byMetadata(int meta)
        {
            if (meta < 0 || meta >= META_LOOKUP.length)
            {
                meta = 0;
            }

            return META_LOOKUP[meta];
        }

        public String getName()
        {
            return this.unlocalizedName;
        }

        static
        {
            for (BlockFlowerLeaves.EnumType blockflowerleaves$enumtype : values())
            {
                META_LOOKUP[blockflowerleaves$enumtype.getMetadata()] = blockflowerleaves$enumtype;
            }
        }
    }

    @Override
    public boolean isFullCube(IBlockState state){
        return  false;
    }

    @Override
    public boolean isOpaqueCube(IBlockState state) {
        return false;
    }

    @Override
    public BlockRenderLayer getBlockLayer(){
        return BlockRenderLayer.CUTOUT;
    }

    @Deprecated
    @Nullable
    public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos)
    {
        return NULL_AABB;
    }
}

ModBlocks.java
コード: 全て選択
package myMod.init;

import myMod.blocks.*;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class ModBlocks {
    public static Block flower_leaves;

    public static void init(){
        flower_leaves = new BlockFlowerLeaves();
    }

    public static void register(){
        registerBlock(flower_leaves);
    }

    public static void registerBlock(Block block){
        GameRegistry.register(block);
        ItemBlock item = new ItemBlock(block);
        item.setRegistryName(block.getRegistryName());
        GameRegistry.register(item);
    }

    public static void registerRenders(){
        registerRender(flower_leaves);
    }

    public static void registerRender(Block block){
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(),"inventory"));
    }
}

Reference.java
コード: 全て選択
package myMod;

public class Reference {

    public static final String MOD_ID = "mymod";
    public static final String NAME = "my Mod";
    public static final String VERSION = "1.0.0";
    public static final String ACCEPTED_MC_VERSIONS = "[1.10.2]";

    public static final String CLIENT_PROXY_CLASS = "myMod.proxy.ClientProxy";
    public static final String SERVER_PROXY_CLASS = "myMod.proxy.ServerProxy";

    public static enum myModItems{

        private String unlocalizedName;
        private String registryName;

        myModItems(String unlocalizedName, String registryName){
            this.unlocalizedName = unlocalizedName;
            this.registryName = registryName;
        }

        public String getUnlocalizedName(){
            return unlocalizedName;
        }

        public String getRegistryName(){
            return registryName;
        }
    }

    public static enum myModBlocks{
        FLOWERLEAVES("flower_leaves", "FlowerLeaves");

        private String unlocalizedName;
        private String registryName;

        myModBlocks(String unlocalizedName, String registryName){
            this.unlocalizedName = unlocalizedName;
            this.registryName = registryName;
        }

        public String getUnlocalizedName(){
            return unlocalizedName;
        }

        public String getRegistryName(){
            return registryName;
        }
    }
}

myMod.java
コード: 全て選択
package myMod;

import myMod.init.ModBlocks;
import myMod.init.ModCrafting;
import myMod.init.ModItems;
import myMod.proxy.CommonProxy;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

@Mod(modid = Reference.MOD_ID, name = Reference.NAME, version = Reference.VERSION, acceptedMinecraftVersions = Reference.ACCEPTED_MC_VERSIONS)

public class myMod {

    @Mod.Instance
    public static myMod instance;

    @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)
    public static CommonProxy proxy;

    public static CreativeTabs ObjectTab = new CreativeTabs("objecttab") {
        @Override
        public Item getTabIconItem() {
            return Item.getItemFromBlock(ModBlocks.quill_pen);
        }
    };
    public static CreativeTabs TableChairTab = new CreativeTabs("tablechairtab") {
        @Override
        public Item getTabIconItem() {
            return Item.getItemFromBlock(ModBlocks.chair_stool_normal);
        }
    };
    public static CreativeTabs PlantsTab = new CreativeTabs("plantstab") {
        @Override
        public Item getTabIconItem() {
            return Item.getItemFromBlock(ModBlocks.quill_pen);
        }
    };

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event){
        System.out.println("Pre Init");
        ModItems.init();
        ModItems.register();
        ModBlocks.init();
        ModBlocks.register();
    }

    @Mod.EventHandler
    public void init(FMLInitializationEvent event){
        System.out.println("Init");
        proxy.init();
        ModCrafting.register();
    }

    @Mod.EventHandler
    public void postInit(FMLPostInitializationEvent event){
        System.out.println("Post Init");
    }
}



この状態でマイクラを起動してみると、メタの部分もしっかりとインベントリに表示されているのですが、全て名前が一緒で、同じブロックがメタ分並んでいる...といったような状態です。

これを砂岩や石レンガのように、メタごとに名前もテクスチャも違うようにしたいのですが、そこまでたどり着けません...。ItemBlockとかが関係しているのだろうな...と思うのですが...。わかりそうでわからなくて何日もあれやこれやしています。

何卒ご教授下さればと思います。よろしくお願い致します。
kixiko
ID:17d0bee3
水から上がったとこ
 
記事: 5
登録日時: 2017年3月17日(金) 14:04

  • (PostNo.303569)

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

投稿記事by defeatedcrow » 2017年6月15日(木) 01:20

kixiko さんが書きました:こんばんは。1.10.2のforge-1.10.2-12.18.3.2185-mdkを使ったブロック追加のMOD製作をしています。

メタデータの追加・インベントリへの表示に関しての質問です。サイトではMinecraft Modding Wikiの「1.6のメタデータを持つアイテム・ブロック」、TNT MODDERSの「メタデータを持つブロックの追加」、英語のメタデータに関するチュートリアル動画、また、バニラのソースで、「Block」「BlockStoneBrick」「BlockSandStone」「BlockQuartz」「ItemBlock」「ItemLeaves」「ItemColored」などメタに関していそうなクラスは一通り確認しました。

MOD製作の現状としては、ブロックやアイテムの追加、テクスチャの指定、クリエイティブタブの追加などはできて、しっかりと動作しています。(Javaに関しては初心者で勉強中です。)

今回メタデータに関してやったことは、バニラのクラス「BlockQuartz」の59行目以下(publick int damageDropped~)でメタに関係ありそうなものを自身のMODのブロックのクラスにコピペし、クラス名の部分など全て差し替えました。また、24行目(public static final PropertyEnum~)の部分もコピペして名前は差し替えています。

BlockFlowerLeaves.java
コード: 全て選択
package myMod.blocks;

import myMod.Reference;
import myMod.myMod;
import net.minecraft.block.Block;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.MapColor;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.annotation.Nullable;
import java.util.List;

public class BlockFlowerLeaves extends Block{

    public static final PropertyEnum<BlockFlowerLeaves.EnumType> TYPE = PropertyEnum.<BlockFlowerLeaves.EnumType>create("type", BlockFlowerLeaves.EnumType.class);

    public BlockFlowerLeaves()
    {
        super(Material.LEAVES);
        setUnlocalizedName(Reference.myModBlocks.FLOWERLEAVES.getUnlocalizedName());
        setRegistryName(Reference.myModBlocks.FLOWERLEAVES.getRegistryName());
        setDefaultState(this.blockState.getBaseState().withProperty(TYPE, BlockFlowerLeaves.EnumType.DEFAULT));
        setCreativeTab(myMod.PlantsTab);
        setLightOpacity(1);
        setSoundType(SoundType.PLANT);
    }

    @Override
    public int damageDropped(IBlockState state)
    {
        return ((BlockFlowerLeaves.EnumType)state.getValue(TYPE)).getMetadata();
    }

    @SideOnly(Side.CLIENT)
    public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list)
    {
        list.add(new ItemStack(itemIn, 1, BlockFlowerLeaves.EnumType.DEFAULT.getMetadata()));
        list.add(new ItemStack(itemIn, 1, BlockFlowerLeaves.EnumType.RED.getMetadata()));
        list.add(new ItemStack(itemIn, 1, BlockFlowerLeaves.EnumType.PINK.getMetadata()));
    }

    @Override
    public MapColor getMapColor(IBlockState state)
    {
        return MapColor.GREEN;
    }

    @Override
    public IBlockState getStateFromMeta(int meta)
    {
        return this.getDefaultState().withProperty(TYPE, BlockFlowerLeaves.EnumType.byMetadata(meta));
    }

    @Override
    public int getMetaFromState(IBlockState state)
    {
        return ((BlockFlowerLeaves.EnumType)state.getValue(TYPE)).getMetadata();
    }

    @Override
    protected BlockStateContainer createBlockState()
    {
        return new BlockStateContainer(this, new IProperty[] {TYPE});
    }

    public static enum EnumType implements IStringSerializable
    {
        DEFAULT(0, "default", "default"),
        RED(1, "red", "red"),
        PINK(2, "pink", "pink");

        private static final BlockFlowerLeaves.EnumType[] META_LOOKUP = new BlockFlowerLeaves.EnumType[values().length];
        private final int meta;
        private final String serializedName;
        private final String unlocalizedName;

        private EnumType(int meta, String name, String unlocalizedName)
        {
            this.meta = meta;
            this.serializedName = name;
            this.unlocalizedName = unlocalizedName;
        }

        public int getMetadata()
        {
            return this.meta;
        }

        public String toString()
        {
            return this.unlocalizedName;
        }

        public static BlockFlowerLeaves.EnumType byMetadata(int meta)
        {
            if (meta < 0 || meta >= META_LOOKUP.length)
            {
                meta = 0;
            }

            return META_LOOKUP[meta];
        }

        public String getName()
        {
            return this.unlocalizedName;
        }

        static
        {
            for (BlockFlowerLeaves.EnumType blockflowerleaves$enumtype : values())
            {
                META_LOOKUP[blockflowerleaves$enumtype.getMetadata()] = blockflowerleaves$enumtype;
            }
        }
    }

    @Override
    public boolean isFullCube(IBlockState state){
        return  false;
    }

    @Override
    public boolean isOpaqueCube(IBlockState state) {
        return false;
    }

    @Override
    public BlockRenderLayer getBlockLayer(){
        return BlockRenderLayer.CUTOUT;
    }

    @Deprecated
    @Nullable
    public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos)
    {
        return NULL_AABB;
    }
}

ModBlocks.java
コード: 全て選択
package myMod.init;

import myMod.blocks.*;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class ModBlocks {
    public static Block flower_leaves;

    public static void init(){
        flower_leaves = new BlockFlowerLeaves();
    }

    public static void register(){
        registerBlock(flower_leaves);
    }

    public static void registerBlock(Block block){
        GameRegistry.register(block);
        ItemBlock item = new ItemBlock(block);
        item.setRegistryName(block.getRegistryName());
        GameRegistry.register(item);
    }

    public static void registerRenders(){
        registerRender(flower_leaves);
    }

    public static void registerRender(Block block){
        Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(Item.getItemFromBlock(block), 0, new ModelResourceLocation(block.getRegistryName(),"inventory"));
    }
}

Reference.java
コード: 全て選択
package myMod;

public class Reference {

    public static final String MOD_ID = "mymod";
    public static final String NAME = "my Mod";
    public static final String VERSION = "1.0.0";
    public static final String ACCEPTED_MC_VERSIONS = "[1.10.2]";

    public static final String CLIENT_PROXY_CLASS = "myMod.proxy.ClientProxy";
    public static final String SERVER_PROXY_CLASS = "myMod.proxy.ServerProxy";

    public static enum myModItems{

        private String unlocalizedName;
        private String registryName;

        myModItems(String unlocalizedName, String registryName){
            this.unlocalizedName = unlocalizedName;
            this.registryName = registryName;
        }

        public String getUnlocalizedName(){
            return unlocalizedName;
        }

        public String getRegistryName(){
            return registryName;
        }
    }

    public static enum myModBlocks{
        FLOWERLEAVES("flower_leaves", "FlowerLeaves");

        private String unlocalizedName;
        private String registryName;

        myModBlocks(String unlocalizedName, String registryName){
            this.unlocalizedName = unlocalizedName;
            this.registryName = registryName;
        }

        public String getUnlocalizedName(){
            return unlocalizedName;
        }

        public String getRegistryName(){
            return registryName;
        }
    }
}

myMod.java
コード: 全て選択
package myMod;

import myMod.init.ModBlocks;
import myMod.init.ModCrafting;
import myMod.init.ModItems;
import myMod.proxy.CommonProxy;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;

@Mod(modid = Reference.MOD_ID, name = Reference.NAME, version = Reference.VERSION, acceptedMinecraftVersions = Reference.ACCEPTED_MC_VERSIONS)

public class myMod {

    @Mod.Instance
    public static myMod instance;

    @SidedProxy(clientSide = Reference.CLIENT_PROXY_CLASS, serverSide = Reference.SERVER_PROXY_CLASS)
    public static CommonProxy proxy;

    public static CreativeTabs ObjectTab = new CreativeTabs("objecttab") {
        @Override
        public Item getTabIconItem() {
            return Item.getItemFromBlock(ModBlocks.quill_pen);
        }
    };
    public static CreativeTabs TableChairTab = new CreativeTabs("tablechairtab") {
        @Override
        public Item getTabIconItem() {
            return Item.getItemFromBlock(ModBlocks.chair_stool_normal);
        }
    };
    public static CreativeTabs PlantsTab = new CreativeTabs("plantstab") {
        @Override
        public Item getTabIconItem() {
            return Item.getItemFromBlock(ModBlocks.quill_pen);
        }
    };

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event){
        System.out.println("Pre Init");
        ModItems.init();
        ModItems.register();
        ModBlocks.init();
        ModBlocks.register();
    }

    @Mod.EventHandler
    public void init(FMLInitializationEvent event){
        System.out.println("Init");
        proxy.init();
        ModCrafting.register();
    }

    @Mod.EventHandler
    public void postInit(FMLPostInitializationEvent event){
        System.out.println("Post Init");
    }
}



この状態でマイクラを起動してみると、メタの部分もしっかりとインベントリに表示されているのですが、全て名前が一緒で、同じブロックがメタ分並んでいる...といったような状態です。

これを砂岩や石レンガのように、メタごとに名前もテクスチャも違うようにしたいのですが、そこまでたどり着けません...。ItemBlockとかが関係しているのだろうな...と思うのですが...。わかりそうでわからなくて何日もあれやこれやしています。

何卒ご教授下さればと思います。よろしくお願い致します。


ItemBlockのUnlocalizedNameがデフォルトのままだからだろうと思います。
他にItemBlockのもつメソッドでオーバーライドしておきたいものがあれば、ItemBlock継承の自作クラスを作ってBlock登録時に使用すると良いと思います。
以下はHaCの例。UnlocalizedName以外に、Json自動出力用のテクスチャパスも持たせてあるので継承クラスを自作しています。
https://github.com/defeatedcrow/HeatAndClimateLib/blob/1.10.2_master/java/defeatedcrow/hac/core/base/DCItemBlock.java

名前以外に変える予定がなければ、Block登録部分のみ、こういう記述に変更してもよいかと。
コード: 全て選択
    public static void registerBlock(Block block){
        GameRegistry.register(block);
        ItemBlock item = new ItemBlock(block){
           // UnlocalizedNameにメタデータ値を付加
           @Override
           public String getUnlocalizedName(ItemStack stack) {
              int meta = Math.min(stack.getMetadata(), 15);
              return super.getUnlocalizedName() + "_" + meta;
           }
        };
        item.setRegistryName(block.getRegistryName());
        GameRegistry.register(item);
    }



また、テクスチャを変えたいとのことですが、1.10.2はJson登録が必要なので1.6以前の手法は全く通用しません。
(1.8系とすら断絶しています)
Jsonファイルをメタごとに登録する手順が必要なので、ModdingWiki等見つつやってみると良いと思います。
(コレについては、私のModではJson自動生成やらBakedEventやら、参考にしにくいソースばかりなのでお見せしづらいです…)
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:7e692061
ラピスラズリ収集家
 
記事: 917
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.303586)

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

投稿記事by kixiko » 2017年6月15日(木) 22:20

defeatedcrow さんが書きました:ItemBlockのUnlocalizedNameがデフォルトのままだからだろうと思います。
他にItemBlockのもつメソッドでオーバーライドしておきたいものがあれば、ItemBlock継承の自作クラスを作ってBlock登録時に使用すると良いと思います。
以下はHaCの例。UnlocalizedName以外に、Json自動出力用のテクスチャパスも持たせてあるので継承クラスを自作しています。
https://github.com/defeatedcrow/HeatAnd ... Block.java

名前以外に変える予定がなければ、Block登録部分のみ、こういう記述に変更してもよいかと。
コード: 全て選択
public static void registerBlock(Block block){
GameRegistry.register(block);
ItemBlock item = new ItemBlock(block){
// UnlocalizedNameにメタデータ値を付加
@Override
public String getUnlocalizedName(ItemStack stack) {
int meta = Math.min(stack.getMetadata(), 15);
return super.getUnlocalizedName() + "_" + meta;
}
};
item.setRegistryName(block.getRegistryName());
GameRegistry.register(item);
}



また、テクスチャを変えたいとのことですが、1.10.2はJson登録が必要なので1.6以前の手法は全く通用しません。
(1.8系とすら断絶しています)
Jsonファイルをメタごとに登録する手順が必要なので、ModdingWiki等見つつやってみると良いと思います。
(コレについては、私のModではJson自動生成やらBakedEventやら、参考にしにくいソースばかりなのでお見せしづらいです…)


ご助言ありがとうございます...!
無事それぞれの名前を変えることが出来ました~!;;

今はテクスチャの適応(メタ毎に登録する...)を頑張っています...。
また質問させていただくかもしれません。

兎にも角にも、メタ毎に名前を変えれて嬉しいです~!
ありがとうございました!
kixiko
ID:17d0bee3
水から上がったとこ
 
記事: 5
登録日時: 2017年3月17日(金) 14:04

  • (PostNo.304458)

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

投稿記事by Velc » 2017年7月07日(金) 00:42

1.11.2でBaubles MODと連携したアイテムを作ろうと考えているのですが、
開発環境にMODを入れた状態でBaublesのインベントリーを開こうとすると下のようなメッセージが出てデバッグができない状態です。
build.gradleを編集してeclipseの参照ライブラリーにはdeobf版が入っているので読み込めてはいるようですがうまくいきません。
forgeのバージョンも1.11.2で古いものと1.11のバージョンも試してみましたがうまく動作しませんでした。
こうなるとデバッグはビルドして通常プレイの環境でやるしかないでしょうか。
BaublesのバージョンはBaubles-1.11-1.4.5のdeobf版です。

[00:20:23] [Netty Server IO #1/ERROR] [FML]: SimpleChannelHandlerWrapper exception
java.lang.NoSuchFieldError: player
at baubles.common.network.PacketOpenBaublesInventory.onMessage(PacketOpenBaublesInventory.java:28) ~[PacketOpenBaublesInventory.class:?]
at baubles.common.network.PacketOpenBaublesInventory.onMessage(PacketOpenBaublesInventory.java:14) ~[PacketOpenBaublesInventory.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:56) ~[SimpleChannelHandlerWrapper.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:36) ~[SimpleChannelHandlerWrapper.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:108) [SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [MessageToMessageDecoder.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [MessageToMessageCodec.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:111) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:157) [NetworkManager.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:51) [NetworkManager.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleServerSideCustomPacket(NetworkDispatcher.java:452) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:274) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:73) [NetworkDispatcher.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:326) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:45) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:312) [LocalChannel$5.class:4.0.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380) [SingleThreadEventExecutor.class:4.0.23.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357) [NioEventLoop.class:4.0.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [SingleThreadEventExecutor$2.class:4.0.23.Final]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
[00:20:23] [Netty Server IO #1/ERROR] [FML]: There was a critical exception handling a packet on channel baubles
java.lang.NoSuchFieldError: player
at baubles.common.network.PacketOpenBaublesInventory.onMessage(PacketOpenBaublesInventory.java:28) ~[PacketOpenBaublesInventory.class:?]
at baubles.common.network.PacketOpenBaublesInventory.onMessage(PacketOpenBaublesInventory.java:14) ~[PacketOpenBaublesInventory.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:56) ~[SimpleChannelHandlerWrapper.class:?]
at net.minecraftforge.fml.common.network.simpleimpl.SimpleChannelHandlerWrapper.channelRead0(SimpleChannelHandlerWrapper.java:36) ~[SimpleChannelHandlerWrapper.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:108) ~[SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) ~[MessageToMessageDecoder.class:4.0.23.Final]
at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) ~[MessageToMessageCodec.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) ~[AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) ~[DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) ~[EmbeddedChannel.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:111) [FMLProxyPacket.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:157) [NetworkManager.class:?]
at net.minecraft.network.NetworkManager.channelRead0(NetworkManager.java:51) [NetworkManager.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.handleServerSideCustomPacket(NetworkDispatcher.java:452) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:274) [NetworkDispatcher.class:?]
at net.minecraftforge.fml.common.network.handshake.NetworkDispatcher.channelRead0(NetworkDispatcher.java:73) [NetworkDispatcher.class:?]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) [SimpleChannelInboundHandler.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319) [AbstractChannelHandlerContext.class:4.0.23.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787) [DefaultChannelPipeline.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.finishPeerRead(LocalChannel.java:326) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel.access$400(LocalChannel.java:45) [LocalChannel.class:4.0.23.Final]
at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:312) [LocalChannel$5.class:4.0.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380) [SingleThreadEventExecutor.class:4.0.23.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357) [NioEventLoop.class:4.0.23.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [SingleThreadEventExecutor$2.class:4.0.23.Final]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_131]
[00:20:23] [Netty Server IO #1/ERROR] [FML]: Network Disconnect: A fatal error has occurred, this connection is terminated
Velc
ID:2d74aa8a
木を殴ってる
 
記事: 17
登録日時: 2017年6月07日(水) 12:04

  • (PostNo.304473)

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

投稿記事by tokiwa7316 » 2017年7月07日(金) 19:56

mod製作を今日初めてやってみた者です。
moddingの様々な動画を見て、eclipsやforgeなどをダウンロードして、wikiに載ってるチュートリアルのレシピ追加のソースコードをコピペしてマイクラを起動したところ、起動してmodの読み込み最中に落ちてこのような文字が出てきました。

-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_131, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 843262224 bytes (804 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1566 5 mods loaded, 5 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UC mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
UC FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1566-1.7.10.jar)
UC Forge{10.13.4.1566} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1566-1.7.10.jar)
UC examplemod{1.0} [Example Mod] (bin)
UE recipe_sample{1.0} [recipe_sample] (bin)
GL info: ' Vendor: 'Intel' Version: '4.3.0 - Build 20.19.15.4531' Renderer: 'Intel(R) HD Graphics 4400'
[19:44:34] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:398]: #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\tokiw\Desktop\forge\forge-1.7.10-10.13.4.1566-1.7.10-src\eclipse\.\crash-reports\crash-2017-07-07_19.44.34-client.txt
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release

どうすればよいですか?
長文失礼しました。
tokiwa7316
ID:ea40e5d2
水から上がったとこ
 
記事: 5
登録日時: 2017年1月17日(火) 19:11

  • (PostNo.304477)

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

投稿記事by spuash918 » 2017年7月07日(金) 20:20

tokiwa7316 さんが書きました:mod製作を今日初めてやってみた者です。
moddingの様々な動画を見て、eclipsやforgeなどをダウンロードして、wikiに載ってるチュートリアルのレシピ追加のソースコードをコピペしてマイクラを起動したところ、起動してmodの読み込み最中に落ちてこのような文字が出てきました。

-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_131, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 843262224 bytes (804 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1566 5 mods loaded, 5 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UC mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
UC FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1566-1.7.10.jar)
UC Forge{10.13.4.1566} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1566-1.7.10.jar)
UC examplemod{1.0} [Example Mod] (bin)
UE recipe_sample{1.0} [recipe_sample] (bin)
GL info: ' Vendor: 'Intel' Version: '4.3.0 - Build 20.19.15.4531' Renderer: 'Intel(R) HD Graphics 4400'
[19:44:34] [Client thread/INFO] [STDOUT]: [net.minecraft.client.Minecraft:displayCrashReport:398]: #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\tokiw\Desktop\forge\forge-1.7.10-10.13.4.1566-1.7.10-src\eclipse\.\crash-reports\crash-2017-07-07_19.44.34-client.txt
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release


どうすればよいですか?
長文失礼しました。

「このような文字」のことをクラッシュレポートと言います。これにはどこでエラーが起きたのかなどが記載されているので、moddingをするのであればある程度は読めるようにしておくのが望ましいです
また、上記のクラッシュレポートでは情報が足りませんので
「C:\Users\tokiw\Desktop\forge\forge-1.7.10-10.13.4.1566-1.7.10-src\eclipse\.\crash-reports\crash-2017-07-07_19.44.34-client.txt」をspoilerをつかい貼ってください。
また、原因解決が早くなるので可能であればソースコードもCodeを使い貼ってください。

spoilerとcodeの使い方(本件とは関係ないので格納)
長い文字列(例としてクラッシュレポート)をそのまま貼るとトピックが見づらくなり迷惑になりますのでspoilerを使ってください
使い方は、投稿の際の画面にてクラッシュレポートを前文選択したまま、上記メニューにある「spoiler」のボタンを押すことでspoilerに格納することができます
codeも同様にソースコードを前文選択したまま、上記メニューにある「code」のボタンを押すことでcodeとして表示することができます
以下Codeのサンプル
コード: 全て選択
Test
最近は低浮上気味
ここでMOD作ってます。
名前はRecipesMODです。ネザースターなどが作れるようになります。(1.7.2~1.8)
また同ページにてTirituMODの1.6.4対応版&1.7.10版を公開しています。(配布の許可はもらってあります)
Twitterやってます。→https://twitter.com/pokora_youtube
よろしければYoutubeもお願いします。
spuash918
ID:756593fa
鉄鉱掘り
 
記事: 266
登録日時: 2014年11月03日(月) 11:17
お住まい: 東海のどこか

1つ前へ次へ

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

x