mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-02-24 06:50:46 +00:00
preview render thing
This commit is contained in:
parent
6b34f06324
commit
9a955245cb
@ -13,6 +13,8 @@
|
|||||||
* The nuclear flash now bypasses radiation resistance, being only affected by blocks and distance
|
* The nuclear flash now bypasses radiation resistance, being only affected by blocks and distance
|
||||||
* Mushroom clouds' initial scale is now based on the total scale instead of all spawning roughly at the same size, causing fireballs to be comically small for huge bombs
|
* Mushroom clouds' initial scale is now based on the total scale instead of all spawning roughly at the same size, causing fireballs to be comically small for huge bombs
|
||||||
* Removed the old mining drill, combustion generator, old watz core, structure marker, all old large reactor parts and CMB furnace for good
|
* Removed the old mining drill, combustion generator, old watz core, structure marker, all old large reactor parts and CMB furnace for good
|
||||||
|
* Chemical plants will now eject all their outputs within a single tick if possible, increasing the throughput of fast recipes with many outputs, like asphalt
|
||||||
|
* Hitting CTRL + ALT when hovering over an item now displays a preview of that item. Useful if you want to get authentic renders for a wiki, or just like staring at things.
|
||||||
|
|
||||||
## Fixed
|
## Fixed
|
||||||
* Fixed a rare crash caused by radars force-loading chunks conflicting with certain mods' chunk loading changes
|
* Fixed a rare crash caused by radars force-loading chunks conflicting with certain mods' chunk loading changes
|
||||||
|
|||||||
110
src/main/java/com/hbm/inventory/gui/GUIScreenPreview.java
Normal file
110
src/main/java/com/hbm/inventory/gui/GUIScreenPreview.java
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
package com.hbm.inventory.gui;
|
||||||
|
|
||||||
|
import org.lwjgl.input.Mouse;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
import org.lwjgl.opengl.GL12;
|
||||||
|
|
||||||
|
import com.hbm.lib.RefStrings;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
|
import net.minecraft.client.gui.ScaledResolution;
|
||||||
|
import net.minecraft.client.renderer.OpenGlHelper;
|
||||||
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
|
||||||
|
public class GUIScreenPreview extends GuiScreen {
|
||||||
|
|
||||||
|
protected static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/nei/gui_nei.png");
|
||||||
|
protected ItemStack preview;
|
||||||
|
protected int zoom = 1;
|
||||||
|
|
||||||
|
public GUIScreenPreview(ItemStack stack) {
|
||||||
|
this.preview = stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawScreen(int mouseX, int mouseY, float f) {
|
||||||
|
|
||||||
|
if(this.mc.theWorld != null) {
|
||||||
|
this.drawRect(0, 0, this.width, this.height, 0xFFC6C6C6);
|
||||||
|
} else {
|
||||||
|
this.drawBackground(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!Mouse.isButtonDown(0) && !Mouse.isButtonDown(1) && Mouse.next()) {
|
||||||
|
int scroll = Mouse.getEventDWheel();
|
||||||
|
|
||||||
|
if(scroll < 0 && this.zoom > 1) this.zoom--;
|
||||||
|
if(scroll > 0 && this.zoom < 15) this.zoom++;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
|
||||||
|
GL11.glDisable(GL11.GL_LIGHTING);
|
||||||
|
this.drawGuiContainerForegroundLayer(mouseX, mouseY);
|
||||||
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
|
this.mc.getTextureManager().bindTexture(texture);
|
||||||
|
ScaledResolution res = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight);
|
||||||
|
GL11.glScaled(zoom, zoom, zoom);
|
||||||
|
this.drawTexturedModalRect(res.getScaledWidth_double() / 2D / zoom - 9D, res.getScaledHeight_double() / 2D / zoom - 9D, 5, 87, 18, 18);
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
|
||||||
|
this.fontRendererObj.drawString("Zoom: " + zoom, 2, this.height - 20, 0xff0000);
|
||||||
|
this.fontRendererObj.drawString("Windows Scale: " + res.getScaleFactor(), 2, this.height - 10, 0xff0000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void drawTexturedModalRect(double x, double y, int sourceX, int sourceY, int sizeX, int sizeY) {
|
||||||
|
double f = 0.00390625D;
|
||||||
|
double f1 = 0.00390625D;
|
||||||
|
Tessellator tessellator = Tessellator.instance;
|
||||||
|
tessellator.startDrawingQuads();
|
||||||
|
tessellator.addVertexWithUV((double) (x + 0), (double) (y + sizeY), (double) this.zLevel, (double) ((float) (sourceX + 0) * f), (double) ((float) (sourceY + sizeY) * f1));
|
||||||
|
tessellator.addVertexWithUV((double) (x + sizeX), (double) (y + sizeY), (double) this.zLevel, (double) ((float) (sourceX + sizeX) * f), (double) ((float) (sourceY + sizeY) * f1));
|
||||||
|
tessellator.addVertexWithUV((double) (x + sizeX), (double) (y + 0), (double) this.zLevel, (double) ((float) (sourceX + sizeX) * f), (double) ((float) (sourceY + 0) * f1));
|
||||||
|
tessellator.addVertexWithUV((double) (x + 0), (double) (y + 0), (double) this.zLevel, (double) ((float) (sourceX + 0) * f), (double) ((float) (sourceY + 0) * f1));
|
||||||
|
tessellator.draw();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
|
||||||
|
|
||||||
|
if(preview == null) return;
|
||||||
|
|
||||||
|
GL11.glPushMatrix();
|
||||||
|
RenderHelper.enableGUIStandardItemLighting();
|
||||||
|
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
|
||||||
|
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||||
|
|
||||||
|
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||||
|
GL11.glEnable(GL11.GL_LIGHTING);
|
||||||
|
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
GL11.glScaled(zoom, zoom, zoom);
|
||||||
|
|
||||||
|
ScaledResolution res = new ScaledResolution(this.mc, this.mc.displayWidth, this.mc.displayHeight);
|
||||||
|
GL11.glTranslated(res.getScaledWidth_double() / 2D / zoom, res.getScaledHeight_double() / 2D / zoom, -200);
|
||||||
|
|
||||||
|
this.zLevel = 200.0F;
|
||||||
|
itemRender.zLevel = 200.0F;
|
||||||
|
|
||||||
|
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
||||||
|
itemRender.renderItemAndEffectIntoGUI(this.fontRendererObj, this.mc.getTextureManager(), preview, -8, -8);
|
||||||
|
itemRender.renderItemOverlayIntoGUI(this.fontRendererObj, this.mc.getTextureManager(), preview, -8, -8, null);
|
||||||
|
|
||||||
|
itemRender.zLevel = 0.0F;
|
||||||
|
this.zLevel = 0.0F;
|
||||||
|
|
||||||
|
GL11.glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void keyTyped(char c, int key) {
|
||||||
|
if(key == 1 || key == this.mc.gameSettings.keyBindInventory.getKeyCode()) {
|
||||||
|
this.mc.thePlayer.closeScreen();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -34,6 +34,7 @@ import com.hbm.interfaces.IItemHUD;
|
|||||||
import com.hbm.interfaces.Spaghetti;
|
import com.hbm.interfaces.Spaghetti;
|
||||||
import com.hbm.inventory.RecipesCommon.ComparableStack;
|
import com.hbm.inventory.RecipesCommon.ComparableStack;
|
||||||
import com.hbm.inventory.gui.GUIArmorTable;
|
import com.hbm.inventory.gui.GUIArmorTable;
|
||||||
|
import com.hbm.inventory.gui.GUIScreenPreview;
|
||||||
import com.hbm.items.ISyncButtons;
|
import com.hbm.items.ISyncButtons;
|
||||||
import com.hbm.items.ModItems;
|
import com.hbm.items.ModItems;
|
||||||
import com.hbm.items.armor.ArmorFSB;
|
import com.hbm.items.armor.ArmorFSB;
|
||||||
@ -931,40 +932,28 @@ public class ModEventHandlerClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mc.currentScreen instanceof GuiContainer && Keyboard.isKeyDown(Keyboard.KEY_F1)) {
|
if(Keyboard.isKeyDown(Keyboard.KEY_F1)) {
|
||||||
|
|
||||||
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
|
|
||||||
int width = scaledresolution.getScaledWidth();
|
|
||||||
int height = scaledresolution.getScaledHeight();
|
|
||||||
int mouseX = Mouse.getX() * width / mc.displayWidth;
|
|
||||||
int mouseY = height - Mouse.getY() * height / mc.displayHeight - 1;
|
|
||||||
|
|
||||||
GuiContainer container = (GuiContainer) mc.currentScreen;
|
ItemStack stack = getMouseOverStack();
|
||||||
|
if(stack != null) {
|
||||||
for(Object o : container.inventorySlots.inventorySlots) {
|
ComparableStack comp = new ComparableStack(stack).makeSingular();
|
||||||
Slot slot = (Slot) o;
|
CanneryBase cannery = Jars.canneries.get(comp);
|
||||||
|
if(cannery != null) {
|
||||||
if(slot.getHasStack()) {
|
FMLCommonHandler.instance().showGuiScreen(new GuiWorldInAJar(cannery.createScript(), cannery.getName(), cannery.getIcon(), cannery.seeAlso()));
|
||||||
try {
|
|
||||||
Method isMouseOverSlot = ReflectionHelper.findMethod(GuiContainer.class, container, new String[] {"func_146981_a", "isMouseOverSlot"}, Slot.class, int.class, int.class);
|
|
||||||
|
|
||||||
if((boolean) isMouseOverSlot.invoke(container, slot, mouseX, mouseY)) {
|
|
||||||
|
|
||||||
ComparableStack comp = new ComparableStack(slot.getStack()).makeSingular();
|
|
||||||
CanneryBase cannery = Jars.canneries.get(comp);
|
|
||||||
|
|
||||||
if(cannery != null) {
|
|
||||||
FMLCommonHandler.instance().showGuiScreen(new GuiWorldInAJar(cannery.createScript(), cannery.getName(), cannery.getIcon(), cannery.seeAlso()));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} catch(Exception ex) { }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) && Keyboard.isKeyDown(Keyboard.KEY_LMENU)) {
|
||||||
|
|
||||||
|
ItemStack stack = getMouseOverStack();
|
||||||
|
if(stack != null) {
|
||||||
|
stack = stack.copy();
|
||||||
|
stack.stackSize = 1;
|
||||||
|
FMLCommonHandler.instance().showGuiScreen(new GUIScreenPreview(stack));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(event.phase == Phase.START) {
|
if(event.phase == Phase.START) {
|
||||||
EntityPlayer player = mc.thePlayer;
|
EntityPlayer player = mc.thePlayer;
|
||||||
|
|
||||||
@ -985,6 +974,38 @@ public class ModEventHandlerClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ItemStack getMouseOverStack() {
|
||||||
|
|
||||||
|
Minecraft mc = Minecraft.getMinecraft();
|
||||||
|
if(mc.currentScreen instanceof GuiContainer) {
|
||||||
|
|
||||||
|
ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
|
||||||
|
int width = scaledresolution.getScaledWidth();
|
||||||
|
int height = scaledresolution.getScaledHeight();
|
||||||
|
int mouseX = Mouse.getX() * width / mc.displayWidth;
|
||||||
|
int mouseY = height - Mouse.getY() * height / mc.displayHeight - 1;
|
||||||
|
|
||||||
|
GuiContainer container = (GuiContainer) mc.currentScreen;
|
||||||
|
|
||||||
|
for(Object o : container.inventorySlots.inventorySlots) {
|
||||||
|
Slot slot = (Slot) o;
|
||||||
|
|
||||||
|
if(slot.getHasStack()) {
|
||||||
|
try {
|
||||||
|
Method isMouseOverSlot = ReflectionHelper.findMethod(GuiContainer.class, container, new String[] {"func_146981_a", "isMouseOverSlot"}, Slot.class, int.class, int.class);
|
||||||
|
|
||||||
|
if((boolean) isMouseOverSlot.invoke(container, slot, mouseX, mouseY)) {
|
||||||
|
return slot.getStack();
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch(Exception ex) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
@SubscribeEvent(priority = EventPriority.LOWEST)
|
@SubscribeEvent(priority = EventPriority.LOWEST)
|
||||||
public void onClientTickLast(ClientTickEvent event) {
|
public void onClientTickLast(ClientTickEvent event) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user