Balcon's Weaponmodのアイテムモデル改変

テクスチャやMODの導入に関する質問はこちらでどうぞ!
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.307807)

Balcon's Weaponmodのアイテムモデル改変

投稿記事by ゲスト » 2017年9月15日(金) 10:52

MOD・テクスチャ制作経験のない全くの初心者ですが
Balkon's WeaponMod (v1.14.3)の一部テクスチャ&モデル変更を試みています。

テクスチャ作成はできたのですが、既存のモデルと形が若干異なり武器側面にテクスチャが表示されない状態となったため、モデル変更をしたいです。
マインクラフト用のモデリングソフト(TechneやFMCModeler)が起動できなかったり利用方法がよくわからなかったので、Blenderにて3Dモデル作成
をしてもみたのですが、そこからどのようにコードを書き出して、元のファイルに適応させればよいかがわかりません。
単純な変更なので、もしかしたら元のコードを少し変更したほうが早いのかもしれませんが…

具体的には、MOD内のHalberdとSpear(Javelinは変更なし)に適用したいです。
変更するクラスは下記のファイルだと思うので一応記載します。

■WeaponItemRenderer.class

package ckathode.weaponmod.render;

import ckathode.weaponmod.WeaponModResources.Textures;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
import org.lwjgl.opengl.GL11;

@SideOnly(Side.CLIENT)
public class WeaponItemRenderer
implements IItemRenderer
{
protected Minecraft mc;

public WeaponItemRenderer()
{
this.mc = FMLClientHandler.instance().getClient();
}

public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type)
{
return type == IItemRenderer.ItemRenderType.EQUIPPED;
}

public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper)
{
return false;
}

public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data)
{
Tessellator tess = Tessellator.field_78398_a;

EntityLivingBase entityliving = (EntityLivingBase)data[1];
IIcon icon = entityliving.func_70620_b(item, 0);

float t = 0.0625F;
renderItemIn2D(tess, icon.func_94212_f(), icon.func_94206_g(), icon.func_94209_e(), icon.func_94210_h(), icon.func_94211_a(), icon.func_94216_b(), t);
renderEnchantEffect(tess, item, 256, 256, t);
}

protected void renderItemIn2D(Tessellator tess, float texU0, float texV0, float texU1, float texV1, int iconwidth, int iconheight, float thickness)
{
tess.func_78382_b();
tess.func_78375_b(0.0F, 0.0F, 1.0F);
tess.func_78374_a(0.0D, 0.0D, 0.0D, texU0, texV1);
tess.func_78374_a(1.0D, 0.0D, 0.0D, texU1, texV1);
tess.func_78374_a(1.0D, 1.0D, 0.0D, texU1, texV0);
tess.func_78374_a(0.0D, 1.0D, 0.0D, texU0, texV0);

tess.func_78375_b(0.0F, 0.0F, -1.0F);
tess.func_78374_a(0.0D, 1.0D, 0.0F - thickness, texU0, texV0);
tess.func_78374_a(1.0D, 1.0D, 0.0F - thickness, texU1, texV0);
tess.func_78374_a(1.0D, 0.0D, 0.0F - thickness, texU1, texV1);
tess.func_78374_a(0.0D, 0.0D, 0.0F - thickness, texU0, texV1);

float f5 = iconwidth * (texU0 - texU1);
float f6 = iconheight * (texV1 - texV0);

tess.func_78375_b(-1.0F, 0.0F, 0.0F);
for (int k = 0; k < f5; k++)
{
float f7 = k / f5;
float f8 = texU0 + (texU1 - texU0) * f7 - 0.5F / iconwidth;
tess.func_78374_a(f7, 0.0D, 0.0F - thickness, f8, texV1);
tess.func_78374_a(f7, 0.0D, 0.0D, f8, texV1);
tess.func_78374_a(f7, 1.0D, 0.0D, f8, texV0);
tess.func_78374_a(f7, 1.0D, 0.0F - thickness, f8, texV0);
}
tess.func_78375_b(1.0F, 0.0F, 0.0F);
for (k = 0; k < f5; k++)
{
float f7 = k / f5;
float f8 = texU0 + (texU1 - texU0) * f7 - 0.5F / iconwidth;
float f9 = f7 + 1.0F / f5;
tess.func_78374_a(f9, 1.0D, 0.0F - thickness, f8, texV0);
tess.func_78374_a(f9, 1.0D, 0.0D, f8, texV0);
tess.func_78374_a(f9, 0.0D, 0.0D, f8, texV1);
tess.func_78374_a(f9, 0.0D, 0.0F - thickness, f8, texV1);
}
tess.func_78375_b(0.0F, 1.0F, 0.0F);
for (k = 0; k < f6; k++)
{
float f7 = k / f6;
float f8 = texV1 + (texV0 - texV1) * f7 - 0.5F / iconheight;
float f9 = f7 + 1.0F / f6;
tess.func_78374_a(0.0D, f9, 0.0D, texU0, f8);
tess.func_78374_a(1.0D, f9, 0.0D, texU1, f8);
tess.func_78374_a(1.0D, f9, 0.0F - thickness, texU1, f8);
tess.func_78374_a(0.0D, f9, 0.0F - thickness, texU0, f8);
}
tess.func_78375_b(0.0F, -1.0F, 0.0F);
for (k = 0; k < f6; k++)
{
float f7 = k / f6;
float f8 = texV1 + (texV0 - texV1) * f7 - 0.5F / iconheight;
tess.func_78374_a(1.0D, f7, 0.0D, texU1, f8);
tess.func_78374_a(0.0D, f7, 0.0D, texU0, f8);
tess.func_78374_a(0.0D, f7, 0.0F - thickness, texU0, f8);
tess.func_78374_a(1.0D, f7, 0.0F - thickness, texU1, f8);
}
tess.func_78381_a();
}

