Jump to content

Eleocraft

Members
  • Posts

    12
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Eleocraft's Achievements

Tree Puncher

Tree Puncher (2/8)

2

Reputation

  1. Thanks for the reply, that was all I was searching for. For anyone who is interested: the interesting file (at least for me) was ReasonableRealism/src/main/java/com/draco18s/hardlib/api/block/state/BlockProperties.java
  2. I want to make a block, that works similar to an end portal frame block in minecraft. The player should be able to rightclick on it, and the block should change to an active state. From all I know minecraft uses Blockstateproberties for that, but up now I didn't had to make my own property, I only used the standart ones (like FACING for example). I have no idea how to register a new Property. For testing purposes I tried to give my block the property "EYE", the one that is used for end portal frames, but it didn't seem to work. My code: package eleocraft.ancientguardian.objects.blocks; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.state.BooleanProperty; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.util.ActionResultType; import net.minecraft.util.Hand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; import net.minecraftforge.registries.ForgeRegistries; public class BaseBlock extends Block { private static final Vector3d BASE_MIN_CORNER = new Vector3d(0.0, 0.0, 0.0); private static final Vector3d BASE_MAX_CORNER = new Vector3d(16.0, 8.0, 16.0); private static final VoxelShape BASE = Block.makeCuboidShape(BASE_MIN_CORNER.getX(), BASE_MIN_CORNER.getY(), BASE_MIN_CORNER.getZ(), BASE_MAX_CORNER.getX(), BASE_MAX_CORNER.getY(), BASE_MAX_CORNER.getZ()); public static BooleanProperty ACTIVE = BlockStateProperties.EYE; public BaseBlock(Properties properties) { super(properties); this.setDefaultState(this.stateContainer.getBaseState().with(ACTIVE, Boolean.valueOf(false))); } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { return BASE; } @Override public ActionResultType onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { if (player.inventory.getCurrentItem().getItem() == ForgeRegistries.ITEMS.getValue(new ResourceLocation("ancientguardian:ancient_crystal")) && state.get(ACTIVE).equals(Boolean.valueOf(false))) { System.out.println("It worked"); worldIn.setBlockState(pos, this.stateContainer.getBaseState().with(ACTIVE, Boolean.valueOf(true))); player.inventory.getCurrentItem().setCount(player.inventory.getCurrentItem().getCount() - 1); return ActionResultType.SUCCESS; } return ActionResultType.FAIL; } }
  3. I can't find the forge reference libraries in my mod folder: if I understood correctly there should be a forgeScr folder in here: But i can't find them
  4. Thanks! because I only need facing to be stored just adding the rotate function to my block class solved the problem. now finally everything works as expected.
  5. For whatever reason I can't upload screenshots here, so I need to do it that way: How it should be: https://drive.google.com/file/d/1wPQU_a01nhobDIST5MNJ5R1lEHNdQc1A/view?usp=sharing How it is: https://drive.google.com/file/d/1prVopizhk0_R4QDMr45gnMwJHB4VPUii/view?usp=sharing https://drive.google.com/file/d/1-vEV8M7qsHBr7wBq1NTtzsHJWKBWrWzu/view?usp=sharing I just want to get the orientation right. Custom Block Code: package eleocraft.ancientguardian.objects.blocks; import java.util.Map; import javax.annotation.Nullable; import com.google.common.collect.ImmutableMap; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.HorizontalBlock; import net.minecraft.item.BlockItemUseContext; import net.minecraft.state.DirectionProperty; import net.minecraft.state.StateContainer; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.math.vector.Vector3d; import net.minecraft.world.IBlockReader; public class CornerBlock extends Block { private static final Vector3d BASE_MIN_CORNER_N = new Vector3d(0.0, 8.0, 0.0); private static final Vector3d BASE_MAX_CORNER_N = new Vector3d(16.0, 16.0, 8.0); private static final VoxelShape BASE_N = Block.makeCuboidShape(BASE_MIN_CORNER_N.getX(), BASE_MIN_CORNER_N.getY(), BASE_MIN_CORNER_N.getZ(), BASE_MAX_CORNER_N.getX(), BASE_MAX_CORNER_N.getY(), BASE_MAX_CORNER_N.getZ()); private static final Vector3d BASE_MIN_CORNER_E = new Vector3d(8.0, 8.0, 0.0); private static final Vector3d BASE_MAX_CORNER_E = new Vector3d(16.0, 16.0, 16.0); private static final VoxelShape BASE_E = Block.makeCuboidShape(BASE_MIN_CORNER_E.getX(), BASE_MIN_CORNER_E.getY(), BASE_MIN_CORNER_E.getZ(), BASE_MAX_CORNER_E.getX(), BASE_MAX_CORNER_E.getY(), BASE_MAX_CORNER_E.getZ()); private static final Vector3d BASE_MIN_CORNER_S = new Vector3d(0.0, 8.0, 8.0); private static final Vector3d BASE_MAX_CORNER_S = new Vector3d(16.0, 16.0, 16.0); private static final VoxelShape BASE_S = Block.makeCuboidShape(BASE_MIN_CORNER_S.getX(), BASE_MIN_CORNER_S.getY(), BASE_MIN_CORNER_S.getZ(), BASE_MAX_CORNER_S.getX(), BASE_MAX_CORNER_S.getY(), BASE_MAX_CORNER_S.getZ()); private static final Vector3d BASE_MIN_CORNER_W = new Vector3d(0.0, 8.0, 0.0); private static final Vector3d BASE_MAX_CORNER_W = new Vector3d(8.0, 16.0, 16.0); private static final VoxelShape BASE_W = Block.makeCuboidShape(BASE_MIN_CORNER_W.getX(), BASE_MIN_CORNER_W.getY(), BASE_MIN_CORNER_W.getZ(), BASE_MAX_CORNER_W.getX(), BASE_MAX_CORNER_W.getY(), BASE_MAX_CORNER_W.getZ()); private static final Map<Direction, VoxelShape> POST_SHAPES = ImmutableMap.of(Direction.NORTH,BASE_N, Direction.EAST,BASE_E, Direction.SOUTH,BASE_S, Direction.WEST,BASE_W); public CornerBlock(Properties properties) { super(properties); } @Override public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { Direction direction = state.get(FACING); VoxelShape voxelShape = POST_SHAPES.get(direction); return voxelShape; } @Nullable @Override public BlockState getStateForPlacement(BlockItemUseContext blockItemUseContext) { Direction direction = blockItemUseContext.getPlacementHorizontalFacing(); // north, east, south, or west BlockState blockState = getDefaultState().with(FACING, direction); return blockState; } @Override protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) { builder.add(FACING); } private static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING; }
  6. Is there really no one who knows how to prevent a randomly generated structure from rotating? this can't be that difficult... Is there maybe a way to generate structures without using .nbt files? that would also help me out...
  7. Thanks, that answered my questions. The random generation works fine now. But I still can't find a solution to the other problem, that the facing of my custom Block is not stored correctly. I am sure that it just needs a funktion in my custom block class, but i can't figure out what is missing. EDIT: I think, that the problem isn't that the facing isn't correctly stored, but rather that it's not ajusted if the structure is turned. If no one knows how to solve this probleme i could bypass it by simply not letting the structure rotate. Is this possible?
  8. Since I got no answer on my last questions I tried myself to make a forloop and check for air in a column of blocks. for that I need to get the block by coordinates what also seems to be unnecessarily complicated. After a bit of research I found that "world.getBlockState(new BlockPos(x, i, z)).getBlock()" should work, but for whatever reason I cannot instantiate the type World. is there a way to get this working?
  9. Thanks for all the help. it works now! I had already tried the /locate command, turned out it just didn't work because the structure wasn't registered. The problem was indeed that i forgot the accesstransformer file. Now i just have two little problems to fix: First: the Structure I want to spawn contains a custom Block (with a custom blocks class) that has the attribut "facing" on it. Apparently this is not stored correctly in the nbt file because these blocks always face a different direction. And second: when i let the structure only spawn in the nether it always generate on top of the bedrock. this problem is described in the Structure tutorial mod: * If you are doing Nether structures, you'll probably want to spawn your structure on top of ledges. * Best way to do that is to use getColumnSample to grab a column of blocks at the structure's x/z position. * Then loop through it and look for land with air above it and set blockpos's Y value to it. * Make sure to set the final boolean in JigsawManager.func_242837_a to false so * that the structure spawns at blockpos's y value instead of placing the structure on the Bedrock roof! I already set the boolean in the function to false, but i dont understand how to "use getColumnSample to grab a column of blocks at the structure's x/z position. Then loop through it and look for land with air above it and set blockpos's Y value to it." One more time thanks for the help, I hope you will be able to help me with the last problems.
  10. Ok, so first of all thx for the quick response. I have tried to understand how it works with the help of the first guide. howewer it seems to be more compicated than I originally thought. So i just tried to copy the components I obviously needed into my own project, but nothing seems to happen, not even a error message or something. My structure just need to have one component, so it would be nice if they were another example without all the extra things that I wont need. Otherwise in the STStructures class line 95 it says me "The final field Structure.field_236384_t_ cannot be assigned". same error in line 109. but if the little i understood is something to go by this part is not strictly needed anyway so I just commented it out. could that be the problem? Also is there a way to better test a structure generator? my testing method is just to fly around in a new world, the structure should spawn all 5-10 chunks so that is not a big problem, but not really a professional way of testing. Also I don't know how to get the Minecraft sourcecode. all the decompilers I found doesn't seem to work for 1.16. I know this is another topic but it would also be interesting to know.
  11. I'm trying to make a structure (nbt file) randomly gererate in the Netherwastes. Unfortunately the newest tutorial that i found on this topic was for 1.15, and it didn't work for me. Also im quite new to Minecraft modding in general. Thanks for the help
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.