Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,4 @@ public int getColourIntensity() {
return colourIntensity;
}

@Override
public boolean equals(Object o) {
return o instanceof Reagent && this == o && name.equals(((Reagent) o).name);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import net.minecraft.client.gui.inventory.GuiContainer;
Expand All @@ -29,15 +30,14 @@ public class NEIAlchemyRecipeHandler extends TemplateRecipeHandler {

public class CachedAlchemyRecipe extends CachedRecipe {

ArrayList<ItemStack> orbs;
PositionedStack output;
List<PositionedStack> inputs;
int lp;
private final PositionedStack orbs;
private final PositionedStack output;
private final List<PositionedStack> inputs;
private final int lp;

public CachedAlchemyRecipe(AlchemyRecipe recipe, ItemStack orb) {
this(recipe);
this.orbs = new ArrayList<>();
orbs.add(orb);
this.orbs.setPermutationToRender(orb);
}

public CachedAlchemyRecipe(AlchemyRecipe recipe) {
Expand All @@ -51,12 +51,13 @@ public CachedAlchemyRecipe(AlchemyRecipe recipe) {
this.inputs = inputs;
this.output = new PositionedStack(recipe.getResult(), 76, 25);
this.lp = recipe.getAmountNeeded() * 100;
this.orbs = new ArrayList<>();
List<ItemStack> orbStacks = new ArrayList<>();
for (Item orb : getBloodOrbs()) {
if (((IBloodOrb) orb).getOrbLevel() >= recipe.getOrbLevel()) {
orbs.add(new ItemStack(orb));
orbStacks.add(new ItemStack(orb));
}
}
orbs = new PositionedStack(orbStacks, 136, 47);
}

@Override
Expand All @@ -70,12 +71,8 @@ public PositionedStack getResult() {
}

@Override
public PositionedStack getOtherStack() {
if (orbs == null || orbs.isEmpty()) return null;
PositionedStack stack = new PositionedStack(orbs, 136, 47, false);
stack.setPermutationToRender((cycleticks / 48) % orbs.size());
stack.setMaxSize(1);
return stack;
public List<PositionedStack> getOtherStacks() {
return getCycledIngredients(cycleticks / 20, Collections.singletonList(orbs));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ public class NEIAltarRecipeHandler extends TemplateRecipeHandler {

public class CachedAltarRecipe extends CachedRecipe {

PositionedStack input;
private final PositionedStack input;
// PositionedStack inputItems;
PositionedStack output;
int tier, lp_amount, consumption, drain;
private final PositionedStack output;
private final int tier, lp_amount, consumption, drain;

public CachedAltarRecipe(AltarRecipe recipe) {
// inputItems = new PositionedStack(recipe.input, 38, 2, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class NEIBindingRitualHandler extends TemplateRecipeHandler {

public class CachedBindingRecipe extends CachedRecipe {

PositionedStack input, output;
private final PositionedStack input, output;

public CachedBindingRecipe(BindingRecipe recipe) {
input = new PositionedStack(recipe.requiredItem, 37, 21, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import static WayofTime.alchemicalWizardry.client.ClientUtils.mc;
import static WayofTime.alchemicalWizardry.client.nei.NEIConfig.ARROW_TEXTURE;
import static codechicken.lib.gui.GuiDraw.fontRenderer;

import java.awt.Rectangle;
import java.util.Collections;
import java.util.List;

import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.item.ItemStack;
Expand All @@ -28,19 +30,39 @@ public class NEICalcinatorHandler extends TemplateRecipeHandler {
public class CachedReagentInfo extends CachedRecipe {

private final Reagent reagent;
private final PositionedStack stack;
private final PositionedStack orbs;
private final int amount;
private final int color;

private final String amountText;
private final int amountTextWidth;

private final String nameText;
private final int nameTextWidth;

private static final int ARROW_WIDTH = 24;
private static final int ARROW_HEIGHT = 16;
private static final int FILL_TIME = 192;
private static final int HOLD_TIME = 8;

public CachedReagentInfo(ReagentStack reagent) {
this.reagent = reagent.reagent;
this.stack = new PositionedStack(ReagentRegistry.getItemForReagent(reagent.reagent), 32, 6);
this.amount = reagent.amount;
this.color = reagent.reagent.getColourRed() << 16 | reagent.reagent.getColourGreen() << 8
| reagent.reagent.getColourBlue();

ItemStack[] orbStacks = NEIConfig.getBloodOrbs().stream().map(ItemStack::new).toArray(ItemStack[]::new);
this.orbs = new PositionedStack(orbStacks, 32, 33);

this.amountText = String.format("%,d AR", amount);
this.amountTextWidth = fontRenderer.getStringWidth(amountText);

this.nameText = this.reagent.name;
this.nameTextWidth = fontRenderer.getStringWidth(nameText);
}

@Override
public PositionedStack getResult() {
return new PositionedStack(ReagentRegistry.getItemForReagent(reagent), 32, 6);
return stack;
}

public Reagent getReagent() {
Expand All @@ -54,75 +76,63 @@ public int getAmount() {
public void onDraw(int x, int y) {
drawColoredProgressBar(x, y);

String amountText = String.format("%,d AR", amount);
FontRenderer fontRenderer = mc.fontRenderer;

int textWidth = fontRenderer.getStringWidth(amountText);
int textX = x + 84 - (textWidth / 2);
int textX = x + 84 - (amountTextWidth / 2);
int textY = y + 19;

fontRenderer.drawString(amountText, textX, textY, 0x000000);

textWidth = fontRenderer.getStringWidth(reagent.name);
textX = x + 84 - (textWidth / 2);
textY = y + 29;

fontRenderer.drawString(reagent.name, textX, textY, color);
textX = x + 84 - (nameTextWidth / 2);
textY += 10;
int color = reagent.getColourRed() << 16 | reagent.getColourGreen() << 8 | reagent.getColourBlue();
fontRenderer.drawString(nameText, textX, textY, color);
}

private void drawColoredProgressBar(int x, int y) {
int arrowX = x + 25;
int arrowY = y + 19;
int arrowWidth = 24;
int arrowHeight = 16;

int fillTime = 192;
int holdTime = 8;
int totalCycle = fillTime + holdTime;
int totalCycle = FILL_TIME + HOLD_TIME;

int cycleTick = cycleticks % totalCycle;

int fillWidth;
if (cycleTick < fillTime) {
fillWidth = cycleTick * arrowWidth / fillTime;
if (cycleTick < FILL_TIME) {
fillWidth = cycleTick * ARROW_WIDTH / FILL_TIME;
} else {
fillWidth = arrowWidth;
fillWidth = ARROW_WIDTH;
}

TextureManager texManager = mc.getTextureManager();
texManager.bindTexture(ARROW_TEXTURE);

Tessellator tessellator = Tessellator.instance;

GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);

GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

float r = ((color >> 16) & 0xFF) / 255f;
float g = ((color >> 8) & 0xFF) / 255f;
float b = (color & 0xFF) / 255f;

GL11.glColor4f(r, g, b, 1.0f);
GL11.glColor4ub(
(byte) reagent.getColourRed(),
(byte) reagent.getColourGreen(),
(byte) reagent.getColourBlue(),
(byte) 255);

tessellator.startDrawingQuads();

tessellator.addVertexWithUV(arrowX, arrowY + arrowHeight, 0, 0, 1);
tessellator.addVertexWithUV(arrowX + fillWidth, arrowY + arrowHeight, 0, fillWidth / (float) arrowWidth, 1);
tessellator.addVertexWithUV(arrowX + fillWidth, arrowY, 0, fillWidth / (float) arrowWidth, 0);
tessellator.addVertexWithUV(arrowX, arrowY + ARROW_HEIGHT, 0, 0, 1);
tessellator
.addVertexWithUV(arrowX + fillWidth, arrowY + ARROW_HEIGHT, 0, fillWidth / (float) ARROW_WIDTH, 1);
tessellator.addVertexWithUV(arrowX + fillWidth, arrowY, 0, fillWidth / (float) ARROW_WIDTH, 0);
tessellator.addVertexWithUV(arrowX, arrowY, 0, 0, 0);

tessellator.draw();

GL11.glDisable(GL11.GL_BLEND);
GL11.glPopAttrib();
GL11.glPopMatrix();
}

@Override
public PositionedStack getOtherStack() {
ItemStack[] orbStacks = NEIConfig.getBloodOrbs().stream().map(ItemStack::new).toArray(ItemStack[]::new);

PositionedStack stack = new PositionedStack(orbStacks, 32, 33, true);
stack.setPermutationToRender((cycleticks / 20) % orbStacks.length);

return stack;
public List<PositionedStack> getIngredients() {
return getCycledIngredients(cycleticks / 20, Collections.singletonList(this.orbs));
}
}

Expand Down Expand Up @@ -151,24 +161,26 @@ private void checkReagents(ItemStack result) {
ReagentStack rs = ReagentRegistry.getReagentStackForItem(result);
if (rs != null) {
arecipes.add(new CachedReagentInfo(rs));
} else { // Check reagents in crystal belljars or other reagent storages
NBTTagCompound tagCompound = result.getTagCompound();
if (tagCompound == null || tagCompound.hasNoTags()) {
return;
}
NBTTagList tagList = tagCompound.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND);
if (tagList.tagList.isEmpty()) {
return;
}
for (int i = 0; i < tagList.tagCount(); i++) {
// Get the proper size of the ReagentStack created by melting the item for this reagent
NBTTagCompound savedTag = tagList.getCompoundTagAt(i);
ReagentStack reagent = ReagentContainer.readFromNBT(savedTag).getReagent();
ItemStack reagentItem = ReagentRegistry.getItemForReagent(reagent.reagent);
ReagentStack reagentStackForItem = ReagentRegistry.getReagentStackForItem(reagentItem);
if (reagentStackForItem != null) {
arecipes.add(new CachedReagentInfo(reagentStackForItem));
}
return;
}
// Check reagents in crystal belljars or other reagent storages
NBTTagCompound tagCompound = result.getTagCompound();
if (tagCompound == null || tagCompound.hasNoTags()) {
return;
}
NBTTagList tagList = tagCompound.getTagList("reagentTanks", Constants.NBT.TAG_COMPOUND);
if (tagList.tagList.isEmpty()) {
return;
}
for (int i = 0; i < tagList.tagCount(); i++) {
// Get the proper size of the ReagentStack created by melting the item for this reagent
NBTTagCompound savedTag = tagList.getCompoundTagAt(i);
ReagentStack reagent = ReagentContainer.readFromNBT(savedTag).getReagent();
if (reagent == null) continue;
ItemStack reagentItem = ReagentRegistry.getItemForReagent(reagent.reagent);
ReagentStack reagentStackForItem = ReagentRegistry.getReagentStackForItem(reagentItem);
if (reagentStackForItem != null) {
arecipes.add(new CachedReagentInfo(reagentStackForItem));
}
}
}
Expand All @@ -191,7 +203,7 @@ public String getOverlayIdentifier() {

@Override
public void loadTransferRects() {
transferRects.add(new RecipeTransferRect(new Rectangle(54, 23, 23, 16), "alchemicalwizardry.calcinator"));
transferRects.add(new RecipeTransferRect(new Rectangle(55, 18, 24, 17), "alchemicalwizardry.calcinator"));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,9 @@ public class NEIConfig implements IConfigureNEI {
"alchemicalwizardry",
"gui/nei/arrow.png");

public static ArrayList<Item> getBloodOrbs() {
public synchronized static ArrayList<Item> getBloodOrbs() {
if (bloodOrbs == null) {
synchronized (NEIConfig.class) {
if (bloodOrbs == null) {
bloodOrbs = collectAllBloodOrbs();
}
}
bloodOrbs = collectAllBloodOrbs();
}
return bloodOrbs;
}
Expand All @@ -39,7 +35,7 @@ private static ArrayList<Item> collectAllBloodOrbs() {
}
}
if (bloodOrbsTemp.isEmpty()) {
// If there is NEI no cache - go to item registry
// If there is no NEI cache - go to item registry
for (Object anItemRegistry : Item.itemRegistry) {
Item item = (Item) anItemRegistry;
if (item instanceof IBloodOrb) {
Expand All @@ -50,12 +46,12 @@ private static ArrayList<Item> collectAllBloodOrbs() {
return bloodOrbsTemp;
}

public static ArrayList<Item> getOrbsByCapacity() {
public synchronized static ArrayList<Item> getOrbsByCapacity() {
if (byCapacity == null) {
byCapacity = new ArrayList<>(getBloodOrbs());
byCapacity.sort((a, b) -> {
if (a instanceof IBloodOrb && b instanceof IBloodOrb) {
return Integer.compare(((IBloodOrb) a).getMaxEssence(), ((IBloodOrb) b).getMaxEssence());
if (a instanceof IBloodOrb orbA && b instanceof IBloodOrb orbB) {
return Integer.compare(orbA.getMaxEssence(), orbB.getMaxEssence());
}
return 0;
});
Expand Down