Skip to content

Commit 503a6e7

Browse files
authored
Cache frequent Enum#values() calls (#223)
1 parent ff0e851 commit 503a6e7

File tree

67 files changed

+239
-171
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+239
-171
lines changed

dependencies.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Add your dependencies here
22

33
dependencies {
4-
api('com.github.GTNewHorizons:EnderCore:0.5.5:dev') {transitive = false}
4+
api('com.github.GTNewHorizons:EnderCore:0.5.7:dev') {transitive = false}
55
compileOnly('com.github.GTNewHorizons:ForestryMC:4.11.4:dev')
66
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.8.60-GTNH:dev')
77
api("com.github.GTNewHorizons:GTNHLib:0.9.10:dev")

src/main/java/crazypants/enderio/conduit/AbstractConduit.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import crazypants.enderio.conduit.power.PowerConduitNetwork;
4848
import crazypants.enderio.conduit.redstone.IRedstoneConduit;
4949
import crazypants.enderio.conduit.redstone.RedstoneConduitNetwork;
50+
import crazypants.util.ForgeDirections;
5051
import mods.immibis.microblocks.api.EnumPartClass;
5152
import mods.immibis.microblocks.api.EnumPosition;
5253
import mods.immibis.microblocks.api.IMicroblockCoverSystem;
@@ -118,7 +119,7 @@ public boolean readConduitSettingsFromNBT(ForgeDirection dir, NBTTagCompound nbt
118119
return false;
119120
}
120121
if (dataRoot.hasKey("connectionMode")) {
121-
ConnectionMode mode = ConnectionMode.values()[dataRoot.getShort("connectionMode")];
122+
ConnectionMode mode = ConnectionMode.VALUES[dataRoot.getShort("connectionMode")];
122123
setConnectionMode(dir, mode);
123124
}
124125
readTypeSettings(dir, dataRoot);
@@ -382,13 +383,13 @@ public void readFromNBT(NBTTagCompound nbtRoot, short nbtVersion) {
382383
conduitConnections.clear();
383384
int[] dirs = nbtRoot.getIntArray("connections");
384385
for (int i = 0; i < dirs.length; i++) {
385-
conduitConnections.add(ForgeDirection.values()[dirs[i]]);
386+
conduitConnections.add(ForgeDirections.DIRECTIONS[dirs[i]]);
386387
}
387388

388389
externalConnections.clear();
389390
dirs = nbtRoot.getIntArray("externalConnections");
390391
for (int i = 0; i < dirs.length; i++) {
391-
externalConnections.add(ForgeDirection.values()[dirs[i]]);
392+
externalConnections.add(ForgeDirections.DIRECTIONS[dirs[i]]);
392393
}
393394
active = nbtRoot.getBoolean("signalActive");
394395

@@ -397,7 +398,7 @@ public void readFromNBT(NBTTagCompound nbtRoot, short nbtVersion) {
397398
if (modes != null && modes.length == 6) {
398399
int i = 0;
399400
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
400-
conectionModes.put(dir, ConnectionMode.values()[modes[i]]);
401+
conectionModes.put(dir, ConnectionMode.VALUES[modes[i]]);
401402
i++;
402403
}
403404
}

src/main/java/crazypants/enderio/conduit/AbstractItemConduit.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import crazypants.enderio.EnderIO;
2525
import crazypants.enderio.EnderIOTab;
2626
import crazypants.enderio.ModObject;
27+
import crazypants.util.ForgeDirections;
2728
import mods.immibis.microblocks.api.IMicroblockCoverSystem;
2829
import mods.immibis.microblocks.api.IMicroblockSupporterTile;
2930
import mods.immibis.microblocks.api.MicroblockAPIUtils;
@@ -84,7 +85,7 @@ public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int
8485
}
8586
return true;
8687
} else {
87-
ForgeDirection dir = ForgeDirection.values()[side];
88+
ForgeDirection dir = ForgeDirections.DIRECTIONS[side];
8889
int placeX = x + dir.offsetX;
8990
int placeY = y + dir.offsetY;
9091
int placeZ = z + dir.offsetZ;

src/main/java/crazypants/enderio/conduit/BlockConduitBundle.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
import crazypants.enderio.machine.painter.PainterUtil;
7272
import crazypants.enderio.network.PacketHandler;
7373
import crazypants.enderio.tool.ToolUtil;
74+
import crazypants.util.ForgeDirections;
7475
import crazypants.util.IFacade;
7576
import mods.immibis.core.api.multipart.IMultipartRenderingBlockMarker;
7677
import mods.immibis.core.api.multipart.IMultipartSystem;
@@ -819,7 +820,7 @@ public Object getServerGuiElement(int id, EntityPlayer player, World world, int
819820
return new ExternalConnectionContainer(
820821
player.inventory,
821822
(IConduitBundle) te,
822-
ForgeDirection.values()[id - GuiHandler.GUI_ID_EXTERNAL_CONNECTION_BASE]);
823+
ForgeDirections.DIRECTIONS[id - GuiHandler.GUI_ID_EXTERNAL_CONNECTION_BASE]);
823824
}
824825
return null;
825826
}
@@ -834,7 +835,7 @@ public Object getClientGuiElement(int id, EntityPlayer player, World world, int
834835
return new GuiExternalConnection(
835836
player.inventory,
836837
(IConduitBundle) te,
837-
ForgeDirection.values()[id - GuiHandler.GUI_ID_EXTERNAL_CONNECTION_BASE]);
838+
ForgeDirections.DIRECTIONS[id - GuiHandler.GUI_ID_EXTERNAL_CONNECTION_BASE]);
838839
}
839840
return null;
840841
}

