Skip to content

Commit

Permalink
Restore Issue 583 (#593)
Browse files Browse the repository at this point in the history
Co-authored-by: slprime <[email protected]>
  • Loading branch information
slprime and slprime authored Jan 21, 2025
1 parent 39578a4 commit b3e1f23
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 19 deletions.
25 changes: 14 additions & 11 deletions src/main/java/codechicken/nei/NEIClientConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -723,21 +723,24 @@ public static OptionList getOptionList() {

public static void loadWorld(String worldPath) {
unloadWorld();
NEIClientConfig.worldPath = worldPath;

setInternalEnabled(true);
logger.debug("Loading " + (Minecraft.getMinecraft().isSingleplayer() ? "Local" : "Remote") + " World");

final File specificDir = new File(CommonUtils.getMinecraftDir(), "saves/NEI/" + worldPath);
final boolean newWorld = !specificDir.exists();
if (!worldPath.equals(NEIClientConfig.worldPath)) {
NEIClientConfig.worldPath = worldPath;

if (newWorld) {
specificDir.mkdirs();
}
logger.debug("Loading " + (Minecraft.getMinecraft().isSingleplayer() ? "Local" : "Remote") + " World");

final File specificDir = new File(CommonUtils.getMinecraftDir(), "saves/NEI/" + worldPath);
final boolean newWorld = !specificDir.exists();

world = new ConfigSet(new File(specificDir, "NEI.dat"), new ConfigFile(new File(specificDir, "NEI.cfg")));
bootNEI(ClientUtils.getWorld());
onWorldLoad(newWorld);
if (newWorld) {
specificDir.mkdirs();
}

world = new ConfigSet(new File(specificDir, "NEI.dat"), new ConfigFile(new File(specificDir, "NEI.cfg")));
bootNEI(ClientUtils.getWorld());
onWorldLoad(newWorld);
}
}

public static String getWorldPath() {
Expand Down
20 changes: 12 additions & 8 deletions src/main/java/codechicken/nei/recipe/StackInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.IFluidContainerItem;

Expand All @@ -18,19 +19,21 @@
import codechicken.nei.api.IStackStringifyHandler;
import codechicken.nei.recipe.stackinfo.DefaultStackStringifyHandler;
import codechicken.nei.recipe.stackinfo.GTFluidStackStringifyHandler;
import codechicken.nei.util.ItemStackKey;

public class StackInfo {

private static final FluidStack NULL_FLUID = new FluidStack(FluidRegistry.WATER, 0);
public static final ArrayList<IStackStringifyHandler> stackStringifyHandlers = new ArrayList<>();
private static final HashMap<String, HashMap<String, String[]>> guidfilters = new HashMap<>();
private static final ItemStackMap<String> guidcache = new ItemStackMap<>();
private static final LinkedHashMap<ItemStack, FluidStack> fluidcache = new LinkedHashMap<>() {
private static final LinkedHashMap<ItemStackKey, FluidStack> fluidcache = new LinkedHashMap<>() {

private static final long serialVersionUID = 1042213947848622164L;

@Override
protected boolean removeEldestEntry(Map.Entry<ItemStack, FluidStack> eldest) {
return size() > 20;
protected boolean removeEldestEntry(Map.Entry<ItemStackKey, FluidStack> eldest) {
return size() > 200;
}
};

Expand Down Expand Up @@ -92,19 +95,20 @@ public static boolean equalItemAndNBT(ItemStack stackA, ItemStack stackB, boolea
return true;
}

public static FluidStack getFluid(ItemStack stack) {
FluidStack fluid = fluidcache.get(stack);
public static synchronized FluidStack getFluid(ItemStack stack) {
ItemStackKey key = new ItemStackKey(stack);
FluidStack fluid = fluidcache.get(key);

if (fluid == null && !fluidcache.containsKey(stack)) {
if (fluid == null) {

for (int i = stackStringifyHandlers.size() - 1; i >= 0 && fluid == null; i--) {
fluid = stackStringifyHandlers.get(i).getFluid(stack);
}

fluidcache.put(stack, fluid);
fluidcache.put(key, fluid == null ? NULL_FLUID : fluid);
}

return fluid;
return fluid == NULL_FLUID ? null : fluid;
}

public static boolean isFluidContainer(ItemStack stack) {
Expand Down
33 changes: 33 additions & 0 deletions src/main/java/codechicken/nei/util/ItemStackKey.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package codechicken.nei.util;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;

public class ItemStackKey {

public final ItemStack stack;
private int hashCode = 1;

public ItemStackKey(ItemStack stack) {
this.stack = stack;

if (this.stack != null) {
this.hashCode = 31 * this.hashCode + stack.stackSize;
this.hashCode = 31 * this.hashCode + Item.getIdFromItem(stack.getItem());
this.hashCode = 31 * this.hashCode + stack.getItemDamage();
this.hashCode = 31 * this.hashCode + (!stack.hasTagCompound() ? 0 : stack.getTagCompound().hashCode());
}
}

@Override
public int hashCode() {
return this.hashCode;
}

@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof ItemStackKey)) return false;
return ItemStack.areItemStacksEqual(this.stack, ((ItemStackKey) o).stack);
}
}

0 comments on commit b3e1f23

Please sign in to comment.