Поиск…


Синтаксис

  • MODID = представляет Идентификатор MOD
  • MODPath = обозначает полный путь к каталогу в папке мод

замечания

Этот раздел должен содержать большинство использованных шаблонов / примеров и хорошо протестированный код для модификации приложения Minecraft с помощью кузницы. Возможно, это может заменить официальную документацию в один прекрасный день.

Схема реализации для инициализационных прокси

В этом примере показано, как реализовать прокси-классы для приложения Minecraft Mod, которые используются для инициализации вашего мода.

Прежде всего вам понадобится реализовать базовый класс CommonProxy.java, который содержит 3 главным образом используемый метод:

public class CommonProxy {
    public void preInit(FMLPreInitializationEvent e) {}
    public void init(FMLInitializationEvent e) {}
    public void postInit(FMLPostInitializationEvent e) {}
}

Обычно ваш мод имеет 2 разных пакета для кода клиента и сервера, поэтому вам понадобится в каждом пакете дочерний класс CommonProxy.java, например:

public class ClientProxy extends CommonProxy {    
    @Override
    public void preInit(FMLPreInitializationEvent e) {
        super.preInit(e);
    }

    @Override
    public void init(FMLInitializationEvent e) {
        super.init(e);    
    }

    @Override
    public void postInit(FMLPostInitializationEvent e) {
        super.postInit(e);
    }
}

и для сервера:

public class ServerProxy extends CommonProxy {
    @Override
    public void preInit(FMLPreInitializationEvent e) {
        super.preInit(e);
    }

    @Override
    public void init(FMLInitializationEvent e) {
        super.init(e);
    }

    @Override
    public void postInit(FMLPostInitializationEvent e) {
        super.postInit(e);
    }
}

После того, как вы создали эти классы, вы можете расширять их методами, которые должны выполняться только на стороне клиента или сервера, но также могут присоединяться к ним, если вы вызываете методы в классе «base».

Наконец, вы должны определить, какой прокси-сервер принимается во время выполнения. Вы должны расширить свой основной класс mod с @Mod аннотации @Mod , путем:

private static final String CLIENTPROXY = "com.yourpackage.client.ClientProxy";
private static final String SERVERPROXY = "com.yourpackage.client.ServerProxy";    

@SidedProxy(clientSide = CLIENTPROXY, serverSide = SERVERPROXY)
public static CommonProxy PROXY;

Это позволит Forge определить, какой класс следует выполнять во время выполнения. В методах инициализации вашего Mod теперь вы можете использовать это статическое свойство PROXY.

@EventHandler
public void init(FMLInitializationEvent event) {
    PROXY.init(event);
}

@Mod.EventHandler
public void preInit(FMLPreInitializationEvent event) {
    PROXY.preInit(event);
}

@EventHandler
public void postInit(FMLPostInitializationEvent event) {
    PROXY.postInit(event);
}

Добавление пользовательских звуков в ваш MOD

В этом примере показано, как вы добавляете новые звуки в ваш MOD и воспроизводите их. Прежде всего вам нужен звуковой файл, который имеет формат *.ogg . Любой другой формат не допускается приложением Minecraft и будет отклонен.

Звуковой файл имеет название: sound1.ogg

Поместите звуковой файл по следующему пути:

/YourPath/src/main/resources/assets/MODID/sounds/sound1.ogg

Замените «MODID» на идентификатор, определенный для вашего MOD

Затем вам нужно создать sounds.json в кодировке UTF-8 (Standard), которая определяет имя, ресурс и т. Д. Для вашего пользовательского звука. Этот файл будет выглядеть так:

{
  "sound1": {
    "category" : "player",
    "sounds": [{
        "name": "MODID:sound1",
        "stream": false
      }
    ]
  },
  "sound2": {
    "category" : "ambient",
    "sounds": [{
        "name": "MODID:subfolder/sound2",
        "stream": true
      }
    ]
  }
}

Как объяснение для этого sounds.json.

Определены 2 звуковых сигнала, так как я добавил пример, в котором вы можете исследовать, как добавлять многократные звуки. sound1 имеет player категории второй категории ambient что означает, что на громкость звука влияют настройки громкости, которые пользователь установил для звуков игрока / окружающего звучания. name является самым важным свойством, поскольку оно указывает на ресурс звука. MODID является идентификатором вашего MOD и является обязательным, так как приложение будет искать в ресурсах вашего мода для файла, иначе он будет искать в ресурсах Minecraft и ничего не найдет. Свойство stream означает, что звук будет передаваться из файловой системы, которая требуется только для звуков более 4 секунд.

Ваш пользовательский файл sounds.json должен пройти по следующему пути:

/YourPath/src/main/resources/assets/MODID/sounds.json

Теперь вы сможете загрузить звуки в реестр игры. Поэтому вам нужно создать класс, который инициализирует SoundEvent s и обрабатывает регистрацию.

public class SoundRegistrator {
    public static final SoundEvent SOUND_1;
    public static final SoundEvent SOUND_2;

    static {
        SOUND_1 = addSoundsToRegistry("sound1");
        SOUND_2 = addSoundsToRegistry("sound2");
    }

    private static SoundEvent addSoundsToRegistry(String soundId) {
        ResourceLocation shotSoundLocation = new ResourceLocation("MODID", soundId);
        SoundEvent soundEvent = new SoundEvent(shotSoundLocation);
        soundEvent.setRegistryName(shotSoundLocation);
        return soundEvent;
    }           
}

После этого вы должны создать SoundRegisterListener :

public class SoundRegisterListener {
        @SubscribeEvent(priority = EventPriority.NORMAL, receiveCanceled = true)
        public void registerSoundEvents(RegistryEvent.Register<SoundEvent> event) {
           event.getRegistry().registerAll(SoundRegistrator.SOUND_1,SoundRegistrator.SOUND_2);
        }   
}

и зарегистрируйте его в MinecraftForge.EVENT_BUS например:

MinecraftForge.EVENT_BUS.register(new SoundRegisterListener());

Наконец, вы сможете воспроизводить свои звуки:

void playSound(SoundEvent sound) {
    try {
        if (Minecraft.getMinecraft().world.isRemote) {
            EntityPlayerSP player = Minecraft.getMinecraft().player;
            Minecraft.getMinecraft().world.playSound(player, player.getPosition(), sound, SoundCategory.PLAYERS, RandomGenerator.getNextRandomVolumeLoud(), 1.0F);
        }
    } catch (Exception ex) {
       //Error happened
    }
}

Отправка команды

В этом примере показаны различные способы выполнения «команд» для Minecraft из кода:

EntityPlayerSP player = Minecraft.getMinecraft().player;
player.sendChatMessage("/Command here");

отправить команду в SinglePlayer



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow