Генерация Блока

Статус
В этой теме нельзя размещать новые ответы.
252
0
Всем привет, еще раз. перед тем как задать этот вопрос я полазил в учебниках, и в исходном коде minecraft!
В учебнике для создания генерации руды. создается новый класс в него пишут коды для генерации
В исходном коде minecraft генерация производится в самом блоке, я смотрел у редстоуна.
Но что мне делать не могу понять, вот краш, из краша понимаю что ему что то не хватает или он что то не может найти, в данном случае это ----> Caused by: java.lang.NoSuchMethodError: net.minecraft.client.Minecraft.func_71410_x()Lnet/minecraft/client/Minecraft;  
Код:
---- Minecraft Crash Report ----
// Sorry :(

Time: 15.04.16 22:32
Description: There was a severe problem during mod loading that has caused the game to fail

cpw.mods.fml.common.LoaderException: java.lang.NoSuchMethodError: net.minecraft.client.Minecraft.func_71410_x()Lnet/minecraft/client/Minecraft;
    at cpw.mods.fml.common.LoadController.transition(LoadController.java:163)
    at cpw.mods.fml.common.Loader.preinitializeMods(Loader.java:559)
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:243)
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:522)
    at net.minecraft.client.Minecraft.run(Minecraft.java:942)
    at net.minecraft.client.main.Main.main(Main.java:164)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
    at GradleStart.main(Unknown Source)
Caused by: java.lang.NoSuchMethodError: net.minecraft.client.Minecraft.func_71410_x()Lnet/minecraft/client/Minecraft;
    at uristqwerty.gui_craftguide.theme.ThemeManager.reload(ThemeManager.java:83)
    at uristqwerty.CraftGuide.client.CraftGuideClient.preInit(CraftGuideClient.java:47)
    at uristqwerty.CraftGuide.CraftGuide.preInit(CraftGuide.java:63)
    at uristqwerty.CraftGuide.CraftGuide_FML.preInit(CraftGuide_FML.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
    at cpw.mods.fml.common.Loader.preinitializeMods(Loader.java:556)
    ... 12 more

Вот код для генерации, одного блока всего у меня 2 блока.
Код:
package ru.ewokmod;

import java.util.Random;

import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;

public class BlockMalachiteGenerator implements IWorldGenerator {


    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator,
            IChunkProvider chunkProvider)
    {
            switch(world.provider.dimensionId)
            {
                    case -1: generateNether(world, random, chunkX * 16, chunkZ * 16); break;
                    case 0: generateOverworld(world, random, chunkX * 16, chunkZ * 16); break;
                    case 1: generateEnd(world, random, chunkX * 16, chunkZ * 16); break;
            }
    }

    private void generateEnd(World world, Random random, int x, int z) 
    {
    int Xcoord = x + random.nextInt(16);
    int Ycoord = 10 + random.nextInt(128);
    int Zcoord = z + random.nextInt(16);
    
    (new WorldGenMinable(Main.BlockMalachite, 1, 15, Blocks.end_stone)).generate(world, random, Xcoord, Ycoord, Zcoord);
    }

    private void generateOverworld(World world, Random random, int x, int z) 
    {
            this.addOreSpawn(Main.BlockMalachite, world, random, x, z, 16, 16, 4 + random.nextInt(3), 10, 15, 50);
    }

    private void generateNether(World world, Random random, int x, int z)
    {
    int Xcoord = x + random.nextInt(16);

    int Ycoord = 10 + random.nextInt(128);

    int Zcoord = z + random.nextInt(16);

    (new WorldGenMinable(Main.BlockMalachite, 1, 15, Blocks.netherrack)).generate(world, random, Xcoord, Ycoord, Zcoord);
    }
    
/**
 * Добавляет генерацию руды в Minecraft. Просто воспользуйтесь этим методом для регистрации генерируемых руд.

 * @param block Блок, который хотите генерировать

 * @param world Мир (не измерение), в котором этот блок должен генерироваться

 * @param random Случайное число для получения координат генерации блока

 * @param blockXPos Число для того, чтобы было пустое место по координатам X для метода генерации (использует кварцевая руда)

 * @param blockZPos Число для того, чтобы было пустое место по координатам Z для метода генерации (использует кварцевая руда)

 * @param maxX Число, которое настроит максимальную X координату для генерации руды на оси X на чанк

 * @param maxZ Число, которое настроит максимальную Z координату для генерации руды на оси Z на чанк

 * @param maxVeinSize Максимальное число блоков руды в одной жиле

 * @param chancesToSpawn Шанс генерации блоков на чанк

 * @param minY Минимальная координата Y на которой руда может сгенерироваться

 * @param maxY Максимальная координата Y на которой руда может сгенерироваться
 */
    public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ,
            int maxVeinSize, int chancesToSpawn, int minY, int maxY)
    {
            int maxPossY = minY + (maxY - 1);
            assert maxY > minY : "Максимальная Y должна быть больше минимальной";
            assert maxX > 0 && maxX <= 16 : "addOreSpawn: Максимальная X должна быть больше 0 и меньше 16";
            assert minY > 0 : "addOreSpawn: Минимальная Y должна быть больше 0";
            assert maxY < 256 && maxY > 0 : "addOreSpawn: Максимальная Y должна быть меньше 256 и больше 0";
            assert maxZ > 0 && maxZ <= 16 : "addOreSpawn: Максимальная Z должна быть больше 0 и меньше 16";

            int diffBtwnMinMaxY = maxY - minY;
            for (int x = 20; x < chancesToSpawn; x++)
            {
                    int posX = blockXPos + random.nextInt(maxX);
                    int posY = minY + random.nextInt(diffBtwnMinMaxY);
                    int posZ = blockZPos + random.nextInt(maxZ);
                    (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
            }
    }
}
P.s
С уважением, IvanTur.
 

