aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java6
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java12
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java80
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java54
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java6
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java35
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CommissionOverlay.java13
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesTextures.java424
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java314
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCooldowns.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java70
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinPlayerControllerMP.java8
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java11
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java89
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java170
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java (renamed from src/main/java/io/github/moulberry/notenoughupdates/textoverlays/TextOverlay.java)11
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlayStyle.java (renamed from src/main/java/io/github/moulberry/notenoughupdates/textoverlays/TextOverlayStyle.java)2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java2
-rw-r--r--src/main/java/io/github/moulberry/notenoughupdates/util/ReverseWorldRenderer.java24
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_-9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/dwarven_data/all.json1
-rw-r--r--src/main/resources/assets/notenoughupdates/fuel_bar.pngbin0 -> 2333 bytes
260 files changed, 1440 insertions, 136 deletions
diff --git a/build.gradle b/build.gradle
index 06fad035..4662310d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -28,7 +28,7 @@ String mixinClassifier = "dep"
minecraft {
version = "1.8.9-11.15.1.2318-1.8.9"
runDir = "run"
- mappings = "stable_20"
+ mappings = "stable_22"
}
repositories {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java
index 59d71520..4682a744 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUEventListener.java
@@ -4,7 +4,6 @@ import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import io.github.moulberry.notenoughupdates.auction.CustomAHGui;
-import io.github.moulberry.notenoughupdates.core.config.Position;
import io.github.moulberry.notenoughupdates.cosmetics.CapeManager;
import io.github.moulberry.notenoughupdates.dungeons.DungeonBlocks;
import io.github.moulberry.notenoughupdates.dungeons.DungeonWin;
@@ -12,8 +11,8 @@ import io.github.moulberry.notenoughupdates.gamemodes.SBGamemodes;
import io.github.moulberry.notenoughupdates.miscfeatures.*;
import io.github.moulberry.notenoughupdates.miscgui.*;
import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer;
-import io.github.moulberry.notenoughupdates.textoverlays.TextOverlay;
-import io.github.moulberry.notenoughupdates.textoverlays.TextOverlayStyle;
+import io.github.moulberry.notenoughupdates.overlays.TextOverlay;
+import io.github.moulberry.notenoughupdates.overlays.TextOverlayStyle;
import io.github.moulberry.notenoughupdates.util.Constants;
import io.github.moulberry.notenoughupdates.util.RequestFocusListener;
import io.github.moulberry.notenoughupdates.util.SBInfo;
@@ -176,6 +175,7 @@ public class NEUEventListener {
CrystalOverlay.tick();
DwarvenMinesTextures.tick();
FairySouls.tick();
+ MiningStuff.tick();
for(TextOverlay overlay : textOverlays) {
overlay.tick();
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java
index 12a95484..9012e67e 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/NEUOverlay.java
@@ -1512,6 +1512,8 @@ public class NEUOverlay extends Gui {
* is enabled)
*/
public void renderOverlay() {
+ GlStateManager.enableDepth();
+
int width = Utils.peekGuiScale().getScaledWidth();
int height = Utils.peekGuiScale().getScaledHeight();
int mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth;
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java
index ad42fcfd..f2f41b17 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/NotEnoughUpdates.java
@@ -24,6 +24,7 @@ import io.github.moulberry.notenoughupdates.miscgui.HelpGUI;
import io.github.moulberry.notenoughupdates.miscgui.NEUOverlayPlacements;
import io.github.moulberry.notenoughupdates.options.NEUConfig;
import io.github.moulberry.notenoughupdates.options.NEUConfigEditor;
+import io.github.moulberry.notenoughupdates.overlays.FuelBar;
import io.github.moulberry.notenoughupdates.profileviewer.GuiProfileViewer;
import io.github.moulberry.notenoughupdates.profileviewer.PlayerStats;
import io.github.moulberry.notenoughupdates.profileviewer.ProfileViewer;
@@ -80,8 +81,8 @@ import java.util.regex.Pattern;
@Mod(modid = NotEnoughUpdates.MODID, version = NotEnoughUpdates.VERSION, clientSideOnly = true)
public class NotEnoughUpdates {
public static final String MODID = "notenoughupdates";
- public static final String VERSION = "1.7.1-REL";
- public static final int VERSION_ID = 10701;
+ public static final String VERSION = "2.0.0-REL";
+ public static final int VERSION_ID = 20000;
public static NotEnoughUpdates INSTANCE = null;
@@ -767,7 +768,7 @@ public class NotEnoughUpdates {
if (j / 4 == 0) {
c = new Color((i + i / 128 & 1) * 8 + 16 << 24, true);
} else {
- c = new Color(MapColor.mapColorArray[j / 4].func_151643_b(j & 3), true);
+ c = new Color(MapColor.mapColorArray[j / 4].getMapColor(j & 3), true);
}
json.addProperty(x+":"+y, c.getRGB());
@@ -906,6 +907,8 @@ public class NotEnoughUpdates {
MinecraftForge.EVENT_BUS.register(new CrystalOverlay());
MinecraftForge.EVENT_BUS.register(new ItemCooldowns());
MinecraftForge.EVENT_BUS.register(new DwarvenMinesTextures());
+ MinecraftForge.EVENT_BUS.register(new DwarvenMinesWaypoints());
+ MinecraftForge.EVENT_BUS.register(new FuelBar());
ClientCommandHandler.instance.registerCommand(collectionLogCommand);
ClientCommandHandler.instance.registerCommand(cosmeticsCommand);
@@ -1057,7 +1060,6 @@ public class NotEnoughUpdates {
//Stolen from Biscut's SkyblockAddons
public void updateSkyblockScoreboard() {
final Pattern SERVER_BRAND_PATTERN = Pattern.compile("(.+) <- (?:.+)");
- final String HYPIXEL_SERVER_BRAND = "BungeeCord (Hypixel)";
Minecraft mc = Minecraft.getMinecraft();
@@ -1067,7 +1069,7 @@ public class NotEnoughUpdates {
if (matcher.find()) {
// Group 1 is the server brand.
- if(!matcher.group(1).equals(HYPIXEL_SERVER_BRAND)) {
+ if(!matcher.group(1).toLowerCase().contains("hypixel")) {
hasSkyblockScoreboard = false;
return;
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java
index b30aa680..3bd4e9d2 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/Position.java
@@ -9,16 +9,34 @@ public class Position {
private int x;
@Expose
private int y;
+ @Expose
+ private boolean centerX;
+ @Expose
+ private boolean centerY;
public Position(int x, int y) {
+ this(x, y, false, false);
+ }
+
+ public Position(int x, int y, boolean centerX, boolean centerY) {
this.x = x;
this.y = y;
+ this.centerX = centerX;
+ this.centerY = centerY;
}
public Position clone() {
return new Position(x, y);
}
+ public boolean isCenterX() {
+ return centerX;
+ }
+
+ public boolean isCenterY() {
+ return centerY;
+ }
+
public int getRawX() {
return x;
}
@@ -28,19 +46,39 @@ public class Position {
}
public int getAbsX(ScaledResolution scaledResolution) {
+ int width = scaledResolution.getScaledWidth();
+
+ if(centerX) {
+ return width/2 + x;
+ }
+
+ int ret = x;
if(x < 0) {
- return scaledResolution.getScaledWidth() + x;
- } else {
- return x;
+ ret = width + x;
}
+
+ if(ret < 0) ret = 0;
+ if(ret > width) ret = width;
+
+ return ret;
}
public int getAbsY(ScaledResolution scaledResolution) {
+ int height = scaledResolution.getScaledHeight();
+
+ if(centerY) {
+ return height/2 + y;
+ }
+
+ int ret = y;
if(y < 0) {
- return scaledResolution.getScaledHeight() + y;
- } else {
- return y;
+ ret = height + y;
}
+
+ if(ret < 0) ret = 0;
+ if(ret > height) ret = height;
+
+ return ret;
}
public int moveX(int deltaX, int objWidth, ScaledResolution scaledResolution) {
@@ -48,6 +86,21 @@ public class Position {
boolean wasPositiveX = this.x >= 0;
this.x += deltaX;
+ if(centerX) {
+ if(wasPositiveX) {
+ if(this.x > screenWidth/2-objWidth) {
+ deltaX += screenWidth/2-objWidth-this.x;
+ this.x = screenWidth/2-objWidth;
+ }
+ } else {
+ if(this.x < -screenWidth/2) {
+ deltaX += -screenWidth/2-this.x;
+ this.x = -screenWidth/2;
+ }
+ }
+ return deltaX;
+ }
+
if(wasPositiveX) {
if(this.x < 2) {
deltaX += 2-this.x;
@@ -82,6 +135,21 @@ public class Position {
boolean wasPositiveY = this.y >= 0;
this.y += deltaY;
+ if(centerY) {
+ if(wasPositiveY) {
+ if(this.y > screenHeight/2-objHeight) {
+ deltaY += screenHeight/2-objHeight-this.y;
+ this.y = screenHeight/2-objHeight;
+ }
+ } else {
+ if(this.y < -screenHeight/2) {
+ deltaY += -screenHeight/2-this.y;
+ this.y = -screenHeight/2;
+ }
+ }
+ return deltaY;
+ }
+
if(wasPositiveY) {
if(this.y < 2) {
deltaY += 2-this.y;
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java
index 117a97bd..c5b6b3d8 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/core/config/gui/GuiPositionEditor.java
@@ -2,10 +2,12 @@ package io.github.moulberry.notenoughupdates.core.config.gui;
import io.github.moulberry.notenoughupdates.core.config.Position;
import io.github.moulberry.notenoughupdates.core.util.render.RenderUtils;
+import io.github.moulberry.notenoughupdates.util.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.ScaledResolution;
+import org.lwjgl.input.Mouse;
import java.io.IOException;
@@ -25,6 +27,8 @@ public class GuiPositionEditor extends GuiScreen {
private int oldMouseX = 0;
private int oldMouseY = 0;
+ private int guiScaleOverride = -1;
+
public GuiPositionEditor(Position position, int elementWidth, int elementHeight,
Runnable renderCallback,
Runnable positionChangedCallback,
@@ -38,6 +42,11 @@ public class GuiPositionEditor extends GuiScreen {
this.closedCallback = closedCallback;
}
+ public GuiPositionEditor withScale(int scale) {
+ this.guiScaleOverride = scale;
+ return this;
+ }
+
@Override
public void onGuiClosed() {
super.onGuiClosed();
@@ -47,10 +56,18 @@ public class GuiPositionEditor extends GuiScreen {
@Override
public void drawScreen(int mouseX, int mouseY, float partialTicks) {
super.drawScreen(mouseX, mouseY, partialTicks);
- ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ ScaledResolution scaledResolution;
+ if(guiScaleOverride >= 0) {
+ scaledResolution = Utils.pushGuiScale(guiScaleOverride);
+ } else {
+ scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ }
+
this.width = scaledResolution.getScaledWidth();
this.height = scaledResolution.getScaledHeight();
+ mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth;
+ mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1;
drawDefaultBackground();
@@ -64,7 +81,13 @@ public class GuiPositionEditor extends GuiScreen {
int x = position.getAbsX(scaledResolution);
int y = position.getAbsY(scaledResolution);
+ if(position.isCenterX()) x -= elementWidth/2;
+ if(position.isCenterY()) y -= elementHeight/2;
Gui.drawRect(x, y, x+elementWidth, y+elementHeight, 0x80404040);
+
+ if(guiScaleOverride >= 0) {
+ Utils.pushGuiScale(-1);
+ }
}
@Override
@@ -72,10 +95,19 @@ public class GuiPositionEditor extends GuiScreen {
super.mouseClicked(mouseX, mouseY, mouseButton);
if(mouseButton == 0) {
- ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ ScaledResolution scaledResolution;
+ if(guiScaleOverride >= 0) {
+ scaledResolution = Utils.pushGuiScale(guiScaleOverride);
+ } else {
+ scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ }
+ mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth;
+ mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1;
int x = position.getAbsX(scaledResolution);
int y = position.getAbsY(scaledResolution);
+ if(position.isCenterX()) x -= elementWidth/2;
+ if(position.isCenterY()) y -= elementHeight/2;
if(mouseX >= x && mouseY >= y &&
mouseX <= x+elementWidth && mouseY <= y+elementHeight) {
@@ -83,6 +115,10 @@ public class GuiPositionEditor extends GuiScreen {
grabbedX = mouseX;
grabbedY = mouseY;
}
+
+ if(guiScaleOverride >= 0) {
+ Utils.pushGuiScale(-1);
+ }
}
}
@@ -96,14 +132,26 @@ public class GuiPositionEditor extends GuiScreen {
protected void mouseClickMove(int mouseX, int mouseY, int clickedMouseButton, long timeSinceLastClick) {
super.mouseClickMove(mouseX, mouseY, clickedMouseButton, timeSinceLastClick);
- ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
if(clicked) {
+ ScaledResolution scaledResolution;
+ if(guiScaleOverride >= 0) {
+ scaledResolution = Utils.pushGuiScale(guiScaleOverride);
+ } else {
+ scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+ }
+ mouseX = Mouse.getX() * width / Minecraft.getMinecraft().displayWidth;
+ mouseY = height - Mouse.getY() * height / Minecraft.getMinecraft().displayHeight - 1;
+
oldMouseX = mouseX;
oldMouseY = mouseY;
grabbedX += position.moveX(mouseX - grabbedX, elementWidth, scaledResolution);
grabbedY += position.moveY(mouseY - grabbedY, elementHeight, scaledResolution);
positionChangedCallback.run();
+
+ if(guiScaleOverride >= 0) {
+ Utils.pushGuiScale(-1);
+ }
}
}
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java
index be2b030a..993eb78b 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/DungeonMap.java
@@ -1400,7 +1400,7 @@ public class DungeonMap {
if (j / 4 == 0) {
c = new Color((i + i / 128 & 1) * 8 + 16 << 24, true);
} else {
- c = new Color(MapColor.mapColorArray[j / 4].func_151643_b(j & 3), true);
+ c = new Color(MapColor.mapColorArray[j / 4].getMapColor(j & 3), true);
}
colourMap[x][y] = c;
@@ -1469,8 +1469,10 @@ public class DungeonMap {
Position pos = NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition;
int size = 80 + Math.round(40*NotEnoughUpdates.INSTANCE.config.dungeonMap.dmBorderSize);
- renderMap(pos.getAbsX(event.resolution)+size/2, pos.getAbsY(event.resolution)+size/2,
+ ScaledResolution scaledResolution = Utils.pushGuiScale(2);
+ renderMap(pos.getAbsX(scaledResolution)+size/2, pos.getAbsY(scaledResolution)+size/2,
colourMap, decorations, roomSizeBlocks, actualPlayers, true, event.partialTicks);
+ Utils.pushGuiScale(-1);
}
}
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java
index cd951830..041cd842 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/dungeons/GuiDungeonMapEditor.java
@@ -353,11 +353,11 @@ public class GuiDungeonMapEditor extends GuiScreen {
Utils.drawHoveringText(tooltipToDisplay, mouseX, mouseY, width, height, 200, Minecraft.getMinecraft().fontRendererObj);
}
+ Utils.pushGuiScale(-1);
+
if(activeColourEditor != null) {
activeColourEditor.render();
}
-
- Utils.pushGuiScale(-1);
}
public void drawSlider(Field option, int centerX, int centerY) {
@@ -474,18 +474,18 @@ public class GuiDungeonMapEditor extends GuiScreen {
players.add(Minecraft.getMinecraft().thePlayer.getName());
GlStateManager.color(1, 1, 1, 1);
- ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
-
Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(
NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition,
size, size, () -> {
+ ScaledResolution scaledResolution = Utils.pushGuiScale(2);
demoMap.renderMap(NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsX(scaledResolution)+size/2,
NotEnoughUpdates.INSTANCE.config.dungeonMap.dmPosition.getAbsY(scaledResolution)+size/2,
NotEnoughUpdates.INSTANCE.colourMap, decorations, 0,
players, false, 0);
+ Utils.pushGuiScale(-1);
}, () -> {
}, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiDungeonMapEditor()
- ));
+ ).withScale(2));
return;
}
}
@@ -497,9 +497,10 @@ public class GuiDungeonMapEditor extends GuiScreen {
public void handleMouseInput() throws IOException {
super.handleMouseInput();
- int mouseX = Mouse.getEventX() * this.width / this.mc.displayWidth;
- int mouseY = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1;
if(activeColourEditor != null) {
+ ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
+ int mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
+ int mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
activeColourEditor.mouseInput(mouseX, mouseY);
}
}
@@ -567,13 +568,21 @@ public class GuiDungeonMapEditor extends GuiScreen {
options.dmCompat++;
if(options.dmCompat > 2) options.dmCompat = 0;
break;
- case 26:
- activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBackgroundColour,
- (col) -> options.dmBackgroundColour = col, () -> activeColourEditor = null);
+ case 26: {
+ ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
+ mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
+ mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
+ activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBackgroundColour,
+ (col) -> options.dmBackgroundColour = col, () -> activeColourEditor = null);
+ }
break;
- case 27:
- activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBorderColour,
- (col) -> options.dmBorderColour = col, () -> activeColourEditor = null);
+ case 27: {
+ ScaledResolution realRes = new ScaledResolution(Minecraft.getMinecraft());
+ mouseX = Mouse.getEventX() * realRes.getScaledWidth() / this.mc.displayWidth;
+ mouseY = realRes.getScaledHeight() - Mouse.getEventY() * realRes.getScaledHeight() / this.mc.displayHeight - 1;
+ activeColourEditor = new GuiElementColour(mouseX, mouseY, options.dmBorderColour,
+ (col) -> options.dmBorderColour = col, () -> activeColourEditor = null);
+ }
break;
case 28:
options.dmChromaBorder = !options.dmChromaBorder; break;
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CommissionOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CommissionOverlay.java
index 33cf9c4b..decfbf3f 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CommissionOverlay.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/CommissionOverlay.java
@@ -6,8 +6,8 @@ import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.core.config.Position;
import io.github.moulberry.notenoughupdates.core.util.StringUtils;
import io.github.moulberry.notenoughupdates.core.util.lerp.LerpUtils;
-import io.github.moulberry.notenoughupdates.textoverlays.TextOverlay;
-import io.github.moulberry.notenoughupdates.textoverlays.TextOverlayStyle;
+import io.github.moulberry.notenoughupdates.overlays.TextOverlay;
+import io.github.moulberry.notenoughupdates.overlays.TextOverlayStyle;
import io.github.moulberry.notenoughupdates.util.SBInfo;
import net.minecraft.client.Minecraft;
import net.minecraft.client.network.NetworkPlayerInfo;
@@ -28,14 +28,17 @@ public class CommissionOverlay extends TextOverlay {
super(position, styleSupplier);
}
+ public static Map<String, Float> commissionProgress = new LinkedHashMap<>();
+
@Override
public void update() {
- overlayStrings = new ArrayList<>();
+ overlayStrings = null;
if(SBInfo.getInstance().getLocation() == null) return;
if(!SBInfo.getInstance().getLocation().equals("mining_3")) return;
- Map<String, Float> commissionProgress = new LinkedHashMap<>();
+ overlayStrings = new ArrayList<>();
+ commissionProgress.clear();
List<String> forgeStrings = new ArrayList<>();
String mithrilPowder = null;
@@ -44,7 +47,7 @@ public class CommissionOverlay extends TextOverlay {
List<NetworkPlayerInfo> players = playerOrdering.sortedCopy(Minecraft.getMinecraft().thePlayer.sendQueue.getPlayerInfoMap());
for(NetworkPlayerInfo info : players) {
String name = Minecraft.getMinecraft().ingameGUI.getTabList().getPlayerName(info);
- if(name.contains("Mithril Powder")) {
+ if(name.contains("Mithril Powder:")) {
mithrilPowder = trimIgnoreColour(name);
}
if(name.equals(RESET.toString()+BLUE+BOLD+"Forges"+RESET)) {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesTextures.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesTextures.java
index 4a639287..42712c39 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesTextures.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesTextures.java
@@ -1,27 +1,232 @@
package io.github.moulberry.notenoughupdates.miscfeatures;
+import com.google.gson.*;
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.util.SBInfo;
+import io.github.moulberry.notenoughupdates.util.SpecialColour;
+import net.minecraft.block.BlockClay;
+import net.minecraft.block.BlockColored;
+import net.minecraft.block.BlockHardenedClay;
+import net.minecraft.block.BlockStone;
+import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.entity.Entity;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.EnumDyeColor;
+import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.client.event.RenderWorldLastEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.input.Mouse;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
public class DwarvenMinesTextures {
- private static final byte biomeId1 = (byte)(BiomeGenBase.extremeHillsEdge.biomeID & 255);
- private static final byte[] biomeMap1 = new byte[16*16];
- private static final byte biomeId2 = (byte)(BiomeGenBase.extremeHillsPlus.biomeID & 255);
- private static final byte[] biomeMap2 = new byte[16*16];
- static {
- Arrays.fill(biomeMap1, biomeId1);
- Arrays.fill(biomeMap2, biomeId2);
+ /*private static final HashSet<BlockPos> blocks = new HashSet<>();
+ private static final HashSet<ChunkCoordIntPair> ignoredChunks = new HashSet<>();
+ private static final HashMap<ChunkCoordIntPair, HashMap<ChunkCoordIntPair, Set<BlockPos>>> ignoredBlocks = new HashMap<>();
+ private static final HashMap<ChunkCoordIntPair, HashMap<ChunkCoordIntPair, Set<BlockPos>>> whitelistBlocks = new HashMap<>();*/
+
+ private static class IgnoreColumn {
+ boolean always;
+ int minY;
+ int maxY;
+
+ public IgnoreColumn(boolean always, int minY, int maxY) {
+ this.always = always;
+ this.minY = minY;
+ this.maxY = maxY;
+ }
}
+ private static HashSet<ChunkCoordIntPair> ignoredChunks = null;
+ private static final HashMap<ChunkCoordIntPair, HashMap<ChunkCoordIntPair, IgnoreColumn>> loadedChunkData = new HashMap<>();
+ private static final HashMap<ChunkCoordIntPair, Long> lastRetextureCheck = new HashMap<>();
+ private static long time;
+ private static boolean error = false;
+
+ public static boolean shouldBeRetextured(BlockPos pos) {
+ if(error) return false;
+ if(Minecraft.getMinecraft().theWorld == null) return false;
+
+ if(SBInfo.getInstance().getLocation() == null) return false;
+ if(!SBInfo.getInstance().getLocation().equals("mining_3")) return false;
+
+ IBlockState state = Minecraft.getMinecraft().theWorld.getBlockState(pos);
+ boolean titanium = state.getBlock() == Blocks.stone && state.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH;
+ if(titanium) {
+ IBlockState plus = Minecraft.getMinecraft().theWorld.getBlockState(pos.add(1, 0, 0));
+ if(plus.getBlock() == Blocks.double_stone_slab) {
+ return false;
+ }
+ IBlockState minus = Minecraft.getMinecraft().theWorld.getBlockState(pos.add(-1, 0, 0));
+ if(minus.getBlock() == Blocks.double_stone_slab) {
+ return false;
+ }
+ }
+
+ if(titanium || (state.getBlock() == Blocks.stained_hardened_clay && state.getValue(BlockColored.COLOR) == EnumDyeColor.CYAN) ||
+ (state.getBlock() == Blocks.wool && state.getValue(BlockColored.COLOR) == EnumDyeColor.GRAY)) {
+
+ if(ignoredChunks == null) {
+ try {
+ ignoredChunks = new HashSet<>();
+ ResourceLocation loc = new ResourceLocation("notenoughupdates:dwarven_data/all.json");
+ InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(loc).getInputStream();
+
+ try(BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
+ JsonObject json = NotEnoughUpdates.INSTANCE.manager.gson.fromJson(reader, JsonObject.class);
+ for(Map.Entry<String, JsonElement> entry : json.entrySet()) {
+ String coord = entry.getKey();
+ String[] split = coord.split("_");
+ int left = Integer.parseInt(split[0]);
+ int right = Integer.parseInt(split[1]);
+ ignoredChunks.add(new ChunkCoordIntPair(left, right));
+ }
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ error = true;
+ return false;
+ }
+ }
+ if(ignoredChunks != null) {
+ ChunkCoordIntPair pair = new ChunkCoordIntPair(MathHelper.floor_float(pos.getX()/16f),
+ MathHelper.floor_float(pos.getZ()/16f));
+
+ lastRetextureCheck.put(pair, time);
+
+ if(ignoredChunks.contains(pair)) {
+ return false;
+ }
+ if(titanium) {
+ return true;
+ }
+
+ if(!loadedChunkData.containsKey(pair)) {
+ try {
+ HashMap<ChunkCoordIntPair, IgnoreColumn> map = new HashMap<>();
+ loadedChunkData.put(pair, map);
+
+ ResourceLocation loc = new ResourceLocation("notenoughupdates:dwarven_data/"+
+ pair.chunkXPos+"_"+pair.chunkZPos+".json");
+ InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(loc).getInputStream();
+
+ try(BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
+ JsonObject json = NotEnoughUpdates.INSTANCE.manager.gson.fromJson(reader, JsonObject.class);
+ for(Map.Entry<String, JsonElement> entry : json.entrySet()) {
+ String coord = entry.getKey();
+ String[] split = coord.split(":");
+ int left = Integer.parseInt(split[0]);
+ int right = Integer.parseInt(split[1]);
+
+ IgnoreColumn ignore = null;
+ if(entry.getValue().isJsonPrimitive()) {
+ JsonPrimitive prim = entry.getValue().getAsJsonPrimitive();
+ if(prim.isBoolean()) {
+ ignore = new IgnoreColumn(true, 0, 0);
+ } else if(prim.isNumber()) {
+ int y = prim.getAsInt();
+ ignore = new IgnoreColumn(false, y, y);
+ }
+ } else if(entry.getValue().isJsonArray()) {
+ JsonArray arr = entry.getValue().getAsJsonArray();
+ if(arr.size() == 2) {
+ int min = arr.get(0).getAsInt();
+ int max = arr.get(1).getAsInt();
+ ignore = new IgnoreColumn(false, min, max);
+ }
+ }
+ if (ignore != null) {
+ ChunkCoordIntPair offset = new ChunkCoordIntPair(left, right);
+ map.put(offset, ignore);
+ }
+ }
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ loadedChunkData.put(pair, null);
+ }
+ }
+ if(loadedChunkData.get(pair) != null) {
+ HashMap<ChunkCoordIntPair, IgnoreColumn> map = loadedChunkData.get(pair);
+
+ int modX = pos.getX() % 16;
+ int modZ = pos.getZ() % 16;
+ if(modX < 0) modX += 16;
+ if(modZ < 0) modZ += 16;
+ ChunkCoordIntPair offset = new ChunkCoordIntPair(modX, modZ);
+
+ if(map.containsKey(offset)) {
+ IgnoreColumn ignore = map.get(offset);
+ if(ignore.always) {
+ return false;
+ } else {
+ int y = pos.getY();
+ if(y >= ignore.minY && y <= ignore.maxY) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /*@SubscribeEvent
+ public void onRender(RenderWorldLastEvent event) {
+ Entity viewer = Minecraft.getMinecraft().getRenderViewEntity();
+ double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * event.partialTicks;
+ double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * event.partialTicks;
+ double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * event.partialTicks;
+
+ int x = MathHelper.floor_double(viewer.posX/16f);
+ int z = MathHelper.floor_double(viewer.posZ/16f);
+ File file = new File("C:/Users/James/Desktop/testfolder/"+x+"_"+z+".json");
+
+ int col = 0xff0000;
+ if(file.exists()) {
+ col = 0x00ff00;
+ if(Keyboard.isKeyDown(Keyboard.KEY_K)) {
+ file.delete();
+ }
+
+ }
+
+ AxisAlignedBB bb = new AxisAlignedBB(
+ MathHelper.floor_double(viewerX/16)*16-viewerX,
+ 0-viewerY,
+ MathHelper.floor_double(viewerZ/16)*16-viewerZ,
+ MathHelper.floor_double(viewerX/16)*16+16-viewerX,
+ 255-viewerY,
+ MathHelper.floor_double(viewerZ/16)*16+16-viewerZ).expand(0.01f, 0.01f, 0.01f);
+
+ GlStateManager.disableCull();
+ CustomItemEffects.drawFilledBoundingBox(bb, 1f, SpecialColour.special(0, 100, col));
+ GlStateManager.enableCull();
+ GlStateManager.enableTexture2D();
+ }*/
+
+ //Render all blocks - extremeHillsEdge
+ //Don't render smooth diorite - extremeHillsPlus
+ //Don't render clay - mesaPlateau_F
+
public static void tick() {
- if(Minecraft.getMinecraft().theWorld == null) return;
+ time = System.currentTimeMillis();
+ lastRetextureCheck.entrySet().removeIf((checks) -> time - checks.getValue() > 30*1000);
+
+ /*if(Minecraft.getMinecraft().theWorld == null) return;
if(SBInfo.getInstance().getLocation() == null) return;
if(!SBInfo.getInstance().getLocation().equals("mining_3")) return;
@@ -29,62 +234,161 @@ public class DwarvenMinesTextures {
int playerX = (int)Minecraft.getMinecraft().thePlayer.posX;
int playerZ = (int)Minecraft.getMinecraft().thePlayer.posZ;
+
+ if(Keyboard.isKeyDown(Keyboard.KEY_C)) {
+ ignoredBlocks.clear();
+ whitelistBlocks.clear();
+ }
+ if(Keyboard.isKeyDown(Keyboard.KEY_R)) {
+ ignoredChunks.clear();
+ }
+ if(Keyboard.isKeyDown(Keyboard.KEY_P)) {
+ Gson gson = new GsonBuilder().create();
+ JsonObject obj = new JsonObject();
+
+ for(Map.Entry<ChunkCoordIntPair, HashMap<ChunkCoordIntPair, Set<BlockPos>>> entry : ignoredBlocks.entrySet()) {
+ String chunkId = entry.getKey().chunkXPos + "_" + entry.getKey().chunkZPos;
+ if(!whitelistBlocks.containsKey(entry.getKey()) || whitelistBlocks.get(entry.getKey()).isEmpty()) {
+ obj.addProperty(chunkId, true);
+ } else {
+ HashMap<ChunkCoordIntPair, Set<BlockPos>> whitelistMap = whitelistBlocks.get(entry.getKey());
+ JsonObject subChunkObj = new JsonObject();
+
+ for(Map.Entry<ChunkCoordIntPair, Set<BlockPos>> columnEntry : entry.getValue().entrySet()) {
+ String columnId = columnEntry.getKey().chunkXPos + ":" + columnEntry.getKey().chunkZPos;
+
+ if(!whitelistMap.containsKey(columnEntry.getKey()) || whitelistMap.get(columnEntry.getKey()).isEmpty()) {
+ subChunkObj.addProperty(columnId, true);
+ } else if(!columnEntry.getValue().isEmpty()) {
+ JsonArray whitelistedBlocksInColumn = new JsonArray();
+
+ int min = 300;
+ int max = 0;
+ for(BlockPos pos : columnEntry.getValue()) {
+ int y = pos.getY();
+ if(y < min) {
+ min = y;
+ }
+ if(y > max) {
+ max = y;
+ }
+ }
+ whitelistedBlocksInColumn.add(new JsonPrimitive(min));
+ whitelistedBlocksInColumn.add(new JsonPrimitive(max));
+ if(min < max) {
+ subChunkObj.add(columnId, whitelistedBlocksInColumn);
+ } else {
+ subChunkObj.addProperty(columnId, min);
+ }
+ }
+ }
+ try {
+ File file = new File("C:/Users/James/Desktop/testfolder/"+chunkId+".json");
+ file.createNewFile();
+
+ try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) {
+ writer.write(gson.toJson(subChunkObj));
+ }
+ } catch(IOException ignored) {
+ ignored.printStackTrace();
+ }
+ }
+ }
+
+ try {
+ File file = new File("C:/Users/James/Desktop/testfolder/all.json");
+ file.createNewFile();
+
+ try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) {
+ writer.write(gson.toJson(obj));
+ }
+ } catch(IOException ignored) {
+ ignored.printStackTrace();
+ }
+
+ }
+
for(int xC=-10; xC<=10; xC++) {
+ out:
for(int zC=-10; zC<=10; zC++) {
ChunkCoordIntPair pair = new ChunkCoordIntPair(playerX/16+xC, playerZ/16+zC);
if(!ignoredChunks.contains(pair)) {
- Minecraft.getMinecraft().theWorld.getChunkFromChunkCoords(pair.chunkXPos, pair.chunkZPos).setBiomeArray(biomeMap1);
- } else {
- Minecraft.getMinecraft().theWorld.getChunkFromChunkCoords(pair.chunkXPos, pair.chunkZPos).setBiomeArray(biomeMap2);
+ ignoredChunks.add(pair);
+
+ boolean add = false;
+ for(int x=0; x<16; x++) {
+ for(int y=0; y<255; y++) {
+ for(int z=0; z<16; z++) {
+ BlockPos pos = new BlockPos(pair.chunkXPos*16+x, y, pair.chunkZPos*16+z);
+ IBlockState state = Minecraft.getMinecraft().theWorld.getBlockState(pos);
+
+ ChunkCoordIntPair column = new ChunkCoordIntPair(x, z);
+
+ if(state != null && state.getBlock() != Blocks.air) add = true;
+
+ if(state != null && ((state.getBlock() == Blocks.stained_hardened_clay &&
+ state.getValue(BlockColored.COLOR) == EnumDyeColor.CYAN) ||
+ (state.getBlock() == Blocks.wool) && state.getValue(BlockColored.COLOR) == EnumDyeColor.GRAY ||
+ (state.getBlock() == Blocks.stone && state.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH))) {
+
+ boolean hasAir = false;
+ for(int xO=-1; xO<=1; xO++) {
+ for (int yO = -1; yO <= 1; yO++) {
+ for (int zO = -1; zO <= 1; zO++) {
+ int tot = Math.abs(xO) + Math.abs(yO) + Math.abs(zO);
+ if(tot == 1) {
+ BlockPos pos2 = pos.add(xO, yO, zO);
+ IBlockState state2 = Minecraft.getMinecraft().theWorld.getBlockState(pos2);
+
+ if(state2 == null) {
+ continue out;
+ } else if(state2.getBlock() == Blocks.air) {
+ hasAir = true;
+ }
+ }
+ }
+ }
+ }
+ if(!hasAir) continue;
+
+ boolean found = false;
+ out2:
+ for(int xO=-4; xO<=4; xO++) {
+ for(int yO=-4; yO<=4; yO++) {
+ for(int zO=-4; zO<=4; zO++) {
+ int distSq = xO*xO + yO*yO + zO*zO;
+ if(distSq < 4*4) {
+ BlockPos pos2 = pos.add(xO, yO, zO);
+ IBlockState state2 = Minecraft.getMinecraft().theWorld.getBlockState(pos2);
+
+ if(state2 == null) {
+ continue out;
+ } else if(state2.getBlock() == Blocks.prismarine) {
+ ignoredBlocks.computeIfAbsent(pair, k->new HashMap<>())
+ .computeIfAbsent(column, k-> new HashSet<>()).remove(pos);
+ whitelistBlocks.computeIfAbsent(pair, k->new HashMap<>())
+ .computeIfAbsent(column, k-> new HashSet<>()).add(pos);
+ found = true;
+ break out2;
+ }
+ }
+ }
+ }
+ }
+ if(!found) {
+ ignoredBlocks.computeIfAbsent(pair, k->new HashMap<>())
+ .computeIfAbsent(column, k-> new HashSet<>()).add(pos);
+ }
+
+ }
+ }
+ }
+ }
}
- }
- }
- }
- private static Set<ChunkCoordIntPair> ignoredChunks = new HashSet<>();
- static {
- ignoredChunks.add(new ChunkCoordIntPair(9, 3));
- ignoredChunks.add(new ChunkCoordIntPair(6, 0));
- ignoredChunks.add(new ChunkCoordIntPair(0, -4));
- ignoredChunks.add(new ChunkCoordIntPair(1, -6));
- ignoredChunks.add(new ChunkCoordIntPair(-1, -3));
- ignoredChunks.add(new ChunkCoordIntPair(6, 5));
- ignoredChunks.add(new ChunkCoordIntPair(-1, -2));
- ignoredChunks.add(new ChunkCoordIntPair(8, -1));
- ignoredChunks.add(new ChunkCoordIntPair(8, -2));
- ignoredChunks.add(new ChunkCoordIntPair(6, 6));
- ignoredChunks.add(new ChunkCoordIntPair(6, 1));
- ignoredChunks.add(new ChunkCoordIntPair(9, -1));
- ignoredChunks.add(new ChunkCoordIntPair(9, 4));
- ignoredChunks.add(new ChunkCoordIntPair(8, 0));
- ignoredChunks.add(new ChunkCoordIntPair(9, 2));
- ignoredChunks.add(new ChunkCoordIntPair(1, -4));
- ignoredChunks.add(new ChunkCoordIntPair(0, -6));
- ignoredChunks.add(new ChunkCoordIntPair(-1, -5));
- ignoredChunks.add(new ChunkCoordIntPair(9, 1));
- ignoredChunks.add(new ChunkCoordIntPair(9, 6));
- ignoredChunks.add(new ChunkCoordIntPair(-1, -6));
- ignoredChunks.add(new ChunkCoordIntPair(6, 4));
- ignoredChunks.add(new ChunkCoordIntPair(1, -3));
- ignoredChunks.add(new ChunkCoordIntPair(9, 5));
- ignoredChunks.add(new ChunkCoordIntPair(1, -2));
- ignoredChunks.add(new ChunkCoordIntPair(0, -5));
- ignoredChunks.add(new ChunkCoordIntPair(7, -1));
- ignoredChunks.add(new ChunkCoordIntPair(7, -2));
- ignoredChunks.add(new ChunkCoordIntPair(9, 0));
- ignoredChunks.add(new ChunkCoordIntPair(6, 3));
- ignoredChunks.add(new ChunkCoordIntPair(0, -3));
- ignoredChunks.add(new ChunkCoordIntPair(-1, -4));
- ignoredChunks.add(new ChunkCoordIntPair(1, -5));
- ignoredChunks.add(new ChunkCoordIntPair(6, 2));
- ignoredChunks.add(new ChunkCoordIntPair(0, -2));
- ignoredChunks.add(new ChunkCoordIntPair(-2, -4));
- ignoredChunks.add(new ChunkCoordIntPair(-2, -5));
- ignoredChunks.add(new ChunkCoordIntPair(-2, -6));
- ignoredChunks.add(new ChunkCoordIntPair(-1, -7));
- ignoredChunks.add(new ChunkCoordIntPair(0, -7));
- ignoredChunks.add(new ChunkCoordIntPair(1, -7));
+ }
+ }*/
}
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java
new file mode 100644
index 00000000..58cf4d20
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DwarvenMinesWaypoints.java
@@ -0,0 +1,314 @@
+package io.github.moulberry.notenoughupdates.miscfeatures;
+
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.options.NEUConfig;
+import io.github.moulberry.notenoughupdates.util.SBInfo;
+import io.github.moulberry.notenoughupdates.util.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityPlayerSP;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.inventory.GuiChest;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.item.EntityArmorStand;
+import net.minecraft.inventory.ContainerChest;
+import net.minecraft.inventory.IInventory;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraftforge.client.event.ClientChatReceivedEvent;
+import net.minecraftforge.client.event.RenderLivingEvent;
+import net.minecraftforge.client.event.RenderWorldLastEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.util.vector.Vector3f;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+public class DwarvenMinesWaypoints {
+
+ private HashMap<String, Vector3f> waypointsMap = new HashMap<>();
+ {
+ waypointsMap.put("Dwarven Village", new Vector3f(-37, 199, -122));
+ waypointsMap.put("Miner's Guild", new Vector3f(-74, 220, -122));
+ waypointsMap.put("Fetchur", new Vector3f(85, 223, -120));
+ waypointsMap.put("Palace Bridge", new Vector3f(129, 186, 8));
+ waypointsMap.put("Royal Palace", new Vector3f(129, 194, 194));
+ waypointsMap.put("Puzzler", new Vector3f(181, 195, 135));
+ waypointsMap.put("Grand Library", new Vector3f(183, 195, 181));
+ waypointsMap.put("Barracks of Heroes", new Vector3f(93, 195, 181));
+ waypointsMap.put("Royal Mines", new Vector3f(178, 149, 71));
+ waypointsMap.put("Cliffside Veins", new Vector3f(40, 136, 17));
+ waypointsMap.put("Forge Basin", new Vector3f(0, 169, -2));
+ waypointsMap.put("The Forge", new Vector3f(0, 148, -69));
+ waypointsMap.put("Rampart's Quarry", new Vector3f(-106, 147, 2));
+ waypointsMap.put("Far Reserve", new Vector3f(-160, 148, 17));
+ waypointsMap.put("Upper Mines", new Vector3f(-123, 170, -71));
+ waypointsMap.put("Goblin Burrows", new Vector3f(-138, 143, 141));
+ waypointsMap.put("Great Ice Wall", new Vector3f(0, 127, 160));
+ waypointsMap.put("Aristocrat Passage", new Vector3f(129, 150, 137));
+ waypointsMap.put("Hanging Court", new Vector3f(91, 186, 129));
+ waypointsMap.put("Divan's Gateway", new Vector3f(0, 127, 87));
+ waypointsMap.put("Lava Springs", new Vector3f(57, 196, -15));
+ waypointsMap.put("The Mist", new Vector3f(0, 75, 82));
+ }
+
+ private static final HashSet<String> emissaryNames = new HashSet<>();
+ static {
+ emissaryNames.add(EnumChatFormatting.GOLD+"Emissary Ceanna"+EnumChatFormatting.RESET);
+ emissaryNames.add(EnumChatFormatting.GOLD+"Emissary Carlton"+EnumChatFormatting.RESET);
+ emissaryNames.add(EnumChatFormatting.GOLD+"Emissary Wilson"+EnumChatFormatting.RESET);
+ emissaryNames.add(EnumChatFormatting.GOLD+"Emissary Lilith"+EnumChatFormatting.RESET);
+ emissaryNames.add(EnumChatFormatting.GOLD+"Emissary Frasier"+EnumChatFormatting.RESET);
+ emissaryNames.add(EnumChatFormatting.GOLD+"Emissary Eliza"+EnumChatFormatting.RESET);
+ emissaryNames.add(EnumChatFormatting.GOLD.toString()+EnumChatFormatting.BOLD+"King Thormyr"+EnumChatFormatting.RESET);
+ }
+
+ private enum Emissary {
+ THORMYR("King Thormyr", 0, new Vector3f(129, 196, 196)),
+ CEANNA("Emissary Ceanna", 1, new Vector3f(42, 134, 22)),
+ CARLTON("Emissary Carlton", 1, new Vector3f(-73, 153, -11)),
+ WILSON("Emissary Wilson", 2, new Vector3f(171, 150, 31)),
+ LILITH("Emissary Lilith", 2, new Vector3f(58, 198, -8)),
+ FRAISER("Emissary Frasier", 3, new Vector3f(-132, 174, -50)),
+ ELIZA("Emissary Eliza", 3, new Vector3f(-37, 200, -131));
+
+ String name;
+ int minMilestone;
+ Vector3f loc;
+ Emissary(String name, int minMilestone, Vector3f loc) {
+ this.name = name;
+ this.minMilestone = minMilestone;
+ this.loc = loc;
+ }
+ }
+
+ private long powderGhastMillis = 0;
+ private String powderGhastLocation = null;
+ private final String ghastString = "\u00A7r\u00A7eFind the \u00A7r\u00A76Powder Ghast\u00A7r\u00A7e near the \u00A7r\u00A7b";
+
+ @SubscribeEvent
+ public void onChat(ClientChatReceivedEvent event) {
+ if(event.message.getFormattedText().startsWith(ghastString)) {
+ String sub = event.message.getFormattedText().substring(ghastString.length());
+ powderGhastLocation = Utils.cleanColour(sub).replace("!", "").trim();
+ powderGhastMillis = System.currentTimeMillis();
+ }
+ }
+
+ @SubscribeEvent
+ public void onTick(TickEvent.ClientTickEvent event) {
+ emissaryRemovedDistSq = -1;
+
+ if(SBInfo.getInstance().getLocation() == null) return;
+ if(!SBInfo.getInstance().getLocation().equals("mining_3")) return;
+
+ if(Minecraft.getMinecraft().currentScreen instanceof GuiChest) {
+ GuiChest chest = (GuiChest) Minecraft.getMinecraft().currentScreen;
+ ContainerChest container = (ContainerChest) chest.inventorySlots;
+ IInventory lower = container.getLowerChestInventory();
+
+ if(lower.getDisplayName().getFormattedText().contains("Commissions")) {
+ for(int i=0; i<lower.getSizeInventory(); i++) {
+ ItemStack stack = lower.getStackInSlot(i);
+ if(stack == null) continue;
+ if(stack.getDisplayName().equals(EnumChatFormatting.YELLOW+"Commission Milestones")) {
+ NotEnoughUpdates.INSTANCE.config.hidden.commissionMilestone = 5;
+ String[] lore = NotEnoughUpdates.INSTANCE.manager.getLoreFromNBT(stack.getTagCompound());
+ for(String line : lore) {
+ String clean = Utils.cleanColour(line);
+ if(clean.equals("Tier I Rewards:")) {
+ NotEnoughUpdates.INSTANCE.config.hidden.commissionMilestone = 0;
+ } else if(clean.equals("Tier II Rewards:")) {
+ NotEnoughUpdates.INSTANCE.config.hidden.commissionMilestone = 1;
+ } else if(clean.equals("Tier III Rewards:")) {
+ NotEnoughUpdates.INSTANCE.config.hidden.commissionMilestone = 2;
+ } else if(clean.equals("Tier IV Rewards:")) {
+ NotEnoughUpdates.INSTANCE.config.hidden.commissionMilestone = 3;
+ } else if(clean.equals("Tier V Rewards:")) {
+ NotEnoughUpdates.INSTANCE.config.hidden.commissionMilestone = 4;
+ }
+ }
+ return;
+ }
+ }
+ }
+ }
+ }
+
+ private boolean commissionFinished = false;
+ private double emissaryRemovedDistSq = 0;
+
+ @SubscribeEvent
+ public void onRenderSpecial(RenderLivingEvent.Specials.Pre<EntityArmorStand> event) {
+ if(SBInfo.getInstance().getLocation() == null) return;
+ if(!SBInfo.getInstance().getLocation().equals("mining_3")) return;
+
+ if(commissionFinished && event.entity instanceof EntityArmorStand) {
+ String name = event.entity.getDisplayName().getFormattedText();
+ if(emissaryRemovedDistSq > 0 && name.equals(EnumChatFormatting.YELLOW.toString()+EnumChatFormatting.BOLD+"CLICK"+EnumChatFormatting.RESET)) {
+ EntityPlayerSP p = Minecraft.getMinecraft().thePlayer;
+ double distSq = event.entity.getDistanceSq(p.posX, p.posY, p.posZ);
+ if(Math.abs(distSq - emissaryRemovedDistSq) < 1) {
+ event.setCanceled(true);
+ }
+ } else if(emissaryNames.contains(name)) {
+ EntityPlayerSP p = Minecraft.getMinecraft().thePlayer;
+ double distSq = event.entity.getDistanceSq(p.posX, p.posY, p.posZ);
+ if(distSq >= 12*12) {
+ emissaryRemovedDistSq = distSq;
+ event.setCanceled(true);
+ }
+ }
+ }
+ }
+
+
+ @SubscribeEvent
+ public void onRenderLast(RenderWorldLastEvent event) {
+ if(SBInfo.getInstance().getLocation() == null) return;
+ if(!SBInfo.getInstance().getLocation().equals("mining_3")) return;
+
+ int locWaypoint = NotEnoughUpdates.INSTANCE.config.mining.locWaypoints;
+
+ if(powderGhastLocation != null &&
+ System.currentTimeMillis() - powderGhastMillis < 30*1000) {
+ for(Map.Entry<String, Vector3f> entry : waypointsMap.entrySet()) {
+ if(entry.getKey().equals(powderGhastLocation)) {
+ renderWayPoint(EnumChatFormatting.GOLD+"Powder Ghast",
+ new Vector3f(entry.getValue()).translate(0, 5, 0), event.partialTicks);
+ break;
+ }
+ }
+ }
+
+ if(locWaypoint >= 1) {
+ for(Map.Entry<String, Vector3f> entry : waypointsMap.entrySet()) {
+ if(locWaypoint >= 2) {
+ renderWayPoint(EnumChatFormatting.AQUA+entry.getKey(), entry.getValue(), event.partialTicks);
+ } else {
+ for(String commissionName : CommissionOverlay.commissionProgress.keySet()) {
+ if(commissionName.toLowerCase().contains(entry.getKey().toLowerCase())) {
+ renderWayPoint(EnumChatFormatting.AQUA+entry.getKey(), entry.getValue(), event.partialTicks);
+ }
+ }
+ }
+ }
+ }
+
+ commissionFinished = NotEnoughUpdates.INSTANCE.config.mining.emissaryWaypoints >= 2;
+
+ if(NotEnoughUpdates.INSTANCE.config.mining.emissaryWaypoints == 0) return;
+
+ if(!commissionFinished) {
+ for(float f : CommissionOverlay.commissionProgress.values()) {
+ if (f >= 1) {
+ commissionFinished = true;
+ break;
+ }
+ }
+ }
+ if(commissionFinished) {
+ for(Emissary emissary : Emissary.values()) {
+ if(NotEnoughUpdates.INSTANCE.config.hidden.commissionMilestone >= emissary.minMilestone) {
+
+ EntityPlayerSP p = Minecraft.getMinecraft().thePlayer;
+ double dX = emissary.loc.x + 0.5f - p.posX;
+ double dY = emissary.loc.y + 0.188f - p.posY;
+ double dZ = emissary.loc.z + 0.5f - p.posZ;
+
+ double distSq = dX*dX + dY*dY + dZ*dZ;
+ if(distSq >= 12*12) {
+ renderWayPoint(EnumChatFormatting.GOLD+emissary.name,
+ new Vector3f(emissary.loc).translate(0.5f, 2.488f, 0.5f),
+ event.partialTicks);
+ }
+ }
+ }
+ }
+ }
+
+
+ private void renderWayPoint(String str, Vector3f loc, float partialTicks) {
+ GlStateManager.alphaFunc(516, 0.1F);
+
+ GlStateManager.pushMatrix();
+
+ Entity viewer = Minecraft.getMinecraft().getRenderViewEntity();
+ double viewerX = viewer.lastTickPosX + (viewer.posX - viewer.lastTickPosX) * partialTicks;
+ double viewerY = viewer.lastTickPosY + (viewer.posY - viewer.lastTickPosY) * partialTicks;
+ double viewerZ = viewer.lastTickPosZ + (viewer.posZ - viewer.lastTickPosZ) * partialTicks;
+
+ double x = loc.x-viewerX;
+ double y = loc.y-viewerY-viewer.getEyeHeight();
+ double z = loc.z-viewerZ;
+
+ double distSq = x*x + y*y + z*z;
+ double dist = Math.sqrt(distSq);
+ if(distSq > 144) {
+ x *= 12/dist;
+ y *= 12/dist;
+ z *= 12/dist;
+ }
+ GlStateManager.translate(x, y, z);
+ GlStateManager.translate(0, viewer.getEyeHeight(), 0);
+
+ renderNametag(str);
+
+ GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F);
+ GlStateManager.translate(0, -0.25f, 0);
+ GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F);
+ GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F);
+
+ renderNametag(EnumChatFormatting.YELLOW.toString()+Math.round(dist)+"m");
+
+ GlStateManager.popMatrix();
+
+ GlStateManager.disableLighting();
+ }
+
+ private void renderNametag(String str) {
+ FontRenderer fontrenderer = Minecraft.getMinecraft().fontRendererObj;
+ float f = 1.6F;
+ float f1 = 0.016666668F * f;
+ GlStateManager.pushMatrix();
+ GL11.glNormal3f(0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(-Minecraft.getMinecraft().getRenderManager().playerViewY, 0.0F, 1.0F, 0.0F);
+ GlStateManager.rotate(Minecraft.getMinecraft().getRenderManager().playerViewX, 1.0F, 0.0F, 0.0F);
+ GlStateManager.scale(-f1, -f1, f1);
+ GlStateManager.disableLighting();
+ GlStateManager.depthMask(false);
+ GlStateManager.disableDepth();
+ GlStateManager.enableBlend();
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
+ Tessellator tessellator = Tessellator.getInstance();
+ WorldRenderer worldrenderer = tessellator.getWorldRenderer();
+ int i = 0;
+
+ int j = fontrenderer.getStringWidth(str) / 2;
+ GlStateManager.disableTexture2D();
+ worldrenderer.begin(7, DefaultVertexFormats.POSITION_COLOR);
+ worldrenderer.pos((double)(-j - 1), (double)(-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
+ worldrenderer.pos((double)(-j - 1), (double)(8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
+ worldrenderer.pos((double)(j + 1), (double)(8 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
+ worldrenderer.pos((double)(j + 1), (double)(-1 + i), 0.0D).color(0.0F, 0.0F, 0.0F, 0.25F).endVertex();
+ tessellator.draw();
+ GlStateManager.enableTexture2D();
+ fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, 553648127);
+ GlStateManager.depthMask(true);
+
+ fontrenderer.drawString(str, -fontrenderer.getStringWidth(str) / 2, i, -1);
+
+ GlStateManager.enableDepth();
+ GlStateManager.enableBlend();
+ GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
+ GlStateManager.popMatrix();
+ }
+
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCooldowns.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCooldowns.java
index 8edd9217..f567ead5 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCooldowns.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/ItemCooldowns.java
@@ -80,7 +80,7 @@ public class ItemCooldowns {
}
private static Pattern PICKAXE_ABILITY_REGEX = Pattern.compile("\\u00a7r\\u00a7aYou used your " +
- "\\u00a7r\\u00a7e.+ \\u00a7r\\u00a7aPickaxe Ability!\\u00a7r");
+ "\\u00a7r\\u00a7..+ \\u00a7r\\u00a7aPickaxe Ability!\\u00a7r");
@SubscribeEvent
public void onChatMessage(ClientChatReceivedEvent event) {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java
index d803778b..3e4649be 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/MiningStuff.java
@@ -1,6 +1,8 @@
package io.github.moulberry.notenoughupdates.miscfeatures;
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.core.util.render.TextRenderUtils;
+import io.github.moulberry.notenoughupdates.options.NEUConfig;
import io.github.moulberry.notenoughupdates.util.SBInfo;
import io.github.moulberry.notenoughupdates.util.SpecialColour;
import io.github.moulberry.notenoughupdates.util.Utils;
@@ -10,15 +12,18 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.Entity;
+import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.init.Blocks;
import net.minecraft.network.play.server.S23PacketBlockChange;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraftforge.client.event.ClientChatReceivedEvent;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
+import net.minecraftforge.client.event.RenderLivingEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
import org.lwjgl.util.vector.Vector3f;
import org.lwjgl.util.vector.Vector4f;
@@ -28,28 +33,42 @@ public class MiningStuff {
private static long titaniumNotifMillis = 0;
public static void processBlockChangePacket(S23PacketBlockChange packetIn) {
+ if(!NotEnoughUpdates.INSTANCE.config.mining.titaniumAlert) {
+ return;
+ }
+
IBlockState state = packetIn.getBlockState();
if(SBInfo.getInstance().getLocation() != null &&
SBInfo.getInstance().getLocation().startsWith("mining_") &&
state.getBlock() == Blocks.stone && state.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) {
- BlockPos pos = packetIn.getBlockPosition();
- IBlockState existingBlock = Minecraft.getMinecraft().theWorld.getBlockState(pos);
- if(existingBlock == null) return;
- if(existingBlock.getBlock() == Blocks.stone && existingBlock.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) return;
+ for(String s : CommissionOverlay.commissionProgress.keySet()) {
+ if(s.contains("Titanium")) {
+ BlockPos pos = packetIn.getBlockPosition();
- BlockPos player = Minecraft.getMinecraft().thePlayer.getPosition();
+ IBlockState existingBlock = Minecraft.getMinecraft().theWorld.getBlockState(pos);
+ if(existingBlock == null) return;
+ if(existingBlock.getBlock() == Blocks.stone && existingBlock.getValue(BlockStone.VARIANT) == BlockStone.EnumType.DIORITE_SMOOTH) return;
- double distSq = pos.distanceSq(player);
+ BlockPos player = Minecraft.getMinecraft().thePlayer.getPosition();
- if(distSq < 8*8) {
- titaniumNotifMillis = System.currentTimeMillis();
+ double distSq = pos.distanceSq(player);
+
+ if(distSq < 12*12) {
+ titaniumNotifMillis = System.currentTimeMillis();
+ }
+ return;
+ }
}
}
}
@SubscribeEvent
public void onRenderOverlay(RenderGameOverlayEvent.Post event) {
+ if(!NotEnoughUpdates.INSTANCE.config.mining.titaniumAlert) {
+ return;
+ }
+
int delta = (int)(System.currentTimeMillis() - titaniumNotifMillis);
int notifLen = 5000;
int fadeLen = 500;
@@ -88,8 +107,24 @@ public class MiningStuff {
}
}
- public static Vector3f getCreeperColour() {
- return new Vector3f(0, 1, 0);
+ public static void tick() {
+ if(SBInfo.getInstance().getLocation() == null) return;
+ if(!SBInfo.getInstance().getLocation().equals("mining_3")) return;
+ if(Minecraft.getMinecraft().theWorld == null) return;
+
+ for(Entity entity : Minecraft.getMinecraft().theWorld.loadedEntityList) {
+ if(entity instanceof EntityCreeper) {
+ EntityCreeper creeper = (EntityCreeper) entity;
+ if(creeper.isInvisible() && creeper.getPowered()) {
+
+ BlockPos below = creeper.getPosition().down();
+ IBlockState state = Minecraft.getMinecraft().theWorld.getBlockState(below);
+ if(state != null && state.getBlock() == Blocks.stained_glass) {
+ creeper.setInvisible(!NotEnoughUpdates.INSTANCE.config.mining.revealMistCreepers);
+ }
+ }
+ }
+ }
}
@SubscribeEvent
@@ -122,6 +157,11 @@ public class MiningStuff {
@SubscribeEvent
public void onChatRecevied(ClientChatReceivedEvent event) {
+ if(!NotEnoughUpdates.INSTANCE.config.mining.puzzlerSolver) {
+ overlayLoc = null;
+ return;
+ }
+
if(event.message.getFormattedText().startsWith("\u00A7e[NPC] \u00A7dPuzzler") &&
event.message.getUnformattedText().contains(":")) {
String clean = Utils.cleanColour(event.message.getUnformattedText());
@@ -149,10 +189,18 @@ public class MiningStuff {
}
}
- public static void blockClicked(BlockPos loc) {
+ public static boolean blockClicked(BlockPos loc) {
if(loc.equals(overlayLoc)) {
overlayLoc = null;
}
+ IBlockState state = Minecraft.getMinecraft().theWorld.getBlockState(loc);
+ if(NotEnoughUpdates.INSTANCE.config.mining.dontMineStone &&
+ state != null && SBInfo.getInstance().getLocation() != null &&
+ SBInfo.getInstance().getLocation().startsWith("mining_") &&
+ state.getBlock() == Blocks.stone && state.getValue(BlockStone.VARIANT) == BlockStone.EnumType.STONE) {
+ return true;
+ }
+ return false;
}
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java
index c7e01bfa..a6042134 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscgui/AccessoryBagOverlay.java
@@ -6,11 +6,9 @@ import com.google.gson.JsonObject;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.core.util.StringUtils;
import io.github.moulberry.notenoughupdates.profileviewer.PlayerStats;
-import io.github.moulberry.notenoughupdates.textoverlays.TextOverlayStyle;
import io.github.moulberry.notenoughupdates.util.Constants;
import io.github.moulberry.notenoughupdates.util.Utils;
import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.gui.inventory.GuiChest;
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinPlayerControllerMP.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinPlayerControllerMP.java
index b821113b..a1565b07 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinPlayerControllerMP.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinPlayerControllerMP.java
@@ -1,5 +1,6 @@
package io.github.moulberry.notenoughupdates.mixins;
+import io.github.moulberry.notenoughupdates.miscfeatures.DwarvenMinesTextures;
import io.github.moulberry.notenoughupdates.miscfeatures.FairySouls;
import io.github.moulberry.notenoughupdates.miscfeatures.ItemCooldowns;
import io.github.moulberry.notenoughupdates.miscfeatures.MiningStuff;
@@ -14,10 +15,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(PlayerControllerMP.class)
public class MixinPlayerControllerMP {
- @Inject(method="clickBlock", at=@At("HEAD"))
+ @Inject(method="clickBlock", at=@At("HEAD"), cancellable = true)
public void clickBlock(BlockPos loc, EnumFacing face, CallbackInfoReturnable<Boolean> cir) {
- MiningStuff.blockClicked(loc);
ItemCooldowns.blockClicked(loc);
+ //DwarvenMinesTextures.blockClicked(loc);
+ if(MiningStuff.blockClicked(loc)) {
+ cir.setReturnValue(false);
+ }
}
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java
index bedfafc9..4a282d09 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinWorld.java
@@ -2,11 +2,15 @@ package io.github.moulberry.notenoughupdates.mixins;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.miscfeatures.CustomItemEffects;
+import io.github.moulberry.notenoughupdates.miscfeatures.DwarvenMinesTextures;
+import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(World.class)
public class MixinWorld {
@@ -22,4 +26,11 @@ public class MixinWorld {
}
}
+ @Inject(method="getBiomeGenForCoords", at=@At("HEAD"), cancellable = true)
+ public void getBiomeGenForCoords(BlockPos pos, CallbackInfoReturnable<BiomeGenBase> cir) {
+ if(DwarvenMinesTextures.shouldBeRetextured(pos)) {
+ cir.setReturnValue(BiomeGenBase.extremeHillsEdge);
+ }
+ }
+
}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
index 163a35f0..44d2faa1 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/NEUConfig.java
@@ -10,15 +10,12 @@ import io.github.moulberry.notenoughupdates.core.config.Config;
import io.github.moulberry.notenoughupdates.core.config.Position;
import io.github.moulberry.notenoughupdates.core.config.annotations.*;
import io.github.moulberry.notenoughupdates.core.config.gui.GuiPositionEditor;
-import io.github.moulberry.notenoughupdates.dungeons.GuiDungeonMapEditor;
import io.github.moulberry.notenoughupdates.miscfeatures.CommissionOverlay;
-import io.github.moulberry.notenoughupdates.textoverlays.TextOverlay;
-import io.github.moulberry.notenoughupdates.textoverlays.TextOverlayStyle;
+import io.github.moulberry.notenoughupdates.overlays.TextOverlayStyle;
import net.minecraft.client.Minecraft;
import net.minecraftforge.client.ClientCommandHandler;
import java.util.ArrayList;
-import java.util.regex.Pattern;
public class NEUConfig extends Config {
@@ -58,6 +55,15 @@ public class NEUConfig extends Config {
));
}
return;
+ case 2:
+ Minecraft.getMinecraft().displayGuiScreen(new GuiPositionEditor(
+ NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarPosition,
+ NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarWidth, 12, () -> {
+ }, () -> {
+ }, () -> NotEnoughUpdates.INSTANCE.openGui = new GuiScreenElementWrapper(
+ new NEUConfigEditor(NotEnoughUpdates.INSTANCE.config))
+ ));
+ return;
}
}
@@ -755,6 +761,47 @@ public class NEUConfig extends Config {
@ConfigEditorBoolean
public boolean titaniumAlert = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Don't Mine Stone",
+ desc = "Prevent mining stone blocks in mining areas"
+ )
+ @ConfigEditorBoolean
+ public boolean dontMineStone = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Reveal Mist Creepers",
+ desc = "Make the creepers in the Dwarven Mines mist visible"
+ )
+ @ConfigEditorBoolean
+ public boolean revealMistCreepers = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Mines Waypoints",
+ desc = "Show waypoints in the Dwarven mines to the various locations\n" +
+ "Use \"Commissions Only\" to only show active commission locations"
+ )
+ @ConfigEditorDropdown(
+ values = {"Hide", "Commissions Only", "Always"},
+ initialIndex = 1
+ )
+ public int locWaypoints = 1;
+
+ @Expose
+ @ConfigOption(
+ name = "Emissary Waypoints",
+ desc = "Show waypoints in the Dwarven mines to emissaries\n" +
+ "Use \"Commission End\" to only show after finishing commissions"
+ )
+ @ConfigEditorDropdown(
+ values = {"Hide", "Commission End", "Always"},
+ initialIndex = 1
+ )
+ public int emissaryWaypoints = 1;
+
@Expose
@ConfigOption(
name = "Overlay Position",
@@ -808,7 +855,36 @@ public class NEUConfig extends Config {
@ConfigEditorBoolean
public boolean hideEmptyForges = true;
+ @Expose
+ @ConfigOption(
+ name = "Drill Fuel Bar",
+ desc = "Show a fancy drill fuel bar when holding a drill in mining areas"
+ )
+ @ConfigEditorBoolean
+ public boolean drillFuelBar = true;
+
+ @Expose
+ @ConfigOption(
+ name = "Fuel Bar Width",
+ desc = "Change the width of the drill fuel bar"
+ )
+ @ConfigEditorSlider(
+ minValue = 50,
+ maxValue = 400,
+ minStep = 10
+ )
+ public int drillFuelBarWidth = 200;
+ @Expose
+ @ConfigOption(
+ name = "Fuel Bar Position",
+ desc = "Set the position of the drill fuel bar"
+ )
+ @ConfigEditorButton(
+ runnableId = 2,
+ buttonText = "Edit"
+ )
+ public Position drillFuelBarPosition = new Position(0, -100, true, false);
}
public static class NeuAuctionHouse {
@@ -1217,6 +1293,7 @@ public class NEUConfig extends Config {
}
public static class Hidden {
+ @Expose public int commissionMilestone = 0;
@Expose public boolean enableItemEditing = false;
@Expose public boolean cacheRenderedItempane = true;
@Expose public boolean autoupdate = true;
@@ -1251,7 +1328,7 @@ public class NEUConfig extends Config {
@ConfigEditorSlider(
minValue = 0,
maxValue = 5,
- minStep = 1
+ minStep = 0.25f
)
public int dmBorderSize = 1;
@@ -1263,7 +1340,7 @@ public class NEUConfig extends Config {
@ConfigEditorSlider(
minValue = 0,
maxValue = 5,
- minStep = 1
+ minStep = 0.25f
)
public int dmRoomSize = 1;
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java
new file mode 100644
index 00000000..256026e3
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/FuelBar.java
@@ -0,0 +1,170 @@
+package io.github.moulberry.notenoughupdates.overlays;
+
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.core.config.Position;
+import io.github.moulberry.notenoughupdates.options.NEUConfig;
+import io.github.moulberry.notenoughupdates.util.SBInfo;
+import io.github.moulberry.notenoughupdates.util.Utils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.client.event.RenderGameOverlayEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL14;
+
+import java.awt.*;
+import java.util.Random;
+
+public class FuelBar {
+
+ public static final ResourceLocation FUEL_BAR = new ResourceLocation("notenoughupdates:fuel_bar.png");
+
+ private float fuelAmount = -1;
+ private String fuelString = "";
+
+ @SubscribeEvent
+ public void onTick(TickEvent.ClientTickEvent event) {
+ fuelAmount = -1;
+
+ if(SBInfo.getInstance().getLocation() == null) return;
+ if(!SBInfo.getInstance().getLocation().startsWith("mining_")) return;
+
+ if(Minecraft.getMinecraft().thePlayer == null) return;
+ if(!NotEnoughUpdates.INSTANCE.config.mining.drillFuelBar) return;
+
+ ItemStack held = Minecraft.getMinecraft().thePlayer.getHeldItem();
+ if(held != null) {
+ String internalname = NotEnoughUpdates.INSTANCE.manager.getInternalNameForItem(held);
+ if(internalname.contains("_DRILL_")) {
+ String[] lore = NotEnoughUpdates.INSTANCE.manager.getLoreFromNBT(held.getTagCompound());
+ for(String line : lore) {
+ try {
+ if(line.startsWith("\u00A77Fuel: ")) {
+ String[] split = Utils.cleanColour(line).split("/");
+ if(split.length == 2) {
+ String fuelS = split[0].split(" ")[1];
+ int fuel = Integer.parseInt(fuelS.replace(",","").trim());
+
+ String maxFuelS = split[1].trim();
+ int mult = 1;
+ if(maxFuelS.endsWith("k")) {
+ mult = 1000;
+ }
+ int maxFuel = Integer.parseInt(maxFuelS.replace("k", "").trim())*mult;
+ fuelAmount = fuel/(float)maxFuel;
+ if(fuelAmount > 1) {
+ fuelAmount = 1;
+ }
+ fuelString = line;
+
+ break;
+ }
+ }
+ } catch(Exception ignored) {}
+ }
+ }
+ }
+ }
+
+ @SubscribeEvent
+ public void onRenderScreen(RenderGameOverlayEvent.Post event) {
+ if(fuelAmount < 0) return;
+ if(!NotEnoughUpdates.INSTANCE.config.mining.drillFuelBar) return;
+ if(event.type == RenderGameOverlayEvent.ElementType.ALL) {
+ ScaledResolution scaledResolution = new ScaledResolution(Minecraft.getMinecraft());
+
+ Position position = NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarPosition;
+ int x = position.getAbsX(scaledResolution);
+ int y = position.getAbsY(scaledResolution);
+ x -= NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarWidth/2;
+ renderBar(x, y+4, NotEnoughUpdates.INSTANCE.config.mining.drillFuelBarWidth, fuelAmount);
+
+ String str = fuelString.replace("\u00A77", EnumChatFormatting.DARK_GREEN.toString()) +
+ EnumChatFormatting.GOLD + String.format(" (%d%%)", (int)(fuelAmount*100));
+
+ GlStateManager.enableBlend();
+ GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ String clean = Utils.cleanColourNotModifiers(str);
+ for(int xO=-2; xO<=2; xO++) {
+ for(int yO=-2; yO<=2; yO++) {
+ if(Math.abs(xO) != Math.abs(yO)) {
+ Minecraft.getMinecraft().fontRendererObj.drawString(clean,
+ x+2+xO/2f, y+yO/2f,
+ new Color(0, 0, 0, 200/Math.max(Math.abs(xO), Math.abs(yO))).getRGB(), false);
+ }
+ }
+ }
+ Minecraft.getMinecraft().fontRendererObj.drawString(str,
+ x+2, y, 0xffffff, false);
+ }
+ }
+
+ private void renderBarCap(float x, float y, boolean left, float rCapSize, float completion) {
+ float size = left ? 10 : rCapSize;
+ int startTexX = left ? 0 : (170 + 11-(int)Math.ceil(rCapSize));
+
+ if(completion < 1) {
+ Utils.drawTexturedRect(x, y, size, 5,
+ startTexX/181f, 1, 0/10f, 5/10f, GL11.GL_NEAREST);
+ }
+ if(completion > 0) {
+ Utils.drawTexturedRect(x, y, size*completion, 5,
+ startTexX/181f, (startTexX+size*completion)/181f, 5/10f, 10/10f, GL11.GL_NEAREST);
+ }
+ }
+
+ private void renderBarNotch(float x, float y, int id, float completion) {
+ id = id % 16;
+
+ int startTexX = 10 + id*10;
+
+ if(completion < 1) {
+ Utils.drawTexturedRect(x, y, 10, 5,
+ startTexX/181f, (startTexX+10)/181f, 0/10f, 5/10f, GL11.GL_NEAREST);
+ }
+ if(completion > 0) {
+ Utils.drawTexturedRect(x, y, 10*completion, 5,
+ startTexX/181f, (startTexX+10*completion)/181f, 5/10f, 10/10f, GL11.GL_NEAREST);
+ }
+
+ }
+
+ private void renderBar(float x, float y, float xSize, float completed) {
+ Minecraft.getMinecraft().getTextureManager().bindTexture(FUEL_BAR);
+
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(x, y, 0);
+ xSize = xSize/1.5f;
+ GlStateManager.scale(1.5f, 1.5f, 1);
+
+ Color c = Color.getHSBColor(148/360f*completed-20/360f, 0.9f, 1-0.5f*completed);
+ GlStateManager.color(c.getRed()/255f, c.getGreen()/255f, c.getBlue()/255f, 1);
+
+ float offsetCompleteX = xSize*completed;
+ for(int xOffset = 0; xOffset < xSize; xOffset += 10) {
+ float notchCompl = 1;
+ if(xOffset > offsetCompleteX) {
+ notchCompl = 0;
+ } else if(xOffset+10 > offsetCompleteX) {
+ notchCompl = (offsetCompleteX-xOffset)/10f;
+ }
+ if(xOffset == 0) {
+ renderBarCap(0, 0, true, 0, notchCompl);
+ } else if(xOffset + 11 > xSize) {
+ renderBarCap(xOffset, 0, false, xSize-xOffset, notchCompl);
+ } else {
+ renderBarNotch(xOffset, 0, xOffset/10, notchCompl);
+ }
+ }
+
+ GlStateManager.popMatrix();
+ }
+
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/textoverlays/TextOverlay.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java
index f111f20a..ed1b6b21 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/textoverlays/TextOverlay.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlay.java
@@ -1,11 +1,13 @@
-package io.github.moulberry.notenoughupdates.textoverlays;
+package io.github.moulberry.notenoughupdates.overlays;
import io.github.moulberry.notenoughupdates.core.config.Position;
-import io.github.moulberry.notenoughupdates.core.util.StringUtils;
import io.github.moulberry.notenoughupdates.util.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.ScaledResolution;
+import net.minecraft.client.renderer.GlStateManager;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL14;
import java.awt.*;
import java.util.List;
@@ -66,6 +68,11 @@ public abstract class TextOverlay {
if(s == null) {
yOff += 3;
} else {
+
+ GlStateManager.enableBlend();
+ GL14.glBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
+ GlStateManager.tryBlendFuncSeparate(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA, GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
if(style == TextOverlayStyle.FULL_SHADOW) {
String clean = Utils.cleanColourNotModifiers(s);
for(int xO=-2; xO<=2; xO++) {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/textoverlays/TextOverlayStyle.java b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlayStyle.java
index 7bd620b6..b9b314d4 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/textoverlays/TextOverlayStyle.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/overlays/TextOverlayStyle.java
@@ -1,4 +1,4 @@
-package io.github.moulberry.notenoughupdates.textoverlays;
+package io.github.moulberry.notenoughupdates.overlays;
public enum TextOverlayStyle {
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java
index bd3fad1b..e52bcc2d 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/profileviewer/GuiProfileViewer.java
@@ -2092,7 +2092,7 @@ public class GuiProfileViewer extends GuiScreen {
float fairySouls = Utils.getElementAsFloat(Utils.getElement(profileInfo, "fairy_souls_collected"), 0);
- Utils.renderAlignedString(EnumChatFormatting.LIGHT_PURPLE+"Fairy Souls", EnumChatFormatting.WHITE.toString()+(int)fairySouls+"/209",
+ Utils.renderAlignedString(EnumChatFormatting.LIGHT_PURPLE+"Fairy Souls", EnumChatFormatting.WHITE.toString()+(int)fairySouls+"/220",
guiLeft+xStart, guiTop+yStartBottom, 76);
if(skillInfo != null) {
float totalSkillLVL = 0;
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/util/ReverseWorldRenderer.java b/src/main/java/io/github/moulberry/notenoughupdates/util/ReverseWorldRenderer.java
index d9d9dd90..12c9a380 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/util/ReverseWorldRenderer.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/util/ReverseWorldRenderer.java
@@ -71,7 +71,7 @@ public class ReverseWorldRenderer {
final float[] afloat = new float[i];
for (int j = 0; j < i; ++j) {
- afloat[j] = func_181665_a(this.rawFloatBuffer, (float) ((double) p_181674_1_ + this.xOffset), (float) ((double) p_181674_2_ + this.yOffset), (float) ((double) p_181674_3_ + this.zOffset), this.vertexFormat.func_181719_f(), j * this.vertexFormat.getNextOffset());
+ afloat[j] = func_181665_a(this.rawFloatBuffer, (float) ((double) p_181674_1_ + this.xOffset), (float) ((double) p_181674_2_ + this.yOffset), (float) ((double) p_181674_3_ + this.zOffset), this.vertexFormat.getIntegerSize(), j * this.vertexFormat.getNextOffset());
}
Integer[] ainteger = new Integer[i];
@@ -130,7 +130,7 @@ public class ReverseWorldRenderer {
}
private int getBufferSize() {
- return this.vertexCount * this.vertexFormat.func_181719_f();
+ return this.vertexCount * this.vertexFormat.getIntegerSize();
}
private static float func_181665_a(FloatBuffer p_181665_0_, float p_181665_1_, float p_181665_2_, float p_181665_3_, int p_181665_4_, int p_181665_5_) {
@@ -181,7 +181,7 @@ public class ReverseWorldRenderer {
}
public ReverseWorldRenderer tex(double u, double v) {
- int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.func_181720_d(this.vertexFormatIndex);
+ int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex);
switch (this.vertexFormatElement.getType()) {
case FLOAT:
@@ -209,7 +209,7 @@ public class ReverseWorldRenderer {
}
public ReverseWorldRenderer lightmap(int p_181671_1_, int p_181671_2_) {
- int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.func_181720_d(this.vertexFormatIndex);
+ int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex);
switch (this.vertexFormatElement.getType()) {
case FLOAT:
@@ -237,7 +237,7 @@ public class ReverseWorldRenderer {
}
public void putBrightness4(int p_178962_1_, int p_178962_2_, int p_178962_3_, int p_178962_4_) {
- int i = (this.vertexCount - 4) * this.vertexFormat.func_181719_f() + this.vertexFormat.getUvOffsetById(1) / 4;
+ int i = (this.vertexCount - 4) * this.vertexFormat.getIntegerSize() + this.vertexFormat.getUvOffsetById(1) / 4;
int j = this.vertexFormat.getNextOffset() >> 2;
this.rawIntBuffer.put(i, p_178962_1_);
this.rawIntBuffer.put(i + j, p_178962_2_);
@@ -246,7 +246,7 @@ public class ReverseWorldRenderer {
}
public void putPosition(double x, double y, double z) {
- int i = this.vertexFormat.func_181719_f();
+ int i = this.vertexFormat.getIntegerSize();
int j = (this.vertexCount - 4) * i;
for (int k = 0; k < 4; ++k) {
@@ -331,7 +331,7 @@ public class ReverseWorldRenderer {
if (this.noColor) {
return this;
} else {
- int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.func_181720_d(this.vertexFormatIndex);
+ int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex);
switch (this.vertexFormatElement.getType()) {
case FLOAT:
@@ -379,16 +379,16 @@ public class ReverseWorldRenderer {
this.growBuffer(vertexData.length);
this.rawIntBuffer.position(this.getBufferSize());
this.rawIntBuffer.put(vertexData);
- this.vertexCount += vertexData.length / this.vertexFormat.func_181719_f();
+ this.vertexCount += vertexData.length / this.vertexFormat.getIntegerSize();
}
public void endVertex() {
++this.vertexCount;
- this.growBuffer(this.vertexFormat.func_181719_f());
+ this.growBuffer(this.vertexFormat.getIntegerSize());
}
public ReverseWorldRenderer pos(double x, double y, double z) {
- int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.func_181720_d(this.vertexFormatIndex);
+ int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex);
switch (this.vertexFormatElement.getType()) {
case FLOAT:
@@ -443,7 +443,7 @@ public class ReverseWorldRenderer {
}
public ReverseWorldRenderer normal(float p_181663_1_, float p_181663_2_, float p_181663_3_) {
- int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.func_181720_d(this.vertexFormatIndex);
+ int i = this.vertexCount * this.vertexFormat.getNextOffset() + this.vertexFormat.getOffset(this.vertexFormatIndex);
switch (this.vertexFormatElement.getType()) {
case FLOAT:
@@ -542,7 +542,7 @@ public class ReverseWorldRenderer {
}
public int getVertexCount() {
- return this.stateRawBuffer.length / this.stateVertexFormat.func_181719_f();
+ return this.stateRawBuffer.length / this.stateVertexFormat.getIntegerSize();
}
public VertexFormat getVertexFormat() {
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json
new file mode 100644
index 00000000..5b97e666
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-1.json
@@ -0,0 +1 @@
+{"8:7":true,"9:7":true,"9:1":true,"7:8":true,"2:0":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json
new file mode 100644
index 00000000..ec49e91c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-2.json
@@ -0,0 +1 @@
+{"12:11":189,"14:9":true,"15:7":true,"9:15":true,"13:10":188,"10:10":185,"7:13":184,"15:8":true,"14:8":true,"8:12":184,"1:14":true,"14:10":189,"13:11":189,"4:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json
new file mode 100644
index 00000000..70660f8d
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-3.json
@@ -0,0 +1 @@
+{"1:5":true,"0:6":true,"0:4":true,"1:6":[177,178],"1:4":true,"0:7":[177,179]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json
new file mode 100644
index 00000000..16206a50
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-4.json
@@ -0,0 +1 @@
+{"6:0":true,"1:11":[199,201],"10:4":true,"10:3":true,"7:2":true,"2:9":true,"10:2":true,"0:10":[199,217],"3:12":199,"2:8":true,"7:0":true,"6:2":true,"2:11":true,"15:4":true,"2:12":[169,200],"15:3":true,"6:1":true,"15:2":true,"2:14":[169,172],"15:13":true,"2:10":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json
new file mode 100644
index 00000000..897faaee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-5.json
@@ -0,0 +1 @@
+{"7:15":true,"6:13":true,"7:13":231,"6:14":true,"6:12":true,"6:15":true,"8:15":true,"7:0":true,"8:0":true,"5:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json
new file mode 100644
index 00000000..ef35b97d
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-6.json
@@ -0,0 +1 @@
+{"12:1":200,"11:5":true,"12:5":true,"11:1":200,"10:12":true,"11:8":true,"12:8":true,"10:10":true,"4:1":true,"11:9":true,"10:0":true,"9:10":true,"5:1":true,"3:2":200,"11:7":true,"12:7":true,"11:0":201,"12:6":true,"10:9":true,"12:0":201,"9:9":true,"13:1":true,"4:2":200,"11:4":true,"9:11":true,"10:5":true,"5:0":true,"10:11":true,"8:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json
new file mode 100644
index 00000000..d23b3f4b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_-7.json
@@ -0,0 +1 @@
+{"11:15":[202,203],"10:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json
new file mode 100644
index 00000000..99a12616
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_0.json
@@ -0,0 +1 @@
+{"14:14":true,"4:14":true,"3:13":true,"13:13":true,"10:14":true,"0:13":true,"15:14":true,"11:13":true,"12:13":true,"2:14":true,"1:13":true,"12:14":true,"2:13":true,"1:14":true,"7:13":true,"11:14":true,"15:13":true,"13:14":true,"10:13":true,"5:13":true,"0:14":true,"3:14":true,"14:13":true,"9:13":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_2.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_2.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json
new file mode 100644
index 00000000..857daba9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_3.json
@@ -0,0 +1 @@
+{"9:14":true,"2:7":[171,194],"8:8":true,"7:12":[174,176],"10:14":true,"11:11":true,"10:12":true,"6:13":175,"2:9":true,"9:15":184,"9:12":true,"3:6":170,"10:15":true,"7:14":176,"8:7":true,"5:5":true,"7:13":175,"2:8":[192,194],"9:10":true,"4:5":true,"6:14":true,"10:13":true,"8:9":true,"7:10":172,"6:12":176,"1:7":171,"9:13":true,"8:13":174,"2:12":true,"7:7":true,"9:9":true,"8:10":171,"7:9":172,"3:5":true,"0:11":true,"9:7":true,"2:14":true,"7:8":true,"8:12":173,"4:6":true,"2:13":true,"5:6":true,"6:7":true,"8:14":175,"9:8":true,"3:13":true,"1:5":171,"0:13":true,"6:6":true,"8:5":true,"5:7":true,"8:11":172,"4:7":171,"9:6":true,"3:12":true,"0:15":true,"0:12":true,"2:5":[171,192],"0:14":true,"3:14":true,"7:6":true,"4:14":true,"1:6":170,"11:10":true,"6:5":true,"5:14":true,"11:13":true,"5:12":176,"8:6":true,"4:12":true,"3:7":171,"9:11":[173,190],"10:11":true,"11:14":true,"11:12":true,"5:13":true,"7:5":true,"11:15":true,"7:11":173,"4:13":true,"2:6":[170,193]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json
new file mode 100644
index 00000000..31878b3e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_4.json
@@ -0,0 +1 @@
+{"1:1":true,"11:5":true,"3:0":true,"0:6":true,"0:0":true,"8:1":171,"3:6":true,"5:5":true,"0:2":true,"4:5":true,"3:2":true,"3:4":true,"0:3":true,"3:3":true,"0:4":true,"2:1":true,"11:0":true,"4:3":true,"5:4":true,"5:3":true,"6:1":true,"4:4":true,"3:5":true,"4:2":true,"0:11":true,"5:2":true,"0:5":true,"11:4":true,"9:1":[171,187],"4:6":true,"5:0":true,"10:1":true,"5:6":true,"11:3":true,"4:0":true,"11:2":true,"7:1":true,"9:3":171,"6:0":true,"10:4":true,"10:3":true,"1:5":true,"7:2":true,"6:6":true,"11:1":true,"9:4":171,"8:5":true,"7:4":true,"9:2":171,"10:2":true,"0:10":true,"7:3":true,"9:6":true,"4:1":true,"6:4":true,"10:0":true,"5:1":true,"9:0":[171,185],"6:3":true,"7:0":171,"2:5":true,"6:2":true,"7:6":true,"1:6":true,"6:5":true,"2:2":true,"0:8":true,"1:0":true,"2:4":true,"8:0":171,"0:1":true,"8:6":true,"3:1":true,"2:3":true,"10:5":true,"1:3":true,"9:5":true,"8:2":171,"1:4":true,"0:7":true,"2:0":true,"8:4":true,"1:2":true,"7:5":true,"8:3":true,"0:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json
new file mode 100644
index 00000000..35cdf158
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_6.json
@@ -0,0 +1 @@
+{"8:8":true,"6:10":true,"13:13":true,"3:0":true,"3:6":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"13:14":true,"3:4":true,"8:9":true,"7:10":true,"3:3":true,"0:4":true,"14:14":true,"4:3":true,"5:4":true,"2:12":true,"7:7":true,"5:3":true,"2:15":true,"15:14":true,"9:9":true,"4:4":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"13:1":[152,153],"4:2":true,"15:15":true,"14:12":true,"9:7":true,"5:2":true,"2:14":true,"1:13":true,"0:5":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:0":true,"5:6":true,"4:0":true,"15:13":true,"1:15":true,"6:7":true,"1:12":true,"9:8":true,"14:13":true,"3:13":true,"1:5":true,"0:13":true,"13:0":true,"14:11":true,"4:1":true,"3:12":true,"0:15":true,"5:1":true,"3:15":true,"0:12":true,"15:11":true,"2:5":true,"0:14":true,"3:14":true,"4:14":true,"1:6":true,"5:14":[159,175],"2:2":true,"5:12":true,"2:4":true,"13:11":true,"4:15":162,"4:12":[162,164],"3:1":true,"5:15":[160,161],"2:3":true,"15:0":[150,151],"1:3":true,"1:4":true,"14:0":true,"2:0":true,"2:6":true,"12:11":true,"9:14":true,"2:7":true,"7:12":true,"10:14":true,"7:15":[165,202],"11:11":true,"10:12":true,"2:9":true,"9:12":true,"8:1":true,"10:15":true,"1:8":true,"7:13":true,"2:8":true,"6:14":[165,173],"10:13":true,"6:12":true,"1:7":true,"6:15":[157,159],"9:13":true,"11:0":true,"8:13":true,"1:10":true,"12:0":true,"6:1":true,"11:4":155,"9:1":true,"8:12":true,"10:1":true,"11:3":[154,156],"12:2":[154,156],"11:2":157,"7:1":true,"12:1":[154,156],"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":156,"7:2":true,"6:6":true,"4:9":true,"11:1":157,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"4:7":true,"10:2":true,"7:3":true,"9:6":true,"6:4":true,"10:0":true,"10:6":true,"9:0":true,"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"4:8":true,"6:5":true,"3:8":true,"6:11":true,"11:13":true,"8:0":true,"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"3:9":true,"12:12":true,"11:15":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json
new file mode 100644
index 00000000..5bfc81a7
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_7.json
@@ -0,0 +1 @@
+{"1:1":true,"6:10":true,"13:13":true,"3:0":true,"0:6":true,"0:0":true,"3:6":true,"14:1":true,"13:15":true,"10:10":true,"5:5":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"15:1":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"2:1":true,"14:14":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"15:14":true,"9:9":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"5:2":true,"0:5":true,"7:8":true,"4:6":true,"5:0":true,"5:6":true,"4:0":true,"15:13":true,"10:8":true,"6:7":true,"9:8":true,"14:13":true,"1:11":true,"1:5":true,"11:8":true,"13:6":true,"13:0":true,"12:8":true,"14:11":true,"4:1":true,"3:12":true,"11:9":true,"15:5":true,"14:5":true,"5:1":true,"15:11":true,"12:9":true,"11:7":true,"2:5":true,"13:4":true,"12:7":true,"2:11":true,"15:4":true,"14:3":true,"1:6":true,"11:10":true,"12:10":true,"2:2":true,"15:3":true,"1:0":true,"14:4":true,"5:12":true,"2:4":true,"14:2":true,"13:11":true,"0:1":true,"15:2":true,"4:12":true,"3:1":true,"13:5":true,"15:0":true,"14:6":true,"1:3":true,"1:4":true,"15:6":true,"14:0":true,"2:0":true,"5:13":true,"1:2":true,"4:13":171,"2:6":true,"15:9":true,"12:11":true,"9:14":true,"11:5":true,"2:7":true,"7:12":true,"12:5":true,"10:14":true,"7:15":[158,170],"14:9":true,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"9:15":true,"14:7":true,"9:12":true,"8:1":[155,157],"13:10":true,"10:15":true,"7:14":true,"1:8":true,"7:13":true,"2:8":true,"6:14":[157,158],"1:9":true,"15:8":true,"10:13":true,"6:12":true,"1:7":true,"14:8":true,"9:13":true,"11:0":true,"12:6":true,"8:13":true,"13:8":true,"12:0":true,"6:1":true,"12:3":true,"11:4":true,"9:1":[162,202],"15:10":true,"14:10":true,"13:7":true,"12:4":true,"11:3":[172,202],"8:15":true,"2:10":true,"11:2":[180,195],"8:14":true,"13:9":true,"7:1":true,"12:1":[148,151],"9:3":true,"6:0":true,"10:4":true,"10:3":true,"7:2":true,"6:6":true,"4:9":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"4:7":true,"10:2":[162,202],"0:10":true,"7:3":true,"6:4":true,"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"4:8":true,"6:5":true,"3:8":true,"0:8":true,"6:11":true,"11:13":true,"8:0":[162,202],"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"0:7":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"3:9":true,"12:12":true,"11:15":true,"8:3":true,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json
new file mode 100644
index 00000000..d6f006c3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-10_8.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"11:5":true,"13:13":true,"12:5":true,"14:9":true,"15:7":true,"14:7":true,"14:1":true,"13:15":true,"10:10":true,"13:12":true,"15:1":true,"15:8":true,"14:8":true,"11:0":true,"14:14":true,"12:6":true,"10:9":true,"13:8":true,"15:14":true,"12:0":true,"11:6":true,"10:7":true,"15:12":true,"14:15":true,"13:1":true,"15:15":true,"14:12":true,"9:7":151,"12:3":true,"11:4":true,"9:1":true,"15:10":true,"14:10":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"15:13":true,"12:2":true,"10:8":true,"11:2":true,"13:9":true,"14:13":true,"12:1":true,"10:3":true,"11:1":true,"11:8":true,"13:6":true,"13:0":true,"10:2":true,"12:8":true,"14:11":true,"13:2":true,"9:6":151,"11:9":true,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"15:11":true,"12:9":true,"9:0":true,"13:3":true,"11:7":true,"13:4":true,"15:4":true,"14:3":true,"11:10":true,"12:10":true,"15:3":true,"14:4":true,"8:0":[158,170],"14:2":true,"13:11":true,"15:2":true,"13:5":true,"15:0":true,"14:6":true,"15:6":true,"14:0":true,"12:15":true,"12:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json
new file mode 100644
index 00000000..352ead0c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-3.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"11:5":true,"2:7":true,"8:8":true,"7:12":true,"6:10":true,"12:5":true,"10:14":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"9:15":true,"0:6":true,"14:7":true,"9:12":true,"3:6":true,"13:10":true,"10:15":true,"7:14":true,"1:8":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"7:13":true,"2:8":true,"5:11":true,"4:5":true,"13:12":true,"6:14":true,"1:9":true,"15:8":true,"10:13":true,"3:4":true,"6:12":true,"3:3":true,"1:7":true,"6:15":true,"9:13":true,"12:6":true,"4:3":true,"8:13":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"1:10":true,"13:8":true,"11:6":true,"4:4":true,"10:7":true,"6:8":true,"3:5":true,"13:1":181,"0:11":true,"9:7":true,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"12:3":true,"11:4":true,"8:12":true,"6:9":true,"4:6":true,"2:13":true,"14:10":true,"10:1":179,"5:6":true,"13:7":true,"12:4":true,"11:3":true,"8:15":true,"12:2":true,"2:10":true,"1:15":true,"10:8":true,"11:2":true,"8:14":true,"1:12":true,"13:9":true,"9:8":true,"12:1":[180,181],"9:3":true,"10:4":true,"3:13":true,"5:9":true,"10:3":true,"1:5":true,"0:13":true,"7:2":true,"6:6":true,"4:9":true,"11:1":180,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"11:8":true,"7:4":true,"13:6":true,"9:2":true,"4:7":true,"10:2":true,"0:10":true,"12:8":true,"7:3":true,"14:11":true,"13:2":true,"9:6":true,"3:12":true,"0:15":true,"11:9":true,"6:4":true,"14:5":true,"10:6":true,"3:15":true,"12:9":true,"6:3":true,"13:3":true,"11:7":true,"2:5":true,"0:14":true,"5:8":true,"13:4":true,"12:7":true,"3:14":true,"6:2":true,"7:6":true,"4:8":true,"2:11":true,"15:4":true,"14:3":true,"4:14":true,"1:6":true,"11:10":true,"6:5":true,"3:8":true,"12:10":true,"5:14":true,"0:8":true,"15:3":true,"6:11":true,"14:4":true,"11:13":true,"5:12":true,"2:4":true,"14:2":true,"13:11":true,"4:15":true,"15:2":true,"8:6":true,"4:12":true,"13:5":true,"12:13":true,"5:15":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"0:7":true,"11:12":true,"8:4":true,"5:13":true,"7:5":true,"3:9":true,"12:12":true,"11:15":true,"8:3":true,"0:9":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json
new file mode 100644
index 00000000..643d735d
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-4.json
@@ -0,0 +1 @@
+{"15:9":true,"12:6":true,"14:9":true,"11:6":true,"11:8":199,"15:7":true,"13:6":true,"14:7":true,"12:8":true,"10:5":true,"15:10":[199,217],"10:6":true,"13:7":true,"12:7":true,"13:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json
new file mode 100644
index 00000000..b7fc8ac8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-5.json
@@ -0,0 +1 @@
+{"10:4":true,"12:5":true,"7:15":true,"9:4":true,"5:12":213,"4:12":[211,212],"7:14":true,"11:4":true,"10:5":true,"10:6":true,"12:4":true,"6:14":[214,216],"5:13":[211,216],"6:15":215} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json
new file mode 100644
index 00000000..e79a0352
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_-6.json
@@ -0,0 +1 @@
+{"12:6":[203,205],"8:13":[213,214],"8:12":212} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json
new file mode 100644
index 00000000..4d8c42a8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_2.json
@@ -0,0 +1 @@
+{"11:10":161,"13:13":159,"11:11":[160,161],"11:8":156,"9:2":true,"12:13":[160,161],"9:1":true,"11:9":167,"10:0":true,"10:1":true,"9:0":true,"12:12":[159,161]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_3.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_3.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json
new file mode 100644
index 00000000..b605be36
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_5.json
@@ -0,0 +1 @@
+{"12:1":true,"9:14":[164,165],"11:5":true,"12:5":true,"7:15":true,"11:1":true,"14:1":true,"15:5":true,"14:5":true,"15:1":true,"10:13":[163,165],"6:15":true,"11:13":true,"13:1":true,"13:5":true,"10:5":true,"9:5":true,"8:15":166,"11:12":true,"8:14":true,"7:1":175} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json
new file mode 100644
index 00000000..22ad94f8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_6.json
@@ -0,0 +1 @@
+{"12:11":true,"8:8":true,"13:13":true,"11:11":true,"10:12":true,"13:15":true,"10:10":true,"8:7":true,"5:5":167,"9:10":true,"4:5":true,"13:12":true,"13:14":true,"8:9":true,"7:10":true,"14:14":true,"5:4":true,"7:7":true,"5:3":true,"15:14":true,"9:9":true,"6:1":true,"4:4":true,"8:10":true,"7:9":true,"6:8":true,"15:12":true,"14:15":true,"15:15":true,"14:12":true,"5:2":true,"7:8":true,"6:9":[163,166],"4:6":true,"5:6":[166,167],"15:13":true,"6:7":true,"9:8":true,"7:1":true,"14:13":true,"6:0":true,"7:2":true,"6:6":true,"5:7":[165,166],"7:4":true,"9:2":true,"8:11":165,"4:7":true,"7:3":true,"14:11":true,"6:4":true,"6:3":true,"7:0":true,"5:8":[163,165],"6:2":true,"7:6":true,"11:10":true,"6:5":true,"12:10":true,"11:13":true,"13:11":true,"12:13":true,"12:14":true,"9:11":true,"10:11":true,"8:2":true,"11:12":true,"8:4":true,"7:5":true,"12:12":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json
new file mode 100644
index 00000000..6b724e4e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-11_7.json
@@ -0,0 +1 @@
+{"15:9":true,"14:9":true,"15:7":true,"13:6":true,"14:7":true,"13:5":true,"15:0":true,"14:6":true,"15:5":true,"15:6":true,"14:0":true,"15:8":true,"14:8":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json
new file mode 100644
index 00000000..2734cb56
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_0.json
@@ -0,0 +1 @@
+{"12:1":true,"9:3":true,"1:11":true,"11:5":true,"10:4":true,"12:5":true,"10:3":true,"11:1":true,"15:7":true,"13:6":true,"9:2":true,"13:0":true,"14:7":true,"8:1":true,"10:2":true,"14:1":true,"13:2":true,"15:5":true,"10:0":true,"14:5":true,"15:1":true,"9:0":true,"7:0":true,"13:3":true,"0:14":145,"13:4":true,"15:4":true,"11:0":true,"14:3":true,"12:6":true,"2:12":true,"15:3":true,"12:0":true,"14:4":true,"8:0":true,"14:2":true,"13:1":true,"0:11":true,"15:2":true,"13:5":true,"15:0":true,"14:6":true,"12:3":true,"11:4":true,"9:1":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"8:2":true,"15:6":true,"14:0":true,"12:2":true,"11:2":true,"1:12":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json
new file mode 100644
index 00000000..a52bf506
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_1.json
@@ -0,0 +1 @@
+{"1:1":146,"10:10":true,"9:10":true,"3:2":146,"2:1":145,"4:3":145,"2:12":[143,144],"2:15":161,"9:9":true,"4:2":145,"15:15":true,"5:2":145,"2:14":136,"1:13":[137,139],"2:13":142,"1:14":136,"5:0":[167,169],"4:0":[168,169],"1:12":[140,146],"6:0":[166,167],"3:13":[143,146],"0:13":137,"4:1":145,"0:12":[143,147],"5:14":[144,145],"2:2":146,"3:1":145,"12:13":true,"12:14":true,"9:11":true,"11:14":true,"1:2":true,"11:15":true,"4:13":[144,146]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json
new file mode 100644
index 00000000..aa6db439
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_10.json
@@ -0,0 +1 @@
+{"11:5":true,"14:1":true,"13:15":true,"1:7":127,"11:0":true,"5:3":127,"15:14":true,"12:0":true,"4:4":127,"3:5":127,"14:15":true,"13:1":true,"15:15":true,"12:3":true,"11:4":true,"2:13":true,"5:0":207,"14:10":true,"12:4":true,"11:3":true,"4:0":127,"11:2":true,"13:9":true,"12:1":true,"6:0":207,"10:4":true,"10:3":true,"13:0":true,"10:2":true,"12:8":true,"7:3":true,"13:2":true,"10:6":true,"5:1":127,"3:15":true,"15:11":true,"11:7":127,"3:14":true,"6:2":127,"15:4":127,"14:3":true,"0:8":127,"15:3":127,"14:2":true,"15:2":127,"9:5":true,"14:0":127,"8:4":true,"2:6":127} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json
new file mode 100644
index 00000000..d3691eee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_11.json
@@ -0,0 +1 @@
+{"12:1":true,"1:1":true,"11:5":true,"10:4":true,"2:7":115,"12:5":true,"11:1":true,"3:0":true,"13:0":true,"8:1":true,"3:6":true,"14:1":true,"13:2":true,"8:7":true,"9:6":true,"4:1":true,"0:2":true,"14:5":true,"10:6":true,"5:1":true,"4:5":true,"15:1":true,"13:3":true,"3:4":true,"2:5":true,"13:4":true,"3:3":true,"2:1":true,"15:4":true,"14:3":true,"12:6":true,"7:7":true,"2:2":true,"15:3":true,"6:1":true,"14:4":true,"11:6":true,"4:4":true,"10:7":true,"3:5":true,"2:4":true,"14:2":true,"13:1":true,"0:1":true,"9:7":true,"3:1":true,"13:5":true,"2:3":true,"12:3":true,"11:4":true,"10:5":true,"15:0":true,"9:1":true,"4:6":true,"3:7":true,"1:3":true,"10:1":true,"9:5":true,"12:4":true,"14:0":true,"2:0":true,"12:2":true,"1:2":true,"6:7":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json
new file mode 100644
index 00000000..4fb265b7
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_3.json
@@ -0,0 +1 @@
+{"7:13":true,"4:14":true,"7:12":true,"7:15":true,"0:7":true,"15:14":true,"5:12":true,"14:15":true,"4:15":true,"6:12":true,"15:15":true,"4:12":true,"7:14":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json
new file mode 100644
index 00000000..e53a59df
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_7.json
@@ -0,0 +1 @@
+{"9:14":true,"6:0":true,"10:9":true,"10:14":true,"15:14":true,"9:9":true,"10:12":true,"14:15":true,"9:15":true,"15:15":true,"9:12":true,"10:15":true,"10:10":true,"9:11":true,"5:0":true,"10:11":true,"9:10":true,"4:0":true,"7:0":true,"10:13":true,"9:8":true,"9:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json
new file mode 100644
index 00000000..4d1cb0dc
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_8.json
@@ -0,0 +1 @@
+{"12:11":true,"1:11":true,"3:13":true,"13:13":true,"6:13":true,"13:0":true,"14:11":true,"14:1":true,"13:15":true,"7:13":true,"15:11":true,"15:1":true,"9:0":true,"1:9":true,"15:8":true,"10:13":true,"14:8":true,"9:13":true,"8:13":true,"1:10":true,"13:8":true,"0:8":130,"11:13":true,"14:15":true,"13:11":true,"15:15":true,"15:2":true,"12:13":true,"1:13":true,"15:0":true,"2:13":true,"14:0":true,"15:13":true,"12:15":true,"5:13":true,"1:15":true,"14:13":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json
new file mode 100644
index 00000000..1bd9898c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-1_9.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":213,"1:1":true,"10:14":214,"13:15":true,"10:10":127,"0:2":true,"7:13":true,"6:14":true,"1:9":true,"13:14":127,"10:13":215,"9:13":214,"14:14":127,"15:14":true,"15:12":127,"14:15":127,"3:11":127,"8:12":true,"13:7":127,"15:13":true,"2:10":true,"14:13":true,"12:8":127,"11:9":127,"15:5":127,"5:14":true,"0:8":127,"1:0":true,"4:12":true,"5:15":[127,208],"14:6":127,"9:11":127,"11:14":true,"12:15":true,"5:13":127} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json
new file mode 100644
index 00000000..7ead9273
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-2.json
@@ -0,0 +1 @@
+{"15:4":true,"11:0":true,"11:5":true,"12:5":true,"15:3":true,"8:5":true,"8:0":true,"15:2":true,"13:0":true,"13:5":true,"10:2":true,"15:0":true,"10:5":true,"15:5":true,"10:0":true,"14:5":true,"9:5":true,"11:3":true,"8:2":true,"15:1":true,"13:3":true,"8:4":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json
new file mode 100644
index 00000000..a278b911
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-3.json
@@ -0,0 +1 @@
+{"15:9":true,"1:1":true,"11:5":true,"8:8":true,"14:9":true,"15:7":true,"3:0":170,"0:6":true,"0:0":true,"14:7":true,"8:1":true,"3:6":true,"13:10":true,"14:1":true,"8:7":true,"5:5":true,"0:2":true,"4:5":true,"15:1":true,"15:8":true,"14:8":true,"2:1":true,"11:0":true,"4:3":170,"5:4":true,"5:3":true,"13:8":true,"15:14":true,"10:7":true,"3:5":true,"15:12":true,"13:1":true,"4:2":170,"15:15":true,"9:7":true,"5:2":true,"12:3":true,"11:4":true,"9:1":true,"4:6":true,"15:10":true,"5:0":true,"14:10":true,"10:1":true,"5:6":true,"13:7":true,"11:3":true,"4:0":170,"10:8":true,"11:2":true,"13:9":true,"9:8":true,"9:3":true,"10:4":true,"10:3":true,"1:5":true,"11:1":true,"9:4":true,"8:5":true,"13:6":true,"9:2":true,"13:0":true,"10:2":true,"13:2":true,"9:6":true,"4:1":170,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"5:1":170,"9:0":true,"13:3":true,"13:4":true,"15:4":true,"14:3":true,"1:6":[151,169],"15:3":true,"1:0":true,"14:4":true,"8:0":true,"14:2":true,"13:11":true,"0:1":true,"15:2":true,"8:6":true,"3:1":170,"13:5":true,"15:0":true,"14:6":true,"10:5":true,"9:5":true,"8:2":true,"15:6":true,"14:0":true,"2:0":170,"11:12":true,"8:4":true,"8:3":true,"2:6":[151,169]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json
new file mode 100644
index 00000000..384c6db4
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-4.json
@@ -0,0 +1 @@
+{"1:1":170,"8:8":true,"6:10":true,"13:13":true,"3:6":true,"14:1":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"15:1":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"3:3":true,"0:4":true,"2:1":170,"14:14":true,"4:3":true,"5:4":true,"2:12":true,"10:9":true,"5:3":true,"2:15":170,"15:14":true,"9:9":true,"4:4":true,"10:7":true,"8:10":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"0:11":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"5:2":true,"2:14":170,"1:13":170,"6:9":true,"4:6":true,"2:13":true,"1:14":170,"5:0":170,"5:6":true,"4:0":170,"15:13":true,"1:15":170,"10:8":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"11:8":true,"13:6":true,"13:0":true,"14:11":true,"13:2":true,"4:1":170,"3:12":true,"11:9":true,"15:5":true,"14:5":true,"5:1":170,"3:15":170,"15:11":true,"13:3":true,"11:7":true,"2:5":true,"13:4":true,"3:14":170,"2:11":true,"15:4":true,"14:3":true,"4:14":true,"1:6":true,"11:10":true,"5:14":true,"2:2":true,"15:3":true,"14:4":true,"5:12":true,"2:4":true,"14:2":true,"13:11":true,"4:15":170,"15:2":true,"4:12":true,"3:1":170,"13:5":true,"5:15":true,"2:3":true,"15:0":true,"14:6":true,"1:3":true,"1:4":true,"15:6":true,"14:0":true,"5:13":true,"1:2":170,"4:13":true,"2:6":true,"15:9":true,"9:14":true,"11:5":true,"2:7":true,"10:14":true,"14:9":true,"11:11":true,"10:12":true,"2:9":true,"15:7":true,"9:15":true,"14:7":true,"9:12":true,"8:1":170,"13:10":true,"10:15":true,"1:8":true,"2:8":true,"1:9":true,"15:8":true,"10:13":true,"6:12":true,"1:7":true,"14:8":true,"9:13":true,"8:13":true,"1:10":true,"13:8":true,"11:6":true,"11:4":true,"9:1":true,"8:12":true,"15:10":true,"14:10":true,"10:1":true,"13:7":true,"11:3":true,"8:15":true,"2:10":true,"11:2":true,"8:14":true,"13:9":true,"12:1":true,"9:3":true,"10:4":true,"5:9":true,"10:3":true,"4:9":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"9:2":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"9:6":true,"10:0":true,"10:6":true,"9:0":true,"5:8":true,"4:8":true,"3:8":true,"6:11":true,"11:13":true,"8:0":[170,212],"8:6":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"11:12":true,"8:4":true,"3:9":true,"11:15":true,"8:3":true,"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json
new file mode 100644
index 00000000..f5fe8895
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-5.json
@@ -0,0 +1 @@
+{"15:9":true,"1:1":true,"2:7":true,"13:13":true,"12:5":true,"10:14":170,"14:9":true,"15:7":true,"3:0":true,"9:15":true,"0:0":true,"14:7":true,"9:12":true,"8:1":true,"3:6":true,"13:10":true,"10:15":[170,207],"1:8":true,"14:1":true,"13:15":true,"8:7":true,"5:5":true,"0:2":true,"2:8":true,"9:10":true,"4:5":true,"13:12":true,"3:2":true,"15:1":true,"15:8":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"3:3":true,"1:7":true,"0:4":true,"14:8":true,"2:1":true,"11:0":true,"14:14":true,"4:3":true,"8:13":true,"5:4":true,"5:3":true,"13:8":true,"12:0":true,"15:14":true,"4:4":true,"10:7":true,"8:10":true,"3:5":true,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"15:15":true,"14:12":true,"9:7":true,"5:2":true,"2:14":[151,168],"11:4":true,"9:1":true,"8:12":true,"4:6":true,"1:14":[151,168],"15:10":true,"5:0":true,"14:10":true,"10:1":true,"5:6":true,"13:7":true,"8:15":true,"4:0":true,"15:13":true,"10:8":true,"13:9":true,"14:13":true,"6:0":true,"9:3":true,"10:4":true,"10:3":true,"1:5":true,"9:4":true,"8:5":true,"5:7":true,"13:6":true,"9:2":true,"13:0":true,"4:7":true,"10:2":true,"14:11":true,"13:2":true,"9:6":true,"4:1":true,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"5:1":true,"15:11":true,"9:0":true,"7:0":true,"13:3":true,"2:5":true,"0:14":[154,165],"5:8":true,"13:4":true,"3:14":[151,169],"6:2":true,"4:8":true,"15:4":true,"14:3":true,"4:14":[151,169],"1:6":true,"3:8":true,"5:14":[151,169],"2:2":true,"0:8":true,"15:3":true,"1:0":true,"14:4":true,"2:4":true,"8:0":true,"14:2":true,"13:11":true,"4:15":170,"15:2":true,"8:6":true,"3:1":true,"13:5":true,"5:15":170,"2:3":true,"15:0":true,"14:6":true,"10:5":true,"3:7":true,"1:3":true,"9:5":true,"11:14":true,"8:2":true,"1:4":true,"15:6":true,"14:0":true,"2:0":true,"8:4":true,"1:2":true,"8:3":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json
new file mode 100644
index 00000000..0b2eacc6
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_-7.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"9:14":true,"13:13":true,"12:5":true,"10:14":true,"14:9":true,"11:11":true,"10:12":true,"11:8":true,"13:6":true,"9:15":true,"14:7":true,"9:12":true,"8:11":true,"8:1":true,"13:10":true,"10:15":true,"12:8":true,"14:11":true,"13:15":true,"10:10":true,"11:9":true,"15:5":true,"14:5":true,"9:10":true,"13:12":true,"15:11":true,"12:9":true,"15:8":true,"13:14":true,"11:7":true,"10:13":true,"8:9":true,"13:4":true,"12:7":true,"14:8":true,"9:13":true,"15:4":true,"14:3":true,"14:14":true,"12:6":true,"8:13":true,"10:9":true,"12:10":true,"13:8":true,"15:3":true,"15:14":true,"9:9":true,"14:4":true,"11:6":true,"10:7":true,"8:10":true,"15:12":true,"14:15":true,"13:11":true,"15:2":true,"15:15":true,"14:12":true,"13:5":true,"14:6":true,"12:14":true,"9:11":true,"8:12":true,"15:10":true,"14:10":true,"10:11":true,"13:7":true,"8:15":true,"15:6":true,"15:13":[155,215],"12:15":true,"11:12":true,"10:8":true,"12:12":true,"11:15":true,"8:14":true,"8:3":true,"13:9":true,"9:8":true,"14:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json
new file mode 100644
index 00000000..ef608932
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_0.json
@@ -0,0 +1 @@
+{"12:11":147,"13:13":[148,149],"11:11":148,"2:9":[155,239],"2:8":154,"1:9":[154,239],"13:14":148,"14:14":147,"1:10":238,"15:14":146,"15:12":243,"14:15":[148,149],"14:12":145,"2:14":[175,176],"1:14":[174,175],"15:13":145,"2:10":238,"14:13":146,"1:11":237,"4:9":240,"5:7":153,"3:10":[238,239],"0:10":153,"9:6":152,"15:11":true,"3:14":[175,176],"2:11":[236,237],"4:14":175,"0:8":true,"3:9":240,"12:12":148,"0:9":153} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json
new file mode 100644
index 00000000..2f50b994
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_10.json
@@ -0,0 +1 @@
+{"15:9":127,"6:13":true,"9:12":true,"8:1":true,"14:1":127,"7:13":true,"6:12":true,"2:12":true,"6:1":true,"13:1":127,"5:2":true,"1:13":[170,171],"12:3":127,"11:4":127,"9:1":true,"8:12":true,"2:13":169,"14:10":127,"11:3":127,"12:2":127,"11:2":true,"7:1":true,"9:3":true,"3:13":true,"10:3":true,"7:2":true,"9:2":true,"13:0":127,"10:2":true,"13:2":127,"3:12":true,"0:12":[129,133],"9:0":true,"7:0":127,"3:14":[145,173],"6:2":true,"4:14":[145,174],"5:14":true,"5:12":true,"8:0":true,"15:0":127,"8:2":true,"14:0":127,"5:13":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json
new file mode 100644
index 00000000..2b5520cf
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_11.json
@@ -0,0 +1 @@
+{"15:4":true,"12:1":true,"15:3":true,"11:1":true,"8:0":true,"13:1":true,"15:2":true,"4:7":true,"15:0":true,"14:1":true,"15:5":true,"10:0":true,"15:6":true,"15:1":true,"9:0":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json
new file mode 100644
index 00000000..1f44a377
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_3.json
@@ -0,0 +1 @@
+{"0:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json
new file mode 100644
index 00000000..50c8d9d0
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_4.json
@@ -0,0 +1 @@
+{"15:9":true,"1:1":true,"2:7":true,"8:8":true,"7:12":true,"14:9":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"9:15":true,"0:6":[129,148],"14:7":true,"9:12":true,"3:6":true,"1:8":true,"13:15":true,"0:2":true,"14:1":true,"10:10":true,"8:7":true,"4:11":true,"7:13":true,"2:8":true,"9:10":true,"5:11":true,"3:2":true,"1:9":true,"15:8":true,"10:13":true,"0:3":true,"8:9":true,"6:12":true,"1:7":true,"0:4":[129,132],"14:8":true,"9:13":true,"12:6":true,"4:3":[111,177],"8:13":true,"5:4":[173,179],"2:12":true,"10:9":true,"7:7":true,"5:3":[111,179],"1:10":true,"13:8":true,"15:14":true,"9:9":true,"11:6":true,"4:4":[176,177],"10:7":true,"8:10":true,"7:9":true,"13:1":233,"4:2":true,"0:11":true,"15:15":true,"9:7":true,"3:11":true,"5:2":true,"1:13":true,"0:5":[129,132],"12:3":233,"11:4":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"2:13":true,"5:6":true,"8:15":true,"13:7":true,"12:4":true,"12:2":234,"2:10":true,"10:8":true,"6:7":true,"1:12":true,"13:9":true,"9:8":true,"9:3":126,"1:11":true,"10:4":[129,132],"3:13":true,"10:3":[129,132],"0:13":true,"7:2":[129,132],"6:6":true,"4:9":true,"9:4":true,"5:7":true,"3:10":true,"11:8":true,"13:6":true,"9:2":[129,132],"8:11":true,"4:7":true,"10:2":[129,132],"0:10":true,"12:8":true,"13:2":true,"9:6":true,"3:12":true,"11:9":true,"15:5":true,"14:5":true,"10:6":true,"0:12":true,"12:9":true,"13:3":true,"11:7":true,"13:4":true,"12:7":true,"6:2":true,"7:6":true,"4:8":true,"2:11":true,"15:4":true,"14:3":true,"1:6":true,"3:8":true,"0:8":true,"15:3":true,"6:11":true,"14:4":true,"5:12":true,"14:2":true,"0:1":true,"15:2":true,"8:6":true,"4:12":true,"13:5":true,"14:6":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"8:2":[129,132],"0:7":true,"15:6":true,"12:15":true,"5:13":true,"3:9":true,"11:15":true,"0:9":true,"7:11":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json
new file mode 100644
index 00000000..5a4f9d06
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_6.json
@@ -0,0 +1 @@
+{"15:9":true,"1:1":[129,144],"11:5":true,"6:10":[129,132],"12:5":true,"14:9":true,"15:7":true,"3:0":[141,143],"0:6":[129,148],"0:0":true,"14:7":true,"8:1":true,"3:6":true,"13:10":true,"10:10":true,"5:5":[139,140],"0:2":true,"9:10":true,"4:5":[139,140],"3:2":[141,143],"15:8":true,"3:4":true,"0:3":true,"7:10":[129,132],"3:3":true,"0:4":[129,148],"14:8":true,"2:1":[129,144],"12:6":true,"4:3":[139,140],"10:9":true,"13:8":true,"9:9":true,"6:1":true,"11:6":true,"4:4":[139,140],"10:7":true,"8:10":true,"3:5":true,"4:2":[111,140],"0:11":[129,152],"9:7":true,"5:2":[111,120],"0:5":[129,148],"12:3":true,"11:4":true,"9:1":true,"4:6":true,"15:10":true,"5:0":true,"14:10":true,"10:1":true,"5:6":141,"13:7":true,"12:4":true,"11:3":true,"4:0":[141,143],"10:8":true,"13:9":true,"9:8":true,"7:1":true,"9:3":true,"6:0":true,"1:11":true,"10:4":true,"5:9":[111,179],"10:3":true,"1:5":144,"6:6":[141,168],"4:9":[111,177],"9:4":true,"8:5":true,"3:10":true,"7:4":true,"13:6":true,"9:2":true,"10:2":true,"0:10":[129,132],"7:3":true,"9:6":true,"4:1":[129,140],"15:5":true,"10:0":true,"14:5":true,"10:6":true,"5:1":true,"9:0":true,"6:3":true,"7:0":true,"13:3":true,"2:5":144,"5:8":[173,179],"13:4":true,"7:6":true,"4:8":true,"15:4":true,"14:3":true,"1:6":144,"6:5":[139,168],"2:2":144,"0:8":[129,132],"15:3":true,"1:0":true,"14:4":true,"2:4":144,"8:0":true,"0:1":true,"8:6":true,"3:1":[129,143],"13:5":true,"2:3":144,"14:6":true,"10:5":true,"5:10":[129,132],"1:3":144,"9:5":true,"4:10":[129,132],"8:2":true,"1:4":144,"0:7":[129,132],"15:6":true,"2:0":144,"8:4":true,"1:2":144,"7:5":true,"8:3":true,"0:9":[108,132],"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json
new file mode 100644
index 00000000..cc177949
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_7.json
@@ -0,0 +1 @@
+{"0:15":true,"0:3":232,"2:1":233,"2:2":true,"2:4":true,"2:3":true,"1:3":true,"1:2":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json
new file mode 100644
index 00000000..3e21e3c3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_8.json
@@ -0,0 +1 @@
+{"15:9":true,"3:13":true,"7:15":true,"6:13":true,"9:15":true,"8:11":true,"10:15":true,"12:8":130,"1:8":true,"4:1":true,"4:11":true,"11:9":true,"7:13":true,"2:8":true,"5:11":true,"3:15":true,"15:8":[129,131],"10:13":true,"6:15":true,"14:8":[130,131],"9:13":true,"8:13":true,"13:8":[130,131],"0:8":true,"6:11":true,"11:13":true,"4:15":true,"5:15":true,"9:11":true,"10:11":true,"8:15":true,"5:13":true,"3:9":true,"11:15":true,"0:9":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json
new file mode 100644
index 00000000..2e8e27c8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-2_9.json
@@ -0,0 +1 @@
+{"15:9":[211,214],"9:14":true,"10:14":true,"2:2":true,"11:1":true,"11:13":true,"15:12":206,"15:7":[127,216],"14:2":true,"14:15":127,"9:15":true,"0:1":true,"15:15":[202,203],"15:2":true,"3:1":true,"12:13":true,"14:6":true,"13:2":true,"13:15":127,"12:14":true,"0:2":true,"15:10":209,"11:14":true,"8:15":true,"15:11":true,"15:1":true,"15:8":[214,215],"13:14":true,"12:2":true,"11:12":true,"10:13":true,"1:2":true,"14:8":214} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json
new file mode 100644
index 00000000..442b6330
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-3.json
@@ -0,0 +1 @@
+{"13:0":[152,166],"13:2":[152,166],"13:3":true,"8:0":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json
new file mode 100644
index 00000000..f30eae4d
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-4.json
@@ -0,0 +1 @@
+{"11:11":234,"8:1":[205,206],"13:15":[153,166],"5:5":208,"13:12":[153,166],"13:8":true,"13:1":true,"13:9":true,"7:2":206,"13:2":[152,166],"13:4":true,"11:10":true,"12:10":true,"13:11":[152,166],"13:5":true,"10:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json
new file mode 100644
index 00000000..1817d7ae
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_-5.json
@@ -0,0 +1 @@
+{"14:9":true,"10:12":199,"13:0":true,"8:11":187,"13:2":true,"10:10":[187,191],"10:13":[171,203],"13:4":true,"9:13":[171,202],"11:10":[187,188],"8:13":201,"13:1":true,"13:5":true,"15:0":true,"9:11":[187,189],"14:10":true,"14:0":true,"11:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json
new file mode 100644
index 00000000..c6a5087f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_0.json
@@ -0,0 +1 @@
+{"2:7":232,"8:8":232,"7:12":true,"6:10":true,"2:9":[231,232],"0:6":true,"3:6":231,"1:8":true,"8:7":232,"2:8":[231,232],"5:11":true,"13:12":true,"1:9":true,"15:8":true,"8:9":true,"6:12":true,"1:7":true,"2:12":true,"7:7":true,"1:10":true,"8:10":true,"6:8":true,"15:12":153,"0:11":true,"14:12":true,"3:11":232,"8:12":true,"4:6":231,"15:10":152,"5:6":true,"15:13":154,"2:10":true,"6:7":true,"1:12":true,"14:13":154,"1:11":true,"5:9":true,"6:6":true,"4:9":true,"5:7":true,"3:10":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"3:12":231,"15:11":153,"5:8":true,"7:6":true,"4:8":true,"2:11":true,"1:6":true,"3:8":[231,232],"0:8":true,"6:11":true,"5:12":true,"8:6":231,"4:12":231,"5:10":true,"3:7":232,"4:10":[231,232],"0:7":true,"3:9":[231,232],"0:9":true,"7:11":true,"2:6":231} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json
new file mode 100644
index 00000000..ad608523
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_1.json
@@ -0,0 +1 @@
+{"11:5":[192,193],"12:5":[188,189],"8:7":185,"4:11":204,"2:12":[159,183],"7:7":[200,201],"11:6":[189,192],"10:7":[190,191],"9:7":186,"3:11":183,"2:14":185,"12:3":193,"11:4":195,"6:9":202,"4:6":179,"2:13":184,"1:14":[184,185],"12:4":[188,193],"1:15":185,"10:8":191,"11:2":221,"10:4":196,"5:9":203,"10:3":[220,221],"4:9":[182,183],"8:5":201,"3:10":182,"4:7":true,"9:6":[184,185],"3:12":184,"13:3":[191,192],"0:14":207,"4:8":[181,182],"14:3":190,"14:2":191,"15:2":true,"8:6":200,"10:5":185,"5:10":203,"4:10":[183,204],"8:4":162,"7:5":162} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json
new file mode 100644
index 00000000..4b6bb9b4
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_11.json
@@ -0,0 +1 @@
+{"8:0":true,"12:0":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json
new file mode 100644
index 00000000..c8568d98
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_2.json
@@ -0,0 +1 @@
+{"0:0":185,"1:0":185,"0:1":186,"2:0":185} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_3.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_3.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json
new file mode 100644
index 00000000..004f6226
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_4.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"2:7":true,"8:8":true,"7:12":true,"6:10":true,"13:13":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"0:6":true,"14:7":true,"9:12":true,"3:6":true,"13:10":true,"1:8":true,"14:1":216,"8:7":true,"0:2":true,"7:13":true,"2:8":true,"13:12":true,"3:2":true,"15:1":[130,151],"1:9":true,"15:8":true,"10:13":true,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"6:12":true,"3:3":true,"1:7":true,"0:4":true,"14:8":true,"9:13":true,"12:6":141,"8:13":true,"10:9":true,"7:7":true,"13:8":true,"9:9":true,"11:6":141,"10:7":[139,168],"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:12":true,"9:7":true,"0:5":true,"12:3":[111,177],"11:4":[173,179],"8:12":true,"7:8":true,"6:9":true,"4:6":true,"15:10":true,"14:10":true,"5:6":true,"13:7":true,"12:4":[173,177],"11:3":true,"15:13":true,"12:2":true,"6:7":true,"11:2":true,"13:9":true,"9:8":true,"14:13":true,"10:4":true,"5:9":true,"1:5":true,"7:2":true,"6:6":true,"4:9":true,"5:7":true,"7:4":true,"13:6":[141,143],"9:2":true,"8:11":true,"4:7":true,"10:2":true,"12:8":true,"7:3":true,"14:11":true,"13:2":[129,132],"9:6":true,"6:4":true,"10:6":[141,216],"15:11":true,"12:9":true,"6:3":true,"11:7":[139,140],"2:5":true,"5:8":true,"13:4":true,"12:7":true,"6:2":true,"7:6":true,"4:8":true,"1:6":true,"11:10":true,"6:5":true,"3:8":true,"12:10":true,"2:2":true,"0:8":true,"6:11":true,"11:13":true,"2:4":true,"13:11":true,"8:6":true,"12:13":true,"2:3":true,"14:6":144,"9:11":true,"3:7":true,"1:3":true,"10:11":true,"9:5":true,"8:2":true,"1:4":true,"0:7":true,"15:6":true,"11:12":true,"1:2":true,"7:5":true,"3:9":true,"12:12":true,"0:9":true,"7:11":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json
new file mode 100644
index 00000000..1174ffa7
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_5.json
@@ -0,0 +1 @@
+{"10:4":true,"7:12":true,"7:15":true,"9:4":true,"10:12":true,"3:10":true,"11:8":true,"2:9":true,"13:6":true,"9:15":true,"0:0":true,"9:12":true,"10:2":true,"10:15":true,"12:8":true,"13:15":true,"10:10":true,"4:11":true,"4:1":true,"3:12":true,"10:0":true,"5:11":true,"5:1":true,"3:2":true,"0:12":[221,227],"9:0":true,"6:3":true,"15:8":true,"6:12":true,"0:4":true,"6:15":true,"14:8":true,"2:1":true,"2:11":[217,222],"15:4":true,"2:12":true,"0:8":true,"6:11":true,"6:1":true,"14:4":true,"5:12":true,"14:15":true,"4:2":true,"15:15":true,"3:11":true,"3:1":true,"5:2":true,"14:6":true,"11:4":true,"6:9":true,"8:12":true,"5:10":true,"10:11":true,"10:1":true,"4:10":true,"12:4":true,"8:15":true,"15:6":true,"12:15":true,"10:8":true,"11:15":true,"1:12":224,"9:8":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json
new file mode 100644
index 00000000..19d48785
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_6.json
@@ -0,0 +1 @@
+{"11:5":true,"2:7":true,"6:10":true,"12:5":true,"11:11":true,"2:9":true,"0:6":true,"8:1":true,"3:6":true,"13:10":true,"1:8":true,"14:1":true,"10:10":true,"5:5":true,"2:8":true,"9:10":true,"4:5":true,"15:1":true,"1:9":true,"3:4":true,"0:3":true,"7:10":true,"3:3":true,"1:7":true,"0:4":true,"11:0":true,"12:6":true,"4:3":true,"5:4":true,"7:7":true,"5:3":true,"1:10":true,"13:8":true,"12:0":true,"6:1":true,"11:6":true,"4:4":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"13:1":true,"0:5":true,"12:3":true,"9:1":true,"7:8":true,"6:9":true,"4:6":true,"10:1":true,"5:6":true,"12:4":true,"12:2":true,"2:10":true,"6:7":true,"11:2":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:3":true,"1:5":true,"7:2":true,"6:6":true,"11:1":true,"9:4":true,"8:5":true,"3:10":true,"11:8":true,"7:4":true,"13:6":true,"13:0":true,"0:10":true,"12:8":true,"7:3":true,"13:2":true,"9:6":true,"11:9":true,"6:4":true,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"15:11":[130,151],"12:9":true,"9:0":true,"6:3":true,"7:0":true,"13:3":true,"2:5":true,"13:4":true,"6:2":true,"7:6":true,"15:4":true,"14:3":true,"1:6":true,"11:10":true,"6:5":true,"3:8":true,"12:10":true,"0:8":true,"15:3":true,"14:4":true,"2:4":true,"8:0":true,"14:2":true,"4:15":true,"15:2":true,"8:6":true,"13:5":true,"5:15":222,"2:3":true,"15:0":true,"14:6":true,"10:5":true,"3:7":true,"1:3":true,"9:5":true,"8:2":true,"1:4":true,"0:7":true,"15:6":true,"14:0":true,"8:4":true,"7:5":true,"3:9":true,"8:3":true,"0:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json
new file mode 100644
index 00000000..16de57fc
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_7.json
@@ -0,0 +1 @@
+{"14:15":true,"15:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json
new file mode 100644
index 00000000..ff34c0ae
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_8.json
@@ -0,0 +1 @@
+{"9:14":157,"10:14":[157,158],"7:15":153,"13:10":true,"3:15":153,"15:1":true,"15:8":true,"3:4":true,"0:3":true,"0:14":[152,154],"6:15":[153,154],"14:8":true,"10:9":156,"2:15":[151,177],"5:15":153,"2:3":true,"15:0":true,"1:3":true,"1:14":177,"11:14":true,"1:15":true,"13:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json
new file mode 100644
index 00000000..022335ab
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-3_9.json
@@ -0,0 +1 @@
+{"1:1":[142,145],"3:0":true,"9:2":true,"0:0":true,"8:1":true,"7:3":true,"3:2":true,"2:1":true,"5:3":true,"2:2":141,"1:0":true,"14:2":true,"15:2":true,"5:0":true,"10:1":true,"8:2":true,"4:0":true,"2:0":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json
new file mode 100644
index 00000000..cebe97d4
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-1.json
@@ -0,0 +1 @@
+{"0:6":[145,202],"0:0":true,"1:8":true,"0:2":[198,202],"15:8":true,"0:3":[198,202],"0:4":[143,202],"14:8":true,"0:11":true,"0:5":[198,202],"0:13":[198,202],"0:10":true,"0:15":true,"0:12":true,"7:0":[141,142],"0:14":[202,240],"1:6":true,"0:8":true,"0:1":true,"0:7":[198,202],"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json
new file mode 100644
index 00000000..e7de5fa3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-5.json
@@ -0,0 +1 @@
+{"2:7":true,"7:15":209,"3:6":214,"3:4":215,"2:5":215,"1:7":164,"6:15":208,"1:6":[163,164],"3:8":214,"3:5":214,"2:4":216,"2:3":216,"3:7":214,"3:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json
new file mode 100644
index 00000000..63ccec79
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_-6.json
@@ -0,0 +1 @@
+{"3:12":true,"4:3":true,"5:0":true,"2:12":true,"5:1":true,"5:6":true,"4:5":true,"0:12":[220,226],"4:9":true,"5:7":true,"5:8":true,"1:12":[219,226],"5:2":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json
new file mode 100644
index 00000000..fac56be4
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_0.json
@@ -0,0 +1 @@
+{"15:9":true,"2:7":true,"8:8":true,"7:12":true,"6:10":true,"14:9":true,"2:9":true,"15:7":true,"0:6":true,"0:0":true,"14:7":true,"9:12":true,"3:6":true,"13:10":true,"1:8":true,"10:10":true,"8:7":232,"0:2":true,"2:8":true,"9:10":true,"1:9":true,"15:8":true,"0:3":true,"8:9":true,"7:10":true,"6:12":true,"1:7":true,"0:4":true,"14:8":true,"12:6":true,"10:9":true,"7:7":232,"1:10":true,"13:8":true,"9:9":true,"11:6":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"0:11":true,"9:7":true,"0:5":true,"8:12":true,"7:8":true,"6:9":true,"4:6":231,"15:10":true,"14:10":true,"5:6":231,"13:7":true,"2:10":true,"10:8":true,"6:7":232,"13:9":true,"9:8":true,"5:9":true,"0:13":true,"6:6":231,"4:9":true,"5:7":true,"3:10":true,"11:8":true,"13:6":true,"4:7":true,"0:10":true,"12:8":true,"14:11":true,"9:6":231,"0:15":true,"11:9":true,"10:6":true,"0:12":true,"15:11":true,"12:9":true,"11:7":true,"2:5":true,"0:14":true,"5:8":true,"12:7":true,"7:6":231,"4:8":true,"1:6":true,"11:10":true,"3:8":true,"12:10":true,"0:8":true,"0:1":true,"8:6":231,"14:6":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"4:10":true,"0:7":true,"15:6":true,"3:9":true,"0:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json
new file mode 100644
index 00000000..c1c640ba
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_1.json
@@ -0,0 +1 @@
+{"2:7":true,"0:13":true,"5:7":true,"0:6":true,"0:0":true,"0:10":true,"0:2":true,"0:15":true,"0:12":true,"3:4":true,"0:3":true,"0:14":true,"3:3":true,"0:4":true,"5:4":true,"5:3":true,"14:15":true,"0:11":true,"0:1":true,"2:3":true,"0:5":true,"3:7":true,"1:14":true,"5:6":true,"0:7":true,"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json
new file mode 100644
index 00000000..f21789f0
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_10.json
@@ -0,0 +1 @@
+{"15:9":119,"12:11":true,"1:1":true,"11:5":119,"2:7":true,"8:8":true,"6:10":true,"13:13":true,"12:5":119,"14:9":120,"11:11":true,"10:12":true,"2:9":117,"15:7":119,"3:0":true,"0:6":true,"0:0":true,"14:7":119,"3:6":true,"13:10":true,"1:8":true,"10:10":true,"8:7":true,"5:5":120,"0:2":true,"2:8":true,"9:10":true,"4:5":true,"13:12":true,"3:2":true,"1:9":true,"15:8":119,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"3:3":true,"1:7":true,"14:8":119,"2:1":true,"12:6":119,"4:3":true,"5:4":true,"10:9":true,"7:7":true,"5:3":true,"1:10":true,"13:8":120,"9:9":true,"6:1":true,"11:6":119,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"4:2":true,"0:11":true,"14:12":true,"9:7":true,"5:2":[121,139],"0:5":true,"11:4":118,"7:8":true,"6:9":true,"4:6":[120,161],"2:13":true,"1:14":true,"15:10":120,"5:0":true,"14:10":true,"5:6":120,"13:7":119,"12:4":[117,118],"11:3":true,"4:0":true,"15:13":true,"10:8":true,"6:7":true,"13:9":true,"9:8":true,"7:1":true,"14:13":true,"9:3":118,"6:0":true,"1:11":true,"10:4":119,"5:9":true,"10:3":[116,118],"1:5":true,"0:13":true,"7:2":true,"6:6":true,"4:9":119,"9:4":119,"8:5":true,"5:7":true,"11:8":true,"7:4":120,"13:6":119,"8:11":true,"4:7":120,"0:10":true,"12:8":120,"7:3":[120,163],"14:11":true,"9:6":true,"4:1":true,"0:15":true,"11:9":true,"6:4":true,"15:5":true,"14:5":118,"10:6":119,"5:1":true,"0:12":true,"15:11":120,"12:9":true,"6:3":[120,141],"11:7":120,"2:5":true,"0:14":true,"5:8":true,"13:4":true,"12:7":119,"6:2":true,"7:6":true,"4:8":120,"15:4":true,"1:6":true,"11:10":true,"6:5":120,"3:8":120,"12:10":true,"2:2":true,"0:8":true,"15:3":true,"1:0":true,"14:4":true,"2:4":true,"13:11":true,"0:1":true,"8:6":true,"3:1":true,"13:5":118,"12:13":true,"2:3":true,"14:6":118,"10:5":119,"9:11":true,"3:7":[120,161],"1:3":true,"10:11":true,"9:5":true,"8:2":true,"1:4":true,"0:7":true,"15:6":[118,161],"2:0":true,"11:12":true,"8:4":119,"1:2":true,"7:5":120,"3:9":[118,119],"12:12":true,"8:3":119,"0:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json
new file mode 100644
index 00000000..94a5299b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_11.json
@@ -0,0 +1 @@
+{"0:2":[156,158],"0:3":true,"0:1":[157,158],"0:0":true,"0:4":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json
new file mode 100644
index 00000000..2663a92a
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_2.json
@@ -0,0 +1 @@
+{"12:1":true,"10:4":[189,190],"13:0":true,"0:0":true,"0:2":true,"0:3":true,"0:4":true,"7:7":194,"6:5":true,"14:2":187,"13:1":true,"0:1":true,"0:5":true,"14:0":true,"7:5":true,"6:7":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json
new file mode 100644
index 00000000..06368a6b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_3.json
@@ -0,0 +1 @@
+{"9:14":true,"10:12":true,"9:15":true,"9:12":true,"9:13":true,"11:0":[150,151],"12:0":176,"12:3":true,"10:1":[155,156],"11:3":true,"12:1":156,"9:3":[175,176],"11:1":[156,176],"9:4":177,"9:2":175,"10:2":176,"0:10":true,"12:13":true,"12:14":true,"12:15":true,"11:12":true,"12:12":true,"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json
new file mode 100644
index 00000000..baade365
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_4.json
@@ -0,0 +1 @@
+{"7:13":true,"0:4":138,"12:0":true,"0:5":139,"9:1":true,"10:1":true,"12:1":true,"11:1":true,"9:0":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json
new file mode 100644
index 00000000..43d11448
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_5.json
@@ -0,0 +1 @@
+{"13:3":152,"13:4":true,"14:8":true,"14:3":[138,140],"13:8":true,"15:3":139,"12:0":183,"14:4":true,"12:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json
new file mode 100644
index 00000000..08674183
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_6.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"11:11":true,"9:15":true,"9:12":true,"9:13":true,"2:12":true,"0:11":true,"1:13":true,"2:13":true,"1:12":true,"1:11":true,"3:13":true,"0:13":true,"0:10":true,"0:12":true,"0:1":true,"12:13":true,"9:11":true,"12:14":true,"10:11":true,"12:15":true,"12:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json
new file mode 100644
index 00000000..82769773
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_7.json
@@ -0,0 +1 @@
+{"1:1":true,"0:2":true,"10:0":true,"9:0":true,"14:8":true,"2:1":true,"11:0":true,"2:2":197,"13:8":true,"12:0":true,"1:0":true,"0:1":true,"2:0":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json
new file mode 100644
index 00000000..6980d16e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_8.json
@@ -0,0 +1 @@
+{"2:7":true,"8:8":true,"3:6":183,"8:7":137,"0:2":[162,171],"9:10":[157,184],"4:5":162,"13:12":181,"3:4":163,"0:3":[162,172],"8:9":[133,158],"10:9":[132,133],"7:7":183,"9:9":[133,183],"8:10":157,"7:9":133,"6:8":true,"3:5":161,"14:12":[153,180],"5:6":160,"15:13":153,"10:8":[134,182],"6:7":[160,184],"9:8":[135,182],"4:7":true,"11:9":133,"13:3":true,"5:8":true,"14:3":true,"11:10":157,"15:3":true,"2:4":[161,165],"0:1":true,"3:7":true,"1:3":[162,171],"1:4":160,"3:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json
new file mode 100644
index 00000000..9f64e883
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-4_9.json
@@ -0,0 +1 @@
+{"1:11":true,"3:13":true,"0:13":true,"3:10":true,"2:9":true,"0:6":true,"0:10":true,"4:11":true,"3:12":true,"0:15":true,"2:8":true,"0:12":true,"1:9":true,"0:14":true,"3:14":true,"2:11":true,"4:14":true,"2:12":true,"5:14":true,"1:10":true,"0:8":true,"4:15":true,"0:11":true,"4:12":true,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"15:0":true,"2:13":true,"1:14":true,"4:10":true,"0:7":true,"5:13":true,"2:10":true,"1:15":true,"3:9":true,"1:12":true,"0:9":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json
new file mode 100644
index 00000000..fe872f4b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-1.json
@@ -0,0 +1 @@
+{"12:11":true,"12:5":true,"14:1":true,"15:1":true,"14:14":true,"12:6":true,"15:14":240,"12:0":202,"14:15":true,"14:12":[183,186],"12:3":true,"12:4":true,"15:13":198,"12:2":[198,202],"14:13":[144,189],"12:1":[198,202],"11:8":true,"12:8":true,"14:11":[182,183],"12:9":true,"12:7":true,"14:3":[182,183],"12:10":true,"14:2":[183,186],"12:13":true,"15:0":true,"12:14":true,"14:0":[146,192],"12:15":true,"12:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json
new file mode 100644
index 00000000..4ba1b08a
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-2.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":202,"12:1":true,"12:5":true,"14:9":true,"14:7":[182,183],"12:8":true,"14:11":[155,198],"12:9":true,"12:7":true,"14:8":[183,186],"14:14":[148,198],"12:6":true,"12:10":true,"12:0":true,"14:15":[147,198],"15:15":true,"14:12":[152,198],"12:13":true,"12:14":true,"12:3":true,"14:10":[156,198],"12:4":true,"12:15":202,"12:2":true,"12:12":202,"14:13":[150,198]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json
new file mode 100644
index 00000000..d86589b5
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-3.json
@@ -0,0 +1 @@
+{"12:11":true,"12:1":true,"12:5":true,"14:9":true,"14:7":true,"12:8":true,"14:11":true,"15:5":true,"14:5":true,"12:9":true,"12:7":true,"14:8":true,"14:14":[183,186],"14:3":[182,183],"12:6":true,"12:10":true,"12:0":true,"14:4":[183,186],"14:15":[182,183],"14:12":true,"12:13":true,"14:6":true,"12:14":true,"12:3":[198,202],"14:10":true,"12:4":true,"12:15":true,"12:2":[198,202],"12:12":true,"14:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json
new file mode 100644
index 00000000..72b3a2bf
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-4.json
@@ -0,0 +1 @@
+{"15:9":220,"12:11":true,"7:12":220,"13:13":220,"14:9":[164,193],"11:11":222,"10:12":222,"3:0":[201,202],"0:0":true,"14:7":[164,192],"9:12":[214,222],"13:10":222,"10:10":222,"7:13":[219,220],"9:10":true,"4:5":177,"13:12":222,"10:13":219,"3:4":[201,202],"7:10":220,"0:4":204,"14:8":true,"9:13":true,"5:4":[177,203],"10:9":219,"9:9":220,"4:4":[201,202],"8:10":true,"7:9":[219,220],"3:5":[175,177],"15:12":222,"0:11":true,"14:12":true,"1:13":true,"0:5":176,"8:12":222,"15:10":222,"14:10":[162,222],"15:13":220,"1:12":true,"13:9":220,"1:5":178,"8:11":222,"14:11":[162,222],"14:5":[172,188],"0:12":true,"15:11":222,"12:9":219,"6:3":177,"13:3":184,"2:5":[176,178],"3:14":true,"15:4":[182,184],"11:10":222,"12:10":222,"15:3":175,"1:0":true,"14:4":[173,184],"2:4":[202,203],"13:11":222,"12:13":[198,219],"14:6":[167,191],"12:14":[198,202],"9:11":222,"10:11":222,"1:4":[203,204],"15:6":190,"2:0":[202,203],"12:15":true,"11:12":222,"12:12":[198,222],"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json
new file mode 100644
index 00000000..39e0ea2a
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-5.json
@@ -0,0 +1 @@
+{"3:0":true,"10:5":true,"5:0":true,"4:0":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json
new file mode 100644
index 00000000..20dc2658
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_-6.json
@@ -0,0 +1 @@
+{"11:5":true,"7:12":true,"4:9":true,"11:1":true,"10:12":true,"11:8":true,"3:0":true,"13:6":true,"13:0":true,"9:12":true,"3:6":true,"13:10":230,"12:8":true,"13:2":true,"11:9":true,"4:5":true,"13:12":true,"3:2":true,"13:3":true,"11:7":true,"6:12":true,"13:4":true,"12:7":true,"6:15":true,"11:0":true,"12:6":true,"4:3":true,"11:10":true,"3:8":[214,225],"12:10":true,"13:8":true,"12:0":true,"11:6":true,"15:12":[219,227],"13:1":true,"14:12":[219,227],"3:1":true,"13:5":true,"12:3":true,"11:4":true,"8:12":true,"3:7":[214,226],"13:7":true,"12:4":true,"11:3":true,"12:2":true,"11:12":true,"12:12":true,"11:2":true,"13:9":230} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json
new file mode 100644
index 00000000..1a304ed3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_0.json
@@ -0,0 +1 @@
+{"15:9":true,"12:1":true,"12:11":true,"8:8":true,"6:10":true,"5:9":true,"12:5":true,"0:13":true,"14:9":true,"6:6":true,"4:9":true,"5:7":true,"11:8":true,"2:9":true,"15:7":true,"13:6":true,"14:7":[150,232],"4:7":true,"13:10":true,"12:8":true,"1:8":true,"14:11":true,"14:1":true,"8:7":true,"9:6":true,"11:9":true,"14:5":true,"10:6":true,"5:11":true,"3:15":true,"12:9":true,"1:9":true,"15:8":true,"11:7":true,"0:14":true,"8:9":true,"5:8":true,"12:7":true,"14:8":true,"7:6":true,"4:8":true,"14:14":true,"14:3":true,"12:6":true,"10:9":true,"7:7":true,"12:10":true,"13:8":true,"0:8":true,"12:0":true,"9:9":true,"14:4":true,"11:6":true,"10:7":true,"7:9":true,"6:8":true,"5:12":true,"14:15":[150,183],"14:2":true,"14:12":true,"9:7":true,"8:6":true,"12:13":true,"2:14":true,"1:13":true,"12:14":true,"12:3":true,"14:6":[140,231],"7:8":true,"6:9":true,"5:10":true,"4:6":true,"2:13":true,"1:14":true,"15:10":true,"14:10":true,"5:6":true,"4:10":true,"13:7":true,"12:4":true,"15:6":true,"14:0":true,"12:2":true,"12:15":true,"10:8":true,"6:7":true,"3:9":true,"12:12":true,"13:9":true,"9:8":true,"14:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json
new file mode 100644
index 00000000..9811e723
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_1.json
@@ -0,0 +1 @@
+{"14:3":true,"12:1":true,"9:3":true,"1:1":true,"10:3":true,"2:15":true,"1:5":true,"15:3":true,"14:9":true,"12:0":true,"1:0":true,"14:4":true,"9:4":true,"2:4":true,"3:0":true,"14:2":true,"13:0":true,"0:0":true,"14:7":true,"3:1":true,"0:5":true,"7:3":true,"15:0":true,"14:11":[182,183],"14:6":true,"14:1":true,"12:3":true,"12:14":true,"0:15":true,"14:10":[183,186],"14:5":true,"3:15":true,"3:2":true,"1:4":true,"15:1":true,"14:0":[138,202],"2:0":true,"13:3":true,"12:2":true,"2:5":true,"1:15":true,"1:2":true,"12:7":true,"12:12":true,"3:3":true,"0:4":true,"14:8":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json
new file mode 100644
index 00000000..abef05f3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_10.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"1:1":true,"11:5":true,"2:7":true,"6:10":true,"13:13":true,"12:5":true,"11:11":true,"6:13":true,"2:9":true,"15:7":true,"3:0":true,"9:15":true,"0:6":true,"0:0":true,"14:7":true,"3:6":true,"7:14":true,"1:8":true,"14:1":true,"13:15":true,"8:7":true,"5:5":true,"4:11":true,"0:2":true,"7:13":true,"2:8":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"15:1":true,"6:14":true,"1:9":true,"15:8":true,"13:14":true,"3:4":true,"0:3":true,"7:10":true,"6:12":true,"3:3":true,"1:7":true,"0:4":[150,180],"6:15":true,"2:1":true,"14:14":true,"4:3":true,"8:13":true,"5:4":true,"2:12":true,"2:15":true,"1:10":true,"15:14":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"14:15":true,"13:1":true,"4:2":true,"0:11":true,"15:15":true,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"11:4":true,"7:8":true,"6:9":true,"4:6":true,"2:13":true,"1:14":true,"5:0":true,"5:6":true,"8:15":true,"4:0":true,"15:13":true,"2:10":true,"1:15":true,"6:7":true,"8:14":true,"1:12":true,"7:1":true,"14:13":true,"6:0":true,"1:11":true,"10:4":true,"3:13":true,"5:9":true,"1:5":[150,176],"0:13":true,"6:6":true,"4:9":true,"8:5":true,"5:7":true,"13:6":true,"13:0":true,"8:11":true,"4:7":true,"0:10":true,"13:2":true,"4:1":true,"3:12":true,"0:15":true,"6:4":true,"15:5":true,"14:5":true,"5:1":true,"3:15":true,"0:12":true,"15:11":true,"7:0":true,"13:3":true,"2:5":true,"0:14":true,"5:8":true,"3:14":true,"7:6":true,"4:8":true,"2:11":true,"15:4":true,"14:3":true,"4:14":true,"1:6":true,"6:5":true,"5:14":true,"2:2":true,"0:8":true,"15:3":true,"1:0":true,"14:4":true,"11:13":true,"5:12":true,"2:4":true,"14:2":true,"4:15":true,"0:1":true,"15:2":true,"8:6":true,"4:12":true,"3:1":true,"13:5":true,"5:15":true,"2:3":true,"15:0":true,"12:14":true,"10:5":true,"5:10":true,"3:7":true,"1:3":150,"9:5":true,"4:10":true,"1:4":true,"0:7":true,"15:6":true,"14:0":true,"2:0":true,"12:15":true,"5:13":true,"1:2":true,"7:5":true,"3:9":true,"12:12":true,"0:9":true,"7:11":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json
new file mode 100644
index 00000000..f2f501c9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_2.json
@@ -0,0 +1 @@
+{"14:3":[151,198],"4:3":true,"5:4":true,"6:5":true,"12:0":true,"14:4":[151,198],"4:4":[155,200],"8:5":true,"4:2":true,"14:7":true,"14:6":true,"13:2":true,"5:5":true,"4:6":true,"4:1":true,"6:4":true,"14:5":true,"4:5":[198,200],"4:0":true,"12:2":true,"7:5":true,"3:3":[154,155],"14:8":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_3.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_3.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json
new file mode 100644
index 00000000..3ff8084e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_4.json
@@ -0,0 +1 @@
+{"15:9":true,"14:3":152,"13:8":166,"14:9":166,"15:10":167,"15:8":166,"13:9":166,"14:8":166} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json
new file mode 100644
index 00000000..6e5a9552
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_6.json
@@ -0,0 +1 @@
+{"3:10":158,"15:1":149} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json
new file mode 100644
index 00000000..803a589b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_7.json
@@ -0,0 +1 @@
+{"3:13":true,"0:13":true,"7:15":true,"9:15":true,"10:15":true,"7:14":true,"3:12":true,"0:15":true,"3:15":true,"0:12":true,"6:14":true,"0:14":true,"3:14":true,"6:15":true,"2:11":true,"4:14":true,"2:12":true,"5:14":true,"2:15":true,"4:15":true,"4:12":true,"5:15":true,"2:14":true,"1:13":true,"2:13":true,"1:14":true,"8:15":true,"1:15":true,"1:12":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json
new file mode 100644
index 00000000..3271d484
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_8.json
@@ -0,0 +1 @@
+{"1:1":true,"2:7":173,"6:10":true,"7:15":true,"6:13":129,"2:9":167,"15:7":true,"3:0":true,"9:15":true,"0:0":true,"14:7":true,"8:1":true,"3:6":true,"10:15":true,"7:14":true,"1:8":[169,173],"14:1":true,"10:10":true,"4:11":130,"0:2":true,"7:13":true,"2:8":[129,174],"5:11":129,"4:5":true,"3:2":true,"6:14":true,"1:9":[168,175],"3:4":true,"0:3":true,"7:10":true,"6:12":true,"3:3":true,"1:7":172,"0:4":true,"6:15":true,"2:1":true,"11:0":true,"12:6":true,"4:3":true,"5:4":true,"2:12":131,"5:3":true,"2:15":[131,151],"1:10":132,"12:0":true,"6:1":true,"4:4":true,"7:9":true,"13:1":true,"4:2":true,"0:11":true,"3:11":131,"5:2":true,"2:14":true,"1:13":true,"0:5":170,"12:3":true,"9:1":true,"6:9":true,"4:6":true,"2:13":true,"1:14":true,"5:0":true,"10:1":true,"5:6":true,"8:15":true,"4:0":true,"12:2":true,"1:15":[131,150],"10:8":true,"11:2":true,"12:1":true,"6:0":true,"10:4":true,"3:13":[131,149],"1:5":true,"0:13":true,"7:2":true,"6:6":true,"11:1":true,"9:4":true,"3:10":130,"7:4":true,"13:6":true,"9:2":true,"13:0":true,"10:2":true,"0:10":133,"13:2":true,"4:1":true,"3:12":131,"0:15":[130,150],"6:4":true,"10:0":true,"14:5":182,"5:1":true,"0:12":true,"9:0":true,"6:3":true,"7:0":true,"13:3":true,"11:7":true,"0:14":true,"3:14":[131,150],"6:2":true,"7:6":true,"2:11":132,"14:3":174,"4:14":131,"11:10":150,"3:8":true,"5:14":true,"2:2":true,"0:8":true,"15:3":[172,173],"1:0":true,"5:12":[130,144],"2:4":true,"8:0":true,"14:2":true,"4:15":true,"0:1":true,"15:2":true,"4:12":130,"3:1":true,"13:5":181,"5:15":131,"2:3":true,"10:5":true,"5:10":true,"3:7":true,"1:3":true,"4:10":128,"8:2":true,"1:4":true,"0:7":130,"15:6":true,"2:0":true,"5:13":130,"1:2":true,"7:5":true,"3:9":true,"11:15":125,"8:3":true,"0:9":132,"7:11":true,"4:13":[131,143],"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json
new file mode 100644
index 00000000..cee24520
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-5_9.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"6:10":true,"13:13":true,"0:6":true,"0:0":true,"3:6":true,"13:15":true,"10:10":true,"8:7":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"13:12":true,"3:2":[123,124],"13:14":true,"3:4":123,"0:3":true,"8:9":true,"7:10":true,"3:3":[123,124],"0:4":true,"2:1":128,"14:14":true,"4:3":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"15:14":true,"9:9":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"4:2":true,"0:11":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"5:2":true,"2:14":true,"1:13":true,"0:5":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:0":true,"5:6":true,"4:0":true,"15:13":true,"1:15":true,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"0:13":true,"11:8":true,"13:6":true,"12:8":true,"14:11":true,"13:2":true,"4:1":true,"3:12":true,"0:15":true,"11:9":true,"15:5":true,"14:5":true,"5:1":true,"3:15":true,"0:12":true,"15:11":true,"12:9":true,"11:7":true,"2:5":true,"0:14":true,"13:4":true,"12:7":true,"3:14":true,"2:11":true,"4:14":true,"1:6":true,"11:10":true,"12:10":true,"5:14":true,"2:2":124,"1:0":true,"14:4":true,"5:12":true,"2:4":true,"13:11":true,"4:12":true,"3:1":129,"13:5":true,"2:3":true,"14:6":true,"1:3":true,"1:4":true,"15:6":true,"5:13":true,"1:2":true,"4:13":true,"2:6":true,"15:9":true,"12:11":true,"11:5":true,"2:7":true,"7:12":true,"12:5":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"14:7":true,"9:12":true,"8:1":true,"13:10":true,"1:8":true,"2:8":true,"6:14":true,"1:9":true,"15:8":true,"10:13":true,"6:12":true,"1:7":true,"6:15":true,"14:8":true,"12:6":true,"1:10":true,"13:8":true,"6:1":true,"11:6":true,"11:4":true,"9:1":true,"8:12":true,"12:3":true,"15:10":true,"14:10":true,"13:7":true,"11:3":true,"12:2":true,"2:10":true,"11:2":true,"8:14":true,"13:9":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"6:6":true,"4:9":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"7:3":true,"9:6":true,"10:0":true,"10:6":true,"9:0":127,"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"4:8":true,"6:5":true,"3:8":true,"0:8":true,"6:11":true,"11:13":true,"8:0":128,"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"0:7":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"3:9":true,"12:12":true,"8:3":true,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json
new file mode 100644
index 00000000..ee4eb238
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-3.json
@@ -0,0 +1 @@
+{"1:6":true,"5:4":true,"2:7":[174,218],"7:2":true,"0:1":true,"8:1":true,"3:6":true,"2:3":true,"0:5":true,"4:1":true,"0:2":true,"5:0":true,"4:5":true,"3:2":true,"1:4":true,"9:0":true,"6:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json
new file mode 100644
index 00000000..d839a5ae
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-4.json
@@ -0,0 +1 @@
+{"1:1":true,"12:5":true,"3:0":true,"0:0":true,"14:7":true,"9:12":true,"8:1":true,"10:15":true,"7:14":true,"14:1":true,"0:2":true,"13:12":true,"3:2":true,"1:9":true,"15:8":[175,218],"0:3":true,"3:3":true,"0:4":true,"6:15":true,"2:1":true,"11:0":true,"4:3":true,"8:13":true,"5:4":true,"5:3":true,"1:10":true,"13:8":[175,217],"12:0":true,"15:12":true,"4:2":true,"0:11":true,"5:2":true,"1:13":true,"11:4":true,"15:10":true,"5:0":204,"13:7":true,"12:4":true,"1:12":true,"6:0":[203,204],"1:11":true,"10:4":[202,203],"10:3":true,"0:13":true,"9:4":[201,202],"7:4":true,"13:6":true,"9:2":218,"0:10":true,"14:11":true,"4:1":true,"6:4":true,"10:0":true,"5:1":161,"0:12":true,"12:9":true,"9:0":true,"6:3":true,"7:0":[202,218],"13:3":true,"13:4":true,"12:7":true,"14:3":true,"11:10":true,"1:0":true,"8:0":[201,202],"14:2":true,"0:1":true,"8:6":true,"3:1":true,"12:13":true,"1:3":true,"10:11":true,"11:14":true,"1:4":true,"2:0":true,"8:4":[201,202],"1:2":true,"7:5":true,"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json
new file mode 100644
index 00000000..998fbd6c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-5.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"6:10":true,"0:6":true,"0:0":true,"1:8":177,"4:11":true,"0:2":177,"5:11":true,"1:9":177,"3:4":[208,209],"8:9":true,"1:7":true,"6:15":217,"5:3":209,"2:15":true,"1:10":[177,218],"12:0":209,"9:9":true,"7:9":true,"15:12":235,"0:11":177,"3:11":[237,238],"9:1":[210,212],"7:8":true,"6:9":true,"1:14":true,"10:1":[211,212],"6:7":224,"6:0":true,"1:11":[177,237],"1:5":true,"0:13":true,"7:2":[210,211],"11:1":[209,213],"13:0":[209,210],"0:10":177,"3:12":218,"5:1":[196,198],"2:5":true,"0:14":true,"6:2":210,"2:11":[218,237],"5:14":217,"0:8":177,"6:11":true,"1:0":true,"0:1":177,"5:10":true,"4:10":236,"8:2":true,"0:7":true,"14:0":[211,212],"2:0":true,"1:2":177,"0:9":[177,218],"7:11":true,"4:13":[217,218]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json
new file mode 100644
index 00000000..32fc9d93
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_-6.json
@@ -0,0 +1 @@
+{"1:6":true,"1:5":true,"0:8":true,"14:15":[209,210],"0:6":true,"0:5":true,"12:8":183,"1:8":true,"1:14":true,"0:15":true,"0:7":true,"1:9":true,"1:15":true,"0:14":true,"1:7":true,"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json
new file mode 100644
index 00000000..f4ef8dc2
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_0.json
@@ -0,0 +1 @@
+{"3:13":true,"13:13":true,"10:14":true,"0:13":190,"6:13":true,"7:14":true,"7:13":true,"3:15":true,"6:14":true,"13:14":true,"10:13":true,"0:14":190,"3:14":true,"9:13":true,"14:14":true,"4:14":true,"8:13":true,"5:14":true,"15:14":true,"11:13":true,"12:13":true,"5:15":true,"2:14":190,"1:13":true,"12:14":true,"2:13":true,"1:14":190,"11:14":true,"15:13":true,"5:13":true,"8:14":true,"14:13":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json
new file mode 100644
index 00000000..7e4d2f51
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_1.json
@@ -0,0 +1 @@
+{"1:1":true,"11:5":true,"12:5":true,"3:0":true,"0:0":[190,192],"10:15":true,"1:8":true,"13:15":[198,200],"5:5":true,"2:8":true,"4:5":true,"3:2":true,"15:1":true,"1:9":true,"3:4":true,"0:4":true,"11:0":true,"5:4":true,"12:0":true,"6:1":true,"4:4":true,"3:5":true,"14:15":[198,200],"13:1":true,"15:15":[198,200],"5:2":true,"0:5":true,"11:4":true,"9:1":true,"5:0":true,"12:4":true,"4:0":true,"11:2":true,"7:1":true,"6:0":true,"10:4":true,"1:5":true,"7:2":true,"11:1":true,"8:5":true,"7:4":true,"9:2":true,"13:0":true,"0:10":true,"13:2":true,"6:4":true,"15:5":true,"10:0":true,"14:5":true,"5:1":true,"9:0":true,"7:0":true,"2:5":true,"13:4":true,"4:8":true,"15:4":true,"6:5":true,"3:8":true,"0:8":true,"1:0":[190,192],"14:4":true,"2:4":true,"8:0":true,"15:2":true,"3:1":true,"13:5":true,"15:0":true,"10:5":true,"9:5":true,"1:4":true,"0:7":true,"14:0":true,"2:0":[190,192],"12:15":true,"8:4":true,"1:2":true,"7:5":true,"11:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json
new file mode 100644
index 00000000..f01a6ff5
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_2.json
@@ -0,0 +1 @@
+{"8:5":true,"8:1":true,"0:15":true,"15:5":176,"8:6":true,"8:2":[198,200],"8:4":[198,200],"8:3":[198,200]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json
new file mode 100644
index 00000000..cba2dea8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_4.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"7:12":true,"6:10":true,"10:14":true,"7:15":[147,148],"10:12":true,"6:13":147,"3:0":true,"9:15":true,"0:0":true,"8:1":true,"3:6":true,"10:15":true,"7:14":true,"10:10":true,"8:7":true,"5:5":true,"7:13":true,"9:10":true,"5:11":true,"4:5":true,"3:2":true,"6:14":147,"10:13":true,"3:4":true,"8:9":true,"7:10":true,"6:12":true,"3:3":true,"6:15":[147,148],"2:1":true,"4:3":true,"8:13":true,"5:4":true,"7:7":true,"5:3":true,"2:15":142,"9:9":true,"6:1":true,"4:4":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"4:2":true,"9:7":true,"5:2":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"5:0":true,"5:6":true,"8:15":true,"4:0":true,"6:7":true,"8:14":true,"9:8":true,"7:1":true,"6:0":true,"3:13":143,"5:9":true,"7:2":true,"6:6":true,"4:9":true,"8:5":true,"5:7":true,"3:10":145,"7:4":true,"8:11":true,"4:7":true,"7:3":true,"4:1":true,"3:12":144,"6:4":true,"5:1":true,"3:15":[142,145],"6:3":true,"7:0":true,"2:5":true,"5:8":true,"3:14":142,"6:2":true,"7:6":true,"4:8":true,"4:14":[143,146],"6:5":true,"3:8":true,"5:14":147,"2:2":true,"6:11":true,"1:0":true,"5:12":147,"2:4":true,"4:15":[142,148],"8:6":true,"4:12":[145,146],"3:1":true,"5:15":[147,148],"2:3":true,"5:10":true,"3:7":true,"4:10":[146,147],"8:2":true,"2:0":true,"8:4":true,"5:13":147,"1:2":true,"7:5":true,"3:9":145,"11:15":true,"8:3":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json
new file mode 100644
index 00000000..46aeccfe
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_5.json
@@ -0,0 +1 @@
+{"9:14":true,"1:1":true,"11:5":true,"2:7":true,"8:8":true,"7:12":true,"6:10":true,"12:5":true,"10:14":true,"7:15":true,"10:12":true,"6:13":true,"2:9":true,"9:15":true,"9:12":true,"8:1":147,"3:6":145,"10:15":true,"7:14":true,"10:10":true,"8:7":true,"5:5":147,"4:11":147,"7:13":true,"2:8":true,"9:10":true,"5:11":true,"4:5":[145,146],"6:14":true,"10:13":true,"3:4":143,"8:9":true,"7:10":true,"6:12":true,"6:15":true,"9:13":true,"12:6":true,"4:3":[144,146],"8:13":true,"5:4":147,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"1:10":true,"9:9":true,"6:1":147,"11:6":true,"4:4":[144,146],"10:7":true,"8:10":true,"7:9":true,"6:8":147,"3:5":144,"4:2":[144,146],"9:7":true,"5:2":147,"2:14":146,"0:5":true,"4:6":146,"12:3":true,"11:4":true,"9:1":true,"8:12":true,"7:8":true,"6:9":true,"2:13":[145,147],"5:0":147,"10:1":true,"5:6":147,"8:15":true,"13:7":true,"12:4":true,"11:3":true,"4:0":[143,146],"2:10":true,"10:8":true,"6:7":147,"11:2":true,"8:14":true,"9:8":true,"7:1":147,"9:3":true,"6:0":147,"10:4":true,"3:13":147,"5:9":147,"10:3":true,"1:5":true,"7:2":147,"6:6":147,"4:9":147,"11:1":true,"9:4":true,"8:5":true,"5:7":147,"3:10":true,"11:8":true,"7:4":147,"13:6":true,"9:2":true,"8:11":true,"4:7":146,"10:2":true,"12:8":true,"7:3":147,"9:6":true,"4:1":[145,146],"6:4":147,"10:0":true,"10:6":true,"5:1":147,"3:15":true,"9:0":true,"6:3":true,"7:0":147,"11:7":true,"5:8":147,"3:14":true,"6:2":147,"7:6":true,"4:8":147,"2:11":true,"4:14":true,"6:5":147,"3:8":true,"5:14":true,"6:11":true,"5:12":true,"8:0":true,"4:15":true,"0:1":true,"8:6":true,"4:12":147,"5:15":true,"13:5":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"9:5":true,"4:10":147,"11:14":true,"8:2":true,"11:12":true,"8:4":true,"5:13":true,"7:5":147,"3:9":true,"11:15":true,"8:3":147,"7:11":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json
new file mode 100644
index 00000000..303f3022
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_6.json
@@ -0,0 +1 @@
+{"1:1":true,"2:7":true,"6:10":true,"2:9":true,"3:0":true,"8:1":true,"3:6":true,"5:5":true,"4:11":true,"2:8":true,"5:11":true,"4:5":true,"3:2":true,"1:9":true,"13:14":148,"3:4":true,"7:10":true,"6:12":true,"3:3":true,"6:15":true,"2:1":true,"4:3":true,"5:4":true,"2:12":true,"7:7":true,"5:3":true,"6:1":true,"4:4":true,"7:9":true,"6:8":true,"3:5":true,"4:2":true,"3:11":true,"5:2":true,"2:14":148,"9:1":true,"7:8":true,"6:9":true,"4:6":true,"5:0":true,"5:6":true,"4:0":true,"2:10":true,"6:7":true,"7:1":true,"9:3":true,"6:0":true,"3:13":true,"5:9":true,"7:2":true,"6:6":true,"4:9":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"4:7":true,"7:3":true,"4:1":true,"3:12":true,"6:4":true,"10:0":true,"5:1":true,"3:15":[170,171],"9:0":true,"6:3":true,"7:0":true,"2:5":true,"5:8":true,"3:14":[147,170],"6:2":true,"7:6":true,"4:8":true,"2:11":true,"4:14":true,"6:5":true,"3:8":true,"5:14":true,"2:2":true,"6:11":true,"1:0":true,"5:12":true,"2:4":true,"8:0":true,"4:15":true,"8:6":true,"4:12":true,"3:1":true,"5:15":true,"2:3":true,"5:10":true,"3:7":true,"1:3":true,"8:2":true,"1:4":true,"2:0":true,"8:4":true,"5:13":true,"1:2":true,"7:5":true,"3:9":true,"8:3":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json
new file mode 100644
index 00000000..645ca655
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_7.json
@@ -0,0 +1 @@
+{"9:14":true,"1:1":148,"8:8":true,"7:12":true,"6:10":true,"13:13":true,"10:14":true,"7:15":true,"10:12":true,"6:13":true,"2:9":true,"3:0":[148,171],"9:15":true,"9:12":true,"3:6":true,"10:15":true,"7:14":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"7:13":true,"2:8":true,"9:10":true,"5:11":true,"4:5":true,"3:2":true,"6:14":true,"1:9":true,"13:14":true,"10:13":true,"8:9":true,"7:10":true,"6:12":true,"3:3":true,"6:15":true,"9:13":true,"2:1":148,"14:14":true,"4:3":true,"8:13":true,"5:4":true,"2:12":true,"7:7":true,"5:3":true,"15:14":true,"9:9":true,"6:1":true,"4:4":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"14:15":true,"4:2":true,"15:15":true,"9:7":true,"3:11":true,"5:2":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"2:13":true,"5:0":true,"5:6":true,"8:15":true,"4:0":true,"15:13":true,"2:10":true,"6:7":true,"8:14":true,"9:8":true,"14:13":true,"6:0":true,"3:13":true,"5:9":true,"6:6":true,"4:9":true,"5:7":true,"3:10":true,"7:4":true,"8:11":true,"4:7":true,"7:3":true,"4:1":true,"3:12":true,"6:4":true,"5:1":true,"6:3":true,"2:5":true,"5:8":true,"3:14":true,"6:2":true,"7:6":true,"4:8":true,"2:11":true,"4:14":true,"6:5":true,"3:8":true,"5:14":true,"2:2":148,"6:11":true,"11:13":true,"5:12":true,"4:15":true,"8:6":true,"4:12":true,"3:1":true,"12:13":true,"5:15":true,"2:3":true,"12:14":true,"9:11":true,"5:10":true,"3:7":true,"1:3":148,"10:11":true,"4:10":true,"11:14":true,"2:0":148,"11:12":true,"5:13":true,"1:2":148,"7:5":true,"3:9":true,"11:15":true,"7:11":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json
new file mode 100644
index 00000000..c412285b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_8.json
@@ -0,0 +1 @@
+{"6:10":true,"13:15":true,"14:1":true,"10:10":true,"8:7":true,"4:11":true,"9:10":true,"5:11":true,"13:12":[131,172],"15:1":true,"8:9":true,"7:10":true,"2:12":true,"10:9":true,"7:7":true,"2:15":[138,152],"15:14":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"14:15":true,"13:1":true,"0:11":true,"15:15":[131,149],"14:12":true,"9:7":true,"3:11":true,"2:14":[138,150],"1:13":[138,151],"2:13":[138,150],"1:14":[138,150],"5:0":true,"5:6":true,"4:0":true,"15:13":true,"1:15":[138,152],"10:8":true,"6:7":true,"1:12":true,"9:8":true,"1:11":true,"3:13":true,"11:8":true,"13:6":true,"13:0":true,"12:8":true,"14:11":true,"13:2":[134,168],"3:12":true,"0:15":[138,152],"11:9":true,"14:5":[133,135],"5:1":true,"3:15":[138,150],"0:12":true,"15:11":true,"12:9":true,"13:3":true,"11:7":true,"0:14":151,"13:4":true,"12:7":true,"3:14":[137,149],"2:11":true,"4:14":true,"11:10":true,"12:10":true,"5:14":true,"15:3":169,"14:4":[133,134],"5:12":true,"14:2":true,"13:11":133,"4:15":[137,173],"15:2":true,"4:12":true,"13:5":true,"5:15":[137,173],"15:0":true,"14:6":true,"15:6":true,"14:0":true,"5:13":true,"4:13":true,"15:9":true,"12:11":133,"9:14":[133,173],"11:5":true,"7:12":true,"12:5":true,"10:14":[168,173],"7:15":[136,173],"14:9":133,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"9:15":true,"14:7":true,"9:12":true,"8:1":true,"10:15":true,"13:10":true,"7:14":true,"7:13":true,"6:14":true,"15:8":true,"10:13":true,"6:15":[137,173],"14:8":true,"9:13":true,"11:0":true,"12:6":true,"8:13":true,"1:10":true,"13:8":true,"12:0":true,"6:1":true,"11:6":true,"12:3":true,"11:4":true,"9:1":true,"8:12":true,"15:10":133,"14:10":133,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"8:15":true,"12:2":[136,139],"2:10":true,"11:2":true,"8:14":[135,170],"13:9":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"6:6":true,"4:9":true,"11:1":[136,167],"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"10:2":true,"0:10":true,"7:3":true,"9:6":true,"6:4":true,"10:0":true,"10:6":true,"9:0":true,"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"4:8":true,"6:5":true,"11:13":[132,174],"8:0":true,"8:6":true,"10:5":true,"9:11":true,"5:10":true,"10:11":true,"9:5":true,"4:10":true,"8:2":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"3:9":true,"12:12":132,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json
new file mode 100644
index 00000000..e0ccf216
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-6_9.json
@@ -0,0 +1 @@
+{"1:1":138,"8:8":true,"6:10":true,"13:13":true,"0:6":true,"3:6":true,"14:1":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":[138,181],"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"15:1":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"3:3":true,"0:4":true,"2:1":138,"14:14":true,"4:3":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"15:14":true,"9:9":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"5:2":true,"0:5":true,"4:6":true,"7:8":true,"6:9":true,"2:13":true,"5:0":[138,173],"5:6":true,"4:0":149,"15:13":true,"1:15":true,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"11:8":true,"13:6":true,"12:8":true,"14:11":true,"13:2":true,"4:1":true,"3:12":true,"0:15":true,"11:9":true,"15:5":true,"14:5":true,"5:1":true,"15:11":true,"12:9":true,"13:3":true,"11:7":true,"2:5":true,"0:14":true,"13:4":true,"12:7":true,"2:11":true,"15:4":true,"14:3":true,"4:14":true,"1:6":true,"11:10":true,"12:10":true,"5:14":true,"2:2":[138,183],"15:3":true,"1:0":138,"14:4":true,"5:12":true,"2:4":true,"14:2":true,"13:11":true,"4:15":true,"0:1":138,"15:2":true,"4:12":true,"3:1":[138,173],"13:5":true,"5:15":true,"2:3":true,"15:0":true,"14:6":true,"1:3":true,"1:4":true,"15:6":true,"14:0":true,"2:0":138,"5:13":true,"1:2":[138,182],"4:13":true,"2:6":true,"15:9":true,"12:11":true,"9:14":true,"11:5":true,"2:7":true,"7:12":true,"12:5":true,"10:14":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"9:15":true,"14:7":true,"9:12":true,"8:1":true,"13:10":true,"10:15":true,"1:8":true,"2:8":true,"6:14":true,"1:9":true,"15:8":true,"10:13":true,"6:12":true,"1:7":true,"6:15":true,"14:8":true,"9:13":true,"12:6":true,"8:13":[132,148],"1:10":true,"13:8":true,"6:1":true,"11:6":true,"12:3":true,"11:4":true,"9:1":true,"8:12":true,"15:10":true,"14:10":true,"13:7":true,"12:4":true,"11:3":true,"8:15":true,"12:2":true,"2:10":true,"11:2":true,"8:14":true,"13:9":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"6:6":true,"4:9":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"7:3":true,"9:6":true,"6:4":true,"10:6":true,"9:0":true,"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"4:8":true,"6:5":true,"3:8":true,"0:8":true,"6:11":true,"11:13":true,"8:0":true,"8:6":true,"12:13":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"8:2":true,"0:7":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"3:9":true,"12:12":true,"11:15":true,"8:3":true,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json
new file mode 100644
index 00000000..6b55f55d
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-1.json
@@ -0,0 +1 @@
+{"12:11":true,"11:5":171,"8:8":true,"12:5":[171,175],"7:15":true,"6:13":true,"9:15":true,"14:7":true,"8:1":true,"13:10":true,"10:15":true,"10:10":true,"8:7":true,"0:2":true,"9:10":true,"13:14":true,"8:9":true,"6:15":true,"14:8":224,"11:0":171,"14:14":true,"12:6":171,"10:9":true,"7:7":true,"13:8":true,"15:14":true,"12:0":true,"9:9":true,"6:1":true,"11:6":171,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"15:12":[216,222],"0:11":[152,153],"15:15":true,"9:7":true,"12:3":[171,175],"11:4":171,"9:1":171,"7:8":true,"6:9":true,"15:10":[216,222],"14:10":[216,222],"10:1":171,"13:7":true,"12:4":171,"11:3":171,"8:15":true,"15:13":true,"12:2":171,"10:8":true,"6:7":true,"11:2":171,"9:8":true,"7:1":171,"12:1":[171,175],"9:3":171,"6:0":171,"10:4":true,"10:3":171,"7:2":true,"6:6":true,"11:1":171,"9:4":171,"8:5":true,"11:8":true,"7:4":true,"9:2":true,"10:2":171,"12:8":true,"7:3":true,"9:6":true,"11:9":true,"6:4":true,"10:0":171,"10:6":171,"0:12":true,"15:11":[216,222],"12:9":true,"9:0":171,"6:3":true,"7:0":171,"11:7":171,"12:7":[171,223],"6:2":true,"7:6":true,"15:4":true,"11:10":true,"6:5":true,"12:10":true,"6:11":true,"14:4":true,"8:0":true,"0:1":true,"8:6":true,"12:13":true,"14:6":true,"12:14":true,"10:5":171,"9:5":171,"11:14":true,"8:2":171,"12:15":true,"8:4":true,"1:2":true,"7:5":true,"11:15":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json
new file mode 100644
index 00000000..a1729354
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-2.json
@@ -0,0 +1 @@
+{"12:11":[171,175],"9:14":true,"11:5":true,"8:8":171,"7:12":171,"6:10":171,"12:5":true,"10:14":true,"7:15":true,"11:11":171,"10:12":true,"6:13":true,"9:15":171,"9:12":true,"8:1":true,"10:15":171,"7:14":true,"10:10":171,"8:7":171,"7:13":171,"9:10":171,"6:14":true,"10:13":true,"8:9":171,"7:10":171,"6:12":171,"6:15":[171,175],"9:13":true,"11:0":true,"12:6":true,"8:13":171,"10:9":171,"7:7":171,"12:0":true,"9:9":171,"6:1":[169,175],"11:6":true,"10:7":171,"8:10":171,"7:9":171,"6:8":171,"9:7":171,"12:3":true,"11:4":true,"9:1":true,"8:12":171,"7:8":171,"6:9":[171,175],"14:10":true,"10:1":true,"12:4":true,"11:3":true,"8:15":171,"12:2":true,"10:8":171,"6:7":[171,175],"11:2":true,"8:14":171,"9:8":171,"7:1":169,"12:1":true,"9:3":true,"6:0":168,"10:4":true,"10:3":true,"7:2":170,"6:6":171,"11:1":true,"9:4":171,"8:5":171,"11:8":171,"7:4":171,"9:2":true,"8:11":171,"10:2":true,"12:8":true,"7:3":171,"9:6":171,"11:9":171,"6:4":171,"10:0":true,"10:6":171,"15:11":true,"12:9":[171,175],"9:0":true,"6:3":[171,175],"7:0":true,"11:7":true,"12:7":true,"6:2":170,"7:6":171,"11:10":171,"6:5":[171,175],"12:10":171,"6:11":[171,175],"11:13":true,"8:0":true,"8:6":171,"12:13":[171,175],"12:14":171,"10:5":true,"9:11":171,"10:11":171,"9:5":171,"11:14":true,"8:2":170,"12:15":[171,175],"11:12":171,"8:4":171,"7:5":171,"12:12":171,"11:15":true,"8:3":171,"7:11":171} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json
new file mode 100644
index 00000000..c16c3f4a
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-3.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"5:9":true,"0:13":195,"7:15":true,"4:9":true,"3:10":[192,193],"6:13":true,"2:9":true,"9:15":true,"14:7":true,"10:15":true,"11:9":true,"15:5":true,"3:15":true,"3:2":true,"15:1":true,"12:9":true,"0:14":195,"5:8":true,"6:15":[168,175],"14:8":true,"4:8":true,"2:11":true,"2:1":true,"15:4":true,"4:14":true,"2:12":[190,194],"3:8":true,"5:14":true,"2:2":true,"13:8":true,"9:9":true,"6:11":true,"7:9":true,"15:2":true,"3:1":true,"3:11":[190,192],"12:13":true,"1:13":[194,195],"12:14":true,"6:9":true,"4:10":true,"8:15":true,"12:15":true,"5:13":true,"2:10":159,"3:9":true,"11:15":true,"1:12":[192,193],"13:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json
new file mode 100644
index 00000000..87e54c02
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-4.json
@@ -0,0 +1 @@
+{"15:9":true,"9:14":true,"1:11":true,"3:13":true,"2:7":true,"7:12":true,"4:9":true,"3:10":true,"2:9":true,"13:0":true,"10:15":true,"3:12":true,"6:4":true,"15:5":true,"5:1":164,"15:11":true,"15:1":true,"6:3":true,"1:9":true,"15:8":true,"0:14":203,"13:4":true,"3:14":[177,201],"6:2":true,"2:11":true,"15:4":true,"1:6":true,"8:13":true,"2:12":true,"3:8":true,"5:3":true,"1:10":true,"15:14":true,"15:3":true,"6:11":true,"14:4":true,"3:5":true,"15:12":true,"15:2":true,"3:11":true,"5:2":164,"2:14":202,"1:13":true,"0:5":true,"15:0":true,"5:10":true,"2:13":true,"15:10":true,"12:4":true,"14:0":true,"15:13":true,"5:13":199,"2:10":true,"3:9":true,"1:12":true,"4:13":200} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json
new file mode 100644
index 00000000..38a94887
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-5.json
@@ -0,0 +1 @@
+{"15:9":177,"1:1":true,"2:7":true,"13:13":true,"11:11":199,"15:7":true,"3:0":true,"0:0":true,"14:7":[208,212],"3:6":177,"13:10":171,"1:8":177,"2:8":177,"13:12":true,"3:2":true,"15:1":true,"15:8":177,"3:3":true,"1:7":true,"2:1":true,"15:14":true,"10:7":[167,169],"7:9":[206,207],"15:12":true,"15:15":true,"14:12":true,"9:7":true,"15:10":177,"13:7":208,"15:13":true,"10:8":170,"14:13":true,"11:8":[170,208],"12:8":[207,209],"14:11":163,"15:11":[171,177],"3:8":true,"2:2":true,"15:3":177,"1:0":true,"8:0":true,"13:11":163,"15:2":true,"3:1":true,"15:0":177,"3:7":true,"15:6":[177,210],"2:0":true,"12:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json
new file mode 100644
index 00000000..19ba134e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_-6.json
@@ -0,0 +1 @@
+{"15:9":true,"3:13":true,"2:7":true,"1:5":true,"3:10":true,"2:9":177,"15:7":true,"3:6":true,"1:8":true,"2:8":true,"15:5":true,"3:15":true,"1:9":true,"15:8":true,"3:4":true,"2:5":true,"3:14":true,"1:7":true,"15:4":true,"1:6":true,"3:8":true,"2:15":true,"15:14":true,"3:5":true,"15:15":true,"2:14":true,"3:7":true,"1:14":true,"15:10":true,"15:6":true,"15:13":true,"1:15":true,"3:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json
new file mode 100644
index 00000000..102e124f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_0.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"11:5":true,"8:8":true,"7:12":true,"6:10":true,"13:13":[190,192],"12:5":true,"10:14":true,"7:15":true,"11:11":true,"10:12":171,"6:13":[171,190],"9:15":true,"9:12":171,"8:1":true,"10:15":true,"7:14":[171,190],"10:10":true,"8:7":true,"7:13":[171,192],"9:10":true,"6:14":[171,190],"13:14":true,"10:13":true,"8:9":true,"7:10":true,"6:12":true,"6:15":true,"9:13":[171,192],"11:0":true,"8:13":[171,190],"10:9":true,"7:7":true,"15:14":190,"9:9":true,"6:1":true,"11:6":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"9:7":true,"2:14":true,"1:13":true,"2:13":true,"12:3":true,"11:4":true,"9:1":true,"8:12":171,"7:8":true,"6:9":true,"1:14":true,"10:1":true,"11:3":true,"8:15":true,"15:13":[190,192],"10:8":true,"6:7":true,"11:2":true,"8:14":true,"9:8":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"3:13":true,"10:3":true,"0:13":true,"7:2":true,"6:6":true,"11:1":true,"9:4":true,"8:5":true,"11:8":true,"7:4":true,"9:2":true,"8:11":true,"10:2":true,"7:3":true,"9:6":true,"11:9":true,"6:4":true,"10:0":true,"10:6":true,"12:9":true,"9:0":true,"6:3":true,"7:0":true,"11:7":true,"0:14":true,"12:7":true,"6:2":true,"7:6":true,"4:14":190,"11:10":true,"6:5":true,"5:14":190,"6:11":true,"11:13":[171,192],"8:0":true,"8:6":true,"12:13":[175,190],"12:14":true,"9:11":true,"10:5":true,"10:11":true,"9:5":true,"11:14":true,"8:2":true,"12:15":true,"11:12":171,"8:4":true,"5:13":true,"7:5":true,"11:15":true,"8:3":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json
new file mode 100644
index 00000000..4574dc7f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_1.json
@@ -0,0 +1 @@
+{"12:11":true,"1:1":192,"11:5":true,"8:8":true,"6:10":true,"12:5":true,"7:15":true,"6:13":true,"3:0":true,"9:15":true,"0:0":true,"8:1":171,"10:15":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"9:10":true,"4:5":true,"3:2":192,"15:1":192,"8:9":true,"7:10":true,"0:4":190,"6:15":true,"11:0":true,"12:6":true,"5:4":true,"10:9":true,"7:7":true,"12:0":true,"9:9":true,"6:1":[171,175],"11:6":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"14:15":true,"13:1":192,"9:7":true,"5:2":192,"0:5":true,"12:3":true,"11:4":true,"9:1":[171,192],"7:8":true,"6:9":true,"5:0":true,"10:1":171,"12:4":true,"11:3":true,"8:15":true,"4:0":true,"10:8":true,"6:7":true,"11:2":true,"9:8":true,"7:1":[171,192],"12:1":175,"9:3":true,"6:0":[171,192],"10:4":true,"10:3":true,"1:5":true,"7:2":true,"6:6":true,"11:1":[171,192],"9:4":true,"8:5":true,"11:8":true,"7:4":true,"9:2":true,"13:0":true,"10:2":true,"12:8":true,"7:3":true,"13:2":192,"9:6":true,"11:9":true,"6:4":true,"15:5":true,"10:0":[171,192],"10:6":true,"5:1":192,"3:15":true,"12:9":true,"9:0":[171,192],"6:3":true,"7:0":[171,192],"11:7":true,"2:5":true,"13:4":true,"12:7":true,"6:2":171,"7:6":true,"15:4":true,"11:10":true,"6:5":true,"12:10":true,"6:11":true,"1:0":[190,192],"2:4":true,"8:0":[171,192],"4:15":true,"15:2":192,"8:6":true,"3:1":true,"13:5":true,"12:13":true,"5:15":true,"15:0":[190,192],"10:5":true,"9:5":true,"8:2":true,"1:4":190,"14:0":[190,192],"2:0":[190,192],"12:15":true,"8:4":true,"1:2":192,"7:5":true,"11:15":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json
new file mode 100644
index 00000000..3736f0b1
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_2.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"7:12":true,"13:13":true,"12:5":true,"10:14":true,"7:15":true,"10:12":true,"6:13":true,"3:0":true,"9:15":true,"9:12":true,"10:15":true,"7:14":true,"1:8":true,"14:1":true,"13:15":true,"4:11":true,"7:13":true,"5:11":true,"6:14":true,"1:9":true,"13:14":true,"10:13":true,"6:12":true,"1:7":true,"6:15":true,"9:13":true,"14:14":true,"8:13":true,"2:12":true,"2:15":true,"1:10":true,"15:14":true,"6:1":true,"14:15":true,"13:1":true,"0:11":true,"15:15":true,"3:11":true,"2:14":true,"1:13":true,"12:3":true,"8:12":true,"6:9":true,"2:13":true,"1:14":true,"8:15":true,"2:10":true,"1:15":true,"6:7":true,"8:14":true,"1:12":true,"12:1":true,"1:11":true,"3:13":true,"5:9":true,"0:13":true,"4:9":true,"3:10":true,"0:10":true,"4:1":true,"3:12":true,"5:1":true,"3:15":true,"0:12":true,"12:9":true,"6:3":true,"0:14":true,"12:7":true,"3:14":true,"4:8":true,"2:11":true,"4:14":true,"6:5":true,"3:8":true,"5:14":true,"0:8":true,"6:11":true,"11:13":true,"5:12":true,"4:15":true,"4:12":true,"3:1":true,"12:13":true,"5:15":true,"12:14":true,"5:10":true,"4:10":true,"11:14":true,"0:7":true,"12:15":true,"11:12":true,"5:13":true,"3:9":true,"0:9":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json
new file mode 100644
index 00000000..aed53373
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_3.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"9:14":true,"11:5":true,"7:12":true,"6:10":true,"12:5":true,"10:14":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"15:7":true,"3:0":true,"9:15":true,"14:7":true,"9:12":true,"8:1":true,"10:15":true,"7:14":true,"14:1":true,"10:10":true,"7:13":true,"9:10":true,"15:1":true,"6:14":true,"15:8":true,"10:13":true,"8:9":true,"7:10":171,"6:12":true,"6:15":true,"14:8":true,"9:13":true,"8:13":true,"13:8":true,"12:0":true,"6:1":true,"8:10":171,"7:9":171,"6:8":true,"15:12":true,"13:1":true,"12:3":true,"11:4":true,"9:1":true,"8:12":true,"7:8":true,"6:9":[171,175],"15:10":true,"5:0":true,"14:10":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"8:15":true,"4:0":true,"15:13":true,"12:2":true,"6:7":true,"11:2":true,"8:14":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:3":true,"6:6":true,"11:1":true,"13:6":true,"9:2":true,"13:0":true,"8:11":true,"10:2":true,"13:2":true,"4:1":true,"15:5":true,"14:5":true,"5:1":true,"3:15":true,"15:11":true,"12:9":true,"6:3":true,"13:3":true,"13:4":true,"12:7":true,"15:4":true,"14:3":true,"4:14":true,"6:5":true,"12:10":true,"15:3":true,"6:11":true,"14:4":true,"11:13":true,"14:2":true,"15:2":true,"13:5":true,"12:13":true,"15:0":true,"14:6":true,"12:14":true,"9:11":true,"10:11":true,"11:14":true,"8:2":true,"15:6":true,"14:0":true,"12:15":true,"11:12":true,"5:13":true,"12:12":true,"11:15":true,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json
new file mode 100644
index 00000000..0dc13427
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_4.json
@@ -0,0 +1 @@
+{"11:0":true,"9:3":true,"5:4":true,"6:5":true,"5:3":true,"7:2":true,"12:0":true,"6:1":true,"11:1":true,"7:4":true,"8:0":true,"9:2":true,"8:1":true,"10:2":true,"5:2":true,"7:3":true,"9:1":true,"5:5":true,"6:4":true,"10:0":true,"10:1":true,"5:1":true,"8:2":true,"9:0":true,"6:3":true,"7:0":true,"8:4":true,"7:5":true,"8:3":true,"6:2":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_7.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_7.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json
new file mode 100644
index 00000000..25cbedf1
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_8.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"11:5":true,"2:7":[148,153],"8:8":true,"7:12":true,"6:10":true,"13:13":true,"10:14":true,"7:15":[136,153],"11:11":true,"10:12":true,"6:13":true,"2:9":true,"9:15":true,"0:6":[155,156],"9:12":true,"3:6":150,"10:15":true,"7:14":true,"1:8":true,"13:15":[138,153],"10:10":true,"8:7":true,"4:11":true,"7:13":true,"2:8":true,"9:10":true,"5:11":true,"4:5":151,"13:12":true,"6:14":true,"1:9":true,"13:14":[138,152],"10:13":true,"3:4":[145,146],"8:9":true,"7:10":true,"6:12":true,"3:3":[144,147],"1:7":[154,156],"0:4":153,"6:15":[134,156],"9:13":true,"14:14":[138,152],"8:13":true,"2:12":true,"7:7":true,"2:15":[135,161],"15:14":[138,152],"9:9":true,"8:10":true,"7:9":true,"6:8":true,"3:5":[146,149],"15:12":true,"14:15":[138,153],"15:15":[138,153],"14:12":true,"9:7":true,"2:14":true,"1:13":true,"0:5":154,"2:13":true,"12:3":145,"11:4":[145,147],"8:12":true,"7:8":true,"6:9":true,"1:14":true,"12:4":true,"8:15":[138,153],"15:13":[138,151],"1:15":[134,161],"6:7":true,"8:14":true,"1:12":true,"14:13":[138,152],"3:13":true,"5:9":true,"0:13":true,"6:6":true,"4:9":true,"5:7":true,"3:10":true,"7:4":181,"8:11":true,"4:7":true,"14:11":true,"9:6":true,"3:12":true,"0:15":[135,175],"10:6":true,"3:15":true,"0:12":true,"15:11":true,"2:5":true,"0:14":true,"5:8":true,"3:14":true,"4:8":true,"4:14":true,"1:6":[153,154],"11:10":true,"3:8":true,"12:10":true,"5:14":true,"0:8":157,"6:11":true,"11:13":true,"5:12":true,"13:11":true,"4:15":true,"8:6":true,"4:12":true,"12:13":true,"5:15":[133,159],"12:14":152,"10:5":true,"9:11":true,"3:7":true,"5:10":true,"10:11":true,"4:10":true,"11:14":true,"0:7":157,"12:15":[138,153],"11:12":true,"5:13":true,"3:9":true,"12:12":true,"11:15":[138,153],"8:3":181,"0:9":true,"7:11":true,"4:13":true,"2:6":[148,149]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json
new file mode 100644
index 00000000..0bd4fdd5
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-7_9.json
@@ -0,0 +1 @@
+{"1:1":[137,158],"8:8":true,"6:10":true,"13:13":true,"3:0":[135,158],"0:6":true,"0:0":[135,157],"3:6":true,"14:1":138,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":158,"15:1":138,"13:14":true,"3:4":[144,157],"0:3":true,"8:9":true,"7:10":true,"3:3":[144,158],"0:4":true,"2:1":[138,142],"14:14":true,"4:3":[144,157],"5:4":[144,157],"2:12":true,"10:9":true,"7:7":true,"5:3":[144,157],"2:15":true,"15:14":true,"9:9":true,"4:4":[144,157],"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"13:1":138,"4:2":[144,158],"0:11":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"5:2":[144,157],"2:14":true,"1:13":true,"0:5":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:0":true,"5:6":true,"4:0":true,"1:15":true,"10:8":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"0:13":true,"11:8":true,"13:6":true,"13:0":138,"13:2":[138,179],"4:1":[139,157],"3:12":true,"0:15":true,"11:9":true,"15:5":true,"14:5":true,"5:1":true,"3:15":true,"0:12":true,"12:9":true,"13:3":true,"11:7":true,"2:5":true,"0:14":true,"13:4":true,"3:14":true,"2:11":true,"15:4":true,"14:3":true,"4:14":true,"1:6":true,"11:10":true,"12:10":true,"5:14":true,"15:3":true,"1:0":[136,157],"14:4":true,"5:12":true,"2:4":true,"14:2":138,"13:11":true,"4:15":true,"0:1":true,"15:2":[138,182],"4:12":true,"3:1":[139,158],"13:5":true,"5:15":true,"2:3":[144,158],"15:0":138,"14:6":true,"1:3":true,"1:4":true,"15:6":true,"14:0":138,"2:0":[140,158],"5:13":true,"1:2":[140,158],"4:13":true,"2:6":true,"15:9":true,"12:11":true,"9:14":true,"11:5":true,"2:7":true,"7:12":true,"12:5":true,"10:14":true,"7:15":true,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"9:15":true,"14:7":true,"9:12":true,"8:1":true,"13:10":true,"10:15":true,"7:14":true,"1:8":true,"7:13":true,"2:8":true,"6:14":true,"1:9":true,"15:8":true,"10:13":true,"6:12":true,"1:7":true,"6:15":true,"9:13":true,"11:0":true,"12:6":true,"8:13":true,"1:10":true,"6:1":140,"11:6":true,"11:4":true,"9:1":138,"8:12":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"8:15":true,"12:2":[168,178],"2:10":true,"11:2":[138,177],"8:14":true,"13:9":true,"7:1":true,"12:1":true,"9:3":140,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":141,"6:6":true,"4:9":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":143,"9:2":139,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"7:3":[142,155],"9:6":true,"6:4":144,"10:6":true,"6:3":[142,156],"5:8":true,"6:2":[141,143],"7:6":true,"4:8":true,"6:5":true,"3:8":true,"0:8":true,"6:11":true,"11:13":true,"8:0":151,"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":140,"0:7":true,"12:15":true,"11:12":true,"8:4":142,"7:5":true,"3:9":true,"12:12":true,"11:15":true,"8:3":141,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json
new file mode 100644
index 00000000..cd9b9487
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-1.json
@@ -0,0 +1 @@
+{"10:3":[164,165],"11:1":164,"13:0":true,"10:2":160,"14:1":true,"13:2":true,"10:0":160,"15:1":true,"11:0":164,"12:0":217,"10:7":[178,179],"15:12":[153,154],"15:2":true,"10:1":160,"11:3":[164,165],"14:0":true,"11:2":165} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json
new file mode 100644
index 00000000..e1b6709c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-2.json
@@ -0,0 +1 @@
+{"11:5":164,"11:11":true,"11:6":164,"3:5":true,"0:5":167,"12:3":149,"11:4":165,"11:3":true,"4:0":true,"12:1":158,"11:1":true,"11:8":true,"11:9":true,"10:6":160,"9:0":true,"11:7":165,"11:10":true,"11:13":true,"10:5":true,"11:14":true,"12:15":216,"11:12":true,"11:15":165} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json
new file mode 100644
index 00000000..65b6d476
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-3.json
@@ -0,0 +1 @@
+{"9:15":true,"13:14":164,"2:15":true,"15:14":196,"15:12":[166,167],"2:14":184,"1:13":184,"1:14":[170,185],"8:15":182,"2:10":183,"1:15":185,"14:13":[165,166],"0:13":185,"9:6":true,"0:15":[170,185],"0:14":[169,185],"14:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json
new file mode 100644
index 00000000..aee1ef41
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-4.json
@@ -0,0 +1 @@
+{"6:10":[204,233],"5:11":204,"7:10":true,"6:12":true,"6:9":204,"14:13":true,"12:1":217,"9:3":205,"7:2":true,"7:4":[212,213],"7:3":[206,214],"13:2":true,"9:0":210,"15:4":true,"14:3":true,"6:11":true,"8:2":212,"8:4":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json
new file mode 100644
index 00000000..50f3e00b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-5.json
@@ -0,0 +1 @@
+{"2:7":true,"6:6":true,"0:6":171,"3:6":true,"10:15":211,"4:5":180,"15:8":true,"1:7":true,"7:6":true,"1:6":170,"6:5":181,"4:6":true,"3:7":true,"11:14":[211,212],"0:7":182,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json
new file mode 100644
index 00000000..6dd850a8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_-6.json
@@ -0,0 +1 @@
+{"12:6":true,"11:6":191,"10:6":192} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json
new file mode 100644
index 00000000..4041bf83
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_0.json
@@ -0,0 +1 @@
+{"14:14":true,"9:14":true,"1:11":true,"3:13":[159,209],"2:12":true,"3:8":true,"13:13":true,"10:14":true,"2:15":true,"1:10":true,"0:13":true,"15:14":true,"11:13":true,"3:5":true,"3:10":true,"6:13":true,"8:0":true,"3:6":true,"3:11":[150,209],"12:13":true,"2:14":true,"1:13":true,"7:14":true,"12:14":true,"3:7":true,"3:12":[150,209],"2:13":true,"1:14":true,"7:13":true,"11:14":true,"3:15":[163,210],"6:14":true,"15:13":true,"13:14":true,"10:13":true,"5:13":true,"3:4":true,"2:10":true,"1:15":true,"0:14":true,"3:9":true,"3:14":true,"1:12":true,"14:13":true,"9:13":true,"4:13":true,"2:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json
new file mode 100644
index 00000000..7d15d4b4
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_1.json
@@ -0,0 +1 @@
+{"6:0":true,"1:1":true,"11:5":true,"10:4":true,"3:13":true,"2:7":true,"12:5":true,"1:5":true,"7:2":true,"11:1":true,"9:4":true,"3:10":true,"7:4":true,"3:0":[160,210],"9:2":true,"13:0":true,"0:0":true,"3:6":[150,205],"1:8":true,"13:2":true,"5:5":true,"3:12":true,"0:2":true,"6:4":true,"2:8":true,"15:5":true,"10:0":true,"14:5":true,"5:1":true,"4:5":true,"3:2":[168,210],"15:1":true,"9:0":true,"7:0":true,"3:4":true,"2:5":true,"13:4":true,"3:14":true,"3:3":[163,210],"1:7":true,"0:4":true,"2:1":true,"15:4":true,"11:0":true,"14:3":true,"1:6":true,"6:5":true,"3:8":true,"2:2":true,"12:0":true,"1:0":true,"14:4":true,"3:5":[159,205],"2:4":true,"8:0":true,"13:1":true,"0:1":true,"15:2":192,"3:11":true,"3:1":[167,210],"13:5":true,"5:2":true,"2:3":true,"0:5":true,"15:0":true,"11:4":true,"10:5":true,"9:1":true,"3:7":[150,205],"1:3":true,"5:0":true,"9:5":true,"12:4":true,"1:4":true,"14:0":true,"4:0":true,"2:0":true,"1:2":true,"7:5":true,"3:9":true,"11:2":true,"7:1":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json
new file mode 100644
index 00000000..1024acf2
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_2.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"2:7":true,"8:8":true,"7:12":true,"6:10":true,"13:13":true,"14:9":true,"11:11":true,"10:12":true,"2:9":true,"15:7":true,"14:7":true,"9:12":true,"13:10":true,"1:8":true,"10:10":true,"8:7":true,"4:11":true,"2:8":true,"9:10":true,"5:11":true,"1:9":true,"15:8":true,"8:9":true,"7:10":true,"6:12":true,"1:7":true,"14:8":true,"14:14":true,"12:6":true,"2:12":true,"10:9":true,"7:7":true,"1:10":true,"13:8":true,"15:14":true,"9:9":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"15:12":true,"14:12":true,"9:7":true,"3:11":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"2:13":true,"15:10":true,"14:10":true,"5:6":true,"13:7":true,"15:13":true,"2:10":true,"10:8":true,"6:7":true,"13:9":true,"9:8":true,"14:13":true,"3:13":true,"5:9":true,"6:6":true,"4:9":true,"5:7":true,"3:10":true,"11:8":true,"13:6":true,"8:11":true,"12:8":true,"14:11":true,"9:6":true,"3:12":true,"11:9":true,"10:6":true,"15:11":true,"12:9":true,"11:7":true,"5:8":true,"12:7":true,"7:6":true,"4:8":true,"2:11":true,"11:10":true,"3:8":true,"12:10":true,"0:8":true,"6:11":true,"11:13":true,"5:12":true,"13:11":true,"8:6":true,"4:12":true,"12:13":true,"14:6":true,"5:10":true,"9:11":true,"3:7":true,"10:11":true,"4:10":true,"15:6":true,"3:9":true,"12:12":true,"0:9":179,"7:11":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json
new file mode 100644
index 00000000..a3278b89
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_3.json
@@ -0,0 +1 @@
+{"15:9":true,"14:9":true,"9:10":true,"4:5":169,"3:2":true,"15:8":[198,199],"3:4":[169,170],"3:3":true,"14:8":[198,199],"2:1":173,"10:9":true,"13:8":199,"4:4":true,"8:10":true,"4:2":true,"5:2":174,"12:3":true,"12:2":true,"11:2":[186,187],"13:9":true,"10:2":186,"4:1":[173,174],"13:3":true,"3:1":173,"10:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json
new file mode 100644
index 00000000..789747c8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_4.json
@@ -0,0 +1 @@
+{"9:3":true,"6:0":true,"1:1":true,"11:5":true,"10:4":true,"10:3":true,"1:5":true,"7:2":true,"6:6":true,"11:1":true,"9:4":true,"8:5":true,"7:4":true,"3:0":true,"9:2":true,"0:6":true,"0:0":true,"8:1":true,"3:6":true,"10:2":true,"7:3":true,"9:6":true,"5:5":true,"4:1":true,"0:2":true,"6:4":true,"5:1":true,"4:5":true,"3:2":true,"9:0":true,"6:3":true,"7:0":true,"3:4":true,"2:5":true,"0:3":true,"3:3":true,"0:4":true,"6:2":true,"7:6":true,"2:1":true,"4:3":true,"1:6":true,"5:4":true,"6:5":true,"5:3":true,"2:2":true,"6:1":true,"1:0":true,"4:4":true,"3:5":true,"2:4":true,"8:0":true,"4:2":true,"0:1":true,"8:6":true,"3:1":true,"5:2":true,"2:3":true,"0:5":true,"11:4":true,"10:5":true,"9:1":true,"4:6":true,"1:3":true,"5:0":true,"10:1":true,"9:5":true,"5:6":true,"11:3":true,"8:2":true,"1:4":true,"4:0":true,"2:0":true,"8:4":true,"1:2":true,"7:5":true,"11:2":true,"8:3":true,"7:1":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json
new file mode 100644
index 00000000..e9b7db0b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_5.json
@@ -0,0 +1 @@
+{"12:1":true,"1:1":true,"11:5":202,"12:5":true,"1:5":true,"11:1":true,"8:5":true,"8:1":true,"10:2":true,"14:1":true,"5:5":true,"4:1":true,"0:2":true,"15:5":true,"14:5":true,"5:1":true,"4:5":true,"15:1":true,"2:5":true,"0:3":true,"0:4":true,"2:1":true,"6:5":true,"6:1":true,"3:5":true,"13:1":true,"0:1":true,"3:1":true,"13:5":true,"0:5":true,"10:5":[198,202],"9:1":true,"10:1":true,"9:5":true,"7:5":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json
new file mode 100644
index 00000000..e47f1f03
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_6.json
@@ -0,0 +1 @@
+{"3:13":[146,147],"0:13":true,"14:1":true,"4:11":true,"3:12":true,"0:15":true,"5:11":[144,145],"0:12":true,"0:14":true,"4:12":[145,146],"2:14":[147,148],"2:13":true,"1:14":true,"1:15":[148,149]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json
new file mode 100644
index 00000000..3154cd03
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_7.json
@@ -0,0 +1 @@
+{"7:15":true,"2:9":158,"0:6":[157,159],"0:0":true,"3:6":true,"7:14":true,"13:15":152,"5:5":true,"0:2":true,"4:5":true,"13:12":true,"6:14":true,"1:9":true,"3:4":149,"0:3":151,"1:7":146,"6:15":true,"5:4":true,"2:12":true,"2:15":true,"1:10":true,"4:4":true,"3:5":true,"15:12":222,"0:11":true,"14:12":true,"2:14":true,"1:13":true,"0:5":157,"4:6":true,"2:13":true,"1:14":true,"5:6":true,"2:10":true,"1:15":true,"1:12":true,"3:13":true,"0:13":true,"6:6":true,"7:4":true,"0:10":true,"7:3":true,"3:12":true,"0:15":[151,159],"6:4":true,"3:15":true,"0:12":true,"2:5":149,"0:14":true,"3:14":true,"6:2":156,"7:6":true,"4:14":true,"1:6":[147,149],"6:5":true,"5:14":true,"0:8":[147,160],"4:15":true,"0:1":true,"8:6":true,"4:12":true,"0:7":[147,159],"5:13":true,"1:2":true,"12:12":true,"0:9":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json
new file mode 100644
index 00000000..575f6f03
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_8.json
@@ -0,0 +1 @@
+{"13:13":[172,173],"3:0":true,"0:6":[149,155],"0:0":[153,159],"14:1":true,"13:15":true,"4:11":true,"0:2":true,"5:11":true,"13:12":172,"3:2":[153,155],"13:14":true,"0:3":true,"0:4":[149,154],"2:1":[153,154],"14:14":174,"4:3":true,"5:4":[152,153],"2:12":true,"5:3":[154,155],"2:15":true,"15:14":157,"15:12":true,"14:15":true,"13:1":154,"4:2":[156,158],"0:11":true,"15:15":[136,175],"2:14":true,"1:13":true,"0:5":[149,154],"1:14":true,"4:0":true,"15:13":true,"1:15":true,"10:8":166,"1:12":true,"1:11":true,"3:13":true,"0:13":true,"13:6":157,"13:0":true,"12:8":153,"13:2":true,"4:1":true,"3:12":true,"0:15":true,"11:9":167,"14:5":157,"3:15":true,"0:12":true,"12:9":[168,169],"0:14":true,"13:4":157,"12:7":[154,156],"3:14":true,"2:11":true,"15:4":154,"14:3":155,"4:14":true,"11:10":167,"12:10":[169,170],"5:14":true,"15:3":153,"1:0":153,"5:12":true,"14:2":155,"13:11":[153,171],"4:15":true,"0:1":[154,156],"4:12":true,"3:1":[155,158],"13:5":157,"5:15":true,"15:0":true,"14:6":157,"15:6":157,"2:0":true,"5:13":true,"4:13":true,"15:9":true,"12:11":[153,170],"9:14":true,"11:5":156,"12:5":157,"10:14":true,"7:15":true,"14:9":157,"11:11":[151,152],"10:12":[149,153],"6:13":true,"15:7":157,"9:15":true,"14:7":157,"9:12":true,"8:1":true,"13:10":152,"10:15":true,"7:14":true,"7:13":true,"6:14":true,"15:8":157,"10:13":true,"6:12":true,"6:15":true,"14:8":157,"9:13":true,"12:6":157,"8:13":true,"1:10":true,"13:8":[154,156],"6:1":true,"11:6":[153,156],"12:3":true,"11:4":157,"9:1":true,"8:12":true,"15:10":true,"14:10":[153,156],"13:7":157,"12:4":157,"11:3":true,"8:15":true,"11:2":true,"8:14":true,"13:9":[153,156],"7:1":true,"9:3":true,"6:0":true,"10:4":157,"10:3":true,"9:4":156,"8:5":true,"7:4":[153,156],"9:2":true,"10:2":true,"0:10":[149,182],"7:3":true,"6:4":[152,155],"10:6":[153,154],"6:3":156,"7:0":true,"0:8":[149,157],"6:11":true,"11:13":155,"8:0":true,"12:13":155,"12:14":true,"10:5":[155,156],"5:10":183,"9:5":true,"11:14":true,"0:7":[148,155],"12:15":true,"11:12":[150,154],"8:4":[155,157],"7:5":true,"12:12":154,"11:15":true,"8:3":158,"0:9":[151,157]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json
new file mode 100644
index 00000000..9990588f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-8_9.json
@@ -0,0 +1 @@
+{"1:1":true,"13:13":true,"3:0":true,"0:6":[171,173],"0:0":true,"3:6":174,"14:1":true,"10:10":[152,154],"8:7":true,"5:5":177,"0:2":true,"9:10":154,"4:5":176,"13:12":true,"3:2":true,"15:1":true,"3:4":true,"0:3":true,"8:9":154,"7:10":156,"3:3":true,"0:4":true,"2:1":true,"14:14":true,"4:3":true,"5:4":true,"10:9":152,"7:7":true,"5:3":true,"15:14":true,"9:9":153,"4:4":true,"10:7":true,"8:10":155,"7:9":155,"3:5":175,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"15:15":true,"14:12":true,"9:7":true,"5:2":true,"0:5":[171,175],"7:8":154,"4:6":175,"5:0":true,"5:6":176,"4:0":true,"15:13":true,"10:8":true,"6:7":[175,176],"14:13":true,"1:5":[170,173],"11:8":true,"13:6":true,"13:0":true,"12:8":true,"14:11":true,"13:2":true,"4:1":true,"11:9":[137,142],"15:5":true,"14:5":true,"5:1":true,"15:11":true,"12:9":true,"13:3":true,"11:7":true,"2:5":174,"13:4":true,"12:7":true,"15:4":true,"14:3":true,"11:10":true,"12:10":true,"2:2":true,"15:3":true,"1:0":true,"14:4":true,"2:4":true,"14:2":true,"13:11":true,"0:1":true,"15:2":true,"3:1":true,"13:5":true,"2:3":true,"15:0":true,"14:6":true,"1:3":true,"1:4":true,"15:6":true,"14:0":true,"2:0":true,"1:2":true,"2:6":173,"15:9":true,"12:11":true,"9:14":true,"11:5":true,"7:12":true,"12:5":true,"10:14":true,"14:9":true,"11:11":true,"10:12":true,"15:7":true,"14:7":true,"9:12":true,"8:1":true,"13:10":true,"10:15":true,"7:13":155,"15:8":true,"10:13":true,"14:8":true,"9:13":true,"11:0":true,"12:6":true,"8:13":true,"13:8":true,"12:0":true,"6:1":true,"11:6":true,"12:3":true,"11:4":true,"9:1":true,"8:12":true,"15:10":true,"14:10":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"12:2":true,"11:2":true,"13:9":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"10:3":true,"7:2":true,"6:6":177,"11:1":true,"9:4":true,"8:5":true,"5:7":[174,175],"7:4":true,"9:2":true,"8:11":true,"4:7":[173,174],"10:2":true,"7:3":true,"9:6":true,"6:4":true,"10:0":true,"10:6":true,"9:0":true,"6:3":true,"7:0":true,"6:2":true,"7:6":true,"6:5":true,"11:13":true,"8:0":true,"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"3:7":173,"10:11":true,"9:5":true,"11:14":true,"8:2":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"12:12":true,"11:15":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json
new file mode 100644
index 00000000..d31fa63e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-1.json
@@ -0,0 +1 @@
+{"11:5":true,"8:5":true,"0:6":197,"7:14":[165,168],"10:6":true,"6:14":[166,167],"11:6":true,"10:7":true,"9:7":true,"5:15":166,"0:5":196,"8:14":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json
new file mode 100644
index 00000000..aca1f76c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-2.json
@@ -0,0 +1 @@
+{"0:6":true,"0:0":[168,212],"14:1":[169,170],"0:2":true,"3:4":true,"5:3":true,"13:1":169,"10:1":211,"10:3":211,"13:0":168,"10:2":211,"13:2":true,"15:5":true,"2:5":true,"14:3":168,"1:0":168,"14:2":169,"0:1":[167,216],"15:0":[169,170],"15:6":true,"14:0":168,"1:2":216} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json
new file mode 100644
index 00000000..9a2f6ba9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-3.json
@@ -0,0 +1 @@
+{"12:5":true,"10:12":true,"10:13":true,"12:6":true,"15:14":185,"14:15":168,"15:15":169,"3:11":169,"12:4":210,"13:6":201,"13:2":211,"15:5":201,"14:5":201,"13:3":[210,211],"11:7":208,"13:4":[201,211],"12:7":201,"14:3":201,"14:4":true,"14:2":212,"13:5":201,"14:6":201,"10:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json
new file mode 100644
index 00000000..3994b683
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-4.json
@@ -0,0 +1 @@
+{"7:7":true,"5:9":true,"10:3":true,"0:13":true,"6:6":true,"4:9":true,"6:8":true,"5:7":true,"5:12":true,"7:8":true,"5:10":true,"1:3":true,"0:2":true,"5:11":true,"1:4":true,"0:12":true,"0:14":true,"1:2":true,"6:7":true,"5:8":true,"0:4":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json
new file mode 100644
index 00000000..8cf4d4b1
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-5.json
@@ -0,0 +1 @@
+{"8:8":true,"6:6":true,"5:7":true,"0:0":188,"12:8":[172,173],"0:2":true,"10:10":[222,223],"14:5":[200,201],"9:10":224,"8:9":true,"5:8":true,"2:11":true,"15:4":[201,202],"2:12":true,"10:9":223,"7:7":true,"2:15":true,"9:9":true,"14:4":200,"8:10":true,"7:9":true,"6:8":true,"0:1":true,"2:14":true,"14:6":[200,201],"9:11":224,"7:8":true,"2:13":true,"10:11":223,"5:6":true,"13:7":172,"6:7":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json
new file mode 100644
index 00000000..69ff3534
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_-6.json
@@ -0,0 +1 @@
+{"7:12":true,"0:2":201,"3:4":true,"0:3":[201,216],"6:12":true,"3:14":226,"7:6":true,"4:14":226,"5:14":true,"4:4":true,"2:4":true,"2:3":201,"1:3":201,"1:4":true,"5:13":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json
new file mode 100644
index 00000000..5d27980e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_0.json
@@ -0,0 +1 @@
+{"12:1":true,"9:14":true,"8:13":true,"3:13":true,"0:13":true,"13:13":true,"10:14":true,"5:14":true,"12:0":true,"14:4":true,"11:1":true,"11:13":true,"6:13":true,"1:13":true,"7:14":true,"12:3":true,"7:13":true,"6:14":true,"15:13":true,"0:14":true,"12:2":true,"10:13":true,"5:13":true,"13:4":true,"11:2":true,"8:14":true,"9:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json
new file mode 100644
index 00000000..f2607f0a
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_2.json
@@ -0,0 +1 @@
+{"11:0":true,"15:9":true,"12:1":true,"12:11":true,"6:10":true,"13:13":[177,179],"12:10":true,"14:9":true,"12:0":true,"6:11":true,"11:1":true,"13:10":true,"12:8":true,"15:8":true,"12:2":true,"13:9":true,"14:8":true,"14:13":178} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json
new file mode 100644
index 00000000..1ccf4ded
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_3.json
@@ -0,0 +1 @@
+{"10:7":true,"9:7":true,"10:6":true,"10:8":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json
new file mode 100644
index 00000000..4471b7ad
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_4.json
@@ -0,0 +1 @@
+{"12:1":true,"9:3":true,"11:5":true,"10:4":true,"12:5":true,"10:3":true,"7:2":true,"11:1":true,"9:4":true,"8:5":true,"7:4":true,"13:6":true,"9:2":true,"13:0":true,"8:1":true,"10:2":true,"7:3":true,"14:1":true,"13:2":true,"9:6":true,"5:5":true,"6:4":true,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"5:1":true,"15:1":true,"9:0":true,"6:3":true,"7:0":true,"0:3":true,"13:3":true,"13:4":true,"6:2":true,"7:6":true,"15:4":true,"11:0":true,"14:3":true,"12:6":true,"5:4":true,"6:5":true,"5:3":true,"15:3":true,"12:0":true,"6:1":true,"14:4":true,"11:6":true,"8:0":true,"14:2":true,"13:1":true,"0:1":[174,175],"15:2":true,"8:6":true,"13:5":true,"5:2":true,"0:5":[174,175],"15:0":true,"14:6":true,"12:3":true,"11:4":true,"10:5":true,"9:1":true,"10:1":true,"9:5":true,"12:4":true,"11:3":true,"8:2":true,"15:6":true,"14:0":true,"12:2":true,"8:4":true,"7:5":true,"11:2":true,"8:3":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json
new file mode 100644
index 00000000..771280f8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_7.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"6:10":true,"13:13":true,"3:0":true,"0:6":true,"0:0":true,"3:6":true,"14:1":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"15:1":true,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"3:3":true,"0:4":true,"2:1":true,"4:3":true,"5:4":true,"2:12":[152,154],"10:9":true,"7:7":true,"5:3":true,"15:14":[154,155],"9:9":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"13:1":true,"4:2":true,"0:11":true,"14:12":true,"9:7":true,"3:11":[154,173],"5:2":true,"1:13":true,"0:5":true,"2:13":[149,151],"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:0":true,"5:6":true,"4:0":true,"15:13":true,"1:15":true,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"0:13":true,"11:8":true,"13:6":true,"13:0":true,"12:8":true,"14:11":true,"13:2":true,"4:1":true,"3:12":[150,175],"0:15":true,"11:9":true,"14:5":true,"5:1":true,"3:15":true,"0:12":true,"15:11":true,"12:9":true,"13:3":true,"11:7":true,"2:5":true,"0:14":true,"13:4":true,"12:7":true,"3:14":[164,175],"2:11":155,"15:4":true,"14:3":true,"1:6":true,"11:10":true,"12:10":true,"2:2":true,"15:3":true,"1:0":true,"14:4":true,"5:12":[147,152],"2:4":true,"14:2":true,"13:11":true,"0:1":true,"15:2":true,"4:12":[148,152],"3:1":true,"13:5":true,"2:3":true,"15:0":true,"14:6":true,"1:3":true,"1:4":true,"15:6":150,"14:0":true,"2:0":true,"5:13":147,"1:2":true,"2:6":true,"15:9":true,"12:11":true,"9:14":152,"11:5":true,"2:7":true,"7:12":true,"12:5":true,"10:14":151,"7:15":[149,151],"14:9":true,"11:11":true,"10:12":151,"6:13":[148,149],"2:9":true,"15:7":[148,157],"9:15":152,"14:7":true,"9:12":151,"8:1":true,"13:10":true,"10:15":152,"7:14":[148,151],"1:8":true,"7:13":true,"2:8":true,"6:14":[146,147],"1:9":[155,202],"15:8":true,"10:13":151,"6:12":true,"1:7":true,"6:15":[146,148],"14:8":true,"9:13":true,"12:6":true,"8:13":true,"1:10":true,"13:8":true,"6:1":true,"11:6":true,"12:3":true,"11:4":true,"8:12":true,"15:10":true,"14:10":true,"13:7":true,"12:4":true,"11:3":true,"8:15":152,"12:2":true,"2:10":[155,192],"11:2":true,"8:14":152,"13:9":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"4:9":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"7:3":true,"9:6":true,"10:6":true,"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"4:8":true,"3:8":true,"0:8":[156,202],"6:11":true,"11:13":[149,150],"8:6":true,"12:13":[147,148],"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"0:7":true,"11:12":150,"8:4":true,"7:5":true,"3:9":true,"12:12":true,"11:15":true,"8:3":true,"0:9":[156,194],"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json
new file mode 100644
index 00000000..d412a806
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_8.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"6:10":true,"13:13":true,"3:0":true,"0:6":true,"0:0":true,"3:6":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"3:3":true,"0:4":true,"2:1":true,"14:14":true,"4:3":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"15:14":true,"9:9":true,"4:4":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"4:2":true,"0:11":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"5:2":true,"2:14":true,"1:13":true,"0:5":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:0":true,"5:6":true,"15:13":true,"1:15":true,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"0:13":true,"11:8":true,"13:6":155,"12:8":true,"14:11":true,"4:1":true,"3:12":true,"0:15":true,"11:9":true,"14:5":[151,152],"5:1":true,"3:15":true,"0:12":true,"15:11":true,"12:9":true,"13:3":[152,153],"11:7":true,"2:5":true,"0:14":true,"13:4":[149,153],"12:7":true,"2:11":true,"4:14":true,"1:6":true,"11:10":true,"12:10":true,"5:14":true,"2:2":true,"1:0":true,"5:12":true,"2:4":true,"13:11":true,"4:15":true,"0:1":true,"4:12":true,"3:1":true,"13:5":[147,154],"5:15":true,"2:3":true,"14:6":[148,154],"1:3":true,"1:4":true,"2:0":true,"5:13":true,"4:13":true,"2:6":true,"15:9":true,"12:11":true,"9:14":true,"2:7":true,"7:12":true,"12:5":155,"10:14":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"2:9":true,"15:7":[150,154],"9:15":true,"14:7":[148,155],"9:12":true,"8:1":152,"13:10":true,"10:15":true,"7:14":true,"1:8":true,"7:13":true,"2:8":true,"6:14":true,"1:9":true,"15:8":[150,155],"10:13":true,"6:12":true,"1:7":true,"6:15":true,"14:8":true,"9:13":true,"11:0":[146,151],"12:6":true,"8:13":true,"1:10":true,"6:1":true,"11:6":true,"11:4":154,"9:1":153,"8:12":true,"12:3":[147,154],"15:10":true,"14:10":true,"10:1":153,"12:4":[146,154],"11:3":[146,154],"8:15":true,"12:2":[149,153],"2:10":true,"11:2":[147,153],"8:14":true,"13:9":true,"7:1":152,"9:3":true,"6:0":[148,151],"10:4":true,"5:9":true,"10:3":154,"7:2":true,"6:6":true,"4:9":true,"11:1":[148,152],"9:4":true,"5:7":true,"3:10":true,"7:4":true,"9:2":153,"8:11":true,"4:7":true,"10:2":153,"0:10":true,"7:3":true,"9:6":true,"6:4":true,"10:0":152,"10:6":true,"9:0":152,"6:3":true,"7:0":152,"5:8":true,"6:2":true,"7:6":true,"4:8":true,"3:8":true,"0:8":true,"6:11":true,"11:13":true,"8:0":152,"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"0:7":true,"12:15":true,"11:12":true,"8:4":true,"3:9":true,"12:12":true,"11:15":true,"8:3":true,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json
new file mode 100644
index 00000000..27bc3ed4
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/-9_9.json
@@ -0,0 +1 @@
+{"12:1":true,"9:3":true,"11:5":true,"10:4":true,"12:5":true,"10:3":true,"7:2":true,"11:1":true,"7:4":149,"9:2":true,"13:0":true,"0:0":true,"8:1":true,"10:2":true,"7:3":true,"14:1":true,"13:2":true,"4:1":true,"15:5":true,"10:0":true,"14:5":true,"5:1":true,"3:2":true,"15:1":true,"9:0":true,"6:3":true,"7:0":true,"13:3":true,"13:4":true,"6:2":true,"2:1":true,"15:4":true,"11:0":true,"14:3":true,"12:6":153,"5:3":true,"15:3":true,"12:0":true,"6:1":true,"1:0":true,"14:4":true,"8:0":true,"14:2":true,"13:1":true,"4:2":true,"15:2":true,"3:1":true,"13:5":true,"5:2":true,"15:0":true,"12:3":true,"11:4":true,"10:5":[151,152],"9:1":true,"10:1":true,"12:4":true,"11:3":true,"8:2":true,"14:0":true,"4:0":true,"2:0":true,"12:2":true,"8:4":[150,151],"11:2":true,"8:3":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json
new file mode 100644
index 00000000..a30cb4a9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_0.json
@@ -0,0 +1 @@
+{"6:0":true,"1:1":true,"2:7":true,"1:5":true,"7:2":true,"3:0":true,"0:6":true,"0:0":true,"13:0":true,"8:1":true,"3:6":true,"7:3":true,"5:5":true,"4:1":true,"0:2":true,"6:4":true,"10:0":true,"5:1":true,"4:5":true,"3:2":true,"9:0":true,"6:3":true,"7:0":true,"3:4":true,"2:5":true,"0:3":true,"3:3":true,"1:7":true,"0:4":true,"6:2":true,"2:1":true,"11:0":true,"4:3":true,"1:6":true,"5:4":true,"5:3":true,"2:2":true,"12:0":true,"6:1":true,"1:0":true,"4:4":true,"3:5":true,"2:4":true,"8:0":true,"14:15":true,"4:2":true,"0:1":true,"15:15":[146,233],"3:1":true,"5:2":true,"2:3":true,"0:5":true,"15:0":true,"9:1":true,"4:6":true,"3:7":true,"1:3":true,"5:0":true,"8:2":true,"1:4":true,"0:7":true,"14:0":true,"4:0":true,"2:0":true,"1:2":true,"7:1":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json
new file mode 100644
index 00000000..27c8872f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_10.json
@@ -0,0 +1 @@
+{"9:3":127,"6:0":true,"1:11":true,"11:5":true,"3:13":true,"12:5":[205,207],"0:13":true,"6:6":true,"11:1":127,"5:7":true,"15:7":true,"3:0":true,"10:2":true,"4:1":127,"3:12":true,"0:2":127,"3:2":true,"0:12":true,"0:3":127,"0:14":true,"0:4":127,"4:8":true,"2:1":127,"12:6":202,"2:2":127,"12:0":127,"11:6":202,"4:12":[113,114],"3:1":127,"13:5":127,"2:3":127,"1:13":true,"0:5":127,"14:6":true,"11:4":true,"2:13":true,"1:3":127,"5:0":true,"12:4":[127,208],"11:3":127,"1:4":127,"4:0":true,"2:0":true,"8:4":true,"2:10":true,"1:2":127,"7:5":true,"3:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json
new file mode 100644
index 00000000..c490d54b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_3.json
@@ -0,0 +1 @@
+{"9:14":true,"2:15":true,"0:13":true,"10:12":true,"9:15":true,"9:12":true,"10:15":true,"12:13":true,"12:14":true,"1:14":true,"0:15":true,"12:15":true,"11:12":true,"1:15":true,"0:14":true,"11:15":true,"12:12":true,"9:8":true,"9:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json
new file mode 100644
index 00000000..519dafcc
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_7.json
@@ -0,0 +1 @@
+{"7:12":true,"6:10":true,"0:13":127,"7:15":true,"6:13":true,"7:14":true,"0:15":true,"7:13":true,"10:0":true,"9:0":true,"6:14":true,"0:14":true,"7:10":true,"6:12":true,"6:15":true,"11:0":true,"2:15":127,"12:0":true,"6:11":true,"7:9":true,"0:1":true,"7:8":[117,120],"6:9":true,"1:14":127,"1:15":127,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json
new file mode 100644
index 00000000..83229162
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_8.json
@@ -0,0 +1 @@
+{"15:9":true,"1:11":true,"1:1":true,"3:13":true,"13:13":true,"0:13":true,"6:13":true,"3:0":127,"4:11":true,"0:15":true,"0:2":true,"7:13":true,"3:15":true,"0:12":true,"15:11":true,"7:0":true,"10:13":true,"0:14":true,"0:3":true,"9:13":true,"2:11":true,"2:1":127,"8:13":true,"2:15":true,"0:8":true,"1:0":127,"11:13":true,"4:15":true,"0:11":true,"0:1":true,"15:15":true,"3:11":true,"12:13":true,"1:13":true,"2:13":true,"15:10":true,"15:13":true,"2:0":127,"5:13":true,"1:15":true,"1:2":true,"14:13":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json
new file mode 100644
index 00000000..7dfe7b5f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/0_9.json
@@ -0,0 +1 @@
+{"15:9":127,"6:10":127,"10:14":127,"7:15":[115,116],"6:13":117,"9:15":116,"7:14":117,"15:1":true,"6:14":true,"6:12":117,"0:4":true,"6:15":116,"9:13":true,"2:15":true,"0:11":127,"2:14":true,"1:13":true,"8:12":127,"2:13":true,"1:14":true,"14:10":true,"8:15":[115,117],"1:12":127,"5:9":127,"1:5":true,"0:13":true,"14:11":true,"3:15":true,"0:12":127,"0:14":true,"3:14":true,"4:8":127,"11:13":127,"5:12":117,"13:11":true,"4:15":true,"5:15":true,"15:0":true,"3:7":true,"5:13":117,"12:12":true,"11:15":true,"7:11":127,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json
new file mode 100644
index 00000000..e31b7d9f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_1.json
@@ -0,0 +1 @@
+{"15:9":true,"9:14":true,"11:5":[167,169],"2:7":true,"8:8":true,"7:12":true,"6:10":true,"12:5":[167,171],"10:14":true,"7:15":true,"14:9":true,"10:12":true,"6:13":true,"2:9":true,"15:7":167,"9:15":true,"0:6":[151,154],"14:7":168,"9:12":true,"10:15":true,"7:14":true,"1:8":true,"4:11":true,"7:13":true,"2:8":true,"9:10":true,"5:11":true,"6:14":true,"1:9":true,"15:8":true,"10:13":true,"8:9":true,"7:10":true,"6:12":true,"1:7":true,"0:4":[156,157],"6:15":true,"14:8":true,"9:13":true,"2:1":true,"12:6":true,"8:13":true,"2:12":true,"10:9":true,"7:7":true,"2:15":true,"1:10":true,"13:8":true,"9:9":true,"11:6":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"0:11":true,"9:7":true,"3:11":true,"2:14":true,"1:13":true,"0:5":[154,190],"11:4":170,"8:12":true,"7:8":true,"6:9":true,"2:13":true,"1:14":true,"15:10":true,"13:7":true,"8:15":true,"2:10":true,"1:15":true,"10:8":true,"6:7":true,"8:14":true,"1:12":true,"13:9":true,"9:8":true,"1:11":true,"3:13":true,"5:9":true,"1:5":[151,189],"0:13":true,"4:9":true,"5:7":true,"3:10":true,"11:8":true,"13:6":170,"8:11":true,"4:7":true,"0:10":true,"12:8":true,"9:6":true,"3:12":true,"0:15":true,"11:9":true,"15:5":168,"14:5":169,"10:6":true,"3:15":true,"0:12":true,"11:7":true,"2:5":[151,226],"0:14":true,"5:8":true,"13:4":[166,167],"12:7":true,"3:14":true,"4:8":true,"2:11":true,"15:4":[164,165],"4:14":true,"1:6":150,"3:8":true,"5:14":true,"2:2":[187,221],"0:8":154,"6:11":true,"14:4":[165,169],"5:12":true,"2:4":[152,222],"4:15":true,"8:6":true,"4:12":true,"13:5":[167,170],"5:15":true,"2:3":[187,222],"14:6":169,"10:5":[168,170],"9:11":true,"5:10":true,"3:7":true,"1:3":156,"9:5":true,"4:10":true,"11:14":true,"1:4":[154,155],"0:7":[151,154],"15:6":168,"12:15":true,"5:13":true,"3:9":true,"11:15":true,"0:9":true,"7:11":true,"4:13":true,"2:6":[192,223]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json
new file mode 100644
index 00000000..9c96f830
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_3.json
@@ -0,0 +1 @@
+{"8:8":true,"6:10":true,"13:13":true,"0:6":true,"3:6":true,"14:1":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"15:1":true,"13:14":[161,163],"3:4":true,"0:3":true,"8:9":true,"7:10":true,"3:3":true,"0:4":true,"2:1":true,"14:14":true,"4:3":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"15:14":true,"9:9":true,"4:4":true,"10:7":true,"3:5":true,"15:12":true,"14:15":160,"13:1":true,"0:11":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:6":true,"15:13":true,"1:15":true,"10:8":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"0:13":true,"11:8":true,"13:6":true,"13:0":true,"12:8":true,"14:11":true,"13:2":true,"3:12":true,"0:15":true,"11:9":true,"14:5":true,"3:15":true,"0:12":true,"15:11":true,"12:9":true,"13:3":true,"11:7":true,"2:5":true,"0:14":true,"13:4":true,"12:7":true,"2:11":true,"14:3":true,"1:6":true,"11:10":true,"12:10":true,"2:2":true,"15:3":true,"14:4":true,"2:4":true,"14:2":true,"13:11":true,"4:15":true,"15:2":true,"4:12":true,"13:5":true,"5:15":true,"2:3":true,"15:0":true,"14:6":true,"1:4":true,"15:6":true,"14:0":true,"5:13":153,"4:13":true,"2:6":true,"15:9":true,"12:11":true,"2:7":true,"7:12":[149,150],"12:5":true,"14:9":true,"11:11":true,"10:12":true,"2:9":true,"15:7":true,"14:7":true,"9:12":[150,151],"13:10":true,"1:8":true,"2:8":true,"1:9":true,"15:8":true,"6:12":[148,149],"1:7":true,"14:8":true,"11:0":true,"1:10":true,"13:8":true,"12:0":true,"11:4":true,"9:1":true,"8:12":[149,151],"12:3":true,"15:10":true,"14:10":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"12:2":true,"2:10":true,"11:2":true,"13:9":true,"12:1":true,"5:9":true,"10:3":true,"6:6":true,"4:9":true,"11:1":true,"8:5":true,"3:10":true,"7:4":true,"9:2":true,"8:11":148,"10:2":true,"0:10":true,"9:6":true,"6:4":true,"10:0":true,"10:6":true,"9:0":true,"6:3":true,"5:8":true,"7:6":true,"4:8":true,"6:5":true,"3:8":true,"0:8":true,"6:11":147,"11:13":[161,163],"8:0":true,"8:6":true,"12:13":true,"12:14":[161,162],"9:11":true,"5:10":true,"10:11":true,"4:10":true,"0:7":true,"11:12":true,"7:5":true,"3:9":true,"12:12":true,"0:9":true,"7:11":[147,148]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json
new file mode 100644
index 00000000..d59a6e28
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_4.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"10:14":true,"0:13":true,"10:12":156,"6:13":true,"3:0":true,"9:15":true,"0:0":true,"13:10":true,"7:14":true,"0:15":true,"7:13":true,"3:15":true,"6:14":true,"10:13":true,"0:14":true,"3:14":true,"6:15":true,"9:13":true,"4:14":true,"8:13":true,"5:14":true,"2:15":true,"1:0":true,"11:13":true,"13:11":true,"4:15":true,"0:1":true,"5:15":true,"2:14":true,"1:13":true,"15:0":true,"2:13":true,"1:14":true,"5:0":true,"14:0":160,"4:0":true,"2:0":true,"11:12":true,"5:13":true,"1:15":true,"12:12":true,"8:14":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json
new file mode 100644
index 00000000..44c446c1
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/10_5.json
@@ -0,0 +1 @@
+{"1:1":true,"1:11":[170,189],"10:4":156,"2:7":true,"1:5":true,"0:13":[161,170],"4:9":[158,160],"3:10":[158,161],"2:9":true,"3:0":true,"0:6":true,"0:0":true,"0:10":true,"13:2":154,"3:12":true,"0:2":true,"0:15":true,"2:8":true,"0:12":[170,171],"15:1":true,"2:5":true,"0:3":true,"0:14":true,"5:8":158,"2:1":true,"2:11":[158,226],"2:12":[159,222],"7:7":[156,158],"2:2":true,"2:15":true,"0:8":true,"1:0":true,"6:8":[156,158],"2:4":true,"14:2":153,"0:1":true,"0:11":[171,190],"8:6":[156,158],"3:1":true,"2:14":true,"2:3":true,"1:13":true,"0:5":true,"2:13":true,"1:14":true,"5:0":true,"11:3":155,"1:4":true,"4:0":true,"2:0":true,"2:10":[192,223],"1:2":true,"1:15":true,"1:12":[160,169],"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json
new file mode 100644
index 00000000..0540c5c2
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/11_1.json
@@ -0,0 +1 @@
+{"4:14":true,"1:11":true,"1:6":true,"3:13":true,"2:7":[162,166],"6:10":true,"5:9":158,"3:8":161,"5:14":true,"1:10":true,"1:5":true,"0:8":[166,167],"4:9":true,"5:12":true,"3:10":163,"6:13":true,"2:9":[164,166],"4:15":true,"0:6":167,"4:7":true,"4:12":[162,164],"3:6":true,"3:11":167,"1:8":true,"5:10":[157,161],"4:11":[162,163],"3:7":true,"3:12":165,"2:8":165,"5:11":true,"4:10":[162,164],"3:15":true,"1:4":true,"0:7":167,"1:9":166,"5:13":true,"2:10":true,"6:12":true,"3:9":[163,164],"1:12":true,"1:7":166,"0:4":true,"0:9":true,"4:8":true,"4:13":true,"2:6":162} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json
new file mode 100644
index 00000000..ccf6e685
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/11_3.json
@@ -0,0 +1 @@
+{"1:11":true,"0:13":true,"6:6":true,"4:9":true,"5:7":true,"3:10":true,"2:9":true,"0:0":true,"4:7":true,"3:6":true,"0:10":true,"1:8":true,"5:5":true,"4:1":true,"0:15":true,"6:4":true,"2:8":true,"5:1":true,"4:5":true,"0:12":true,"6:3":true,"1:9":true,"0:14":true,"7:6":true,"4:8":true,"2:11":true,"4:3":true,"5:4":true,"7:7":true,"6:5":true,"3:8":true,"5:3":true,"1:10":true,"0:8":true,"6:1":[156,158],"4:4":true,"6:8":true,"4:2":true,"0:11":true,"3:1":true,"5:2":true,"4:6":true,"3:7":true,"5:0":[155,164],"5:6":true,"0:7":true,"4:0":166,"2:10":true,"6:7":true,"3:9":true,"1:12":true,"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json
new file mode 100644
index 00000000..b1c880dc
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/11_4.json
@@ -0,0 +1 @@
+{"2:15":true,"1:5":true,"4:9":true,"5:7":true,"0:1":true,"0:0":true,"0:5":true,"1:3":true,"0:2":true,"5:6":true,"1:4":true,"1:2":true,"0:3":true,"5:8":true,"4:8":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json
new file mode 100644
index 00000000..07c13c50
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-1.json
@@ -0,0 +1 @@
+{"7:12":196,"13:13":198,"7:15":[189,196],"10:12":199,"6:13":true,"9:15":[188,198],"9:12":198,"8:1":true,"10:15":[187,199],"14:1":[200,201],"13:15":198,"7:13":[189,196],"13:12":[198,202],"13:14":true,"10:13":[187,199],"8:9":173,"6:12":true,"6:15":true,"9:13":[188,198],"14:14":true,"8:13":[189,197],"2:12":true,"2:15":true,"15:14":196,"8:10":[172,174],"7:9":true,"15:12":[196,201],"14:15":true,"15:15":196,"14:12":[197,201],"1:13":true,"9:1":233,"8:12":197,"2:13":true,"8:15":[189,197],"15:13":196,"1:15":true,"1:12":true,"14:13":197,"9:3":147,"10:4":148,"3:13":true,"0:13":true,"8:5":true,"11:8":167,"13:0":153,"13:2":152,"3:12":true,"0:15":true,"3:15":true,"0:12":true,"13:3":157,"11:7":167,"12:7":166,"11:13":[186,199],"5:12":true,"4:15":true,"15:2":200,"4:12":true,"12:13":[185,199],"5:15":true,"11:14":226,"8:2":true,"14:0":198,"12:15":true,"11:12":true,"8:4":true,"5:13":true,"12:12":true,"11:15":true,"8:3":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json
new file mode 100644
index 00000000..f84a02d8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-2.json
@@ -0,0 +1 @@
+{"3:0":true,"0:0":true,"8:1":234,"0:2":true,"3:3":true,"0:4":true,"4:3":true,"5:3":[177,178],"3:5":true,"9:7":192,"0:5":true,"5:0":true,"6:7":233,"9:8":[191,192],"1:5":true,"7:4":174,"4:7":true,"7:0":[195,223],"2:5":true,"4:8":true,"1:0":true,"1:3":true,"8:4":true,"3:9":true,"11:15":224} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json
new file mode 100644
index 00000000..2585400c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_-3.json
@@ -0,0 +1 @@
+{"9:14":[179,221],"1:1":true,"11:5":true,"2:7":true,"8:8":true,"6:10":true,"12:5":true,"10:14":[179,222],"2:9":true,"3:0":true,"0:6":true,"0:0":true,"8:1":true,"3:6":true,"7:14":true,"1:8":true,"14:1":true,"8:7":true,"5:5":true,"2:8":true,"4:5":true,"3:2":true,"15:1":true,"1:9":true,"13:14":true,"3:4":true,"8:9":true,"3:3":true,"1:7":true,"2:1":true,"11:0":true,"14:14":true,"12:6":true,"4:3":true,"7:7":true,"15:14":true,"12:0":true,"6:1":true,"11:6":true,"8:10":true,"6:8":true,"3:5":true,"13:1":true,"0:11":true,"5:2":true,"0:5":true,"12:3":true,"11:4":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:6":true,"12:4":true,"11:3":true,"12:2":true,"2:10":true,"6:7":true,"11:2":true,"8:14":[179,220],"1:12":true,"7:1":true,"12:1":true,"6:0":true,"5:9":true,"1:5":true,"7:2":true,"6:6":true,"4:9":true,"11:1":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"13:6":true,"13:0":true,"8:11":true,"4:7":true,"0:10":true,"7:3":true,"13:2":true,"6:4":true,"15:5":true,"14:5":true,"0:12":true,"6:3":true,"7:0":true,"13:3":true,"2:5":true,"0:14":true,"5:8":true,"13:4":true,"6:2":true,"7:6":true,"4:8":true,"15:4":true,"14:3":true,"1:6":true,"6:5":true,"3:8":true,"2:2":true,"0:8":true,"15:3":true,"1:0":true,"14:4":true,"2:4":true,"8:0":true,"14:2":true,"15:2":true,"8:6":true,"3:1":true,"13:5":true,"2:3":true,"15:0":true,"14:6":true,"12:14":[184,224],"5:10":true,"3:7":true,"1:3":true,"4:10":true,"11:14":[184,223],"8:2":true,"1:4":true,"0:7":true,"15:6":true,"14:0":true,"2:0":true,"8:4":true,"1:2":true,"7:5":true,"3:9":true,"8:3":true,"0:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json
new file mode 100644
index 00000000..e9baac3c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_0.json
@@ -0,0 +1 @@
+{"3:0":true,"0:0":true,"13:10":214,"4:11":[146,151],"5:11":150,"11:0":[199,226],"12:0":[199,226],"3:11":145,"2:14":148,"1:13":145,"2:13":[145,149],"9:1":[174,175],"1:14":148,"15:10":213,"5:0":true,"14:10":[213,214],"4:0":true,"1:15":147,"6:0":true,"3:13":[149,150],"4:9":146,"3:10":145,"13:0":[198,226],"10:2":173,"3:12":145,"0:15":147,"10:0":[175,200],"9:0":[175,199],"7:0":[196,197],"1:0":true,"8:0":[197,198],"4:12":[146,150],"15:0":[196,202],"5:10":[147,152],"4:10":[146,147],"8:2":143,"14:0":true,"2:0":true,"4:13":149} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json
new file mode 100644
index 00000000..1c619aa1
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_10.json
@@ -0,0 +1 @@
+{"11:5":true,"7:12":true,"13:13":true,"12:5":true,"10:12":true,"3:0":true,"8:1":true,"14:1":true,"13:12":true,"3:2":127,"15:1":true,"1:9":true,"15:8":true,"13:14":true,"10:13":true,"14:8":true,"9:13":true,"2:1":true,"12:6":true,"4:3":127,"5:4":true,"5:3":true,"13:8":true,"11:6":true,"10:7":true,"13:1":true,"4:2":[127,202],"14:12":true,"9:7":true,"5:2":true,"9:1":true,"8:12":true,"13:7":true,"12:4":true,"15:13":true,"12:2":true,"2:10":127,"10:8":true,"11:2":true,"7:1":true,"14:13":true,"12:1":true,"10:4":true,"10:3":true,"7:2":true,"11:8":true,"13:6":true,"9:2":true,"10:2":true,"12:8":true,"13:2":true,"9:6":true,"15:5":true,"14:5":true,"10:6":true,"5:1":201,"9:0":true,"6:3":127,"7:0":true,"13:3":true,"11:7":true,"13:4":true,"12:7":true,"6:2":127,"7:6":true,"15:4":true,"0:8":true,"15:3":true,"1:0":127,"14:4":true,"11:13":true,"8:0":true,"14:2":true,"15:2":true,"8:6":true,"3:1":true,"14:6":true,"12:14":true,"10:5":true,"9:5":true,"11:14":true,"15:6":true,"14:0":true,"2:0":true,"11:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_3.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_3.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json
new file mode 100644
index 00000000..8c280ebc
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_7.json
@@ -0,0 +1 @@
+{"13:15":true,"10:14":true,"12:15":true,"11:15":true,"10:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json
new file mode 100644
index 00000000..84dcdb8b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_8.json
@@ -0,0 +1 @@
+{"12:1":true,"12:11":true,"5:9":true,"13:13":true,"7:15":true,"11:1":true,"11:11":true,"6:13":true,"9:15":true,"13:0":true,"8:11":true,"10:15":true,"1:8":true,"13:15":true,"7:13":true,"2:8":true,"10:0":true,"15:8":true,"10:13":true,"6:15":true,"14:8":true,"4:8":true,"9:13":true,"11:0":true,"8:13":true,"3:8":true,"0:8":true,"12:0":true,"6:11":true,"11:13":true,"5:15":true,"12:13":true,"9:1":true,"9:11":true,"10:1":true,"10:11":true,"8:15":true,"12:15":true,"5:13":true,"11:15":true,"13:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json
new file mode 100644
index 00000000..2b778aa2
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/1_9.json
@@ -0,0 +1 @@
+{"15:9":true,"8:8":true,"13:13":true,"7:15":127,"14:9":true,"6:13":127,"15:7":true,"7:14":127,"10:10":true,"8:7":true,"5:5":true,"0:2":true,"9:10":true,"4:5":true,"13:12":true,"3:2":true,"6:14":127,"15:8":true,"13:14":true,"3:4":true,"8:9":true,"7:10":[117,118],"1:7":true,"0:4":true,"14:8":true,"14:14":true,"10:9":true,"7:7":true,"2:15":true,"13:8":true,"15:14":true,"9:9":true,"8:10":true,"7:9":119,"6:8":120,"3:5":true,"15:12":true,"13:1":true,"4:2":true,"15:15":true,"7:8":true,"15:10":true,"14:10":true,"5:6":true,"8:15":true,"15:13":true,"6:7":true,"1:12":[116,117],"13:9":true,"14:13":true,"6:6":true,"5:7":true,"8:11":117,"12:8":true,"14:11":true,"11:9":true,"5:1":true,"3:15":true,"0:12":[117,118],"12:9":true,"3:14":true,"7:6":true,"4:14":true,"11:10":true,"6:5":true,"5:14":127,"2:2":true,"0:8":true,"15:3":true,"11:13":true,"5:12":true,"2:4":true,"14:2":true,"13:11":true,"15:2":true,"12:13":true,"12:14":true,"9:11":true,"1:4":true,"15:6":true,"5:13":true,"1:2":true,"11:15":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json
new file mode 100644
index 00000000..70315fcb
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-1.json
@@ -0,0 +1 @@
+{"10:12":true,"9:12":true,"13:12":true,"11:0":196,"9:9":true,"0:11":205,"10:8":true,"9:8":true,"1:11":205,"8:11":true,"14:11":true,"10:0":197,"15:11":true,"11:12":true,"12:12":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json
new file mode 100644
index 00000000..ea803f53
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-2.json
@@ -0,0 +1 @@
+{"12:11":233,"13:13":true,"6:13":true,"13:0":true,"13:10":234,"14:11":true,"14:1":true,"15:5":[174,175],"13:12":true,"15:1":true,"6:12":227,"15:4":[173,174],"15:3":[173,174],"9:9":[213,215],"11:6":[211,213],"10:7":[211,212],"8:10":214,"13:11":true,"13:1":true,"14:12":true,"12:13":true,"15:0":true,"15:6":[174,175],"14:0":true,"12:12":234} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json
new file mode 100644
index 00000000..06c33ad1
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-4.json
@@ -0,0 +1 @@
+{"9:14":true,"7:12":true,"5:9":true,"13:13":true,"4:9":true,"11:1":true,"9:4":true,"7:4":true,"9:12":true,"0:10":true,"7:14":true,"9:6":true,"4:1":true,"3:12":true,"0:2":true,"7:13":true,"6:4":true,"9:10":true,"5:1":true,"13:12":true,"3:15":true,"3:2":true,"9:0":true,"6:14":true,"6:3":true,"7:0":true,"3:4":true,"0:3":true,"7:10":true,"5:8":true,"0:4":true,"6:15":true,"6:2":true,"7:6":true,"4:8":true,"9:13":true,"11:0":true,"4:14":true,"4:3":true,"5:4":true,"7:7":true,"3:8":true,"5:14":true,"5:3":true,"9:9":true,"4:4":true,"7:9":true,"3:5":true,"4:15":true,"4:2":true,"0:11":true,"9:7":true,"3:1":true,"3:11":true,"5:15":true,"5:2":true,"9:11":true,"9:1":true,"7:8":true,"6:9":true,"5:10":true,"9:5":true,"4:10":true,"7:5":true,"3:9":true,"0:9":true,"9:8":true,"7:11":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json
new file mode 100644
index 00000000..b7f553d7
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-5.json
@@ -0,0 +1 @@
+{"9:14":true,"7:12":true,"6:10":true,"5:9":true,"12:5":true,"7:15":true,"4:9":true,"11:11":true,"11:8":true,"6:13":true,"9:15":true,"9:12":true,"4:7":true,"7:14":true,"4:11":true,"0:2":true,"11:9":true,"7:13":true,"9:10":true,"5:11":true,"3:2":true,"9:0":true,"3:4":true,"0:3":true,"0:14":true,"7:10":true,"6:12":true,"5:8":true,"0:4":true,"4:8":true,"9:13":true,"11:10":true,"5:4":true,"0:8":true,"6:11":true,"4:4":true,"11:13":true,"7:9":true,"6:8":true,"5:12":true,"3:5":true,"2:4":true,"0:1":true,"4:12":true,"3:1":true,"9:11":true,"7:8":true,"6:9":true,"5:10":true,"4:10":true,"11:14":true,"1:4":true,"11:12":true,"5:13":true,"11:15":true,"7:11":true,"7:1":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json
new file mode 100644
index 00000000..175d154e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_-7.json
@@ -0,0 +1 @@
+{"12:11":true,"1:11":true,"2:7":true,"2:12":true,"13:13":true,"1:10":true,"13:8":true,"10:7":true,"5:7":true,"13:11":true,"9:7":true,"4:7":true,"13:10":true,"12:13":true,"10:15":true,"5:15":true,"1:13":true,"1:8":true,"13:15":true,"8:7":true,"2:13":true,"1:14":true,"0:15":true,"11:9":true,"13:12":true,"13:7":true,"3:15":true,"1:9":true,"13:14":true,"1:15":true,"6:7":true,"3:9":true,"12:7":true,"12:12":true,"1:12":true,"1:7":true,"13:9":true,"2:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json
new file mode 100644
index 00000000..046b2dbc
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_0.json
@@ -0,0 +1 @@
+{"1:1":true,"3:0":[196,202],"0:0":[193,203],"8:1":205,"14:1":205,"15:1":205,"11:0":[157,202],"5:4":true,"7:7":true,"12:0":[141,202],"4:4":true,"9:1":159,"5:0":true,"4:0":true,"12:2":true,"11:2":true,"7:1":205,"6:0":true,"7:2":[154,158],"6:6":true,"11:1":156,"13:0":[141,202],"10:2":true,"13:2":[157,159],"6:4":true,"10:0":[142,202],"9:0":[143,202],"6:3":true,"7:0":[152,202],"6:2":157,"1:0":true,"8:0":[150,202],"14:2":158,"0:1":true,"15:0":[198,202],"11:14":214,"14:0":[198,202],"2:0":[196,202],"12:15":true,"11:15":[212,213]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json
new file mode 100644
index 00000000..59e038d9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_10.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":[139,141],"6:10":true,"13:13":true,"0:0":true,"3:6":true,"14:1":true,"13:15":true,"8:7":true,"5:5":154,"4:11":[165,166],"0:2":true,"5:11":[134,176],"13:12":true,"3:2":182,"15:1":true,"13:14":true,"0:3":true,"8:9":true,"7:10":true,"0:4":true,"2:1":true,"14:14":true,"5:4":154,"10:9":true,"7:7":true,"5:3":155,"15:14":true,"9:9":141,"10:7":true,"8:10":true,"7:9":true,"3:5":[169,173],"15:12":true,"14:15":true,"13:1":true,"15:15":true,"14:12":true,"9:7":true,"0:5":true,"7:8":true,"6:9":[134,135],"15:13":true,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":true,"1:5":true,"11:8":true,"13:6":[168,169],"13:0":true,"12:8":true,"14:11":true,"11:9":true,"15:5":[146,173],"14:5":[144,174],"0:12":true,"15:11":true,"12:9":true,"13:3":true,"2:5":true,"13:4":true,"15:4":[147,149],"14:3":true,"4:14":146,"11:10":true,"12:10":true,"5:14":true,"2:2":183,"1:0":true,"5:12":[134,176],"2:4":true,"14:2":true,"13:11":true,"0:1":true,"15:2":true,"4:12":[132,165],"13:5":[145,173],"2:3":[180,183],"15:0":true,"14:6":[168,169],"1:3":true,"1:4":true,"15:6":[168,172],"14:0":true,"2:0":true,"5:13":[167,176],"1:2":true,"4:13":[164,166],"2:6":true,"15:9":true,"12:11":true,"11:5":true,"2:7":true,"12:5":[148,170],"14:9":true,"11:11":true,"6:13":[169,174],"2:9":true,"13:10":true,"10:15":true,"1:8":true,"2:8":true,"15:8":true,"6:12":[140,174],"1:7":true,"14:8":158,"13:8":true,"6:1":156,"12:3":true,"11:4":[139,170],"15:10":true,"14:10":true,"10:1":[171,178],"12:4":[142,174],"11:3":[135,176],"12:2":true,"11:2":[131,178],"13:9":true,"7:1":[154,155],"12:1":true,"10:4":[134,138],"5:9":[170,174],"10:3":[131,173],"6:6":true,"4:9":[166,176],"11:1":[169,170],"9:4":132,"8:5":true,"7:4":true,"4:7":[168,169],"10:2":[174,176],"6:4":true,"10:0":[174,178],"10:6":true,"6:3":true,"7:0":true,"6:2":true,"7:6":true,"4:8":[167,175],"6:5":true,"3:8":true,"0:8":true,"6:11":[136,172],"11:13":true,"8:6":true,"12:13":true,"3:7":true,"12:14":true,"10:5":true,"5:10":[168,176],"9:5":true,"4:10":[166,177],"11:14":true,"12:15":true,"11:12":true,"7:5":true,"3:9":true,"12:12":true,"11:15":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json
new file mode 100644
index 00000000..86d84cb3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_3.json
@@ -0,0 +1 @@
+{"1:4":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json
new file mode 100644
index 00000000..182d0153
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_4.json
@@ -0,0 +1 @@
+{"15:9":true,"1:1":true,"2:7":true,"8:8":true,"7:12":true,"14:9":true,"10:12":true,"6:13":true,"2:9":true,"15:7":true,"0:6":true,"14:7":true,"9:12":true,"3:6":true,"1:8":true,"10:10":true,"8:7":true,"4:11":true,"7:13":true,"2:8":true,"9:10":true,"5:11":true,"3:2":true,"1:9":true,"15:8":true,"10:13":true,"3:4":true,"0:3":true,"8:9":true,"6:12":true,"1:7":true,"14:8":true,"9:13":true,"12:6":true,"4:3":true,"8:13":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"1:10":true,"13:8":true,"9:9":true,"11:6":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"4:2":true,"0:11":true,"9:7":true,"3:11":true,"5:2":true,"1:13":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"2:13":true,"5:6":true,"13:7":true,"2:10":true,"10:8":true,"6:7":true,"1:12":true,"13:9":true,"9:8":true,"9:3":true,"1:11":true,"10:4":true,"3:13":true,"10:3":true,"0:13":true,"7:2":true,"6:6":true,"4:9":true,"9:4":true,"5:7":true,"3:10":true,"11:8":true,"13:6":true,"9:2":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"12:8":true,"13:2":true,"9:6":true,"3:12":true,"11:9":true,"15:5":true,"14:5":true,"10:6":true,"0:12":true,"12:9":true,"13:3":true,"11:7":true,"13:4":true,"12:7":true,"6:2":true,"7:6":true,"4:8":true,"2:11":true,"15:4":true,"14:3":true,"1:6":true,"3:8":true,"0:8":true,"15:3":true,"6:11":true,"14:4":true,"5:12":true,"14:2":[154,157],"0:1":true,"15:2":[154,157],"8:6":true,"4:12":true,"13:5":true,"14:6":true,"9:11":true,"5:10":true,"10:5":true,"3:7":true,"10:11":true,"9:5":true,"4:10":true,"8:2":true,"0:7":true,"15:6":true,"5:13":true,"3:9":true,"0:9":true,"7:11":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json
new file mode 100644
index 00000000..458177bc
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_6.json
@@ -0,0 +1 @@
+{"15:9":true,"1:1":true,"11:5":true,"6:10":true,"12:5":true,"14:9":true,"15:7":true,"3:0":true,"0:6":true,"0:0":true,"14:7":true,"8:1":true,"3:6":true,"13:10":true,"10:10":true,"5:5":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"3:2":true,"15:8":true,"3:4":true,"0:3":true,"7:10":true,"3:3":true,"0:4":true,"6:15":true,"14:8":true,"2:1":true,"12:6":true,"4:3":true,"10:9":true,"13:8":true,"9:9":true,"6:1":true,"11:6":true,"4:4":true,"10:7":true,"8:10":true,"3:5":true,"4:2":true,"0:11":true,"9:7":true,"5:2":true,"0:5":true,"12:3":true,"11:4":true,"9:1":true,"4:6":true,"15:10":true,"5:0":true,"14:10":true,"10:1":true,"5:6":true,"13:7":true,"12:4":true,"11:3":true,"4:0":true,"10:8":true,"13:9":true,"9:8":true,"7:1":true,"9:3":true,"6:0":true,"1:11":true,"10:4":true,"5:9":true,"10:3":true,"1:5":true,"6:6":true,"4:9":true,"9:4":true,"8:5":true,"3:10":true,"7:4":true,"13:6":true,"9:2":true,"10:2":true,"7:3":true,"9:6":true,"4:1":true,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"5:1":true,"9:0":true,"6:3":true,"7:0":true,"13:3":true,"2:5":true,"5:8":true,"13:4":true,"7:6":true,"4:8":true,"15:4":true,"14:3":true,"1:6":true,"6:5":true,"3:8":true,"2:2":true,"15:3":true,"1:0":true,"14:4":true,"5:12":true,"2:4":true,"8:0":true,"0:1":true,"8:6":true,"3:1":true,"13:5":true,"2:3":true,"14:6":true,"10:5":true,"5:10":true,"1:3":true,"9:5":true,"4:10":true,"8:2":true,"1:4":true,"15:6":true,"2:0":true,"8:4":true,"5:13":true,"1:2":true,"7:5":true,"8:3":true,"0:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json
new file mode 100644
index 00000000..3b0bf529
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_7.json
@@ -0,0 +1 @@
+{"4:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json
new file mode 100644
index 00000000..56f5e08c
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_8.json
@@ -0,0 +1 @@
+{"12:11":true,"6:10":[142,201],"7:15":[155,156],"11:11":true,"10:12":true,"9:15":153,"9:12":true,"10:15":[149,154],"13:10":119,"1:8":true,"13:15":[149,153],"4:11":[150,151],"2:8":true,"9:10":120,"13:14":[142,189],"10:13":true,"6:15":[132,160],"9:13":true,"14:14":true,"8:13":true,"15:14":[150,151],"7:9":200,"15:12":[143,190],"14:15":[151,152],"14:12":[142,189],"6:9":true,"15:10":true,"14:10":119,"15:13":true,"9:8":172,"14:13":[142,190],"13:6":[176,177],"3:15":[153,161],"15:11":[142,190],"0:8":true,"13:11":true,"4:15":[133,162],"5:15":[132,161],"12:14":true,"9:11":true,"10:11":true,"12:15":[141,189],"11:12":true,"11:15":[141,188]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json
new file mode 100644
index 00000000..b1c8feb6
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/2_9.json
@@ -0,0 +1 @@
+{"8:8":true,"6:10":true,"13:13":185,"0:6":true,"14:1":191,"13:15":184,"10:10":true,"8:7":true,"5:5":[157,158],"0:2":true,"9:10":true,"13:12":true,"15:1":192,"13:14":185,"0:3":true,"8:9":true,"7:10":true,"0:4":true,"2:1":true,"14:14":184,"4:3":158,"5:4":158,"2:12":true,"10:9":true,"7:7":true,"2:15":true,"15:14":[141,183],"9:9":true,"10:7":true,"8:10":true,"7:9":true,"6:8":158,"3:5":177,"15:12":[132,186],"14:15":[134,183],"13:1":[152,153],"4:2":158,"0:11":true,"15:15":true,"14:12":[152,187],"9:7":true,"3:11":182,"2:14":182,"1:13":true,"2:13":true,"7:8":true,"6:9":true,"1:14":true,"5:0":[132,133],"5:6":158,"4:0":133,"15:13":184,"1:15":true,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":186,"1:11":true,"1:5":true,"0:13":true,"11:8":true,"13:6":true,"13:0":[150,190],"12:8":true,"14:11":188,"13:2":true,"3:12":182,"11:9":true,"15:5":true,"14:5":true,"0:12":true,"15:11":[132,188],"12:9":true,"13:3":true,"11:7":true,"2:5":true,"0:14":true,"13:4":true,"12:7":true,"2:11":true,"15:4":true,"1:6":true,"11:10":true,"12:10":true,"2:2":true,"15:3":192,"14:4":true,"2:4":true,"14:2":192,"13:11":true,"15:2":192,"3:1":158,"13:5":true,"2:3":[174,183],"15:0":192,"14:6":true,"1:3":true,"1:4":true,"15:6":true,"14:0":[152,191],"1:2":true,"2:6":true,"15:9":190,"12:11":true,"11:5":true,"2:7":true,"7:12":true,"12:5":true,"10:14":[174,175],"7:15":[155,157],"14:9":191,"11:11":true,"10:12":true,"2:9":true,"9:12":[154,182],"13:10":true,"10:15":[174,176],"7:14":true,"7:13":true,"2:8":true,"15:8":190,"10:13":true,"6:12":160,"1:7":true,"14:8":191,"9:13":[153,181],"11:0":[141,188],"12:6":true,"8:13":true,"1:10":true,"13:8":true,"12:0":[147,149],"6:1":[132,133],"11:6":true,"11:4":true,"8:12":true,"12:3":true,"15:10":189,"14:10":[132,189],"13:7":true,"12:4":true,"11:3":true,"8:15":154,"12:2":true,"2:10":true,"11:2":true,"8:14":true,"13:9":true,"12:1":[149,151],"10:4":184,"6:6":true,"11:1":[144,189],"3:10":[181,183],"8:11":true,"9:6":true,"10:6":true,"7:6":true,"3:8":[180,182],"0:8":true,"6:11":true,"11:13":[172,185],"12:13":185,"12:14":185,"10:5":true,"9:11":[155,182],"3:7":[179,180],"10:11":true,"11:14":[171,172],"0:7":true,"12:15":184,"11:12":true,"3:9":[181,183],"12:12":true,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json
new file mode 100644
index 00000000..d4457364
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-1.json
@@ -0,0 +1 @@
+{"15:4":true,"15:9":true,"2:12":true,"7:12":true,"15:3":true,"6:11":true,"10:12":true,"15:12":true,"13:11":true,"15:2":true,"14:12":true,"14:7":true,"9:12":true,"4:12":true,"14:6":true,"8:12":true,"3:12":true,"15:10":true,"5:11":true,"0:12":true,"15:11":true,"15:8":true,"11:12":true,"1:12":true,"14:8":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json
new file mode 100644
index 00000000..b6c9743e
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-10.json
@@ -0,0 +1 @@
+{"5:12":true,"4:12":true,"3:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json
new file mode 100644
index 00000000..5b792a9b
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-3.json
@@ -0,0 +1 @@
+{"15:4":true,"14:3":203,"4:14":true,"4:3":true,"12:5":true,"5:14":true,"2:15":true,"7:15":true,"4:9":true,"14:4":true,"4:4":true,"5:12":true,"6:13":true,"4:15":true,"4:2":true,"5:15":true,"5:10":true,"0:15":true,"5:11":true,"3:15":true,"6:14":true,"5:13":true,"1:15":true,"0:14":true,"6:12":true,"13:4":true,"3:14":true,"6:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json
new file mode 100644
index 00000000..2cee3332
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-4.json
@@ -0,0 +1 @@
+{"5:9":true,"4:9":true,"2:9":true,"4:7":true,"0:10":true,"4:11":true,"10:0":182,"5:11":true,"7:0":true,"5:8":true,"4:8":true,"3:8":true,"6:9":true,"5:10":true,"4:10":true,"3:9":true,"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json
new file mode 100644
index 00000000..09062bf7
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-5.json
@@ -0,0 +1 @@
+{"11:5":true,"10:4":true,"10:3":[185,186],"10:14":true,"6:6":187,"10:12":true,"3:0":true,"10:15":true,"10:2":[183,185],"5:5":186,"10:6":true,"10:13":true,"4:3":true,"6:5":187,"5:3":181,"9:7":true,"11:4":true,"10:5":[186,187],"11:3":[183,184],"6:7":187} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json
new file mode 100644
index 00000000..eb9d426f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-6.json
@@ -0,0 +1 @@
+{"12:11":true,"1:1":[188,189],"7:12":true,"6:13":true,"2:9":true,"0:6":true,"13:10":true,"7:14":true,"1:8":true,"0:2":true,"7:13":true,"2:8":true,"5:11":true,"6:14":true,"1:9":true,"0:3":true,"6:12":true,"0:4":true,"2:1":[187,188],"8:13":true,"10:7":214,"0:5":true,"8:14":188,"1:5":true,"9:4":217,"3:10":true,"4:1":185,"3:12":true,"5:14":true,"2:2":[189,190],"0:8":true,"6:11":true,"5:12":true,"13:11":true,"0:1":true,"3:1":[185,186],"5:15":true,"1:3":true,"4:10":true,"1:4":true,"0:7":true,"5:13":true,"1:2":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-7.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-7.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_-9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-9.json
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_-9.json
@@ -0,0 +1 @@
+{} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json
new file mode 100644
index 00000000..0d735233
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_0.json
@@ -0,0 +1 @@
+{"7:12":true,"3:0":true,"0:0":[198,202],"8:7":146,"11:0":true,"2:12":true,"7:7":[146,147],"12:0":true,"6:1":true,"3:5":[151,153],"15:12":222,"13:1":205,"0:11":true,"5:0":true,"5:6":[149,150],"4:0":true,"1:12":225,"6:0":true,"12:1":true,"1:11":true,"0:13":224,"6:6":149,"13:0":true,"8:11":true,"0:10":true,"10:0":true,"5:1":true,"9:0":true,"7:0":true,"2:11":true,"1:0":true,"8:0":true,"15:0":[198,202],"14:0":[198,202],"2:0":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json
new file mode 100644
index 00000000..051878c9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_11.json
@@ -0,0 +1 @@
+{"11:0":152,"12:11":true,"9:3":true,"9:14":true,"6:0":152,"1:1":true,"1:11":true,"1:10":true,"9:9":true,"1:0":true,"11:11":true,"9:4":true,"3:0":153,"13:11":true,"9:15":true,"9:2":true,"0:1":true,"0:0":true,"9:7":true,"9:12":true,"3:1":152,"14:11":true,"9:1":true,"9:6":true,"4:1":152,"1:3":true,"0:2":true,"5:0":153,"10:11":true,"9:5":true,"9:10":true,"5:1":true,"15:11":true,"9:0":true,"4:0":153,"2:0":true,"0:3":true,"1:12":true,"0:4":true,"9:8":true,"9:13":true,"2:1":[150,152]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json
new file mode 100644
index 00000000..dfd5cdf8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_3.json
@@ -0,0 +1 @@
+{"7:12":true,"7:2":true,"7:15":true,"7:4":true,"7:3":true,"7:14":true,"14:1":true,"7:13":true,"2:5":true,"6:12":true,"4:14":true,"6:1":true,"5:12":true,"3:5":true,"14:2":true,"4:15":true,"4:12":true,"8:2":true,"7:1":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json
new file mode 100644
index 00000000..f6207f88
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_4.json
@@ -0,0 +1 @@
+{"6:0":true,"0:6":true,"4:1":true,"0:2":true,"5:1":true,"7:0":true,"0:3":true,"7:10":[167,168],"6:12":172,"0:4":true,"6:15":[173,174],"0:8":true,"9:9":[166,167],"6:11":[166,170],"6:1":true,"10:7":167,"8:10":[164,167],"5:15":[174,176],"0:5":true,"5:0":true,"0:7":true,"4:0":true,"10:8":[166,167],"0:9":true,"7:11":[165,166],"7:1":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json
new file mode 100644
index 00000000..ded0da87
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_5.json
@@ -0,0 +1 @@
+{"5:11":true,"4:10":true,"7:15":[138,171],"8:15":[140,171],"6:14":true,"5:12":true,"6:13":true,"5:13":true,"6:12":true,"6:15":true,"7:14":171} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json
new file mode 100644
index 00000000..e283ddec
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_6.json
@@ -0,0 +1 @@
+{"8:8":true,"7:12":true,"10:14":true,"7:15":true,"10:12":true,"9:15":true,"0:6":true,"9:12":true,"8:1":181,"13:10":[171,172],"10:15":true,"7:14":true,"4:11":true,"7:13":true,"5:11":true,"0:3":true,"8:9":true,"0:4":true,"6:15":true,"8:13":true,"15:14":170,"9:9":true,"15:12":172,"14:12":171,"9:7":true,"0:5":true,"8:12":true,"7:8":true,"15:13":171,"9:8":true,"7:2":183,"8:5":true,"8:11":true,"0:10":true,"7:3":true,"14:11":[170,171],"9:6":[189,190],"12:9":[170,171],"7:0":170,"7:6":true,"4:14":true,"0:8":true,"6:11":true,"4:15":true,"8:6":true,"4:12":true,"5:15":true,"10:11":196,"9:5":[187,188],"8:2":169,"0:7":true,"12:15":194,"8:4":186,"7:5":true,"11:15":true,"8:3":[183,185],"0:9":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json
new file mode 100644
index 00000000..208d6c92
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/3_7.json
@@ -0,0 +1 @@
+{"6:0":true,"7:15":true,"12:0":true,"12:13":true,"10:15":true,"12:14":true,"10:0":true,"5:0":true,"10:1":true,"11:14":true,"4:0":true,"7:0":true,"11:2":true,"6:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json
new file mode 100644
index 00000000..24c0a054
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-1.json
@@ -0,0 +1 @@
+{"1:1":true,"11:11":true,"3:0":true,"4:11":205,"0:2":true,"9:10":225,"3:2":true,"2:1":true,"2:15":true,"8:10":225,"0:11":true,"3:11":205,"2:14":true,"1:13":[164,166],"4:6":true,"1:14":165,"5:0":true,"5:6":true,"4:0":true,"1:12":[198,201],"5:7":true,"8:11":225,"4:7":true,"0:10":true,"4:1":true,"3:15":true,"0:12":[165,202],"5:8":true,"3:14":true,"4:8":true,"2:2":true,"0:1":true,"3:1":true,"9:11":224,"10:11":true,"2:0":true,"1:2":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json
new file mode 100644
index 00000000..eb8125af
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-2.json
@@ -0,0 +1 @@
+{"15:7":true,"14:7":true,"3:15":true,"0:4":212,"2:15":true,"12:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json
new file mode 100644
index 00000000..e604dcb9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-8.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"13:13":true,"10:14":true,"14:9":true,"11:11":true,"10:12":true,"3:0":226,"14:7":true,"9:12":true,"13:10":true,"13:15":true,"10:10":true,"13:12":true,"15:1":210,"15:8":true,"13:14":true,"10:13":true,"14:8":true,"9:13":true,"14:14":true,"12:6":true,"13:8":true,"15:14":true,"15:12":true,"14:15":true,"15:15":true,"14:12":true,"15:10":true,"14:10":true,"13:7":true,"15:13":true,"13:9":true,"14:13":true,"11:8":true,"13:6":true,"12:8":true,"14:11":true,"11:9":true,"15:5":true,"10:0":221,"14:5":true,"15:11":true,"12:9":true,"13:4":true,"12:7":true,"15:4":true,"14:3":true,"11:10":true,"12:10":true,"15:3":true,"14:4":true,"11:13":true,"14:2":210,"13:11":true,"15:2":211,"13:5":true,"12:13":true,"14:6":true,"12:14":true,"10:11":true,"11:14":true,"15:6":true,"12:15":true,"11:12":true,"12:12":true,"11:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json
new file mode 100644
index 00000000..a4276076
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_-9.json
@@ -0,0 +1 @@
+{"0:12":true,"1:12":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json
new file mode 100644
index 00000000..f9d3a234
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_0.json
@@ -0,0 +1 @@
+{"6:10":[212,214],"13:13":true,"7:15":true,"15:7":true,"3:0":[161,202],"0:0":[198,202],"8:1":true,"7:14":true,"5:5":true,"7:13":true,"13:12":true,"7:10":true,"6:15":true,"11:0":[158,204],"4:3":165,"5:4":true,"12:0":[159,199],"4:2":[164,165],"0:11":202,"15:15":true,"9:1":169,"5:0":[198,202],"10:1":168,"12:4":true,"8:15":true,"4:0":[198,202],"12:2":166,"2:10":203,"11:2":167,"8:14":true,"9:3":169,"6:0":[198,202],"1:11":203,"10:3":168,"7:2":true,"11:1":167,"7:4":true,"9:2":169,"13:0":[160,198],"10:2":168,"7:3":true,"13:2":159,"4:1":205,"6:4":true,"15:5":[159,160],"10:0":[198,204],"14:5":159,"9:0":[198,202],"6:3":true,"7:0":[198,202],"13:3":true,"13:4":true,"6:2":true,"2:11":204,"15:4":[159,161],"14:3":true,"6:5":true,"15:3":[158,160],"1:0":true,"14:4":true,"8:0":[198,202],"14:2":160,"15:2":true,"3:1":[162,205],"13:5":true,"14:6":158,"8:2":true,"15:6":true,"2:0":true,"12:15":true,"7:5":168,"3:9":true,"8:3":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json
new file mode 100644
index 00000000..5dd48953
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/4_6.json
@@ -0,0 +1 @@
+{"9:14":true,"8:8":true,"7:12":true,"10:14":true,"7:15":true,"11:11":true,"10:12":true,"6:13":true,"15:7":true,"9:15":true,"9:12":true,"10:15":true,"7:14":true,"13:15":true,"10:10":true,"7:13":true,"9:10":true,"15:1":true,"6:14":true,"10:13":true,"8:9":true,"7:10":true,"6:15":true,"9:13":true,"8:13":true,"10:9":true,"2:15":175,"9:9":true,"8:10":true,"7:9":true,"9:7":true,"8:12":true,"8:15":true,"2:10":150,"1:15":190,"10:8":true,"8:14":true,"8:5":true,"11:8":true,"8:11":true,"12:8":true,"9:6":true,"3:12":158,"11:9":true,"15:5":true,"15:4":true,"11:10":true,"15:3":true,"11:13":true,"15:2":true,"8:6":true,"15:0":true,"9:11":true,"10:11":true,"11:14":true,"15:6":true,"12:15":true,"11:12":true,"11:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json
new file mode 100644
index 00000000..07d74c09
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-5.json
@@ -0,0 +1 @@
+{"9:12":210,"8:15":[205,206]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json
new file mode 100644
index 00000000..9d96fa2f
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-6.json
@@ -0,0 +1 @@
+{"15:4":217,"15:5":216,"15:3":218,"15:6":true,"15:8":true,"15:7":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json
new file mode 100644
index 00000000..7854cd61
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_-8.json
@@ -0,0 +1 @@
+{"1:1":true,"7:12":true,"6:10":true,"7:15":true,"2:9":true,"0:6":true,"3:6":true,"7:14":true,"1:8":true,"5:5":true,"4:11":true,"0:2":212,"7:13":true,"2:8":true,"5:11":true,"4:5":true,"3:2":212,"6:14":true,"1:9":true,"3:4":true,"0:3":true,"7:10":true,"6:12":true,"3:3":212,"0:4":true,"6:15":true,"4:3":212,"8:13":212,"5:4":212,"2:12":true,"5:3":212,"2:15":true,"1:10":true,"4:4":true,"7:9":true,"6:8":true,"3:5":true,"0:11":true,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"8:12":222,"7:8":true,"6:9":true,"4:6":true,"2:13":true,"1:14":true,"5:6":true,"8:15":true,"2:10":true,"1:15":true,"8:14":true,"1:12":true,"1:11":true,"3:13":true,"5:9":true,"1:5":true,"0:13":true,"6:6":true,"4:9":true,"3:10":true,"0:10":true,"3:12":true,"0:15":true,"6:4":212,"3:15":true,"0:12":true,"2:5":true,"0:14":true,"5:8":true,"3:14":true,"4:8":true,"2:11":true,"4:14":true,"1:6":true,"6:5":true,"3:8":true,"5:14":true,"2:2":212,"0:8":true,"6:11":true,"5:12":true,"2:4":true,"4:15":true,"0:1":211,"4:12":true,"5:15":true,"2:3":true,"5:10":true,"1:3":true,"4:10":true,"1:4":true,"5:13":true,"1:2":212,"3:9":true,"0:9":true,"7:11":true,"4:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json
new file mode 100644
index 00000000..53a6fea3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_0.json
@@ -0,0 +1 @@
+{"1:1":true,"7:3":198,"6:3":[196,197],"13:14":193,"5:3":196} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json
new file mode 100644
index 00000000..deaaa360
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_10.json
@@ -0,0 +1 @@
+{"9:14":true,"1:1":[153,171],"11:5":true,"2:7":true,"7:12":true,"6:10":true,"12:5":true,"10:14":true,"10:12":true,"6:13":true,"2:9":true,"3:0":[168,169],"0:6":true,"0:0":true,"9:12":true,"3:6":[171,227],"7:14":true,"14:1":true,"10:10":true,"5:5":true,"0:2":[151,173],"7:13":true,"9:10":true,"4:5":true,"6:14":true,"1:9":true,"10:13":true,"0:3":true,"8:9":true,"7:10":true,"6:12":true,"1:7":true,"9:13":true,"12:6":true,"8:13":true,"2:12":true,"10:9":true,"1:10":true,"12:0":true,"9:9":true,"11:6":true,"8:10":true,"7:9":true,"3:5":true,"13:1":true,"0:11":true,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"12:3":true,"11:4":true,"8:12":true,"6:9":true,"4:6":[171,227],"2:13":true,"1:14":true,"5:0":[169,170],"5:6":[165,227],"12:4":true,"4:0":[168,170],"12:2":true,"2:10":true,"8:14":true,"1:12":true,"12:1":true,"1:11":true,"10:4":true,"3:13":true,"1:5":true,"0:13":true,"6:6":[164,227],"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"13:6":true,"13:0":true,"8:11":true,"4:7":true,"0:10":true,"7:3":true,"13:2":true,"9:6":true,"3:12":true,"14:5":true,"10:6":true,"0:12":true,"13:3":true,"2:5":[172,201],"0:14":true,"13:4":true,"3:14":true,"7:6":[164,227],"2:11":true,"15:4":true,"1:6":true,"6:5":true,"2:2":true,"6:11":true,"1:0":152,"14:4":true,"14:2":true,"0:1":[152,172],"8:6":true,"13:5":true,"14:6":true,"10:5":true,"3:7":true,"9:11":true,"1:3":true,"10:11":true,"9:5":true,"1:4":true,"14:0":true,"2:0":168,"1:2":172,"7:5":true,"3:9":true,"0:9":true,"7:11":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json
new file mode 100644
index 00000000..85efb804
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_7.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"1:1":true,"11:5":true,"2:7":[122,123],"7:12":true,"6:10":true,"13:13":true,"12:5":true,"10:14":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"2:9":true,"3:0":true,"9:15":true,"0:6":true,"0:0":true,"14:7":true,"9:12":true,"3:6":true,"13:10":true,"10:15":true,"7:14":true,"1:8":[120,173],"14:1":true,"13:15":true,"10:10":true,"4:11":true,"0:2":true,"7:13":true,"2:8":[119,171],"9:10":true,"5:11":[170,171],"4:5":true,"13:12":true,"15:1":true,"1:9":[174,175],"13:14":true,"10:13":true,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"1:7":122,"0:4":true,"14:8":true,"9:13":true,"11:0":true,"14:14":true,"12:6":true,"8:13":true,"10:9":true,"5:3":true,"2:15":[175,177],"1:10":true,"13:8":true,"15:14":true,"9:9":true,"11:6":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"0:11":true,"15:15":true,"14:12":true,"2:14":true,"0:5":true,"12:3":true,"11:4":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"2:13":true,"15:10":true,"14:10":true,"10:1":true,"5:6":true,"13:7":true,"12:4":true,"8:15":true,"15:13":true,"12:2":true,"8:14":true,"13:9":true,"7:1":true,"14:13":true,"12:1":true,"1:11":true,"3:13":true,"5:9":126,"1:5":[122,123],"11:1":true,"5:7":true,"11:8":true,"13:6":true,"8:11":true,"4:7":true,"0:10":true,"12:8":true,"14:11":true,"13:2":true,"3:12":true,"11:9":true,"10:0":true,"15:11":true,"12:9":true,"9:0":true,"13:3":true,"11:7":true,"2:5":true,"5:8":true,"13:4":true,"12:7":true,"3:14":176,"6:2":true,"4:8":true,"15:4":true,"14:3":true,"4:14":[172,175],"1:6":[122,123],"11:10":true,"3:8":[118,122],"12:10":true,"5:14":[165,171],"0:8":[174,175],"15:3":true,"6:11":true,"1:0":true,"11:13":true,"5:12":[169,172],"2:4":true,"8:0":true,"14:2":true,"13:11":true,"4:15":[164,174],"0:1":true,"15:2":true,"4:12":true,"13:5":true,"12:13":true,"5:15":true,"15:0":true,"14:6":true,"12:14":true,"9:11":true,"3:7":true,"1:3":true,"4:10":171,"11:14":true,"1:4":true,"0:7":[121,172],"14:0":true,"2:0":true,"12:15":true,"11:12":true,"5:13":[167,173],"3:9":[171,172],"12:12":true,"11:15":true,"0:9":[176,177],"7:11":true,"4:13":174,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json
new file mode 100644
index 00000000..0a576965
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_8.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"9:14":true,"8:8":true,"7:12":true,"6:10":true,"13:13":true,"12:5":true,"10:14":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"9:15":true,"14:7":true,"9:12":true,"8:1":true,"13:10":true,"10:15":true,"7:14":true,"14:1":true,"10:10":true,"8:7":true,"7:13":true,"9:10":true,"5:11":true,"13:12":true,"15:1":true,"6:14":true,"15:8":true,"13:14":true,"10:13":true,"8:9":true,"7:10":true,"6:12":true,"6:15":true,"14:8":true,"9:13":true,"2:1":true,"14:14":true,"12:6":true,"10:9":true,"7:7":true,"2:15":true,"13:8":true,"12:0":true,"9:9":true,"11:6":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"13:1":true,"9:7":true,"12:3":true,"11:4":true,"9:1":true,"7:8":true,"6:9":true,"15:10":true,"14:10":true,"10:1":true,"5:6":true,"13:7":true,"11:3":true,"4:0":[162,169],"12:2":true,"10:8":true,"6:7":true,"11:2":true,"13:9":true,"9:8":true,"14:13":true,"12:1":true,"9:3":true,"10:4":true,"5:9":true,"10:3":true,"6:6":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"11:8":true,"13:6":true,"9:2":true,"13:0":true,"8:11":true,"10:2":true,"12:8":true,"14:11":true,"13:2":true,"9:6":true,"4:1":[160,167],"11:9":true,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"3:15":true,"15:11":true,"12:9":true,"9:0":true,"13:3":true,"11:7":true,"5:8":true,"12:7":true,"7:6":true,"15:4":true,"14:3":true,"11:10":true,"6:5":true,"12:10":true,"15:3":true,"6:11":true,"14:4":true,"11:13":true,"5:12":true,"8:0":true,"4:15":true,"14:2":true,"13:11":true,"15:2":true,"8:6":true,"5:15":true,"13:5":true,"12:13":true,"15:0":true,"14:6":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"10:11":true,"9:5":true,"11:14":true,"8:2":true,"15:6":true,"14:0":true,"2:0":true,"12:15":true,"11:12":true,"5:13":true,"7:5":true,"12:12":true,"11:15":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json b/src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json
new file mode 100644
index 00000000..cd6ee4fd
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/5_9.json
@@ -0,0 +1 @@
+{"12:11":true,"11:5":true,"2:7":true,"8:8":true,"7:12":[156,193],"6:10":true,"13:13":true,"12:5":true,"14:9":true,"10:12":true,"2:9":true,"15:7":true,"0:6":true,"14:7":true,"9:12":true,"3:6":true,"13:10":true,"1:8":true,"14:1":true,"13:15":true,"8:7":true,"5:5":true,"4:11":[154,170],"7:13":[157,193],"2:8":true,"9:10":true,"5:11":[156,158],"4:5":true,"13:12":true,"3:2":true,"15:1":true,"1:9":true,"15:8":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"7:10":[154,161],"3:3":true,"1:7":true,"0:4":true,"14:8":true,"11:0":true,"14:14":true,"12:6":true,"4:3":true,"2:12":true,"10:9":true,"7:7":true,"2:15":155,"1:10":true,"13:8":true,"12:0":true,"11:6":true,"4:4":true,"10:7":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"0:11":true,"14:12":true,"9:7":true,"3:11":true,"2:14":[151,153],"1:13":true,"0:5":true,"2:13":true,"12:3":true,"11:4":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"10:1":true,"5:6":true,"13:7":true,"12:4":true,"11:3":true,"12:2":true,"2:10":true,"1:15":true,"10:8":true,"6:7":true,"11:2":true,"8:14":true,"1:12":true,"13:9":true,"9:8":true,"12:1":true,"9:3":true,"1:11":true,"5:9":true,"10:3":true,"1:5":true,"0:13":true,"4:9":true,"11:1":true,"5:7":true,"3:10":true,"11:8":true,"7:4":true,"13:6":true,"8:11":193,"4:7":true,"0:10":true,"12:8":true,"13:2":true,"3:12":true,"0:15":true,"11:9":true,"15:5":true,"10:0":true,"14:5":true,"0:12":true,"12:9":true,"13:3":true,"11:7":true,"2:5":true,"0:14":true,"5:8":true,"13:4":true,"12:7":true,"3:14":155,"7:6":true,"4:8":true,"2:11":true,"15:4":true,"14:3":true,"1:6":true,"3:8":true,"12:10":true,"0:8":true,"15:3":true,"14:4":true,"11:13":true,"5:12":157,"2:4":true,"14:2":true,"13:11":true,"15:2":true,"4:12":[155,156],"13:5":true,"12:13":true,"2:3":true,"14:6":true,"12:14":true,"3:7":true,"5:10":[155,160],"1:3":true,"4:10":true,"1:4":true,"0:7":true,"15:6":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"3:9":true,"12:12":true,"8:3":true,"0:9":true,"7:11":[155,160],"4:13":157,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json
new file mode 100644
index 00000000..ea179d82
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_-3.json
@@ -0,0 +1 @@
+{"10:14":[203,205],"13:15":true,"14:15":204,"12:14":222,"12:15":true,"5:13":208,"4:13":208} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json
new file mode 100644
index 00000000..57d53e17
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_0.json
@@ -0,0 +1 @@
+{"9:14":true,"7:12":true,"13:13":true,"10:14":true,"7:15":true,"11:11":true,"10:12":true,"6:13":true,"13:6":true,"9:15":true,"9:12":true,"8:11":true,"13:10":true,"10:15":true,"7:14":true,"13:15":true,"10:10":true,"11:9":true,"7:13":true,"10:6":true,"13:12":true,"6:14":true,"13:14":true,"11:7":true,"10:13":true,"6:12":true,"6:15":true,"9:13":true,"14:14":true,"4:14":[188,224],"8:13":true,"10:9":true,"13:8":true,"15:14":true,"6:11":true,"11:13":true,"10:7":true,"14:15":true,"13:11":true,"4:15":true,"15:15":true,"10:5":[212,213],"9:11":true,"8:12":true,"9:5":true,"13:7":true,"11:14":true,"8:15":true,"11:12":true,"11:15":true,"8:14":true,"13:9":true,"7:11":true,"4:13":[188,223]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json
new file mode 100644
index 00000000..106e74e5
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_1.json
@@ -0,0 +1 @@
+{"12:11":171,"9:14":true,"11:5":true,"8:8":true,"7:12":true,"6:10":true,"13:13":[182,186],"10:14":236,"7:15":true,"11:11":[172,237],"10:12":true,"6:13":true,"9:15":235,"0:6":true,"9:12":true,"8:1":true,"13:10":[170,186],"10:15":235,"7:14":true,"14:1":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":[187,221],"7:13":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"15:1":true,"6:14":true,"13:14":true,"10:13":[172,236],"0:3":[187,222],"8:9":true,"7:10":true,"6:12":true,"0:4":[189,222],"6:15":true,"9:13":true,"11:0":true,"14:14":true,"4:3":true,"8:13":true,"10:9":true,"7:7":true,"13:8":[182,186],"15:14":true,"9:9":true,"6:1":true,"11:6":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"0:11":true,"15:15":true,"14:12":true,"9:7":true,"0:5":[192,226],"11:4":true,"9:1":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"15:10":true,"14:10":true,"10:1":true,"13:7":true,"11:3":true,"8:15":true,"4:0":true,"15:13":true,"10:8":true,"6:7":true,"11:2":true,"8:14":true,"13:9":[182,186],"9:8":true,"7:1":true,"14:13":true,"9:3":true,"6:0":true,"1:11":true,"10:4":true,"10:3":true,"1:5":true,"0:13":true,"7:2":true,"6:6":true,"4:9":true,"11:1":true,"9:4":true,"8:5":true,"11:8":true,"7:4":true,"13:6":true,"9:2":true,"13:0":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"12:8":true,"7:3":true,"14:11":true,"13:2":true,"9:6":true,"4:1":true,"0:15":[187,221],"11:9":true,"6:4":true,"15:5":true,"10:0":true,"14:5":true,"10:6":true,"0:12":true,"15:11":true,"12:9":true,"9:0":true,"6:3":true,"7:0":true,"13:3":true,"11:7":true,"2:5":true,"0:14":[187,221],"13:4":true,"6:2":true,"7:6":true,"4:8":true,"2:11":true,"15:4":true,"14:3":true,"4:14":true,"11:10":true,"6:5":true,"12:10":[171,172],"0:8":true,"15:3":true,"6:11":true,"14:4":true,"11:13":true,"8:0":true,"14:2":true,"13:11":true,"4:15":true,"0:1":[187,221],"15:2":true,"8:6":true,"4:12":true,"13:5":true,"12:13":true,"15:0":true,"14:6":true,"12:14":true,"10:5":true,"9:11":true,"10:11":true,"9:5":true,"4:10":true,"11:14":[236,251],"8:2":true,"0:7":true,"15:6":true,"14:0":true,"12:15":true,"11:12":[171,251],"8:4":true,"7:5":true,"12:12":true,"11:15":true,"8:3":true,"0:9":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json
new file mode 100644
index 00000000..0c4de502
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_2.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":[168,232],"11:5":true,"7:12":true,"13:13":true,"12:5":true,"10:14":[168,232],"7:15":233,"11:11":true,"10:12":true,"6:13":true,"9:15":233,"0:0":[149,155],"9:12":true,"8:1":233,"13:10":true,"10:15":[168,233],"7:14":232,"14:1":true,"13:15":true,"10:10":true,"7:13":true,"9:10":true,"13:12":true,"15:1":true,"6:14":true,"13:14":true,"10:13":[165,231],"8:9":true,"7:10":true,"6:12":true,"6:15":true,"9:13":[169,231],"11:0":[234,252],"14:14":true,"12:6":true,"4:3":true,"8:13":[169,231],"5:4":true,"10:9":true,"13:8":true,"15:14":254,"12:0":true,"9:9":true,"6:1":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"14:15":true,"13:1":true,"4:2":true,"15:15":true,"12:3":true,"11:4":true,"9:1":233,"8:12":true,"6:9":true,"10:1":[159,233],"13:7":true,"12:4":true,"11:3":true,"8:15":true,"4:0":true,"12:2":true,"10:8":true,"11:2":true,"8:14":232,"13:9":true,"9:8":true,"7:1":true,"12:1":true,"9:3":231,"6:0":true,"10:4":true,"10:3":true,"7:2":true,"11:1":true,"9:4":true,"8:5":[189,190],"7:4":true,"13:6":true,"9:2":232,"13:0":true,"8:11":true,"10:2":232,"12:8":true,"7:3":231,"13:2":true,"9:6":true,"4:1":true,"11:9":true,"6:4":true,"10:0":[234,240],"10:6":true,"12:9":true,"9:0":[234,240],"6:3":true,"7:0":true,"13:3":true,"11:7":true,"13:4":true,"12:7":true,"6:2":true,"14:3":true,"4:14":[188,224],"6:5":true,"12:10":true,"6:11":true,"14:4":true,"11:13":true,"8:0":true,"14:2":true,"13:11":true,"4:15":true,"15:2":true,"13:5":true,"15:0":true,"10:5":true,"9:11":true,"5:10":true,"10:11":true,"9:5":189,"11:14":true,"8:2":[158,232],"1:4":true,"14:0":true,"11:12":true,"8:4":[228,230],"7:5":true,"11:15":true,"8:3":231,"7:11":true,"4:13":[188,223]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json
new file mode 100644
index 00000000..bb5f8edd
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_3.json
@@ -0,0 +1 @@
+{"15:9":[160,162],"9:14":true,"11:5":[165,237],"8:8":true,"7:12":true,"6:10":true,"13:13":true,"12:5":[164,165],"10:14":true,"7:15":true,"14:9":[161,164],"11:11":true,"10:12":true,"6:13":true,"9:15":true,"0:6":true,"9:12":true,"8:1":[188,235],"13:10":true,"10:15":true,"7:14":true,"14:1":true,"13:15":true,"10:10":true,"8:7":true,"4:11":true,"0:2":true,"7:13":true,"9:10":true,"4:5":true,"13:12":true,"15:1":254,"6:14":true,"13:14":true,"10:13":true,"0:3":true,"8:9":true,"7:10":true,"6:12":true,"0:4":true,"6:15":true,"14:8":[162,163],"9:13":true,"11:0":true,"14:14":true,"12:6":[163,164],"4:3":true,"8:13":true,"10:9":true,"7:7":true,"13:8":[162,186],"15:14":true,"12:0":true,"9:9":true,"6:1":true,"11:6":[164,237],"4:4":true,"10:7":236,"8:10":true,"7:9":true,"6:8":true,"15:12":true,"14:15":true,"13:1":true,"4:2":true,"0:11":true,"15:15":true,"14:12":true,"9:7":true,"0:5":true,"12:3":true,"11:4":[165,251],"9:1":true,"8:12":true,"7:8":true,"6:9":true,"4:6":true,"15:10":[163,254],"14:10":true,"10:1":235,"13:7":[163,186],"12:4":165,"11:3":[165,252],"8:15":true,"4:0":true,"15:13":true,"12:2":true,"10:8":true,"6:7":true,"11:2":true,"8:14":true,"13:9":true,"9:8":true,"7:1":true,"14:13":true,"12:1":true,"9:3":236,"6:0":true,"10:4":[188,236],"10:3":[188,236],"0:13":true,"7:2":true,"6:6":true,"4:9":true,"11:1":true,"9:4":true,"8:5":true,"11:8":true,"7:4":true,"13:6":[165,186],"9:2":236,"13:0":true,"8:11":true,"4:7":true,"10:2":236,"0:10":true,"7:3":true,"14:11":true,"13:2":true,"9:6":true,"4:1":true,"0:15":true,"11:9":true,"6:4":true,"15:5":254,"10:0":[168,234],"14:5":true,"10:6":true,"0:12":true,"15:11":true,"9:0":234,"6:3":true,"7:0":234,"13:3":[167,186],"11:7":true,"0:14":true,"13:4":true,"12:7":162,"6:2":true,"7:6":true,"4:8":true,"15:4":254,"14:3":254,"4:14":true,"11:10":true,"6:5":true,"0:8":true,"15:3":254,"6:11":true,"14:4":254,"11:13":true,"8:0":true,"14:2":254,"13:11":true,"4:15":true,"0:1":true,"15:2":254,"8:6":true,"4:12":true,"13:5":true,"15:0":true,"14:6":true,"10:5":true,"9:11":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":236,"0:7":true,"15:6":true,"14:0":true,"11:12":true,"8:4":true,"7:5":true,"11:15":true,"8:3":true,"0:9":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json
new file mode 100644
index 00000000..5df021c3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_5.json
@@ -0,0 +1 @@
+{"8:8":[161,236],"6:10":true,"13:13":[182,186],"0:6":true,"14:1":true,"13:15":true,"10:10":236,"8:7":[164,236],"5:5":true,"4:11":true,"0:2":true,"9:10":236,"5:11":true,"4:5":true,"13:12":true,"15:1":true,"13:14":[182,186],"0:3":true,"8:9":[162,236],"7:10":236,"0:4":true,"14:14":true,"4:3":true,"2:12":true,"10:9":236,"7:7":true,"2:15":true,"15:14":true,"9:9":236,"4:4":true,"10:7":236,"8:10":236,"7:9":[163,236],"6:8":true,"15:12":254,"14:15":true,"13:1":true,"4:2":true,"0:11":true,"15:15":true,"14:12":254,"9:7":236,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"4:0":true,"15:13":true,"1:15":true,"10:8":236,"6:7":true,"9:8":[160,236],"14:13":254,"1:11":true,"3:13":true,"1:5":true,"0:13":true,"11:8":[236,251],"13:6":[182,186],"13:0":true,"12:8":182,"14:11":true,"13:2":[166,186],"4:1":true,"3:12":true,"0:15":true,"11:9":[236,251],"15:5":254,"14:5":254,"3:15":true,"0:12":true,"15:11":254,"12:9":true,"13:3":[182,186],"11:7":[236,251],"2:5":true,"0:14":true,"13:4":[182,186],"12:7":true,"3:14":true,"2:11":true,"15:4":254,"14:3":254,"4:14":true,"11:10":true,"12:10":true,"5:14":true,"15:3":254,"14:4":254,"14:2":[166,254],"13:11":true,"4:15":[129,227],"0:1":true,"15:2":[165,254],"4:12":true,"13:5":[182,186],"15:0":true,"14:6":254,"15:6":true,"14:0":true,"5:13":[124,128],"4:13":true,"12:11":true,"9:14":236,"11:5":[236,237],"7:12":true,"12:5":182,"10:14":236,"7:15":235,"11:11":true,"10:12":236,"6:13":true,"9:15":235,"9:12":236,"8:1":true,"13:10":true,"10:15":235,"7:14":true,"7:13":true,"6:14":true,"10:13":236,"6:12":236,"6:15":true,"9:13":236,"11:0":true,"12:6":[153,182],"8:13":[126,236],"13:8":true,"6:1":true,"11:6":[236,237],"11:4":[166,251],"9:1":true,"8:12":236,"15:10":254,"14:10":254,"10:1":true,"13:7":true,"12:4":182,"11:3":[166,252],"8:15":true,"12:2":[166,168],"11:2":true,"8:14":[127,236],"13:9":true,"7:1":true,"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"6:6":true,"4:9":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"4:7":true,"10:2":true,"0:10":true,"7:3":true,"9:6":[165,236],"6:4":true,"10:0":true,"10:6":236,"9:0":true,"6:3":true,"7:0":true,"6:2":true,"7:6":236,"4:8":true,"6:5":true,"0:8":true,"6:11":true,"11:13":[236,252],"8:0":true,"8:6":true,"12:13":182,"12:14":182,"10:5":[166,236],"9:11":236,"10:11":true,"9:5":true,"4:10":true,"11:14":[236,251],"8:2":true,"0:7":true,"12:15":182,"11:12":true,"8:4":true,"7:5":true,"12:12":182,"11:15":[235,237],"8:3":true,"0:9":true,"7:11":236} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json
new file mode 100644
index 00000000..23298771
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/6_6.json
@@ -0,0 +1 @@
+{"15:9":[116,232],"12:11":true,"1:1":true,"11:5":true,"2:7":true,"8:8":123,"6:10":125,"7:15":true,"14:9":118,"11:11":true,"2:9":true,"15:7":[116,184],"3:0":true,"9:15":true,"0:0":true,"14:7":[109,184],"8:1":233,"3:6":true,"10:15":true,"1:8":true,"14:1":true,"13:15":true,"8:7":[118,165],"5:5":[112,113],"4:11":true,"0:2":true,"2:8":true,"5:11":true,"4:5":112,"3:2":123,"15:1":true,"1:9":true,"15:8":true,"0:3":true,"8:9":124,"7:10":125,"6:12":true,"1:7":true,"6:15":true,"14:8":true,"2:1":true,"11:0":[234,237],"12:6":[111,115],"4:3":[188,223],"5:4":111,"10:9":[122,123],"7:7":true,"2:15":true,"1:10":true,"13:8":119,"12:0":true,"9:9":[123,124],"6:1":233,"11:6":[112,120],"4:4":111,"10:7":[116,189],"7:9":124,"6:8":[120,123],"14:15":true,"13:1":true,"4:2":[171,224],"0:11":true,"15:15":true,"9:7":[117,121],"11:4":true,"9:1":233,"7:8":123,"6:9":[123,124],"4:6":113,"15:10":[117,118],"14:10":[118,119],"10:1":true,"5:6":[113,117],"13:7":[114,184],"11:3":true,"8:15":true,"4:0":[174,226],"2:10":true,"1:15":true,"10:8":[121,166],"6:7":[117,120],"11:2":true,"1:12":true,"13:9":120,"9:8":[122,164],"7:1":233,"9:3":true,"6:0":234,"1:11":true,"10:4":true,"5:9":[121,122],"10:3":true,"0:13":true,"7:2":232,"6:6":116,"4:9":119,"11:1":true,"9:4":true,"8:5":true,"5:7":[117,121],"3:10":true,"11:8":[120,167],"7:4":true,"13:6":[110,182],"9:2":true,"13:0":true,"4:7":118,"10:2":true,"0:10":true,"12:8":[120,166],"7:3":[110,231],"14:11":true,"13:2":true,"9:6":true,"4:1":[123,225],"3:12":true,"11:9":122,"6:4":[111,230],"10:0":234,"10:6":true,"3:15":true,"0:12":true,"15:11":true,"12:9":[120,121],"9:0":234,"6:3":[110,231],"7:0":234,"13:3":true,"11:7":[116,120],"5:8":[118,122],"13:4":true,"12:7":[114,120],"6:2":232,"7:6":true,"4:8":true,"2:11":true,"6:5":[112,190],"3:8":true,"2:2":true,"0:8":true,"1:0":true,"5:12":true,"8:0":234,"14:2":true,"13:11":true,"4:15":true,"0:1":true,"15:2":true,"8:6":true,"4:12":true,"3:1":true,"13:5":true,"5:15":true,"2:3":true,"15:0":true,"10:5":true,"9:11":true,"5:10":true,"3:7":true,"1:3":true,"10:11":true,"9:5":true,"4:10":true,"8:2":232,"14:0":true,"2:0":true,"12:15":true,"8:4":true,"5:13":true,"1:2":true,"7:5":[115,190],"3:9":true,"11:15":true,"8:3":[109,231],"0:9":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json
new file mode 100644
index 00000000..96e0e727
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-1.json
@@ -0,0 +1 @@
+{"12:1":true,"9:0":233} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json
new file mode 100644
index 00000000..3200d788
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-2.json
@@ -0,0 +1 @@
+{"14:1":true,"4:11":true,"15:1":true,"0:3":true,"0:4":true,"12:0":true,"13:1":true,"0:5":true,"12:2":228,"1:5":true,"11:1":228,"15:4":true,"15:3":true,"5:12":true,"14:2":true,"15:2":true,"15:0":true,"4:10":true,"5:13":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json
new file mode 100644
index 00000000..5d043173
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_-3.json
@@ -0,0 +1 @@
+{"11:11":true,"15:7":true,"12:8":222,"11:9":222,"15:11":true,"15:8":true,"10:9":[222,223],"12:10":true,"15:14":true,"9:9":[222,223],"11:13":true,"15:12":true,"15:15":true,"12:13":true,"15:10":true,"15:6":true,"15:13":true,"12:15":true,"12:12":true,"11:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json
new file mode 100644
index 00000000..eda3d134
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_0.json
@@ -0,0 +1 @@
+{"9:14":true,"10:14":true,"7:15":true,"9:15":true,"10:15":true,"7:14":true,"13:15":true,"13:14":true,"14:14":true,"15:14":true,"15:15":true,"1:14":true,"8:15":true,"1:15":true,"8:14":true,"9:6":true,"0:15":true,"0:14":true,"12:14":true,"11:14":true,"12:15":true,"11:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json
new file mode 100644
index 00000000..f0ae8c33
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_1.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"1:1":true,"11:5":true,"8:8":254,"7:12":true,"13:13":true,"12:5":true,"10:14":true,"7:15":true,"11:11":true,"9:15":true,"0:6":true,"0:0":true,"8:1":true,"10:15":true,"7:14":true,"10:10":true,"0:2":true,"7:13":true,"15:1":true,"0:3":true,"0:4":true,"9:13":true,"11:0":true,"14:14":true,"12:6":true,"8:13":true,"10:9":true,"1:10":true,"15:14":true,"12:0":true,"9:9":true,"11:6":[181,254],"10:7":true,"0:11":true,"15:15":true,"9:7":true,"1:13":true,"0:5":true,"1:14":true,"9:1":true,"11:4":true,"8:12":true,"10:1":true,"12:4":true,"11:3":true,"8:15":true,"15:13":true,"1:15":true,"10:8":254,"8:14":true,"1:12":true,"9:8":254,"7:1":true,"14:13":true,"9:3":true,"1:11":true,"1:5":true,"0:13":true,"7:2":true,"11:1":true,"11:8":[183,254],"7:4":true,"9:2":true,"13:0":true,"10:2":true,"0:10":true,"12:8":true,"7:3":true,"0:15":true,"11:9":true,"10:0":true,"10:6":254,"0:12":true,"12:9":true,"9:0":true,"7:0":true,"13:3":true,"11:7":true,"0:14":true,"12:7":254,"14:3":true,"1:6":true,"11:10":true,"12:10":true,"15:3":true,"1:0":true,"11:13":true,"8:0":true,"14:2":true,"0:1":true,"15:2":true,"15:0":true,"1:3":true,"11:14":true,"8:2":true,"1:4":true,"14:0":true,"11:12":true,"8:4":true,"1:2":true,"7:5":254,"12:12":true,"11:15":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json
new file mode 100644
index 00000000..98887d05
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_2.json
@@ -0,0 +1 @@
+{"9:14":true,"1:1":true,"11:5":true,"10:14":true,"7:15":254,"11:11":true,"9:15":254,"0:0":true,"8:1":true,"10:15":true,"7:14":254,"13:15":true,"0:2":true,"15:1":true,"13:14":true,"11:0":true,"14:14":true,"15:14":true,"12:0":true,"11:6":true,"13:1":true,"15:15":true,"11:4":true,"9:1":true,"1:14":254,"10:1":true,"11:3":true,"8:15":254,"12:2":true,"1:15":true,"11:2":true,"8:14":254,"7:1":true,"12:1":true,"7:2":true,"11:1":true,"11:8":true,"9:2":true,"13:0":true,"10:2":true,"13:2":true,"0:15":true,"11:9":true,"10:0":true,"9:0":true,"7:0":true,"11:7":true,"0:14":254,"11:10":true,"1:0":true,"11:13":true,"8:0":true,"14:2":true,"0:1":true,"15:2":true,"12:14":true,"15:0":true,"11:14":true,"8:2":true,"14:0":true,"12:15":true,"11:12":true,"1:2":true,"11:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json
new file mode 100644
index 00000000..c58be254
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_3.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"1:1":254,"11:5":true,"8:8":true,"7:12":true,"13:13":true,"12:5":true,"10:14":true,"7:15":true,"11:11":true,"9:15":true,"0:6":true,"0:0":254,"8:1":true,"10:15":true,"7:14":true,"10:10":true,"0:2":254,"7:13":true,"15:1":true,"0:3":true,"0:4":254,"9:13":true,"11:0":[181,254],"14:14":true,"12:6":true,"8:13":true,"10:9":true,"2:15":155,"1:10":true,"15:14":true,"12:0":true,"9:9":true,"11:6":true,"10:7":true,"13:1":true,"0:11":254,"15:15":true,"9:7":true,"2:14":[155,156],"1:13":[157,254],"0:5":254,"11:4":true,"9:1":true,"8:12":true,"1:14":254,"10:1":true,"12:4":true,"11:3":true,"8:15":true,"15:13":true,"1:15":true,"10:8":true,"11:2":[183,184],"8:14":true,"1:12":[158,254],"9:8":true,"7:1":true,"14:13":true,"9:3":254,"1:11":[159,254],"1:5":254,"0:13":254,"7:2":true,"11:1":[182,254],"11:8":true,"7:4":254,"9:2":254,"10:2":254,"0:10":[160,254],"12:8":true,"7:3":254,"0:15":true,"11:9":true,"10:0":254,"10:6":true,"0:12":254,"12:9":true,"9:0":254,"7:0":254,"13:3":true,"11:7":true,"0:14":254,"12:7":true,"14:3":true,"1:6":254,"11:10":true,"12:10":true,"15:3":true,"1:0":254,"11:13":true,"8:0":254,"14:2":true,"0:1":254,"15:2":true,"15:0":true,"1:3":true,"11:14":true,"8:2":254,"1:4":true,"11:12":true,"8:4":true,"1:2":true,"7:5":true,"12:12":true,"11:15":true,"8:3":254,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json
new file mode 100644
index 00000000..c3b7ea88
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_4.json
@@ -0,0 +1 @@
+{"9:14":true,"1:1":true,"11:5":true,"8:8":true,"10:14":true,"7:15":true,"11:11":true,"10:12":true,"2:9":true,"9:15":true,"0:6":true,"0:0":true,"9:12":true,"8:1":true,"10:15":true,"7:14":true,"1:8":true,"13:15":true,"10:10":true,"0:2":true,"9:10":true,"15:1":true,"1:9":true,"13:14":true,"10:13":true,"9:13":true,"11:0":true,"14:14":true,"4:3":true,"8:13":true,"2:12":true,"10:9":true,"5:3":true,"1:10":true,"15:14":true,"12:0":true,"9:9":true,"11:6":true,"10:7":true,"14:15":true,"13:1":true,"0:11":true,"15:15":true,"9:7":true,"3:11":true,"2:14":true,"1:13":true,"0:5":true,"11:4":true,"9:1":true,"8:12":true,"2:13":true,"1:14":true,"10:1":true,"12:4":true,"11:3":true,"8:15":true,"12:2":true,"2:10":true,"1:15":true,"10:8":true,"11:2":true,"8:14":true,"1:12":true,"9:8":true,"7:1":true,"12:1":true,"1:11":true,"10:3":true,"0:13":true,"7:2":true,"11:1":true,"9:4":true,"3:10":true,"11:8":true,"9:2":true,"13:0":true,"10:2":true,"0:10":true,"7:3":true,"13:2":true,"3:12":true,"0:15":true,"11:9":true,"10:0":true,"0:12":true,"9:0":true,"7:0":true,"13:3":true,"11:7":true,"0:14":true,"2:11":true,"15:4":true,"14:3":true,"11:10":true,"0:8":true,"15:3":true,"1:0":true,"14:4":true,"11:13":true,"8:0":true,"14:2":true,"0:1":true,"15:2":true,"15:0":true,"12:14":true,"9:11":true,"10:11":true,"11:14":true,"8:2":true,"0:7":true,"14:0":true,"2:0":true,"12:15":true,"11:12":true,"8:4":true,"1:2":true,"11:15":true,"8:3":true,"0:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json
new file mode 100644
index 00000000..106d07c3
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_5.json
@@ -0,0 +1 @@
+{"12:11":true,"9:14":true,"1:1":true,"11:5":[182,254],"8:8":true,"7:12":254,"13:13":true,"12:5":true,"10:14":true,"7:15":true,"11:11":true,"9:15":true,"0:6":true,"0:0":true,"8:1":254,"10:15":true,"7:14":true,"10:10":true,"0:2":254,"7:13":true,"15:1":true,"0:3":254,"0:4":254,"9:13":true,"11:0":true,"14:14":true,"12:6":true,"8:13":true,"10:9":true,"1:10":254,"15:14":true,"12:0":true,"9:9":254,"11:6":true,"10:7":true,"0:11":254,"15:15":true,"9:7":true,"1:13":true,"0:5":254,"11:4":[181,182],"9:1":254,"8:12":true,"1:14":true,"10:1":254,"12:4":true,"11:3":true,"8:15":true,"15:13":true,"1:15":true,"10:8":true,"11:2":[156,165],"8:14":true,"1:12":true,"9:8":254,"7:1":254,"14:13":true,"9:3":254,"1:11":true,"1:5":254,"0:13":true,"7:2":254,"11:1":[156,254],"11:8":true,"7:4":254,"9:2":254,"10:2":254,"0:10":254,"12:8":true,"7:3":254,"0:15":true,"11:9":true,"10:0":true,"10:6":true,"0:12":254,"12:9":true,"9:0":254,"7:0":254,"13:3":true,"11:7":true,"0:14":true,"12:7":true,"14:3":true,"1:6":true,"11:10":true,"12:10":true,"15:3":true,"1:0":true,"11:13":true,"8:0":254,"14:2":true,"0:1":true,"15:2":true,"15:0":true,"1:3":254,"11:14":true,"8:2":254,"1:4":true,"11:12":true,"8:4":254,"1:2":254,"7:5":254,"12:12":true,"11:15":true,"8:3":254,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json
new file mode 100644
index 00000000..6b6caa51
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/7_6.json
@@ -0,0 +1 @@
+{"15:9":true,"12:11":true,"1:1":true,"11:5":true,"2:7":true,"13:13":true,"7:15":[187,223],"14:9":true,"11:11":true,"2:9":[112,236],"15:7":true,"9:15":true,"0:0":true,"14:7":true,"8:1":true,"13:10":true,"10:15":true,"1:8":114,"13:15":true,"10:10":true,"8:7":true,"4:11":[189,221],"0:2":true,"5:11":[192,219],"13:12":true,"15:1":true,"1:9":[110,236],"15:8":true,"13:14":true,"6:12":[109,110],"1:7":true,"6:15":[187,223],"14:8":true,"11:0":true,"14:14":true,"2:12":true,"10:9":true,"7:7":true,"2:15":true,"1:10":[114,115],"13:8":true,"15:14":true,"12:0":true,"9:9":true,"11:6":true,"10:7":true,"8:10":true,"15:12":true,"14:15":true,"13:1":true,"0:11":true,"15:15":true,"14:12":true,"9:7":true,"3:11":[109,222],"11:4":true,"9:1":true,"15:10":true,"14:10":true,"10:1":true,"13:7":true,"11:3":true,"8:15":[187,230],"15:13":true,"12:2":true,"2:10":[110,113],"1:15":true,"6:7":true,"11:2":true,"13:9":true,"7:1":true,"14:13":true,"12:1":true,"1:11":true,"5:9":true,"7:2":true,"4:9":true,"11:1":true,"5:7":true,"9:2":true,"4:7":true,"10:2":true,"0:10":116,"12:8":true,"14:11":true,"13:2":true,"3:12":113,"0:15":true,"11:9":true,"10:0":true,"3:15":true,"15:11":true,"12:9":true,"9:0":true,"7:0":true,"11:7":true,"12:7":true,"2:11":[112,223],"11:10":true,"12:10":true,"0:8":true,"1:0":true,"5:12":[108,111],"8:0":true,"14:2":true,"13:11":true,"4:15":[187,223],"0:1":true,"15:2":true,"4:12":[110,112],"5:15":[187,223],"15:0":true,"3:7":184,"10:11":true,"8:2":true,"0:7":[115,184],"15:6":true,"12:15":true,"1:2":true,"3:9":true,"12:12":true,"11:15":true,"0:9":[111,233]} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json
new file mode 100644
index 00000000..e6dc6263
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-1.json
@@ -0,0 +1 @@
+{"10:4":true,"9:4":true,"9:2":true,"13:0":true,"14:7":true,"8:1":true,"10:2":true,"9:6":true,"10:0":true,"15:11":true,"9:0":true,"7:0":true,"12:7":true,"11:0":true,"12:6":true,"13:8":true,"12:0":true,"11:6":true,"10:7":true,"15:12":186,"15:0":true,"14:6":true,"10:5":true,"14:10":true,"10:1":true,"14:0":true,"13:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json
new file mode 100644
index 00000000..3dbb3534
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_-2.json
@@ -0,0 +1 @@
+{"12:11":true,"1:1":true,"8:8":true,"7:12":true,"13:13":true,"7:15":true,"11:11":true,"3:0":true,"10:15":true,"10:10":true,"13:15":true,"8:7":true,"4:11":186,"0:2":true,"13:12":true,"6:14":true,"14:14":true,"9:9":true,"15:15":true,"9:7":true,"0:5":true,"5:0":true,"10:8":true,"9:8":true,"8:5":true,"7:4":true,"8:11":true,"7:3":true,"9:6":true,"4:1":true,"11:9":true,"6:4":true,"5:1":true,"6:2":true,"7:6":true,"1:6":186,"11:10":true,"6:5":true,"2:2":true,"5:12":186,"0:1":true,"8:6":true,"3:1":true,"12:14":true,"12:15":true,"5:13":true,"7:5":true,"3:9":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json
new file mode 100644
index 00000000..da92c247
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_0.json
@@ -0,0 +1 @@
+{"9:14":true,"4:14":true,"10:14":true,"5:14":true,"7:15":true,"14:15":true,"9:15":true,"10:15":true,"5:15":true,"7:14":true,"13:15":true,"11:14":true,"8:15":true,"6:14":true,"12:15":true,"1:15":true,"11:15":true,"8:14":true,"6:15":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json
new file mode 100644
index 00000000..4b3610ad
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/8_1.json
@@ -0,0 +1 @@
+{"9:14":true,"1:1":true,"11:5":[163,254],"8:8":true,"7:12":true,"6:10":true,"10:14":true,"7:15":true,"11:11":true,"10:12":254,"3:0":true,"9:15":true,"0:0":true,"8:1":true,"10:15":true,"7:14":true,"14:1":true,"8:7":true,"0:2":true,"7:13":true,"3:2":true,"15:1":true,"10:13":true,"0:3":true,"8:9":254,"7:10":[184,254],"6:12":true,"3:3":true,"9:13":true,"2:1":true,"11:0":true,"4:3":true,"7:7":true,"5:3":true,"2:15":true,"12:0":true,"9:9":true,"8:10":254,"7:9":[184,254],"6:8":true,"13:1":true,"4:2":true,"9:7":true,"2:14":true,"1:13":true,"11:4":[163,254],"1:14":true,"9:1":true,"7:8":[183,254],"6:9":254,"2:13":true,"5:0":true,"10:1":true,"11:3":true,"8:15":true,"4:0":true,"12:2":true,"1:15":true,"10:8":true,"6:7":254,"11:2":true,"8:14":true,"9:8":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"3:13":true,"10:3":true,"0:13":true,"7:2":true,"6:6":true,"11:1":true,"7:4":true,"9:2":true,"13:0":true,"10:2":true,"7:3":true,"13:2":true,"0:15":true,"6:4":true,"10:0":true,"3:15":true,"9:0":true,"7:0":true,"13:3":true,"0:14":true,"13:4":[165,167],"3:14":true,"7:6":true,"15:4":[159,166],"14:3":true,"4:14":true,"6:5":true,"2:2":true,"15:3":true,"6:11":true,"1:0":true,"14:4":true,"11:13":254,"8:0":true,"14:2":true,"0:1":true,"15:2":true,"8:6":true,"3:1":true,"2:3":true,"15:0":true,"1:3":true,"11:14":true,"8:2":true,"14:0":true,"2:0":true,"11:12":254,"5:13":true,"1:2":true,"7:5":true,"11:15":true,"7:11":true,"4:13":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json
new file mode 100644
index 00000000..4887712a
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_-1.json
@@ -0,0 +1 @@
+{"9:14":true,"1:6":true,"8:13":true,"7:12":true,"6:10":true,"5:9":true,"1:5":true,"0:13":true,"4:9":true,"3:5":true,"2:4":true,"9:15":true,"0:1":true,"0:0":true,"4:7":true,"3:6":true,"7:14":true,"5:10":true,"1:3":true,"1:14":186,"7:13":true,"5:11":[220,221],"8:15":true,"0:7":true,"1:2":true,"1:15":true,"6:12":true,"5:8":true,"7:11":true,"2:6":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json
new file mode 100644
index 00000000..c4fd1b66
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_1.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"6:10":true,"13:13":true,"3:0":true,"0:0":true,"3:6":true,"14:1":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"4:11":254,"0:2":true,"9:10":true,"5:11":[182,186],"4:5":true,"13:12":true,"3:2":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"3:3":true,"0:4":true,"2:1":true,"14:14":true,"4:3":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"15:14":true,"9:9":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":true,"14:15":true,"4:2":true,"15:15":true,"14:12":true,"9:7":true,"3:11":true,"5:2":true,"2:14":true,"1:13":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:0":true,"5:6":true,"4:0":true,"15:13":true,"1:15":254,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":true,"1:11":true,"3:13":true,"1:5":true,"11:8":true,"12:8":true,"14:11":true,"4:1":true,"3:12":true,"11:9":true,"15:5":[157,158],"14:5":true,"5:1":true,"3:15":true,"15:11":true,"12:9":true,"11:7":true,"2:5":true,"12:7":true,"3:14":true,"2:11":true,"14:3":true,"4:14":true,"1:6":254,"11:10":[160,236],"12:10":[159,236],"5:14":true,"2:2":true,"1:0":true,"14:4":true,"5:12":[182,186],"2:4":true,"14:2":true,"13:11":true,"4:15":true,"0:1":true,"4:12":true,"3:1":true,"13:5":true,"5:15":true,"2:3":true,"14:6":true,"1:3":true,"1:4":true,"15:6":[155,158],"14:0":true,"2:0":true,"5:13":true,"1:2":true,"4:13":true,"2:6":true,"15:9":[154,156],"12:11":true,"9:14":[172,236],"11:5":true,"7:12":[236,251],"12:5":true,"10:14":true,"7:15":true,"14:9":[157,233],"11:11":[159,236],"10:12":true,"6:13":true,"15:7":[155,158],"9:15":true,"14:7":[232,233],"9:12":true,"8:1":true,"10:15":true,"7:14":true,"7:13":[236,252],"6:14":true,"15:8":[155,157],"10:13":true,"6:15":true,"14:8":[158,233],"9:13":true,"11:0":true,"12:6":true,"8:13":[174,236],"1:10":true,"12:0":true,"11:6":true,"11:4":true,"9:1":true,"8:12":true,"12:3":true,"15:10":true,"14:10":[169,232],"10:1":true,"12:4":true,"11:3":true,"8:15":[176,235],"12:2":true,"2:10":254,"11:2":true,"8:14":[175,236],"13:9":[159,160],"7:1":true,"12:1":true,"9:3":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"3:10":254,"7:4":true,"9:2":true,"8:11":true,"10:2":true,"7:3":true,"9:6":true,"10:0":true,"10:6":true,"9:0":true,"7:0":true,"5:8":true,"7:6":true,"6:11":true,"11:13":true,"8:0":true,"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":[157,186],"3:7":true,"10:11":true,"9:5":true,"4:10":254,"11:14":true,"8:2":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"12:12":true,"11:15":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json
new file mode 100644
index 00000000..c7c85d2d
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_2.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"6:10":true,"3:0":true,"0:6":true,"3:6":true,"14:1":true,"13:15":true,"10:10":true,"8:7":true,"5:5":true,"9:10":true,"5:11":true,"4:5":true,"3:2":true,"15:1":true,"3:4":true,"8:9":true,"7:10":true,"2:1":true,"14:14":true,"4:3":true,"5:4":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"9:9":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"14:15":true,"13:1":true,"4:2":true,"9:7":true,"5:2":true,"2:14":true,"7:8":true,"6:9":true,"1:14":true,"5:0":[182,186],"5:6":true,"4:0":254,"1:15":true,"10:8":true,"6:7":true,"9:8":true,"14:13":true,"11:8":true,"13:6":true,"13:0":true,"12:8":true,"13:2":true,"4:1":true,"11:9":true,"15:5":true,"14:5":true,"5:1":[182,186],"3:15":true,"12:9":true,"13:3":true,"11:7":true,"2:5":true,"12:7":true,"3:14":true,"15:4":true,"14:3":true,"4:14":true,"1:6":true,"5:14":true,"2:2":true,"15:3":true,"1:0":true,"14:4":true,"5:12":true,"14:2":true,"4:15":true,"15:2":true,"3:1":true,"13:5":true,"5:15":true,"15:0":true,"14:6":true,"15:6":true,"14:0":true,"2:0":254,"5:13":true,"1:2":true,"2:6":true,"15:9":true,"12:11":true,"9:14":true,"11:5":true,"2:7":true,"7:12":true,"12:5":true,"10:14":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"15:7":true,"9:15":true,"14:7":true,"9:12":true,"8:1":[177,233],"10:15":true,"7:14":true,"1:8":true,"7:13":true,"6:14":true,"15:8":true,"10:13":true,"6:12":true,"1:7":true,"6:15":true,"14:8":true,"9:13":true,"11:0":true,"12:6":true,"8:13":true,"13:8":true,"12:0":true,"6:1":182,"11:6":true,"12:3":true,"11:4":true,"9:1":[132,233],"8:12":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"8:15":true,"12:2":true,"11:2":true,"8:14":true,"13:9":true,"7:1":[181,251],"12:1":true,"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"6:6":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"7:4":true,"9:2":true,"8:11":true,"10:2":true,"7:3":true,"9:6":true,"6:4":true,"10:0":true,"10:6":true,"9:0":[174,240],"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"6:5":true,"0:8":true,"6:11":true,"11:13":true,"8:0":[177,240],"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"10:11":true,"9:5":true,"11:14":true,"8:2":true,"0:7":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"12:12":true,"11:15":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json
new file mode 100644
index 00000000..51fce837
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_5.json
@@ -0,0 +1 @@
+{"1:1":true,"8:8":true,"6:10":true,"13:13":true,"3:0":true,"0:0":true,"3:6":true,"14:1":true,"13:15":172,"10:10":true,"8:7":true,"5:5":true,"4:11":true,"0:2":true,"9:10":true,"5:11":true,"4:5":true,"13:12":true,"3:2":true,"15:1":true,"13:14":true,"3:4":true,"0:3":true,"8:9":true,"7:10":true,"3:3":true,"2:1":true,"14:14":[172,228],"4:3":true,"5:4":true,"2:12":true,"10:9":true,"7:7":true,"5:3":true,"2:15":true,"15:14":[158,171],"9:9":true,"4:4":true,"10:7":true,"8:10":true,"7:9":true,"6:8":true,"3:5":true,"15:12":[172,173],"14:15":[158,227],"13:1":true,"4:2":true,"15:15":[164,170],"14:12":true,"9:7":true,"3:11":true,"5:2":true,"2:14":true,"1:13":true,"2:13":true,"7:8":true,"6:9":true,"4:6":true,"1:14":true,"5:0":true,"5:6":true,"4:0":true,"15:13":[171,172],"1:15":true,"10:8":true,"6:7":true,"1:12":true,"9:8":true,"14:13":[173,229],"1:11":true,"3:13":true,"1:5":true,"11:8":true,"13:6":true,"13:0":true,"12:8":true,"14:11":true,"13:2":true,"4:1":true,"3:12":true,"11:9":true,"15:5":true,"14:5":true,"5:1":true,"3:15":true,"15:11":true,"12:9":true,"13:3":true,"11:7":true,"2:5":true,"13:4":true,"12:7":true,"3:14":true,"2:11":true,"15:4":true,"14:3":true,"4:14":true,"1:6":true,"11:10":true,"12:10":true,"5:14":true,"2:2":true,"15:3":true,"1:0":true,"14:4":true,"5:12":true,"2:4":true,"14:2":true,"13:11":true,"4:15":true,"15:2":true,"4:12":true,"3:1":true,"13:5":true,"5:15":true,"2:3":true,"15:0":true,"14:6":true,"1:3":true,"1:4":true,"14:0":true,"2:0":true,"5:13":true,"1:2":true,"4:13":true,"2:6":true,"15:9":true,"12:11":true,"9:14":true,"11:5":true,"7:12":true,"12:5":true,"10:14":true,"7:15":true,"14:9":true,"11:11":true,"10:12":true,"6:13":true,"15:7":true,"9:15":true,"14:7":true,"9:12":true,"8:1":true,"13:10":true,"10:15":true,"7:14":true,"7:13":true,"6:14":true,"15:8":true,"10:13":true,"6:12":true,"6:15":true,"14:8":true,"9:13":true,"11:0":true,"12:6":true,"8:13":true,"1:10":true,"13:8":true,"12:0":true,"6:1":true,"11:6":true,"11:4":true,"9:1":true,"8:12":true,"12:3":true,"15:10":true,"14:10":true,"10:1":true,"13:7":true,"12:4":true,"11:3":true,"8:15":true,"12:2":true,"2:10":true,"11:2":true,"8:14":true,"13:9":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"10:4":true,"5:9":true,"10:3":true,"7:2":true,"6:6":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"3:10":true,"7:4":true,"9:2":true,"8:11":true,"10:2":true,"7:3":true,"9:6":true,"6:4":true,"10:0":true,"10:6":true,"9:0":true,"6:3":true,"7:0":true,"5:8":true,"6:2":true,"7:6":true,"6:5":true,"6:11":true,"11:13":true,"8:0":true,"8:6":true,"12:13":true,"12:14":true,"10:5":true,"9:11":true,"5:10":true,"10:11":true,"9:5":true,"4:10":true,"11:14":true,"8:2":true,"12:15":true,"11:12":true,"8:4":true,"7:5":true,"12:12":true,"11:15":true,"8:3":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json b/src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json
new file mode 100644
index 00000000..fab5a1e8
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/9_6.json
@@ -0,0 +1 @@
+{"1:1":true,"11:5":true,"2:7":true,"8:8":true,"12:5":true,"7:15":true,"2:9":true,"3:0":true,"9:15":true,"8:1":true,"10:15":true,"14:1":true,"13:15":true,"8:7":true,"5:5":true,"4:11":true,"5:11":true,"3:2":true,"15:1":true,"1:9":true,"1:7":true,"6:15":true,"2:1":true,"11:0":true,"12:6":true,"5:4":true,"5:3":true,"2:15":true,"12:0":234,"6:1":true,"11:6":true,"10:7":true,"14:15":true,"13:1":true,"4:2":true,"0:11":true,"15:15":true,"9:7":true,"3:11":true,"5:2":true,"12:3":true,"11:4":true,"9:1":true,"7:8":true,"5:0":true,"10:1":true,"5:6":true,"12:4":true,"11:3":true,"8:15":true,"4:0":true,"12:2":true,"1:15":true,"10:8":true,"11:2":true,"9:8":true,"7:1":true,"12:1":true,"9:3":true,"6:0":true,"1:11":true,"10:4":true,"10:3":true,"0:13":true,"7:2":true,"11:1":true,"9:4":true,"8:5":true,"5:7":true,"7:4":true,"13:6":true,"9:2":true,"13:0":172,"8:11":true,"4:7":true,"10:2":true,"7:3":true,"13:2":true,"9:6":true,"4:1":true,"0:15":true,"10:0":true,"14:5":true,"10:6":true,"5:1":true,"3:15":true,"9:0":true,"7:0":true,"13:3":true,"11:7":true,"0:14":true,"13:4":true,"12:7":true,"2:11":true,"15:4":true,"14:3":true,"2:2":true,"15:3":true,"6:11":true,"1:0":true,"14:4":true,"8:0":true,"14:2":true,"4:15":true,"15:2":true,"8:6":true,"3:1":true,"13:5":true,"5:15":true,"15:0":true,"10:5":true,"9:11":true,"3:7":true,"9:5":true,"8:2":true,"0:7":true,"14:0":true,"2:0":true,"12:15":true,"8:4":true,"1:2":true,"7:5":true,"3:9":true,"11:15":true,"8:3":true,"0:9":true,"7:11":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/dwarven_data/all.json b/src/main/resources/assets/notenoughupdates/dwarven_data/all.json
new file mode 100644
index 00000000..18d6bee9
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/dwarven_data/all.json
@@ -0,0 +1 @@
+{"1_-6":true,"0_-1":true,"8_8":true,"6_10":true,"-1_-2":true,"-9_5":true,"-2_-9":true,"-1_4":true,"-7_10":true,"-2_5":true,"10_10":true,"-1_6":true,"5_11":true,"4_5":true,"0_-5":true,"0_-3":true,"-1_-4":true,"-3_-10":true,"2_12":true,"5_4":true,"0_-9":true,"7_7":true,"-1_-8":true,"9_9":true,"8_10":true,"7_9":true,"6_8":true,"-4_-9":true,"9_7":true,"-3_-8":true,"0_5":true,"-1_-10":true,"-11_1":true,"5_6":true,"-13_1":true,"10_8":true,"1_11":true,"-9_1":true,"7_16":true,"4_-7":true,"-13_-3":true,"9_16":true,"-12_11":true,"12_8":true,"11_9":true,"1_-8":true,"-13_-1":true,"2_-9":true,"-11_-1":true,"11_7":true,"2_5":true,"1_-10":true,"1_6":true,"-14_11":true,"6_17":true,"12_10":true,"-10_11":true,"-12_0":true,"1_-4":true,"4_12":true,"2_-3":true,"10_17":true,"-1_-6":true,"1_4":true,"-4_-7":true,"-12_-2":true,"0_-7":true,"-3_-6":true,"7_15":true,"11_11":true,"10_12":true,"9_15":true,"7_13":true,"-11_10":true,"6_14":true,"-12_9":true,"6_12":true,"-5_-7":true,"-13_10":true,"9_13":true,"5_16":true,"8_12":true,"6_-7":true,"-10_9":true,"-7_-7":true,"8_14":true,"11_2":true,"2_-11":true,"-5_-9":true,"9_4":true,"8_5":true,"0_-11":true,"-6_11":true,"9_0":true,"-7_-9":true,"11_13":true,"-7_5":true,"-2_-11":true,"9_11":true,"12_12":true,"8_3":true,"7_11":true,"8_-3":true,"0_-4":true,"-1_-3":true,"0_6":true,"-12_1":true,"-1_-5":true,"8_7":true,"4_11":true,"5_5":true,"-2_-10":true,"1_-7":true,"9_10":true,"-1_-1":true,"8_9":true,"7_10":true,"0_4":true,"2_-6":true,"0_-2":true,"-9_6":true,"10_9":true,"-10_1":true,"4_4":true,"10_7":true,"0_11":true,"7_8":true,"6_9":true,"-4_-8":true,"0_-10":true,"-1_5":true,"-3_-9":true,"0_-8":true,"-1_-9":true,"6_7":true,"9_8":true,"5_-7":true,"2_-10":true,"-11_-2":true,"1_5":true,"-11_4":true,"1_-9":true,"-13_-2":true,"10_16":true,"-2_-6":true,"3_12":true,"-11_0":true,"12_9":true,"12_7":true,"6_16":true,"-13_0":true,"2_11":true,"-10_5":true,"11_10":true,"-12_-1":true,"-1_-7":true,"5_12":true,"0_-6":true,"-3_-7":true,"-11_11":true,"9_17":true,"8_16":true,"-13_11":true,"1_-5":true,"-12_-3":true,"-10_10":true,"12_11":true,"9_14":true,"11_5":true,"7_12":true,"-6_-7":true,"6_13":true,"9_12":true,"7_14":true,"5_17":true,"10_13":true,"6_15":true,"1_-11":true,"8_13":true,"-11_9":true,"6_-6":true,"-12_10":true,"8_15":true,"9_3":true,"-5_11":true,"3_-11":true,"8_11":true,"10_2":true,"-1_-11":true,"6_4":true,"10_6":true,"-5_-8":true,"-6_-9":true,"-6_3":true,"6_11":true,"8_6":true,"12_13":true,"-7_11":true,"10_11":true,"8_2":true,"11_12":true,"8_4":true,"-7_-8":true,"-8_10":true} \ No newline at end of file
diff --git a/src/main/resources/assets/notenoughupdates/fuel_bar.png b/src/main/resources/assets/notenoughupdates/fuel_bar.png
new file mode 100644
index 00000000..f15ab522
--- /dev/null
+++ b/src/main/resources/assets/notenoughupdates/fuel_bar.png
Binary files differ