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

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

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

投稿記事by ☭Destroy//Accuracy☭ » 2016年10月28日(金) 17:30

desuroido さんが書きました:それとどうすればポーション効果を複数つけれるのでしょうか。
金リンゴのクラスを覗きましたがよく理解できなかったです。

回答よろしくお願いします。


食料にポーションの効果を付与するときは setPotionEffect を使用することで可能かと思われます。
和風はお好き?
  • 1.7.10永住民です。1.8? 1.9? 1.10? 知らんな。
  • 趣味の範囲でModの開発を手がけています。過去VerのModのサルベージ希望とかを見かけたら規約に違反しない範囲で配布するかも。
  • テクスチャ書くの上手い人って羨ましいですよね。上手になりたい。
アバター
☭Destroy//Accuracy☭
ID:53c5c913
石掘り
 
記事: 78
登録日時: 2015年11月03日(火) 08:46
お住まい: 京の町

  • (PostNo.286566)

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

投稿記事by desuroido » 2016年10月28日(金) 21:57

☭Destroy//Accuracy☭ さんが書きました:食料にポーションの効果を付与するときは setPotionEffect を使用することで可能かと思われます。


回答ありがとうございます。

それはすでに試したのですが、複数書き込んでも、2つ以上エフェクトがかけられないです。
2つ以上エフェクトをかけるにはどうすればいいでしょうか。

回答よろしくお願いします。
C₁₂₈₉H₂₈N₃₄₃O₃₇₅S₈ 出直しまする

C₂₈H₂₄N₂O₇
お友にフィギュア贈ったらめっちゃ喜んでた
desuroido
ID:02add8f5
木を殴ってる
 
記事: 17
登録日時: 2015年8月05日(水) 12:50
お住まい: もう.....俺に...居場所なんて......無い.....かな...

  • (PostNo.286567)

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

投稿記事by elise_blacklab » 2016年10月28日(金) 22:21

desuroido さんが書きました:それはすでに試したのですが、複数書き込んでも、2つ以上エフェクトがかけられないです。
2つ以上エフェクトをかけるにはどうすればいいでしょうか。

回答よろしくお願いします。

setPotionEffectでは1種類しかPotionEffectを保持できないので,複数付与したい場合はItemFood.onFoodEaten(ItemStack, World, EntityPlayer)をOverrideしてEntityPlayer.addPotionEffect(PotionEffect)を使用すると良いでしょう.(バニラのItemFood.onFoodEaten()の記述を真似ると良いです)
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:72e9fe99
掘り廃人
 
記事: 2552
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.286617)

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

投稿記事by desuroido » 2016年10月29日(土) 18:03

elise_blacklab さんが書きました:setPotionEffectでは1種類しかPotionEffectを保持できないので,複数付与したい場合はItemFood.onFoodEaten(ItemStack, World, EntityPlayer)をOverrideしてEntityPlayer.addPotionEffect(PotionEffect)を使用すると良いでしょう.(バニラのItemFood.onFoodEaten()の記述を真似ると良いです)


回答ありがとうごさいます。

おかげでエフェクトを複数つけることに成功したのですが。
なぜかエフェクトのタイマーが早く流れてしまいます。(現実の一秒でタイマーは2~3秒等)
あとそのエフェクトがつく食べ物を一度食べるとゲームを終了し再度起動するまで食べてもエフェクトがつきません。

どうしたらタイマーを正常にできるでしょうか。
また何度食べてもエフェクトをかけられるでしょうか。

回答よろしくお願いします。

以下中濃ソースです。
件の食べ物
コード: 全て選択
package net.minecraft.CheapestFood;

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

public class ItemSuperHigh extends ItemFood {

   public final int itemUseDuration;

   int IDmoveSpeed = Potion.moveSpeed.id;

   int IDdamageBoost = Potion.damageBoost.id;

   int IDjump = Potion.jump.id;

   int IDconfusion = Potion.confusion.id;

   int duration = 120 * 20;

   PotionEffect moveSpeed = new PotionEffect(IDmoveSpeed, duration, 2);

   PotionEffect damageBoost = new PotionEffect(IDdamageBoost, duration, 1);

   PotionEffect jump = new PotionEffect(IDjump, duration, 1);

   PotionEffect confusion = new PotionEffect(IDconfusion, 600, 0);

   public ItemSuperHigh(int par1, int par2, boolean par3) {
        super(par1, par2, par3);

        this.itemUseDuration = 10;
        this.setCreativeTab(CreativeTabs.tabFood);
        this.setUnlocalizedName("SuperHigh");
        this.setTextureName("cheapestfood:SuperHigh");
        this.setMaxStackSize(64);

   }

      public int getMaxItemUseDuration(ItemStack p_77626_1_)
        {
            return 1;
        }

       public void onFoodEaten(ItemStack itemstack, World world, EntityPlayer player){

         player.addPotionEffect(moveSpeed);
         player.addPotionEffect(damageBoost);
         player.addPotionEffect(jump);
         player.addPotionEffect(confusion);
       }

}
C₁₂₈₉H₂₈N₃₄₃O₃₇₅S₈ 出直しまする

C₂₈H₂₄N₂O₇
お友にフィギュア贈ったらめっちゃ喜んでた
desuroido
ID:02add8f5
木を殴ってる
 
記事: 17
登録日時: 2015年8月05日(水) 12:50
お住まい: もう.....俺に...居場所なんて......無い.....かな...

  • (PostNo.286685)

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

投稿記事by desuroido » 2016年10月30日(日) 17:34

desuroido さんが書きました:エフェクトを複数つけることに成功したのですが。
なぜかエフェクトのタイマーが早く流れてしまいます。(現実の一秒でタイマーは2~3秒等)
あとそのエフェクトがつく食べ物を一度食べるとゲームを終了し再度起動するまで食べてもエフェクトがつきません。

どうしたらタイマーを正常にできるでしょうか。
また何度食べてもエフェクトをかけられるでしょうか。

回答よろしくお願いします。