timaxa007

Модератор
5,831
409
672
Мод CraftGuide не может найти метод "net.minecraft.client.Minecraft.func_71410_x()".
 

timaxa007

Модератор
5,831
409
672
Т.е. что-то в моде CraftGuide не правельно использует сторонний код. Либо ты просто не ту версию мода скачал.
[merge_posts_bbcode]Добавлено: 15.04.2016 20:58:45[/merge_posts_bbcode]

Да, можно сделать так, чтобы он запускался.
 
252
0
В этом и была проблема не знаю как там с генерациией
[merge_posts_bbcode]Добавлено: 16.04.2016 00:59:27[/merge_posts_bbcode]

Ну попробую потом как нибудь скачать на эту же версию

[merge_posts_bbcode]Добавлено: 16.04.2016 01:03:17[/merge_posts_bbcode]

А можно какой то такой код, чтобы прогонял мир на этот блок?
 

timaxa007

Модератор
5,831
409
672
У меня работает, скачивал CraftGuide-1.6.8.2-dev.jar с minecraft.curseforge.com.
 
252
0
Может я косячно скачал
[merge_posts_bbcode]Добавлено: 16.04.2016 01:21:18[/merge_posts_bbcode]

Что то совсем руда не генерируется даже когда я там значения поменял
Код:
package ru.ewokmod;

import java.util.Random;

import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;

public class BlockMalachiteGenerator implements IWorldGenerator {


    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator,
            IChunkProvider chunkProvider)
    {
            switch(world.provider.dimensionId)
            {
                    case -1: generateNether(world, random, chunkX * 16, chunkZ * 16); break;
                    case 0: generateOverworld(world, random, chunkX * 16, chunkZ * 16); break;
                    case 1: generateEnd(world, random, chunkX * 16, chunkZ * 16); break;
            }
    }

    private void generateEnd(World world, Random random, int x, int z) 
    {
    int Xcoord = x + random.nextInt(16);
    int Ycoord = 10 + random.nextInt(128);
    int Zcoord = z + random.nextInt(16);
    
    (new WorldGenMinable(Main.BlockMalachite, 1, 15, Blocks.end_stone)).generate(world, random, Xcoord, Ycoord, Zcoord);
    }

    private void generateOverworld(World world, Random random, int x, int z) 
    {
            this.addOreSpawn(Main.BlockMalachite, world, random, x, z, 16, 16, 4 + random.nextInt(3), 10, 15, 50);
    }

    private void generateNether(World world, Random random, int x, int z)
    {
    int Xcoord = x + random.nextInt(16);

    int Ycoord = 10 + random.nextInt(128);

    int Zcoord = z + random.nextInt(16);

    (new WorldGenMinable(Main.BlockMalachite, 1, 15, Blocks.netherrack)).generate(world, random, Xcoord, Ycoord, Zcoord);
    }
    
