攻撃力を持つブロック

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

攻撃力を持つブロック

投稿記事by mpslayer » 2017年11月02日(木) 18:04

お世話になります。
現在、forge 1.7.10にて攻撃力を持つブロックを製作中です。
ブロックの基本機能は適用できましたので、あとは攻撃力を持たせるのみなのですが、
EnumHelper、ToolMaterial(importしていないので名前だけになっている状態)などについて理解ができず、
ItemSwordをExtendしていないのでgetDamageVsEntityが使えないのでは…と思っています。
解決法をご教示いただけると幸いです。


コード: 全て選択
package com.strongblock;

import java.util.List;

import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.util.EnumHelper;

public class BlockItemStrongBlock extends ItemBlock
{
   public static ToolMaterial block;

    public BlockItemStrongWool(Block _ToolMaterial) // ??
    {
      super(_ToolMaterial); // ??
      block = EnumHelper.addToolMaterial("block", 3, 1000, 20.0F, 2.5F, 10); // ???
      this.maxStackSize = 1; // これは反映される

    }

    public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean par4)
    {
        list.add("I am Strong Block");
    }
}
mpslayer
ID:4e317e20
水から上がったとこ
 
記事: 2
登録日時: 2017年11月02日(木) 17:54

  • (PostNo.309992)

Re: 攻撃力を持つブロック

投稿記事by defeatedcrow » 2017年11月05日(日) 17:54

かつてのマイクラはItemToolやItemSword継承が必要でしたが、1.7以降は内部仕様が変わっているのでItemBlock継承のままでも攻撃力は付与できます

装備品やポーション、モブの能力などでモブのステータスを変動させるのにAttributeModifierという機能が追加されています
アイテムの場合は、getItemAttributeModifiers()メソッドをオーバーライドして、getItemAttributeModifiers()用のマップにキーとなる名称とステータス効果を入れればOKです

剣のように攻撃力を増やしたい場合は、剣にならって以下のように記述します
コード: 全て選択
@Override
   public Multimap getItemAttributeModifiers() {
      Multimap multimap = super.getItemAttributeModifiers();
      multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(),
            new AttributeModifier(field_111210_e, "Weapon modifier", 20.0D, 0));
      return multimap;
   }

上記の場合、決め打ちで20.0Dの攻撃力を与えています。ハート10個分のダメージですね
SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()は攻撃力の変動
field_111210_eと"Weapon modifier"はItemクラスで使われている、攻撃力付与の定数のようなので、そのまま使ったほうが良いんじゃないかと思います
(一応AttributeModifiersを自作してForge経由で登録する方法もあった気がしますが、ぼく自身は1.7時には試していなかったので存じないです)
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:7e692061
ラピスラズリ収集家
 
記事: 933
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東


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

x