Jump to content

Recommended Posts

Posted

How do I get it so my worldgen mod is the last thing that happens during world-generation?  The reason I want this to happen is that I have a natura seed that I like, but my mods presence seems to alter the generation slightly.

 

Here is my very simple worldgen code.

package worldGen.zMiningPeace;

// This Import list will grow longer with each additional tutorial.
// It's not pruned between full class postings, unlike other tutorial code.
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraftforge.common.MinecraftForge;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Init;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.Mod.PostInit;
import cpw.mods.fml.common.Mod.PreInit;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkMod;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.common.registry.LanguageRegistry;

@Mod(modid = "zMiningPeace", name = "zMiningPeace", version = "0.0.0", dependencies = "required-after:Natura")
@NetworkMod(clientSideRequired = true, serverSideRequired = false, channels = { "MiningPeaceRandom" })
public class zMiningPeace {
zMyWorldGenerator gen = new zMyWorldGenerator();
@Instance("zMiningPeace")
public static zMiningPeace instance;

@SidedProxy(clientSide = "worldGen.zMiningPeace.client.ClientProxy", serverSide = "worldGen.MiningPeace.CommonProxy")
public static CommonProxy proxy;

@PreInit
public void preInit(FMLPreInitializationEvent event) {

	// Stub Method
}

@Init
public void load(FMLInitializationEvent event) {
	proxy.registerRenderers();

}

@PostInit
public void postInit(FMLPostInitializationEvent event) {
	// Stub Method
	GameRegistry.registerWorldGenerator(gen);
    }
}

 

package worldGen.zMiningPeace;

import java.util.Random;

import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.block.Block;

public class zMyWorldGenerator implements IWorldGenerator {

@Override
public void generate(Random random, int chunkX, int chunkZ, World world,
		IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
	// System.out.printf("chunkX = %d, chunkZ = %d\n", chunkX, chunkZ);
	switch (world.provider.dimensionId) {
	case 0:
		generateSurface(world, random, chunkX * 16, chunkZ * 16);
		break;
	case -1:
		break;
	case 1:
		break;

	}

}

private void generateSurface(World world, Random random, int chunkX,
		int chunkZ) {
	this.fillArea(world, random, chunkX, chunkZ, 11, 16);

}

private void fillArea(World world, Random random, int chunkX, int chunkZ,
		int miny, int maxy) {
	int numLayers = maxy - miny;
	for (int x = 0; x < 16; x++) {
		for (int z = 0; z < 16; z++) {
			for (int y = 0; y < numLayers; y++) {
				int posx, posy, posz;
				posx = chunkX + x;
				posy = miny + y;
				posz = chunkZ + z;
				if (world.isAirBlock(posx, posy, posz)) {
					world.setBlock(posx, posy, posz, Block.stone.blockID,
							0, 0);
					// world.setb(posx, posy, posz,
					// Block.cobblestone.blockID);
				}
			}
		}

	}
	// System.out.print("Done with fill area\n");

}


}

 

As you can see, I've tried a few things to try and make this happen (renaming classes, making it dependent on natura), but it doesn't seem to work.

Thanks for your help

Posted

The problem, I think, relies on that your mod generates after natura per chunk, but your asking for random numbers offsets natura's generation for other chunks.

 

Perhaps you could try creating your own Random instance and using that instead?

BEWARE OF GOD

---

Co-author of Pentachoron Labs' SBFP Tech.

Posted

All right.  It appears that this problem is not something that is inherent to the presence of my mod.  I've done some tests without my mod installed and it appears that generation is slightly altered if you try to create the same world after exiting minecraft and reopening it (the worldgen is the same if you try to recreate within the same session).  This is fine, I guess, as long as the problem wasn't something that was originating from me, thus the perfectionist in me can rest easy.

 

Oh, and in case I wasn't clear, I am working within the context of FTB 1.5.2 beta no greg tech. 

 

Thanks for the input ObsequiousNewt.

 

 

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

    • You would have better results asking a more specific question. What have you done? What exactly do you need help with? Please also read the FAQ regarding posting logs.
    • Hi, this is my second post with the same content as no one answered this and it's been a long time since I made the last post, I want to make a client-only mod, everything is ok, but when I use shaders, none of the textures rendered in RenderLevelStageEvent nor the crow entity model are rendered, I want them to be visible, because it's a horror themed mod I've already tried it with different shaders, but it didn't work with any of them and I really want to add support for shaders Here is how i render the crow model in the CrowEntityRenderer<CrowEntity>, by the time i use this method, i know is not the right method but i don't think this is the cause of the problem, the renderType i'm using is entityCutout @Override public void render(CrowEntity p_entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { super.render(p_entity, entityYaw, partialTick, poseStack, bufferSource, packedLight); ClientEventHandler.getClient().crow.renderToBuffer(poseStack, bufferSource.getBuffer(ClientEventHandler.getClient().crow .renderType(TEXTURE)), packedLight, OverlayTexture.NO_OVERLAY, Utils.rgb(255, 255, 255)); } Here renderLevelStage @Override public void renderWorld(RenderLevelStageEvent e) { horrorEvents.draw(e); } Here is how i render every event public void draw(RenderLevelStageEvent e) { for (HorrorEvent event : currentHorrorEvents) { event.tick(e.getPartialTick()); event.draw(e); } } Here is how i render the crow model on the event @Override public void draw(RenderLevelStageEvent e) { if(e.getStage() == RenderLevelStageEvent.Stage.AFTER_ENTITIES) { float arcProgress = getArcProgress(0.25f); int alpha = (int) Mth.lerp(arcProgress, 0, 255); int packedLight = LevelRenderer.getLightColor(Minecraft.getInstance().level, blockPos); VertexConsumer builder = ClientEventHandler.bufferSource.getBuffer(crow); Crow<CreepyBirdHorrorEvent> model = ClientEventHandler .getClient().crow; model.setupAnim(this); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, packedLight, OverlayTexture.NO_OVERLAY, alpha); builder = ClientEventHandler.bufferSource.getBuffer(eyes); RenderHelper.renderModelInWorld(model, position, offset, e.getCamera(), e.getPoseStack(), builder, 15728880, OverlayTexture.NO_OVERLAY, alpha); } } How i render the model public static void renderModelInWorld(Model model, Vector3f pos, Vector3f offset, Camera camera, PoseStack matrix, VertexConsumer builder, int light, int overlay, int alpha) { matrix.pushPose(); Vec3 cameraPos = camera.getPosition(); double finalX = pos.x - cameraPos.x + offset.x; double finalY = pos.y - cameraPos.y + offset.y; double finalZ = pos.z - cameraPos.z + offset.z; matrix.pushPose(); matrix.translate(finalX, finalY, finalZ); matrix.mulPose(Axis.XP.rotationDegrees(180f)); model.renderToBuffer(matrix, builder, light, overlay, Utils .rgba(255, 255, 255, alpha)); matrix.popPose(); matrix.popPose(); } Thanks in advance
    • Same issue - I have no idea
    • I am trying to develop a modpack for me and my friends to use on our server. Does anyone know how to develop a modpack for a server or could they help take a look at my modpack to potentially help at all?
    • un server de armas realista.  
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

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