Jump to content

Recommended Posts

Posted (edited)

Hello. I'm making a conveyor mod, so I need the entity to move based on the blocks direction property, here named FACING. I think I'll need to use If to get this to work, but I can't find how to compare the FACING variable properly. How would I do this? I've tried to figure it out by logging the variable whenever the block is walked on, but that only puts out this: DirectionProperty{name=facing, clazz=class net.minecraft.util.Direction, values=[north, south, west, east]} Here's my code:

private static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING;

public ConveyorBlock() {
    super(Block.Properties.create(Material.IRON)
            .hardnessAndResistance(4.0f, 5.0f)
            .sound(SoundType.METAL)
            .harvestLevel(2)
            .harvestTool(ToolType.PICKAXE)
            .func_235859_g_());
}

@Nullable
@Override
public BlockState getStateForPlacement(BlockItemUseContext context) {
    return this.getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite());
}

@Override
public BlockState rotate(BlockState state, Rotation rot) {
    return state.with(FACING, rot.rotate(state.get(FACING)));
}

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

@Override
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
    builder.add(FACING);
}

@Override
public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) {

    Vector3d v = entityIn.getMotion();
    DirectionProperty facing = FACING;


    BlocksthatMoveyou.LOGGER.info(facing);
    BlocksthatMoveyou.LOGGER.info("Player walked on conveyor!");

    if (FACING == north) //This was one of the ways I tried doing it, but it can't resolve the symbol I also tried putting it in quotes
    entityIn.setMotion(v.x, -v.y, v.z);
}
Edited by MrInfinity
Posted

Do you know Java?

This is my Forum Signature, I am currently attempting to transform it into a small guide for fixing easier issues using spoiler blocks to keep things tidy.

 

As the most common issue I feel I should put this outside the main bulk:

The only official source for Forge is https://files.minecraftforge.net, and the only site I trust for getting mods is CurseForge.

If you use any site other than these, please take a look at the StopModReposts project and install their browser extension, I would also advise running a virus scan.

 

For players asking for assistance with Forge please expand the spoiler below and read the appropriate section(s) in its/their entirety.

  Reveal hidden contents

 

Posted

Hi.

 

  On 10/29/2020 at 11:06 PM, MrInfinity said:

entityIn.setMotion(v.x, -v.y, v.z);

Expand  

You need to add the velocity to the entity, not negate its current velocity (that doesn't make mathematical sense).

 

  On 10/29/2020 at 11:06 PM, MrInfinity said:

private static final DirectionProperty FACING = HorizontalBlock.HORIZONTAL_FACING;

Expand  

FACING is a DirectionProperty, which is a blockstate property. It does not contain a value by itself, but rather act as a key to a value stored in the blockstate.

Some tips:

  Reveal hidden contents

 

  • 2 weeks later...
Posted
  On 10/30/2020 at 2:51 AM, DavidM said:

FACING is a DirectionProperty, which is a blockstate property. It does not contain a value by itself, but rather act as a key to a value stored in the blockstate.

Expand  

So could I use an If statement to check which direction the block under me is facing? I have a code that checks what block is under it, and gets that blocks BlockState.

Posted
  On 11/13/2020 at 9:18 PM, MrInfinity said:

So could I use an If statement to check which direction the block under me is facing?

Expand  

I'm sure there are other ways to go about it, but they amount to basically this.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted (edited)

So how would I get the Direction the block is Facing from the blockstate variable? I've looked at a lot of the options that pop up, and I can't seem to find it. what I mean is get the FACING of the block out of the variable storing the blockstate

Edited by MrInfinity
Posted (edited)

So I have this:

if (thisFacing == Direction.WEST) {
    Vector3d v = entityIn.getMotion();
    entityIn.setVelocity(v.x * 2.0D, v.y, v.z);
}

It gets the right velocity, and it moves you properly, but it moves you in both directions. I want it to only move you in 1 direction, but I can't get it to do that? How'd you go about doing that?

Edited by MrInfinity
Posted

That and all you're doing is making the player faster in whatever direction they're already going.

You want to add velocity.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Oh ffs

entityIn.setVelocity(v.x - 2.0D, v.y, v.z);

 

Though you'll probably have to fiddle with the 2 value (probably something more like 0.2). Because think about what should happen if the player stands still (the conveyor belt moves him at a constant speed) and what happens if the player moves against the belt (the player should move slowly, which direction is up to you, but either way the two velocities are fighting) and what happens if the player moves in the same direction as the belt (the player should move faster).

 

Right now you're only getting "the player moves faster." But that faster is either "in the direction the player is already moving (your original code) or "in the direction the belt is moving" (what poopdice suggested) so a player trying to go against the flow of the belt gets rocketed backwards!

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted
  On 11/15/2020 at 7:46 PM, Draco18s said:

Right now you're only getting "the player moves faster." But that faster is either "in the direction the player is already moving (your original code) or "in the direction the belt is moving" (what poopdice suggested) so a player trying to go against the flow of the belt gets rocketed backwards!

Expand  

Okay yeah that makes sense. Thanks. I didn't think of that for some reason. How would I get the belts motion? It's a block, so it normally woul'nt have any. I can get it's direction, but I can't put that into a vector variable

Posted
  On 11/15/2020 at 8:47 PM, MrInfinity said:

How would I get the belts motion?

Expand  

...you're already doing that. You're getting its facing already and YOU are the one that decides how fast it moves, which is what the 2.0D is.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Posted

Well, I got it to work. Thanks:

if (thisFacing == Direction.WEST) {
    entityIn.addVelocity(0.2D, 0.01D, 0D);
}

BTW, I have it backwards because the FACING seems to be backwards for the blocks, west is east, and east is west. I don't really care to fix that.

Posted
  On 11/15/2020 at 9:16 PM, MrInfinity said:

BTW, I have it backwards because the FACING seems to be backwards for the blocks, west is east, and east is west. I don't really care to fix that.

Expand  

so...flip flop your positive and negative values...

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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.