mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 11:45:51 +00:00
Micro-optimizations Walshy would be proud of
This commit is contained in:
parent
035e35a067
commit
9655761ab1
@ -148,16 +148,16 @@ enum Instruction {
|
|||||||
private static final Map<String, Instruction> nameLookup = new HashMap<>();
|
private static final Map<String, Instruction> nameLookup = new HashMap<>();
|
||||||
public static final Instruction[] values = values();
|
public static final Instruction[] values = values();
|
||||||
|
|
||||||
private final ItemStack item;
|
|
||||||
private final AndroidType type;
|
|
||||||
private final AndroidAction method;
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
for (Instruction instruction : values) {
|
for (Instruction instruction : values) {
|
||||||
nameLookup.put(instruction.name(), instruction);
|
nameLookup.put(instruction.name(), instruction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final ItemStack item;
|
||||||
|
private final AndroidType type;
|
||||||
|
private final AndroidAction method;
|
||||||
|
|
||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
Instruction(AndroidType type, HeadTexture head, @Nullable AndroidAction method) {
|
Instruction(AndroidType type, HeadTexture head, @Nullable AndroidAction method) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
@ -198,7 +198,7 @@ enum Instruction {
|
|||||||
* @return The {@link Instruction} or null if it does not exist.
|
* @return The {@link Instruction} or null if it does not exist.
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public static Instruction getFromCache(@Nonnull String value) {
|
public static Instruction getInstruction(@Nonnull String value) {
|
||||||
Validate.notNull(value, "An Instruction cannot be null!");
|
Validate.notNull(value, "An Instruction cannot be null!");
|
||||||
return nameLookup.get(value);
|
return nameLookup.get(value);
|
||||||
}
|
}
|
||||||
|
@ -255,7 +255,7 @@ public class ProgrammableAndroid extends SlimefunItem implements InventoryBlock,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Instruction instruction = Instruction.getFromCache(script[i]);
|
Instruction instruction = Instruction.getInstruction(script[i]);
|
||||||
|
|
||||||
if (instruction == null) {
|
if (instruction == null) {
|
||||||
SlimefunPlugin.instance().getLogger().log(Level.WARNING, "Failed to parse Android instruction: {0}, maybe your server is out of date?", script[i]);
|
SlimefunPlugin.instance().getLogger().log(Level.WARNING, "Failed to parse Android instruction: {0}, maybe your server is out of date?", script[i]);
|
||||||
@ -655,7 +655,7 @@ public class ProgrammableAndroid extends SlimefunItem implements InventoryBlock,
|
|||||||
}
|
}
|
||||||
|
|
||||||
BlockStorage.addBlockInfo(b, "fuel", String.valueOf(fuel - 1));
|
BlockStorage.addBlockInfo(b, "fuel", String.valueOf(fuel - 1));
|
||||||
Instruction instruction = Instruction.getFromCache(script[index]);
|
Instruction instruction = Instruction.getInstruction(script[index]);
|
||||||
|
|
||||||
if (instruction == null) {
|
if (instruction == null) {
|
||||||
SlimefunPlugin.instance().getLogger().log(Level.WARNING, "Failed to parse Android instruction: {0}, maybe your server is out of date?", script[index]);
|
SlimefunPlugin.instance().getLogger().log(Level.WARNING, "Failed to parse Android instruction: {0}, maybe your server is out of date?", script[index]);
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
package io.github.thebusybiscuit.slimefun4.utils.tags;
|
package io.github.thebusybiscuit.slimefun4.utils.tags;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import org.apache.commons.lang.Validate;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.NamespacedKey;
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.Tag;
|
import org.bukkit.Tag;
|
||||||
@ -107,6 +111,15 @@ public enum SlimefunTag implements Tag<Material> {
|
|||||||
*/
|
*/
|
||||||
CLIMBING_PICK_SURFACES;
|
CLIMBING_PICK_SURFACES;
|
||||||
|
|
||||||
|
private static final Map<String, SlimefunTag> nameLookup = new HashMap<>();
|
||||||
|
public static final SlimefunTag[] values = values();
|
||||||
|
|
||||||
|
static {
|
||||||
|
for (SlimefunTag tag : values) {
|
||||||
|
nameLookup.put(tag.name(), tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private final NamespacedKey key;
|
private final NamespacedKey key;
|
||||||
private final Set<Material> includedMaterials = new HashSet<>();
|
private final Set<Material> includedMaterials = new HashSet<>();
|
||||||
private final Set<Tag<Material>> additionalTags = new HashSet<>();
|
private final Set<Tag<Material>> additionalTags = new HashSet<>();
|
||||||
@ -210,4 +223,21 @@ public enum SlimefunTag implements Tag<Material> {
|
|||||||
return getValues().stream();
|
return getValues().stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a value from the cache map rather than calling {@link Enum#valueOf(Class, String)}.
|
||||||
|
* This is 25-40% quicker than the standard {@link Enum#valueOf(Class, String)} depending on
|
||||||
|
* your Java version. It also means that you can avoid an IllegalArgumentException which let's
|
||||||
|
* face it is always good.
|
||||||
|
*
|
||||||
|
* @param value
|
||||||
|
* The value which you would like to look up.
|
||||||
|
*
|
||||||
|
* @return The {@link SlimefunTag} or null if it does not exist.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public static SlimefunTag getTag(@Nonnull String value) {
|
||||||
|
Validate.notNull(value, "A tag cannot be null!");
|
||||||
|
return nameLookup.get(value);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -162,13 +162,14 @@ public class TagParser implements Keyed {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (PatternUtils.SLIMEFUN_TAG.matcher(value).matches()) {
|
else if (PatternUtils.SLIMEFUN_TAG.matcher(value).matches()) {
|
||||||
try {
|
|
||||||
// Get a SlimefunTag enum value for the given key
|
// Get a SlimefunTag enum value for the given key
|
||||||
String keyValue = PatternUtils.COLON.split(value)[1].toUpperCase(Locale.ROOT);
|
String keyValue = PatternUtils.COLON.split(value)[1].toUpperCase(Locale.ROOT);
|
||||||
SlimefunTag tag = SlimefunTag.valueOf(keyValue);
|
SlimefunTag tag = SlimefunTag.getTag(keyValue);
|
||||||
|
|
||||||
|
if (tag != null) {
|
||||||
tags.add(tag);
|
tags.add(tag);
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException x) {
|
else {
|
||||||
throw new TagMisconfigurationException(key, "There is no '" + value + "' tag in Slimefun");
|
throw new TagMisconfigurationException(key, "There is no '" + value + "' tag in Slimefun");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user