Не работает кастомный Boundbox

LeyxorCheysen

Каменная лига
Сообщения
872
Лучшие ответы
16
Симпатии
64
#1
Версия Minecraft
1.12.2
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Сделал кастомный boundbox для своего блока по модели, но он не работает, тобишь boundbox обычный квадратный.
Класс блока:
public class BlockSacredPlate extends Block {
    
    public static final float HARDNESS = 5.0F;
    public static final String TOOL_CLASS = "pickaxe";
    public static final int TOOL_LEVEL = 3;
    public static final float LIGHT_LEVEL = 7.0F;
    public static final String REGISTRY_NAME = "sacred_plate";
    public static final float RESISTANCE = 50.0F;
    public static final String LOCALIZATION_KEY = ExcaliburCraft.MOD_ID + "." + BlockSacredPlate.REGISTRY_NAME;

    public BlockSacredPlate() {
        
        super(Material.IRON);
        
        //this.setCreativeTab(tab)
        this.setHardness(HARDNESS);
        this.setHarvestLevel(TOOL_CLASS, TOOL_LEVEL);
        this.setLightLevel(LIGHT_LEVEL);
        this.setRegistryName(REGISTRY_NAME);
        this.setResistance(RESISTANCE);
        this.setSoundType(SoundType.METAL);
        this.setUnlocalizedName(LOCALIZATION_KEY);
        
    }
    
    @Override
    public boolean isOpaqueCube(IBlockState state) {
        
        return false;
        
    }
    
    @Override 
    public boolean isFullCube(IBlockState state) {   
        
        return false; 
        
    }
    
    private static final AxisAlignedBB[] SACRED_PLATE_AABB = new AxisAlignedBB[] {
            
            new AxisAlignedBB(0.125, 0.0, 0.4375, 0.4375, 0.875, 0.75),
            new AxisAlignedBB(0.25, 0.75, 0.4375, 0.75, 0.875, 0.5625)
            
        };
    
    @Override
    public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
        
        addCollisionBoxToList(pos, entityBox, collidingBoxes, SACRED_PLATE_AABB[0]);
        addCollisionBoxToList(pos, entityBox, collidingBoxes, SACRED_PLATE_AABB[1]);
        
    }

    public AxisAlignedBB getBoundingBox(IBlockState blockState, IBlockAccess source, BlockPos position) {

        return FULL_BLOCK_AABB;
        
    }

}
Файл модели:
{
    "textures": {
        "1": "excaliburcraft:blocks/sacred_plate",
        "particle": "excaliburcraft:blocks/sacred_plate"
    },
    "elements": [
        {
            "from": [2, 0, 7],
            "to": [14, 12, 9],
            "faces": {
                "north": {"uv": [2, 4, 14, 16], "texture": "#1"},
                "east": {"uv": [0, 4, 2, 16], "texture": "#1"},
                "south": {"uv": [2, 4, 14, 16], "texture": "#1"},
                "west": {"uv": [14, 4, 16, 16], "texture": "#1"},
                "up": {"uv": [2, 0, 14, 2], "texture": "#1"},
                "down": {"uv": [2, 0, 14, 2], "texture": "#1"}
            }
        },
        {
            "from": [4, 12, 7],
            "to": [12, 14, 9],
            "faces": {
                "north": {"uv": [4, 2, 12, 4], "texture": "#1"},
                "east": {"uv": [12, 2, 14, 4], "texture": "#1"},
                "south": {"uv": [4, 2, 12, 4], "texture": "#1"},
                "west": {"uv": [2, 2, 4, 4], "texture": "#1"},
                "up": {"uv": [4, 0, 12, 2], "texture": "#1"},
                "down": {"uv": [4, 2, 12, 4], "texture": "#1"}
            }
        }
    ],
    "display": {
        "thirdperson_righthand": {
            "scale": [0.325, 0.325, 0.325],
            "translation": [0, -1.5, -1],
            "rotation": [0, -95, 0]
        },
        "thirdperson_lefthand": {
            "scale": [0.3249, 0.3249, 0.3249],
            "translation": [0, -1.5, -1],
            "rotation": [0, -95, 0]
        },
        "head": {
            "translation": [0, 7.5, -2],
            "rotation": [90, 0, 180]
        },
        "ground": {
            "translation": [0, 7, 0]
        },
        "fixed": {
            "translation": [0, 1, 0]
        },
        "gui": {
            "translation": [0, 1, 0]
        }
    }
}
 

tiref

Каменная лига
Сообщения
398
Лучшие ответы
1
Симпатии
8
#2
Ты возвращаешь полный блок а нужно вернуть свой блок допустим MY_BLOCK_AABB но до этого ты его должен сделать и указать в нём границы бокса
 

tiref

Каменная лига
Сообщения
398
Лучшие ответы
1
Симпатии
8
#3
тебе нужно возвращать SACRED_PLATE_AABB
 

tiref

Каменная лига
Сообщения
398
Лучшие ответы
1
Симпатии
8
#5
возвращай без класса или так не выходит?

Java:
public AxisAlignedBB getBoundingBox(IBlockState blockState, IBlockAccess source, BlockPos position) {

        return SACRED_PLATE_AABB;
       
    }
 