protected void renderEnchantEffect(Tessellator tess, ItemStack item, int iconwidth, int iconheight, float thickness)
{
if ((item != null) && (item.hasEffect(0)))
{
GL11.glDepthFunc(514);
GL11.glDisable(2896);
this.mc.field_71446_o.func_110577_a(WeaponModResources.Textures.ENCHANTMENT_GLINT);
GL11.glEnable(3042);
GL11.glBlendFunc(768, 1);
float var14 = 0.76F;
GL11.glColor4f(0.5F * var14, 0.25F * var14, 0.8F * var14, 1.0F);
GL11.glMatrixMode(5890);
GL11.glPushMatrix();
float var15 = 0.125F;
GL11.glScalef(var15, var15, var15);
float var16 = (float)(Minecraft.func_71386_F() % 3000L) / 3000.0F * 8.0F;
GL11.glTranslatef(var16, 0.0F, 0.0F);
GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F);
renderItemIn2D(tess, 0.0F, 0.0F, 1.0F, 1.0F, iconwidth, iconheight, thickness);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glScalef(var15, var15, var15);
var16 = (float)(Minecraft.func_71386_F() % 4873L) / 4873.0F * 8.0F;
GL11.glTranslatef(-var16, 0.0F, 0.0F);
GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F);
renderItemIn2D(tess, 0.0F, 0.0F, 1.0F, 1.0F, iconwidth, iconheight, thickness);
GL11.glPopMatrix();
GL11.glMatrixMode(5888);
GL11.glDisable(3042);
GL11.glEnable(2896);
GL11.glDepthFunc(515);
}
}
}


■RenderSpear.class

package ckathode.weaponmod.render;

import ckathode.weaponmod.WeaponModResources.Textures;
import ckathode.weaponmod.entity.projectile.EntitySpear;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.Entity;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;

