- 344
- 1
- 47
Решил попробовать сделать упрощённую регистрацию блоков без множества ненужных классов. Всё, в принципе работает хорошо, но есть несколько ньюансов:
Возможно ли принудительно добавлять методы, или изменять их? К примеру, при регистрации указать блок и дополнительный конфиг/класс, откуда будут подгружаться необходимые методы.
Каким образом во время регистрации, можно настроить AxisAlignedBB? Мне нужно, чтобы при регистрации можно было настроить это значение...
В общем, примерно что я хочу получить:
И ещё, можно ли избежать этих листов регистрации и сделать банальное, автоматическое формирование списка? То-есть он берёт все Block1-over200 и заносит их в этот список?
Возможно ли принудительно добавлять методы, или изменять их? К примеру, при регистрации указать блок и дополнительный конфиг/класс, откуда будут подгружаться необходимые методы.
Каким образом во время регистрации, можно настроить AxisAlignedBB? Мне нужно, чтобы при регистрации можно было настроить это значение...
В общем, примерно что я хочу получить:
public static final Block1 Block1 = new Block1("block1", tab.1, (добавить блок кода), 0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
И ещё, можно ли избежать этих листов регистрации и сделать банальное, автоматическое формирование списка? То-есть он берёт все Block1-over200 и заносит их в этот список?
block1 (код уже измученного мною блока):
package core.erumind.block.s;
import java.util.List;
import core.Engine;
import core.Settings;
import core.erumind.block.TileEntity.Base;
import net.minecraft.block.Block;
import net.minecraft.block.BlockHorizontal;
import net.minecraft.block.SoundType;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyDirection;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.Mirror;
import net.minecraft.util.Rotation;
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.client.model.ModelLoader;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class Block1 extends Block {
protected static final AxisAlignedBB BLOCK_TOP = new AxisAlignedBB(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
public static final PropertyDirection FACING = BlockHorizontal.FACING;
private static Block1 ourInstance;
public Block1(String reg/[I],AxisAlignedBB points[/I]/) {
super(Material.IRON);
setHardness(1.5F);
setResistance(1000.0F);
setHarvestLevel("pickaxe", 2);
setCreativeTab(Engine.objTab);
setSoundType(SoundType.METAL);
setLightOpacity(0);
setLightLevel(0.4f);
setTickRandomly(false);
setUnlocalizedName(reg);
setRegistryName(Settings.Resources, "tile." + reg);
setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH));
// GameRegistry.registerTileEntity(Base.class, reg);
}
@Override
protected BlockStateContainer createBlockState() {
return new BlockStateContainer(this, new IProperty[] { FACING});
}
@Override
public IBlockState getStateForPlacement(final World world, final BlockPos pos, final EnumFacing facing, final float hitX, final float hitY, final float hitZ, final int meta, final EntityLivingBase placer, final EnumHand hand) {
return super.getStateForPlacement(world, pos, facing, hitX, hitY, hitZ, meta, placer, hand).withProperty(FACING, placer.getHorizontalFacing().getOpposite());
}
@SuppressWarnings("deprecation")
@Override
public IBlockState getStateFromMeta(int meta) {
EnumFacing enumfacing = EnumFacing.getFront(meta);
if (enumfacing.getAxis() == EnumFacing.Axis.Y) {
enumfacing = EnumFacing.NORTH;
}
return this.getDefaultState().withProperty(FACING, enumfacing);
}
@Override
public int getMetaFromState(final IBlockState state) {
return state.getValue(FACING).getHorizontalIndex();
}
@SuppressWarnings("deprecation")
@Override
public IBlockState withRotation(final IBlockState state, final Rotation rotation) {
return state.withProperty(FACING, rotation.rotate(state.getValue(FACING)));
}
@SuppressWarnings("deprecation")
@Override
public IBlockState withMirror(final IBlockState state, final Mirror mirror) {
return state.withRotation(mirror.toRotation(state.getValue(FACING)));
}
@SideOnly(Side.CLIENT)
public void initModel() {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(this), 0, new ModelResourceLocation(getRegistryName(), "inventory"));
}
@Override
@SideOnly(Side.CLIENT)
public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess worldIn, BlockPos pos, EnumFacing side) {
return false;
}
@Override
public boolean isBlockNormalCube(IBlockState blockState) {
return false;
}
@Override
public boolean isOpaqueCube(IBlockState blockState) {return false;}
@Override
public boolean isFullCube(IBlockState state) {return false;}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { return BLOCK_TOP; }
@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox,
List<AxisAlignedBB> collidingBoxes, Entity entityIn, boolean p_185477_7_) { addCollisionBoxToList(pos, entityBox, collidingBoxes, BLOCK_TOP);}
}
Blocks (Или мой велосипед с регистрацией этих блоков):
@Mod.EventBusSubscriber(modid = MODID)
public class Blocks {
private static Blocks INSTANCE;
public static Blocks getInstance() {
if (INSTANCE == null) synchronized (Blocks.class) {
if (INSTANCE == null) INSTANCE = new Blocks();
}
return INSTANCE;
}
public static final Block1 Block1 = new Block1("block1");
private Blocks() {}
private static Item itemRegister(Item item, String regName, String unlocalizedName) {
item.setUnlocalizedName(new StringBuilder(Settings.Resources).append(".").append(unlocalizedName).toString());
item.setRegistryName(new ResourceLocation(Settings.Resources, regName));
return item;
}
//====================================================================
@Mod.EventBusSubscriber(modid = Settings.MODID)
public static class RegistrationHandler {
public static final Set<ItemBlock> ITEM_BLOCKS = new HashSet<>();
@SubscribeEvent
public static void registerBlocks(final RegistryEvent.Register<Block> event) {
final IForgeRegistry<Block> registry = event.getRegistry();
final Block[] blocks = {
Block1,
}; registry.registerAll(blocks);
}
@SubscribeEvent
public static void registerItemBlocks(final RegistryEvent.Register<Item> event) {
final ItemBlock[] items = {
new ItemBlock(Block1),
};
final IForgeRegistry<Item> registry = event.getRegistry();
for (final ItemBlock item : items) {
final Block block = item.getBlock();
final ResourceLocation registryName = block.getRegistryName();
registry.register(item.setRegistryName(registryName));
ITEM_BLOCKS.add(item);
}
registerTileEntities();
}
private static void registerTileEntities() {
//registerTileEntity(TileEntitySurvivalCommandBlock.class, "survival_command_block");
}
private static void registerTileEntity(final Class<? extends TileEntity> tileEntityClass, final String name) {
//GameRegistry.registerTileEntity(tileEntityClass, Constants.RESOURCE_PREFIX + name);
}
}
//====================================================================
}
/* @SubscribeEvent
public static void initBlocks(RegistryEvent.Register<Block> event) {
event.getRegistry().register(Multiblock.getInstance());
}
@SubscribeEvent
public static void initBlockItems(RegistryEvent.Register<Item> event) {
event.getRegistry().register(OLDTB_ItemRegister.getInstance());
}*/
Последнее редактирование модератором: