Крафт 1.11+

Добрый день. Объясните, пожалуйста, подробно, как писать крафт на 1.11+
Читал. Но, не понял, что и как. 

P.S:За ранее спасибо за помощь.
P.S.S: Не знал, в какую тему писать, написал сюда. Если не туда, просьба перенести.
 
Что сложного?
GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE), "AP", 'A', Items.APPLE, 'P', Items.ROTTEN_FLESH);
Подробно - new ItemStack(Blocks.SANDSTONE) - это выходной блок.
"AP" - сетка крафта, входные блоки.
'A', Items.APPLE, 'P', Items.ROTTEN_FLESH - А это яблоко, P - это плоть.
Если ты положишь рядом яблоко и плоть - получишь песчаник.
 
Doc написал(а):
Что сложного?
GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE), "AP", 'A', Items.APPLE, 'P', Items.ROTTEN_FLESH);
Подробно - new ItemStack(Blocks.SANDSTONE) - это выходной блок.
"AP" - сетка крафта, входные блоки.
'A', Items.APPLE, 'P', Items.ROTTEN_FLESH - А это яблоко, P - это плоть.
Если ты положишь рядом яблоко и плоть - получишь песчаник.

Спасибо за ваш ответ, но у меня не работает... Еще хотелось бы узнать, "AP" - Сетка крафта. Тогда как, например, сделать, чтобы крафт происходил, только если предмет в левом нижнем углу сетки крафта?
P.S: Класс
public class RecipesRegister {
   public static void register(){
       GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE), "AP", 'A', Items.APPLE, 'P', Items.ROTTEN_FLESH);
   }
В ServerProxy в init прописал RecipesRegister.register();.
 
Представим это так:
GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE),
"APX",
"XXX",
"XXX",
'A', Items.APPLE,
'P', Items.ROTTEN_FLESH); - твой верстак
Вместо Х я предпочитаю ставить пробелы если у меня там ничего нету.
 
Thunder написал(а):
Представим это так:
GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE),
"APX",
"XXX",
"XXX",
'A', Items.APPLE,
'P', Items.ROTTEN_FLESH); - твой верстак
Вместо Х я предпочитаю ставить пробелы если у меня там ничего нету.
AP - Сетка крафта.  А далее? Можно использовать любые имена?
P.S: Не подскажете, почему у меня рецепт не работает? Выше есть пруф класа. Спасибо за ответ!
 
Сетка крафта это все эти три строки "APX", "XXX", "XXX". Вот так, например, можно задать 2х2 сетку "QW", "QW". Отдельная строка - строка в крафт сетке, символ - ячейка. После крафт сетки нужно последовательно указывать символ и то, что он означает (итем или блок). Символы можно использовать любые.
Скидывай сюда главный класс и прокси. В том, что у тебя сейчас ошибок не должно быть.
 
Dahaka написал(а):
Сетка крафта это все эти три строки "APX", "XXX", "XXX". Вот так, например, можно задать 2х2 сетку "QW", "QW". Отдельная строка - строка в крафт сетке, символ - ячейка. После крафт сетки нужно последовательно указывать символ и то, что он означает (итем или блок). Символы можно использовать любые.
Скидывай сюда главный класс и прокси. В том, что у тебя сейчас ошибок не должно быть.

RecipesRegister[/color]]
package ru.mcmodding.testmod.utils;

import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.registry.GameRegistry;


public class RecipesRegister {

   public static void register(){
       GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE), "AP", 'A', Items.APPLE, 'P', Items.ROTTEN_FLESH);
   }

}
ServerProxy[/color]]
package ru.mcmodding.testmod.proxy;

import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import ru.mcmodding.testmod.utils.RecipesRegister;

public class ServerProxy extends CommonProxy {

   @Override
   public void preInit(FMLPreInitializationEvent event) {
       super.preInit(event);
   }

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

       RecipesRegister.register();
   }

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

}
 
Я дал пример. Там где пустые ячейки все равно должно что-то быть, то ли просто пробел, то ли любой другой не используемый символ... вместо "AP" может быть "APX", "XXX", "XXX" или что угодно...
Представь себе верстак:
"XXX",
"XXX",
"XXX"
и у тебя в верхнем ряду в первой ячейке стоит A - в данном случае Apple, а во второй ячейке в том же ряду стоит P - rotten_flesh. А во всех остальных ячейках пусто, заполнили их иксами и получается:
"APX", "XXX", "XXX", отсюда и твой рецепт:
GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE),
"APX",
"XXX",
"XXX",
'A', Items.APPLE,
'P', Items.ROTTEN_FLESH);
 
ananacik написал(а):
Dahaka написал(а):
Сетка крафта это все эти три строки "APX", "XXX", "XXX". Вот так, например, можно задать 2х2 сетку "QW", "QW". Отдельная строка - строка в крафт сетке, символ - ячейка. После крафт сетки нужно последовательно указывать символ и то, что он означает (итем или блок). Символы можно использовать любые.
Скидывай сюда главный класс и прокси. В том, что у тебя сейчас ошибок не должно быть.

RecipesRegister[/color]]
package ru.mcmodding.testmod.utils;

import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.registry.GameRegistry;


public class RecipesRegister {

   public static void register(){
       GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE), "AP", 'A', Items.APPLE, 'P', Items.ROTTEN_FLESH);
   }

}
ServerProxy[/color]]
package ru.mcmodding.testmod.proxy;