public class RenderSpear
extends Render
{
public void renderSpear(EntitySpear entityarrow, double d, double d1, double d2, float f, float f1)
{
func_110777_b(entityarrow);
GL11.glPushMatrix();
GL11.glTranslatef((float)d, (float)d1, (float)d2);
GL11.glRotatef(entityarrow.field_70126_B + (entityarrow.field_70177_z - entityarrow.field_70126_B) * f1 - 90.0F, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(entityarrow.field_70127_C + (entityarrow.field_70125_A - entityarrow.field_70127_C) * f1, 0.0F, 0.0F, 1.0F);
Tessellator tess = Tessellator.field_78398_a;

float[] color = entityarrow.getMaterialColor();
int i = 0;
float f2 = 0.0F;
float f3 = 1.0F;
float f4 = (0 + i * 10) / 32.0F;
float f5 = (5 + i * 10) / 32.0F;
float f6 = 0.0F;
float f7 = 0.15625F;
float f8 = (5 + i * 10) / 32.0F;
float f9 = (10 + i * 10) / 32.0F;
float f13 = 0.3125F;
float f14 = 0.46875F;
float f10 = 0.05625F;

double length = 20.0D;

GL11.glEnable(32826);
float f11 = entityarrow.field_70249_b - f1;
if (f11 > 0.0F)
{
float f12 = -MathHelper.func_76126_a(f11 * 3.0F) * f11;
GL11.glRotatef(f12, 0.0F, 0.0F, 1.0F);
}
GL11.glRotatef(45.0F, 1.0F, 0.0F, 0.0F);
GL11.glScalef(f10, f10, f10);
GL11.glTranslatef(-4.0F, 0.0F, 0.0F);
GL11.glNormal3f(f10, 0.0F, 0.0F);
tess.func_78382_b();

tess.func_78374_a(-length, -2.0D, -2.0D, f6, f8);
tess.func_78374_a(-length, -2.0D, 2.0D, f7, f8);
tess.func_78374_a(-length, 2.0D, 2.0D, f7, f9);
tess.func_78374_a(-length, 2.0D, -2.0D, f6, f9);

tess.func_78381_a();

GL11.glNormal3f(-f10, 0.0F, 0.0F);
tess.func_78382_b();

tess.func_78374_a(-length, 2.0D, -2.0D, f6, f8);
tess.func_78374_a(-length, 2.0D, 2.0D, f7, f8);
tess.func_78374_a(-length, -2.0D, 2.0D, f7, f9);
tess.func_78374_a(-length, -2.0D, -2.0D, f6, f9);

tess.func_78381_a();
for (int j = 0; j < 4; j++)
{
GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
GL11.glNormal3f(0.0F, 0.0F, f10);
tess.func_78382_b();

tess.func_78386_a(1.0F, 1.0F, 1.0F);
tess.func_78374_a(-length, -2.0D, 0.0D, f2, f4);
tess.func_78374_a(length, -2.0D, 0.0D, f3, f4);
tess.func_78374_a(length, 2.0D, 0.0D, f3, f5);
tess.func_78374_a(-length, 2.0D, 0.0D, f2, f5);

tess.func_78386_a(color[0], color[1], color[2]);
tess.func_78374_a(-length, -2.0D, 0.0D, f2, f13);
tess.func_78374_a(length, -2.0D, 0.0D, f3, f13);
tess.func_78374_a(length, 2.0D, 0.0D, f3, f14);
tess.func_78374_a(-length, 2.0D, 0.0D, f2, f14);

tess.func_78381_a();
}
GL11.glDisable(32826);
GL11.glPopMatrix();
}

public void func_76986_a(Entity entity, double d, double d1, double d2, float f, float f1)
{
renderSpear((EntitySpear)entity, d, d1, d2, f, f1);
}

protected ResourceLocation func_110775_a(Entity entity)
{
return WeaponModResources.Textures.SPEAR;
}
}


■LongItemRenderer.class

package ckathode.weaponmod.render;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import org.lwjgl.opengl.GL11;

@SideOnly(Side.CLIENT)
public class LongItemRenderer
extends WeaponItemRenderer
{
public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data)
{
Tessellator tess = Tessellator.field_78398_a;

EntityLivingBase entityliving = (EntityLivingBase)data[1];
IIcon icon = entityliving.func_70620_b(item, 0);

GL11.glTranslatef(-0.5F, -0.5F, 0.0F);
GL11.glScalef(2.0F, 2.0F, 1.4F);

float t = 0.0625F;
renderItemIn2D(tess, icon.func_94212_f(), icon.func_94206_g(), icon.func_94209_e(), icon.func_94210_h(), icon.func_94211_a() * 16, icon.func_94216_b() * 16, t);
renderEnchantEffect(tess, item, 256, 256, t);
}
}


