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

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

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

投稿記事by たいさん » 2017年1月25日(水) 17:25

弓矢の攻撃力を変える方法を教えてください

自分のMODでアドオン的なのを作っているんですが、
独自の弓を追加するとき、テクスチャ等はできたのですが
攻撃力(射撃ダメージ)の変更方法がわかりません。
ItemBow.classを変えればいいのか、EntityArrow.classを変えればいいのか・・・
ソースコードを張っておきます。
(コードがわかりにくかったり、邪魔な変数があったりします・・・)
SobaWeaponArmor.java
package com.soba.weaponarmor;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemSpade;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraftforge.common.util.EnumHelper;

@Mod(modid = SobaWeaponArmor.MODID, version = SobaWeaponArmor.VERSION)
public class SobaWeaponArmor
{
public static final String MODID = "SobaWeaponArmor";
public static final String VERSION = "1.0.5";

public static Logger logger = LogManager.getLogger("SobaWeaponArmor");

public static CreativeTabs tabSobaWeaponArmor = new WeArTab("WeArtab");

public static Item swordSoba;
public static Item shovelSoba;
public static Item pickaxeSoba;
public static Item axeSoba;
public static Item hoeSoba;
public static Item bowSoba;
public static Item diaSwordSoba;
public static Item diaShovelSoba;
public static Item diaPickaxeSoba;
public static Item diaAxeSoba;
public static Item diaHoeSoba;
public static Item diaBowSoba;
public static Item goldSwordSoba;
public static Item goldShovelSoba;
public static Item goldPickaxeSoba;
public static Item goldAxeSoba;
public static Item goldHoeSoba;
public static Item goldBowSoba;
public static Item ironSwordSoba;
public static Item ironShovelSoba;
public static Item ironPickaxeSoba;
public static Item ironAxeSoba;
public static Item ironHoeSoba;
public static Item ironBowSoba;
public static Item stoneSwordSoba;
public static Item stoneShovelSoba;
public static Item stonePickaxeSoba;
public static Item stoneAxeSoba;
public static Item stoneHoeSoba;
public static Item stoneBowSoba;

public static Item helmetSoba;
public static Item chestPlateSoba;
public static Item leggingsSoba;
public static Item bootsSoba;
public static Item diaHelmetSoba;
public static Item diaChestPlateSoba;
public static Item diaLeggingsSoba;
public static Item diaBootsSoba;
public static Item goldHelmetSoba;
public static Item goldChestPlateSoba;
public static Item goldLeggingsSoba;
public static Item goldBootsSoba;
public static Item ironHelmetSoba;
public static Item ironChestPlateSoba;
public static Item ironLeggingsSoba;
public static Item ironBootsSoba;
public static Item stoneHelmetSoba;
public static Item stoneChestPlateSoba;
public static Item stoneLeggingsSoba;
public static Item stoneBootsSoba;

public static Item yudetasoba;
public static Item kittakizi;

public static ToolMaterial SOBA;
public static ToolMaterial DIASOBA;
public static ToolMaterial GOLDSOBA;
public static ToolMaterial IRONSOBA;
public static ToolMaterial STONESOBA;
public static ArmorMaterial SOBAARMOR;
public static ArmorMaterial DIASOBAARMOR;
public static ArmorMaterial GOLDSOBAARMOR;
public static ArmorMaterial IRONSOBAARMOR;
public static ArmorMaterial STONESOBAARMOR;

@EventHandler
public void init(FMLInitializationEvent event)
{
SOBA = EnumHelper.addToolMaterial("SOBA", 2, 1000, 100.0F, 100.0F, 20)
.setRepairItem(new ItemStack(this.yudetasoba));
DIASOBA = EnumHelper.addToolMaterial("DIASOBA", 10, 5000, 500.0F, 500.0F, 100)
.setRepairItem(new ItemStack(this.yudetasoba));
GOLDSOBA = EnumHelper.addToolMaterial("GOLDSOBA", 8, 4000, 400.0F, 400.0F, 80)
.setRepairItem(new ItemStack(this.yudetasoba));
IRONSOBA = EnumHelper.addToolMaterial("IRONSOBA", 6, 3000, 300.0F, 300.0F, 60)
.setRepairItem(new ItemStack(this.yudetasoba));
STONESOBA = EnumHelper.addToolMaterial("STONESOBA", 4, 2000, 200.0F, 200.0F, 40)
.setRepairItem(new ItemStack(this.yudetasoba));
SOBAARMOR = EnumHelper.addArmorMaterial("SOBAARMOR", 100, new int[] { 10, 10, 10, 10 }, 100);
SOBAARMOR.customCraftingMaterial = yudetasoba;

swordSoba = new ItemSword(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("swordSoba")
.setTextureName("firstaddon:soba_sword");
GameRegistry.registerItem(swordSoba, "swordSoba");

shovelSoba = new ItemSpade(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("shovelSoba")
.setTextureName("firstaddon:soba_shovel");
GameRegistry.registerItem(shovelSoba, "shovelSoba");

pickaxeSoba = new SobaPickaxe(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("pickaxeSoba")
.setTextureName("firstaddon:soba_pickaxe");
GameRegistry.registerItem(pickaxeSoba, "pickaxeSoba");

axeSoba = new SobaAxe(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("axeSoba")
.setTextureName("firstaddon:soba_axe");
GameRegistry.registerItem(axeSoba, "axeSoba");

hoeSoba = new ItemHoe(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("hoeSoba")
.setTextureName("firstaddon:soba_hoe");
GameRegistry.registerItem(hoeSoba, "hoeSoba");

bowSoba = new SobaBow()
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("bowSoba")
.setFull3D()
.setTextureName("firstaddon:soba_bow");
GameRegistry.registerItem(bowSoba, "bowSoba");


helmetSoba = new ItemSobaArmor(0)
.setUnlocalizedName("helmetSoba")
.setTextureName("firstaddon:helmetSoba");
GameRegistry.registerItem(helmetSoba, "helmetSoba");

chestPlateSoba = new ItemSobaArmor(1)
.setUnlocalizedName("chestPlateSoba")
.setTextureName("firstaddon:chestPlateSoba");
GameRegistry.registerItem(chestPlateSoba, "chestPlateSoba");

leggingsSoba = new ItemSobaArmor(2)
.setUnlocalizedName("leggingsSoba")
.setTextureName("firstaddon:leggingsSoba");
GameRegistry.registerItem(leggingsSoba, "leggingsSoba");

bootsSoba = new ItemSobaArmor(3)
.setUnlocalizedName("bootsSoba")
.setTextureName("firstaddon:bootsSoba");
GameRegistry.registerItem(bootsSoba, "bootsSoba");
}


@EventHandler
public void postInit (FMLPostInitializationEvent event)
{
if(Loader.isModLoaded("SobaMod"))
{
try
{
this.yudetasoba = GameRegistry.findItem("SobaMod", "yudetasoba");
this.kittakizi = GameRegistry.findItem("SobaMod", "kittakizi");

GameRegistry.addRecipe(new ItemStack(this.swordSoba),
"Y",
"Y",
"S",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.shovelSoba),
"Y",
"S",
"S",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.pickaxeSoba),
"YYY",
" S ",
" S ",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.axeSoba),
"YY",
"YS",
" S",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.hoeSoba),
"YY",
" S",
" S",
'Y', this.yudetasoba,
'S', Items.stick
);


GameRegistry.addRecipe(new ItemStack(this.helmetSoba),
"YYY",
"Y Y",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.chestPlateSoba),
"Y Y",
"YYY",
"YYY",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.leggingsSoba),
"YYY",
"Y Y",
"Y Y",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.bootsSoba),
"Y Y",
"Y Y",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.bowSoba),
" YK",
"Y K",
" YK",
'Y', this.yudetasoba,
'K', this.kittakizi
);

}
catch (Throwable t)
{
logger.warn("Failed to get items of SobaMod.");
}
finally{}
}
}
}


