Jump to content
  • Home
  • Files
  • Docs
  • Merch
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • (Solved) [1.11] Replacing block with another block
1.13 Update Notes for Mod Creators
Sign in to follow this  
Followers 0
Rohzek

(Solved) [1.11] Replacing block with another block

By Rohzek, January 7, 2017 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

Rohzek    8

Rohzek

Rohzek    8

  • Stone Miner
  • Rohzek
  • Forge Modder
  • 8
  • 77 posts
Posted January 7, 2017

How would one go about stopping the spawn of a vanilla block, say, the Pumpkin and replacing it with a modded block? On world generation, that is, not on growing.

  • Quote

Share this post


Link to post
Share on other sites

Koward    3

Koward

Koward    3

  • Creeper Killer
  • Koward
  • Forge Modder
  • 3
  • 141 posts
Posted January 7, 2017

Hi,

You could subscribe to DecorateBiomeEvent.Decorate and check event.getType() to PUMPKIN.

It triggers before all pumpkins in the chunk. So you cancel it with setResult, then you do whatever you want.

  • Quote

Share this post


Link to post
Share on other sites

Rohzek    8

Rohzek

Rohzek    8

  • Stone Miner
  • Rohzek
  • Forge Modder
  • 8
  • 77 posts
Posted January 7, 2017

So, I can block the spawn with:

setResult(Result.DENY);

 

That actually didn't seem to block them from spawning, for some reason.

  • Quote

Share this post


Link to post
Share on other sites

Koward    3

Koward

Koward    3

  • Creeper Killer
  • Koward
  • Forge Modder
  • 3
  • 141 posts
Posted January 7, 2017

So, I can block the spawn with:

setResult(Result.DENY);

 

That actually didn't seem to block them from spawning, for some reason.

 

Could you show the code where you catch the event ?

  • Quote

Share this post


Link to post
Share on other sites

Draco18s    2093

Draco18s

Draco18s    2093

  • Reality Controller
  • Draco18s
  • Members
  • 2093
  • 14029 posts
Posted January 7, 2017

Mind that will only work for things like pumpkins. If you wanted to replace--say--cobblestone in villages, you'd have a much harder time.

  • Quote

Share this post


Link to post
Share on other sites

Rohzek    8

Rohzek

Rohzek    8

  • Stone Miner
  • Rohzek
  • Forge Modder
  • 8
  • 77 posts
Posted January 8, 2017

Could you show the code where you catch the event ?

@Mod.EventBusSubscriber
public class DecorateBiomeEventSP 
{
@SubscribeEvent
public static void onDecorateBiome(DecorateBiomeEvent.Decorate event)
{
	World world = event.getWorld();
	BlockPos pos = event.getPos();
	EventType type = event.getType();

	if(type == EventType.PUMPKIN)
	{
		event.setResult(Result.DENY);
		world.setBlockState(pos, SPBlocks.PUMPKIN_SP.getDefaultState());
	}
}
}

Mind that will only work for things like pumpkins. If you wanted to replace--say--cobblestone in villages, you'd have a much harder time.

 

I'm only replacing the melons and pumpkins. The melons use the same texture so I just changed the drop you get with the harvest drops event to my custom one, but my custom pumpkin removes the face (and will make you carve one on, to get the vanilla pumpkin... unless I can make a custom block work to spawn the snow golem) so I'm trying to replace them.

  • Quote

Share this post


Link to post
Share on other sites

Rohzek    8

Rohzek

Rohzek    8

  • Stone Miner
  • Rohzek
  • Forge Modder
  • 8
  • 77 posts
Posted January 8, 2017

You know what? It needed to be registered on the terrain event bus, not the event bus. Now, it's working but my attempt at placing my own block in it's place crashes.

World world = event.getWorld();
BlockPos pos = event.getPos();
EventType type = event.getType();

if(type == EventType.PUMPKIN)
{
event.setResult(Result.DENY);
if(!world.isRemote)
{
	LogHelper.debug("I blocked a pumpkin spawn");
	world.setBlockState(pos, SPBlocks.PUMPKIN_SP.getDefaultState());
}
}

 

EDIT:

 

Because the pos it always spits out, is at y level 0. I'm quite confused here.

  • Quote

Share this post


