Skip to content

Commit a1d3580

Browse files
committed
缓存mod名称从而减少不必要的字符串处理
1 parent a71f239 commit a1d3580

File tree

4 files changed

+60
-27
lines changed

4 files changed

+60
-27
lines changed

src/main/java/com/glodblock/github/coremod/mixin/ae2ctl/MixinTreeNode.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@
44
import com.glodblock.github.integration.mek.FCGasItems;
55
import com.glodblock.github.loader.FCItems;
66
import com.glodblock.github.util.ModAndClassUtil;
7-
import com.glodblock.github.util.Util;
7+
import com.glodblock.github.util.UtilClient;
88
import github.kasuminova.ae2ctl.client.gui.widget.impl.craftingtree.TreeNode;
99
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
1010
import it.unimi.dsi.fastutil.objects.ObjectLists;
1111
import mekanism.api.gas.GasStack;
1212
import net.minecraft.client.gui.GuiScreen;
1313
import net.minecraft.item.ItemStack;
14-
import net.minecraft.util.text.TextFormatting;
15-
import net.minecraftforge.fluids.FluidRegistry;
1614
import net.minecraftforge.fluids.FluidStack;
17-
import net.minecraftforge.fml.common.Loader;
1815
import net.minecraftforge.fml.common.Optional;
1916
import org.spongepowered.asm.mixin.Mixin;
2017
import org.spongepowered.asm.mixin.Unique;
@@ -23,6 +20,8 @@
2320

2421
import java.util.List;
2522

