Skip to content

Commit

Permalink
feat: add a map to make it faster
Browse files Browse the repository at this point in the history
  • Loading branch information
bruberu committed Dec 30, 2024
1 parent 08a6a45 commit e2401d0
Showing 1 changed file with 26 additions and 5 deletions.
31 changes: 26 additions & 5 deletions src/main/java/supersymmetry/common/covers/CoverRestrictive.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,23 @@
import gregtech.api.cover.CoverBase;
import gregtech.api.cover.CoverDefinition;
import gregtech.api.cover.CoverableView;
import gregtech.api.util.ItemStackHashStrategy;
import it.unimi.dsi.fastutil.objects.Object2IntArrayMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenCustomHashMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import net.minecraft.item.ItemStack;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import org.jetbrains.annotations.NotNull;
import supersymmetry.api.recipes.catalysts.CatalystInfo;
import supersymmetry.client.renderer.textures.SusyTextures;

import java.util.Map;

public class CoverRestrictive extends CoverBase {

protected ItemHandlerRestrictive itemHandler;
Expand Down Expand Up @@ -58,6 +66,7 @@ public void renderCover(@NotNull CCRenderState renderState, @NotNull Matrix4 tra
}

protected static class ItemHandlerRestrictive extends ItemHandlerDelegate {
private final Map<ItemStack, Integer> map = new Object2IntOpenCustomHashMap<>(ItemStackHashStrategy.comparingAllButCount());

public ItemHandlerRestrictive(IItemHandler delegate) {
super(delegate);
Expand All @@ -66,11 +75,23 @@ public ItemHandlerRestrictive(IItemHandler delegate) {
@NotNull
@Override
public ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) {
if (!stack.isEmpty() && !stack.isItemEqual(delegate.getStackInSlot(slot))) {
for (int i = 0; i < getSlots(); i++) {
if (i != slot && stack.isItemEqual(getStackInSlot(i))) {
return super.insertItem(i, stack, simulate);
}
if (stack.isEmpty() || stack.isItemEqual(getStackInSlot(slot))) {
return super.insertItem(slot, stack, simulate);
}
// Makes things more efficient for common items.
if (map.containsKey(stack)) {
int location = map.get(stack);
if (stack.isItemEqual(getStackInSlot(location))) {
return super.insertItem(location, stack, simulate);
} else {
map.remove(stack);
}
}
// If it's not already in the map of what goes where, we search if it happens to be anywhere already, for some reason.
for (int i = 0; i < getSlots(); i++) {
if (i != slot && stack.isItemEqual(getStackInSlot(i))) {
map.put(stack, i);
return super.insertItem(i, stack, simulate);
}
}
return super.insertItem(slot, stack, simulate);
Expand Down

0 comments on commit e2401d0

Please sign in to comment.