mirror of
https://github.com/GTNewHorizons/waila.git
synced 2026-11-15 01:25:16 +00:00
Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
144259660c | ||
|
|
130bea079b | ||
|
|
e5dc3faa28 | ||
|
|
f85783468b |
No files matched your search
@@ -6,6 +6,7 @@ dependencies {
|
||||
shadowImplementation('au.com.bytecode:opencsv:2.4')
|
||||
|
||||
compileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.52.463:dev") { transitive = false }
|
||||
compileOnly("com.github.GTNewHorizons:Dashboard:1.0.2:api")
|
||||
|
||||
runtimeOnlyNonPublishable("com.github.GTNewHorizons:WAILAPlugins:0.7.2:dev") {
|
||||
exclude group: 'com.github.GTNewHorizons', module: 'waila'
|
||||
|
||||
@@ -29,17 +29,19 @@ import mcp.mobius.waila.client.KeyEvent;
|
||||
import mcp.mobius.waila.commands.CommandDumpHandlers;
|
||||
import mcp.mobius.waila.network.NetworkHandler;
|
||||
import mcp.mobius.waila.network.WailaPacketHandler;
|
||||
import mcp.mobius.waila.overlay.DashboardHud;
|
||||
import mcp.mobius.waila.overlay.DecoratorRenderer;
|
||||
import mcp.mobius.waila.overlay.OverlayConfig;
|
||||
import mcp.mobius.waila.overlay.WailaTickHandler;
|
||||
import mcp.mobius.waila.server.ProxyServer;
|
||||
import mcp.mobius.waila.utils.LoadedMods;
|
||||
import mcp.mobius.waila.utils.ModIdentification;
|
||||
|
||||
@Mod(
|
||||
modid = "Waila",
|
||||
name = "Waila",
|
||||
version = Tags.GRADLETOKEN_VERSION,
|
||||
dependencies = "after:NotEnoughItems@[1.0.4.0,)",
|
||||
dependencies = "after:NotEnoughItems@[1.0.4.0,);after:dashboard@[1.0.2,)",
|
||||
acceptableRemoteVersions = "*",
|
||||
guiFactory = "mcp.mobius.waila.client.WailaGuiFactory")
|
||||
public class Waila {
|
||||
@@ -69,6 +71,7 @@ public class Waila {
|
||||
MinecraftForge.EVENT_BUS.register(new DecoratorRenderer());
|
||||
FMLCommonHandler.instance().bus().register(new KeyEvent());
|
||||
FMLCommonHandler.instance().bus().register(new WailaTickHandler());
|
||||
if (LoadedMods.DASHBOARD) DashboardHud.register();
|
||||
}
|
||||
FMLCommonHandler.instance().bus().register(new NetworkHandler());
|
||||
}
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
package mcp.mobius.waila.overlay;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumChatFormatting;
|
||||
|
||||
import com.gtnewhorizons.dashboard.api.HudBounds;
|
||||
import com.gtnewhorizons.dashboard.api.HudElement;
|
||||
import com.gtnewhorizons.dashboard.api.HudRegistry;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
/**
|
||||
* Lets players move, resize and hide the info box in Dashboard's HUD editor. The only class using Dashboard, so only
|
||||
* call it while Dashboard is loaded.
|
||||
*/
|
||||
@SideOnly(Side.CLIENT)
|
||||
public final class DashboardHud {
|
||||
|
||||
private static final long SAMPLE_REUSE_MILLIS = 1000;
|
||||
|
||||
private static final HudElement INFO_BOX = new HudElement("waila:info_box", DashboardHud::getBounds)
|
||||
.setOwnSettings("dashboard.element.waila.info_box.own_settings", "waila.keybind.wailaconfig");
|
||||
|
||||
private static Tooltip sample;
|
||||
private static long lastSampleTime;
|
||||
|
||||
/** The box drawn last, before scaling, so the element follows its size and Waila's position setting. */
|
||||
private static boolean boxDrawn;
|
||||
private static int boxX;
|
||||
private static int boxY;
|
||||
private static int boxWidth;
|
||||
private static int boxHeight;
|
||||
|
||||
private DashboardHud() {}
|
||||
|
||||
public static void register() {
|
||||
INFO_BOX.setPreview((screenWidth, screenHeight) -> OverlayRenderer.drawPreview(getSample()));
|
||||
HudRegistry.register(INFO_BOX);
|
||||
}
|
||||
|
||||
/** The mod that drew the box, if not Waila, is shown next to Waila's name in the editor. */
|
||||
static boolean beginBox(String drawnBy, int x, int y, int width, int height) {
|
||||
INFO_BOX.setModNameAddon(drawnBy);
|
||||
boxDrawn = true;
|
||||
boxX = x;
|
||||
boxY = y;
|
||||
boxWidth = width;
|
||||
boxHeight = height;
|
||||
return HudRegistry.beginRender(INFO_BOX);
|
||||
}
|
||||
|
||||
static void endBox() {
|
||||
HudRegistry.endRender();
|
||||
}
|
||||
|
||||
/**
|
||||
* The same sample is kept while the editor is open, since a box drawn by another mod may start over for every new
|
||||
* one. A new one is made after a break, so it follows changed Waila settings.
|
||||
*/
|
||||
private static Tooltip getSample() {
|
||||
long now = System.currentTimeMillis();
|
||||
if (sample == null || now - lastSampleTime > SAMPLE_REUSE_MILLIS) {
|
||||
sample = createSample();
|
||||
}
|
||||
lastSampleTime = now;
|
||||
return sample;
|
||||
}
|
||||
|
||||
/** Stone, like looking at a block. */
|
||||
private static Tooltip createSample() {
|
||||
ItemStack stone = new ItemStack(Blocks.stone);
|
||||
return new Tooltip(
|
||||
Arrays.asList(
|
||||
EnumChatFormatting.WHITE + stone.getDisplayName(),
|
||||
EnumChatFormatting.BLUE.toString() + EnumChatFormatting.ITALIC + "Minecraft"),
|
||||
stone);
|
||||
}
|
||||
|
||||
/** Before the first box is drawn, the sample's place and size. */
|
||||
private static HudBounds getBounds(int screenWidth, int screenHeight) {
|
||||
if (!boxDrawn) {
|
||||
if (sample == null) {
|
||||
sample = createSample();
|
||||
}
|
||||
return getBounds(sample.x, sample.y, sample.w + 1, sample.h + 1);
|
||||
}
|
||||
return getBounds(boxX, boxY, boxWidth, boxHeight);
|
||||
}
|
||||
|
||||
private static HudBounds getBounds(int x, int y, int width, int height) {
|
||||
float scale = OverlayConfig.scale;
|
||||
return new HudBounds(
|
||||
Math.round(x * scale),
|
||||
Math.round(y * scale),
|
||||
Math.round(width * scale),
|
||||
Math.round(height * scale));
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import mcp.mobius.waila.api.impl.ConfigHandler;
|
||||
import mcp.mobius.waila.utils.LoadedMods;
|
||||
|
||||
public class OverlayRenderer {
|
||||
|
||||
@@ -37,7 +38,32 @@ public class OverlayRenderer {
|
||||
}
|
||||
}
|
||||
|
||||
/** Draws a sample box, for previews like a HUD editor's. */
|
||||
static void drawPreview(Tooltip tooltip) {
|
||||
doRenderOverlay(tooltip);
|
||||
}
|
||||
|
||||
/**
|
||||
* Call right before drawing the info box, with its place and size before scaling, also when another mod draws the
|
||||
* box. Lets a HUD editor move, resize or hide it. False means the box is hidden, so skip drawing it and do not call
|
||||
* {@link #endBox()}.
|
||||
*/
|
||||
public static boolean beginBox(int x, int y, int width, int height) {
|
||||
return beginBox(null, x, y, width, height);
|
||||
}
|
||||
|
||||
/** Like {@link #beginBox(int, int, int, int)}, for a mod that draws the box itself, so a HUD editor can name it. */
|
||||
public static boolean beginBox(String drawnBy, int x, int y, int width, int height) {
|
||||
return !LoadedMods.DASHBOARD || DashboardHud.beginBox(drawnBy, x, y, width, height);
|
||||
}
|
||||
|
||||
/** Call right after drawing the info box, only if {@link #beginBox} returned true. */
|
||||
public static void endBox() {
|
||||
if (LoadedMods.DASHBOARD) DashboardHud.endBox();
|
||||
}
|
||||
|
||||
private static void doRenderOverlay(Tooltip tooltip) {
|
||||
if (!beginBox(tooltip.x, tooltip.y, tooltip.w + 1, tooltip.h + 1)) return;
|
||||
|
||||
GL11.glPushMatrix();
|
||||
saveGLState();
|
||||
@@ -74,7 +100,7 @@ public class OverlayRenderer {
|
||||
|
||||
loadGLState();
|
||||
GL11.glPopMatrix();
|
||||
|
||||
endBox();
|
||||
}
|
||||
|
||||
private static void saveGLState() {
|
||||
|
||||
@@ -8,4 +8,5 @@ public class LoadedMods {
|
||||
public static boolean NEI = Loader.isModLoaded("NotEnoughItems");
|
||||
public static boolean GT5U = Loader.isModLoaded("gregtech_nh");
|
||||
public static boolean WAILA_PLUGINS = Loader.isModLoaded("wailaplugins");
|
||||
public static boolean DASHBOARD = Loader.isModLoaded("dashboard");
|
||||
}
|
||||
Reference in new issue
Block a user