import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import ru.mcmodding.testmod.utils.RecipesRegister;

public class ServerProxy extends CommonProxy {

   @Override
   public void preInit(FMLPreInitializationEvent event) {
       super.preInit(event);
   }

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

       RecipesRegister.register();
   }

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

}

Парень, открываю тебе секреты редактора - есть кнопочка "Код", в нее надо код вставлять, а не этот кошмар сюда пихать!
 
Maxik001 написал(а):
ananacik написал(а):
Dahaka написал(а):
Сетка крафта это все эти три строки "APX", "XXX", "XXX". Вот так, например, можно задать 2х2 сетку "QW", "QW". Отдельная строка - строка в крафт сетке, символ - ячейка. После крафт сетки нужно последовательно указывать символ и то, что он означает (итем или блок). Символы можно использовать любые.
Скидывай сюда главный класс и прокси. В том, что у тебя сейчас ошибок не должно быть.

RecipesRegister[/color]]
package ru.mcmodding.testmod.utils;

import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.registry.GameRegistry;


public class RecipesRegister {

   public static void register(){
       GameRegistry.addRecipe(new ItemStack(Blocks.SANDSTONE), "AP", 'A', Items.APPLE, 'P', Items.ROTTEN_FLESH);
   }

}
ServerProxy[/color]]
package ru.mcmodding.testmod.proxy;

import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import ru.mcmodding.testmod.utils.RecipesRegister;

public class ServerProxy extends CommonProxy {

   @Override
   public void preInit(FMLPreInitializationEvent event) {
       super.preInit(event);
   }

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

       RecipesRegister.register();
   }

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

}
Парень, открываю тебе секреты редактора - есть кнопочка "Код", в нее надо код вставлять, а не этот кошмар сюда пихать!

На будущее буду знать. Но теперь, почему мой код не работает?
 
Dahaka написал(а):
Главный класс скинь

Код:
package ru.mcmodding.testmod;

import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import ru.mcmodding.testmod.proxy.CommonProxy;

import static ru.mcmodding.testmod.TestMod.MODID;
import static ru.mcmodding.testmod.TestMod.VERSION;

@Mod(modid = MODID, version = VERSION)
public class TestMod {

    public static final String MODID = "testmod";
    public static final String VERSION = "1.0";

    @SidedProxy(clientSide = "ru.mcmodding.testmod.proxy.ClientProxy", serverSide = "ru.mcmodding.testmod.proxy.ServerProxy")
    public static CommonProxy proxy;

    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {
        // Преинициализация
        System.out.println("\u001B[32m" + "[Starting Test Mod PRE-INITIALIZATION]" + "\u001B[0m");
        proxy.preInit(event);
    }

    @EventHandler
    public void init(FMLInitializationEvent event) {
        // Инициализация
        System.out.println("\u001B[32m" + "[Starting Test Mod INITIALIZATION]" + "\u001B[0m");
        proxy.init(event);
    }


    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {
        // Инициализация
        System.out.println("\u001B[32m" + "[Starting Test Mod POST-INITIALIZATION]" + "\u001B[0m");
        proxy.postInit(event);
    }

}


Проблема решена. Нужно регистрировать в главном классе рецепты, а не в ServerProxy, как написано в теме Ivasik'a. Всем спасибо за помощь!
 
У Ивасика все нормально. Просто у него ServerProxy это CommonProxy, а у тебя нет. Кстати, я ему говорил, что это будет путать людей.
 
Dahaka написал(а):
У Ивасика все нормально. Просто у него ServerProxy это CommonProxy, а у тебя нет. Кстати, я ему говорил, что это будет путать людей.

Я тоже удивился когда увидел это. Но я всегда писал CommonProxy


Код:
"ru.mcmodding.testmod.proxy.ServerProxy")

   public static CommonProxy proxy;
Не обязательно в главном классе. Вот видишь тут, у тебя класс CommonProxy, а путь написан ServerProxy, который ты естественно не создал)
 
Ну почему же, у меня все 3 Proxy созданы. Кстати да, перенес в инициализацию CommonProxy, заработало)
 
Нахрен тебе три? Только два их. Клиент и сервер.И лишний (ServerProxy) удали, чтобы не путаться
 
Maxik001 написал(а):
Нахрен тебе три? Только два их. Клиент и сервер.И лишний (ServerProxy) удали, чтобы не путаться
Удалить ServerProxy? Т.е все вписывается в CommonProxy?
Тогда как же строка 
Код:
  @SidedProxy(clientSide = "ru.mcmodding.testmod.proxy.ClientProxy", serverSide = "ru.mcmodding.testmod.proxy.ServerProxy")
?
 
ananacik написал(а):
Maxik001 написал(а):
Нахрен тебе три? Только два их. Клиент и сервер.И лишний (ServerProxy) удали, чтобы не путаться
Удалить ServerProxy? Т.е все вписывается в CommonProxy?
Тогда как же строка 
Код:
  @SidedProxy(clientSide = "ru.mcmodding.testmod.proxy.ClientProxy", serverSide = "ru.mcmodding.testmod.proxy.ServerProxy")
?
Ты в этой строке указываешь какой объект класса должен создаться в зависимости от стороны. В данном случае у тебя сейчас при запуске клиента создастся ClientProxy, а при запуске выделенного сервера - ServerProxy. Обычно никому не нужно особых действий для выделенного сервера, поэтому классом ServerProxy пренебрегают и просто используют вместо него CommonProxy.
 
Назад
Сверху