feat: almost done

This commit is contained in:
Discreater committed 2021-05-02 04:17:58 +08:00
1 parent 33b6ff5467
commit 3a5d094063
6 files changed
+117 -78

No files matched your search

@@ -451,8 +451,7 @@ public interface ILabel {
@Override
public ILabel increaseAmount() {
setAmount(getAmount() + getMultiplier());
return this;
return setAmount(getAmount() + getMultiplier());
}
@Override
@@ -460,8 +459,7 @@ public interface ILabel {
if (getAmount() <= getMultiplier())
return ILabel.EMPTY;
else {
setAmount(getAmount() - getMultiplier());
return this;
return setAmount(getAmount() - getMultiplier());
}
}
@@ -496,13 +494,10 @@ public interface ILabel {
@Override
public ILabel multiply(float i) {
float amount = i * getAmount();
if (amount > Long.MAX_VALUE)
throw new ArithmeticException("Multiply overflow");
setAmount((long) amount);
return this;
if (amount > Long.MAX_VALUE) throw new ArithmeticException("Multiply overflow");
return setAmount((long) amount);
}
@Override
@SideOnly(Side.CLIENT)
public void getToolTip(List<String> existing, boolean detailed) {
@@ -1,12 +1,12 @@
package me.towdium.jecalculation.gui;
import codechicken.nei.guihook.GuiContainerManager;
import cpw.mods.fml.client.config.GuiUtils;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import me.towdium.jecalculation.JustEnoughCalculation;
import me.towdium.jecalculation.data.label.ILabel;
import me.towdium.jecalculation.gui.guis.IGui;
import me.towdium.jecalculation.gui.widgets.WContainer;
import me.towdium.jecalculation.nei.NEIPlugin;
import me.towdium.jecalculation.polyfill.mc.client.renderer.GlStateManager;
import me.towdium.jecalculation.utils.Utilities;
@@ -27,7 +27,12 @@ import org.lwjgl.input.Mouse;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static codechicken.lib.gui.GuiDraw.renderEngine;
/**
* Author: towdium
@@ -98,7 +103,8 @@ public class JecaGui extends GuiContainer {
if (scheduled) {
JecaGui.scheduled = r;
JecaGui.timeout = 2;
} else r.run();
} else
r.run();
}
/**
@@ -114,7 +120,6 @@ public class JecaGui extends GuiContainer {
}
private static void displayGuiUnsafe(boolean updateParent, boolean acceptsTransfer, IGui root) {
Minecraft mc = Minecraft.getMinecraft();
JecaGui parent;
@@ -148,7 +153,8 @@ public class JecaGui extends GuiContainer {
Runnable r = scheduled;
scheduled = null;
r.run();
} else timeout--;
} else
timeout--;
}
}
@@ -198,13 +204,16 @@ public class JecaGui extends GuiContainer {
int i = 0;
for (String s : textLines) {
int j = this.fontRendererObj.getStringWidth(s);
if (j > i) i = j;
if (j > i)
i = j;
}
int l1 = x + 12;
int i2 = y - 12;
int k = 8 + (textLines.size() - 1) * 10;
if (l1 + i > this.width) l1 -= 28 + i;
if (i2 + k + 6 > this.height) i2 = this.height - k - 6;
if (l1 + i > this.width)
l1 -= 28 + i;
if (i2 + k + 6 > this.height)
i2 = this.height - k - 6;
zLevel = 300.0F;
itemRender.zLevel = 300.0F;
drawGradientRect(l1 - 3, i2 - 4, l1 + i + 3, i2 - 3, -267386864, -267386864);
@@ -288,11 +297,18 @@ public class JecaGui extends GuiContainer {
drawResourceContinuous(r, xPos, yPos, xSize, ySize, border, border, border, border);
}
public void drawResourceContinuous(
Resource r, int xPos, int yPos, int xSize, int ySize,
int borderTop, int borderBottom, int borderLeft, int borderRight) {
public void drawResourceContinuous(Resource r,
int xPos,
int yPos,
int xSize,
int ySize,
int borderTop,
int borderBottom,
int borderLeft,
int borderRight) {
GuiUtils.drawContinuousTexturedBox(r.getResourceLocation(), xPos, yPos, r.getXPos(), r.getYPos(), xSize, ySize,
r.getXSize(), r.getYSize(), borderTop, borderBottom, borderLeft, borderRight, zLevel);
r.getXSize(), r.getYSize(), borderTop, borderBottom, borderLeft, borderRight,
zLevel);
}
private void setColor(int color) {
@@ -332,6 +348,16 @@ public class JecaGui extends GuiContainer {
GlStateManager.enableTexture2D();
}
public void drawOverRectangle(int xPos, int yPos, int xSize, int ySize, int color) {
GlStateManager.disableLighting();
GlStateManager.disableDepth();
GlStateManager.colorMask(true, true, true, false);
this.drawGradientRect(xPos, yPos, xPos + xSize, yPos + ySize, color, color);
GlStateManager.colorMask(true, true, true, true);
GlStateManager.enableLighting();
GlStateManager.enableDepth();
}
public int getStringWidth(String s) {
return fontRendererObj.getStringWidth(s);
}
@@ -371,10 +397,12 @@ public class JecaGui extends GuiContainer {
private void drawText(float xPos, float yPos, Font f, Runnable r) {
boolean unicode = fontRendererObj.getUnicodeFlag();
if (f.raw) fontRendererObj.setUnicodeFlag(false);
if (f.raw)
fontRendererObj.setUnicodeFlag(false);
GlStateManager.pushMatrix();
GlStateManager.translate(xPos, yPos, 0);
if (f.half) GlStateManager.scale(0.5, 0.5, 1);
if (f.half)
GlStateManager.scale(0.5, 0.5, 1);
r.run();
GlStateManager.popMatrix();
fontRendererObj.setUnicodeFlag(unicode);
@@ -388,11 +416,14 @@ public class JecaGui extends GuiContainer {
xPos -= 8;
yPos -= 8;
}
float zLevel = itemRender.zLevel += 100F;
GlStateManager.enableDepth();
RenderHelper.enableGUIStandardItemLighting();
itemRender.renderItemIntoGUI(fontRendererObj, mc.getTextureManager(), is, xPos, yPos);
itemRender.renderItemAndEffectIntoGUI(fontRendererObj, renderEngine, is, xPos, yPos);
itemRender.renderItemOverlayIntoGUI(fontRendererObj, renderEngine, is, xPos, yPos);
RenderHelper.disableStandardItemLighting();
GlStateManager.disableDepth();
itemRender.zLevel = zLevel - 100F;
}
@Override
@@ -407,10 +438,13 @@ public class JecaGui extends GuiContainer {
@Override
protected void keyTyped(char typedChar, int keyCode) {
if (keyCode == Keyboard.KEY_ESCAPE && hand != ILabel.EMPTY) hand = ILabel.EMPTY;
if (keyCode == Keyboard.KEY_ESCAPE && hand != ILabel.EMPTY)
hand = ILabel.EMPTY;
else if (!root.onKey(this, typedChar, keyCode)) {
if (keyCode == Keyboard.KEY_ESCAPE && parent != null) displayParent();
else super.keyTyped(typedChar, keyCode);
if (keyCode == Keyboard.KEY_ESCAPE && parent != null)
displayParent();
else
super.keyTyped(typedChar, keyCode);
}
}
@@ -434,7 +468,8 @@ public class JecaGui extends GuiContainer {
public int getTextWidth(String s) {
FontRenderer fr = getCurrent().fontRendererObj;
boolean flag = fr.getUnicodeFlag();
if (raw) fr.setUnicodeFlag(false);
if (raw)
fr.setUnicodeFlag(false);
int ret = (int) Math.ceil(fr.getStringWidth(s) * (half ? 0.5f : 1));
fr.setUnicodeFlag(flag);
return ret;
@@ -247,14 +247,14 @@ public class Resource {
return new Resource(x * 14, y * 14, 14, 14);
}
private static Resource getLabel(int x) {
return new Resource(x * 16, 132, 16, 16);
}
private static Resource getWidget(int x) {
return new Resource(x * 20, 112, 20, 20);
}
private static Resource getLabel(int x) {
return new Resource(x * 16, 132, 16, 16);
}
public static class ResourceGroup {
public Resource normal;
public Resource focused;
@@ -147,19 +147,20 @@ public class GuiRecipe extends WContainer implements IGui {
disambCache = new HashMap<>();
// input
List<ItemStack> inputItemStacks = recipe.getIngredientStacks(recipeIndex).stream()
.map((positionedStack) -> positionedStack.item)
.collect(Collectors.toList());
List<ItemStack> outputItemStacks = Collections.singletonList(recipe.getResultStack(recipeIndex).item);
recipe.getIngredientStacks(recipeIndex).stream()
.map((positionedStack) -> positionedStack.items)
.forEach(i -> merge(input, Arrays.asList(i), recipe));
// output
merge(output, Arrays.asList(recipe.getResultStack(recipeIndex).items), recipe);
merge(input, inputItemStacks, recipe);
merge(output, outputItemStacks, recipe);
// catalyst ignore multiple catalyst
// catalyst. Ignore multiple catalyst
NEIPlugin.getCatalyst(recipe).map(ILabel.Converter::from).ifPresent(catalyst -> {
this.catalyst.setLabel(catalyst, 0);
});
// other. Unused. For example fuel in furnaces.
recipe.getOtherStacks(recipeIndex).stream();
this.input.setLabel(sort(input, 0), 0);
this.output.setLabel(sort(output, 21), 0);
refresh();
@@ -1,5 +1,6 @@
package me.towdium.jecalculation.gui.widgets;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.recipe.GuiCraftingRecipe;
import codechicken.nei.recipe.GuiUsageRecipe;
import cpw.mods.fml.relauncher.Side;
@@ -9,12 +10,10 @@ import me.towdium.jecalculation.gui.JecaGui;
import me.towdium.jecalculation.gui.Resource;
import me.towdium.jecalculation.utils.IllegalPositionException;
import me.towdium.jecalculation.utils.Utilities;
import org.lwjgl.input.Keyboard;
import javax.annotation.Nullable;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;
import java.util.stream.IntStream;
import static me.towdium.jecalculation.gui.JecaGui.COLOR_TEXT_RED;
import static me.towdium.jecalculation.gui.JecaGui.COLOR_TEXT_WHITE;
@@ -66,10 +65,10 @@ public class WLabel implements IWidget {
if (mode == Mode.EDITOR || mode == Mode.SELECTOR) {
timer.setState(gui.hand != ILabel.EMPTY);
int color = 0xFFFFFF + (int) ((-Math.cos(timer.getTime() * Math.PI / 1500) + 1) * 0x40) * 0x1000000;
gui.drawRectangle(xPos + 1, yPos + 1, xSize - 2, ySize - 2, color);
GuiDraw.drawRect(xPos + 1, yPos + 1, xSize - 2, ySize - 2, color);
}
if (mouseIn(xMouse, yMouse))
gui.drawRectangle(xPos + 1, yPos + 1, xSize - 2, ySize - 2, 0x80FFFFFF);
GuiDraw.drawRect(xPos + 1, yPos + 1, xSize - 2, ySize - 2, 0x80FFFFFF);
}
@Override
@@ -92,7 +91,8 @@ public class WLabel implements IWidget {
notifyLsnr();
}
return true;
} else return false;
} else
return false;
}
@Nullable
@@ -158,7 +158,8 @@ public class WLabel implements IWidget {
}
void notifyLsnr() {
if (listener != null) listener.invoke(this, label);
if (listener != null)
listener.invoke(this, label);
}
@@ -172,17 +173,15 @@ public class WLabel implements IWidget {
class WAmount extends WOverlay {
WLabel temp = new WLabel(xPos, yPos, xSize, ySize, Mode.PICKER).setListener((i, v) -> update());
WButton number = new WButtonText(xPos + xSize + 60, yPos, 20, 20, "#", "general.to_percent")
.setListener(i -> {
temp.label.setPercent(true);
update();
});
WButton number = new WButtonText(xPos + xSize + 60, yPos, 20, 20, "#", "general.to_percent").setListener(i -> {
temp.label.setPercent(true);
update();
});
WTextField text = new WTextField(xPos + xSize + 10, yPos + ySize / 2 - WTextField.HEIGHT / 2, 50);
WButton percent = new WButtonText(xPos + xSize + 60, yPos, 20, 20, "%", "general.to_percent")
.setListener(i -> {
temp.label.setPercent(false);
update();
});
WButton percent = new WButtonText(xPos + xSize + 60, yPos, 20, 20, "%", "general.to_percent").setListener(i -> {
temp.label.setPercent(false);
update();
});
WButton pick = new WButtonIcon(xPos + xSize + 83, yPos, 20, 20, BTN_PICK, "label.pick").setListener(i -> {
JecaGui.getCurrent().hand = temp.label;
setLabel(ILabel.EMPTY);
@@ -200,7 +199,6 @@ public class WLabel implements IWidget {
JecaGui.getCurrent().root.remove(this);
});
public WAmount() {
temp.setLabel(label.copy());
add(new WPanel(xPos - 5, yPos - 5, xSize + 152, ySize + 10));
@@ -212,7 +210,8 @@ public class WLabel implements IWidget {
try {
amount = Long.parseLong(text.getText());
acceptable = amount > 0;
if (!acceptable) amount = 1;
if (!acceptable)
amount = 1;
} catch (NumberFormatException e) {
acceptable = text.getText().isEmpty();
amount = 1;