以下中濃ソースです。
件の食べ物
コード: 全て選択
package net.minecraft.CheapestFood;

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

public class ItemSuperHigh extends ItemFood {

   public final int itemUseDuration;

   int IDmoveSpeed = Potion.moveSpeed.id;

   int IDdamageBoost = Potion.damageBoost.id;

   int IDjump = Potion.jump.id;

   int IDconfusion = Potion.confusion.id;

   int duration = 120 * 20;

   PotionEffect moveSpeed = new PotionEffect(IDmoveSpeed, duration, 2);

   PotionEffect damageBoost = new PotionEffect(IDdamageBoost, duration, 1);

   PotionEffect jump = new PotionEffect(IDjump, duration, 1);

   PotionEffect confusion = new PotionEffect(IDconfusion, 600, 0);

   public ItemSuperHigh(int par1, int par2, boolean par3) {
        super(par1, par2, par3);

        this.itemUseDuration = 10;
        this.setCreativeTab(CreativeTabs.tabFood);
        this.setUnlocalizedName("SuperHigh");
        this.setTextureName("cheapestfood:SuperHigh");
        this.setMaxStackSize(64);

   }

      public int getMaxItemUseDuration(ItemStack p_77626_1_)
        {
            return 1;
        }

       public void onFoodEaten(ItemStack itemstack, World world, EntityPlayer player){

         player.addPotionEffect(moveSpeed);
         player.addPotionEffect(damageBoost);
         player.addPotionEffect(jump);
         player.addPotionEffect(confusion);
       }

}


自己解決しました。

宣言(?)のとこを移動させたらうまくいきました。

以下お好み焼き用ソースです。
こちらが完成品となります。
コード: 全て選択
package net.minecraft.CheapestFood;

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

public class ItemSuperHigh extends ItemFood {

   public final int itemUseDuration;

   public ItemSuperHigh(int par1, int par2, boolean par3) {
        super(par1, par2, par3);

        this.itemUseDuration = 10;
        this.setCreativeTab(CreativeTabs.tabFood);
        this.setUnlocalizedName("SuperHigh");
        this.setTextureName("cheapestfood:SuperHigh");
        this.setMaxStackSize(64);

   }

   public int getMaxItemUseDuration(ItemStack p_77626_1_)
    {
        return 1;
    }

       public void onFoodEaten(ItemStack itemstack, World world, EntityPlayer player){

          PotionEffect MoveSpeed = new PotionEffect(1, 120 * 20, 2);

          PotionEffect DamageBoost = new PotionEffect(5, 120 * 20, 1);

          PotionEffect JumpBoost = new PotionEffect(8, 120 * 20, 1);

          PotionEffect Nausea = new PotionEffect(9, 600, 0);

          PotionEffect Resistance = new PotionEffect(11, 120 * 20, -2);

         player.addPotionEffect(MoveSpeed);
         player.addPotionEffect(DamageBoost);
         player.addPotionEffect(JumpBoost);
         player.addPotionEffect(Nausea);
         player.addPotionEffect(Resistance);
       }

}
C₁₂₈₉H₂₈N₃₄₃O₃₇₅S₈ 出直しまする

C₂₈H₂₄N₂O₇
お友にフィギュア贈ったらめっちゃ喜んでた
desuroido
ID:02add8f5
木を殴ってる
 
記事: 17
登録日時: 2015年8月05日(水) 12:50
お住まい: もう.....俺に...居場所なんて......無い.....かな...

  • (PostNo.287623)

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

投稿記事by ヘタレクラフター » 2016年11月12日(土) 18:13

Mcreator1.6.3(1.7.10用)にてMOD作成をしているのですが、ガラスブロックが透過ブロックになりません。
画像のように、接触面のテクスチャが消えて透視ブロックになってしまいます。
「素材:ガラス」でテクスチャは縁と模様以外の部分は透過のPNG、「has alpha」にチェックを入れてあります。

他になにか設定をする所があるのでしょうか?
添付ファイル
888888.png
ヘタレクラフター
ID:ee2a38cf
 

  • (PostNo.287665)

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

投稿記事by ☭Destroy//Accuracy☭ » 2016年11月13日(日) 11:50

ワールドに木を自然生成させたいのですが、ワールドの生成をするとエラーが出て、Minecraftがクラッシュしてしまいます。
どの部分が間違っているのか、どう直せばいいのか教えていただけると嬉しいです。
(直接苗木を植えて、骨粉で育てることは可能です。)

環境: 1.7.10 / Forge-#1558 / Eclipse 4.6

参考にさせていただいたサイト: MinecraftForge Forum / TNT Modders

ソースコード
WorldGenMacchaTrees
コード: 全て選択
package destroy.maccha.world;

import java.util.Random;

import destroy.maccha.init.BlockRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSapling;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.util.Direction;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenAbstractTree;
import net.minecraftforge.common.util.ForgeDirection;

public class WorldGenMacchaTrees extends WorldGenAbstractTree {

   private final int minTreeHeight;
   private final boolean vinesGrow;
   private final int metaWood;
   private final int metaLeaves;

   public WorldGenMacchaTrees(boolean doBlockNotify) {
      this(doBlockNotify, 4, 0, 0, false);
   }

   public WorldGenMacchaTrees(boolean doBlockNotify, int minTreeHeight, int metaWood, int metaLeaves, boolean vinesGrow) {
      super(doBlockNotify);
      this.minTreeHeight = minTreeHeight;
      this.metaWood = metaWood;
      this.metaLeaves = metaLeaves;
      this.vinesGrow = vinesGrow;
   }