適用したいテクスチャも添付します。
無知で申し訳ないですが、変更するclassファイルも合っているか確かではないのでもし間違いがあれば指摘していただきたいです。
長く読みづらくなってしまいましたが、よろしくお願いいたします。
添付ファイル
long_weapons.png
long_weapons.png (4.5 KiB) 表示数: 361 回
ゲスト
ID:7eb55e70
 

  • (PostNo.307810)

Re: Balcon's Weaponmodのアイテムモデル改変

投稿記事by elise_blacklab » 2017年9月15日(金) 13:20

ゲスト さんが書きました:変更するクラスは下記のファイルだと思うので一応記載します。

今回はMITライセンスのため問題なさそうですが、ソースの改変やデコンパイルしたソースの扱いには十分注意してください。ライセンスによっては、デコンパイル自体が禁止されていたり、ソースの改変・転用に制限がある場合があります。

で、まずモデルclassをいじるには、jarファイルをちょいといじるだけではダメで、元のソースを入手して改変し、開発環境でビルドしなおすという作業が必要になりますが、その開発環境は整っていますか?
元のソースは一応下記にあります。
https://github.com/Ckathode/balkons-weaponmod
メイドつくってたりします.http://6docvc.net/
アバター
elise_blacklab
ID:0f87040f
掘り廃人
 
記事: 2436
登録日時: 2014年6月25日(水) 18:30

  • (PostNo.307959)

Re: Balcon's Weaponmodのアイテムモデル改変

投稿記事by zacco320 » 2017年9月18日(月) 00:40

返信ありがとうございます。
フォーラムからのメールがやっと届き、ユーザー登録できたためゲストではなくなりましたが質問者です。

ライセンスについては、ざっくりとしか確認していませんでした。
次回があればきちんと読み込もうと思います。

一応MOD開発環境に必要そうなForgeのソースファイル、JDK、Eclipseはダウンロードしました。
環境変数を変更後、GitHubの通りgradlew setupDecompWorkspaceを起動したのですが


D:\ユーザー名\Desktop\balkons-weaponmod-master>gradlew setupDecompWorkspace --stacktrace

FAILURE: Build failed with an exception.

* Where:
Build file 'D:\ユーザー名\Desktop\balkons-weaponmod-master\build.gradle' line: 65

* What went wrong:
A problem occurred evaluating root project 'balkons-weaponmod-master'.
> [Ljava/util/HashMap$Entry;

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'balkons-weaponmod-master'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:54)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:152)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:40)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:493)
at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:80)
at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:31)
at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:142)
at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
at org.gradle.launcher.Main.doAction(Main.java:46)
at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
at org.gradle.launcher.Main.main(Main.java:37)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:56)
Caused by: java.lang.NoClassDefFoundError: [Ljava/util/HashMap$Entry;
at build_7d749h9nr4c140ao30t4cvc6u6$_run_closure1.doCall(D:\ユーザー名\Desktop\balkons-weaponmod-master\build.gradle:65)
at build_7d749h9nr4c140ao30t4cvc6u6.run(D:\ユーザー名\Desktop\balkons-weaponmod-master\build.gradle:62)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:52)
... 33 more
Caused by: java.lang.ClassNotFoundException: java.util.HashMap$Entry
... 36 more


BUILD FAILED


となって失敗してしまいます。
対処法を教えてほしいです。
zacco320
ID:7eb55e70
水から上がったとこ
 
記事: 6
登録日時: 2017年9月16日(土) 02:25

  • (PostNo.308038)

Re: Balcon's Weaponmodのアイテムモデル改変

投稿記事by zacco320 » 2017年9月19日(火) 17:27

質問中でしたが、
Minecraft本体のバージョンを上げることにしたのと、対応しているBalkon's Weapon MODの様子を見て、
自分で 単純なMODを作ってみることにしました。
トピック投稿時ゲストユーザーだったので、名前の変更ができませんが
このトピックには返信不要です。
zacco320
ID:7eb55e70
水から上がったとこ
 
記事: 6
登録日時: 2017年9月16日(土) 02:25


Return to 質問:MOD/テクスチャ/その他ツール関係

x