[1.9-1.10]Выполнение EnumOffsetType при условии

917
22
332
Всем доброго дня!:)
Думаю из названия темы всё понятно. В общих чертах:
Я использовал этот метод для блока с очень широкой моделью, и бывает, что текстуры сливаются и возникает неприятный эффект мерцания.
Один из вариантов решения проблемы - отключение смещения если рядом находится такой же блок.
Код есть, но как и воспользоваться я не знаю:
Сам метод:
Код:
    @Override
    @SideOnly(Side.CLIENT)
    public Block.EnumOffsetType getOffsetType() {
        return Block.EnumOffsetType.XZ;
    }

Конструкция которую пытался применить:
Код:
    public void scanRockBlock(World world, BlockPos pos) {
        int x = pos.getX();int y = pos.getY();int z = pos.getZ();
        if(world.getBlockState(new BlockPos(x++,y,z)) == this) {
            if(world.getBlockState(new BlockPos(x,y,z++)) == this) {
                if(world.getBlockState(new BlockPos(x--,y,z)) == this) {
                    if(world.getBlockState(new BlockPos(x,y,z--)) == this) {
                    }
                }
            }
        }
    }
Помогите, если не трудно!
[merge_posts_bbcode]Добавлено: 06.07.2016 14:46:29[/merge_posts_bbcode]

Пробовал в методе canPlaceBlockOnSide проверять всё это, и присваивать int'у значение 1 если верно, а потом проверять в EnumOffsetType:     

Код:
    public Block.EnumOffsetType getOffsetType() {
        return int=1 ? Block.EnumOffsetType.XZ : Block.EnumOffsetType.NONE;
    }

Но по мнению эклипс такие конструкции недопустимы...
[merge_posts_bbcode]Добавлено: 06.07.2016 14:47:50[/merge_posts_bbcode]

Если вместо int boolean то всё равно не то.

[merge_posts_bbcode]Добавлено: 06.07.2016 14:51:17[/merge_posts_bbcode]

Или никто не знает, или я задал тупой вопрос.
 
4,045
63
645
Крокодил написал(а):
Код:
    public Block.EnumOffsetType getOffsetType() {
        return int=1 ? Block.EnumOffsetType.XZ : Block.EnumOffsetType.NONE;
    }
Чо-т я не понял, что ты тут проверяешь?
Код:
return <<Здесь должна быть проверка>> ? Block.EnumOffsetType.XZ : Block.EnumOffsetType.NONE;
 
917
22
332
Упс ошибся у int имя b и вверху он равняется 0:
int b = 0;
Если условие в canPlaceBlockOnSide верно, то b =1.
А условие не так написал:
Код:
return b=1 ? Block.EnumOffsetType.XZ : Block.EnumOffsetType.NONE;
 
917
22
332
Да == там. Опять в спешке не то написал.
У меня всё правильно, но видимо этот метод невозможно отменять - он изменяет положение модели на каких-нибудь координатах и всё. Примерно как в старых ресурспаках CTM. Хотя это всего лишь моя догадка.
А на эту конструкцию эклипс ругается
@Override
    @SideOnly(Side.CLIENT)
    public Block.EnumOffsetType getOffsetType() {
        return b == 1 ? Block.EnumOffsetType.XZ : Block.EnumOffsetType.NONE;
    }
Подчеркивает любое число(false или true если boolean).
[merge_posts_bbcode]Добавлено: 06.07.2016 15:18:42[/merge_posts_bbcode]

Syntax error on token "1", delete this token
 
917
22
332
Код:
package ru.reglaps.mm.blocks;

import java.util.List;

import javax.annotation.Nullable;

import net.minecraft.block.Block;
import net.minecraft.block.BlockFence;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import ru.reglaps.mm.InfoUnderSur;
import ru.reglaps.mm.items.RegistryItems;

public class RockBlock extends Block {
    
    protected static final AxisAlignedBB UNPRESSED_AABB = new AxisAlignedBB(0.0625D, 0.0D, 0.0625D, 0.9375D, 0.0625D, 0.9375D);
    
    private final String name = "rockBlock";
    private final String nameq = "rockblock";
    
