所以我试图在 Minecraft 模组中制作一个电缆系统,这显然需要能够连接/断开其他电缆。目前我只致力于美观,因此想更改是否显示电线的每个部分。 我的电线模型是用 Techne(一个 Minecraft 建模程序,您可以在其中逐个构建模型)制作的,由 7 个部分组成(核心以及上、下、北、南、东、西)。当前,当首次实例化模型时,可以使用每个方向的 boolean 值来切换它们(我不需要切换核心):
public RenderCable()
{
this.modelCable = new ModelCableAll(true, true, true, false, false, false);
}
这样做的问题是状态只能通过重新启动游戏来更改,那么我如何实时更新状态/编辑现有实例/重新制作模型实例?
这是整个类(class):
package foodTech.tileEntities.render;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import foodTech.tileEntities.models.cable.ModelCableAll;
public class RenderCable extends TileEntitySpecialRenderer {
ResourceLocation textureOff = (new ResourceLocation("roboguy99:textures/models/cableOff.png"));
ResourceLocation textureOn = (new ResourceLocation("roboguy99:textures/models/cableOn.png"));
private final ModelCableAll modelCable;
public RenderCable()
{
this.modelCable = new ModelCableAll(false, false, false, false, false, false);
}
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float scale)
{
GL11.glTranslatef((float) x + 0.5F, (float) y - 0.5F, (float) z + 0.5F);
setConnections();
GL11.glTranslatef((float) x - 0.5F, (float) y + 0.5F, (float) z - 0.5F);
}
public void setConnections()
{
GL11.glPushMatrix();
Minecraft.getMinecraft().renderEngine.bindTexture(textureOff);
this.modelCable.render((Entity)null, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
GL11.glPopMatrix();
}
}
最佳答案
创建一个 setter 。
public void setModelCable(ModelCable other) {
this.modelCable = other;
}
在你的情况下,你可能只是想暴露
public void setPartXVisibility(boolean visible) {
this.modelCable.setPartXVisibility(visible);
}
此时我的 Minecraft 知识就停止了 - 作为 setter 的一部分,您可能需要通知 UI 此更改或类似 MVC 的内容。
关于java - 重新初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743631/