23+
import static com.glodblock.github.util.UtilClient.mekModName;
24+
2625
@Mixin(value = TreeNode.class, remap = false)
2726
public class MixinTreeNode {
2827

@@ -33,7 +32,7 @@ private List<String> getFluidTooltips(final GuiScreen instance, ItemStack stack)
3332
stack.setCount(1);
3433
final FluidStack fluidStack = FakeItemRegister.getStack(stack);
3534
if (fluidStack != null) {
36-
final String modName = TextFormatting.BLUE.toString() + TextFormatting.ITALIC + Loader.instance().getIndexedModList().get(FluidRegistry.getModId(fluidStack)).getName();
35+
final String modName = UtilClient.getFluidDisplayModName(fluidStack.getFluid());
3736
final List<String> list = new ObjectArrayList<>(4);
3837
list.add(fluidStack.getLocalizedName());
3938
list.add(modName);
@@ -56,7 +55,7 @@ private List<String> getFluidTooltips(final GuiScreen instance, ItemStack stack)
5655
if (gasStack != null) {
5756
final List<String> list = new ObjectArrayList<>(4);
5857
list.add(gasStack.getGas().getLocalizedName());
59-
list.add(Util.mekModName);
58+
list.add(mekModName);
6059
return list;
6160
}
6261
}

src/main/java/com/glodblock/github/util/Util.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import io.netty.buffer.ByteBuf;
2727
import io.netty.handler.codec.EncoderException;
2828
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
29+
import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
30+
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
2931
import mekanism.api.gas.GasStack;
3032
import mekanism.api.gas.IGasItem;
3133
import net.minecraft.entity.player.EntityPlayer;
@@ -34,14 +36,15 @@
3436
import net.minecraft.nbt.NBTTagCompound;
3537
import net.minecraft.network.PacketBuffer;
3638
import net.minecraft.util.EnumFacing;
39+
import net.minecraft.util.ResourceLocation;
3740
import net.minecraft.util.math.BlockPos;
38-
import net.minecraft.util.text.TextFormatting;
3941
import net.minecraft.world.World;
42+
import net.minecraftforge.fluids.Fluid;
43+
import net.minecraftforge.fluids.FluidRegistry;
4044
import net.minecraftforge.fluids.FluidStack;
4145
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
4246
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
4347
import net.minecraftforge.fluids.capability.IFluidTankProperties;
44-
import net.minecraftforge.fml.common.Loader;
4548
import net.minecraftforge.fml.common.Optional;
4649
import net.minecraftforge.items.IItemHandler;
4750
import net.minecraftforge.items.IItemHandlerModifiable;
@@ -55,12 +58,16 @@
5558

5659
public final class Util {
5760

58-
public static final String mekModName;
61+
private static final Reference2ObjectMap<Fluid, String> fluidModIDMap = new Reference2ObjectOpenHashMap<>();
5962

60-
static {
61-
if (ModAndClassUtil.GAS) {
62-
mekModName = "" + TextFormatting.BLUE + TextFormatting.ITALIC + Loader.instance().getIndexedModList().get("mekanism").getName();
63-
} else mekModName = "";
63+
public static String getFluidModID(FluidStack fluidStack) {
64+
if (fluidStack == null) return "";
65+
return getFluidModID(fluidStack.getFluid());
66+
}
67+
68+
public static String getFluidModID(Fluid fluid) {
69+
if (fluid == null) return "";
70+
return fluidModIDMap.computeIfAbsent(fluid, f -> new ResourceLocation(FluidRegistry.getDefaultFluidName(f)).getNamespace());
6471
}
6572

6673
public static IStorageChannel<IAEFluidStack> getFluidChannel() {

src/main/java/com/glodblock/github/util/UtilClient.java

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import appeng.client.gui.implementations.GuiMEMonitorable;
77
import appeng.client.me.SlotME;
88
import appeng.helpers.InventoryAction;
9-
import appeng.util.Platform;
109
import com.glodblock.github.common.item.fake.FakeItemRegister;
1110
import com.glodblock.github.coremod.mixin.jei.AccessorGhostIngredientDragManager;
1211
import com.glodblock.github.coremod.mixin.jei.AccessorIngredientListOverlay;
@@ -15,6 +14,8 @@
1514
import com.glodblock.github.loader.FCItems;
1615
import com.mekeng.github.common.me.data.IAEGasStack;
1716
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
17+
import it.unimi.dsi.fastutil.objects.Reference2ObjectMap;
18+
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap;
1819
import net.minecraft.client.Minecraft;
1920
import net.minecraft.client.gui.GuiScreen;
2021
import net.minecraft.client.gui.inventory.GuiContainer;
@@ -25,22 +26,26 @@
2526
import net.minecraft.inventory.Slot;
2627
import net.minecraft.item.ItemStack;
2728
import net.minecraft.util.text.TextFormatting;
29+
import net.minecraftforge.fluids.Fluid;
30+
import net.minecraftforge.fluids.FluidStack;
2831
import net.minecraftforge.fml.common.Loader;
2932
import net.minecraftforge.fml.common.Optional;
3033
import net.minecraftforge.fml.relauncher.Side;
3134
import net.minecraftforge.fml.relauncher.SideOnly;
3235
import org.apache.commons.lang3.tuple.MutablePair;
3336

37+
import javax.annotation.Nonnull;
3438
import java.text.NumberFormat;
3539
import java.util.Arrays;
3640
import java.util.List;
3741
import java.util.Locale;
3842

39-
import static com.glodblock.github.util.Util.mekModName;
40-
4143
@SideOnly(Side.CLIENT)
4244
public final class UtilClient {
4345

46+
public static final String mekModName;
47+
private static final Reference2ObjectMap<Fluid, String> fluidModNameMap = new Reference2ObjectOpenHashMap<>();
48+
4449
public static boolean shouldAutoCraft(final Slot slot, final int mouseButton, final ClickType clickType) {
4550
if (slot instanceof SlotME) {
4651
final IAEItemStack stack;
@@ -158,20 +163,32 @@ public static boolean rendererFluid(final GuiContainer gui, final IAEItemStack i
158163
return rendererFluid(gui, item, mouseX, mouseY, gui instanceof GuiMEMonitorable);
159164
}
160165

166+
static {
167+
if (ModAndClassUtil.GAS) {
168+
mekModName = UtilClient.getDisplayModName("mekanism");
169+
} else mekModName = "";
170+
}
171+
172+
@Optional.Method(modid = "mekeng")
173+
public static boolean rendererGas(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY) {
174+
return rendererGas(gui, item, mouseX, mouseY, gui instanceof GuiMEMonitorable);
175+
}
176+
161177
public static boolean rendererFluid(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY, final boolean isStorage) {
162178
if (item == null) return false;
163179
if (item.getItem() == FCItems.FLUID_DROP) {
164180
if (cacheTooltip.left == null || !cacheTooltip.left.equals(item) || cacheTooltip.left.getStackSize() != item.getStackSize() || cacheIsStorage != isStorage) {
165181
final IAEFluidStack fluidStack = FakeItemRegister.getAEStack(item.copy().setStackSize(1));
166182
if (fluidStack != null) {
167183
fluidStack.setStackSize(item.getStackSize());
168-
final String formattedAmount = GuiScreen.isShiftKeyDown() ? NumberFormat.getNumberInstance(Locale.US).format(fluidStack.getStackSize()) + " mB" : NumberFormat.getNumberInstance(Locale.US).format((double) fluidStack.getStackSize() / (double) 1000.0F) + " B";
169-
final String modName = TextFormatting.BLUE.toString() + TextFormatting.ITALIC + Loader.instance().getIndexedModList().get(Platform.getModId(fluidStack)).getName();
184+
final String modName = getFluidDisplayModName(fluidStack.getFluid());
170185
final List<String> list = new ObjectArrayList<>();
171186
list.add(fluidStack.getFluidStack().getLocalizedName());
172187
list.add(modName);
173-
if (isStorage)
188+
if (isStorage) {
189+
final String formattedAmount = GuiScreen.isShiftKeyDown() ? NumberFormat.getNumberInstance(Locale.US).format(fluidStack.getStackSize()) + " mB" : NumberFormat.getNumberInstance(Locale.US).format((double) fluidStack.getStackSize() / (double) 1000.0F) + " B";
174190
list.add(TextFormatting.DARK_GRAY + I18n.format("gui.appliedenergistics2.StoredFluids") + " : " + formattedAmount);
191+
}
175192
if (item.isCraftable())
176193
list.add(TextFormatting.GRAY + I18n.format("gui.tooltips.appliedenergistics2.ItemsCraftable"));
177194
gui.drawHoveringText(list, mouseX, mouseY);
@@ -188,11 +205,6 @@ public static boolean rendererFluid(final GuiContainer gui, final IAEItemStack i
188205
return false;
189206
}
190207

191-
@Optional.Method(modid = "mekeng")
192-
public static boolean rendererGas(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY) {
193-
return rendererGas(gui, item, mouseX, mouseY, gui instanceof GuiMEMonitorable);
194-
}
195-
196208
@Optional.Method(modid = "mekeng")
197209
public static boolean rendererGas(final GuiContainer gui, final IAEItemStack item, final int mouseX, final int mouseY, final boolean isStorage) {
198210
if (item == null) return false;
@@ -201,12 +213,13 @@ public static boolean rendererGas(final GuiContainer gui, final IAEItemStack ite
201213
final IAEGasStack gs = FakeItemRegister.getAEStack(item.copy().setStackSize(1));
202214
if (gs != null) {
203215
gs.setStackSize(item.getStackSize());
204-
final String formattedAmount = GuiScreen.isShiftKeyDown() ? NumberFormat.getNumberInstance(Locale.US).format(gs.getStackSize()) + " mB" : NumberFormat.getNumberInstance(Locale.US).format((double) gs.getStackSize() / (double) 1000.0F) + " B";
205216
final List<String> list = new ObjectArrayList<>();
206217
list.add(gs.getGas().getLocalizedName());
207218
list.add(mekModName);
208-
if (isStorage)
219+
if (isStorage) {
220+
final String formattedAmount = GuiScreen.isShiftKeyDown() ? NumberFormat.getNumberInstance(Locale.US).format(gs.getStackSize()) + " mB" : NumberFormat.getNumberInstance(Locale.US).format((double) gs.getStackSize() / (double) 1000.0F) + " B";
209221
list.add(TextFormatting.DARK_GRAY + I18n.format("tooltip.stored") + " : " + formattedAmount);
222+
}
210223
if (item.isCraftable())
211224
list.add(TextFormatting.GRAY + I18n.format("gui.tooltips.appliedenergistics2.ItemsCraftable"));
212225
gui.drawHoveringText(list, mouseX, mouseY);
@@ -223,4 +236,18 @@ public static boolean rendererGas(final GuiContainer gui, final IAEItemStack ite
223236
return false;
224237
}
225238

239+
public static String getFluidDisplayModName(FluidStack fluidStack) {
240+
if (fluidStack == null) return "";
241+
return getFluidDisplayModName(fluidStack.getFluid());
242+
}
243+
244+
public static String getFluidDisplayModName(Fluid fluid) {
245+
if (fluid == null) return "";
246+
return fluidModNameMap.computeIfAbsent(fluid, f -> getDisplayModName(Util.getFluidModID(f)));
247+
}
248+
249+
public static String getDisplayModName(@Nonnull String modid) {
250+
return TextFormatting.BLUE.toString() + TextFormatting.ITALIC + Loader.instance().getIndexedModList().get(modid).getName();
251+
}
252+
226253
}

src/main/resources/mixins.ae2fc.ae2ctl.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"target": "@env(DEFAULT)",
66
"minVersion": "0.8.5",
77
"compatibilityLevel": "JAVA_8",
8-
"mixins": [
8+
"client": [
99
"MixinTreeNode"
1010
]
1111
}

0 commit comments

Comments
 (0)