SobaBow.java
package com.soba.weaponarmor;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemBow;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;

public class SobaBow extends ItemBow {

public static final String[] bowPullIconNameArray = new String[] {"pulling_0", "pulling_1", "pulling_2"};
@SideOnly(Side.CLIENT)
private IIcon[] iconArray;
private static final String __OBFID = "CL_00001777";


public SobaBow()
{
this.setCreativeTab(SobaWeaponArmor.tabSobaWeaponArmor);
}


public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
{
int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;

ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled())
{
return;
}
j = event.charge;

boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;

if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
{
float f = (float)j / 20.0F;
f = (f * f + f * 2.0F) / 3.0F;

if ((double)f < 0.1D)
{
return;
}

if (f > 1.0F)
{
f = 1.0F;
}

EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);

if (f == 1.0F)
{
entityarrow.setIsCritical(true);
}

int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);

if (k > 0)
{
entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
}

int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);

if (l > 0)
{
entityarrow.setKnockbackStrength(l);
}

if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
{
entityarrow.setFire(100);
}

p_77615_1_.damageItem(1, p_77615_3_);
p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

if (flag)
{
entityarrow.canBePickedUp = 2;
}
else
{
p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
}

if (!p_77615_2_.isRemote)
{
p_77615_2_.spawnEntityInWorld(entityarrow);
}
}
}

public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_)
{
return p_77654_1_;
}

/**
* How long it takes to use or consume an item
*/
public int getMaxItemUseDuration(ItemStack p_77626_1_)
{
return 72000;
}

/**
* returns the action that specifies what animation to play when the items is being used
*/
public EnumAction getItemUseAction(ItemStack p_77661_1_)
{
return EnumAction.bow;
}

/**
* Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
*/
public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
{
ArrowNockEvent event = new ArrowNockEvent(p_77659_3_, p_77659_1_);
MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled())
{
return event.result;
}

if (p_77659_3_.capabilities.isCreativeMode || p_77659_3_.inventory.hasItem(Items.arrow))
{
p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_));
}

return p_77659_1_;
}

/**
* Return the enchantability factor of the item, most of the time is based on material.
*/
public int getItemEnchantability()
{
return 1;
}

@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister p_94581_1_)
{
this.itemIcon = p_94581_1_.registerIcon(this.getIconString() + "_standby");
this.iconArray = new IIcon[bowPullIconNameArray.length];

for (int i = 0; i < this.iconArray.length; ++i)
{
this.iconArray[i] = p_94581_1_.registerIcon(this.getIconString() + "_" + bowPullIconNameArray[i]);
}
}

/**
* used to cycle through icons based on their used duration, i.e. for the bow
*/
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
if (usingItem == null) { return itemIcon; }
int ticksInUse = stack.getMaxItemUseDuration() - useRemaining;
if (ticksInUse > 17) {
return iconArray[2];
} else if (ticksInUse > 13) {
return iconArray[1];
} else if (ticksInUse > 0) {
return iconArray[0];
} else {
return itemIcon;
}
}


}


どなたか、ご教授願います。
マインクラフトの中で、
蕎麦職人になってみませんか?

そばMODっていうMOD、絶賛更新中です!
1.7.10です!ぜひダウンロードして下さい!
ダウンロード先
Twitterやってます!ぜひ見に来てください!
@88taishi88
アバター
たいさん
ID:95b0afe1
石掘り
 
記事: 135
登録日時: 2014年8月30日(土) 16:48
お住まい: Eclipseの中

  • (PostNo.294497)

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

投稿記事by desuroido » 2017年1月29日(日) 11:52

ポセイ丼(中盛) さんが書きました:
desuroido さんが書きました:

kabutogani2014 さんが書きました:元の質問者さんではありませんが、同じような処理を使いたいので質問させていただきます。

superを使用せずに、どのようにやるのでしょうか?
super文を public アイテム名 から削除すると、
「暗黙的スーパー・コンストラクター アイテム名 は未定義です。別のコンストラクターを明示的に呼び出す必要があります」
とエラーが出てしまいます。

どのようにすればエラーがでなくなるのでしょうか?



説明不足で申し訳ありません。onEaten内のsuperは使用しないということです。
説明のためのコードを載せておきますのでよろしければご覧ください。ちなみに、このコードは今回の条件下で最低限必要(ゲップ音処理はいらないなら消してもいいです)と思われるもののみを入れたものなので他にも要素を加えたい場合は、ItemFoodや他のクラスを見て必要なものを追加してください。
コード: 全て選択
package com.example.items;

import com.example.Main;

import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class Food_4 extends ItemFood {

   public Food_4() {

      super(1, 0.1F, false); /** <- このsuperはItemFoodを継承しているなら必要 **/
      this.setUnlocalizedName("food_4");
      this.setTextureName(Main.modID + ":food_4");
      this.setCreativeTab(CreativeTabs.tabFood);
      this.setMaxDamage(64);
   }

   public ItemStack onEaten(ItemStack itemstack, World world, EntityPlayer entityPlayer) {

      /** ここのsuperは今回の場合(耐久値を設定している)は不必要、というか入れてはいけない **/
      itemstack.damageItem(1, entityPlayer); // アイテムのダメージ値を1増やす処理(つまり耐久値を1減らす)
      entityPlayer.getFoodStats().func_151686_a(this, itemstack); // プレイヤーにこのアイテムの回復効果(満腹度、隠し満腹度)を付与する処理
      world.playSoundAtEntity(entityPlayer, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F); // ゲップ音を鳴らす処理
      return itemstack;
   }
}

回答ありがとうございます。それと返信遅くてすいません。(まったくここ見てませんでした。)

ありがとうございます。おかげで何回も食べられるようになりました。
C₁₂₈₉H₂₈N₃₄₃O₃₇₅S₈ またModdingやり始めました。
今は友達に乗り半分遊び半分で言われたSAOのModをここで共同開発しています。
Javaのこともろくに理解できないポンコツですが頑張っています。

C₂₈H₂₄N₂O₇
どうでもいいけどなんか最近漫画買いすぎてド金欠なのが最近の悩みだったりする
アバター
desuroido
ID:02add8f5
木を殴ってる
 
記事: 18
登録日時: 2015年8月05日(水) 12:50
お住まい: もう.....俺に...居場所なんて......無い.....かな...

  • (PostNo.294659)

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

投稿記事by kai mod » 2017年1月31日(火) 00:19

ブロックの面ごとに違うテクスチャを指定したはずなのに、6面同じテクスチャになり困ってます。
初心者なので殆どwikiなどから引用して書きました。
開発環境:エクリプス,forge-1.7.10-10.13.4.1614-1.7.10を使っています。
ソースコード
BlockRedSandstone.java
コード: 全て選択
package kaimod;

import java.util.Random;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;


public class BlockRedSandstone extends Block {
   public BlockRedSandstone(){
      super(Material.rock);
        setCreativeTab(CreativeTabs.tabBlock);
        setBlockName("RedSandstone");
        setBlockTextureName("kaimod:red_sandstone_top");
        setLightOpacity(255);
        setResistance(0.8F);
        setStepSound(Block.soundTypeStone);
        setHardness(0.8F);
        setHarvestLevel("shovel", 1 );
       }
   public void generateSurface(World world, Random random, int chunkX, int chunkZ) {
   }

   public void generateNether(World world, Random random, int chunkX, int chunkZ) {
   }

   static class BlockKai extends Block {

      int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0;

      Random field_149942_b = new Random();

      IIcon gor = null, dol = null, st1 = null, st2 = null, st3 = null, st4 = null;

      boolean red = false;

      protected BlockKai() {
         super(Material.ground);

      }

      public void onBlockAdded(World world, int i, int j, int k) {
         EntityPlayer entity = Minecraft.getMinecraft().thePlayer;
         if (entity != null && world != null) {
            int le = MathHelper.floor_double((double) (entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
            world.setBlockMetadataWithNotify(i, j, k, le, 2);
         }

         world.scheduleBlockUpdate(i, j, k, this, this.tickRate(world));

      }

      public int isProvidingStrongPower(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5) {
         return red ? 1 : 0;
      }

      @SideOnly(Side.CLIENT)
      @Override
      public IIcon getIcon(int i, int par2) {

         if (i == 0)
            return gor;

         else if (i == 1)
            return dol;

         else if (i == 2)
            return st1;

         else if (i == 3)
            return st2;

         else if (i == 4)
            return st4;

         else if (i == 5)
            return st3;

         else
            return gor;

      }

      @SideOnly(Side.CLIENT)
      @Override
      public void registerBlockIcons(IIconRegister reg) {
         this.gor = reg.registerIcon("kaimod:red_sandstone_top");
         this.dol = reg.registerIcon("kaimod:red_sandstone_top");
         this.st1 = reg.registerIcon("kaimod:red_sandstone_carved");
         this.st2 = reg.registerIcon("kaimod:red_sandstone_carved");
         this.st3 = reg.registerIcon("kaimod:red_sandstone_carved");
         this.st4 = reg.registerIcon("kaimod:red_sandstone_carved");
      }

      public int getRenderType() {
         return 0;
      }

      @Override
      public int tickRate(World world) {
         return 10;
      }

      public int quantityDropped(Random par1Random) {
         return 1;
      }

   }
}


Core.java
コード: 全て選択
package kaimod;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;

@Mod(modid=Core. MOD_ID, name="kaimod", version="1.0.0")

public class Core
{
   public static final String MOD_ID = "kaimod";

   public static Block rock;
   public static Block CoarseDirt;
   public static Block Sponge;
   public static Block WetSponge;
   public static Block Prismarine;
   public static Block SeaLantern;
   public static Block RedSandstone;

   @EventHandler
   public void preInit(FMLInitializationEvent event)
   {
      rock = new BlockRock();
      GameRegistry.registerBlock(rock,ItemMeteName.class, "rock");
      CoarseDirt = new BlockCoarseDirt();
      GameRegistry.registerBlock(CoarseDirt, "CoarseDirt");
      Sponge = new BlockSponge();
      GameRegistry.registerBlock(Sponge, "Sponge");
      WetSponge = new BlockWetSponge();
      GameRegistry.registerBlock(WetSponge, "WetSponge");
      SeaLantern = new BlockSeaLantern();
      GameRegistry.registerBlock(SeaLantern, "SeaLantern");
      RedSandstone = new BlockRedSandstone();
      GameRegistry.registerBlock(RedSandstone, "RedSandstone");

   }
}
kai mod
ID:2e558de4
水から上がったとこ
 
記事: 3
登録日時: 2016年5月15日(日) 12:18

  • (PostNo.294737)

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

投稿記事by ユメミノウツツ » 2017年2月01日(水) 17:35

1.7.10,forge1558で質問させていただきます。
今、特定の装備を着た場合に特定の職業を与える、という処理を作っているのですが、どうしてもバグの直し方が分かりません。
特定の装備を着た後に他の装備に切り替えた場合、その職業から開放したいのですが、試しにonUpdateで音が鳴るようにデバッグすると、装備をはずしても音が鳴り続けます。多分elseのi = 0あたりで何かミスがあるのかと思いますが、わかりません。どうかご教授お願いいたします。
以下コード
FeClassBase.class
コード: 全て選択
package femod.classbase;

import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChatComponentText;
import net.minecraft.world.World;

public class FeClassBase extends ItemArmor{

   /** マテリアルからクラス(職)名を取得する変数 */
   String Class = null;
   /** プレイヤーのクラスを返す */
   String ClassPlayer = null;
   /** デバグ */
   int i = 0;
   
   public FeClassBase(ArmorMaterial material, int armorType) {
      super(material, 0, armorType);
      Class = material.toString();
   }

   @Override
   public void onUpdate(ItemStack itemstack, World world, Entity entity, int slot, boolean isHeld){
      if (!world.isRemote) {
         if(i == 1){
              EntityPlayer player = (EntityPlayer)entity;
            world.playSoundAtEntity(player, "random.orb", 0.2F, 1.6F);
            //player.addChatMessage(new ChatComponentText(Class));
         }
      }
   }
   
   @Override
   //FeClassBaseが読み込まれている間、クラスチェックを行う
   public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack){

      ItemStack head = player.inventory.armorItemInSlot(0);
       ItemStack chest = player.inventory.armorItemInSlot(1);
       ItemStack legs = player.inventory.armorItemInSlot(2);
       ItemStack feet = player.inventory.armorItemInSlot(3);
       String a = null;
       String b = null;
       String c = null;
       String d = null;
      
       if(head != null && head.getItem() instanceof FeClassBase){
          a = Class;
          if(chest != null && chest.getItem() instanceof FeClassBase){
             b = Class;
             if(legs != null && legs.getItem() instanceof FeClassBase){
                c = Class;
                if(feet != null && feet.getItem() instanceof FeClassBase){
                   d = Class;
                   if(a == b && b == c && c == d){
                      ClassPlayer = a;
                      i = 1;
                   }else{
                      i = 0;
                      ClassPlayer = null;
                   }
                }else{
                   i = 0;
                   ClassPlayer = null;
                   d = null;
                }
             }else{
                i = 0;
                ClassPlayer = null;
                c = null;
             }
          }else{
             i = 0;
             ClassPlayer = null;
             b = null;
          }
       }else{
          i = 0;
          ClassPlayer = null;
          a = null;
       }
   }
}
Javaすら学んでなければ教えてくれる人もいない中Modding始めてみた。ファイアーエムブレムを再現するMODを作りたいけどもリリースできる気がしませんなこれは・・・。
アバター
ユメミノウツツ
ID:4f2a1565
石掘り
 
記事: 111
登録日時: 2014年3月29日(土) 20:13

  • (PostNo.294771)

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

投稿記事by elise_blacklab » 2017年2月01日(水) 22:03

ユメミノウツツ さんが書きました:試しにonUpdateで音が鳴るようにデバッグすると、装備をはずしても音が鳴り続けます

onArmorTickて装備外した瞬間に呼ばれなくなりますからねえ…その方法で監視するのであればLivingUpdateEventを使う方が良いと思われます.

kai mod さんが書きました:ブロックの面ごとに違うテクスチャを指定したはずなのに、6面同じテクスチャになり困ってます。

BlockKaiにアイコン変える処理書いてますけど,BlockKai使ってるブロックあります?
お節介かとは思いますが,クラスの継承とかその辺の概念は正しくご理解されていますかね.
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:0ee78530
掘り廃人
 
記事: 2405
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.294839)

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

投稿記事by kai mod » 2017年2月02日(木) 20:21

elise_blacklab さんが書きました:
kai mod さんが書きました:ブロックの面ごとに違うテクスチャを指定したはずなのに、6面同じテクスチャになり困ってます。

BlockKaiにアイコン変える処理書いてますけど,BlockKai使ってるブロックあります?
お節介かとは思いますが,クラスの継承とかその辺の概念は正しくご理解されていますかね.


static class BlockKai extends Blockと
protected BlockKai()
super(Material.ground);
文を消したところテクスチャがちゃんと反映しました。
javaの事については何も理解してません 勉強不足でした。
kai mod
ID:4e0112b7
水から上がったとこ
 
記事: 3
登録日時: 2016年5月15日(日) 12:18

  • (PostNo.294840)

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

投稿記事by ユメミノウツツ » 2017年2月02日(木) 20:25

elise_blacklab さんが書きました:
ユメミノウツツ さんが書きました:試しにonUpdateで音が鳴るようにデバッグすると、装備をはずしても音が鳴り続けます

onArmorTickて装備外した瞬間に呼ばれなくなりますからねえ…その方法で監視するのであればLivingUpdateEventを使う方が良いと思われます.

あ、そういえばそうだ・・・。盲点でした(バカなだけ)ありがとうございます!

追記
追記で失礼します。これってLivingUpdateEventではなくonUpdateを使っても動作するのでしょうか?上はデバッグのためなので消してしまっても構いませんし、なによりEVENT_BUSの使い方がまだよく分かっていないのでできたら既存のメソッドを利用したいな・・・と思いまして。
Javaすら学んでなければ教えてくれる人もいない中Modding始めてみた。ファイアーエムブレムを再現するMODを作りたいけどもリリースできる気がしませんなこれは・・・。
アバター
ユメミノウツツ
ID:4f2a1565
石掘り
 
記事: 111
登録日時: 2014年3月29日(土) 20:13

  • (PostNo.295670)

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

投稿記事by C6H2Cl2 » 2017年2月12日(日) 18:20

たいさん さんが書きました:弓矢の攻撃力を変える方法を教えてください

自分のMODでアドオン的なのを作っているんですが、
独自の弓を追加するとき、テクスチャ等はできたのですが
攻撃力(射撃ダメージ)の変更方法がわかりません。
ItemBow.classを変えればいいのか、EntityArrow.classを変えればいいのか・・・
ソースコードを張っておきます。
(コードがわかりにくかったり、邪魔な変数があったりします・・・)
SobaWeaponArmor.java
package com.soba.weaponarmor;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.item.ItemArmor.ArmorMaterial;
import net.minecraft.item.ItemHoe;
import net.minecraft.item.ItemSpade;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraftforge.common.util.EnumHelper;

@Mod(modid = SobaWeaponArmor.MODID, version = SobaWeaponArmor.VERSION)
public class SobaWeaponArmor
{
public static final String MODID = "SobaWeaponArmor";
public static final String VERSION = "1.0.5";

public static Logger logger = LogManager.getLogger("SobaWeaponArmor");

public static CreativeTabs tabSobaWeaponArmor = new WeArTab("WeArtab");

public static Item swordSoba;
public static Item shovelSoba;
public static Item pickaxeSoba;
public static Item axeSoba;
public static Item hoeSoba;
public static Item bowSoba;
public static Item diaSwordSoba;
public static Item diaShovelSoba;
public static Item diaPickaxeSoba;
public static Item diaAxeSoba;
public static Item diaHoeSoba;
public static Item diaBowSoba;
public static Item goldSwordSoba;
public static Item goldShovelSoba;
public static Item goldPickaxeSoba;
public static Item goldAxeSoba;
public static Item goldHoeSoba;
public static Item goldBowSoba;
public static Item ironSwordSoba;
public static Item ironShovelSoba;
public static Item ironPickaxeSoba;
public static Item ironAxeSoba;
public static Item ironHoeSoba;
public static Item ironBowSoba;
public static Item stoneSwordSoba;
public static Item stoneShovelSoba;
public static Item stonePickaxeSoba;
public static Item stoneAxeSoba;
public static Item stoneHoeSoba;
public static Item stoneBowSoba;

public static Item helmetSoba;
public static Item chestPlateSoba;
public static Item leggingsSoba;
public static Item bootsSoba;
public static Item diaHelmetSoba;
public static Item diaChestPlateSoba;
public static Item diaLeggingsSoba;
public static Item diaBootsSoba;
public static Item goldHelmetSoba;
public static Item goldChestPlateSoba;
public static Item goldLeggingsSoba;
public static Item goldBootsSoba;
public static Item ironHelmetSoba;
public static Item ironChestPlateSoba;
public static Item ironLeggingsSoba;
public static Item ironBootsSoba;
public static Item stoneHelmetSoba;
public static Item stoneChestPlateSoba;
public static Item stoneLeggingsSoba;
public static Item stoneBootsSoba;

public static Item yudetasoba;
public static Item kittakizi;

public static ToolMaterial SOBA;
public static ToolMaterial DIASOBA;
public static ToolMaterial GOLDSOBA;
public static ToolMaterial IRONSOBA;
public static ToolMaterial STONESOBA;
public static ArmorMaterial SOBAARMOR;
public static ArmorMaterial DIASOBAARMOR;
public static ArmorMaterial GOLDSOBAARMOR;
public static ArmorMaterial IRONSOBAARMOR;
public static ArmorMaterial STONESOBAARMOR;

@EventHandler
public void init(FMLInitializationEvent event)
{
SOBA = EnumHelper.addToolMaterial("SOBA", 2, 1000, 100.0F, 100.0F, 20)
.setRepairItem(new ItemStack(this.yudetasoba));
DIASOBA = EnumHelper.addToolMaterial("DIASOBA", 10, 5000, 500.0F, 500.0F, 100)
.setRepairItem(new ItemStack(this.yudetasoba));
GOLDSOBA = EnumHelper.addToolMaterial("GOLDSOBA", 8, 4000, 400.0F, 400.0F, 80)
.setRepairItem(new ItemStack(this.yudetasoba));
IRONSOBA = EnumHelper.addToolMaterial("IRONSOBA", 6, 3000, 300.0F, 300.0F, 60)
.setRepairItem(new ItemStack(this.yudetasoba));
STONESOBA = EnumHelper.addToolMaterial("STONESOBA", 4, 2000, 200.0F, 200.0F, 40)
.setRepairItem(new ItemStack(this.yudetasoba));
SOBAARMOR = EnumHelper.addArmorMaterial("SOBAARMOR", 100, new int[] { 10, 10, 10, 10 }, 100);
SOBAARMOR.customCraftingMaterial = yudetasoba;

swordSoba = new ItemSword(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("swordSoba")
.setTextureName("firstaddon:soba_sword");
GameRegistry.registerItem(swordSoba, "swordSoba");

shovelSoba = new ItemSpade(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("shovelSoba")
.setTextureName("firstaddon:soba_shovel");
GameRegistry.registerItem(shovelSoba, "shovelSoba");

pickaxeSoba = new SobaPickaxe(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("pickaxeSoba")
.setTextureName("firstaddon:soba_pickaxe");
GameRegistry.registerItem(pickaxeSoba, "pickaxeSoba");

axeSoba = new SobaAxe(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("axeSoba")
.setTextureName("firstaddon:soba_axe");
GameRegistry.registerItem(axeSoba, "axeSoba");

hoeSoba = new ItemHoe(SOBA)
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("hoeSoba")
.setTextureName("firstaddon:soba_hoe");
GameRegistry.registerItem(hoeSoba, "hoeSoba");

bowSoba = new SobaBow()
.setCreativeTab(this.tabSobaWeaponArmor)
.setUnlocalizedName("bowSoba")
.setFull3D()
.setTextureName("firstaddon:soba_bow");
GameRegistry.registerItem(bowSoba, "bowSoba");


helmetSoba = new ItemSobaArmor(0)
.setUnlocalizedName("helmetSoba")
.setTextureName("firstaddon:helmetSoba");
GameRegistry.registerItem(helmetSoba, "helmetSoba");

chestPlateSoba = new ItemSobaArmor(1)
.setUnlocalizedName("chestPlateSoba")
.setTextureName("firstaddon:chestPlateSoba");
GameRegistry.registerItem(chestPlateSoba, "chestPlateSoba");

leggingsSoba = new ItemSobaArmor(2)
.setUnlocalizedName("leggingsSoba")
.setTextureName("firstaddon:leggingsSoba");
GameRegistry.registerItem(leggingsSoba, "leggingsSoba");

bootsSoba = new ItemSobaArmor(3)
.setUnlocalizedName("bootsSoba")
.setTextureName("firstaddon:bootsSoba");
GameRegistry.registerItem(bootsSoba, "bootsSoba");
}


@EventHandler
public void postInit (FMLPostInitializationEvent event)
{
if(Loader.isModLoaded("SobaMod"))
{
try
{
this.yudetasoba = GameRegistry.findItem("SobaMod", "yudetasoba");
this.kittakizi = GameRegistry.findItem("SobaMod", "kittakizi");

GameRegistry.addRecipe(new ItemStack(this.swordSoba),
"Y",
"Y",
"S",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.shovelSoba),
"Y",
"S",
"S",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.pickaxeSoba),
"YYY",
" S ",
" S ",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.axeSoba),
"YY",
"YS",
" S",
'Y', this.yudetasoba,
'S', Items.stick
);

GameRegistry.addRecipe(new ItemStack(this.hoeSoba),
"YY",
" S",
" S",
'Y', this.yudetasoba,
'S', Items.stick
);


GameRegistry.addRecipe(new ItemStack(this.helmetSoba),
"YYY",
"Y Y",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.chestPlateSoba),
"Y Y",
"YYY",
"YYY",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.leggingsSoba),
"YYY",
"Y Y",
"Y Y",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.bootsSoba),
"Y Y",
"Y Y",
'Y', this.yudetasoba
);

GameRegistry.addRecipe(new ItemStack(this.bowSoba),
" YK",
"Y K",
" YK",
'Y', this.yudetasoba,
'K', this.kittakizi
);

}
catch (Throwable t)
{
logger.warn("Failed to get items of SobaMod.");
}
finally{}
}
}
}