/**
 * Добавляет генерацию руды в Minecraft. Просто воспользуйтесь этим методом для регистрации генерируемых руд.

 * @param block Блок, который хотите генерировать

 * @param world Мир (не измерение), в котором этот блок должен генерироваться

 * @param random Случайное число для получения координат генерации блока

 * @param blockXPos Число для того, чтобы было пустое место по координатам X для метода генерации (использует кварцевая руда)

 * @param blockZPos Число для того, чтобы было пустое место по координатам Z для метода генерации (использует кварцевая руда)

 * @param maxX Число, которое настроит максимальную X координату для генерации руды на оси X на чанк

 * @param maxZ Число, которое настроит максимальную Z координату для генерации руды на оси Z на чанк

 * @param maxVeinSize Максимальное число блоков руды в одной жиле

 * @param chancesToSpawn Шанс генерации блоков на чанк

 * @param minY Минимальная координата Y на которой руда может сгенерироваться

 * @param maxY Максимальная координата Y на которой руда может сгенерироваться
 */
    public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ,
            int maxVeinSize, int chancesToSpawn, int minY, int maxY)
    {
            int maxPossY = minY + (maxY - 1);
            assert maxY > minY : "Максимальная Y должна быть больше минимальной";
            assert maxX > 15 && maxX <= 16 : "addOreSpawn: Максимальная X должна быть больше 0 и меньше 16";
            assert minY > 1 : "addOreSpawn: Минимальная Y должна быть больше 0";
            assert maxY < 30 && maxY > 0 : "addOreSpawn: Максимальная Y должна быть меньше 256 и больше 0";
            assert maxZ > 15 && maxZ <= 16 : "addOreSpawn: Максимальная Z должна быть больше 0 и меньше 16";

            int diffBtwnMinMaxY = maxY - minY;
            for (int x = 50; x < chancesToSpawn; x++)
            {
                    int posX = blockXPos + random.nextInt(maxX);
                    int posY = minY + random.nextInt(diffBtwnMinMaxY);
                    int posZ = blockZPos + random.nextInt(maxZ);
                    (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
            }
    }
}
 
769
1
42
У меня есть такой старенький генератор, еще на 1.5.2
Код:
package futurebuilder.core.client.gen;

import java.util.Random;

import cpw.mods.fml.common.IWorldGenerator;
import futurebuilder.core.blocks.overall.FBCoreBlocks;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;

public class FBCoreGenOre implements IWorldGenerator 
{
 public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
 {
  switch (world.provider.dimensionId)
  {
   case -1: generateNether(world, random, chunkX*16, chunkZ*16);
   case 0: generateSurface(world, random, chunkX*16, chunkZ*16);
  }
 }

  

 public void generateSurface(World world, Random random, int chunkX, int chunkZ)
 {
 for(int i=0; i < 4; i++)//Кол-во руды на чанк
 {
 int randPosX=chunkX + random.nextInt(16);
 int randPosY=random.nextInt(15);
 int randPosZ=chunkZ + random.nextInt(16);
 (new WorldGenMinable(FBCoreBlocks.platinumOre.blockID, 4))//Руда и ее количество в жиле.generate(world, random, randPosX, randPosY, randPosZ);
 }
 }
 private void generateNether(World world, Random random, int chunkX, int chunkZ) 
 {
  
 }
}
Попробуй это, просто все закомментированное убери
 
252
0
Код:
 (new WorldGenMinable(FBCoreBlocks.platinumOre.blockID, 4))//Руда и ее количество в жиле.generate(world, random, randPosX, randPosY, randPosZ);
Ругается пока что на это. Говорит что Левая часть присваивания должен быть переменной.
 

timaxa007

