Possibly fixed a race condition NPE with panel models
This commit is contained in:
parent
6000203141
commit
e21684818f
|
@ -22,7 +22,6 @@ import blusunrize.immersiveengineering.api.IEApi;
|
|||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import malte0811.industrialWires.IndustrialWires;
|
||||
import malte0811.industrialWires.blocks.controlpanel.BlockTypes_Panel;
|
||||
import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
|
||||
import malte0811.industrialWires.blocks.controlpanel.TileEntityUnfinishedPanel;
|
||||
|
|
|
@ -32,17 +32,29 @@ import net.minecraft.util.ResourceLocation;
|
|||
import org.lwjgl.util.vector.Vector3f;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
public class RawModelFontRenderer extends FontRenderer {
|
||||
public static final ResourceLocation FONT = new ResourceLocation("minecraft", "textures/font/ascii.png");
|
||||
private static final Map<Thread, RawModelFontRenderer> instances = new WeakHashMap<>();
|
||||
float[] colorA = new float[4];
|
||||
private ImmutableList.Builder<RawQuad> builder = ImmutableList.builder();
|
||||
private final Vector3f normal = new Vector3f(0, 1, 0);
|
||||
public final float scale;
|
||||
public Matrix4 transform = null;
|
||||
|
||||
private TextureAtlasSprite sprite;
|
||||
private static TextureAtlasSprite sprite = null;
|
||||
|
||||
public RawModelFontRenderer(GameSettings settings, ResourceLocation font, TextureManager manager, boolean isUnicode, float scale) {
|
||||
public static RawModelFontRenderer get() {
|
||||
Thread current = Thread.currentThread();
|
||||
if (!instances.containsKey(current)) {
|
||||
instances.put(current, new RawModelFontRenderer(Minecraft.getMinecraft().gameSettings, FONT, Minecraft.getMinecraft().getTextureManager(),
|
||||
false, 1));
|
||||
}
|
||||
return instances.get(current);
|
||||
}
|
||||
private RawModelFontRenderer(GameSettings settings, ResourceLocation font, TextureManager manager, boolean isUnicode, float scale) {
|
||||
super(settings, font, manager, isUnicode);
|
||||
this.scale = scale / (9 * 16);
|
||||
onResourceManagerReload(null);
|
||||
|
@ -112,4 +124,4 @@ public class RawModelFontRenderer extends FontRenderer {
|
|||
protected void bindTexture(@Nonnull ResourceLocation location) {
|
||||
//NO-OP
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,14 +23,12 @@ import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
|
|||
import malte0811.industrialWires.client.RawQuad;
|
||||
import malte0811.industrialWires.client.gui.GuiPanelCreator;
|
||||
import malte0811.industrialWires.client.panelmodel.RawModelFontRenderer;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.nbt.NBTBase;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.nbt.NBTTagString;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
|
@ -41,9 +39,7 @@ import javax.annotation.Nullable;
|
|||
import java.util.List;
|
||||
|
||||
public class Label extends PanelComponent implements IConfigurableComponent {
|
||||
public static final ResourceLocation FONT = new ResourceLocation("minecraft", "textures/font/ascii.png");
|
||||
private String text = "Test";
|
||||
private RawModelFontRenderer renderer;
|
||||
private int color = 0x808080;
|
||||
|
||||
public Label(String text, int color) {
|
||||
|
@ -70,7 +66,7 @@ public class Label extends PanelComponent implements IConfigurableComponent {
|
|||
|
||||
@Override
|
||||
public List<RawQuad> getQuads() {
|
||||
RawModelFontRenderer render = fontRenderer();
|
||||
RawModelFontRenderer render = RawModelFontRenderer.get();
|
||||
render.drawString(text, 0, 0, 0xff000000 | color);
|
||||
return render.build();
|
||||
}
|
||||
|
@ -90,7 +86,7 @@ public class Label extends PanelComponent implements IConfigurableComponent {
|
|||
public AxisAlignedBB getBlockRelativeAABB() {
|
||||
if (aabb == null) {
|
||||
if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
|
||||
RawModelFontRenderer fr = fontRenderer();
|
||||
RawModelFontRenderer fr = RawModelFontRenderer.get();
|
||||
float width = fr.getStringWidth(text) * fr.scale;
|
||||
float height = fr.FONT_HEIGHT * fr.scale;
|
||||
aabb = new AxisAlignedBB(getX(), 0, getY(), getX() + width, 0, getY() + height);
|
||||
|
@ -120,14 +116,6 @@ public class Label extends PanelComponent implements IConfigurableComponent {
|
|||
return 0;
|
||||
}
|
||||
|
||||
private RawModelFontRenderer fontRenderer() {
|
||||
if (renderer == null) {
|
||||
renderer = new RawModelFontRenderer(Minecraft.getMinecraft().gameSettings, FONT, Minecraft.getMinecraft().getTextureManager(),
|
||||
false, 1);
|
||||
}
|
||||
return renderer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderInGUI(GuiPanelCreator gui) {
|
||||
int left = (int) (gui.getX0() + getX() * gui.panelSize);
|
||||
|
|
|
@ -24,7 +24,6 @@ import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
|
|||
import malte0811.industrialWires.client.RawQuad;
|
||||
import malte0811.industrialWires.client.gui.GuiPanelCreator;
|
||||
import malte0811.industrialWires.client.panelmodel.RawModelFontRenderer;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
|
@ -114,7 +113,7 @@ public class PanelMeter extends PanelComponent implements IConfigurableComponent
|
|||
PanelUtils.addColoredQuad(ret, new Vector3f(BORDER, antiZOffset, BORDER), new Vector3f(BORDER, antiZOffset, SIZE-BORDER),
|
||||
new Vector3f(width-BORDER, antiZOffset, SIZE-BORDER), new Vector3f(width-BORDER, antiZOffset, BORDER), EnumFacing.UP, WHITE);
|
||||
|
||||
RawModelFontRenderer r = fontRenderer();
|
||||
RawModelFontRenderer r = RawModelFontRenderer.get();
|
||||
r.transform = new Matrix4();
|
||||
for (int i = 0;i<=3;i++) {
|
||||
transformNumber(r.transform, 5*17*i);
|
||||
|
@ -134,15 +133,6 @@ public class PanelMeter extends PanelComponent implements IConfigurableComponent
|
|||
return ret;
|
||||
}
|
||||
|
||||
private RawModelFontRenderer renderer;
|
||||
private RawModelFontRenderer fontRenderer() {
|
||||
if (renderer == null) {
|
||||
renderer = new RawModelFontRenderer(Minecraft.getMinecraft().gameSettings, Label.FONT, Minecraft.getMinecraft().getTextureManager(),
|
||||
false, .5F);
|
||||
}
|
||||
return renderer;
|
||||
}
|
||||
|
||||
private void transformNumber(Matrix4 mat, int value) {
|
||||
if (wide) {
|
||||
transformNeedle(mat, value);
|
||||
|
|
Loading…
Reference in a new issue