LeyxorCheysen

Каменная лига
Сообщения
872
Лучшие ответы
16
Симпатии
64
#6
Стоп, область столкновений вроде таки работает, но квадрат выделения тогда как уменьшить?
2018-11-08_19.32.44.png
 

tiref

Каменная лига
Сообщения
398
Лучшие ответы
1
Симпатии
8
#7
Ну вроде хитбокс должен быть по модели :unsure: даже не знаю надо подумать....
 

tiref

Каменная лига
Сообщения
398
Лучшие ответы
1
Симпатии
8
#8
У меня есть вопрос повлияет ли как-то если ты сделашь это после getBoudingBox?
Java:
@Override
    public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
        
        addCollisionBoxToList(pos, entityBox, collidingBoxes, SACRED_PLATE_AABB[0]);
        addCollisionBoxToList(pos, entityBox, collidingBoxes, SACRED_PLATE_AABB[1]);
        
    }
 

Գարեգին Նժդեհ

Золотая лига
Сообщения
2,500
Лучшие ответы
38
Симпатии
353
#9
У меня вот так:
Лужа:
package com.garik.snowplusplus.block;

import java.util.List;

import javax.annotation.Nullable;

import com.garik.snowplusplus.item.register.ItemRegister;

import net.minecraft.block.Block;
import net.minecraft.block.BlockSnow;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.init.PotionTypes;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionUtils;
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;

public class PuddlePlusPlus extends Block {

    public PuddlePlusPlus(String name) {
        super(Material.SNOW);
        this.setRegistryName(name);
        this.setUnlocalizedName(name);
        this.setHardness(1963);
    }

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

    @Override
    public boolean isFullCube(IBlockState state) {
        return false;
    }

    private static final AxisAlignedBB[] PuddlePlusPlusAABB = new AxisAlignedBB[] {
            new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 0D, 1.0D)
    };
    
    @Override
    public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
        
        ItemStack potionstack = PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.WATER);
        IBlockState statet = Blocks.AIR.getDefaultState();
        
        if (player.getHeldItem(EnumHand.MAIN_HAND).getItem() == Items.GLASS_BOTTLE) {
            
        worldIn.setBlockState(pos, statet);
        player.inventory.clearMatchingItems(new ItemStack(Items.GLASS_BOTTLE).getItem(), -1, 1, null);
        player.inventory.addItemStackToInventory(potionstack);
        
        }
        
            return false;
            
    }
    
    @Override
    public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
        addCollisionBoxToList(pos, entityBox, collidingBoxes, PuddlePlusPlusAABB[0]);
    }

    public AxisAlignedBB getBoundingBox(IBlockState blockState, IBlockAccess source, BlockPos position) {

        return new AxisAlignedBB(0.0f, 0.0f, 0.0f, 1.0f, 0.0625f, 1.0f);
    }
    
}
 

LeyxorCheysen

Каменная лига
Сообщения
872
Лучшие ответы
16
Симпатии
64
#11

Doc

Золотая лига
Сообщения
1,792
Лучшие ответы
87
Симпатии
188
#12
private static final AxisAlignedBB[] SACRED_PLATE_AABB = new AxisAlignedBB[] { new AxisAlignedBB(0.125, 0.0, 0.4375, 0.4375, 0.875, 0.75), new AxisAlignedBB(0.25, 0.75, 0.4375, 0.75, 0.875, 0.5625) };
У тебя тут 2 AABB, а нужно укзаывать 1.
У того же хоппера может быть куча моделей, ибо он "угольный", но у него 1 большая, потому что нету возможности сделать несколько.
Это можно сделать в 1.13+, ибо там изменения в боксах произошли.
 

Doc

Золотая лига
Сообщения
1,792
Лучшие ответы
87
Симпатии
188
#13

Liahim

Золотая лига
Сообщения
2,801
Лучшие ответы
30
Симпатии
136
#16
Кажется, он не понимает.
Java:
public AxisAlignedBB getBoundingBox(IBlockState blockState, IBlockAccess source, BlockPos position) {
      return SACRED_PLATE_AABB[0];
}
 

tiref

Каменная лига
Сообщения
398
Лучшие ответы
1
Симпатии
8
#17
ты возвращаешь с 0 а 1 бокс не будет ведь нормально работать надо возвращать и 1 тоже:unsure:
 

Maxik001

Золотая лига
Сообщения
3,799
Лучшие ответы
35
Симпатии
362
#18
Класс указывать только для того чтобы тебе удобнее было видеть откуда он. На рабочесть\нерабочесть это не влияет никак.

ТС, шагом марш читать учебник. Ты задаешь массив(зачем то) и возвращаешь переменную, которой нет.

Кажется, он не понимает.
Java:
public AxisAlignedBB getBoundingBox(IBlockState blockState, IBlockAccess source, BlockPos position) {
      return SACRED_PLATE_AABB[0];
}
Ты зачем детей говнокодерству учишь?:)
Он же так и не поймет что это. Будет копировать везде, и еще не дай бог, начнет учить кого нибудь.прям как я
 

Doc

Золотая лига
Сообщения
1,792
Лучшие ответы
87
Симпатии
188
#20
Сверху