Jump to content

1.12 - Trying to use WorldEdit schematics with Custom Blocks


skeeter144

Recommended Posts

So I've been developing a very large mod over the last couple months, and I'm trying to use WorldEdit schematics with WorldPainter so I can create some stuff for a server. (Specifically, large trees for a certain area, using my custom blocks)

 

The problem is that if I'm using WorldEdit's schematics by themselves, like for transferring stuff between worlds, it works just fine, but if I load a schematic into WorldPainter and then put it in a new world, half of the blocks don't get generated.

 

And the weird thing is, the blocks that don't get generated are the blocks that are registered second in my proxy.  So if I register the logs first and the leaves second, only the logs will get put into the world, and vice versa.

 

I'm inclined to think that there's something wrong with the registration, because I basically made the leaves and logs identical blocks with different textures, and the only thing that makes a difference is the registry order.

 

 

 

public static void registerBlocks() {
	//if I register the leaves first, they'll get generated by WorldPainter, but the logs won't and vice versa
	register(spiderTreeLeaves);
	register(spiderTreeLog);
	//....
}

 

where register blocks is called from:

public class CommonProxy 
{
	public void preInit(FMLPreInitializationEvent event)
	{
		//...
		TOCItems.registerItems();
		TOCBlocks.registerBlocks();
	//...
	}
	//....
}

 

 

Does anyone have ANY idea that they could help me with? I've been scratching my head on this one for a while :/

Link to comment
Share on other sites

2 hours ago, MDW01 said:

could you give an example of what the item id's show up in game as and show the code for registering that specific item.

 

Okay, so completely refactored, and no improvement. :o The first SS is a picture of what WorldPainter generates from a really simply .schematic file.

The schematic is just a column of alternating custom leaf and log blocks.  Only the block that is registered first shows up right for some reason.

 

Item IDs appear to be working correctly.

 

And my registration code...

@SubscribeEvent
	public void registerBlocks(RegistryEvent.Register<Block> event) {
		final IForgeRegistry<Block> registry = event.getRegistry();
		final Block[] blocks = {
      //...
				spiderTreeLeaves,
				spiderTreeLog
	//...	
      };
		
		for(Block b : blocks) {
			registry.register(b);
		}
	}

 

2017-10-05_11.29.56.png

2017-10-05_11.30.14.png

2017-10-05_11.30.17.png

Link to comment
Share on other sites

9 minutes ago, MDW01 said:

I don't see anything wrong this might be an issue with world painter. Is there a way to see if world painter actually tells the blocks to get generated or not?

That, I'm not sure of, I don't know enough about the implementation of WorldPainter and/or MCEdit's schematic files, butttt.....

 

Fixed it!!! It's a SUPER ghetto fix that I have no idea why it works...Check this out...this may be very very useful for other modders.