    private int b = 0;
    
    //Конструктор блока
    public RockBlock() {
        super(Material.ROCK);
        setCreativeTab(CreativeTabs.BUILDING_BLOCKS);
        setUnlocalizedName(InfoUnderSur.MODID + ":" + name);
        setRegistryName(InfoUnderSur.MODID + ":" + nameq);
        setHardness(-1.0F);
        setResistance(2.0F);
    }
    
    public String getName(){
        return name;
    }
    
    //Визуальные границы
    @Override
    public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
    {
        return UNPRESSED_AABB;
    }
    
    //Физические границы
    @Override
    @Nullable
    public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos)
    {
        return NULL_AABB;
    }
    
    //Корректное отображение соседних блоков
    @Override
    public boolean isOpaqueCube(IBlockState state) {
        return false;
    }
    
    //Физический объём
    @Override
    public boolean isFullCube(IBlockState state)
    {
        return false;
    }
    
    //Корректное освещение
    @Override
    public boolean isPassable(IBlockAccess worldIn, BlockPos pos)
    {
        return true;
    }
    
    //Случайное смещение
    @Override
    @SideOnly(Side.CLIENT)
    public Block.EnumOffsetType getOffsetType() {
        return b == 1 ? Block.EnumOffsetType.XZ : Block.EnumOffsetType.NONE;
    }
  
    private boolean canBePlacedOn(World world, BlockPos pos)
    {
        return world.getBlockState(pos).isFullyOpaque() || world.getBlockState(pos).getBlock() instanceof BlockFence;
    }
    
  //Только определённые блоки
    @Override
    public boolean canPlaceBlockAt(World world, BlockPos pos)
    {
        return this.canBePlacedOn(world, pos.down());
    }
    
    //Сосед изменён
    @Override
    public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block)
    {
        if (!this.canBePlacedOn(world, pos.down()))
        {
            this.dropBlockAsItem(world, pos, state, 0);
            world.setBlockToAir(pos);
        }
    }
    
    //Действие при клике ПКМ
    @Override
    public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, @Nullable ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
        if (true) {
            if (player instanceof EntityPlayer)
                ((EntityPlayer) player).inventory.addItemStackToInventory(new ItemStack(Item.getItemFromBlock(this), 1));
        }
        
        if(true) {
             world.setBlockToAir(pos);
        }
        
        return true;     
    }
    
    //Доп. Информация
    @Override
    public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par) {
        list.add("Right clicked on block");
    }
    
    //Проверка соседних блоков
    @Override
    public boolean canPlaceBlockOnSide(World world, BlockPos pos, EnumFacing side) {
        int x = pos.getX();int y = pos.getY();int z = pos.getZ();
        if(true) {
            if(world.getBlockState(new BlockPos(x++,y,z)) == this) {
                if(world.getBlockState(new BlockPos(x,y,z++)) == this) {
                    if(world.getBlockState(new BlockPos(x--,y,z)) == this) {
                        if(world.getBlockState(new BlockPos(x,y,z--)) == this) {
                            b=1;
                        }    
                    }
                }
            }
        }
        
        return true;        
     }
}
 
4,045
63
645
А потом, блин! Твоя переменная в блоке вообще не сохраняется!
Ты меняешь её при установке, и что дальше? Рендер её не видит, как переменную.
Попробуй завязать на мету... Или на другой Энэм Тайп.
 
917
22
332
Ох, как всё сложно... Ладно будем пробовать... Кстати eclipse перезагрузил, и ошибка исчезла. Но всё не работает по прежнему. Вернее майнкрафт на мои манипуляции реагирует с редкостным пофигизмом. Блоки вообще не смещаются.
 
917
22
332
)
[merge_posts_bbcode]Добавлено: 06.07.2016 15:49:02[/merge_posts_bbcode]

Что я прекрасно понял, так это то, что надо делать модели покомпактнее.
 
917
22
332
А как лучше?
[merge_posts_bbcode]Добавлено: 06.07.2016 15:53:13[/merge_posts_bbcode]

Да, а возможно как-то проверить просто в радиусе?
 
Сверху