Posted January 19, 20214 yr When i tranna locate my structure minecraft says "Could not find that structure nearby ". What i did wrong public class MyStructure { public static final DeferredRegister<Structure<?>> DEFERRED_REGISTRY_STRUCTURE = DeferredRegister.create(ForgeRegistries.STRUCTURE_FEATURES, Main.MODID); public static final RegistryObject<Structure<NoFeatureConfig>> RUN_DOWN_HOUSE = registerStructure("run_down_house", () -> (new MyPieces(NoFeatureConfig.field_236558_a_))); private static <T extends Structure<?>> RegistryObject<T> registerStructure(String name, Supplier<T> structure) { return DEFERRED_REGISTRY_STRUCTURE.register(name, structure); } public static void setupStructures() { setupMapSpacingAndLand( RUN_DOWN_HOUSE.get(), new StructureSeparationSettings(10 , 5 , 1234567890 ), true); } public static <F extends Structure<?>> void setupMapSpacingAndLand( F structure, StructureSeparationSettings structureSeparationSettings, boolean transformSurroundingLand) { Structure.NAME_STRUCTURE_BIMAP.put(structure.getRegistryName().toString(), structure); if(transformSurroundingLand) Structure.field_236384_t_.add(structure); DimensionStructuresSettings.field_236191_b_.put(structure, structureSeparationSettings); } public class MyPieces extends Structure<NoFeatureConfig> { public MyPieces(Codec<NoFeatureConfig> codec) { super(codec); } @Override public IStartFactory<NoFeatureConfig> getStartFactory() { return MyPieces.Start::new; } @Override public GenerationStage.Decoration getDecorationStage() { return GenerationStage.Decoration.SURFACE_STRUCTURES; } public static class Start extends StructureStart<NoFeatureConfig> { public Start(Structure<NoFeatureConfig> p_i225876_1_, int p_i225876_2_, int p_i225876_3_, MutableBoundingBox p_i225876_4_, int p_i225876_5_, long p_i225876_6_) { super(p_i225876_1_, p_i225876_2_, p_i225876_3_, p_i225876_4_, p_i225876_5_, p_i225876_6_); } @Override public void func_230364_a_(DynamicRegistries dynamicRegistries, ChunkGenerator chunkGenerator, TemplateManager templateManager, int cx, int cy, Biome biome, NoFeatureConfig config) { int x = cx << 4; int z = cy << 4; BlockPos blockpos = new BlockPos(x, 0, z); JigsawManager.func_242837_a( dynamicRegistries,new VillageConfig(() -> dynamicRegistries.getRegistry(Registry.JIGSAW_POOL_KEY).getOrDefault(new ResourceLocation(Main.MODID,"run_down_house/start_pool")),10), AbstractVillagePiece::new,chunkGenerator,templateManager,blockpos,this.components,this.rand,false,true); this.components.forEach(piece -> piece.offset(0, 1, 0)); this.components.forEach(piece -> piece.getBoundingBox().minY -= 1); this.recalculateStructureSize(); } } } public class MyConfigStructures { public static StructureFeature<?, ?> CONFIGURED_RUN_DOWN_HOUSE = MyStructure.RUN_DOWN_HOUSE.get().withConfiguration(IFeatureConfig.NO_FEATURE_CONFIG); public static void registerConfiguredStructures() { Registry<StructureFeature<?, ?>> registry = WorldGenRegistries.CONFIGURED_STRUCTURE_FEATURE; Registry.register(registry, new ResourceLocation(Main.MODID, "configured_run_down_house"), CONFIGURED_RUN_DOWN_HOUSE); Map<Structure<?>, StructureFeature<?, ?>> STR = ObfuscationReflectionHelper.getPrivateValue(FlatGenerationSettings.class,null,"STRUCTURES"); STR.put(MyStructure.RUN_DOWN_HOUSE.get(), CONFIGURED_RUN_DOWN_HOUSE); ObfuscationReflectionHelper.setPrivateValue(FlatGenerationSettings.class,null,STR,"STRUCTURES"); //Map<Structure<?>, StructureFeature<?, ?>> STR = ObfuscationReflectionHelper.getPrivateValue(FlatGenerationSettings.class,null,"field_202247_j"); //STR.put(MyStructure.RUN_DOWN_HOUSE.get(), CONFIGURED_RUN_DOWN_HOUSE); //ObfuscationReflectionHelper.setPrivateValue(FlatGenerationSettings.class,null,STR,"field_202247_j"); } } public Main() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); MyStructure.DEFERRED_REGISTRY_STRUCTURE.register(bus); bus.addListener(this::setup); IEventBus forgeBus = MinecraftForge.EVENT_BUS; forgeBus.addListener(EventPriority.NORMAL, this::addDimensionalSpacing); forgeBus.addListener(EventPriority.HIGH, this::biomeModification); } private void setup (final FMLCommonSetupEvent event) { Networking.RegMes(); event.enqueueWork(() -> { MyStructure.setupStructures(); MyConfigStructures.registerConfiguredStructures(); }); } public void biomeModification(final BiomeLoadingEvent event) { event.getGeneration().getStructures().add(() -> MyConfigStructures.CONFIGURED_RUN_DOWN_HOUSE); } public void addDimensionalSpacing(final WorldEvent.Load event) { if(event.getWorld() instanceof ServerWorld){ ServerWorld serverWorld = (ServerWorld)event.getWorld(); if(serverWorld.getChunkProvider().getChunkGenerator() instanceof FlatChunkGenerator && serverWorld.getDimensionKey().equals(World.OVERWORLD)){ return; } Map<Structure<?>, StructureSeparationSettings> tempMap = new HashMap<>(serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_()); tempMap.put(MyStructure.RUN_DOWN_HOUSE.get(), DimensionStructuresSettings.field_236191_b_.get(MyStructure.RUN_DOWN_HOUSE.get())); serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_(); }
January 24, 20214 yr The problem seems to be this last line in your main class addDimensionalSpacing method: serverWorld.getChunkProvider().generator.func_235957_b_().func_236195_a_(); You have created a tempMap where you put the structure settings but then you aren't using that tempMap at all. In fact that last line i quoted above just gets the map contained in DimensionStructureSettings and...leaves it floating in the air. Instead you are supposed to assign your tempMap to that map (which should be field_236193_d_ in DimensionStructureSettings class). You can see a lot of structure registration example here: https://github.com/Beethoven92/BetterEndForge/blob/master/src/main/java/mod/beethoven92/betterendforge/common/event/forge/WorldLoadHandler.java Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
January 26, 20214 yr Author Thanks for replying but field_236193_d_ now is private. How can i set it now
January 26, 20214 yr Use access transformers Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
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.