From 93529cda600d602a1774c17d7dd785dbd59fe724 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sat, 17 Oct 2020 00:02:15 -0400 Subject: [PATCH] Attempt at faster block data --- .../com/volmit/iris/util/FastBlockData.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/main/java/com/volmit/iris/util/FastBlockData.java diff --git a/src/main/java/com/volmit/iris/util/FastBlockData.java b/src/main/java/com/volmit/iris/util/FastBlockData.java new file mode 100644 index 000000000..720dadb74 --- /dev/null +++ b/src/main/java/com/volmit/iris/util/FastBlockData.java @@ -0,0 +1,75 @@ +package com.volmit.iris.util; + +import org.bukkit.Material; +import org.bukkit.block.data.BlockData; + +public class FastBlockData +{ + private static final KMap defaultBlockData = new KMap<>(); + private BlockData blockData; + private Material type; + + private FastBlockData(BlockData d) + { + this.blockData = d; + this.type = null; + } + + private FastBlockData(Material m) + { + this.type = m; + this.blockData = null; + } + + public static FastBlockData of(Material type) + { + return new FastBlockData(type); + } + + public static FastBlockData of(BlockData type) + { + return new FastBlockData(type); + } + + public Material getType() + { + return type != null ? type : blockData.getMaterial(); + } + + public FastBlockData optimize() + { + if(hasBlockData()) + { + BlockData f = getDefaultBlockData(type); + + if(f.hashCode() == getBlockData().hashCode()) + { + type = getBlockData().getMaterial(); + blockData = null; + return this; + } + } + + return this; + } + + private static BlockData getDefaultBlockData(Material type) + { + return defaultBlockData.compute(type, (k, v) -> v != null ? v : type.createBlockData()); + } + + public boolean hasBlockData() + { + return blockData != null; + } + + public BlockData getBlockData() + { + if(blockData != null) + { + return blockData; + } + + return type.createBlockData(); + } +}