   @Override
   public boolean generate(World world, Random random, int x, int y, int z) {
      int l = random.nextInt(3) + minTreeHeight;

      if (y < 1 || y + l + 1 > 256)
         return false;
      byte b0;
      int k1;
      Block block;

      for (int iy = y; iy <= y + 1 + l; ++iy) {
         b0 = 1;

         if (iy == y) {
            b0 = 0;
         }

         if (iy >= y + 1 + l - 2) {
            b0 = 2;
         }

         for (int ix = x - b0; ix <= x + b0; ++ix) {
            for (int iz = z - b0; iz <= z + b0; ++iz) {
               if (iy < 0 || iy >= 256)
                  return false;
               block = world.getBlock(ix, iy, iz);
               if (!this.isReplaceable(world, ix, iy, iz))
                  return false;
            }
         }
      }

      Block block2 = world.getBlock(x, y - 1, z);

      boolean isSoil = block2.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, (BlockSapling) BlockRegistry.saplingMaccha);
      if (!isSoil || y >= 256 - l - 1)
         return false;
      block2.onPlantGrow(world, x, y - 1, z, x, y, z);
      b0 = 3;
      byte b1 = 0;
      int l1;
      int i2;
      int j2;
      int i3;

      for (k1 = y - b0 + l; k1 <= y + l; ++k1) {
         i3 = k1 - (y + l);
         l1 = b1 + 1 - i3 / 2;

         for (i2 = x - l1; i2 <= x + l1; ++i2) {
            j2 = i2 - x;

            for (int k2 = z - l1; k2 <= z + l1; ++k2) {
               int l2 = k2 - z;

               if (Math.abs(j2) != l1 || Math.abs(l2) != l1 || random.nextInt(2) != 0 && i3 != 0) {
                  Block block1 = world.getBlock(i2, k1, k2);

                  if (block1.isAir(world, i2, k1, k2) || block1.isLeaves(world, i2, k1, k2)) {
                     this.setBlockAndNotifyAdequately(world, i2, k1, k2, BlockRegistry.leavesMaccha, metaLeaves);
                  }
               }
            }
         }
      }

      for (k1 = 0; k1 < l; ++k1) {
         block = world.getBlock(x, y + k1, z);

         if (block.isAir(world, x, y + k1, z) || block.isLeaves(world, x, y + k1, z)) {
            setBlockAndNotifyAdequately(world, x, y + k1, z, BlockRegistry.logMaccha, metaWood);

            if (vinesGrow && k1 > 0) {
               if (random.nextInt(3) > 0 && world.isAirBlock(x - 1, y + k1, z)) {
                  this.setBlockAndNotifyAdequately(world, x - 1, y + k1, z, Blocks.vine, 8);
               }

               if (random.nextInt(3) > 0 && world.isAirBlock(x + 1, y + k1, z)) {
                  this.setBlockAndNotifyAdequately(world, x + 1, y + k1, z, Blocks.vine, 2);
               }

               if (random.nextInt(3) > 0 && world.isAirBlock(x, y + k1, z - 1)) {
                  this.setBlockAndNotifyAdequately(world, x, y + k1, z - 1, Blocks.vine, 1);
               }

               if (random.nextInt(3) > 0 && world.isAirBlock(x, y + k1, z + 1)) {
                  this.setBlockAndNotifyAdequately(world, x, y + k1, z + 1, Blocks.vine, 4);
               }
            }
         }
      }

      if (vinesGrow) {
         for (k1 = y - 3 + l; k1 <= y + l; ++k1) {
            i3 = k1 - (y + l);
            l1 = 2 - i3 / 2;

            for (i2 = x - l1; i2 <= x + l1; ++i2) {
               for (j2 = z - l1; j2 <= z + l1; ++j2) {
                  if (world.getBlock(i2, k1, j2).isLeaves(world, i2, k1, j2)) {
                     if (random.nextInt(4) == 0 && world.getBlock(i2 - 1, k1, j2).isAir(world, i2 - 1, k1, j2)) {
                        this.growVines(world, i2 - 1, k1, j2, 8);
                     }

                     if (random.nextInt(4) == 0 && world.getBlock(i2 + 1, k1, j2).isAir(world, i2 + 1, k1, j2)) {
                        this.growVines(world, i2 + 1, k1, j2, 2);
                     }

                     if (random.nextInt(4) == 0 && world.getBlock(i2, k1, j2 - 1).isAir(world, i2, k1, j2 - 1)) {
                        this.growVines(world, i2, k1, j2 - 1, 1);
                     }

                     if (random.nextInt(4) == 0 && world.getBlock(i2, k1, j2 + 1).isAir(world, i2, k1, j2 + 1)) {
                        this.growVines(world, i2, k1, j2 + 1, 4);
                     }
                  }
               }
            }
         }

         if (random.nextInt(5) == 0 && l > 5) {
            for (k1 = 0; k1 < 2; ++k1) {
               for (i3 = 0; i3 < 4; ++i3) {
                  if (random.nextInt(4 - k1) == 0) {
                     l1 = random.nextInt(3);
                     this.setBlockAndNotifyAdequately(world, x + Direction.offsetX[Direction.rotateOpposite[i3]], y + l - 5 + k1, z + Direction.offsetZ[Direction.rotateOpposite[i3]], Blocks.cocoa, l1 << 2 | i3);
                  }
               }
            }
         }
      }

      return true;
   }

   @Override
   protected boolean isReplaceable(World world, int x, int y, int z) {
      Block block = world.getBlock(x, y, z);
      return block.isAir(world, x, y, z) || block.isLeaves(world, x, y, z) || block.isWood(world, x, y, z) || this.func_150523_a(block);
   }

   @Override
   protected boolean func_150523_a(Block block) {
      return block.getMaterial() == Material.air || block.getMaterial() == Material.leaves || block == Blocks.grass || block == Blocks.dirt || block == Blocks.log || block == Blocks.log2 || block == Blocks.sapling || block == Blocks.vine;
   }

   private void growVines(World world, int x, int y, int z, int length) {
      this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length);
      int i1 = 4;

      while (true) {
         --y;

         if (!world.getBlock(x, y, z).isAir(world, x, y, z) || i1 <= 0) {
            return;
         }

         this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length);
         --i1;
      }
   }

}

Generator
コード: 全て選択
package destroy.maccha.world;

import java.util.Random;

import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.WorldChunkManager;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeDictionary.Type;

public class Generator implements IWorldGenerator {

