Jump to content

Looking for a better way [semi-solid block][Solved]


ShetiPhian

Recommended Posts

I'm looking for a better way to do my semi-solid cloud blocks.

 

Effect I'm after:

Entities fall through the block unless the cloudWalk flag return true, then it is just like any other solid block.

The cloudWalk flag is true when the player can fly or has equipped special armor.

 

How it is Currently working.

The block is solid.

in "onEntityWalking" and "onFallenUpon" the flag gets checked, if false the entity gets nudged into the block.

in "onEntityCollidedWithBlock" the flag gets checked, if false "entity.setInWeb()" & "entity.setVelocity(0.0D, -2.0D, 0.0D)"

 

 

In 1.2.5 this method worked well in SSP, but on the server it worked poorly on players.

Issue #1 --Solved with new server side noClip hook added in #237

Even though the server was pushing the player it was seen as an invalid move and NetServerHandler would push the player back.

The only way I found to get around this was to edit the base class and override the check while falling through the cloud block

 

Issue #2

Minecraft seen the block as a valid spawn spot, many times you'd fall to your death.

To hack around this I edited my generator so clouds wouldn't be placed withing the spawn zone (this looked dumb)

 

Issue #3 --Solved with new hook added in #237or at least it appears to be

If the clouds where thicker then one block (almost always) sometimes you'd get stuck while falling through because "onEntityWalking" and "onFallenUpon" didn't trigger on the block bellow. By wiggling you could get unstuck.

 

 

My thoughts for reworking:

I think the best thing to do is set the getCollisionBoundingBox to null.

That should solve the getting stuck problem, remove the base edit, and maybe solve the spawn problem.

But then I have to find a way to collide with a block that has no collision box  :o

For the y value I could check if there is a cloud bellow and change it to counter the fall, if done at LivingUpdateEvent there shouldn't be any noticeable jitter, but I've got no ideas for x and z.

Link to comment
Share on other sites

Colliding without the colliding box; have you considered putting a test in getCollisionBoundingBoxFromPool for cloudWalk?

 

so perhaps something like:

 

public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4)
    {        
        if (!cloudWalk)
        {
            return null; //fall to your death.
        }
        else
        {
            return AxisAlignedBB.getBoundingBox(par2, par3, par4, par2 + 1, par3 + 1, par4 + 1); //i.e a solid cloud.
        }
    }

 

So unless you have cloudWalk, you cant fall. At the very least, this should solve issue#3. As for issue#2, perhaps you could make it so players aren't given cloudWalk until after spawning? Perhaps add something like

 if (world.worldInfo.getWorldTime < youllhavetocheckwhattheworldtimeisafewsecondsafterspawn) { cloudWalk = true; } //i can see this being a little bit dodgey though

 

Alternatively, perhaps you could see if you can find a way to get number of generated chunks, and if it's > 8 or 16 or something, then apply cloudWalk?

 

As for issue#1, you're not moving the player, so maybe it will be fixed?

 

Just my 2 cents. Apologies if it's useless, I'm quite tired.

Link to comment
Share on other sites

"have you considered putting a test in getCollisionBoundingBoxFromPool for cloudWalk?"

Yep with funny results too, the block became pass through for everyone when one who couldn't walk on them touched it.

Another thing I tried in 1.2.3 was setting the box to null on the server but a full cube on the client. I don't remember what problems I had with that but it was scrapped.

Got through this one though, I submitted a hook that allows server mods to use noClip to stop NetServerHandler from freaking out.

It was put in Build #237 so all is good there.

(server side noClip seems to have solved issue #3 as well)

 

 

As long as a block exists, is solid, and is not a leaf block, Minecraft calls it a valid spawn block.

I located where this was happening and submitted a new hook, others may find it helpful also.

But it if doesn't make it in I'll just continue pushing my blocks away from the map spawn point. (and hope no server admins move it)

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.