src/main/java/crazypants/enderio/conduit/ConnectionMode.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ public enum ConnectionMode {
1010
DISABLED("gui.conduit.ioMode.disabled"),
1111
NOT_SET("gui.conduit.ioMode.notSet");
1212

13+
/**
14+
* Cached values() array for frequent read-only operations, the array should NOT be mutated.
15+
*/
16+
public static final ConnectionMode[] VALUES = values();
1317
private final String unlocalisedName;
1418

1519
ConnectionMode(String unlocalisedName) {
@@ -22,19 +26,19 @@ public String getUnlocalisedName() {
2226

2327
public static ConnectionMode getNext(ConnectionMode mode) {
2428
int ord = mode.ordinal() + 1;
25-
if (ord >= ConnectionMode.values().length) {
29+
if (ord >= ConnectionMode.VALUES.length) {
2630
ord = 0;
2731
}
28-
return ConnectionMode.values()[ord];
32+
return ConnectionMode.VALUES[ord];
2933
}
3034

3135
public static ConnectionMode getPrevious(ConnectionMode mode) {
3236

3337
int ord = mode.ordinal() - 1;
3438
if (ord < 0) {
35-
ord = ConnectionMode.values().length - 1;
39+
ord = ConnectionMode.VALUES.length - 1;
3640
}
37-
return ConnectionMode.values()[ord];
41+
return ConnectionMode.VALUES[ord];
3842
}
3943

4044
public boolean acceptsInput() {

src/main/java/crazypants/enderio/conduit/TileConduitBundle.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import crazypants.enderio.conduit.redstone.IRedstoneConduit;
5252
import crazypants.enderio.conduit.redstone.InsulatedRedstoneConduit;
5353
import crazypants.enderio.config.Config;
54+
import crazypants.util.ForgeDirections;
5455
import li.cil.oc.api.network.Message;
5556
import li.cil.oc.api.network.Node;
5657
import mekanism.api.gas.Gas;
@@ -412,7 +413,7 @@ public void replaceConduit(IConduit original, IConduit replacement) {
412413
}
413414
// If you're wondering why I am not using conduit.writeToNBT, it is because there is some data that should not
414415
// persist, some of which causes crashes with energy conduits.
415-
NBTTagCompound[] originalData = new NBTTagCompound[ForgeDirection.values().length];
416+
NBTTagCompound[] originalData = new NBTTagCompound[ForgeDirections.DIRECTIONS.length];
416417
for (ForgeDirection conduitConnection : original.getExternalConnections()) {
417418
NBTTagCompound tag = new NBTTagCompound();
418419
original.writeConnectionSettingsToNBT(conduitConnection, tag);
@@ -423,7 +424,7 @@ public void replaceConduit(IConduit original, IConduit replacement) {
423424
for (int i = 0; i < originalData.length; i++) {
424425
NBTTagCompound nbt = originalData[i];
425426
if (nbt != null) {
426-
replacement.readConduitSettingsFromNBT(ForgeDirection.values()[i], nbt);
427+
replacement.readConduitSettingsFromNBT(ForgeDirections.DIRECTIONS[i], nbt);
427428
}
428429
}
429430
}

src/main/java/crazypants/enderio/conduit/facade/ItemConduitFacade.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,11 @@
3232
import crazypants.enderio.machine.painter.IPaintedBlock;
3333
import crazypants.enderio.machine.painter.PaintSourceValidator;
3434
import crazypants.enderio.machine.painter.PainterUtil;
35+
import crazypants.util.ForgeDirections;
3536

3637
public class ItemConduitFacade extends Item implements IAdvancedTooltipProvider, IResourceTooltipProvider {
3738

38-
public static enum FacadeType {
39+
public enum FacadeType {
3940

4041
BASIC,
4142
HARDENED;
@@ -115,7 +116,7 @@ public boolean onItemUse(ItemStack itemStack, EntityPlayer player, World world,
115116
return true;
116117
}
117118

118-
ForgeDirection dir = ForgeDirection.values()[side];
119+
ForgeDirection dir = ForgeDirections.DIRECTIONS[side];
119120
int placeX = x + dir.offsetX;
120121
int placeY = y + dir.offsetY;
121122
int placeZ = z + dir.offsetZ;

src/main/java/crazypants/enderio/conduit/gas/AbstractGasConduit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ public void readFromNBT(NBTTagCompound nbtRoot, short nbtVersion) {
193193
key = "extSC." + dir.name();
194194
if (nbtRoot.hasKey(key)) {
195195
short ord = nbtRoot.getShort(key);
196-
if (ord >= 0 && ord < DyeColor.values().length) {
197-
extractionColors.put(dir, DyeColor.values()[ord]);
196+
if (ord >= 0 && ord < DyeColor.VALUES.length) {
197+
extractionColors.put(dir, DyeColor.VALUES[ord]);
198198
}
199199
}
200200
}

src/main/java/crazypants/enderio/conduit/gui/GasSettings.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public RedstoneControlMode getRedstoneControlMode() {
7272
public void actionPerformed(GuiButton guiButton) {
7373
super.actionPerformed(guiButton);
7474
if (guiButton.id == ID_COLOR_BUTTON) {
75-
conduit.setExtractionSignalColor(gui.getDir(), DyeColor.values()[colorB.getColorIndex()]);
75+
conduit.setExtractionSignalColor(gui.getDir(), DyeColor.VALUES[colorB.getColorIndex()]);
7676
PacketHandler.INSTANCE.sendToServer(new PacketExtractMode(conduit, gui.getDir()));
7777
}
7878
}

src/main/java/crazypants/enderio/conduit/gui/GuiExternalConnectionSelector.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import crazypants.enderio.conduit.IConduitBundle;
2424
import crazypants.enderio.conduit.redstone.IInsulatedRedstoneConduit;
2525
import crazypants.enderio.network.PacketHandler;
26+
import crazypants.util.ForgeDirections;
2627

2728
public class GuiExternalConnectionSelector extends GuiScreen {
2829

@@ -51,7 +52,7 @@ public GuiExternalConnectionSelector(IConduitBundle cb) {
5152

5253
@Override
5354
protected void actionPerformed(GuiButton b) {
54-
ForgeDirection dir = ForgeDirection.values()[b.id];
55+
ForgeDirection dir = ForgeDirections.DIRECTIONS[b.id];
5556
EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer;
5657
BlockCoord loc = cb.getLocation();
5758
PacketHandler.INSTANCE.sendToServer(new PacketOpenConduitUI(cb.getEntity(), dir));

0 commit comments

Comments
 (0)