SobaBow.java
package com.soba.weaponarmor;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.EnumAction;
import net.minecraft.item.ItemBow;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.player.ArrowLooseEvent;
import net.minecraftforge.event.entity.player.ArrowNockEvent;

public class SobaBow extends ItemBow {

public static final String[] bowPullIconNameArray = new String[] {"pulling_0", "pulling_1", "pulling_2"};
@SideOnly(Side.CLIENT)
private IIcon[] iconArray;
private static final String __OBFID = "CL_00001777";


public SobaBow()
{
this.setCreativeTab(SobaWeaponArmor.tabSobaWeaponArmor);
}


public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
{
int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;

ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled())
{
return;
}
j = event.charge;

boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;

if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
{
float f = (float)j / 20.0F;
f = (f * f + f * 2.0F) / 3.0F;

if ((double)f < 0.1D)
{
return;
}

if (f > 1.0F)
{
f = 1.0F;
}

EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);

if (f == 1.0F)
{
entityarrow.setIsCritical(true);
}

int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);

if (k > 0)
{
entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
}

int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);

if (l > 0)
{
entityarrow.setKnockbackStrength(l);
}

if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
{
entityarrow.setFire(100);
}

p_77615_1_.damageItem(1, p_77615_3_);
p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);

if (flag)
{
entityarrow.canBePickedUp = 2;
}
else
{
p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
}

if (!p_77615_2_.isRemote)
{
p_77615_2_.spawnEntityInWorld(entityarrow);
}
}
}

public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_)
{
return p_77654_1_;
}

/**
* How long it takes to use or consume an item
*/
public int getMaxItemUseDuration(ItemStack p_77626_1_)
{
return 72000;
}

/**
* returns the action that specifies what animation to play when the items is being used
*/
public EnumAction getItemUseAction(ItemStack p_77661_1_)
{
return EnumAction.bow;
}

/**
* Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer
*/
public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
{
ArrowNockEvent event = new ArrowNockEvent(p_77659_3_, p_77659_1_);
MinecraftForge.EVENT_BUS.post(event);
if (event.isCanceled())
{
return event.result;
}

if (p_77659_3_.capabilities.isCreativeMode || p_77659_3_.inventory.hasItem(Items.arrow))
{
p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_));
}

return p_77659_1_;
}

/**
* Return the enchantability factor of the item, most of the time is based on material.
*/
public int getItemEnchantability()
{
return 1;
}

@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister p_94581_1_)
{
this.itemIcon = p_94581_1_.registerIcon(this.getIconString() + "_standby");
this.iconArray = new IIcon[bowPullIconNameArray.length];

for (int i = 0; i < this.iconArray.length; ++i)
{
this.iconArray[i] = p_94581_1_.registerIcon(this.getIconString() + "_" + bowPullIconNameArray[i]);
}
}

/**
* used to cycle through icons based on their used duration, i.e. for the bow
*/
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) {
if (usingItem == null) { return itemIcon; }
int ticksInUse = stack.getMaxItemUseDuration() - useRemaining;
if (ticksInUse > 17) {
return iconArray[2];
} else if (ticksInUse > 13) {
return iconArray[1];
} else if (ticksInUse > 0) {
return iconArray[0];
} else {
return itemIcon;
}
}


}


どなたか、ご教授願います。


ItemBowにおける、EntityArrowを作成するときにパラメーター指定を行います。
サンプル(別言語)
EntityArrowのコンストラクタEntityArrow(world, player, f * 2f)の、最後のf * 2fの部分が矢の速度設定で、entityArrow.damageが矢のダメージです
CurseForgeという海外サイトで、modをいくつか公開しています。
祝・ReinforcedTools10万DL突破!
連絡や、更新予定の確認などは、Twitter@PDB_Yukariへ。
Twitterなんかではパラジって名前でやってます。
結月ゆかりはいいぞ
最近、Kotlinという言語にハマってる。
アバター
C6H2Cl2
ID:5dd024a4
石掘り
 
記事: 128
登録日時: 2015年9月03日(木) 11:23
お住まい: 鹿県鹿市付近

  • (PostNo.296421)

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

投稿記事by ゲスト » 2017年2月21日(火) 23:14

見つけられなかったので質問させていただきます
ドロップ状態の重なったアイテムはおそらくはEntityItemだと思うのですが、そこにどれくらいのアイテム量が存在しているのかを取得することは可能でしょうか?

開発環境は
Minecraft 1.7.10
MinecraftFroge 10.13.4.1558
となります
ゲスト
ID:00727983
 

  • (PostNo.296428)

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

投稿記事by defeatedcrow » 2017年2月22日(水) 00:39

ゲスト さんが書きました:見つけられなかったので質問させていただきます
ドロップ状態の重なったアイテムはおそらくはEntityItemだと思うのですが、そこにどれくらいのアイテム量が存在しているのかを取得することは可能でしょうか?