Модератор
5,831
409
672
IvanTur написал(а):
IvanTur написал(а):
Код:
blockID
Ругается пока что на это. Говорит что Левая часть присваивания должен быть переменной.
Не используется с 1.7 переменная blockID, так как она отсутствует.
 
252
0
Тимах, да я это уже понял, но все же, что то не смогу найти этот блок.
Вот код
Код:
package ru.ewokmod;

import java.util.Random;

import cpw.mods.fml.common.IWorldGenerator;
import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;

public class BlockMalachiteGenerator implements IWorldGenerator 
{
 public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
 {
  switch (world.provider.dimensionId)
  {
   case -1: generateNether(world, random, chunkX*16, chunkZ*16);
   case 0: generateSurface(world, random, chunkX*16, chunkZ*16);
  }
 }

  

 public void generateSurface(World world, Random random, int chunkX, int chunkZ)
 {
 for(int i=0; i < 4; i++)
 {
 int randPosX=chunkX + random.nextInt(16);
 int randPosY=random.nextInt(15);
 int randPosZ=chunkZ + random.nextInt(16);
 new WorldGenMinable(Main.BlockMalachite, 4);
 }
 }
 private void generateNether(World world, Random random, int chunkX, int chunkZ) 
 {
  
 }
}
 
252
0
Или мне не везет, или я как то криво написал, помогите разобраться почему все же блок не спавниться код обновил.
Код:
package ru.ewokmod;

import java.util.Random;

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

public class BlockMalachiteGenerator implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId) {
        case 0 :
            generateSurface(world, random, chunkX*16, chunkZ*16);
            
        case -1 :
            generateNether(world, random, chunkX*16, chunkZ*16);
            
        case 1 :
            generateEnd(world, random, chunkX*16, chunkZ*16);
        }

        }
        


    private void generateSurface(World world, Random random, int x, int z) {
        addOreSpawn(Main.BlockMalachite, world, random, x, z, x+15, z+15, 90, 80, 1, 30);
    }
    
    private void generateNether(World world, Random random, int x, int z) {
 
}

private void generateEnd(World world, Random random, int x, int z) {

}

    private void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chanceToSpawn, int minY, int maxY) {
        for(int i = 80; i < chanceToSpawn; i++) {
            int posX = blockXPos + random.nextInt(maxX);
            int posY = minY + random.nextInt(maxY - minY);
            int posZ = blockZPos + random.nextInt(maxZ);
            (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
        }
    }
}
[merge_posts_bbcode]Добавлено: 17.04.2016 23:17:24[/merge_posts_bbcode]

Я такой веселый человек)код подправил нашел свою ошибку, даю возможность НОВИЧКАМ вот код берите я добрый сегодня)
Код:
package ru.ewokmod;

import java.util.Random;

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

public class BlockRed_CrystalGenerator implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        
        switch(world.provider.dimensionId){
        case -1:
            generateNether(world, random, chunkX*16,chunkZ*16);
        case 0 :
            generateSurface(world, random, chunkX*16,chunkZ*16);
        case 1:
            generateEnd(world, random, chunkX*16,chunkZ*16);
        }
    }
    
    private void generateNether(World world, Random random, int x, int y) {
        
    }
    
    private void generateSurface(World world, Random random, int x, int y) {
        this.addOreSpawn(Main.BlockRed_Crystal, world, random, x, y, 16, 16, 3+random.nextInt(3), 7, 0, 50);

    }
    
    private void generateEnd(World world, Random random, int x, int y) {
        
    }

    public void addOreSpawn(Block block, World world, Random random, int blockXPos, int blockZPos, int maxX, int maxZ, int maxVeinSize, int chancesToSpawn, int minY, int maxY) {
        for(int i = 0; i < chancesToSpawn; i++) {
            int posX = blockXPos + random.nextInt(maxX);
            int posY = minY + random.nextInt(maxY - minY);
            int posZ = blockZPos + random.nextInt(maxZ);
            (new WorldGenMinable(block, maxVeinSize)).generate(world, random, posX, posY, posZ);
        }
    }
}
Тему закрывайте, разобрался :cool:
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху