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.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I'm opening the forge 1.8.9 installer properly I click install with the client option selected, it says it installs properly but when I go into my files and also when I go into the minecraft launcher, it's just not there.  JVM info: Oracle Corporation - 1.8.0_431 - 25.431-b10 java.net.preferIPv4Stack=true Found java version 1.8.0_431 Considering minecraft client jar Considering library net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9: Not Downloading {Wrong Side} Considering library net.minecraft:launchwrapper:1.12: Not Downloading {Wrong Side} Considering library org.ow2.asm:asm-all:5.0.3: Not Downloading {Wrong Side} Considering library jline:jline:2.13: Not Downloading {Wrong Side} Considering library com.typesafe.akka:akka-actor_2.11:2.3.3 Considering library com.typesafe:config:1.2.1 Considering library org.scala-lang:scala-actors-migration_2.11:1.1.0 Considering library org.scala-lang:scala-compiler:2.11.1 Considering library org.scala-lang.plugins:scala-continuations-library_2.11:1.0.2 Considering library org.scala-lang.plugins:scala-continuations-plugin_2.11.1:1.0.2 Considering library org.scala-lang:scala-library:2.11.1 Considering library org.scala-lang:scala-parser-combinators_2.11:1.0.1 Considering library org.scala-lang:scala-reflect:2.11.1 Considering library org.scala-lang:scala-swing_2.11:1.0.1 Considering library org.scala-lang:scala-xml_2.11:1.0.2 Considering library lzma:lzma:0.0.1: Not Downloading {Wrong Side} Considering library net.sf.jopt-simple:jopt-simple:4.6: Not Downloading {Wrong Side} Considering library java3d:vecmath:1.5.2 Considering library net.sf.trove4j:trove4j:3.0.3 Extracting: /forge-1.8.9-11.15.1.2318-1.8.9-universal.jar To: C:\Users\Ian\AppData\Roaming\.minecraft\libraries\net\minecraftforge\forge\1.8.9-11.15.1.2318-1.8.9\forge-1.8.9-11.15.1.2318-1.8.9.jar That's the installer log and I have no idea if anything is wrong.
    • https://mclo.gs/NQ786zI   I don’t understand what I need to do.
    • I am wanting to give the armour in my mod special properties, but I have no idea how to do so.   For the first armour set I want it to be the case that when the full set is worn it has the properties of a carved pumpkin, making it so you won't aggravate endermen when you look at them.    The second, and presumably harder property is that for the second set I would like it to be the case that when the full set is worn, you can walk over the void without falling. (I was considering using the levitation to accomplish this but I wanted to check beforehand).   Would both of these specialities be achievable for each armour set and how exactly would they both be done? Help would be much appreciated. 
    • I finally got my Forge server up and running thanks to the help of the people on this forum and played fine for a day. Now since I started playing today, the server runs for 20-30 minutes then freezes and kicks everyone out but stays up and running but won't let anyone connect. Here is the latest debug log and crashlog from the server. Thank you for reading & helping   https://gist.github.com/Dwolfwoood/d0410e581c86772694f1d8007431c409   https://gist.github.com/Dwolfwoood/b5d521fd071dbfcc816949924757fef9
    • I got the infamous crash log that you get when you have a mod or multiple mods that are incompatible with the version being used. however.. I have no idea which ones are wrong. I was hoping the forums could help me figure it out. does the crsh report tell me and im just dumb?  
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

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