ガラスブロックを作るにあたって

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

ガラスブロックを作るにあたって

投稿記事by Spider » 2018年8月05日(日) 17:12

minecraft 1.7.10でmoddingをしている者です。
現在、ガラスブロックを作っているのですが、いくつかお聞きしたいことがありまして、
①光を通さないガラスブロックを作りたいのですが、どうしても光を通してしまいます。
②optifineのガラスのように、隣り合うとふちを無くすという仕様にしたいのですが、どうすればいいですか?
③1.2.5にrailplusというmodがあるのですが、そこにある耐爆ガラスのように、持っている時だけ破壊できるようにするにはどうすればいいですか?


①については、いろいろ試してみたのですがうまくいかず、現状このようになっています。
package com.SpiderMod.blocks;

import com.SpiderMod.SpiderMod;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.block.Block;
import net.minecraft.block.BlockBreakable;
import net.minecraft.block.material.Material;

public class BlockDarkGlass extends BlockBreakable {

public BlockDarkGlass(Material material) {
super("spidermod:darkglass",material,false);
//システム名の登録
this.setBlockName("darkglass");
//クリエイティブタブの登録
this.setCreativeTab(SpiderMod.tabSpiderModBlock);
//硬さの設定
this.setHardness(10.0F);
//爆破耐性の設定
this.setResistance(1000.0F);
//ブロックの上を歩いた時の音を登録する。
this.setStepSound(Block.soundTypeGlass);
//回収するのに必要なツールを設定する。
this.setHarvestLevel("pickaxe", 2);
//明るさの設定
this.setLightLevel(0.0F);
//透過設定
this.setLightOpacity(0);

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

@Override
public boolean renderAsNormalBlock() {
return true;
}

@SideOnly(Side.CLIENT)
public int getRenderBlockPass()
{
return 1;
}
}

修正、加筆等ございましたら教えてください。
Spider
ID:2d6a4c90
 

  • (PostNo.318814)

Re: ガラスブロックを作るにあたって

投稿記事by 草あんこ » 2018年8月08日(水) 15:50

①はthis.setLightOpacity(0);をthis.setLightOpacity(255);に変更することで光を通さなくなります(isOpaqueCube()==trueの場合と同じ値)
②はCTMというものを使えばできると思います。他にはレンダラを自作するなど方法はたくさんあるかもしれません。おそらくCTMを使うのが一番楽かと思います
③は自分なりですが以下のようなコードを追加すれば実現できます
コード: 全て選択
@Override
public float getPlayerRelativeBlockHardness(EntityPlayer player, World world, int x, int y, int z) {
   ItemStack stack = player.inventory.getCurrentItem();
   if(stack!=null&&stack.getItem() instanceof ItemBlock) {
      ItemBlock item = (ItemBlock) stack.getItem();
      if(item.field_150939_a==this) {
         return ForgeHooks.blockStrength(this, player, world, x, y, z);
      }
   }
   return 0.0f;
}
草あんこ
ID:eacf050c
水から上がったとこ
 
記事: 8
登録日時: 2016年10月07日(金) 17:22

  • (PostNo.318840)

Re: ガラスブロックを作るにあたって

投稿記事by Spider » 2018年8月09日(木) 06:55

おお!ありがとうございます!
setLightOpacityは0で光を通さないと思ってました。勉強になりました!
ctmも使ってみようと思います。
Spider
ID:2d6a4c90
 

  • (PostNo.318859)

Re: ガラスブロックを作るにあたって

投稿記事by 草あんこ » 2018年8月09日(木) 14:42

すみません、追記します
コードにif(stack!=null&&stack.getItem() instanceof ItemBlock)という部分がありますが、instanceofは対象がnullだった場合にもfalseを返してくれるみたいなのでstack!=nullを消してif(stack.getItem() instanceof ItemBlock)にしてもらって構いません
草あんこ
ID:eacf050c
水から上がったとこ
 
記事: 8
登録日時: 2016年10月07日(金) 17:22

  • (PostNo.318900)

Re: ガラスブロックを作るにあたって

投稿記事by Spider » 2018年8月10日(金) 15:39

ありがとうございます。
Spider
ID:2d6a4c90
 

  • (PostNo.319020)

Re: ガラスブロックを作るにあたって

投稿記事by Spider » 2018年8月12日(日) 16:36

半透明のガラスを作ったつもりなんですが、コンパイルしたときに真っ黒になってしまいました。
確か前に送った通りなんですが、BlockBreakableを使ってバニラの色付きガラスのように半透明にしてみました。
で、setLightOpacityを設定する前はうまくいっていたのですが、設定したら真っ黒になってしまいます。
どうすれば直りますか?
Spider
ID:2d6a4c90
 


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

x