Поворот

Версия Minecraft
1.7.10
1,471
19
190
Нужно сделать что бы в зависимости от угла (0,45,90,135,180,225,270,315) менялась верхняя текстура
 
f73c65084d5be93a7ebd963a9d47526e.png
 
Как пример можно взять из блоков которые ставятся под разными углами:
Печь (в 4 направления):
Код:
int l = MathHelper.floor_double((double)(player.rotationYaw * 4F / 360.0F) + 0.5D) & 3;
Табличка, головы/череп (в 16 направлений):
Код:
int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 16F / 360.0F) + 0.5D) & 15;
То что тебе надо вроде, как нужно типа этого (в 8 направлений):
Код:
int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
И давай значение этому блоку для метадаты:
Код:
world.setBlockMetadataWithNotify(x, y, z, l, 2);
И из метадаты бери и узнавай под каким углом его ставили.
 
timaxa007 написал(а):
Как пример можно взять из блоков которые ставятся под разными углами:
Печь (в 4 направления):
Код:
int l = MathHelper.floor_double((double)(player.rotationYaw * 4F / 360.0F) + 0.5D) & 3;
Табличка, головы/череп (в 16 направлений):
Код:
int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 16F / 360.0F) + 0.5D) & 15;
То что тебе надо вроде, как нужно типа этого (в 8 направлений):
Код:
int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
И давай значение этому блоку для метадаты:
Код:
world.setBlockMetadataWithNotify(x, y, z, l, 2);
И из метадаты бери и узнавай под каким углом его ставили.
Код:
public void onBlockPlacedBy(int x, int y, int z,EntityLivingBase player, World world)
    {
int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;

if(l == 0){
world.setBlockMetadataWithNotify(x, y, z, l, 2);
}
    }
 
timaxa007 написал(а):
Без этого условия.

Код:
public void onBlockPlacedBy(int x, int y, int z,EntityLivingBase player, World world)
    {
 int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
 world.setBlockMetadataWithNotify(x, y, z, l, 2);
    }
 
Nix13Chanel написал(а):
timaxa007 написал(а):
Без этого условия.

Код:
public void onBlockPlacedBy(int x, int y, int z,EntityLivingBase player, World world)
    {
 int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
 world.setBlockMetadataWithNotify(x, y, z, l, 2);
    }

так у тебя вообще неправильно написан наследуемый метод (конкретно для 1.7.10)
вот как надо:


Код:
public void onBlockPlacedBy(World world, int x, int y, int z,EntityLivingBase player, ItemStack item)
 {
 int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
 world.setBlockMetadataWithNotify(x, y, z, l, 2);
 }
 
mnsbabydoll написал(а):
Nix13Chanel написал(а):
timaxa007 написал(а):
Без этого условия.

Код:
public void onBlockPlacedBy(int x, int y, int z,EntityLivingBase player, World world)
    {
 int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
 world.setBlockMetadataWithNotify(x, y, z, l, 2);
    }

так у тебя вообще неправильно написан наследуемый метод (конкретно для 1.7.10)
вот как надо:


Код:
public void onBlockPlacedBy(World world, int x, int y, int z,EntityLivingBase player, ItemStack item)
 {
 int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
 world.setBlockMetadataWithNotify(x, y, z, l, 2);
 }


А как менять верхнюю текстуру
 
timaxa007 написал(а):
Код:
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
return side == 1 ? Blocks.planks.getIcon(0, 0) : super.getIcon(side, meta);
}
side == 1 - это условие для верхней части блока.

А как указать текстуру?
 
timaxa007 написал(а):
Возвращать объект IIcon в методе getIcon.


Код:
@SideOnly(Side.CLIENT)
 public void registerBlockIcons(IIconRegister icon){
this.side = icon.registerIcon(rcc.MOD_ID + ":" + "asphalt_side");
this.bottom = icon.registerIcon(rcc.MOD_ID + ":" + "asphalt_bottom");
this.top = icon.registerIcon(rcc.MOD_ID + ":" + "asphalt_top");
}

А если у меня есть такой код, то как указать top?
 
timaxa007 написал(а):
Код:
@SideOnly(Side.CLIENT)
public IIcon getIcon(int side, int meta) {
if (side == 0) return bottom;
else if (side == 1) return top;
else return side;
}

Код:
public class AsphaltL extends Block {

 public IIcon side1;
 public IIcon bottom;
 public IIcon top;
 
 public AsphaltL() {
 super(Material.rock);
 this.setCreativeTab(CreativeTabs.tabBlock);
 setBlockName("AsphaltL");
 setStepSound(soundTypeStone);
 setHardness(0.5F);
 }
 
 @SideOnly(Side.CLIENT)
 public IIcon getIcon(int side, int meta) {
 if (side == 0){
 return bottom;
 }
 else if (side == 2)
 {
 return side1;
 }
 else if (side == 3)
 {
 return side1;
 }
 else if (side == 4)
 {
 return side1;
 }
 else if (side == 5)
 {
 return side1;
 }
 return side == 1 ? rcc.AsphaltLine.getIcon(0, 0) : super.getIcon(side, meta);
 }
 
 @SideOnly(Side.CLIENT)
 public void registerBlockIcons(IIconRegister icon){
 this.side1 = icon.registerIcon(rcc.MOD_ID + ":" + "asphalt_side");
 this.bottom = icon.registerIcon(rcc.MOD_ID + ":" + "asphalt_bottom");
 this.top = icon.registerIcon(rcc.MOD_ID + ":" + "asphalt_top1");
 }
 
 public void onBlockPlacedBy(World world, int x, int y, int z,EntityLivingBase player, ItemStack item)
 {
 int l = MathHelper.floor_double((double)((player.rotationYaw + 180.0F) * 8F / 360.0F) + 0.5D) & 7;
 world.setBlockMetadataWithNotify(x, y, z, l, 2);
 }
}
 
Назад
Сверху