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    2090

Draco18s

Draco18s    2090

  • Reality Controller
  • Draco18s
  • Members
  • 2090
  • 13999 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

    • plugsmustard
      on/off button for custom furnace

      By plugsmustard · Posted just now

      what exactly is wrong with them. i was told to return a new packet?
    • JetCobblestone
      [1.14] moving item assignment to a separate function

      By JetCobblestone · Posted 2 minutes ago

      Hey everyone,   I'm trying to move my item assignment into a new class. I've stuck in into the same package as my main and called it ItemsLoader.   package jetcobblestone.firstmod; import jetcobblestone.firstmod.lists.itemList; import net.minecraft.item.Foods; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.util.ResourceLocation; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; public class ItemsLoader { public static final String modid = "first_mod"; public static void Items() { @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) public static class RegistryEvents { @SubscribeEvent public static void registerItems(final RegistryEvent.Register<Item> event) { event.getRegistry().registerAll ( itemList.hair_fibre = new Item(new Item.Properties().food(Foods.COOKIE).group(ItemGroup.FOOD).maxStackSize(1)).setRegistryName(location("hair_fibre")) ); } } private static ResourceLocation location(String name) { return new ResourceLocation(modid, name); } } }   This is the new class, however I'm running into an issue with the new Items function. It's giving me an error saying that it's expecting a volatile at the void token. Why is it trying to force me to do this? I don't want to send this to main memory? If I do replace void with volatile, it tells me there's a syntax error on the 'void' token, despite the fact there is no void. Any help would be much appreciated, thank you!
    • Draco18s
      on/off button for custom furnace

      By Draco18s · Posted 6 minutes ago

      Good. Now fix these two lines. https://github.com/drmdgg/marijuanacraft1.14.4/blob/a246b0229e61058b95672d7f4813b5c3deb28229/src/main/java/drmdgg/marijuanacraft/network/PacketButtonClicked.java#L28-L29
    • FaxeeK
      Can't launch the game with forge

      By FaxeeK · Posted 40 minutes ago

      Soo i've been having this problem ever since I factory restarted my computer, every time I launch the game with forge I get this pop op . I can launch stuff from technicLaunch but not twitch. Idk if this helps but I had it instaled before I reset my computer. Sorry for bad grammer i'm danish.
    • loordgek
      COREMODS CRASH

      By loordgek · Posted 41 minutes ago

      problem w/ optifine
  • Topics

    • JetCobblestone
      0
      [1.14] moving item assignment to a separate function

      By JetCobblestone
      Started 2 minutes ago

    • plugsmustard
      42
      on/off button for custom furnace

      By plugsmustard
      Started Wednesday at 03:11 PM

    • FaxeeK
      0
      Can't launch the game with forge

      By FaxeeK
      Started 39 minutes ago

    • raulllano
      1
      COREMODS CRASH

      By raulllano
      Started 2 hours ago

    • Nuparu00
      0
      [1.12.2] Rendering item in front of everything else

      By Nuparu00
      Started 56 minutes ago

  • Who's Online (See full list)

    • xVoidZx
    • Silverpool64
    • Lea9ue
    • Hendoor64
    • Vorquel
    • DragonITA
    • matt1999rd
    • JetCobblestone
    • Atila1091
    • maycool12
    • vaartis
    • plugsmustard
    • Draco18s
    • FaxeeK
    • loordgek
  • 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