追加Mobのjsonファイルによるドロップアイテムの設定

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

追加Mobのjsonファイルによるドロップアイテムの設定

投稿記事by さとなし » 2018年11月23日(金) 23:57

こんにちは。
不適切な発言があるかもしれませんが、よろしくお願いいたします。

以前別のトピックでドロップアイテムに関する質問をさせていただいたのですが、jsonファイルを使ってドロップアイテムを管理したほうが拡張性があっていいと思ったので、また新たに質問させていただきました。

ですが、jsonによるドロップアイテムの管理がうまくできませんでした。
私の考えとしては、entity死亡時に呼ばれるgetLootTable()を使って自作のjsonファイルを読み込ませ、ドロップアイテムを制御しようとしました。
具体的な現象は、追加したmobを倒しても経験値オーブのみドロップされ、アイテムはドロップしませんでした。
問題点などがあれば教えていただけないでしょうか。

以下が私の開発環境とプログラムコードになります。

エディター:Eclipse
Forge:1.12.2

---------------------------------------------------------------------------------------------------------
//TestMod.java

package com.test.testMod;

import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.storage.loot.LootTable;
import net.minecraft.world.storage.loot.LootTableList;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.LootTableLoadEvent;
import net.minecraftforge.fml.client.registry.IRenderFactory;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.EntityRegistry;

@Mod(modid = TestMod.MOD_ID, version = TestMod.MOD_VERSION)
public class TestMod {
public static final String MOD_ID ="testmod";
public static final String MOD_VERSION = "1.0";

 //追加したmob(EntitySample)の登録
@Mod.EventHandler
public void init(FMLInitializationEvent event) {
EntityRegistry.registerModEntity(new ResourceLocation("sample"), EntitySample.class, "Sample", 0, this, 50, 1, true, 1000, 2200);
}

//追加したmob(EntitySample)の設定
@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
if(event.getSide().isClient()) {
RenderingRegistry.registerEntityRenderingHandler(EntitySample.class, new IRenderFactory<EntitySample>() {
@Override
public Render<? super EntitySample> createRenderFor(RenderManager manager) {
return new RenderSample(manager, new ModelSample(), .3f);
}
});
}
}
}

---------------------------------------------------------------------------------------------------------
//EntitySample.java

package com.test.testMod;

import java.util.Collection;

import net.minecraft.entity.EntityAreaEffectCloud;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;

public class EntitySample extends EntityMob
{
public static final ResourceLocation LOOT_TABLE = new ResourceLocation("testmod", "entities/sample");

public EntitySample(World worldIn) {
super(worldIn);
this.setSize(0.6F, 1.95F);

if (LOOT_TABLE != null)
{
System.out.println(LOOT_TABLE); //returnは"testmod:entities/sample"
}
}

public ResourceLocation getLootTable()
{
System.out.println("SUCCESS!"); //returnは"SUCCESS!"
return LOOT_TABLE;
}
}

---------------------------------------------------------------------------------------------------------
//ファイル名"sample.json"

{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:diamond", //ドロップ品を"ダイヤモンド"に設定
"weight": 1,
"functions": [
{
"function": "set_count",
"count": {
"min": 0,
"max": 2
}
},
{
"function": "looting_enchant",
"count": {
"min": 0,
"max": 1
}
}
]
}
]
}
]
}

---------------------------------------------------------------------------------------------------------
"sample.json"の位置は、
main\resources\assets\testmod\loot_tables\entities\sample.json
になっています。

ご回答よろしくお願いいたします。
さとなし
ID:b8708cfe
水から上がったとこ
 
記事: 4
登録日時: 2018年11月21日(水) 22:56

  • (PostNo.322262)

Re: 追加Mobのjsonファイルによるドロップアイテムの設定

投稿記事by ゲスト » 2018年11月28日(水) 01:24

環境を作って試していないので、うまくいくかは分からないですが、
思い当たる節があったのでコメント。

preInit(FMLPreInitializationEvent event) 内に
「LootTableList.register(EntitySample.LOOT_TABLE);」の一行を付け加える。

これで行けるんじゃないかなぁ。
ゲスト
ID:cdb7c8b4
 


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

x