diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
index 8eb95d05a1..d6d1ebfb6c 100644
--- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
+++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
@@ -5,6 +5,7 @@ import org.bukkit.block.Biome;
 import org.bukkit.block.Block;
 
 import net.minecraft.server.BiomeBase;
+import net.minecraft.server.BlockRedstoneWire;
 import org.bukkit.*;
 import org.bukkit.block.BlockState;
 import org.bukkit.craftbukkit.CraftChunk;
@@ -326,7 +327,6 @@ public class CraftBlock implements Block {
     }
 
     public Biome getBiome() {
-        // TODO: This may not be 100% accurate; investigate into getting per-block instead of per-chunk
         BiomeBase base = chunk.getHandle().d.a().a(chunk.getX(), chunk.getZ());
 
         if (base == BiomeBase.RAINFOREST) {
@@ -378,4 +378,21 @@ public class CraftBlock implements Block {
     public boolean isBlockFaceIndirectlyPowered(BlockFace face) {
         return chunk.getHandle().d.j(x, y, z, blockFaceToNotch(face));
     }
+    
+    public int getBlockPower(BlockFace face) {
+        int power = 0;
+        BlockRedstoneWire wire = (BlockRedstoneWire) net.minecraft.server.Block.REDSTONE_WIRE;
+        net.minecraft.server.World world = chunk.getHandle().d;
+        if((face == BlockFace.DOWN || face == BlockFace.SELF) && world.i(x, y - 1, z, 0)) power = wire.g(world, x, y - 1, z, power);
+        if((face == BlockFace.UP || face == BlockFace.SELF) && world.i(x, y + 1, z, 1)) power = wire.g(world, x, y + 1, z, power);
+        if((face == BlockFace.EAST || face == BlockFace.SELF) && world.i(x, y, z - 1, 2)) power = wire.g(world, x, y, z - 1, power);
+        if((face == BlockFace.WEST || face == BlockFace.SELF) && world.i(x, y, z + 1, 3)) power = wire.g(world, x, y, z + 1, power);
+        if((face == BlockFace.NORTH || face == BlockFace.SELF) && world.i(x - 1, y, z, 4)) power = wire.g(world, x - 1, y, z, power);
+        if((face == BlockFace.SOUTH || face == BlockFace.SELF) && world.i(x + 1, y, z, 5)) power = wire.g(world, x + 1, y, z, power);
+        return face == BlockFace.SELF ? power - 1 : power;
+    }
+    
+    public int getBlockPower() {
+        return getBlockPower(BlockFace.SELF);
+    }
 }