   @Override
   public void generate(Random random, int chunkX , int chunkZ, World world, IChunkProvider chunkGenerator,
         IChunkProvider chunkProvider) {
      WorldChunkManager manager = world.getWorldChunkManager();

      if(manager != null) {
         BiomeGenBase biome = manager.getBiomeGenAt(chunkX * 16, chunkZ * 16);
         if(!BiomeDictionary.isBiomeOfType(biome, Type.MOUNTAIN) && !BiomeDictionary.isBiomeOfType(biome, Type.FOREST)) {
         }else if(!BiomeDictionary.isBiomeOfType(biome, Type.SNOWY)) {
            switch(random.nextInt(4)) {
            case 0:
               this.generateMaccha(world, random, chunkX, chunkZ, 60);
            }
         }
      }
   }

   private void generateMaccha(World world, Random random, int chunkX, int chunkZ, int maxHeight) {
      for(int i = 0; i < 15; i++) // 15 is rarity
      {
          int randPosX=chunkX + random.nextInt(16);
          int randPosY=random.nextInt(250); //Max Y coordinate
          int randPosZ=chunkZ + random.nextInt(16);
          (new WorldGenMacchaTrees(false)).generate(world, random, randPosX, randPosY, randPosZ);
      }
   }

}


クラッシュレポート
CrashReport
コード: 全て選択
---- Minecraft Crash Report ----
// This doesn't make any sense!

Time: 16/11/13 11:43
Description: Exception in server tick loop

java.lang.NullPointerException: Exception in server tick loop
   at net.minecraft.block.Block.canSustainPlant(Block.java:2237)
   at destroy.maccha.world.WorldGenMacchaTrees.generate(WorldGenMacchaTrees.java:68)
   at destroy.maccha.world.Generator.generateMaccha(Generator.java:38)
   at destroy.maccha.world.Generator.generate(Generator.java:26)
   at cpw.mods.fml.common.registry.GameRegistry.generateWorld(GameRegistry.java:112)
   at net.minecraft.world.gen.ChunkProviderServer.populate(ChunkProviderServer.java:314)
   at net.minecraft.world.chunk.Chunk.populateChunk(Chunk.java:1157)
   at net.minecraft.world.gen.ChunkProviderServer.originalLoadChunk(ChunkProviderServer.java:208)
   at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:149)
   at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:119)
   at net.minecraft.server.MinecraftServer.initialWorldChunkLoad(MinecraftServer.java:305)
   at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:79)
   at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:96)
   at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:445)
   at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)


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 10 (amd64) version 10.0
   Java Version: 1.8.0_101, Oracle Corporation
   Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
   Memory: 3853779344 bytes (3675 MB) / 4116185088 bytes (3925 MB) up to 4116185088 bytes (3925 MB)
   JVM Flags: 4 total; -Xms4G -Xmx4G -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M
   AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
   IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
   FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 6 mods loaded, 6 mods active
   States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
   UCHIJAA   mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
   UCHIJAA   FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar)
   UCHIJAA   Forge{10.13.4.1558} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar)
   UCHIJAA   examplemod{1.0} [Example Mod] (bin)
   UCHIJAA   magicwands{1.0-MC1.7.10} [Magic Wands] (bin)
   UCHIJAA   macchacraft{1.0-MC1.7.10} [MacchaCraft] (bin)
   GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
   Profiler Position: N/A (disabled)
   Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
   Player Count: 0 / 8; []
   Type: Integrated Server (map_client.txt)
   Is Modded: Definitely; Client brand changed to 'fml,forge'
和風はお好き?
  • 1.7.10永住民です。1.8? 1.9? 1.10? 知らんな。
  • 趣味の範囲でModの開発を手がけています。過去VerのModのサルベージ希望とかを見かけたら規約に違反しない範囲で配布するかも。
  • テクスチャ書くの上手い人って羨ましいですよね。上手になりたい。
アバター
☭Destroy//Accuracy☭
ID:53c5c913
石掘り
 
記事: 78
登録日時: 2015年11月03日(火) 08:46
お住まい: 京の町

  • (PostNo.287670)

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

投稿記事by defeatedcrow » 2016年11月13日(日) 13:34

☭Destroy//Accuracy☭ さんが書きました:ワールドに木を自然生成させたいのですが、ワールドの生成をするとエラーが出て、Minecraftがクラッシュしてしまいます。
どの部分が間違っているのか、どう直せばいいのか教えていただけると嬉しいです。
(直接苗木を植えて、骨粉で育てることは可能です。)

環境: 1.7.10 / Forge-#1558 / Eclipse 4.6

参考にさせていただいたサイト: MinecraftForge Forum / TNT Modders

ソースコード
WorldGenMacchaTrees
コード: 全て選択
package destroy.maccha.world;

import java.util.Random;

import destroy.maccha.init.BlockRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSapling;
import net.minecraft.block.material.Material;
import net.minecraft.init.Blocks;
import net.minecraft.util.Direction;
import net.minecraft.world.World;
import net.minecraft.world.gen.feature.WorldGenAbstractTree;
import net.minecraftforge.common.util.ForgeDirection;

public class WorldGenMacchaTrees extends WorldGenAbstractTree {

   private final int minTreeHeight;
   private final boolean vinesGrow;
   private final int metaWood;
   private final int metaLeaves;

   public WorldGenMacchaTrees(boolean doBlockNotify) {
      this(doBlockNotify, 4, 0, 0, false);
   }

   public WorldGenMacchaTrees(boolean doBlockNotify, int minTreeHeight, int metaWood, int metaLeaves, boolean vinesGrow) {
      super(doBlockNotify);
      this.minTreeHeight = minTreeHeight;
      this.metaWood = metaWood;
      this.metaLeaves = metaLeaves;
      this.vinesGrow = vinesGrow;
   }

