From 814a896e78a4fe3b368da81bcc802d4d5a8c3475 Mon Sep 17 00:00:00 2001 From: Aikar Date: Fri, 18 Mar 2016 19:15:44 -0400 Subject: [PATCH] Optimize BlockStateList/BlockData Mojang included some sanity checks on arguments passed to the BlockData. This code results in the Hash look up occuring twice per call, one to test if it exists and another to retrieve the result. This code should ideally never be hit, unless mojang released a bad build. We can discover bugs with this as furthur code that never expects a null would then NPE, so it would not result in hidden issues. This is super hot code, so removing those checks should give decent gains. diff --git a/src/main/java/net/minecraft/server/BlockStateList.java b/src/main/java/net/minecraft/server/BlockStateList.java index 19ea22f..43ecf3b 100644 --- a/src/main/java/net/minecraft/server/BlockStateList.java +++ b/src/main/java/net/minecraft/server/BlockStateList.java @@ -151,21 +151,11 @@ public class BlockStateList { } public > T get(IBlockState iblockstate) { - if (!this.b.containsKey(iblockstate)) { - throw new IllegalArgumentException("Cannot get property " + iblockstate + " as it does not exist in " + this.a.t()); - } else { - return iblockstate.b().cast(this.b.get(iblockstate)); // Paper - decompile fix - } + return iblockstate.b().cast(this.b.get(iblockstate)); // Paper } public , V extends T> IBlockData set(IBlockState iblockstate, V v0) { - if (!this.b.containsKey(iblockstate)) { - throw new IllegalArgumentException("Cannot set property " + iblockstate + " as it does not exist in " + this.a.t()); - } else if (!iblockstate.c().contains(v0)) { - throw new IllegalArgumentException("Cannot set property " + iblockstate + " to " + v0 + " on block " + Block.REGISTRY.b(this.a) + ", it is not an allowed value"); - } else { - return (IBlockData) (this.b.get(iblockstate) == v0 ? this : (IBlockData) this.c.get(iblockstate, v0)); - } + return this.b.get(iblockstate) == v0 ? this : this.c.get(iblockstate, v0); // Paper } public ImmutableMap, Comparable> s() { -- 2.8.0