Jump to content

Block get the direction of the neighbour block


dyno

Recommended Posts

I have a generator that has to charge a neighbour cell, this just if the cell isn't looking at generator with the front side

(That side should be the output cell's slide).

I try to explain better: I would do as batBox, mfe and mfsu of IC2. They get Energy from all side, but not front front.

 

I have tried to use IStateHolder#get(IProperty), but It returns the direction i placed the block not if the generator Is looking at front side.

 

Can someone suggest a method? I tried to look for in some Minecraft source code, nothing to do

 

 

package com.olivemod.blocks.machine.energy_cell;

import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.DirectionalBlock;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItemUseContext;
import net.minecraft.state.DirectionProperty;
import net.minecraft.state.StateContainer.Builder;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
import net.minecraft.util.Mirror;
import net.minecraft.util.Rotation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.world.IBlockReader;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;

public class BaseEnergyCell extends Block{
	
	private static final DirectionProperty FACING = DirectionalBlock.FACING;

	protected BaseEnergyCell(Properties builder) {
		super(builder);
		this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.NORTH));
	}
	
	@Override
	public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn,
			BlockRayTraceResult hit) {

		Minecraft.getInstance().player.sendChatMessage("" + state.get(FACING));
		return true;
	}
	
	@Override
	public BlockState getStateForPlacement(BlockItemUseContext context) {

		BlockState state = super.getStateForPlacement(context);
		if(context != null)
			state = state.with(FACING, context.getNearestLookingDirection());
		
		return state;
	}
	
	@Override
	public BlockState rotate(BlockState state, IWorld world, BlockPos pos, Rotation direction) {

		return state.with(FACING, direction.rotate(state.get(FACING)));
	}
	
	@Override
	public BlockState mirror(BlockState state, Mirror mirrorIn) {

		return state.rotate(mirrorIn.toRotation(state.get(FACING)));
	}
	
	
	
	@Override
	protected void fillStateContainer(Builder<Block, BlockState> builder) {

		builder.add(FACING);
		
	}


	
}

 

Edited by dyno
Link to comment
Share on other sites

With IStateHolder#get(BlockStateProperties.FACING)??

Because how I said, It returns the direction I placed the block, not the current side It Is looking at.

To debug I send in chat its return value, It says always the direction I placed from.

For example: if I place It looking at north, for each side i right click, returns always south.

North if I placed It looking at south. Same thing with west and east

 

 

I try to explain the achive:

I have two block: a generator and a Energy Cell.

 

In cell's code I set block will be placed with front side (output side) opposite player, like Furnace, chest do.

 

In cell's blockstate, of course, I set front side with output side texture

 

Now the generator TE has to extract energy only if Energy Cell isn't looking at generator with front side(output side). As IC2 batbox does: Energy can be received only if cable/generator isn't looking at its output side

Edited by dyno
Link to comment
Share on other sites

29 minutes ago, diesieben07 said:

I am not sure what you are trying to achieve.
You can get the direction your block is facing from the block state already, like you said. Whats missing? 

Code posted

Link to comment
Share on other sites

If I understood correctly, you are looking for Direction#getOpposite.

Unfortunately, I am having difficulties understanding you due to your grammatical inaccuracy. Please try rephrasing.

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Link to comment
Share on other sites

7 minutes ago, DavidM said:

If I understood correctly, you are looking for Direction#getOpposite.

Unfortunately, I am having difficulties understanding you due to your grammatical inaccuracy. Please try rephrasing.

I am not english, sorry.

I am not looking for Direction#getOpposite, because it wouldn't fix. 

 

I just wanna get the direction that  energy cell is looking to generator with.

If the cell is looking at generator with its front side(output side), it doesn't have to charge.

 

Link to comment
Share on other sites

26 minutes ago, diesieben07 said:

So you want to detect if the two blocks are facing each other? I.e.

Back   Front <> Front    Back

 

 

Yes?

Yes! Particularly if the generator Is looking to front side (output side) of cell

Link to comment
Share on other sites

50 minutes ago, diesieben07 said:

Okay, so, first get the direction the generator is facing.

Then get the block in that direction: BlockPos#offset(Direction). Check if that is a cell and if it's facing is the opposite of the generator's.

How could I check if it is facing the generator, being in generator TE? 

Link to comment
Share on other sites

7 minutes ago, dyno said:

How could I check if it is facing the generator, being in generator TE? 

Oh, fixed!

Thanks everyone!!!

I fixed checking the block opposite the value returned by IStateHolder#get(IProperty)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

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