   @Override
   public boolean generate(World world, Random random, int x, int y, int z) {
      int l = random.nextInt(3) + minTreeHeight;

      if (y < 1 || y + l + 1 > 256)
         return false;
      byte b0;
      int k1;
      Block block;

      for (int iy = y; iy <= y + 1 + l; ++iy) {
         b0 = 1;

         if (iy == y) {
            b0 = 0;
         }

         if (iy >= y + 1 + l - 2) {
            b0 = 2;
         }

         for (int ix = x - b0; ix <= x + b0; ++ix) {
            for (int iz = z - b0; iz <= z + b0; ++iz) {
               if (iy < 0 || iy >= 256)
                  return false;
               block = world.getBlock(ix, iy, iz);
               if (!this.isReplaceable(world, ix, iy, iz))
                  return false;
            }
         }
      }

      Block block2 = world.getBlock(x, y - 1, z);

      boolean isSoil = block2.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, (BlockSapling) BlockRegistry.saplingMaccha);
      if (!isSoil || y >= 256 - l - 1)
         return false;
      block2.onPlantGrow(world, x, y - 1, z, x, y, z);
      b0 = 3;
      byte b1 = 0;
      int l1;
      int i2;
      int j2;
      int i3;

      for (k1 = y - b0 + l; k1 <= y + l; ++k1) {
         i3 = k1 - (y + l);
         l1 = b1 + 1 - i3 / 2;

         for (i2 = x - l1; i2 <= x + l1; ++i2) {
            j2 = i2 - x;

            for (int k2 = z - l1; k2 <= z + l1; ++k2) {
               int l2 = k2 - z;

               if (Math.abs(j2) != l1 || Math.abs(l2) != l1 || random.nextInt(2) != 0 && i3 != 0) {
                  Block block1 = world.getBlock(i2, k1, k2);

                  if (block1.isAir(world, i2, k1, k2) || block1.isLeaves(world, i2, k1, k2)) {
                     this.setBlockAndNotifyAdequately(world, i2, k1, k2, BlockRegistry.leavesMaccha, metaLeaves);
                  }
               }
            }
         }
      }

      for (k1 = 0; k1 < l; ++k1) {
         block = world.getBlock(x, y + k1, z);

         if (block.isAir(world, x, y + k1, z) || block.isLeaves(world, x, y + k1, z)) {
            setBlockAndNotifyAdequately(world, x, y + k1, z, BlockRegistry.logMaccha, metaWood);

            if (vinesGrow && k1 > 0) {
               if (random.nextInt(3) > 0 && world.isAirBlock(x - 1, y + k1, z)) {
                  this.setBlockAndNotifyAdequately(world, x - 1, y + k1, z, Blocks.vine, 8);
               }

               if (random.nextInt(3) > 0 && world.isAirBlock(x + 1, y + k1, z)) {
                  this.setBlockAndNotifyAdequately(world, x + 1, y + k1, z, Blocks.vine, 2);
               }

               if (random.nextInt(3) > 0 && world.isAirBlock(x, y + k1, z - 1)) {
                  this.setBlockAndNotifyAdequately(world, x, y + k1, z - 1, Blocks.vine, 1);
               }

               if (random.nextInt(3) > 0 && world.isAirBlock(x, y + k1, z + 1)) {
                  this.setBlockAndNotifyAdequately(world, x, y + k1, z + 1, Blocks.vine, 4);
               }
            }
         }
      }

      if (vinesGrow) {
         for (k1 = y - 3 + l; k1 <= y + l; ++k1) {
            i3 = k1 - (y + l);
            l1 = 2 - i3 / 2;

            for (i2 = x - l1; i2 <= x + l1; ++i2) {
               for (j2 = z - l1; j2 <= z + l1; ++j2) {
                  if (world.getBlock(i2, k1, j2).isLeaves(world, i2, k1, j2)) {
                     if (random.nextInt(4) == 0 && world.getBlock(i2 - 1, k1, j2).isAir(world, i2 - 1, k1, j2)) {
                        this.growVines(world, i2 - 1, k1, j2, 8);
                     }

                     if (random.nextInt(4) == 0 && world.getBlock(i2 + 1, k1, j2).isAir(world, i2 + 1, k1, j2)) {
                        this.growVines(world, i2 + 1, k1, j2, 2);
                     }

                     if (random.nextInt(4) == 0 && world.getBlock(i2, k1, j2 - 1).isAir(world, i2, k1, j2 - 1)) {
                        this.growVines(world, i2, k1, j2 - 1, 1);
                     }

                     if (random.nextInt(4) == 0 && world.getBlock(i2, k1, j2 + 1).isAir(world, i2, k1, j2 + 1)) {
                        this.growVines(world, i2, k1, j2 + 1, 4);
                     }
                  }
               }
            }
         }

         if (random.nextInt(5) == 0 && l > 5) {
            for (k1 = 0; k1 < 2; ++k1) {
               for (i3 = 0; i3 < 4; ++i3) {
                  if (random.nextInt(4 - k1) == 0) {
                     l1 = random.nextInt(3);
                     this.setBlockAndNotifyAdequately(world, x + Direction.offsetX[Direction.rotateOpposite[i3]], y + l - 5 + k1, z + Direction.offsetZ[Direction.rotateOpposite[i3]], Blocks.cocoa, l1 << 2 | i3);
                  }
               }
            }
         }
      }

      return true;
   }

   @Override
   protected boolean isReplaceable(World world, int x, int y, int z) {
      Block block = world.getBlock(x, y, z);
      return block.isAir(world, x, y, z) || block.isLeaves(world, x, y, z) || block.isWood(world, x, y, z) || this.func_150523_a(block);
   }

   @Override
   protected boolean func_150523_a(Block block) {
      return block.getMaterial() == Material.air || block.getMaterial() == Material.leaves || block == Blocks.grass || block == Blocks.dirt || block == Blocks.log || block == Blocks.log2 || block == Blocks.sapling || block == Blocks.vine;
   }

   private void growVines(World world, int x, int y, int z, int length) {
      this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length);
      int i1 = 4;

      while (true) {
         --y;

         if (!world.getBlock(x, y, z).isAir(world, x, y, z) || i1 <= 0) {
            return;
         }

         this.setBlockAndNotifyAdequately(world, x, y, z, Blocks.vine, length);
         --i1;
      }
   }

}

Generator
コード: 全て選択
package destroy.maccha.world;

import java.util.Random;

import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.WorldChunkManager;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeDictionary.Type;

public class Generator implements IWorldGenerator {

   @Override
   public void generate(Random random, int chunkX , int chunkZ, World world, IChunkProvider chunkGenerator,
         IChunkProvider chunkProvider) {
      WorldChunkManager manager = world.getWorldChunkManager();

      if(manager != null) {
         BiomeGenBase biome = manager.getBiomeGenAt(chunkX * 16, chunkZ * 16);
         if(!BiomeDictionary.isBiomeOfType(biome, Type.MOUNTAIN) && !BiomeDictionary.isBiomeOfType(biome, Type.FOREST)) {
         }else if(!BiomeDictionary.isBiomeOfType(biome, Type.SNOWY)) {
            switch(random.nextInt(4)) {
            case 0:
               this.generateMaccha(world, random, chunkX, chunkZ, 60);
            }
         }
      }
   }

   private void generateMaccha(World world, Random random, int chunkX, int chunkZ, int maxHeight) {
      for(int i = 0; i < 15; i++) // 15 is rarity
      {
          int randPosX=chunkX + random.nextInt(16);
          int randPosY=random.nextInt(250); //Max Y coordinate
          int randPosZ=chunkZ + random.nextInt(16);
          (new WorldGenMacchaTrees(false)).generate(world, random, randPosX, randPosY, randPosZ);
      }
   }

}


クラッシュレポート
CrashReport
コード: 全て選択
---- Minecraft Crash Report ----
// This doesn't make any sense!

Time: 16/11/13 11:43
Description: Exception in server tick loop

java.lang.NullPointerException: Exception in server tick loop
   at net.minecraft.block.Block.canSustainPlant(Block.java:2237)
   at destroy.maccha.world.WorldGenMacchaTrees.generate(WorldGenMacchaTrees.java:68)
   at destroy.maccha.world.Generator.generateMaccha(Generator.java:38)
   at destroy.maccha.world.Generator.generate(Generator.java:26)
   at cpw.mods.fml.common.registry.GameRegistry.generateWorld(GameRegistry.java:112)
   at net.minecraft.world.gen.ChunkProviderServer.populate(ChunkProviderServer.java:314)
   at net.minecraft.world.chunk.Chunk.populateChunk(Chunk.java:1157)
   at net.minecraft.world.gen.ChunkProviderServer.originalLoadChunk(ChunkProviderServer.java:208)
   at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:149)
   at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:119)
   at net.minecraft.server.MinecraftServer.initialWorldChunkLoad(MinecraftServer.java:305)
   at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:79)
   at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:96)
   at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:445)
   at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)


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 10 (amd64) version 10.0
   Java Version: 1.8.0_101, Oracle Corporation
   Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
   Memory: 3853779344 bytes (3675 MB) / 4116185088 bytes (3925 MB) up to 4116185088 bytes (3925 MB)
   JVM Flags: 4 total; -Xms4G -Xmx4G -XX:MetaspaceSize=512M -XX:MaxMetaspaceSize=512M
   AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
   IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
   FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 6 mods loaded, 6 mods active
   States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
   UCHIJAA   mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
   UCHIJAA   FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar)
   UCHIJAA   Forge{10.13.4.1558} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar)
   UCHIJAA   examplemod{1.0} [Example Mod] (bin)
   UCHIJAA   magicwands{1.0-MC1.7.10} [Magic Wands] (bin)
   UCHIJAA   macchacraft{1.0-MC1.7.10} [MacchaCraft] (bin)
   GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
   Profiler Position: N/A (disabled)
   Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
   Player Count: 0 / 8; []
   Type: Integrated Server (map_client.txt)
   Is Modded: Definitely; Client brand changed to 'fml,forge'


Moddingをするなら、ある程度クラッシュレポートを読めたほうが良いです。
クラッシュした原因が出てきますので。
というか、読めないと公開したMODのサポートを自力でできない作者になってしまうので、最低限クラッシュ原因行の部分はわかるとよいかと。

今回の場合は、ここに、問題を起こしたクラスの行、メソッド名まで出ています。
java.lang.NullPointerException: Exception in server tick loop
at net.minecraft.block.Block.canSustainPlant(Block.java:2237)
at destroy.maccha.world.WorldGenMacchaTrees.generate(WorldGenMacchaTrees.java:68)

at destroy.maccha.world.Generator.generateMaccha(Generator.java:38)
at destroy.maccha.world.Generator.generate(Generator.java:26)
at cpw.mods.fml.common.registry.GameRegistry.generateWorld(GameRegistry.java:112)
at net.minecraft.world.gen.ChunkProviderServer.populate(ChunkProviderServer.java:314)
at net.minecraft.world.chunk.Chunk.populateChunk(Chunk.java:1157)
at net.minecraft.world.gen.ChunkProviderServer.originalLoadChunk(ChunkProviderServer.java:208)
at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:149)
at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:119)
at net.minecraft.server.MinecraftServer.initialWorldChunkLoad(MinecraftServer.java:305)
at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:79)
at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:96)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:445)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)


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

>boolean isSoil = block2.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, (BlockSapling) BlockRegistry.saplingMaccha);
この部分でcanSustainPlantの引数にnullを渡してるんじゃないですかね

nullになってそうなのはBlockRegistry.saplingMacchaですので、こいつがBlockSaplingを継承してないとか、そもそもブロック登録に失敗しているとか、そのへんの凡ミスと予想。
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:0070553b
ラピスラズリ収集家
 
記事: 1107
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.287793)

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

投稿記事by ゲスト » 2016年11月14日(月) 23:04

Forge1.7.10-10.13.4.1614でmod開発を行っているものです。
現在、ItemSwordを継承したアイテムで、ブロックを右クリックした時間と、ブロック以外を右クリックした時間によって処理を変えたいと思っているのですが、やり方がわかりません。どうしたら良いでしょうか。
最終的に作りたいのは、普通に右クリックをしたら、自分の周りを爆発させる。ブロックを右クリックしたら、そのブロックの周りを爆発させる。右クリックの時間によって、爆発の強さをかえる、と言うものです。
ゲスト
ID:6109518c
 

  • (PostNo.287855)

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

投稿記事by doranekoemon » 2016年11月15日(火) 20:50

最近、modを作りたいと思い始め、まずは開発環境を整えようと思いました。
なので、この動画を参考にして、batファイルを作って、ファイルをダウンロードするところまではしました。
しかし、エラーが出てしまいます。
ee.png

エラーの内容は、
「ビルド・パスのエラーが解決されるまで、プロジェクトをビルドできません」
「プロジェクト 'MDKExample' に、必要なライブラリー 'C:\Eclipse\modding\forge-1.10.2-12.18.2.2099-mdk\unresolved dependency - net.minecraftforge forgeBin 1.10.2-12.18.2.2099' がありません」です。
どうすれば解決できるでしょうか。
それともこのまま開発を進められるのでしょうか?

ご教授よろしくお願いします。
doranekoemon
ID:de39e835
石掘り
 
記事: 146
登録日時: 2015年9月21日(月) 21:40
お住まい: 一級豆腐建築

  • (PostNo.287860)

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

投稿記事by defeatedcrow » 2016年11月15日(火) 21:34

doranekoemon さんが書きました:最近、modを作りたいと思い始め、まずは開発[url][/url]環境を整えようと思いました。
なので、この動画を参考にして、batファイルを作って、ファイルをダウンロードするところまではしました。
しかし、エラーが出てしまいます。
ee.png

エラーの内容は、
「ビルド・パスのエラーが解決されるまで、プロジェクトをビルドできません」
「プロジェクト 'MDKExample' に、必要なライブラリー 'C:\Eclipse\modding\forge-1.10.2-12.18.2.2099-mdk\unresolved dependency - net.minecraftforge forgeBin 1.10.2-12.18.2.2099' がありません」です。
どうすれば解決できるでしょうか。
それともこのまま開発を進められるのでしょうか?

ご教授よろしくお願いします。


様々な動画を見て環境構築に失敗してここに質問が寄せられるケースは過去何度か有りましたが、
これも、この手の解説で何度か過去にあったのと同じ問題じゃないかと思います

開発環境ビルド時に叩くコマンドは「gradle setupDecompWorkspace」だけでは不足の場合があるので「setupDevWorkspace」も付け足してみて下さい

このコマンドを叩く前に、解凍したままの状態で同梱されている「gradlew.bat」ファイルをダブルクリックで叩く
のもお忘れなく。

環境構築時のログは.gradleファイルに生成されるgradle.logファイルですので、
なかなかうまくいかない場合、そこに失敗の原因が出てきていないかもチェックしてみるとよいかと思います
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:0070553b
ラピスラズリ収集家
 
記事: 1107
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.287868)

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

投稿記事by doranekoemon » 2016年11月15日(火) 23:14

defeatedcrow さんが書きました:gradle setupDecompWorkspace」だけでは不足の場合があるので「setupDevWorkspace」も付け足してみて下さい
このコマンドを叩く前に、解凍したままの状態で同梱されている「gradlew.bat」ファイルをダブルクリックで叩くのもお忘れなく。

回答ありがとうございます。
一旦Forgeのソースファイルを削除、解凍し、
入れなおしてからこれを行ったところ、無事エラーは出なくなりました!
ありがとうございました!
doranekoemon
ID:de39e835
石掘り
 
記事: 146
登録日時: 2015年9月21日(月) 21:40
お住まい: 一級豆腐建築

  • (PostNo.287930)

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

投稿記事by Hossii » 2016年11月16日(水) 18:17

[quote="ゲスト"]Forge1.7.10-10.13.4.1614でmod開発を行っているものです。
現在、ItemSwordを継承したアイテムで、ブロックを右クリックした時間と、ブロック以外を右クリックした時間によって処理を変えたいと思っているのですが、やり方がわかりません。どうしたら良いでしょうか。
最終的に作りたいのは、普通に右クリックをしたら、自分の周りを爆発させる。ブロックを右クリックしたら、そのブロックの周りを爆発させる。右クリックの時間によって、爆発の強さをかえる、と言うものです。[/quote]
質問文がわかりにくかったので、もう一度質問させていただきます。
今、onPlayerStoppedUsingメソッドを使って、右クリックをしている時間によって爆発の強さを変えることはできましたが、ブロックを右クリックしたときには、ブロックの周りで爆発を起こすようにするということができません。OnItemUseメソッドを使えばいいかなと思ったのですが、、右クリックをしていた時間の取得のやり方がわからず困っています。
 また、右クリックをしたブロックを爆発させるという処理もどのようにすればいいのかわかりません。今はその場しのぎで、プレイヤーの向いている方向を取得してその方向を爆発させています。。。どなたか教えていただけないでしょうか?
Hossii
ID:2cd6446b
 

  • (PostNo.287970)

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

投稿記事by elise_blacklab » 2016年11月17日(木) 09:40

Hossii さんが書きました:今、onPlayerStoppedUsingメソッドを使って、右クリックをしている時間によって爆発の強さを変えることはできましたが、ブロックを右クリックしたときには、ブロックの周りで爆発を起こすようにするということができません。OnItemUseメソッドを使えばいいかなと思ったのですが、、右クリックをしていた時間の取得のやり方がわからず困っています。

盾のガードなんかと違って基本的に何らかのオブジェクトに対するInteractに関してはhold(長押し)という概念がそもそもないです.したがって(Interactについては)右クリックをしていた時間というもの自体が存在しません.
長押しの開始か終了時点で,視線の先とブロックがぶつかる地点を算出して取得する方がむしろ最適なように考えられます.
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:a6c01101
掘り廃人
 
記事: 2552
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.288031)

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

投稿記事by Hossiii » 2016年11月18日(金) 07:06

