Skip to content

Commit e07bfb0

Browse files
committed
improve fluid to drop performance
1 parent 7c7934f commit e07bfb0

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.glodblock.github.common.item.fake;
2+
3+
import appeng.api.storage.data.IAEItemStack;
4+
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
5+
import net.minecraftforge.fluids.FluidStack;
6+
7+
import java.util.Map;
8+
import java.util.function.Function;
9+
10+
public final class DropLookup {
11+
12+
private final static Map<FluidStack, IAEItemStack> FLUID_CACHE_A = new Object2ObjectLinkedOpenHashMap<>();
13+
14+
public static IAEItemStack lookup(FluidStack fluid, Function<FluidStack, IAEItemStack> fallback) {
15+
IAEItemStack cache = FLUID_CACHE_A.get(fluid);
16+
if (cache == null) {
17+
cache = fallback.apply(fluid);
18+
FLUID_CACHE_A.put(fluid, cache);
19+
}
20+
return cache == null ? null : cache.copy();
21+
}
22+
23+
}

src/main/java/com/glodblock/github/common/item/fake/FakeFluids.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,15 @@ public FluidStack getStack(@Nullable IAEItemStack stack) {
5151

5252
@Override
5353
public IAEFluidStack getAEStack(ItemStack stack) {
54-
return getAEStack(AEItemStack.fromItemStack(stack));
54+
if (stack.isEmpty()) {
55+
return null;
56+
}
57+
IAEFluidStack fluidStack = AEFluidStack.fromFluidStack(getStack(stack));
58+
if (fluidStack == null) {
59+
return null;
60+
}
61+
fluidStack.setStackSize(stack.getCount());
62+
return fluidStack;
5563
}
5664

5765
@Override
@@ -92,7 +100,7 @@ public IAEItemStack packAEStack(FluidStack fluid) {
92100
if (fluid == null || fluid.amount <= 0) {
93101
return null;
94102
}
95-
IAEItemStack stack = AEItemStack.fromItemStack(packStack(fluid));
103+
IAEItemStack stack = DropLookup.lookup(fluid, f -> AEItemStack.fromItemStack(packStack(f)));
96104
if (stack == null) {
97105
return null;
98106
}
@@ -105,7 +113,7 @@ public IAEItemStack packAEStackLong(IAEFluidStack fluid) {
105113
if (fluid == null || fluid.getStackSize() <= 0) {
106114
return null;
107115
}
108-
IAEItemStack stack = AEItemStack.fromItemStack(packStack(fluid.getFluidStack()));
116+
IAEItemStack stack = DropLookup.lookup(fluid.getFluidStack(), f -> AEItemStack.fromItemStack(packStack(f)));
109117
if (stack == null) {
110118
return null;
111119
}

0 commit comments

Comments
 (0)