Link to post
Share on other sites

Koward    3

Koward

Koward    3

  • Creeper Killer
  • Koward
  • Forge Modder
  • 3
  • 141 posts
Posted January 8, 2017

As I said the event is triggered once before all pumpkins are generated in chunk. Not for each pumpkin.

You have to mimic the way pumpkins are generated.

In vanilla (note : build 1.10.2 2185, check if it's the same for you, it's in BiomeDecorator.java), that is :

        if (random.nextInt(32) == 0)
        {
            int i5 = random.nextInt(16) + 8;
            int k9 = random.nextInt(16) + 8;
            int j13 = worldIn.getHeight(this.chunkPos.add(i5, 0, k9)).getY() * 2;

            if (j13 > 0)
            {
                int k16 = random.nextInt(j13);
                (new WorldGenPumpkin()).generate(worldIn, random, this.chunkPos.add(i5, k16, k9));
            }
        }

(Use the random of the Decorate event, else you'll break seeds).

 

I found this by looking with my IDE where the Decorate event was called, and I saw the one where the type PUMPKIN is checked.

If you paste this code in your event, vanilla pumpkins will generate. Now if you want something different, you have to create a new WorldGenPumpkin. Just extend it and override the methods you need (probably at least generate() as it's called there).

 

The pos that's given by the event are coordinates of the chunk (or at least the chunk cross-shaped intersection, but that's the idea). So it's basically a position on a 2D map seen from above, and a y value would be meaningless. That's why y = 0. Anyway you do not need it for pumpkins.

If you wanted to edit trees that would have been trickier because some data used to calculate them are not passed to the event, but for pumpkins everything seems okay.

  • Quote

Share this post


Link to post
Share on other sites

Rohzek    8

Rohzek

Rohzek    8

  • Stone Miner
  • Rohzek
  • Forge Modder
  • 8
  • 77 posts
Posted January 8, 2017

Okay, yeah thanks.

 

I made my own WorldGenPumpkin to spawn my mod block, and dropped it in with that, and it worked.

(You sort of need it for the pumpkins. The event pos replaces this.chunkpos in that generation command)

 

 

  • Quote

Share this post


Link to post
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

  • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 0
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • DaemonUmbra
      pointing to MCP folder instead of MDK ???

      By DaemonUmbra · Posted 7 minutes ago

      This sounds like you're doing things incorrectly and asking us to help when it breaks
    • JMAS
      pointing to MCP folder instead of MDK ???

      By JMAS · Posted 8 minutes ago

      You know what?  Never mind.  I just created a new package and manually imported it over.  Ugly but effective. Go ahead and close this ticket.
    • DaemonUmbra
      pointing to MCP folder instead of MDK ???

      By DaemonUmbra · Posted 9 minutes ago

      Why the heck do you even have an MCP folder?
    • JMAS
      pointing to MCP folder instead of MDK ???

      By JMAS · Posted 17 minutes ago

      Great.  Got an answer?
    • DaemonUmbra
      pointing to MCP folder instead of MDK ???

      By DaemonUmbra · Posted 37 minutes ago

      Learn Java before you attempt modding. Oh, I missed the sarcasm part. However you do seem to be struggling with a few things that I would consider basic.
  • Topics

    • JMAS
      5
      pointing to MCP folder instead of MDK ???

      By JMAS
      Started 44 minutes ago

    • Barca
      5
      cant use mods in survival 1.12.2

      By Barca
      Started 2 hours ago

    • solitone
      19
      Distinguish singleplayer vs. multiplayer

      By solitone
      Started December 5

    • DragonITA
      35
      [1.14.4] How to get Minecraft Horse model/texture to make a custom unicorn?

      By DragonITA
      Started Monday at 10:06 AM

    • Jaffaaaaa
      1
      ScreenGui does nothing

      By Jaffaaaaa
      Started Yesterday at 07:03 PM

  • Who's Online (See full list)

    • MrChoke
    • diesieben07
    • DaemonUmbra
    • JMAS
    • SerpentDagger
    • Jaffaaaaa
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • (Solved) [1.11] Replacing block with another block
  • Theme
  • Contact Us
  • Discord

Copyright © 2019 ForgeDevelopment LLC · Ads by Curse Powered by Invision Community