elise_blacklab さんが書きました:
Hossii さんが書きました:今、onPlayerStoppedUsingメソッドを使って、右クリックをしている時間によって爆発の強さを変えることはできましたが、ブロックを右クリックしたときには、ブロックの周りで爆発を起こすようにするということができません。OnItemUseメソッドを使えばいいかなと思ったのですが、、右クリックをしていた時間の取得のやり方がわからず困っています。

盾のガードなんかと違って基本的に何らかのオブジェクトに対するInteractに関してはhold(長押し)という概念がそもそもないです.したがって(Interactについては)右クリックをしていた時間というもの自体が存在しません.
長押しの開始か終了時点で,視線の先とブロックがぶつかる地点を算出して取得する方がむしろ最適なように考えられます.

なるほど、そうだったのですね。。。
クリックした時に処理ですが、onItemUseメソッドのint型の引数を使えばできたので、今回はそちらを使いました。

onPlayerStoppedUsingなどのメソッドがどこで定義されているか教えていただけないでしょうか。アイテムクラスなどを見てもよくわからなかったのですが…
Hossiii
ID:7bcf2efc
水から上がったとこ
 
記事: 1
登録日時: 2016年11月13日(日) 11:14

  • (PostNo.288052)

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

投稿記事by あくえり » 2016年11月18日(金) 18:36

Mod作成初心者です
バニラのポーション矢のような
クラフトでポーション効果をアイテムに記録するにはどうしたらいいのでしょうか
コマンドいじってる
動画も出してたりするhttps://www.youtube.com/channel/UC0wBmFmZGXXAKoOzUUidwjA
あくえり
ID:efc0bae6
木を殴ってる
 
記事: 22
登録日時: 2016年3月27日(日) 22:00

  • (PostNo.288234)

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

投稿記事by テストくん » 2016年11月20日(日) 20:40

マイクラmod開発初めてなのですが
forge 1.7.10(10.13.4.1558)のjavadocとかのリファレンスはどこにありますか?
確かに6.6.2.534とかには、公式にjavadocあるけど、minecraft1.6あたりからないですよね。


とりあえず、やりたい処理はプレイヤが消費したアイテム(バニラ・他modアイテム対象)を使用した場合に満腹度が変動しているか調べたいですけど

満腹度変動のフックとかあるですかね…(´;ω;`)


やっぱり自分でソースから自動生成するのかな…
テストくん
ID:03072ec2
 

  • (PostNo.288238)

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

投稿記事by テストくん » 2016年11月20日(日) 21:23

すまん、質問したけど、自分で解決しちゃった。

forgeSrc-1.7.10-10.13.4.1558-1.7.10-sources.jar を解凍して、eclipseに適当にjavaプロジェクトとして入れる。
適当にjavadoc作成したら、出来たわ。
テストくん
ID:03072ec2
 

  • (PostNo.288242)

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

投稿記事by defeatedcrow » 2016年11月20日(日) 21:51

あくえり さんが書きました:Mod作成初心者です
バニラのポーション矢のような
クラフトでポーション効果をアイテムに記録するにはどうしたらいいのでしょうか


バニラの場合は全パターンの矢アイテムを作って、クラフトで完成品として得られるようなレシピも全パターン作られており、”プレイヤー視点だとまるで矢にポーション効果を付与しているようにみえる”仕組みとして作られています。
ですので、同じように全パターン作ればよいかと。

ItemFood.class継承のアイテムであれば、コンストラクタでsetPotionEffect(PotionEffect potionEffect, float float)でとりあえず1クラス1種ずつは飲用時に効果がつきます

テストくん さんが書きました:マイクラmod開発初めてなのですが
forge 1.7.10(10.13.4.1558)のjavadocとかのリファレンスはどこにありますか?
確かに6.6.2.534とかには、公式にjavadocあるけど、minecraft1.6あたりからないですよね。


とりあえず、やりたい処理はプレイヤが消費したアイテム(バニラ・他modアイテム対象)を使用した場合に満腹度が変動しているか調べたいですけど

満腹度変動のフックとかあるですかね…(´;ω;`)


やっぱり自分でソースから自動生成するのかな…


1.6.4くらいから、開発環境構築がうまくいっていれば自動で参照ライブラリーに加わるようになりました。
出てこないのであれば構築失敗です。
自己解決したとおっしゃっていますが、Eclipse上で登録しただけではビルド時の必要ライブラリとしては認識していなかったりするので、多分解決してないんじゃないかな…

このトピックを少し前に遡ると出てくるこのへんの記事を見て構築し直してみて下さい。
http://forum.minecraftuser.jp/viewtopic.php?f=39&t=8370&start=2420#p287860
カラスの敗残兵です。AppleMilkTea他、少々のMODを作成しています。
トピック: AppleMilkTea(~1.7.10) / HeatAndClimate(1.10.2)
作者Wiki / github / twitter
アバター
defeatedcrow
ID:0070553b
ラピスラズリ収集家
 
記事: 1107
登録日時: 2014年1月08日(水) 13:48
お住まい: 北関東

  • (PostNo.288254)

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

投稿記事by テストくん » 2016年11月21日(月) 00:22

>>defeatedcrowさん

え?そうなんですか?
一応、コンパイルできましたし、下記のURLのソースで動かしたところ、ちゃんと実行・処理されたのですが...
(1.7のレシピ追加 - Minecraft Modding Wiki - Minecraftjp wiki root http://minecraftjp.info/modding/index.p ... D%E5%8A%A0)

このフォーラムは、画像が1枚しか上げられないようなので、ペイントで適当に編集した画像になりますが、
図1(左上)はコンパイル後の実行時のトップ画面
図2(右上)はURLのソースでコンパイルした際に動作したもの
図3(左下)はeclipsのビルド・パスの登録ライブラリー一覧

図4(右下)は、eclipsに作ってもらったjavadocのhtmlのページとなっています。
添付ファイル
aa.png
状況説明用の画像だお!
テストくん
ID:03072ec2
 

1つ前へ次へ

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

x