So apparently WorldPainter doesn't want to generate the LAST block that's registered in your Mod, so if you register a dummy block as the final one, it will generate just fine 9_9¬¬O.o>:(

 

So here's what I did:

	@SubscribeEvent
	public void registerItemBlocks(RegistryEvent.Register<Item> event) {
		final IForgeRegistry<Item> registry = event.getRegistry();
		final ItemBlock[] items = {
      			//...
				new ItemBlock(spiderTreeLeaves),
				new ItemBlock(spiderTreeLog),
				new ItemBlock(dummy_block)
		};
		
		for(ItemBlock i : items) {
			Block b = i.getBlock();
			registry.register(i.setRegistryName(b.getRegistryName()));
		}
	}
	

 

Annddd BAM. It works, it just doesn't copy over the dummy block.

 

So strange.  Thanks for your input anyway!

 

2017-10-05_11.50.34.png

2017-10-05_11.51.38.png

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Keep this post up just in case but I'm using the curseforge launcher and it's working  IM SOO HAPPY
    • Post logs as per https://forums.minecraftforge.net/topic/125488-rules-and-frequently-asked-questions-faq/ They may have information that will answer these questions.
    • I was left reeling when a glitch on a cryptocurrency exchange caused me to lose $166,000 worth of my hard-earned savings. It felt like my entire world had crumbled in the blink of an eye, leaving me with a sense of hopelessness. Determined not to give up, I delved into research on recovery options, unsure of what to expect. That's when I stumbled upon I was left reeling when a glitch on a cryptocurrency exchange caused me to lose $166,000 worth of my hard-earned savings. It felt like my entire world had crumbled in the blink of an eye, leaving me with a sense of hopelessness. Determined not to give up, I delved into research on recovery options, unsure of what to expect. That's when I stumbled upon DIGITAL HACK RECOVERY, a beacon of hope in my darkest hour. Despite my initial doubts, I decided to take a leap of faith and give them a shot as a final lifeline. The experts at DIGITAL HACK RECOVERY proved to be masters of their craft, guiding me through their exclusive process with precision and expertise. Utilizing cutting-edge blockchain analysis methods, they were able to track down the elusive trail of my missing funds and identify the exact point of failure. Their forensic talents were unparalleled as they tirelessly combed through the intricate web of blockchain data to locate my cryptocurrency. With each step they took, they kept me informed of their progress, never wavering in their belief that my funds could be rescued. After several painstaking weeks, DIGITAL HACK RECOVERY finally located and restored my $166,000 worth of cryptocurrency. I was awestruck that they were able to salvage what I had thought was lost forever. The whole experience restored my faith in the crypto space and proved that even in the worst situations, recovery is possible with the right experts on your side. I will be forever grateful to DIGITAL HACK RECOVERY for giving me back my life savings when I needed it most. Their tireless efforts and technical mastery turned what could have been a devastating loss into an uplifting success story. Book a time with DIGITAL HACK RECOVERY through: digital hack recovery @ techie . com &  +12018871705
    • public class ParticleReboundRecipe implements Recipe<CraftingContainer> { private List<ParticleReboundIngredient> inputs; private ParticleReboundFuel fuel; private ItemStack output; public ParticleReboundRecipe(List<ParticleReboundIngredient> inputs, ParticleReboundFuel fuel, ItemStack output) { this.inputs = inputs; this.fuel = fuel; this.output = output; } // TODO: Implement interface ... // TODO: Move to separate file if desired public record ParticleReboundIngredient(Ingredient ingredient, int count) { public static final Codec<ParticleReboundIngredient> CODEC = RecordCodecBuilder.create( builder -> builder.group( Ingredient.CODEC.fieldOf("ingredient").forGetter((i) -> i.ingredient), Codec.INT.fieldOf("count").forGetter(i -> i.count) ).apply(builder, ParticleReboundIngredient::new) ); } // TODO: Move to separate file if desired public record ParticleReboundFuel(String tag) { public static final Codec<ParticleReboundFuel> CODEC = RecordCodecBuilder.create( builder -> builder.group(Codec.STRING.fieldOf("tag").forGetter(f -> f.tag)).apply(builder, ParticleReboundFuel::new) ); public boolean isFuel(ItemStack stack) { // TODO: Check if fuel item matches the tag } } public class Serializer implements RecipeSerializer<ParticleReboundRecipe> { public static final Codec<ParticleReboundRecipe> CODEC = RecordCodecBuilder.create( builder -> builder.group( ParticleReboundIngredient.CODEC.listOf().fieldOf("inputs").forGetter(r -> r.inputs), ParticleReboundFuel.CODEC.fieldOf("fuel").forGetter(r -> r.fuel), ItemStack.CODEC.fieldOf("output").forGetter(r -> r.output) ).apply(builder, ParticleReboundRecipe::new) ); @Override public @NotNull Codec<ParticleReboundRecipe> codec() { return CODEC; } // TODO: The rest ... } }   ?
  • Topics

×
×
  • Create New...

Important Information

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