Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Мод Разработка дополнения к IC2

Тема в разделе "Модификации клиента", создана пользователем StragaSevera, 21 июн 2014.

  1. Автор темы
    StragaSevera

    StragaSevera Новичок

    Баллы:
    6
    Имя в Minecraft:
    StragaSevera
    Здравствуйте, товарищи!
    Я потихоньку разрабатываю дополнение к IC2, связанное с отдельной веткой ядерных технологий. В процессе разработки мне потребовалось "залезть" в код IC2, и я не совсем понимаю, как это сделать.

    Собственно говоря, я хочу, чтобы урановая руда спавнилась в мире в 4 раза реже (у меня будут другие источники ее получения). Код, отвечающий за генерацию урановой руды в IC2:
    Код:
      public void generate(Random random1, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
      {
      // ...
        int baseHeight = getSeaLevel(world) + 1;
        int baseScale = Math.round(baseHeight * MainConfig.get().getFloat("worldgen/oreDensityFactor"));
      // ...
        if ((MainConfig.get().getBool("worldgen/uraniumOre")) && (Ic2Items.uraniumOre != null))
        {
          int baseCount = 20 * baseScale / 64;
          int count = (int)Math.round(random1.nextGaussian() * Math.sqrt(baseCount) + baseCount);
          for (int n = 0; n < count; n++)
          {
            int x = chunkX * 16 + random1.nextInt(16);
            int y = random1.nextInt(64 * baseHeight / 64);
            int z = chunkZ * 16 + random1.nextInt(16);
            new WorldGenMinable(StackUtil.getBlock(Ic2Items.uraniumOre), Ic2Items.uraniumOre.getItemDamage(), 3, Blocks.stone).generate(world, random1, x, y, z);
          }
        }
      // ...
      }
    Собственно говоря, я хочу в baseCount заменить 20 на 5. Просто подменить выражение в чужом джарнике мне не хочется, я хочу сделать это из своего мода. Заоверрайдить generate - тогда он вызовется два раза. Подменить конфиг IC2, постаив там worldgen/uraniumOre в false - мне кажется ректальным подходом.
    Подскажите, как правильно провернуть такую модификацию?
     
  2. Хостинг MineCraft
    <
  3. oleg57zls

    oleg57zls Старожил Пользователь

    Баллы:
    173
    Skype:
    BlayzerQ
    Имя в Minecraft:
    Blayzer
    Подключи IC2 к своему моду, с помощью API
     
  4. Автор темы
    StragaSevera

    StragaSevera Новичок

    Баллы:
    6
    Имя в Minecraft:
    StragaSevera
    Собственно, я уже решил проблему =-)
    Код:
        private static void overrideIC2()
        {
            Ic2Config = new Config("ic2 general config");
            File configFile = new File(new File(IC2.platform.getMinecraftDir(), "config"), "IC2.ini");
            try
            {
                if (configFile.exists()) {
                    Ic2Config.load(configFile);
                    Ic2Config.set("worldgen/uraniumOre", false);
                    Ic2Config.save(configFile);
                }
            }
            catch (Exception e)
            {
                throw new RuntimeException("Error loading user config", e);
            }
        }
     
  5. oleg57zls

    oleg57zls Старожил Пользователь

    Баллы:
    173
    Skype:
    BlayzerQ
    Имя в Minecraft:
    Blayzer
    Конфиг не практично. Легко включить можно.. если делать нормально, то лучше отключать или уменьшать генерацию прямо в самом моде.
     
  6. Defilak

    Defilak Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Defilak
  7. Sirse

    Sirse Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    Регистрируйте свой собственный генератор, отключайте генерацию руды в IC2:
    Код:
    ic2.core.IC2.enableWorldGenOreUranium = false;
    , генерируйте руду тем же методом, что и в оригинале, но с своими правками.
    Ну или байткод.
     

Поделиться этой страницей