開発環境は
Minecraft 1.7.10
MinecraftFroge 10.13.4.1558
となります


EntityItemの.getEntityItem()メソッドからItemStackが取れるので、そこからstacksizeを取得できます。
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:0070553b
ラピスラズリ収集家
 
記事: 917
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.296429)

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

投稿記事by ゲスト » 2017年2月22日(水) 01:05

EntityItemのスタック量について質問したものです
getEntityItem()からItemStackが取れたんですね、見落としていました
defeatedcrow様回答ありがとうございました
ゲスト
ID:00727983
 

  • (PostNo.297672)

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

投稿記事by Silvers_Cat » 2017年3月10日(金) 01:06

こんにちは。数時間いろんなこと(ファイル作り直したりクラス名変更したり)を試しましたが、結局原因不明なので質問します。

何故かクラスが存在するのにClassNotFoundExceptionで落ちているみたいです。
クラッシュレポート
コード: 全て選択
---- Minecraft Crash Report ----
// Everything's going to plan. No, really, that was supposed to happen.

Time: 17/03/10 0:58
Description: There was a severe problem during mod loading that has caused the game to fail

cpw.mods.fml.common.LoaderException: java.lang.ClassNotFoundException: com.github.silverscat.beastindustrialcraft.BeastIndustrialCraft

   at cpw.mods.fml.common.LoadController.transition(LoadController.java:163)

   at cpw.mods.fml.common.Loader.loadMods(Loader.java:544)

   at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:208)

   at net.minecraft.client.Minecraft.startGame(Minecraft.java:522)

   at net.minecraft.client.Minecraft.run(Minecraft.java:942)

   at net.minecraft.client.main.Main.main(Main.java:164)

   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

   at java.lang.reflect.Method.invoke(Unknown Source)

   at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)

   at net.minecraft.launchwrapper.Launch.main(Launch.java:28)

   at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)

   at GradleStart.main(Unknown Source)

Caused by: java.lang.ClassNotFoundException: com.github.silverscat.beastindustrialcraft.BeastIndustrialCraft

   at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191)

   at java.lang.ClassLoader.loadClass(Unknown Source)

   at java.lang.ClassLoader.loadClass(Unknown Source)

   at cpw.mods.fml.common.ModClassLoader.loadClass(ModClassLoader.java:58)

   at java.lang.Class.forName0(Native Method)

   at java.lang.Class.forName(Unknown Source)

   at cpw.mods.fml.common.FMLModContainer.constructMod(FMLModContainer.java:440)

   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

   at java.lang.reflect.Method.invoke(Unknown Source)

   at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)

   at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)

   at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)

   at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)

   at com.google.common.eventbus.EventBus.post(EventBus.java:275)

   at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)

   at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)

   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

   at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

   at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

   at java.lang.reflect.Method.invoke(Unknown Source)

   at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)

   at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)

   at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)

   at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)

   at com.google.common.eventbus.EventBus.post(EventBus.java:275)

   at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)

   at cpw.mods.fml.common.Loader.loadMods(Loader.java:513)

   ... 12 more

Caused by: java.lang.UnsupportedClassVersionError: com/github/silverscat/beastindustrialcraft/BeastIndustrialCraft : Unsupported major.minor version 52.0

   at java.lang.ClassLoader.defineClass1(Native Method)

   at java.lang.ClassLoader.defineClass(Unknown Source)

   at java.security.SecureClassLoader.defineClass(Unknown Source)

   at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:182)

   ... 40 more



A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
   Minecraft Version: 1.7.10
   Operating System: Windows 8.1 (amd64) version 6.3
   Java Version: 1.7.0_80, Oracle Corporation
   Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
   Memory: 208974768 bytes (199 MB) / 360710144 bytes (344 MB) up to 1882718208 bytes (1795 MB)
   JVM Flags: 0 total;
   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.1558 4 mods loaded, 4 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.1558-1.7.10.jar)
   UC   Forge{10.13.4.1558} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar)
   UE   beastindustrialcraft{Pre-alpha 1.0.0.0} [beastindustrialcraft] (bin)
   GL info: ' Vendor: 'Intel' Version: '3.1.0 - Build 9.17.10.4459' Renderer: 'Intel(R) HD Graphics 3000'

BeastIndustrialCraft.java
コード: 全て選択
package com.github.silverscat.beastindustrialcraft;


import com.github.silverscat.beastindustrialcraft.item.Items;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;

@Mod(modid=BeastIndustrialCraft.MOD_ID, version =BeastIndustrialCraft.MOD_VER)
public class BeastIndustrialCraft {

   //MODID
   public static final String MOD_ID        = "beastindustrialcraft";

   //バージョン
   public static final String MOD_VER      = "Pre-alpha 1.0.0.0";

   //アイテムのインスタンス
   private static final Items items       = new Items();

   /*
    * 初期化前処理
    *
    * 主にアイテムの登録など、初期化前にやっておきたい処理を行う。
    */
   @EventHandler
   public void preInit(FMLPreInitializationEvent event) {

      //アイテムを登録
      items.registerItems();

   }

   /*
    * 初期化処理
    *
    * 他Modとの連携、設定ファイルロードなどの初期化処理を行う。
    */
   @EventHandler
   public void init(FMLInitializationEvent event) {

   }

}
アバター
Silvers_Cat
ID:ef413e77
石掘り
 
記事: 127
登録日時: 2015年3月29日(日) 12:22
お住まい: Microsoft Windows 10 Pro

  • (PostNo.297673)

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

投稿記事by elise_blacklab » 2017年3月10日(金) 01:46

Silvers_Cat さんが書きました:こんにちは。数時間いろんなこと(ファイル作り直したりクラス名変更したり)を試しましたが、結局原因不明なので質問します。

何故かクラスが存在するのにClassNotFoundExceptionで落ちているみたいです。

Caused byをたどっていきましょう.下の方に直接的な原因があります.
コード: 全て選択
Caused by: java.lang.UnsupportedClassVersionError: com/github/silverscat/beastindustrialcraft/BeastIndustrialCraft : Unsupported major.minor version 52.0

