Ох, я даже на форуме зарегистрировался))) ( писал через Faik-man, я у них модели клепаю) Так вот:East написал(а):Сделал такое же ведро в Blender.
Но не вижу возможности экспортировать в java. Скажите это возможно?
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class ТвойРендер extends TileEntitySpecialRenderer {
public static final ResourceLocation textures = new ResourceLocation("текстура от obj файла (её надо делать в 3д моделлере");
public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же
/**
* Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
* handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
* (Render<T extends Entity) and this method has signature public void func_76986_a(T entity, double d, double d1,
* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
*/
public void doRender(TileEntity p_76986_1_, double p_76986_2_, double p_76986_4_, double p_76986_6_, float p_76986_8_, float p_76986_9_)
{
RenderHelper.disableStandardItemLighting();
GL11.glPushMatrix();
GL11.glTranslatef((float)p_76986_2_+0.5F, (float)p_76986_4_, (float)p_76986_6_+0.5F);
this.bindTexture(textures);
model.renderAll();
GL11.glPopMatrix();
RenderHelper.enableStandardItemLighting();
}
/**
* Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture.
*/
protected ResourceLocation getEntityTexture(TileEntity p_110775_1_)
{
return textures;
}
@Override
public void renderTileEntityAt(TileEntity p_147500_1_, double p_147500_2_,
double p_147500_4_, double p_147500_6_, float p_147500_8_) {
if(p_147500_1_.getWorldObj().getBlockMetadata(p_147500_1_.xCoord, p_147500_1_.yCoord, p_147500_1_.zCoord) == 0)
this.doRender((TileEntity) p_147500_1_, p_147500_2_, p_147500_4_, p_147500_6_, p_147500_8_, 0);
}
}
С чего вы взяли, что материалы вообще будут как-то обрабатываться? Обрабатываются только obj и текстура, поэтому в файле материалов нет надобности.FanKar написал(а):Код:public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же
И в чем заключается "перфекционизм" при забрасывании в ресурсы мода ненужного файла, который будет занимать лишнее место, не много конечно, но все таки?FanKar написал(а):Нету, но ради "эстетичности" и перфеционизма я бы так сделал.
Упс.. сорян)timaxa007 написал(а):
MinecraftForgeClient.registerItemRenderer(арг1, арг2)
public static final ResourceLocation textures = new ResourceLocation("test:textures/blocks/Test.png");//("test:textures/blocks/Test.png");//(".assets/test/textures/blocks/Test.png");//("test:blocks/Test.png");
// Эта строка с ошибкой loadModel не принимает аргумент такого типа
//public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же
public static final IModelCustom model = AdvancedModelLoader.loadModel("test:textures/blocks/Test.obj");//("test:textures/blocks/Test.obj");//(".assets/test/textures/blocks/Test.obj");//("test:blocks/Test.obj"); //MTL файл должен быть там же
public static ResourceLocation textures;
// Эта строка с ошибкой loadModel не принимает аргумент такого типа
//public static final IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("путь до obj файла")); //MTL файл должен быть там же
public static IModelCustom model;
public TestBlockRender() {
textures = new ResourceLocation("test:textures/blocks/Test.png");//("test:textures/blocks/Test.png");//(".assets/test/textures/blocks/Test.png");//("test:blocks/Test.png");
model = AdvancedModelLoader.loadModel(new ResourceLocation("test:textures/blocks/Test.obj"));//("test:textures/blocks/Test.obj");//(".assets/test/textures/blocks/Test.obj");//("test:blocks/Test.obj"); //MTL файл должен быть там же
}
super.init();
clientSide = "test.proxies.Core"
clientSide = "test.proxies.Client"
public static final IModelCustom model = AdvancedModelLoader.loadModel("test:textures/blocks/Test.obj");
public static final IModelCustom model = AdvancedModelLoader.loadModel("/assets/test/textures/blocks/Test.obj");
Это печально(timaxa007 написал(а):Faik-man У него 1.6.4, в 1.6.4 не используется ResourceLocation для AdvancedModelLoader.loadModel.
Да спасибо я видел Ваш комментарий и вначале я так и делал. Но большое количество неудачных попыток заставило меня перестраховаться и я закинул в проект и mtl-файл на всякий случай. После удачной попытки я бы попробовал бы этот файл убрать и скомпилировать без него.Faik-man написал(а):Эм, как я уже говорил ранее в теме, нужно убрать файл .mtl. Необходимости в нем нет
timaxa007 написал(а):Faik-man У него 1.6.4, в 1.6.4 не используется ResourceLocation для AdvancedModelLoader.loadModel.
Исправил и всё получилось! Просто невероятно после стольких неудач увиеть свою модель в игре. Огромное спасибо! Чуть позже скину в тему рабочий архив для примера.timaxa007 написал(а):East
1. У тебя в @SidedProxy:
А должно:Код:clientSide = "test.proxies.Core"
2. Регистрировать на 1.6.х в "FMLInitializationEvent", а не "FMLPreInitializationEvent".Код:clientSide = "test.proxies.Client"
3.У тебя:
Должно:Код:public static final IModelCustom model = AdvancedModelLoader.loadModel("test:textures/blocks/Test.obj");
---Код:public static final IModelCustom model = AdvancedModelLoader.loadModel("/assets/test/textures/blocks/Test.obj");