Java8をターゲットにしたライブラリをJava7で読み込もうとしているのでエラーが出ています.
ビルド時と実行時のJDK指定が食い違っていたりしませんか?eclipseの実行構成でコンパイルとは違うJDKを指定していたりとか…
メイドつくってたりします.http://el-blacklab.net/
アバター
elise_blacklab
ID:93b83ab1
掘り廃人
 
記事: 2405
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.297687)

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

投稿記事by Silvers_Cat » 2017年3月10日(金) 11:58

elise_blacklab さんが書きました:Caused byをたどっていきましょう.下の方に直接的な原因があります.
コード: 全て選択
Caused by: java.lang.UnsupportedClassVersionError: com/github/silverscat/beastindustrialcraft/BeastIndustrialCraft : Unsupported major.minor version 52.0

Java8をターゲットにしたライブラリをJava7で読み込もうとしているのでエラーが出ています.
ビルド時と実行時のJDK指定が食い違っていたりしませんか?eclipseの実行構成でコンパイルとは違うJDKを指定していたりとか…


ありがとうございます。どうやらプロジェクト固有のJDK準拠レベルが1.8やら1.6やらに設定されてたみたいです。すべてのJDK準拠レベルを1.7に設定したら起動しました。
アバター
Silvers_Cat
ID:ef413e77
石掘り
 
記事: 127
登録日時: 2015年3月29日(日) 12:22
お住まい: Microsoft Windows 10 Pro

  • (PostNo.298175)

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

投稿記事by Silvers_Cat » 2017年3月16日(木) 16:34

立て続けにすみません。NameWakanderのように.minecraft配下にファイル群を入出力するためにはどうすればいいでしょうか?

Forgeのバージョンは1.7.10-10.13.4.1558です。
アバター
Silvers_Cat
ID:ef413e77
石掘り
 
記事: 127
登録日時: 2015年3月29日(日) 12:22
お住まい: Microsoft Windows 10 Pro

  • (PostNo.298201)

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

投稿記事by たいさん » 2017年3月16日(木) 20:37

C6H2Cl2 さんが書きました:ItemBowにおける、EntityArrowを作成するときにパラメーター指定を行います。
サンプル(別言語)
EntityArrowのコンストラクタEntityArrow(world, player, f * 2f)の、最後のf * 2fの部分が矢の速度設定で、entityArrow.damageが矢のダメージです

ご教授 ありがとうございました
いろいろ試した結果、おかげさまで成功しました!(チート級弓の完成)
本当にありがとうございました
マインクラフトの中で、
蕎麦職人になってみませんか?

そばMODっていうMOD、絶賛更新中です!
1.7.10です!ぜひダウンロードして下さい!
ダウンロード先
Twitterやってます!ぜひ見に来てください!
@88taishi88
アバター
たいさん
ID:95b0afe1
石掘り
 
記事: 135
登録日時: 2014年8月30日(土) 16:48
お住まい: Eclipseの中

  • (PostNo.298279)

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

投稿記事by zyando123 » 2017年3月17日(金) 19:06

Silvers_Cat さんが書きました:立て続けにすみません。NameWakanderのように.minecraft配下にファイル群を入出力するためにはどうすればいいでしょうか?

Forgeのバージョンは1.7.10-10.13.4.1558です。


System.getProperty("user.dir")でカレントディレクトリ(modsとかsaveとか入ってるディレクトリ)のパスを取得してファイルを生成するといった感じですかね
ろくな事を呟かないTwitterアカウント→@zyando79
アバター
zyando123
ID:c7117ea2
石掘り
 
記事: 92
登録日時: 2016年8月29日(月) 13:28

  • (PostNo.298286)

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

投稿記事by Silvers_Cat » 2017年3月17日(金) 20:39

zyando123 さんが書きました:System.getProperty("user.dir")でカレントディレクトリ(modsとかsaveとか入ってるディレクトリ)のパスを取得してファイルを生成するといった感じですかね


ありがとうございます。出来ました。
アバター
Silvers_Cat
ID:ef413e77
石掘り
 
記事: 127
登録日時: 2015年3月29日(日) 12:22
お住まい: Microsoft Windows 10 Pro

  • (PostNo.298321)

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

投稿記事by sorasuke » 2017年3月18日(土) 10:46

Forge1.10.2-12.18.3.2254にて、TileEntityのインベントリからホッパーで取り出せるアイテムを制限するようにするためISidedInventoryを継承し
canExtractItem(int, ItemStack, EnumFacing)を実装したのですが、trueを入れてもfalseを入れてもホッパーからアイテムが取り出せる状態になっています
バニラソースや他のMOD等のソースを見たところこのメソッドは普通に使われているのですが自分のやつだけはcanExtractItemが無視されているみたいです
どうにかcanExtractItemで、取り出せるアイテムを制限することはできませんか?
ソース
動画とかModdingとかやってます
自作MODMoreMaterialsAndUtilities
Youtubeチャンネルsora_sukeのチャンネル
ホームページソラスケのインデックス
Twitter@sora_suke_mc
アバター
sorasuke
ID:746d41ac
鉄鉱掘り
 
記事: 269
登録日時: 2013年7月20日(土) 15:35
お住まい: どこか

  • (PostNo.298334)

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

投稿記事by CrafterKina » 2017年3月18日(土) 12:41

sorasuke さんが書きました:Forge1.10.2-12.18.3.2254にて、TileEntityのインベントリからホッパーで取り出せるアイテムを制限するようにするためISidedInventoryを継承し
canExtractItem(int, ItemStack, EnumFacing)を実装したのですが、trueを入れてもfalseを入れてもホッパーからアイテムが取り出せる状態になっています
バニラソースや他のMOD等のソースを見たところこのメソッドは普通に使われているのですが自分のやつだけはcanExtractItemが無視されているみたいです
どうにかcanExtractItemで、取り出せるアイテムを制限することはできませんか?
ソース

getCapabilityをTileEntityFurnaceを参考に実装してください。
あるいは、hasCapabilityを潰してください。
ただし、hasCapabilityを潰すと他のModとの連携は困難になるでしょう。
TileEntityFurnaceを参考にすればいけるかとは思いますが、一応参考用リンクを置いときます。
アバター
CrafterKina
ID:10ad58cf
石炭掘り
 
記事: 190
登録日時: 2013年4月06日(土) 14:42
お住まい: 廃坑

1つ前へ次へ

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

x